Skip to content

Experiments opt flag for meta MCP server - #275

Open
Fluzko wants to merge 41 commits into
symposium-dev:mainfrom
Fluzko:mcp-meta-server-experiment-gate
Open

Experiments opt flag for meta MCP server#275
Fluzko wants to merge 41 commits into
symposium-dev:mainfrom
Fluzko:mcp-meta-server-experiment-gate

Conversation

@Fluzko

@Fluzko Fluzko commented Aug 13, 2026

Copy link
Copy Markdown

depends on #269

What does this PR do?

Puts the MCP meta-server behind an opt-in flag, off by default:

# ~/.symposium/config.toml
[experiments]
mcp-meta-server = true

Off (default), sync registers each plugin's MCP servers directly, as today. On, it registers one symposium entry instead and the meta-server starts the plugin servers on demand.

[experiments] is new and meant to outlive this feature: bool keys, all default off, no stability promise.

Why gate it

Merging the meta-server unflagged would ship it to every user on the next release. With the flag, it merges dark, and the old path stays measurable against the new one without reverting code.

Try it

cargo agents sync          # experiment off: plugin servers registered directly
# ~/.symposium/config.toml
[experiments]
mcp-meta-server = true
cargo agents sync          # entry swaps to the meta-server

Before / after, in the file the agent reads:

{"mcpServers": {"sqlx": {"command": "/path/to/sqlx-mcp", "args": [...]}}}
{"mcpServers": {"symposium": {"command": "cargo-agents", "args": ["mcp-serve"]}}}

The agent then sees two tools instead of every server's:

> list_tools
sqlx:
  query

> execute   return await sqlx.query({sql: 'select 1'});
{"sql":"select 1"}

Delete the [experiments] block and sync again to go back; the meta entry is removed and the plugin entries return.

Adding the next experiment

Three lines, plus wherever you read it:

    /// Resolve skills from the workspace lockfile instead of cargo metadata.
    #[serde(rename = "lockfile-skills")]
    pub lockfile_skills: bool,

Default gives false, is_default is a PartialEq compare so the section still stays out of a written config, and the test helper already takes a key (ctx.enable_experiment("lockfile-skills")).

Deliberately not a HashMap<String, bool> with is_enabled("name"): that reads more generic, but a typo at a read site silently becomes false, and silent-wrong is the failure mode this area has already produced enough of. The typed struct makes it a compile error.

TBD a cargo agents experiment enable/disable <name>.

Notes

  • With the flag off, cargo agents mcp-serve refuses to start, so nothing can talk to a meta-server the user never enabled.
  • Includes the merge of #, without which the meta-server entry never reaches Claude Code. The two aren't independent - that one should land first.
Disclosure questions

AI disclosure.

  • The AI tool authored large parts of the code

Questions for reviewers.

Fluzko added 30 commits July 29, 2026 10:05
@Fluzko Fluzko closed this Aug 13, 2026
@Fluzko Fluzko reopened this Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant