Repository navigation
Closed
Labels
enhancementNew feature or requestNew feature or requesthacktoberfestGood for Hacktoberfest contributorsGood for Hacktoberfest contributorshelp wantedExtra attention is neededExtra attention is needed
Description
Part of the October Challenge #997.
Why
Developers want to test a connector's tools from the terminal or a CI job ("does sap_query still answer after the upgrade?") without opening the UI or wiring up an MCP client. A small CLI that talks to the MCP endpoint we already expose is enough, and it works the same against AnythingMCP Cloud and any self-hosted instance. Comparable tools: mcp-cli, the MCP Inspector CLI mode, Composio's CLI.
Self-hosted vs Cloud
- Self-hosted: works with per-user MCP API keys (
mcp_…) and with the instance-wideMCP_API_KEY/MCP_BEARER_TOKENused inlegacyauth mode. - Cloud (
DEPLOYMENT_MODE=cloud): works with per-user MCP API keys. Important difference: on Cloud the bare/mcpURL serves a fixed set of 8 meta-tools (anythingmcp_search_tools,anythingmcp_run_read_tool, …, seeshared-toolset.ts:26and:52), not the workspace's tools. The CLI must therefore always target a server URL/mcp/<serverId>, which exposes that server's tools directly on both deployments. - Who can use it: any member who can create an MCP API key. The backend already scopes everything: the key resolves to a user and organization, the per-server endpoint checks org membership (
mcp-endpoint.controller.ts:837–871) and the user's MCP role limits which tools are listed and callable. The CLI adds no permissions of its own.
What to build
New workspace package packages/cli (@anythingmcp/cli, "bin": { "amcp": "dist/index.js" }, TypeScript, Node ≥ 22.12 like the root engines).
- Transport:
@modelcontextprotocol/clientv2 (already used by the backend) withStreamableHTTPClientTransport, headerX-API-Key: <key>. One small dependency for argument parsing (commanderor Node's built-inutil.parseArgs); nothing else. - Commands:
amcp login --url https://cloud.anythingmcp.com --server <serverId>— reads the key from a hidden prompt or--key-stdin(never as a plain argument, it would land in shell history), callstools/listonce to verify, saves a profile to~/.config/amcp/config.json($XDG_CONFIG_HOMErespected, file mode0600).--profile <name>for several instances.amcp logout,amcp whoami(URL, server id, key prefixmcp_ab12…only).amcp tools ls [--filter <text>]— name, read-only/destructive hint (from tool annotations), first line of description.amcp tools describe <name>— description + input JSON schema.amcp tools call <name> --args '<json>'(or--args @file.json, or-for stdin). Prints text content; if a tool annotation saysdestructiveHint: trueand stdin is a TTY, ask for confirmation unless--yes.- Global
--json(machine-readable output for every command),--profile,--url/--server/AMCP_URL/AMCP_API_KEY/AMCP_SERVERenv overrides for CI.
- Exit codes:
0ok,1tool returnedisError,2usage/invalid JSON,3auth (401/403),4network/server error. Errors to stderr; never print the key or full request headers, even with--verbose. - Workspace wiring: add
packages/clito rootpackage.jsonworkspaces; give itbuild,lintandtestscripts. The Docker build runsnpm ciwith only the backend/frontendpackage.jsoncopied (Dockerfile:26–32); verifydocker build .still works and adjust the COPY lines if needed. The CLI must not end up in the server image.
Where to look
package.json(root) —workspaces,engines,test/lintscripts.docs/api-reference.md:3— the REST API under/api/*requires a JWT, not an MCP API key;:286MCP API keys.packages/backend/src/auth/mcp-combined-auth.guard.ts:61–85— howX-API-Key(mcp_…or static key) is accepted.packages/backend/src/mcp-server/mcp-endpoint.controller.ts:222(bare/mcp),:676(/mcp/:serverId).packages/backend/src/mcp-server/shared-toolset.ts:52—sharedEndpointMode(), why bare/mcpdiffers on Cloud.packages/backend/src/connectors/engines/mcp-client.engine.ts:46— existingStreamableHTTPClientTransportusage with custom headers.packages/frontend/src/app/mcp-server/[id]/page.tsx:270,:297— where users find the server URL and theX-API-Keyheader; add a "CLI" snippet there in a follow-up.packages/backend/prisma/schema.prisma:344—McpApiKey(optionally bound to onemcpServerId).
Acceptance criteria
- Tests with
node --test(or jest like the backend) against an in-process fake MCP server (@modelcontextprotocol/server):tools ls,tools callsuccess,isError, 401, invalid--argsJSON,--jsonoutput shape. - Config file is created
0600; the key never appears in stdout/stderr (test it). - Manually verified against a local
docker compose upinstance and against Cloud (put the commands/output, key redacted, in the PR). - The backend and frontend tests and lint still pass;
docker build .still passes. - Docs:
packages/cli/README.md+ a "CLI" section indocs/api-reference.md.
Out of scope
amcp servers ls/ connector management: there is no endpoint that lists MCP servers for an API key (/api/mcp-serversis JWT-only,mcp-servers.controller.ts:92). Follow-up: a maintainer-designed read-only endpoint, then the command.- OAuth device-flow / browser login, email+password login.
- Publishing to npm, Homebrew, standalone binaries.
- Resources and prompts (
resources/list,prompts/get), interactive REPL, shell completions.
Size
L (several days, may be split: package skeleton + login/tools ls first, tools call + --json second).
How to claim
Comment "I'd like to work on this" and we'll assign you. Rules in #997.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requesthacktoberfestGood for Hacktoberfest contributorsGood for Hacktoberfest contributorshelp wantedExtra attention is neededExtra attention is needed
Activity
helpcodeai commentedon Oct 10, 2026
@Coding-Professional this is the new issue for the one you are working on, and it is still yours. Leave a short comment here so GitHub lets us assign it to you again. The notes from before, for reference:
Coding-Professional commentedon Oct 11, 2026
I'd like to work on this.
helpcodeai commentedon Oct 11, 2026
@Coding-Professional thanks, it's yours (GitHub won't let me set the assignee field right now, so this comment counts). I've seen #1024, review coming shortly.
Coding-Professional commentedon Oct 11, 2026
@helpcodeai
Thanks for assigning this to me! I have raised the PR.
Looking forward to your feedback.
fix(cli): secure transport and profile overrides (HelpCode-ai#1009)
feat(cli): add secure login and tool listing (#1024)
fix(cli): support slow tool calls and SSE (HelpCode-ai#1009)
feat(cli): add tool calls and JSON output (#1088)
helpcodeai commentedon Oct 18, 2026
Both parts are in (#1024 and #1088), so the
amcpCLI MVP is done. Closing this. Thanks @Coding-Professional, it's a really useful one.