Getting started
What this is
This is a hub of services for AI agents. An agent reaches them over MCP and over a REST API. Each service is a set of tools: some keep what an agent should still have next time, others answer questions it cannot answer alone.
Every caller acts for an organisation. The organisation is the account: it owns the API keys, the credit and the data. A person who signs up gets an organisation. An agent that signs up gets one too.
Two ways in
Connect your AI. Give your AI the addresses, and approve it when it first connects; it does the rest: it finds out what is offered and starts a free trial of what it needs. On the site, the addresses and a block to paste into your AI's instructions follow this page. An agent reading this over MCP is already connected.
Sign up as a person. Create an account on the sign-up page with a name, an email and a password, then check your inbox. The message has a link: open it, enter your password on the page it opens, and confirm. That verifies your address and signs you in, and your free credit arrives then. An organisation is created for you. You can then add a passkey and sign in without a password. The dashboard is where you manage your organisation, your API keys, your services and your credit.
Keyless sign-up
An agent needs no person to get a credential. One call, with no credential,
creates an organisation and returns its first API key. Send your human's email
address as operatorEmail:
POST /api/v1/signup
Content-Type: application/json
{ "name": "research-agent", "keyName": "primary", "operatorEmail": "<your human's email address>" }
operatorEmail is required; the other fields are optional. A sign-up without
it is refused with 400 and a validation error. Your human is mailed a link;
when they open it and press Confirm, your free credit arrives, and the
confirmed address is how a lost key is replaced later.
Authentication explains why. Every call creates a new
organisation and a new key.
The answer is 201 Created:
{
"data": {
"organizationId": "<the new organisation's id>",
"apiKey": "<the plaintext key — shown once>",
"keyId": "<the key's id>",
"wallet": { "balanceMicro": "0", "balance": "…", "currency": "…" },
"verification": {
"outcome": "requested",
"messagesEnabled": true,
"expiresAt": "<when the link stops working>"
}
},
"_links": {
"self": { "href": "/api/v1/signup" },
"keys": { "href": "/api/v1/keys?organizationId=<the new organisation's id>" },
"wallet": { "href": "/api/v1/wallet" },
"verification": { "href": "/api/v1/account/verification" }
}
}
The wallet starts empty; the free credit arrives when your operator confirms.
verification says what became of the address; its other outcomes, and what
to do about each, are in Authentication.
The keys link is where keys are listed, by a person signed in to the
organisation; your API key is refused there with 401. Your key can rotate or
revoke itself, and no other key: Authentication says how,
and how your operator gets you a new key if you lose it.
This answer is the only place the plaintext key appears. It is stored hashed
and cannot be shown again. Keep it where you keep secrets and never commit it.
Send it as Authorization: Bearer <apiKey> on the REST API.
Sign-up can be refused:
429with aRetry-Afterheader: too many sign-ups from your address, or the platform is taking no new accounts for the moment (SIGNUP_PLATFORM_LIMIT_REACHED). Wait the seconds it gives, then try once.403SIGNUP_DISABLED: sign-up is closed on this deployment. Retrying will not help.413REQUEST_BODY_TOO_LARGE: the body is larger than sign-up accepts.
First calls
Over MCP:
help_explorewith no arguments. It lists every service with its status for your account, a quick start for each one you have on, and the help pages.services_listshows every service and whether it is on.services_enablewith{"serviceId": "...", "trial": true}starts a service's free trial at no cost.account_verification_statussays whether your account's address is verified. Buying credit and turning a service on in full wait on it; trials do not.
Over the REST API:
GET /api/v1/mesays who the credential belongs to: the principal, the organisation, the actor type and how it authenticated.GET /api/v1/account/verificationsays whether your account is verified, and any operator-address request still waiting, with itsstage.
How each credential is issued is in authentication. The REST endpoints are in the API. Connecting a client is in MCP.
Connect your AI
Give your AI these two addresses, or paste the block below into its instructions. It does the rest, and asks you when it needs you.
| MCP endpoint | https://staging.stationzero.services/mcp |
| Sign-up for the REST API, no credential needed | POST https://staging.stationzero.services/api/v1/signup with operatorEmail |
Tell your AI about it
Paste this into your project's AGENTS.md or CLAUDE.md, or give it to your AI as an instruction:
## AI services at https://staging.stationzero.services
This project's AI services are reached over MCP at https://staging.stationzero.services/mcp.
- Your MCP client connects there. The first time, it asks your human to authorize it: they sign in, or create an account, and approve it in their browser. You then act for their organisation. If the server is not in your client's configuration, ask your human to add it.
- Start with `help_explore` and no arguments: it says what the services are, which are on for your account, and lists the help pages. `services_describe` says what a service costs; where it offers a free trial, `services_enable` with `"trial": true` starts one at no cost.
- Anything that costs money is your human's decision: `wallet_top_up` returns a payment link to hand to them.
- The REST API takes an API key, not the MCP token. No key yet? POST https://staging.stationzero.services/api/v1/signup with your human's email address as `operatorEmail` (the Authentication help page explains why): the 201 answer carries `apiKey`, shown once — keep it where you keep secrets and never commit it. Every call creates a new organisation of its own, not your human's, and the key is not accepted at https://staging.stationzero.services/mcp.
Or add the server to your client
For a client that reads an mcpServers file:
{ "mcpServers": { "station-zero": { "url": "https://staging.stationzero.services/mcp" } } }
For Claude Code: claude mcp add --transport http station-zero https://staging.stationzero.services/mcp
A client added this way carries no key. Before its first call it asks you to authorize it: you sign in, or create an account, and approve it in your browser. Your AI then starts with help_explore.