From 633ca5dad62c8dd6918cc84ac22ec1a68e4bdb95 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 15 May 2026 20:39:23 -0300 Subject: [PATCH] =?UTF-8?q?release:=200.1.3=20=E2=80=94=20add=20a2amcp=20b?= =?UTF-8?q?in,=20sync=20server/cli=20version=20from=20package.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an "a2amcp" bin (alongside the existing "a2a-mcp" for back-compat) so that npx -y a2amcp resolves the binary by package name. Without it npx fell back unreliably when no bin matched. Also rips the hardcoded "0.1.0" out of cli.ts and gateway.ts and reads the version from package.json — that was why serverInfo lagged behind the published tag. Renames the user-facing command in help / error strings / README from a2a-mcp to a2amcp; the legacy bin stays for existing scripts. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 18 +++++++++--------- package-lock.json | 7 ++++--- package.json | 3 ++- src/cli.ts | 18 +++++++++++------- src/credentials.ts | 2 +- src/gateway.ts | 10 +++++++--- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 76f34fc..b972f11 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,14 @@ Restart the client after adding or removing agents. ## Commands ```bash -a2a-mcp login # save control-plane credentials -a2a-mcp whoami # show current account -a2a-mcp agents # list agents visible to your account -a2a-mcp add # expose one agent through this gateway -a2a-mcp list # list locally enabled agents -a2a-mcp remove # stop exposing an agent -a2a-mcp doctor # probe enabled agents and count tools -a2a-mcp logout # clear local credentials +a2amcp login # save control-plane credentials +a2amcp whoami # show current account +a2amcp agents # list agents visible to your account +a2amcp add # expose one agent through this gateway +a2amcp list # list locally enabled agents +a2amcp remove # stop exposing an agent +a2amcp doctor # probe enabled agents and count tools +a2amcp logout # clear local credentials ``` -Running `a2a-mcp` with no command starts the MCP gateway over stdio. +Running `a2amcp` with no command starts the MCP gateway over stdio. diff --git a/package-lock.json b/package-lock.json index 75f80ef..20bc8a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,20 @@ { "name": "a2amcp", - "version": "0.1.2", + "version": "0.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "a2amcp", - "version": "0.1.2", + "version": "0.1.3", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/sdk": "^1.0.4", "commander": "^12.1.0" }, "bin": { - "a2a-mcp": "dist/cli.js" + "a2a-mcp": "dist/cli.js", + "a2amcp": "dist/cli.js" }, "devDependencies": { "@types/node": "^20.12.0", diff --git a/package.json b/package.json index e264ad4..2e63451 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,10 @@ { "name": "a2amcp", - "version": "0.1.2", + "version": "0.1.3", "description": "MCP gateway for a2acloud agents. Run as a local MCP server; expose any number of deployed A2A agents to Claude Code, Cursor, and other MCP clients.", "type": "module", "bin": { + "a2amcp": "dist/cli.js", "a2a-mcp": "dist/cli.js" }, "main": "dist/index.js", diff --git a/src/cli.ts b/src/cli.ts index 4d6246c..6b57f19 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,15 +1,19 @@ #!/usr/bin/env node /** - * `a2a-mcp` — install once, expose any number of a2acloud agents to your MCP + * `a2amcp` — install once, expose any number of a2acloud agents to your MCP * client (Claude Code, Cursor, etc.). * * No-argument invocation runs the gateway over stdio. That's the form an MCP * client launches. Subcommands manage the local agent list, auth, etc. */ +import { createRequire } from "node:module"; import { Command } from "commander"; import readline from "node:readline/promises"; import { stdin as input, stdout as output, stderr } from "node:process"; +const require = createRequire(import.meta.url); +const pkg = require("../package.json") as { version: string }; + import { ApiError, ControlPlaneClient } from "./api.js"; import { addAgent, loadConfig, removeAgent } from "./config.js"; import { @@ -24,9 +28,9 @@ import { runStdio } from "./gateway.js"; const program = new Command(); program - .name("a2a-mcp") + .name("a2amcp") .description("MCP gateway for a2acloud agents.") - .version("0.1.0"); + .version(pkg.version); async function client(apiOverride?: string): Promise { const creds = await loadCredentials(); @@ -69,7 +73,7 @@ program try { await runStdio(); } catch (err) { - stderr.write(`a2a-mcp: ${(err as Error).message}\n`); + stderr.write(`a2amcp: ${(err as Error).message}\n`); process.exit(1); } }); @@ -108,7 +112,7 @@ program .description("Show the currently logged-in user.") .action(async () => { const creds = await loadCredentials(); - if (!creds) fail("not logged in (run `a2a-mcp login`)"); + if (!creds) fail("not logged in (run `a2amcp login`)"); try { const me = await (await client()).me(); output.write(`${me.email} (${creds.apiUrl})\n`); @@ -146,7 +150,7 @@ program .action(async () => { const cfg = await loadConfig(); if (cfg.agents.length === 0) { - output.write("(no agents added; try `a2a-mcp add `)\n"); + output.write("(no agents added; try `a2amcp add `)\n"); return; } for (const a of cfg.agents) output.write(` ${a.name} ${a.url}\n`); @@ -237,6 +241,6 @@ program }); program.parseAsync(process.argv).catch((err) => { - stderr.write(`a2a-mcp: ${(err as Error).message}\n`); + stderr.write(`a2amcp: ${(err as Error).message}\n`); process.exit(1); }); diff --git a/src/credentials.ts b/src/credentials.ts index 8a29ff4..de9221e 100644 --- a/src/credentials.ts +++ b/src/credentials.ts @@ -1,7 +1,7 @@ /** * Reader for ~/.a2a/credentials.json — same file the Python `a2a` CLI writes. * - * We deliberately *only read* this file (and overwrite it on `a2a-mcp login`) + * We deliberately *only read* this file (and overwrite it on `a2amcp login`) * so a single login flow is shared between the Python and Node tooling. */ import { promises as fs } from "node:fs"; diff --git a/src/gateway.ts b/src/gateway.ts index b6efed5..4c9f3aa 100644 --- a/src/gateway.ts +++ b/src/gateway.ts @@ -6,6 +6,7 @@ * Naming: ``{agent}__{skill}``. Double underscore separator. Skill names * containing ``__`` are not supported. */ +import { createRequire } from "node:module"; import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { @@ -17,6 +18,9 @@ import { loadConfig, type EnabledAgent } from "./config.js"; import { loadCredentials } from "./credentials.js"; import { UpstreamAgent, UpstreamError, type UpstreamTool } from "./upstream.js"; +const require = createRequire(import.meta.url); +const pkg = require("../package.json") as { version: string }; + export const SEP = "__"; export interface GatewayOptions { @@ -48,7 +52,7 @@ export async function buildGateway(opts: GatewayOptions = {}): Promise