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:

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 seeWhat 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

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.

StepVerified against
1 — account creationPOST /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 accounttrial assignment in web/routers/auth.py; expiry-aware effective_tier in web/auth/deps.py
2 — key mintingPOST /api/v1/keys (web/routers/developer_api.py): prefix, single-disclosure message, expiry default and default scope set
3 — connectinitialize against the hosted endpoint (web/routers/mcp.py)
4 — list_panelstools/list and an unauthenticated tools/call, both against web/routers/mcp.py
5 — run_counciltool contract and required scope in web/routers/mcp.py; refused unauthenticated, accepted with a minted key
6 — get_sessiontool contract and required scope in web/routers/mcp.py
refusalsthe 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.