Skip to main content

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/mcp

Your 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.

ClaudeTabTabConnected
Your client discovers the server, you approve once, and the token does the rest.

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-mcp

If 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 findingstabs:read
List Tabs, fetch findings, and ask questions about them.
Add findings and publish editions to feed Tabstabs:write
Add findings to a feed Tab, and publish them as a numbered edition.
Create and pause Tabstabs:manage
Create a feed Tab, and pause or resume Tabs it can see.

Tools

What a connected client can call today.

  • pingAvailableNo scope

    Confirms the connection and reports what it was granted. Call it first when something is not working.

  • list_tabsAvailabletabs:read

    Every active Tab in the workspace, with how many findings each holds and how many are unread. Start here to discover tab ids.

  • get_tabAvailabletabs:read

    One Tab: what it monitors, its most recent findings, and the latest stored report summary if there is one.

  • get_findingsAvailabletabs:read

    Findings newest first, for one Tab or the whole workspace. Keyset pagination, so a batch push that shares one timestamp still pages cleanly.

  • query_tabAvailabletabs:read

    Ask a Tab a question and get its most relevant findings back, ranked, with excerpts and sources. It returns passages rather than prose — the assistant writes the answer and cites them.

  • get_reportAvailabletabs:read

    The latest stored report for a Tab. It never generates one on request: that would spend TabTab's compute on an outside call. When there is none, use query_tab.

  • create_tabAvailabletabs:manage

    Opens a Tab for this assistant to fill — a feed Tab, or one of the named kinds like team, market or creator_watch. Returns the tab id.

  • push_findingsAvailabletabs:write

    Adds up to 25 findings. Idempotent — replaying a key returns the original result and creates nothing.

  • publish_editionAvailabletabs:write

    Bundles 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.

  • pause_tabAvailabletabs:manage

    Pauses a Tab. A paused feed Tab stops accepting findings until it is resumed.

  • resume_tabAvailabletabs:manage

    Resumes a paused Tab. Refused if the workspace is already at its active-Tab limit.

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.

Daily AI and tech briefing3Anthropic cut Haiku pricinganthropic.comStripe shipped usage-based billingstripe.comNotion opened its API to agentsnotion.so
A feed Tab is filled by your assistant. Findings arrive the same way they would from any Tab.

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.

Access token60 minutes, then refreshed automatically
Access tokens last an hour. Your client refreshes them without asking you again.

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

Trash