{"mcp_url":"https://agent.admiry.ai/mcp","auth":"Authorization: Bearer ak_... (or X-API-Key)","transport":"streamable-http","tools":[{"name":"approve_plan","class":"P","scope":"manage","approval":"code","approval_text":"returns a proposal; the owner confirms with the approval code from their plan page (spend)","summary":"Ask to launch this plan: publish its pages, connect tracking and start the channels within the monthly limit.","description":"Ask to launch this plan: publish its pages, connect tracking and start the channels within the monthly limit. It spends money, so it returns a proposal the owner confirms with the approval code from approval_url (their plan page); then call confirm_proposal with that code. The business must be verified first; otherwise this returns status needs_verification with the page where the owner finishes setup — once verified, call again with a new idempotency_key (a repeat of the old key replays the old answer). The 24-hour setup key from `start` cannot call this.","input_schema":{"additionalProperties":false,"properties":{"plan_id":{"type":"string"},"idempotency_key":{"type":"string"}},"required":["plan_id","idempotency_key"],"type":"object"}},{"name":"confirm_proposal","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Carry out a proposal after the owner agreed.","description":"Carry out a proposal after the owner agreed. Proposals that spend money (launching a plan, raising the limit) need the approval code the owner reads from their plan page: relay it exactly as they say it, e.g. \"48-311\", never guess one. Other proposals are confirmed on the owner's word (a daily limit applies). Use a new idempotency_key per confirmation. The 24-hour setup key from `start` cannot call this.","input_schema":{"additionalProperties":false,"properties":{"proposal_id":{"type":"string"},"idempotency_key":{"type":"string"},"approval_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["proposal_id","idempotency_key"],"type":"object"}},{"name":"create_plan","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Write the marketing plan for this business from its Business Knowledge and goal: the pages to create, local SEO/GEO fixes, which channels to run with how many dollars a month (never above the monthly limit), ad text for the owner to review, tracking to connect, and the estimated monthly leads with its basis.","description":"Write the marketing plan for this business from its Business Knowledge and goal: the pages to create, local SEO/GEO fixes, which channels to run with how many dollars a month (never above the monthly limit), ad text for the owner to review, tracking to connect, and the estimated monthly leads with its basis. Read the lines back to the owner in order; details are on plan_url. Nothing runs until approve_plan is confirmed.","input_schema":{"additionalProperties":false,"properties":{"idempotency_key":{"type":"string"},"goal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["idempotency_key"],"type":"object"}},{"name":"decline_proposal","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Close a proposal the owner does not want, with their reason in a few words.","description":"Close a proposal the owner does not want, with their reason in a few words.","input_schema":{"additionalProperties":false,"properties":{"proposal_id":{"type":"string"},"idempotency_key":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["proposal_id","idempotency_key"],"type":"object"}},{"name":"describe_business","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Tell Admiry what the business does: one or two sentences in the owner's words (what, where, any budget or goal), plus the website if there is one.","description":"Tell Admiry what the business does: one or two sentences in the owner's words (what, where, any budget or goal), plus the website if there is one. Admiry reads up to 20 pages of the site and writes the Business Knowledge every plan is built from: services, area, hours, phone, prices it found. Call this first for a new business, or again when things change. Give `locale` (e.g. 'es-US') only when the owner's language differs from what is on file. Returns the knowledge version and what was found.","input_schema":{"additionalProperties":false,"properties":{"text":{"type":"string"},"idempotency_key":{"type":"string"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["text","idempotency_key"],"type":"object"}},{"name":"get_audit_log","class":"RO","scope":"read","approval":"none","approval_text":"runs as soon as it is called","summary":"What happened on this business, newest first, as plain sentences (\"Muse created plan v2\", \"The owner confirmed proposal …\").","description":"What happened on this business, newest first, as plain sentences (\"Muse created plan v2\", \"The owner confirmed proposal …\"). Paginate with next_cursor; limit at most 100. Use it to answer \"what did you change?\" — a platform key bound to the business also sees the tool rows.","input_schema":{"additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"limit":{"default":50,"type":"integer"}},"type":"object"}},{"name":"get_business","class":"RO","scope":"read","approval":"none","approval_text":"runs as soon as it is called","summary":"What Admiry knows about this business: the latest Business Knowledge (name, services, area, hours, phone, prices, what makes it different), its claim state and the current goal.","description":"What Admiry knows about this business: the latest Business Knowledge (name, services, area, hours, phone, prices, what makes it different), its claim state and the current goal. Call it before proposing changes so you quote what is on file.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"get_plan","class":"RO","scope":"read","approval":"none","approval_text":"runs as soon as it is called","summary":"The current plan (or one by id): the owner-facing lines in order, the estimate with its basis, the channel budgets, the status (draft / approved / superseded) and plan_url where the owner reviews and approves it.","description":"The current plan (or one by id): the owner-facing lines in order, the estimate with its basis, the channel budgets, the status (draft / approved / superseded) and plan_url where the owner reviews and approves it.","input_schema":{"additionalProperties":false,"properties":{"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"type":"object"}},{"name":"get_proposal","class":"RO","scope":"read","approval":"none","approval_text":"runs as soon as it is called","summary":"One proposal: summary, what changes, approval_url and status.","description":"One proposal: summary, what changes, approval_url and status.","input_schema":{"additionalProperties":false,"properties":{"proposal_id":{"type":"string"}},"required":["proposal_id"],"type":"object"}},{"name":"list_keys","class":"RO","scope":"account","approval":"none","approval_text":"runs as soon as it is called","summary":"List the keys issued for this business — ids, labels (muse / claude / chatgpt / web / draft), scopes, expiry, last use — never the keys themselves.","description":"List the keys issued for this business — ids, labels (muse / claude / chatgpt / web / draft), scopes, expiry, last use — never the keys themselves. Needs the `account` scope, which owners grant on /connect (off by default).","input_schema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"list_proposals","class":"RO","scope":"read","approval":"none","approval_text":"runs as soon as it is called","summary":"Open proposals for this business: what each would change, whether it needs the owner's approval code, and when it expires.","description":"Open proposals for this business: what each would change, whether it needs the owner's approval code, and when it expires. Call before confirm_proposal.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"revise_plan","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Change the plan the way the owner asked, in their words: \"no Meta\", \"focus on water heaters\", \"half the budget\".","description":"Change the plan the way the owner asked, in their words: \"no Meta\", \"focus on water heaters\", \"half the budget\". Makes a new draft version (the old one is kept for comparison) within the current goal's monthly limit and returns its lines; approve_plan is needed again.","input_schema":{"additionalProperties":false,"properties":{"plan_id":{"type":"string"},"instruction":{"type":"string"},"idempotency_key":{"type":"string"}},"required":["plan_id","instruction","idempotency_key"],"type":"object"}},{"name":"revoke_key","class":"W","scope":"account","approval":"assistant","approval_text":"ask the owner first, then call (no spend)","summary":"Revoke one of this business's keys immediately (for example a lost draft key or a connector the owner no longer uses).","description":"Revoke one of this business's keys immediately (for example a lost draft key or a connector the owner no longer uses). Needs the `account` scope. IMPORTANT ACTION: confirm with the owner before calling. Use a new idempotency_key per intended revocation; repeating one returns the earlier result without acting again.","input_schema":{"additionalProperties":false,"properties":{"key_id":{"type":"string"},"idempotency_key":{"type":"string"}},"required":["key_id","idempotency_key"],"type":"object"}},{"name":"set_goal","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Record what the owner wants: new customers per month (target) and/or the monthly advertising budget in USD (monthly_budget_usd) — a budget alone is a valid goal — plus services to focus on.","description":"Record what the owner wants: new customers per month (target) and/or the monthly advertising budget in USD (monthly_budget_usd) — a budget alone is a valid goal — plus services to focus on. The budget becomes the monthly limit every plan and every automatic change stays within; raising it later needs the owner's approval code. `autopilot`: 'off' (no automatic changes) or 'safe' (changes within the limit, the default); it stays as set until changed — send the current target or budget with it. Call create_plan afterwards.","input_schema":{"additionalProperties":false,"properties":{"idempotency_key":{"type":"string"},"goal_type":{"default":"customers","type":"string"},"target":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"monthly_budget_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"focus_services":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null},"autopilot":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["idempotency_key"],"type":"object"}},{"name":"start","class":"A","scope":"none","approval":"none","approval_text":"runs as soon as it is called","summary":"Begin for a business that has no key yet: one or two sentences on what it does, where, and what the owner wants (customers per month, monthly budget), plus the website if there is one.","description":"Begin for a business that has no key yet: one or two sentences on what it does, where, and what the owner wants (customers per month, monthly budget), plus the website if there is one. Admiry reads the site, looks the business up on Google Maps, writes its Business Knowledge, records the goal and drafts the first plan. Returns business_id, a 24-hour draft_key (send it as the Bearer key on every later call: it can read and draft but not publish or spend), connect_url where the owner finishes setup, listing_question to confirm with the owner when a listing was found, and the plan summary lines. 3 calls per hour per address, one at a time.","input_schema":{"additionalProperties":false,"properties":{"text":{"type":"string"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"locale":{"default":"en-US","type":"string"}},"required":["text"],"type":"object"}},{"name":"update_business","class":"W","scope":"manage","approval":"none","approval_text":"runs as soon as it is called","summary":"Correct or add facts the owner tells you (a new service, new hours, a phone number, an area, prices) as a patch of Business Knowledge fields: name, category_detail, service_area, services, hours, phone, website, pricing_hints, usp, reviews_summary, compliance_flags, locale; `ai_crawlers: false` turns AI crawlers off for the storefront.","description":"Correct or add facts the owner tells you (a new service, new hours, a phone number, an area, prices) as a patch of Business Knowledge fields: name, category_detail, service_area, services, hours, phone, website, pricing_hints, usp, reviews_summary, compliance_flags, locale; `ai_crawlers: false` turns AI crawlers off for the storefront. Creates a new knowledge version the owner can check with get_business. Confirm the wording with the owner first.","input_schema":{"additionalProperties":false,"properties":{"patch":{"additionalProperties":true,"type":"object"},"idempotency_key":{"type":"string"}},"required":["patch","idempotency_key"],"type":"object"}},{"name":"whoami","class":"RO","scope":"read","approval":"none","approval_text":"runs as soon as it is called","summary":"Who is calling: the business this key belongs to (id, claim state draft / claimed / verified, status, locale) and the key's class, scopes, label and expiry.","description":"Who is calling: the business this key belongs to (id, claim state draft / claimed / verified, status, locale) and the key's class, scopes, label and expiry. Call this first in a session. If the key is a 24-hour draft key, tell the owner to finish setup at connect_url before anything can publish or spend.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"}}]}