Agent Quickstart
The one path that works today, start to finish. Every step below was executed against the running system before it was written down; the table at the end says where each one is checked.
This is the procedure. For what the platform is, the quota table and the honest list of limits, read For AI Agents or its plain-text original at /llms.txt — that page is the reference and this one does not restate it.
Two of the six steps are not yours to do. They are marked, and no amount of retrying will move them to your side.
Step 1 — a person creates the accounthuman
Account creation happens in the browser at meta-council.com. There is one signup step with two mechanisms — an email address and password, or continuing with a Google account. Either produces the same kind of account; nothing later in this guide depends on which was used.
Note for anyone scripting this: /signup is an alias that
redirects to the homepage, where the form lives. It is not a separate page to
fetch and parse.
Do not assume the free limits apply to a new account. A new account currently starts on a trial at a paid tier rather than on free, and it is treated as free again once that window lapses — the tier is computed when it is read, not by a job that demotes accounts on a schedule. So the quota table on For AI Agents describes a free account, which a fresh one is not yet. Rather than predicting your ceiling, let the platform tell you: when you hit a limit the refusal names which limit it was and when it resets.
Step 2 — that person mints your keyhuman
You cannot mint your own credential. The account holder opens
Settings > Developer API and creates a key. It carries the
mc_ prefix and you send it as
Authorization: Bearer mc_....
Ask your human to do this. There is no self-serve path for an agent.
Three things about the key that will otherwise surprise you later:
- It is shown once. The full key is returned at the moment of creation and never again — only its short prefix is visible afterwards. If it is lost, the fix is a new key, not a lookup.
- It expires. Keys are created with an expiry, 90 days by default. A credential that worked for months and then stops has probably not been revoked; it has aged out. Ask for a fresh one.
- It carries scopes. A key created with the defaults can run councils and read their results, which is everything this guide needs. Tools outside that set — settings, outreach and the rest — need a key minted with the matching scope, and refusing them is not a bug.
Step 3 — connectyou
Nothing to install:
claude mcp add --transport http meta-council https://meta-council.com/mcp --header "Authorization: Bearer mc_YOUR_KEY"
Speaking the protocol directly instead: POST JSON-RPC to
https://meta-council.com/mcp with
Accept: application/json, text/event-stream, beginning with an
initialize call. Bearer keys are the only way in — MCP OAuth is
not implemented.
Step 4 — confirm the endpoint before the key mattersyou
Call list_panels. It takes no arguments and needs no
credential, which makes it the cheapest way to prove you are talking to the
right endpoint and that your transport works. It returns every expert panel
with its description, tags and agent count; the slugs it hands back are what
panel accepts in the next step.
Do the same with tools/list to see what your own credential
actually reaches, rather than trusting any list written on a web page. This
page deliberately names no catalogue size for that reason.
Step 5 — run a councilyou
Call run_council. Only query is required:
{"name": "run_council", "arguments": {"query": "Should we migrate off the monolith this quarter?"}}
Optional arguments: panel (a slug from step 4, or
"auto" to let the platform choose), model, and
wait_seconds — an integer from 0 to 90.
Treat this as asynchronous. wait_seconds
defaults to 0, which returns a session id immediately rather than
holding the connection open. That default exists to stay clear of reverse-proxy
timeouts, so raising it is not free: a synchronous wait is capped at 90 seconds
and a panel can take longer than that. Take the session id and move to step 6.
This is the first step that requires your key. Without one you get a JSON-RPC error telling you to add the bearer header — that response means the endpoint is fine and the credential is missing, which is a different problem from a malformed call.
Step 6 — read the resultyou
Call get_session with the id from step 5:
{"name": "get_session", "arguments": {"session_id": "<the id from step 5>"}}
It returns the finished result: each agent's recommendation, confidence and full reasoning, plus the synthesis, consensus points, dissenting views and risk matrix. Poll it rather than assuming a fixed delay — a panel's duration depends on how many agents it has and which model served it.
What can stop you
Four refusals you should expect to meet, and what each one actually means. All four are the platform telling you something specific — none of them is a reason to retry blind.
| What you see | What it means |
|---|---|
An authentication error naming the Authorization: Bearer mc_... header |
No key was sent, or the one sent is invalid, revoked or expired. The endpoint is working. Note that a malformed credential is refused rather than quietly downgraded to anonymous access, so this can also mean "your header is wrong", not only "you have no key". |
| A rate-limit refusal | You hit a per-hour, per-day or concurrency ceiling. The message names
which one and when it resets, and these carry a Retry-After
header — honour it instead of retrying blind. The numbers live on
For AI Agents. |
| A refusal naming this month's included platform credits | Different from a rate limit: the account has spent its monthly allowance of platform-funded model usage. The message states the amount and the reset date. The way through is the account holder adding their own model API key in Settings, or changing plan — not waiting out a short timer. |
| A service refusal naming the shared weekly AI budget | The platform's own shared model budget for the week is spent, so runs that rely on it are declined until it resets. Again the fix is the account holder supplying their own model key under Settings > Models & API Keys; a run backed by their key is unaffected by the shared pool. |
What this page does not cover
- Workflows. Multi-step runs that pause at human
checkpoints are a separate surface with their own tools. Discover them
through
tools/list. - The rest of the catalogue. Tickets and boards, Sales and outreach, Invoicing, Consulting, Accounting, LOCUS scoring and Legal records are all reachable, most behind scopes this guide's default key does not carry.
- The stdio package. Every tool named here is the hosted
one. The hosted surface and the
meta-council-mcpstdio package are deliberately not identical — do not assume a tool found in one exists in the other. - Sending PHI or ePHI. Don't. That is an absolute limit, not a preference; the Trust & Security page lists what does and does not exist, control by control.
Where each step was verified
Every row was executed or read before the step above was written. The guard file walks this same sequence against the real routes, so these are checks that keep running rather than a record of one afternoon.
| Step | Verified against |
|---|---|
| 1 — account creation | POST /api/auth/register (web/routers/auth.py); the Google mechanism against the live sign-in status endpoint and its redirect to Google's consent screen (web/routers/sso.py) |
| 1 — tier on a new account | trial assignment in web/routers/auth.py; expiry-aware effective_tier in web/auth/deps.py |
| 2 — key minting | POST /api/v1/keys (web/routers/developer_api.py): prefix, single-disclosure message, expiry default and default scope set |
| 3 — connect | initialize against the hosted endpoint (web/routers/mcp.py) |
4 — list_panels | tools/list and an unauthenticated tools/call, both against web/routers/mcp.py |
5 — run_council | tool contract and required scope in web/routers/mcp.py; refused unauthenticated, accepted with a minted key |
6 — get_session | tool contract and required scope in web/routers/mcp.py |
| refusals | the authentication challenge in web/routers/mcp.py; the credit cap in web/rate_limiter.py; the shared-budget decline in web/routers/council_run.py |
Repository paths are given so the claims are auditable by anyone who can read the source. The repository is private, so they are provenance rather than a link you can follow.