Every agent eventually wants the same things: your email, your calendar, your files, your notes. So you wire Gmail into Claude Code, then wire it again into Codex, then again into whatever you try next. Each one gets its own OAuth grant, its own permissions to configure, and its own copy of your context. The accounts are the same accounts. Only the plumbing is duplicated.
Lanes Link collapses that into one MCP endpoint you run yourself. You connect an account once, and every MCP client you point at the endpoint inherits it, along with the same policy and the same audit log. Adding a fourth client stops being a fourth integration.
How Lanes Link does it
- One connection, many callers.
lanes link connect gmailwalks you through the account once. After that, Claude Code, Codex, Claude Desktop, and Cowork all reach it through the same endpoint, because the credential lives with the endpoint rather than inside any one harness. - Providers you probably already use. Gmail, Drive, Sheets, Docs, Calendar, Tasks, and Contacts on Google; Mail, Calendar, Contacts, and Drive on iCloud; Notion and Linear through their own remote MCP servers. Each Google product is its own connection, and a single OAuth client covers all seven.
- Registration is mostly automatic. Only Google needs a client you register yourself. Notion and Linear register themselves, and iCloud takes an app-specific password.
- Files are named, not carried. Where a tool takes an attachment, you hand it a path, an HTTPS URL, or a file already sitting on another message. The endpoint reads the bytes and passes them to the provider, so nothing gets encoded into a tool call and pushed through the model.
- Useful before you connect anything. Memory, skills, and the vault sit behind the same boundary and serve without a credential of any kind, so a brand new endpoint is already worth calling.
The workflow
Start the endpoint, register it with every harness you have installed, then connect accounts as you need them. Registration is a single command that finds your installed clients rather than a config file you edit per tool.
From then on the work is just asking. An agent in Claude Code searching your inbox and an agent in the claude.ai web client searching the same inbox are the same connection, reached through the same policy. When you revoke an account, you revoke it once and every client loses it at the same moment.
Set it up
A local endpoint takes three commands and no account anywhere. It needs Bun 1.3.11+ and nothing else.
$ bun install -g @lanes-sh/link # puts `lanes` on your PATH
$ lanes link profile add personal --default
$ lanes link start
ok serving http://127.0.0.1:7337/mcp
profiles: personalThen, in another shell:
- Register the endpoint with your harnesses.
lanes link mcp addfinds Claude Code and Codex, registerslanes-linkwith each, and installs a skill and a scout agent so the agent knows what the endpoint is for. - Connect your first account.
lanes link connect gmailhandles the OAuth round trip. - Ask for something. The endpoint is already serving memory and skills, so you do not have to finish connecting everything before it is useful.
Further reading
- Lanes Link: one endpoint for everything an agent needs: the full announcement, including how permissions and profiles work.
- Give every agent the same memory: the knowledge layer that serves without any credential at all.
- Keep work and personal accounts apart: profiles, and why every call names one.
- Lanes MCP servers: the other MCP surfaces Lanes ships, local and hosted.
- Lanes Link vs per-provider remote MCP servers: when connecting each provider directly is the better call.
Browse the source at lanes-sh/link, Apache-2.0, or read the announcement.