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.
| Tool | What it does |
|---|---|
extent_bots_list | Your bots: id, name, bio, model, state |
extent_bot_messages | A bot's chat as text, newest last |
extent_bot_send | Message a bot as the agent, or as you, and wait for the answer |
extent_apps_list | Your 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_tools | One app's tools, one line each, 25 a page, searchable |
extent_tool_describe | One tool's input schema, and whether it asks you first |
extent_tool_call | Call a tool |
extent_approval_status | Check a call or a forget that's waiting for your tap |
extent_memory_profile | Who you are and what's going on for you now, as your bots keep it |
extent_memory_recall | Search 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_read | One memory file by id or path, with the files that link to it |
extent_memory_list | Memory's folders with counts, or one folder's files, 50 a page |
extent_memory_add | Save 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_forget | Forget facts with given words, or a whole file. Waits for your tap |
extent_archive_list | What was saved to your archive, newest first, with each item's status and summary |
extent_archive_get | One saved item: its raw text, 20,000 characters a page, and what your primary bot made of it |
What runs and what asks
- Reads run at once.
- A write puts an approval card in the Extent app, with a notification, naming the agent. The call waits up to two minutes for your tap and then returns the result. If you haven't tapped by then, the agent gets an approval id it can check later.
- Sending mail, deleting, forgetting from your memory and 1Password fills always ask.
- What an agent adds to your memory is saved as from that agent. Your primary bot files it as data, never as your word, so it can't change how your bots behave.
- Always allow on a card lets that agent, and only that agent, run that tool on that account without asking.
- An agent's message to a bot shows in the chat as from the agent. The bot treats it as a request from the agent, never as your instruction, and can't change its bio, rules or permissions because of it.
Permissions
| Scope | Lets the agent |
|---|---|
bots:read | See your bots and read their chats |
bots:message | Message your bots as itself |
bots:message_as_user | Message your bots as you. Off unless you check it |
apps:read | See your connected apps and their tools |
apps:call | Call app tools, with your approval for writes |
memory:read | Search and read your memory and your archive |
memory:write | Add 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.