Connect an AI agent
Give Claude, ChatGPT, Cursor or your own agent CREW25's tools over the Model Context Protocol.
CREW25 runs a Model Context Protocol server with the same tools as CREW25's own agent. An AI app connected to it can look up jobs, quotes and hours, plan the schedule, draft quotes, send invoices and more, as a person in the organisation and never more than that person could do in the office. The full list is on MCP tools.
The server's address is:
https://api.crew25.com/mcp
The office shows the same address, with the apps that are connected and the tools they are offered, under Settings → Developer → MCP.
Connect an AI app
Apps that support remote MCP servers with sign-in, such as Claude, ChatGPT and Cursor, need only the address:
- Add
https://api.crew25.com/mcpas a custom connector or MCP server in the app. - The app sends you to CREW25. Sign in if you are not already.
- Choose the organisation, and whether the app may only read or may also change records.
- Approve. The app is now connected as you.
Anyone in an organisation except a subcontractor can connect an app to read. Office people, admins and owners can also give it read and write access.
Each approval is one connection: this app, this person, this organisation and this access. Owners and admins see every connection under Settings → Developer → MCP → Connected apps, with who approved it and when it was last used, and Revoke ends one on its next request. Someone who leaves the organisation loses their connections with it.
Connect your own agent with an API key
For automation that has no person to sign in, use an API key as the bearer token:
curl https://api.crew25.com/mcp \
-H "Authorization: Bearer crew25_sk_…" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
A key acts as the owner or admin who created it, so their name is on everything it changes. A read
only key is offered only the tools that change nothing. If the person who created the key leaves
the organisation, the key stops working on the server with 401; create a new one.
How the server works
- Stateless Streamable HTTP. Every request is one JSON-RPC
POSTwith a bearer token, answered with one JSON body. There are no sessions and no server-sent stream, soGETandDELETEreturn405. - Methods:
initialize,ping,tools/listandtools/call. There are no resources or prompts. - One organisation per token. The token decides the organisation, so there is nothing to put in
the URL. Sending an
X-Organisation-Idheader that names another organisation is refused. - Read or write. A read-only token is offered only tools that change nothing, and calling any other is refused. When the organisation's subscription has lapsed, reads keep working and tools that change records are refused.
- Previews before big changes. Tools that cannot be undone, such as voiding an invoice, return
a preview first. Show it to the person, then call the tool again with
confirmed: trueonce they agree. - Rate limit. 600 requests a minute for each API key or each connected app. A limited request
comes back
429withRetry-After: 60.
Signing in, for client developers
If you are building an MCP client, CREW25 follows the MCP authorization specification with OAuth
2.1. A request with no token, or a token that is no longer valid, gets 401 with a
WWW-Authenticate header that points to the resource metadata:
WWW-Authenticate: Bearer resource_metadata="https://api.crew25.com/.well-known/oauth-protected-resource/mcp"
From there a client finds everything it needs:
| Endpoint | What it is |
|---|---|
GET /.well-known/oauth-protected-resource |
Protected resource metadata (RFC 9728) |
GET /.well-known/oauth-authorization-server |
Authorization server metadata (RFC 8414) |
POST /oauth/register |
Dynamic client registration (RFC 7591) |
GET /oauth/authorize |
Starts sign-in and sends the person to CREW25 |
POST /oauth/token |
Exchanges a code, or refreshes a token |
POST /oauth/revoke |
Revokes a token and its connection (RFC 7009) |
The rules a client has to meet:
- PKCE with
S256is required.plainis refused. - Redirect addresses must be
https,httponlocalhost,127.0.0.1or[::1], or the app's own scheme such ascursor://. Theredirect_urimust match the registered one exactly. resource, when sent, must behttps://api.crew25.com/mcp.- Codes last ten minutes and work once. Access tokens start
crew25_at_and last an hour. Refresh tokens last 60 days and change every time they are used; using one twice ends the connection, as a stolen token would. - Clients may be public (
none) or confidential (client_secret_postorclient_secret_basic). A confidential client's secret is shown once, at registration. - Registration is limited to 30 an hour from one address.
There is one scope, mcp. The person chooses read or read and write when they approve the app.