Admiry — connector documentation

Admiry is an AI marketing agent for local and service businesses. This page is written for the assistant (Meta Muse, ChatGPT, Claude) that will build a bridge to it. Everything here is also at /connect/llms.txt (plain text) and /connect/tools.json (tool schemas).

Endpoint

MCP serverhttps://agent.admiry.ai/mcp — Model Context Protocol, streamable HTTP, stateless (every POST stands alone; JSON responses)
AuthAuthorization: Bearer ak_… (or X-API-Key: ak_…). Keys are issued to the business owner on https://agent.admiry.ai/connect. start needs no key.
Rate limits60 calls per minute and 2,000 per day per key; over the limit the error text carries retry_after=<seconds>.

Paste this into Meta Muse

Build a custom integration to Admiry. MCP server https://agent.admiry.ai/mcp (streamable HTTP). Auth header `Authorization: Bearer` — I'll give the key in the secure prompt. Read https://agent.admiry.ai/connect/docs first. Test each tool and save it as a skill.

Tools

A needs no key (rate-limited) · RO reads · W writes with no spend and no public effect · P proposes: returns {status: 'proposed', proposal_id, approval_url} and runs only after the owner confirms. Every W/P tool takes an idempotency_key; repeating a call with the same key returns the earlier result.

ToolClass · scopeWhat it doesBefore calling
approve_planP · manageAsk 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.returns a proposal; the owner confirms with the approval code from their plan page (spend)
confirm_proposalW · manageCarry 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.runs as soon as it is called
create_planW · manageWrite 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.runs as soon as it is called
decline_proposalW · manageClose a proposal the owner does not want, with their reason in a few words.runs as soon as it is called
describe_businessW · manageTell 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.runs as soon as it is called
get_audit_logRO · readWhat 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.runs as soon as it is called
get_businessRO · readWhat 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.runs as soon as it is called
get_planRO · readThe 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.runs as soon as it is called
get_proposalRO · readOne proposal: summary, what changes, approval_url and status.runs as soon as it is called
list_keysRO · accountList 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).runs as soon as it is called
list_proposalsRO · readOpen proposals for this business: what each would change, whether it needs the owner's approval code, and when it expires. Call before confirm_proposal.runs as soon as it is called
revise_planW · manageChange 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.runs as soon as it is called
revoke_keyW · accountRevoke 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.ask the owner first, then call (no spend)
set_goalW · manageRecord 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.runs as soon as it is called
startA · noneBegin 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.runs as soon as it is called
update_businessW · manageCorrect 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.runs as soon as it is called
whoamiRO · readWho 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.runs as soon as it is called

Errors and statuses

missing keyno Authorization header; owners get a key on /connect — `start` needs none
this key lacks the 'X' scopethe key was issued without that scope; re-issue it on /connect
rate limit: … retry_after=Nwait N seconds (60 calls per minute and 2,000 per day per key; 30 changes per hour per business; `start` 3 per hour per address)
another request from this address is in progress / Admiry's free setup is busy today`start` runs one call per address at a time and has a daily ceiling: retry in a moment, or tomorrow
today's limit of N drafts for this business is reacheddescribe_business, create_plan and revise_plan are capped per business per day (lower on the 24-hour setup key): try tomorrow
a setup key cannot approve or confirm spendingthe 24-hour key from `start` reads and drafts only; the owner finishes setup on /connect for a lasting key
unknown key / this key was revoked / this key expiredthe key is wrong, revoked or past its 24-hour draft life; the owner issues a new one on /connect
this business has expired; run `start` to begin againthe draft or unverified claim lapsed; start over
idempotency_key already used for a different request; use a new keyeach distinct W/P request needs its own key — only an exact repeat replays the earlier result; an empty key is rejected
{status: 'proposed', proposal_id, approval_url}a P tool returned a proposal; call confirm_proposal after the owner agrees — spend-class proposals also need the approval code
{status: 'needs_verification', verify_url}the business is not verified yet; send the owner to verify_url
this change spends money: it needs the approval code from the owner's plan pagea spend-class proposal; the owner reads the code from approval_url (their plan page) and you pass it to confirm_proposal exactly as said

Terms and privacy

Terms and the privacy policy are published before the public directory listing; until then the early-access agreement is the founder's e-mail.