SuperBooks MCP
Work with your SuperBooks books: transactions and categories, invoices, customers, receipts, time tracking and financial reports. Remote server with OAuth sign-in.
Hosted MCP Server
npx add-mcp 'https://app.superbooks.io/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Point Claude, Claude Code, Cursor, or any MCP client at SuperBooks over the remote URL.
SuperBooks is an MCP server, so any MCP-capable client can use it without a plugin or an adapter. The endpoint is:
https://api.superbooks.io/mcp
It speaks Streamable HTTP, and clients connect to that URL directly.
What a client sees
Connect any MCP client and its tools/list shows exactly two tools: search_tools and execute_typescript. This is Code Mode: instead of one MCP tool per SuperBooks operation, the assistant calls search_tools to discover the operations your credential can reach, then writes and runs a short TypeScript program with execute_typescript that calls them. The 46 real SuperBooks tools (45 across 12 domains, plus list_teams) are reached this way rather than listed directly — see The tool surface. Each one still carries its own scope and authentication exactly as if the client had called it directly. The 120-per-minute rate limit counts MCP requests, not tool calls: one request counts once, whether it runs a single tool or an execute_typescript program that calls several.
Choosing between a key and OAuth
Clients that support remote MCP servers with OAuth — Claude among them — can sign you in through the SuperBooks consent screen. Nothing to copy, nothing to store, and access is revocable from the app.
Clients that expect a static header want an API key instead. Mint one at Settings → Developer; see Authentication.
Claude
Claude connects over OAuth, so you do not handle a key at all.
- Open Settings → Connectors.
- Choose Add custom connector.
- Enter
https://api.superbooks.io/mcp. - Claude registers itself, then sends you to SuperBooks to sign in, choose which of your teams it can use, and approve the scopes it asked for.
search_tools and execute_typescript are then available in the conversation, and Claude uses them to find and call the real SuperBooks tools — see What a client sees. Revoke access any time from the same Connectors screen or from the SuperBooks app.
Verified clients on the consent screen
The consent screen marks well-known AI clients such as Claude and Perplexity as Verified, with their own name and logo. SuperBooks decides that from the addresses the client registered to receive your approval: every one must be that company's own published sign-in address, on its own website. The name and logo a client sends about itself play no part, because any program can claim any name.
Every other client, including one running on your own computer, shows as an unverified developer with a warning. That is not an error. It asks you to check that you started the connection yourself before you approve it.
One connection, several teams
A SuperBooks account can belong to several teams, and one connection can cover more than one of them. On the consent screen you choose either:
- All my teams: every team you are a member of when a request arrives, including teams you join later.
- Specific teams: only the teams you tick. Tick at least one.
Pick the narrowest grant that does the job: tick specific teams rather than all of them, because an assistant working in several teams can carry what it reads in one into another.
One connection covers at most 100 teams. An All my teams connection for someone in more than 100 teams is refused, and the message says to connect again and tick specific teams.
SuperBooks checks your membership on every request, not only when you connect. Leave a team and the connection stops reaching it straight away. If you are no longer a member of any team it covers, requests are refused until you connect again and choose.
When a connection covers one team, every tool works on that team and nothing else changes. When it covers several, each tool that reads or changes a team's data takes an optional teamId argument:
list_teamsreturns the teams the connection covers, with each team's id, name and your role in it. It needs only read access.- Pass
teamIdto pick the team for that call. - A call without
teamIdis refused withTEAM_REQUIRED, and the message lists the teams to choose from by name and id. - A
teamIdthe connection does not cover is refused withTEAM_NOT_AVAILABLE. The message is the same whether or not a team with that id exists. - A destructive tool in a team whose Destructive AI tools setting is off is refused with
DESTRUCTIVE_TOOLS_OFF, naming the team. Turn the setting on under Settings > AI in that team; reconnecting does not change it.
Permissions are worked out per team. A read-only connection is read-only in every team, and a destructive tool also needs the setting switched on in the team the call names.
An API key belongs to one team. Its tools always work on that team, and a teamId naming any other team is refused.
Claude Code
One command, using an API key:
claude mcp add --transport http superbooks https://api.superbooks.io/mcp \
--header "Authorization: Bearer sb_your_api_key_here"
Then check it is live:
claude mcp list
Cursor
Add SuperBooks to ~/.cursor/mcp.json (global) or .cursor/mcp.json in a project:
{
"mcpServers": {
"superbooks": {
"url": "https://api.superbooks.io/mcp",
"headers": {
"Authorization": "Bearer sb_your_api_key_here"
}
}
}
}
Restart Cursor, and search_tools / execute_typescript appear under Settings → MCP — see What a client sees.
Windsurf
Windsurf uses the same shape, in ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"superbooks": {
"serverUrl": "https://api.superbooks.io/mcp",
"headers": {
"Authorization": "Bearer sb_your_api_key_here"
}
}
}
}
The tool surface
These are the 46 real SuperBooks tools reachable through search_tools and execute_typescript (see What a client sees) — not what a raw tools/list call returns, which is always just those two: 45 tools across 12 domains, plus list_teams for choosing a team when a connection covers several. What a given credential's search_tools call actually declares depends on its scopes — see How scopes gate the tool surface.
| Domain | Tools | Destructive | What it covers |
|---|---|---|---|
transactions | 5 | 1 | Bank transactions, filtering, categorisation |
invoices | 5 | 1 | Drafting, sending, and voiding invoices |
customers | 5 | 1 | The customer book |
tracker | 5 | 1 | Time-tracking projects and entries |
categories | 4 | 1 | Transaction categories |
documents | 4 | 1 | Uploaded files and their contents |
tags | 3 | 1 | Labels across customers, transactions, projects |
inbox | 3 | 1 | Incoming receipts and bills, and matching them |
reports | 8 | 0 | Revenue, profit and loss, burn rate, runway, spending |
bank_accounts | 1 | 0 | Connected accounts |
search | 1 | 0 | Cross-domain search |
team | 1 | 0 | The current team's profile |
list_teams | 1 | 0 | The teams a connection covers; MCP only, not the SDKs |
The eight destructive tools are the seven *_delete tools plus invoices_void (a soft cancel, not a delete), and they are gated twice over — see Destructive tools need two gates.
Troubleshooting
The client shows no tools, or fails to connect. Check the credential first: a 401 comes back with a WWW-Authenticate header pointing at the OAuth metadata. If you are using a key, confirm it starts with sb_ and still exists in Settings → Developer. (The client's own tool list always shows exactly search_tools and execute_typescript regardless of scopes — a missing credential shows up as a 401, never as a shorter tool list.)
search_tools returns fewer operations than expected. That is scopes working as designed. A read-only key sees the read tier only. Destructive tools additionally need apis.all plus the team setting.
A tool call fails with TEAM_REQUIRED. The connection covers more than one team. Call list_teams, then repeat the call with the teamId of the team you mean.
Requests are refused after you left a team. The connection no longer covers any team you are a member of. Connect again and choose your teams.
A destructive tool fails with DESTRUCTIVE_TOOLS_OFF. The team the call named has Destructive AI tools switched off. Switch it on under Settings > AI in that team; connecting again does not change it.
Requests start failing after heavy use. You may be hitting the limit of 120 requests per minute — see Rate limits.
[
Authentication
API keys for your own team, OAuth with PKCE and dynamic client registration for integrators, and how scopes gate the tool surface.
](https://docs.superbooks.io/authentication)[
Rate limits
The per-credential limit on MCP calls, the registration limit, and how to handle a 429.