From e277b811165e626881670307bdc015296653b9d6 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 19 May 2026 12:38:11 +1000 Subject: [PATCH 1/2] fix(mcp): rename proxy-stdio command --- README.md | 1 + docs/.astro/content-modules.mjs | 22 ++++++------ .../content/docs/docs/guides/mcp-proxy.mdx | 2 ++ docs/src/content/docs/docs/reference/cli.mdx | 16 +++++++++ src/cli/commands/mcp.ts | 14 ++++---- src/core/mcp-proxy.ts | 2 +- tests/e2e/mcp-add-proxy.test.ts | 4 +-- tests/e2e/mcp-proxy-command.test.ts | 36 +++++++++++++++++++ tests/unit/core/mcp-proxy-cli.test.ts | 6 ++-- tests/unit/core/mcp-proxy.test.ts | 4 +-- 10 files changed, 82 insertions(+), 25 deletions(-) create mode 100644 tests/e2e/mcp-proxy-command.test.ts diff --git a/README.md b/README.md index 174dfc17..44b55d48 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ clients: | `allagents skill add ` | Add a skill from a repo (plural `skills` alias supported) | | `allagents skill list` | List skills and status | | `allagents mcp add ` | Add an MCP server and sync to clients | +| `allagents mcp proxy ` | Bridge a remote HTTP MCP server to local stdio | | `allagents mcp list` | List workspace MCP servers | | `allagents workspace status` | Show workspace state | | `allagents self update` | Update AllAgents CLI | diff --git a/docs/.astro/content-modules.mjs b/docs/.astro/content-modules.mjs index 53b08df5..c191b633 100644 --- a/docs/.astro/content-modules.mjs +++ b/docs/.astro/content-modules.mjs @@ -1,14 +1,14 @@ export default new Map([ -["src/content/docs/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Findex.mdx&astroContentModuleFlag=true")], -["src/content/docs/getting-started/installation.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Finstallation.mdx&astroContentModuleFlag=true")], -["src/content/docs/getting-started/quick-start.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fgetting-started%2Fquick-start.mdx&astroContentModuleFlag=true")], -["src/content/docs/guides/marketplaces.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fmarketplaces.mdx&astroContentModuleFlag=true")], -["src/content/docs/docs.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs.mdx&astroContentModuleFlag=true")], -["src/content/docs/guides/agent-portability.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fagent-portability.mdx&astroContentModuleFlag=true")], -["src/content/docs/guides/workspaces.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fworkspaces.mdx&astroContentModuleFlag=true")], -["src/content/docs/guides/plugins.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fguides%2Fplugins.mdx&astroContentModuleFlag=true")], -["src/content/docs/reference/clients.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Freference%2Fclients.mdx&astroContentModuleFlag=true")], -["src/content/docs/reference/cli.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Freference%2Fcli.mdx&astroContentModuleFlag=true")], -["src/content/docs/reference/configuration.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Freference%2Fconfiguration.mdx&astroContentModuleFlag=true")]]); +["src/content/docs/docs/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Findex.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/getting-started/installation.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fgetting-started%2Finstallation.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/getting-started/quick-start.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fgetting-started%2Fquick-start.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/agent-portability.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fagent-portability.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/marketplaces.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fmarketplaces.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/plugins.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fplugins.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/workspaces.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fworkspaces.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/mcp-proxy.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fmcp-proxy.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/reference/clients.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fclients.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/reference/cli.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fcli.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/reference/configuration.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fconfiguration.mdx&astroContentModuleFlag=true")]]); \ No newline at end of file diff --git a/docs/src/content/docs/docs/guides/mcp-proxy.mdx b/docs/src/content/docs/docs/guides/mcp-proxy.mdx index 20f1ad1d..85f77b68 100644 --- a/docs/src/content/docs/docs/guides/mcp-proxy.mdx +++ b/docs/src/content/docs/docs/guides/mcp-proxy.mdx @@ -5,6 +5,8 @@ description: Transparently proxy HTTP MCP servers through mcp-remote for clients Some MCP servers use HTTP transport with OAuth authentication, but not every AI client supports HTTP natively. The MCP proxy feature rewrites HTTP server configs to use [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) as a local stdio bridge, so all clients connect through an already-authenticated proxy. +When AllAgents generates a proxied client config, it now does so through the public `allagents mcp proxy ` helper command. The older `allagents mcp proxy-stdio` form still works as a compatibility alias for existing configs. + ## Quick Start The fastest way to try MCP proxy is to scaffold the ready-made diff --git a/docs/src/content/docs/docs/reference/cli.mdx b/docs/src/content/docs/docs/reference/cli.mdx index 53c87d43..a4a01cec 100644 --- a/docs/src/content/docs/docs/reference/cli.mdx +++ b/docs/src/content/docs/docs/reference/cli.mdx @@ -192,6 +192,7 @@ After enabling, the skill is removed from `disabledSkills` and sync is run to re ```bash allagents mcp add [options] +allagents mcp proxy [--header KEY=VALUE...] allagents mcp remove allagents mcp list allagents mcp get @@ -229,6 +230,21 @@ allagents mcp add gh-server npx --arg=-y --arg=@modelcontextprotocol/server-gith allagents mcp add deepwiki https://new.example.com --force ``` +### mcp proxy + +Expose a remote HTTP MCP server locally over stdio. This is the helper command AllAgents writes into proxied client configs when `mcpProxy` rewrites an HTTP server for clients that only support stdio transport. + +| Flag | Description | +|------|-------------| +| `--header ` | HTTP header forwarded to the upstream MCP server (repeatable) | + +```bash +allagents mcp proxy https://mcp.deepwiki.com/mcp +allagents mcp proxy https://mcp.internal.corp --header Authorization=Bearer-token +``` + +`allagents mcp proxy-stdio` remains available as a compatibility alias, but `proxy` is the canonical public command shown in help and generated configs. + ### mcp remove Remove a server from `workspace.yaml` and unsync it from all clients. Only servers AllAgents added are removed; pre-existing user-managed servers in client MCP configs are preserved. diff --git a/src/cli/commands/mcp.ts b/src/cli/commands/mcp.ts index a7341f58..6d762c3c 100644 --- a/src/cli/commands/mcp.ts +++ b/src/cli/commands/mcp.ts @@ -334,12 +334,14 @@ const mcpRemoveCmd = command({ }); // ============================================================================= -// mcp proxy-stdio (internal) +// mcp proxy // ============================================================================= -const mcpProxyStdioCmd = command({ - name: 'proxy-stdio', - description: 'Internal: expose a remote HTTP MCP server as local stdio', +const mcpProxyCmd = command({ + name: 'proxy', + aliases: ['proxy-stdio'], + description: + 'Expose a remote HTTP MCP server locally over stdio (proxy-stdio is kept as a compatibility alias)', args: { serverUrl: positional({ type: string, displayName: 'serverUrl' }), header: multioption({ @@ -351,7 +353,7 @@ const mcpProxyStdioCmd = command({ handler: async ({ serverUrl, header }) => { const headerResult = parseKeyValuePairs(header, '--header'); if ('error' in headerResult) { - exitWithError('mcp proxy-stdio', headerResult.error); + exitWithError('mcp proxy', headerResult.error); } await runHttpMcpStdioProxy(serverUrl, headerResult.values); }, @@ -506,7 +508,7 @@ export const mcpCmd = conciseSubcommands({ description: 'Manage MCP servers for AI clients', cmds: { add: mcpAddCmd, - 'proxy-stdio': mcpProxyStdioCmd, + proxy: mcpProxyCmd, remove: mcpRemoveCmd, list: mcpListCmd, get: mcpGetCmd, diff --git a/src/core/mcp-proxy.ts b/src/core/mcp-proxy.ts index 044a3ba4..b5798f96 100644 --- a/src/core/mcp-proxy.ts +++ b/src/core/mcp-proxy.ts @@ -40,7 +40,7 @@ function toProxiedConfig( url: string, headers?: Record, ): Record { - const args = ['mcp', 'proxy-stdio', url]; + const args = ['mcp', 'proxy', url]; if (headers) { for (const [key, value] of Object.entries(headers)) { args.push('--header', `${key}=${value}`); diff --git a/tests/e2e/mcp-add-proxy.test.ts b/tests/e2e/mcp-add-proxy.test.ts index 04fb5bd8..dc788577 100644 --- a/tests/e2e/mcp-add-proxy.test.ts +++ b/tests/e2e/mcp-add-proxy.test.ts @@ -95,12 +95,12 @@ clients: expect(claudeConfig.mcpServers.deepwiki.command).toBe('allagents'); expect(claudeConfig.mcpServers.deepwiki.args).toEqual([ 'mcp', - 'proxy-stdio', + 'proxy', 'https://mcp.deepwiki.com/mcp', ]); const codexConfig = readFileSync(join(workspaceDir, '.codex', 'config.toml'), 'utf-8'); - expect(codexConfig).toContain('proxy-stdio'); + expect(codexConfig).toContain('proxy'); expect(codexConfig).toContain('https://mcp.deepwiki.com/mcp'); const vscodeConfig = JSON.parse(readFileSync(join(workspaceDir, '.vscode', 'mcp.json'), 'utf-8')); diff --git a/tests/e2e/mcp-proxy-command.test.ts b/tests/e2e/mcp-proxy-command.test.ts new file mode 100644 index 00000000..8f59cb08 --- /dev/null +++ b/tests/e2e/mcp-proxy-command.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, test } from 'bun:test'; +import { join } from 'node:path'; + +function runCli(args: string[]) { + const cliEntry = join(import.meta.dir, '..', '..', 'src', 'cli', 'index.ts'); + const proc = Bun.spawnSync(['bun', 'run', cliEntry, ...args], { + cwd: process.cwd(), + env: process.env, + stderr: 'pipe', + stdout: 'pipe', + }); + + return { + exitCode: proc.exitCode, + stdout: new TextDecoder().decode(proc.stdout), + stderr: new TextDecoder().decode(proc.stderr), + }; +} + +describe('mcp proxy command help', () => { + test('lists proxy as the canonical subcommand', () => { + const result = runCli(['mcp', '--help']); + + expect(result.exitCode).toBe(0); + expect(result.stdout).toContain('- proxy - Expose a remote HTTP MCP server locally over stdio'); + expect(result.stdout).not.toContain('- proxy-stdio -'); + }); + + test('keeps proxy-stdio as a compatibility alias that prints canonical help', () => { + const result = runCli(['mcp', 'proxy-stdio', '--help']); + + expect(result.exitCode).toBe(0); + expect(result.stdout).toContain('allagents mcp proxy'); + expect(result.stdout).toContain('proxy-stdio is kept as a compatibility alias'); + }); +}); diff --git a/tests/unit/core/mcp-proxy-cli.test.ts b/tests/unit/core/mcp-proxy-cli.test.ts index ba2ef428..761002ab 100644 --- a/tests/unit/core/mcp-proxy-cli.test.ts +++ b/tests/unit/core/mcp-proxy-cli.test.ts @@ -20,7 +20,7 @@ describe('CLI args with proxy transform', () => { const args = buildClaudeMcpAddArgs('deepwiki', proxiedConfig); expect(args).toEqual([ 'mcp', 'add', '--scope', 'user', 'deepwiki', '--', 'allagents', - 'mcp', 'proxy-stdio', 'https://mcp.deepwiki.com/mcp', + 'mcp', 'proxy', 'https://mcp.deepwiki.com/mcp', ]); }); @@ -35,7 +35,7 @@ describe('CLI args with proxy transform', () => { const args = buildCodexMcpAddArgs('deepwiki', proxiedConfig); expect(args).toEqual([ 'mcp', 'add', 'deepwiki', '--', 'allagents', - 'mcp', 'proxy-stdio', 'https://mcp.deepwiki.com/mcp', + 'mcp', 'proxy', 'https://mcp.deepwiki.com/mcp', ]); }); }); @@ -58,7 +58,7 @@ describe('syncVscodeMcpConfig with serverOverrides', () => { const proxiedServers = new Map([ ['deepwiki', { command: 'allagents', - args: ['mcp', 'proxy-stdio', 'https://mcp.deepwiki.com/mcp'], + args: ['mcp', 'proxy', 'https://mcp.deepwiki.com/mcp'], }], ]); diff --git a/tests/unit/core/mcp-proxy.test.ts b/tests/unit/core/mcp-proxy.test.ts index ea2e1f7d..018c6f37 100644 --- a/tests/unit/core/mcp-proxy.test.ts +++ b/tests/unit/core/mcp-proxy.test.ts @@ -60,7 +60,7 @@ describe('applyMcpProxy', () => { const result = applyMcpProxy(servers, 'claude', config); expect(result.get('deepwiki')).toEqual({ command: 'allagents', - args: ['mcp', 'proxy-stdio', 'https://mcp.deepwiki.com/mcp'], + args: ['mcp', 'proxy', 'https://mcp.deepwiki.com/mcp'], }); }); @@ -124,7 +124,7 @@ describe('applyMcpProxy', () => { command: 'allagents', args: [ 'mcp', - 'proxy-stdio', + 'proxy', 'https://api.example.com/mcp', '--header', 'Authorization=Bearer token', From 85ecbd2b97b32373aa6bb97d7d3118e6d0a86ecf Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 19 May 2026 12:58:14 +1000 Subject: [PATCH 2/2] fix(mcp): remove proxy-stdio alias --- CHANGELOG.md | 8 ++++++++ docs/.astro/content-modules.mjs | 6 +++--- docs/src/content/docs/docs/guides/mcp-proxy.mdx | 2 +- docs/src/content/docs/docs/reference/cli.mdx | 2 +- src/cli/commands/mcp.ts | 4 +--- tests/e2e/mcp-proxy-command.test.ts | 9 ++++----- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13d8c107..c92ea44c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [Unreleased] + +### Breaking Changes + +- **MCP proxy command**: Removed the temporary `allagents mcp proxy-stdio` alias. Use `allagents mcp proxy ` instead. + + **Migration**: Re-run `allagents mcp update` or `allagents update` after upgrading so synced client configs are regenerated with `mcp proxy`. + ## [1.0.0] - 2026-03-13 ### Breaking Changes diff --git a/docs/.astro/content-modules.mjs b/docs/.astro/content-modules.mjs index c191b633..4e165623 100644 --- a/docs/.astro/content-modules.mjs +++ b/docs/.astro/content-modules.mjs @@ -3,12 +3,12 @@ export default new Map([ ["src/content/docs/docs/index.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Findex.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/getting-started/installation.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fgetting-started%2Finstallation.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/getting-started/quick-start.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fgetting-started%2Fquick-start.mdx&astroContentModuleFlag=true")], -["src/content/docs/docs/guides/agent-portability.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fagent-portability.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/guides/marketplaces.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fmarketplaces.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/mcp-proxy.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fmcp-proxy.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/guides/plugins.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fplugins.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/guides/agent-portability.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fagent-portability.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/guides/workspaces.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fworkspaces.mdx&astroContentModuleFlag=true")], -["src/content/docs/docs/guides/mcp-proxy.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Fguides%2Fmcp-proxy.mdx&astroContentModuleFlag=true")], -["src/content/docs/docs/reference/clients.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fclients.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/reference/cli.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fcli.mdx&astroContentModuleFlag=true")], +["src/content/docs/docs/reference/clients.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fclients.mdx&astroContentModuleFlag=true")], ["src/content/docs/docs/reference/configuration.mdx", () => import("astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Fdocs%2Freference%2Fconfiguration.mdx&astroContentModuleFlag=true")]]); \ No newline at end of file diff --git a/docs/src/content/docs/docs/guides/mcp-proxy.mdx b/docs/src/content/docs/docs/guides/mcp-proxy.mdx index 85f77b68..45e109af 100644 --- a/docs/src/content/docs/docs/guides/mcp-proxy.mdx +++ b/docs/src/content/docs/docs/guides/mcp-proxy.mdx @@ -5,7 +5,7 @@ description: Transparently proxy HTTP MCP servers through mcp-remote for clients Some MCP servers use HTTP transport with OAuth authentication, but not every AI client supports HTTP natively. The MCP proxy feature rewrites HTTP server configs to use [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) as a local stdio bridge, so all clients connect through an already-authenticated proxy. -When AllAgents generates a proxied client config, it now does so through the public `allagents mcp proxy ` helper command. The older `allagents mcp proxy-stdio` form still works as a compatibility alias for existing configs. +When AllAgents generates a proxied client config, it does so through the public `allagents mcp proxy ` helper command. ## Quick Start diff --git a/docs/src/content/docs/docs/reference/cli.mdx b/docs/src/content/docs/docs/reference/cli.mdx index a4a01cec..545b72e0 100644 --- a/docs/src/content/docs/docs/reference/cli.mdx +++ b/docs/src/content/docs/docs/reference/cli.mdx @@ -243,7 +243,7 @@ allagents mcp proxy https://mcp.deepwiki.com/mcp allagents mcp proxy https://mcp.internal.corp --header Authorization=Bearer-token ``` -`allagents mcp proxy-stdio` remains available as a compatibility alias, but `proxy` is the canonical public command shown in help and generated configs. +`proxy` is the only supported public command shown in help and generated configs. ### mcp remove diff --git a/src/cli/commands/mcp.ts b/src/cli/commands/mcp.ts index 6d762c3c..7aa20b8d 100644 --- a/src/cli/commands/mcp.ts +++ b/src/cli/commands/mcp.ts @@ -339,9 +339,7 @@ const mcpRemoveCmd = command({ const mcpProxyCmd = command({ name: 'proxy', - aliases: ['proxy-stdio'], - description: - 'Expose a remote HTTP MCP server locally over stdio (proxy-stdio is kept as a compatibility alias)', + description: 'Expose a remote HTTP MCP server locally over stdio', args: { serverUrl: positional({ type: string, displayName: 'serverUrl' }), header: multioption({ diff --git a/tests/e2e/mcp-proxy-command.test.ts b/tests/e2e/mcp-proxy-command.test.ts index 8f59cb08..6043e34b 100644 --- a/tests/e2e/mcp-proxy-command.test.ts +++ b/tests/e2e/mcp-proxy-command.test.ts @@ -26,11 +26,10 @@ describe('mcp proxy command help', () => { expect(result.stdout).not.toContain('- proxy-stdio -'); }); - test('keeps proxy-stdio as a compatibility alias that prints canonical help', () => { - const result = runCli(['mcp', 'proxy-stdio', '--help']); + test('rejects proxy-stdio after the rename', () => { + const result = runCli(['mcp', 'proxy-stdio']); - expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('allagents mcp proxy'); - expect(result.stdout).toContain('proxy-stdio is kept as a compatibility alias'); + expect(result.exitCode).toBe(1); + expect(result.stderr).toContain('Not a valid subcommand name'); }); });