Extent for your AI agents

Extent runs an MCP server. Add it to Claude Code, Codex, Cursor or ChatGPT, and that agent can read and message your bots and use every app you connected to Extent: Gmail, Google Calendar, GitHub, 1Password, and any MCP server you added.

Your app credentials stay in Extent. The agent never sees a token, and anything that writes waits for your tap in the Extent app, the same as when a bot asks.

Connect an agent

The server is https://api.extent.sh/mcp (streamable HTTP). The first connection opens a browser page where you sign in with your Extent email and choose what the agent may do.

Claude Code

claude mcp add --transport http extent https://api.extent.sh/mcp

Then run /mcp in Claude Code and pick extent to sign in.

Codex

In ~/.codex/config.toml:

[mcp_servers.extent]
url = "https://api.extent.sh/mcp"
tool_timeout_sec = 150

Then codex mcp login extent. Keep the timeout above 120 seconds: a write holds its call open that long while it waits for your tap.

Cursor

In ~/.cursor/mcp.json:

{ "mcpServers": { "extent": { "url": "https://api.extent.sh/mcp" } } }

ChatGPT

Settings, then Connectors, then Create. Use the server address above, with OAuth.

A script or another client

Create a personal access token in the Extent app (Settings, then Connected agents, then Create access token) and send it as Authorization: Bearer ext_pat_…. The app shows the token once.

Tools

The server finds things in steps, so an agent loads only what it needs: the apps, then one app's tools, then one tool's schema.

ToolWhat it does
extent_bots_listYour bots: id, name, bio, model, state
extent_bot_messagesA bot's chat as text, newest last
extent_bot_sendMessage a bot as the agent, or as you, and wait for the answer
extent_apps_listYour connected apps, with their kind (an MCP app from the directory, your own MCP server, or one of Extent's integrations), accounts and tool counts
extent_app_toolsOne app's tools, one line each, 25 a page, searchable
extent_tool_describeOne tool's input schema, and whether it asks you first
extent_tool_callCall a tool
extent_approval_statusCheck a call or a forget that's waiting for your tap
extent_memory_profileWho you are and what's going on for you now, as your bots keep it
extent_memory_recallSearch your memory: library files and saved items, with excerpts, and a short answer when one is clear. as_of asks what held on a past day
extent_memory_readOne memory file by id or path, with the files that link to it
extent_memory_listMemory's folders with counts, or one folder's files, 50 a page
extent_memory_addSave notes, an email, a chat export, a page or a file (up to 512 KiB) to your archive. Your primary bot files it into memory in the background; wait waits for what it made of it
extent_memory_forgetForget facts with given words, or a whole file. Waits for your tap
extent_archive_listWhat was saved to your archive, newest first, with each item's status and summary
extent_archive_getOne saved item: its raw text, 20,000 characters a page, and what your primary bot made of it

What runs and what asks

Permissions

ScopeLets the agent
bots:readSee your bots and read their chats
bots:messageMessage your bots as itself
bots:message_as_userMessage your bots as you. Off unless you check it
apps:readSee your connected apps and their tools
apps:callCall app tools, with your approval for writes
memory:readSearch and read your memory and your archive
memory:writeAdd to your memory, as from the agent. Forgetting waits for your tap

Settings, then Connected agents, in the Extent app lists each agent with its permissions, when it was last used and how many calls it made today. Revoke cuts it off at once. Each app's details show what agents did with it.

Limits per agent: 60 calls a minute, 2,000 a day, and 30 messages an hour to each bot. Your archive takes 60 items an hour and 300 a day, from you and your agents together.

An agent you connected before the memory tools existed needs connecting again to get the memory permissions.

ExtentBot

When a bot reads a public web page for a user, the request comes from the Extent server with the user agent ExtentBot/1.0 (+https://extent.sh). It fetches only the pages a user's bot asked for, and builds no index. To ask us to stop, write to hello@extent.sh.