経路Guides
The tool surface
Adako is an MCP server and REST API that connects Claude, ChatGPT, Cursor and other assistants to Google Ads, Meta Ads, ChatGPT Ads and LinkedIn Ads. 203 tools reach your assistant through 26 entries: 15 callable by name and 11 routers.
Why a router
A flat list of 203 tools costs thousands of tokens on every request, and some clients truncate a list that long. So the client sees a short, stable list: the tools people ask for by name, plus a read router and a write router per platform. Everything else is one hop away and costs nothing to discover.
Reads and changes
Assistants such as Claude ask permission per tool, not per call. Looking things up never changes an account, so an assistant that asks permission per tool can allow google_ads once. Every change runs through google_ads_write, which asks each time and creates a proposal.
Callable by name
| Tool | What it does |
|---|---|
| approve_proposal | Approve and execute a pending proposal |
| check_media | Check an image or video before it becomes an ad |
| get_connections_status | Connection health per platform |
| get_tool_schema | Get the exact arguments a tool takes |
| get_usage_status | Plan and task usage |
| list_connected_accounts | List ad accounts (active and inactive) |
| list_pending_proposals | List proposals waiting for approval |
| reject_proposal | Reject a pending proposal |
| search_tools | Find the right Adako tool for a job |
| start_here | Start here — personalised next step |
| switch_primary_account | Switch the primary ad account for a platform |
| google_get_campaign_performance | Google Ads campaign performance with period-over-period change |
| meta_get_campaign_performance | Meta campaign performance |
| chatgpt_get_performance | Read ChatGPT Ads performance |
| linkedin_get_campaign_performance | LinkedIn campaign (ad set) performance |
Routers
| Read router | Write router | Covers | Reads | Changes |
|---|---|---|---|---|
| google_ads | google_ads_write | Google Ads | 31 | 38 |
| meta_ads | meta_ads_write | Meta Ads | 27 | 16 |
| chatgpt_ads | chatgpt_ads_write | ChatGPT Ads | 9 | 13 |
| linkedin_ads | linkedin_ads_write | LinkedIn Ads | 16 | 17 |
| monitoring | monitoring_write | Monitoring and reporting | 6 | 7 |
| diagnostics | — | Diagnostics | 8 | — |
The three actions
A read router takes three actions. Its write router takes one: execute, with a change.
google_ads(action="list_tools")
google_ads(action="get_tool_schema", tool_name="google_pause_campaign")
google_ads(action="execute", tool_name="google_analyze_search_terms",
arguments={"customer_id": "1234567890", "date_range": "last_30_days"})
google_ads_write(action="execute", tool_name="google_pause_campaign",
arguments={"customer_id": "1234567890", "campaign_id": "111"})list_toolsreturns every tool the pair covers, reads and changes, grouped by category, each with a one-line summary and the exact line to call it with. Free, and no task is charged.get_tool_schemareturns the JSON schema, required fields, enums and example prompts for any of those tools, changes included. Free.executeongoogle_adsruns read tools only, and they answer immediately. A change sent there runs nothing and returns the exactgoogle_ads_writecall to make instead.executeongoogle_ads_writeruns change tools only, through the same pipeline as everything else: auth, validation, quota, the proposal gate, execution, read-back, audit. Nothing changes until you approve, in the chat or in the web app, and whatever it creates starts behind a paused switch. It bills the tool’s own cost. A read sent there points back togoogle_ads.
A routed tool is not callable by name
google_analyze_search_terms directly returns tool-not-found with near matches. The router is the address.Finding the right tool
search_tools ranks the whole registry against the user’s own wording, across every platform, and returns the exact line to call each match with. It is free and instant, and it is the right first call whenever the tool is not obvious.
search_tools(query="stop a campaign that is wasting money", top_k=5)
get_tool_schema(tool_names=["meta_pause_entity"])
meta_ads_write(action="execute", tool_name="meta_pause_entity",
arguments={"entity_type": "campaign", "entity_id": "23851..."})Both discovery tools cost nothing, so an assistant never has to guess a name, or which router to send it to: the call line names it. An unknown name returns suggestions rather than a result.
One read across several accounts
A platform’s read router takes an accounts argument on read tools. It runs the tool once per account, one after another, and returns a single consolidated answer.
google_ads(action="execute", tool_name="google_get_campaign_performance",
arguments={"date_range": "last_30_days"}, accounts="all_active")accountstakes a list of account ids or the literal"all_active".- Reads only. The write routers take no
accounts; writes stay one account at a time. - Free, like every read. At most 20 accounts in one call.
- Results are grouped per account, with the currency each one reports in.
Over REST
Routers, read and write, are MCP only. Over the REST API the URL is the dispatch: POST /api/v1/tools/{tool_name}/execute. Same pipeline, same quota, same proposals. search_tools and get_tool_schema work there too, and their call lines come back as the request to send.