{
  "markdown": "# appcrane-mcp\n\nThe standalone MCP connector for **[AppCrane](https://glick.run/appcrane.html)** — the self-hosted deployment platform for AI-built, agent-deployed apps.\n\nAppCrane exposes an MCP server at `<instance>/api/mcp` that requires an `X-API-Key`. This package is a thin **stdio** MCP server that:\n\n1. Serves the full `appcrane_*` tool catalog for **`tools/list` introspection with zero configuration** — it ships a bundled `catalog.json`, so registries and sandboxes (e.g. Glama) can start it in a container and introspect it offline.\n2. **Proxies real `tools/call`** to your own AppCrane instance once `APPCRANE_URL` and `APPCRANE_KEY` are set.\n\nIt runs anywhere Node 20+ is available, via `npx appcrane-mcp`.\n\n## Install / run\n\n```bash\nnpx appcrane-mcp\n```\n\nWith no environment variables it still starts and answers `tools/list` from the bundled catalog (~35 tools). To actually invoke tools against your instance, set:\n\n| Env var | Required | Description |\n| --- | --- | --- |\n| `APPCRANE_URL` | for calls | Your instance base URL, e.g. `https://crane.example.com` |\n| `APPCRANE_KEY` | for calls | Your AppCrane API key (sent as `X-API-Key`) |\n| `APPCRANE_GITHUB_TOKEN` | optional | A GitHub PAT (sent as `X-Github-Token`) to unlock the `github_*` passthrough tools |\n\n## MCP client configuration\n\nThis is a **stdio** command server (not an HTTP endpoint). Add it to your MCP client config like this:\n\n```json\n{\n  \"mcpServers\": {\n    \"appcrane\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"appcrane-mcp\"],\n      \"env\": {\n        \"APPCRANE_URL\": \"https://crane.example.com\",\n        \"APPCRANE_KEY\": \"your_api_key\",\n        \"APPCRANE_GITHUB_TOKEN\": \"ghp_optional_for_github_passthrough\"\n      }\n    }\n  }\n}\n```\n\nClaude Code CLI:\n\n```bash\nclaude mcp add appcrane \\\n  --env APPCRANE_URL=https://crane.example.com \\\n  --env APPCRANE_KEY=your_api_key \\\n  -- npx -y appcrane-mcp\n```\n\n## How it works\n\n- **`tools/list`**\n  - If `APPCRANE_URL` + `APPCRANE_KEY` are set → connects to `${APPCRANE_URL}/api/mcp` (StreamableHTTP, header `X-API-Key`, plus `X-Github-Token` when the GitHub token is set), fetches the **live, auth-filtered** tool list, and returns it. If the instance is unreachable it falls back to the bundled catalog.\n  - If not configured → returns the **bundled static catalog** (`catalog.json`). This path needs no env vars, which is what a registry's introspection sandbox hits.\n- **`tools/call`** → requires `APPCRANE_URL` + `APPCRANE_KEY`; forwards the call to the backend and returns its result. Without configuration it returns a clear \"not configured\" error.\n\n## Docker\n\n```bash\ndocker build -t appcrane-mcp .\n\n# Introspection only (no config) — starts and serves tools/list:\ndocker run -i --rm appcrane-mcp\n\n# Full use:\ndocker run -i --rm \\\n  -e APPCRANE_URL=https://crane.example.com \\\n  -e APPCRANE_KEY=your_api_key \\\n  appcrane-mcp\n```\n\n## Development\n\n```bash\nnpm install\nnpm run build          # tsc -> dist/\nnpm run gen:catalog    # regenerate catalog.json from the AppCrane platform source\nnode scripts/test-list.mjs   # smoke test: spawn over stdio, assert tools/list\n```\n\nThe bundled `catalog.json` is generated from the real tool definitions in the AppCrane platform (`deployhub/server/services/mcpTools.js`) and reflects the AWS-aligned tool vocabulary (`appcrane_set_secret`, `appcrane_get_secret`, `appcrane_cp`, and the `stage` parameter). It is committed so the package ships self-contained.\n\n## About AppCrane\n\nAppCrane is a self-hosted home for AI-built and AI-deployed apps. This connector is MIT-licensed to maximize adoption; the platform itself is AGPL.\n\n- Platform: https://github.com/gitayg/appCrane\n- Product page: https://glick.run/appcrane.html\n",
  "bytes": 3701,
  "sha": "ea252ba158ea1907a1b8296048937feadb022d552926e89afb3a4ca8fc82d1c2",
  "repo_slug": "gitayg/appcrane-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_gitayg_appcrane_68fc1242/readme"
}