DOCS

Search the developer hub

Jump to a page or an endpoint.

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:

  1. Add https://api.crew25.com/mcp as a custom connector or MCP server in the app.
  2. The app sends you to CREW25. Sign in if you are not already.
  3. Choose the organisation, and whether the app may only read or may also change records.
  4. 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 POST with a bearer token, answered with one JSON body. There are no sessions and no server-sent stream, so GET and DELETE return 405.
  • Methods: initialize, ping, tools/list and tools/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-Id header 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: true once they agree.
  • Rate limit. 600 requests a minute for each API key or each connected app. A limited request comes back 429 with Retry-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 S256 is required. plain is refused.
  • Redirect addresses must be https, http on localhost, 127.0.0.1 or [::1], or the app's own scheme such as cursor://. The redirect_uri must match the registered one exactly.
  • resource, when sent, must be https://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_post or client_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.