{
  "markdown": "# Massed Compute MCP Server\n\n<!-- mcp-name: io.github.Massed-Compute/mcp -->\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that lets AI assistants — Claude, Cursor, Codex, ChatGPT, and other MCP-compatible clients — interact with your [Massed Compute](https://vm.massedcompute.com) account: browse GPU inventory, launch and manage VMs, audit billing, discover setup recipes.\n\n## Contents\n\n- [Overview](#overview)\n- [Installation](#installation)\n- [Verifying the connection](#verifying-the-connection)\n- [CLI reference](#cli-reference)\n- [Key resolution](#key-resolution)\n- [Resources](#resources)\n- [License](#license)\n\n## Overview\n\nThe packages published from this repo are a **verbatim proxy of the public MCP endpoint** at `https://vm.massedcompute.com/api/mcp` — zero added surface. Every JSON-RPC message (`initialize`, `tools/list`, `tools/call`, `resources/list`, `resources/read`, `ping`, …) is forwarded unchanged with your stored API key injected as a Bearer header, and responses come back unchanged. Nothing is added, renamed, filtered, or rewritten on the way through:\n\n- **The hosted endpoint owns the catalog.** Tools, resources, schemas, and descriptions come from the live endpoint — the local package never goes stale when new capabilities (like setup recipes) ship upstream.\n- **The hosted endpoint owns security.** Key-scope enforcement (read-only keys hide destructive tools) and credential redaction happen server-side, identically for every client.\n- **What the local package adds is exactly what a stdio client needs**: a stdio↔streamable-HTTP bridge, OS-conventional storage for your API key (`0600` on POSIX), and one-shot client wiring via `init`.\n\nIssue a read-only key for analysis-only assistants and the endpoint rejects destructive tool calls (launch, restart, terminate, SSH-key changes) at call time. Works with Claude Code, Claude Desktop, Cursor, and Codex. Run `massed-compute-mcp tools` to print the live catalog — GPU inventory, VM images, instance lifecycle, coupons, billing, SSH keys, and setup recipes.\n\nBeyond raw tools, Massed Compute publishes [Agent Skills](https://vm-docs.massedcompute.com/docs/mcp/skills) — markdown workflow templates for common operations like GPU selection and cost auditing. Full docs at [vm-docs.massedcompute.com/docs/category/mcp](https://vm-docs.massedcompute.com/docs/category/mcp).\n\n## Installation\n\n### Step 1. Get your API key\n\nOpen [vm.massedcompute.com/settings/api](https://vm.massedcompute.com/settings/api), create a key (read-only for analysis-only assistants; full-access to allow launch / restart / terminate / SSH-key changes), copy it.\n\n### Step 2. Pick an install path\n\n- [Hosted endpoint](#hosted-endpoint) — point your client at the streamable-HTTP URL, zero install\n- [Local CLI](#local-cli) — runs on your machine, key stored in your OS config dir\n\n### Hosted endpoint\n\nThe local packages proxy this endpoint verbatim, so pointing your client straight at it gives you the identical catalog with nothing to install. Pick the snippet for your client:\n\n**Claude Code**\n\n```bash\nclaude mcp add --transport http massed-compute \\\n  https://vm.massedcompute.com/api/mcp \\\n  --header \"Authorization: Bearer MC_TOKEN\"\n```\n\n**Cursor** — `~/.cursor/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"massed-compute\": {\n      \"url\": \"https://vm.massedcompute.com/api/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer MC_TOKEN\" }\n    }\n  }\n}\n```\n\n**Codex** — `~/.codex/config.toml`\n\n```toml\n[mcp_servers.massed-compute]\nurl = \"https://vm.massedcompute.com/api/mcp\"\nbearer_token_env_var = \"MC_TOKEN\"\nenabled = true\n```\n\n**Claude Desktop**\n\nClaude Desktop does not yet speak streamable-HTTP MCP, so use [`mcp-remote`](https://github.com/geelen/mcp-remote) as a stdio↔HTTP bridge. Config at `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"massed-compute\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\", \"mcp-remote\",\n        \"https://vm.massedcompute.com/api/mcp\",\n        \"--header\", \"Authorization: Bearer MC_TOKEN\"\n      ]\n    }\n  }\n}\n```\n\n### Local CLI\n\nInstall via whichever ecosystem you prefer:\n\n```bash\nnpm install -g massed-compute-mcp     # Node >= 20\n# or\npip install massed-compute-mcp        # Python >= 3.10\n# or\nuv tool install massed-compute-mcp    # fast Python install via uv\n```\n\nRun one-shot setup:\n\n```bash\nmassed-compute-mcp init\n```\n\n`init` prompts for the key, validates it upstream, stores it at `0600` (POSIX), detects installed MCP clients (Claude Code, Cursor, Claude Desktop, Codex), and offers to wire each one. A timestamped backup is taken before any client edit. Restart wired clients to pick up the tools.\n\nConfig file location:\n\n- Linux: `$XDG_CONFIG_HOME/massed-compute/config.json` (falls back to `~/.config/...`)\n- macOS: `~/Library/Application Support/massed-compute/config.json`\n- Windows: `%APPDATA%\\massed-compute\\config.json`\n\nNon-interactive (CI / scripts):\n\n```bash\n# Key from env, auto-wire every detected client\nMASSED_COMPUTE_API_KEY=<your-key> massed-compute-mcp init --yes\n\n# Key from a file, wire only specific clients\nmassed-compute-mcp init --token-file ~/keys/mc --yes --clients claude-code,cursor\n\n# Store the key only; don't touch any client config\nmassed-compute-mcp init --yes --no-install-clients\n```\n\nAdd or remove a client later:\n\n```bash\nmassed-compute-mcp install-client cursor       # claude-desktop | codex | claude-code\nmassed-compute-mcp uninstall-client cursor\n```\n\n`install-client` is idempotent — re-running when the entry already matches is a silent no-op.\n\n## Verifying the connection\n\n```bash\nmassed-compute-mcp doctor\n```\n\n`doctor` confirms the stored key still works, prints the tool catalog, and shows copy-pasteable snippets for any clients you didn't auto-wire. Or just ask your assistant *\"Validate my Massed Compute API key.\"* — a `{ message: \"Valid Token\" }` response confirms the wiring.\n\n## CLI reference\n\n| Command | What it does |\n|---|---|\n| `massed-compute-mcp` *(no args)* | Run the MCP server over stdio |\n| `massed-compute-mcp init` | First-run setup: prompt, validate, store, wire clients |\n| `massed-compute-mcp doctor` | Verify the stored key and print client snippets |\n| `massed-compute-mcp install-client <id>` | Wire a single client (`claude-code`, `cursor`, `claude-desktop`, `codex`) |\n| `massed-compute-mcp uninstall-client <id>` | Remove our entry from a client config |\n| `massed-compute-mcp config show` | Print resolved config path, masked key, resolution chain |\n| `massed-compute-mcp logout` | Delete the stored API key |\n| `massed-compute-mcp tools [--json]` | Fetch and print the live tool catalog from the hosted endpoint |\n| `massed-compute-mcp version` | Print the version |\n\n## Key resolution\n\nWhen the server starts, the API key is taken from the first source that provides one:\n\n1. `--token <value>` CLI flag\n2. `--token-file <path>` CLI flag (first line, trimmed)\n3. `MASSED_COMPUTE_API_KEY` environment variable\n4. Stored config file written by `init`\n\nIf none of those are set, the server exits non-zero with a pointer to `massed-compute-mcp init`. Override the upstream with `MASSED_COMPUTE_API_BASE_URL` (default `https://vm.massedcompute.com`).\n\n## Resources\n\n- [Full MCP documentation](https://vm-docs.massedcompute.com/docs/category/mcp)\n- [Massed Compute API reference](https://vm-docs.massedcompute.com/api/v1)\n- [Massed Compute console](https://vm.massedcompute.com)\n- [Model Context Protocol spec](https://modelcontextprotocol.io)\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n",
  "bytes": 7624,
  "sha": "b725cb3d8dc388cd8f53dfefeef3dc06eb14fe2b4eeb6d27fc21cfb6a01f0217",
  "repo_slug": "massed-compute/massed-compute-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_massed_compute_mcp_f64ef590/readme"
}