Repository navigation
Environment-level MCP servers (and later rules/skills) shared by every provider and account #14118
Replies: 13 comments 5 replies
|
I implemented this, following the design above: Settings → Integrations → Shared MCP servers (plus a mobile screen). Add a server once (name, URL, optional headers), and every new agent session on that environment gets it next to PR: #16466 |
|
+1, and OAuth is the main thing I'd need. I run four provider accounts (Claude and Codex, personal and work), and the one server I want everywhere is a hosted MCP gateway that uses OAuth (executor.sh). Even with the server added globally in each CLI, I still have to sign in separately in each account's config folder, and Claude has no command-line sign-in, so that means an interactive |
|
+1 to this direction. #16466 covers the MCP half at environment level. Below is data and a use case for the "later rules/skills" part, plus project scope and subagents. It also connects with #15823 (skill manager) and #14554 (agent roles). What actually reaches a T3 session todayWe opened one session per provider in the same repo, inside a git worktree T3 created (Oct 11 2026). Each agent reported what was in its context at startup, before reading any file. The repo ships the config files every provider documents.
Versions: Codex CLI 0.162.1, Grok Build 1.0.50, Antigravity ACP server 1.3.0 (built 2026-09-29), T3 Code nightly 0.0.46 (2026-10-10). Two causes are upstream:
Users work around each of these per provider and per machine. The same injection seam #16466 uses could make it uniform. Suggested extension1. Project scope next to environment scope
2. Rules
3. Subagents
4. Skills
5. Inspect
6. Optional "materialize"
Prior artWe do the materialize half today with a script. One source in the repo holds rules (body plus load metadata), subagents, skills and an MCP list. A generator writes the Claude, Codex, Cursor, OpenCode, Grok and Antigravity formats. A verifier fails CI on:
It works, but every new provider needs a new generator and new measurements. And as the table shows, files on disk still don't guarantee what reaches a T3 session. Doing this once in T3 would cover every provider it adds. |
|
Following up from #18637 (closed as dup) — this thread is the right home for the MCP half. Strong support for the env-level list injected per-session via existing adapter hooks. Two additions from our spec, for consideration in the prototype:
Glad to test the local-branch prototype against these cases if useful. |
|
I implemented a version of this in a fork, as two independent branches: MCP servers:
Skills:
Both have unit tests and pass typecheck. Happy to split or reshape into PRs if a maintainer approves the direction. Written with Claude Opus 5.5 in Claude Code (running in T3 Code). |
|
Strong +1, and worth noting two people have already posted implementations in this thread (413n's Settings → Integrations → Shared MCP servers, and MikaMcFlurry's I checked the adapter seams on
One addition to the design from our side, because it bites at scale: every enabled server multiplies the tool definitions in every thread's context. We hit this pattern with T3's own 69 tools, and #19190 reports ~83 tools declared per turn on one gateway. So alongside per-project scope, I would include a per-server tool allowlist (or a "declared tools only" toggle) and keep the reserved I run a multi-agent Jira board on T3 and would switch to this the day it lands; happy to test either implementation on macOS/Linux and report against Claude, Codex and ACP, rather than adding a third prototype. |
|
A scope proposal that answers the approval question directly: OAuth belongs in the first version, but behind an opt-in proxy, as step 2 of 3. Why it is not optional: the servers people most want across providers are remote ones with interactive sign-in (Atlassian, Linear-style gateways, executor.sh — see goleary above). Claude only signs in through an interactive Suggested split:
I can help either way: test, or produce the step-1 slice alone if the proxy is what needs more discussion. |
|
@dmitryrechkin's step 1 matches
Tests cover the mapping for each harness, the runtime's @juliusmarminge, the closure of #16466 asked for approval of direction and scope here first. Would step 1 as scoped above be acceptable as one PR? If you'd rather split it (contract + Claude/Codex first, ACP second) or put it behind Labs, I'll shape it that way. |
|
+1, with another use case: Murmur, which lets coding agents on different machines in the same repo message each other through git refs. It's a local stdio server ( One thing a stdio server in the shared list needs that a hosted one doesn't: knowing who launched it. Murmur delivers each message to the session it's addressed to, so the server has to know which provider and which T3 thread it's serving. Today it works that out per CLI (for Codex it registers |
|
I strongly support this direction. My concrete case is shared remote MCP with OAuth, and I think OAuth has to be part of the first usable version. I want to add Figma's remote MCP server ( The current per-provider injection approach is not enough for this case. Even if every adapter receives the Figma server, each provider still goes through its own OAuth flow. So the result is still “configure once, sign in N times.” What I need is the generic infrastructure, not Figma-specific code:
For my use case, one environment-level Figma identity is acceptable as long as the UI states it explicitly. Per-user identity forwarding would be nice later, but should not block the single-operator case. I also agree with keeping Figma is just the concrete example that makes the gap obvious: without a shared OAuth proxy, “add once, use from every provider” is still not achieved. |
|
@sycamore-3999 Agreed that OAuth is where "add once" breaks today. Here is how far step 1 in
Your proxy shape fits on top of that without changing the provider side:
Step 1 would ship without OAuth and leave the registry entry shaped so a later |
|
NOTE: This comment was left by gpt-6.1-sol high on behalf of Dj Gilcrease. I built another runnable option for the environment-owned, per-session approach described here: an external MCP Manager plugin on the proposed plugin host. The plugin proposal update, with screenshots has the source, install steps and verification limits. It provides environment-wide definitions, project overrides, provider/account-instance switches, and manager-owned OAuth for Streamable HTTP servers. A global OAuth definition can share one connection across inheriting projects/providers; project definitions can instead use separate accounts at the same URL. Tokens stay in the environment's plugin secret store, and providers get private proxy routes. It does not rewrite their config files. It requires the prototype host fork and is not available in stock T3 Code. The point of the experiment is to let people implement and distribute optional features such as this in their own repositories, while T3 owns a reviewed generic session-injection/permissions contract. This complements the implementations already linked here; it does not imply that maintainers have chosen this design. Design feedback can go to the plugin discussion so that conversation stays together. |
|
+1, and adding a concrete use case that I don't think the V1 designs cover yet: multiple accounts of the same service, shared across providers. I run T3 across several providers and accounts (Claude, Codex, Cursor, Muse Code) and machines. I have multiple Gmail accounts (personal and work), plus Google Calendar, Drive, Slack, Linear, and Notion. Today each of those has to be set up separately in every provider's config, for every account, on every machine. When I switch providers mid-thread, the agent loses access to my connectors. What I'd love: I sign into each service once in T3 (including more than one Gmail account), and T3 attaches those connections to whichever provider and session runs the thread, next to Even a V1 limited to one environment-level registry would help a lot, as long as the design leaves room for several accounts per service instead of assuming one sign-in per environment. Happy to help test, or contribute once there's a maintainer-approved scope. |
Uh oh!
There was an error while loading. Please reload this page.
Problem
When you run more than one provider account in T3 Code, each account keeps its own MCP config. Adding a server like Linear means setting it up again per account. Rules and skills have the same problem.
Idea
Let T3 Code own a list of MCP servers per environment and attach them to every provider session, next to the
t3-codeserver it already injects. Every adapter already has a per-session MCP hook, so this extends a list that already exists rather than adding new machinery:mcpServers-c mcp_servers.*overridessession/newmcp.addDetails:
mcp-remoteor a bearer token.Status
I have a working prototype on a local branch that I use on my own build. It's about 1.3k lines including tests and a user doc, so I'm not opening a PR. If this direction fits, I'm happy to split it into small PRs (contract + settings, server injection, settings UI), or you can build it your own way.
Rules and skills would be natural follow-ups. Rules can reuse the existing runtime-instructions append. Skills are harder, because each CLI only finds them by scanning its own folders.
All reactions