Docs
Point your assistant
at your Tabs.
mcp.tabtab.com is a remote MCP server. Connect Claude or ChatGPT once and it can reach the Tabs that kept working while you were away.
Connect a remote client
One URL. The consent screen does the rest. In Claude, add it as a custom connector.
https://mcp.tabtab.com/mcpYour client discovers the rest on its own — it registers itself, sends you here to approve, and stores the token. You will not be asked to paste a key anywhere.
Connect a stdio-only client
Some clients only launch local processes. This bridges those to the same server, with the same consent screen.
npx tabtab-mcpIf your client already supports remote MCP servers, skip this — the connector URL above is the real thing and needs nothing installed.
What you are approving
Accept or decline, as a whole. There is no checkbox whose only correct answer is yes. A connection is granted exactly what it asked for, so a read-only client stays read-only.
- Read your Tabs and findings
tabs:read - List Tabs, fetch findings, and ask questions about them.
- Add findings and publish editions to feed Tabs
tabs:write - Add findings to a feed Tab, and publish them as a numbered edition.
- Create and pause Tabs
tabs:manage - Create a feed Tab, and pause or resume Tabs it can see.
Tools
What a connected client can call today.
pingAvailableNo scopeConfirms the connection and reports what it was granted. Call it first when something is not working.
create_tabAvailabletabs:manageOpens a feed Tab for this assistant to fill. Returns the tab id.
push_findingsAvailabletabs:writeAdds up to 25 findings. Idempotent — replaying a key returns the original result and creates nothing.
publish_editionAvailabletabs:writeBundles findings into a numbered edition with its own permanent link. Readers can buy a single edition or the whole archive. Prices are set in TabTab, never by an assistant.
What is coming
Specified, not yet shipped. Listed so you can see the shape of the surface, not so you can call them.
list_tabsEvery Tab in the workspace, with unread counts.get_tabOne Tab, its targets, and its recent findings.get_findingsSearch findings across the workspace.query_tabAsk a Tab a question and get ranked findings back.get_reportThe latest report for a period.pause_tabPause a Tab. resume_tab starts it again.
Feed Tabs
A feed Tab is one your assistant fills. You create it, point a scheduled task at it, and findings arrive the same way they would from any other Tab — badged with the assistant that sent them, and notifying on the same rules.
The research runs on your assistant's schedule and its subscription. TabTab is where the results live, notify, and stay searchable.
Tokens, expiry and revocation
Access tokens last an hour and refresh tokens last thirty days, rotating each time they are used. Your client handles all of this; the numbers are here for when it does not.
Revoke a connection from Settings, then Connections. It takes effect on the connection's next call — there is no cache to wait out.
Endpoints
You should not need these — every MCP client discovers them from the two metadata documents. They are here for when you are debugging one that does not.
POST /mcp- The MCP endpoint. Streamable HTTP, bearer token.
GET /.well-known/oauth-protected-resource/mcp- Protected resource metadata (RFC 9728).
GET /.well-known/oauth-authorization-server- Authorization server metadata (RFC 8414).
POST /register- Dynamic client registration (RFC 7591).
GET /authorize- Starts the flow. PKCE with S256 is required.
POST /token- Authorization code and refresh token grants.
POST /revoke- Token revocation (RFC 7009).
PKCE with S256 is required. There is no implicit flow and no client credentials grant, so every token belongs to a person who approved it.
API keys and the REST API
For anything with no browser to sign in with — a cron job, a CI step, a self-hosted agent. Create a key in Settings, then API keys. It works as a bearer token on the MCP endpoint and on the REST API below.
Connecting Claude or ChatGPT does not need one. Those speak OAuth natively, and approving a connection once is safer than pasting a long-lived secret into a chat window or a config file.
POST /api/v1/tabs- Create a feed Tab. Returns its id. Requires tabs:manage.
GET /api/v1/tabs- The feed Tabs this key can write to. Requires tabs:read.
POST /api/v1/findings- Add up to 25 findings. Idempotent. Requires tabs:write.
curl -X POST https://tabtab.com/api/v1/findings \
-H "Authorization: Bearer ttk_live_..." \
-H "Content-Type: application/json" \
-d '{
"tab_id": "...",
"idempotency_key": "briefing-2026-09-03",
"findings": [
{
"title": "Anthropic cut Haiku pricing",
"summary": "Input tokens down 40%.",
"source_url": "https://anthropic.com/pricing",
"severity": "high"
}
]
}'Same write path as MCP — the REST endpoints call the same transaction, so idempotency, the daily cap, sanitization and notification rules are identical. Replaying an idempotency_key returns the original result and creates nothing, which is what makes a scheduled job safe to retry when it cannot tell whether its last run committed.
Findings are badged with the key's name, so name it something a reader would understand. Revoking a key takes effect on its next call and never deletes the findings it contributed.
A silent tab is a working tab
Connect an assistant, then close the laptop.
Go to Connections