AI agents (MCP)
Toolsets and tools
How the AmICited MCP server exposes over 300 tools without flooding your agent’s context: a small advertised set, four meta-tools for finding and running the rest, and twelve toolsets.
The AmICited MCP server registers over 300 tools, one for everything the dashboard can do. Handing all of those definitions to a model on every request would use a large share of its context before it did any work, and models pick tools worse from a very long list. So the server discloses them progressively: your client sees a short list, and the agent looks up the rest when it needs them.
You do not have to manage any of this. Agents follow the pattern on their own, guided by the server’s instructions and the using-amicited skill. This page explains what they are doing so you can read a transcript, or narrow the surface on purpose.
What your client sees#
tools/list advertises a small, fixed set:
| Tool | What it is for |
|---|---|
list_domains | The domains in the workspace, with the ids every other tool needs |
list_prompts | Tracked prompts for a domain |
list_competitors | Tracked competitors for a domain |
list_tags | Prompt tags for a domain |
prompt_analytics | The headline AI visibility numbers |
report_link | A working link to any report or settings page in the app |
list_toolsets | The twelve product areas, one line each, with tool counts |
search_tools | Find a tool by what you want to do |
describe_tool | Read one tool’s full input schema |
read_tool | Run a read-only tool by name |
run_tool | Run any tool by name, including writes and credit-spending tools |
Because this list never changes during a conversation, the client’s prompt cache stays valid, which keeps long sessions fast and cheap.
Find, inspect, run#
Every other tool is reached in three steps:
search_tools {"query": "which prompts cite competitors but not us"}
describe_tool {"name": "seo_get_citation_gap_invisible_winners"}
read_tool {"name": "seo_get_citation_gap_invisible_winners", "arguments": {...}}search_toolsranks tools by name, description and toolset. It works best with the question in plain words (“is the site down”, “customer lifetime value”) rather than a half-remembered name. Passtoolsetwith an empty query to browse one area, and raiseoffsetto page through a large one.describe_toolreturns the real argument schema and the tool’s kind. Agents should always call it before running a tool, because some tools take flat arguments and others a nestedqueryobject.read_toolruns tools whose kind isread: free, repeatable reads of your own data. It refuses anything else, which is why it is marked read-only and why cautious clients (for example Codex with approvals turned off) can use it without stopping to ask.run_toolruns everything, including the other three kinds:
| Kind | Meaning |
|---|---|
read | Reads your workspace data. Free. |
external | Calls a third-party API (Google, Bing, Meta, OpenAI, data providers) or costs credits |
write | Creates or edits workspace data. Needs the amicited:write scope |
destructive | Deletes data, or starts and stops real ad spend |
A tool that is not advertised is not less protected. Every tool checks permissions, plan limits and credits itself, and run_tool applies the target tool’s own write check, so a read-only token cannot reach a write through it.
The twelve toolsets#
Every tool belongs to exactly one toolset. Agents use them to decide where to search, and you can use them to pin an area (see below).
| Toolset | What it covers | Example tools |
|---|---|---|
domains | Domains, competitors and tags: the ids every other toolset takes | list_domains, create_competitor, create_tag |
prompts | Tracked prompts and their answers: create, schedule, read responses, fan-outs, coverage | create_prompts_bulk, list_prompt_responses, prompt_query_fanouts, get_prompt_coverage |
visibility | Where the domain shows up in AI answers: metrics over time, cited sources, share of voice, semantic maps | get_dashboard_metrics, get_prompt_detail, get_citations_timeseries, list_top_cited_domains |
organic_search | Google Search Console and Bing Webmaster Tools: queries, pages, index coverage, sitemaps, URL submission | gsc_get_queries, gsc_inspect_url, bing_wmt_get_pages, indexnow_submit |
paid_ads | Google Ads, Microsoft Ads, Meta and LinkedIn reporting: spend, campaigns, keywords, search terms, true ROAS | google_ppc_get_search_terms, bing_ppc_get_campaigns, meta_profit_true_roas, linkedin_performance |
chatgpt_ads | ChatGPT Ads: read performance, and create or edit campaigns, ad groups, creatives and conversion tracking | ads_get_insights, ads_list_campaigns, ads_create_campaign |
seo_reports | Warehouse-built organic analysis: movers, striking distance, CTR and citation gaps, cannibalization, index bloat | seo_get_striking_distance, seo_get_citation_gap_invisible_winners, seo_get_cannibalization_queries |
eshop | Ecommerce analytics: revenue and margin, products, customers, cohorts and LTV, segments, cost inputs | eshop_get_kpis, eshop_get_products, eshop_get_ltv, eshop_get_cost_mix |
uptime | Monitors, heartbeats, incidents, SLA reports, maintenance windows, status pages | uptime_list_monitors, uptime_sla_report, heartbeat_create, status_page_create |
content | AI articles, annotations, and internal linking rules for a connected shop | article_generate, annotation_create, link_building_list_rules |
audits | Site health for AI agents: agent accessibility, llms.txt review, Web Vitals, freshness, site audit, backlinks | get_agent_accessibility, llms_txt_get_comparison, get_web_vitals, backlinks_list |
workspace | Connected data platforms, sync status, imports, and the notification inbox | platform_list_domain_connections, platform_get_sync_status, inbox_list_entries |
Tool names are prefixed by area (gsc_, bing_wmt_, google_ppc_, meta_, eshop_, uptime_, ads_), which makes transcripts easy to scan.
Pinning toolsets with ?toolsets=#
Some clients handle a nested run_tool call poorly, and sometimes you want a narrow agent that only sees one area. Add a query parameter to the connection URL:
https://api.flowhunt.io/mcp/amicited?toolsets=eshop,uptime
https://api.flowhunt.io/mcp/amicited?toolsets=allThe named toolsets are then advertised natively in tools/list, next to the core set. all advertises everything, which gives up the context savings, so use it only with clients that do their own tool search. Unknown names are ignored rather than rejected, so check the spelling if an area does not appear. The selection is fixed for the life of the connection; no tool can widen it mid-conversation.
Pages, fields and limits#
- Pages of 25 rows. Every tool that returns a list of rows returns 25 by default, up to a maximum of 500 per call. When more rows exist, the response includes a
pagingblock withhas_moreand the value to pass on the next call (a native offset or page, or anext_cursor). fields. Tools that return one list of rows accept afieldsarray to return only the columns you need. A column the rows do not have is refused, not ignored.- No workspace argument. The workspace is fixed by your credential, so no tool accepts a workspace id. Almost every tool does need a
domain_idfromlist_domains. - Hourly cap. Tool calls are counted per workspace per hour (see connect). Listing tools and reading skills are free; a hidden tool reached through
read_toolorrun_toolcounts once.