{"_id":"@canner-ca/mcp","_rev":"2-5846282c97ac42f9b2d09832422e4584","name":"@canner-ca/mcp","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@canner-ca/mcp","version":"0.1.0","keywords":["canner","mcp","model-context-protocol","ai","agent","deploy","canadian","hosting"],"author":{"name":"Canner"},"license":"MIT","_id":"@canner-ca/mcp@0.1.0","maintainers":[{"name":"gocanner","email":"colinh.shand@gmail.com"}],"homepage":"https://canner.ca/mcp","bugs":{"url":"https://github.com/tzshand/canner/issues"},"bin":{"canner-mcp":"src/server.mjs"},"dist":{"shasum":"59b1072feaeb0d8f43e5f92bba92b95022073e08","tarball":"https://registry.npmjs.org/@canner-ca/mcp/-/mcp-0.1.0.tgz","fileCount":3,"integrity":"sha512-KXcsFXEOMLIF2RZIrK9dZqjqC0WeXpVtlNZCMsyoktW1xzzDcRtULZWR50zyHaflmNxQpYBh2ftGTzdT6suL5w==","signatures":[{"sig":"MEQCID8sLJzsF+HaIiPaBMUZEB7QkxraZiDkFs5p0FSMy1uyAiB1DZe+OJE0w8M5qghktrBEgAk4V+Xqc+hUiQHeMf0WsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18894},"type":"module","engines":{"node":">=20"},"gitHead":"9534cb9b69976dc0524709a2b30e61d0327020e5","scripts":{"start":"node src/server.mjs","prepublishOnly":"node -e \"require('fs').accessSync('src/server.mjs')\""},"_npmUser":{"name":"gocanner","email":"colinh.shand@gmail.com"},"repository":{"url":"git+https://github.com/tzshand/canner.git","type":"git","directory":"tools/mcp"},"_npmVersion":"10.9.2","description":"Model Context Protocol server for Canner — let an AI agent deploy, inspect, and manage your Canadian-hosted projects","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1780886648502_0.3568825698104703","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@canner-ca/mcp","version":"0.2.0","description":"Model Context Protocol server for Canner — let an AI agent deploy, inspect, and manage your Canadian-hosted projects","type":"module","bin":{"canner-mcp":"src/server.mjs"},"publishConfig":{"access":"public"},"scripts":{"start":"node src/server.mjs","prepublishOnly":"node -e \"require('fs').accessSync('src/server.mjs')\""},"engines":{"node":">=20"},"keywords":["canner","mcp","model-context-protocol","ai","agent","deploy","canadian","hosting"],"author":{"name":"Canner"},"license":"MIT","homepage":"https://canner.ca/mcp","repository":{"type":"git","url":"git+https://github.com/tzshand/canner.git","directory":"tools/mcp"},"bugs":{"url":"https://github.com/tzshand/canner/issues"},"_id":"@canner-ca/mcp@0.2.0","gitHead":"450b9bc60efb03eb0f37519779b41a36289bb8ea","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-DOJob35bhC8UfFGu1loawWYU39WKEyuAjEDbrmepiNwqiu3ogYop/4f0u1NDOg9xxp8TKe5DZcCL7FcmiI9XSA==","shasum":"119bf143a568ffce5569bfea7b9989fbfafea889","tarball":"https://registry.npmjs.org/@canner-ca/mcp/-/mcp-0.2.0.tgz","fileCount":3,"unpackedSize":16304,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICZnWZLbHyVatV8BD4j3SADy4K4OnQgfG+6uMELkVtGTAiB7Q8g2dTuwhLk6BZ7VM77fDydK8gEYTMaghdiaClV4vw=="}]},"_npmUser":{"name":"gocanner","email":"colinh.shand@gmail.com"},"directories":{},"maintainers":[{"name":"gocanner","email":"colinh.shand@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.2.0_1784389400993_0.7526398615815095"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-08T02:44:08.320Z","modified":"2026-07-18T15:43:21.290Z","0.1.0":"2026-06-08T02:44:08.628Z","0.2.0":"2026-07-18T15:43:21.104Z"},"bugs":{"url":"https://github.com/tzshand/canner/issues"},"author":{"name":"Canner"},"license":"MIT","homepage":"https://canner.ca/mcp","keywords":["canner","mcp","model-context-protocol","ai","agent","deploy","canadian","hosting"],"repository":{"type":"git","url":"git+https://github.com/tzshand/canner.git","directory":"tools/mcp"},"description":"Model Context Protocol server for Canner — let an AI agent deploy, inspect, and manage your Canadian-hosted projects","maintainers":[{"name":"gocanner","email":"colinh.shand@gmail.com"}],"readme":"# @canner-ca/mcp\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server for [Canner](https://canner.ca). It lets an MCP-aware AI agent — Claude Desktop, Cursor, and others — deploy, inspect, and manage your Canner projects as native tools.\n\n**Zero dependencies.** The server speaks the MCP stdio transport (newline-delimited JSON-RPC 2.0) directly, with no third-party packages. That's on purpose: Canner is built around a clean supply chain (sandboxed builds, `--ignore-scripts`), so the tool you run *inside your agent* ships nothing extra to audit.\n\nRequires Node.js 20 or later.\n\n**Browser-based builders (Lovable, Bolt, v0)** don't run `npx` — they connect to a *remote* MCP server by URL. Point them at `https://api.canner.ca/mcp` and authenticate with your `cnr_` token. This npm package is for **desktop** agents (Claude Desktop, Cursor, Claude Code); it proxies that same endpoint. See <https://canner.ca/mcp>.\n\n## Setup\n\nYou need a Canner API token (`cnr_…`) from <https://canner.ca/dashboard/account>.\n\n### Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"canner\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@canner-ca/mcp\"],\n      \"env\": { \"CANNER_TOKEN\": \"cnr_your_token_here\" }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"canner\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@canner-ca/mcp\"],\n      \"env\": { \"CANNER_TOKEN\": \"cnr_your_token_here\" }\n    }\n  }\n}\n```\n\nRestart the client and the Canner tools appear. If you've already run `canner login` with [`@canner-ca/cli`](https://canner.ca/cli), you can omit `CANNER_TOKEN` — the server falls back to the credentials stored at `~/.canner/credentials`.\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `canner_whoami` | Confirm which account the server is authenticated as. |\n| `canner_list_projects` | List the projects this account can access. |\n| `canner_get_project` | Get one project's status, URL, and source. |\n| `canner_list_deployments` | List a project's deployments (newest first). |\n| `canner_get_deployment` | Get one deployment in full, including its build log — use this to diagnose a failed build. |\n| `canner_deploy` | Trigger a rebuild of a GitHub-connected project from `HEAD`. |\n| `canner_list_env_vars` | List a project's environment variables. |\n| `canner_set_env_var` | Add an environment variable (with optional scope + sensitivity). |\n| `canner_list_domains` | List a project's custom domains and their status. |\n| `canner_add_domain` | Attach a custom domain (starts `pending`). |\n| `canner_verify_domain` | Re-check DNS and provision TLS for a domain. |\n| `canner_create_project` | Create a new empty project to deploy into. Returns the new slug. |\n| `canner_save_app` | Deploy an app by sending its source files directly — no repo required. Pair with `canner_create_project`. |\n\nEach tool wraps an endpoint of the documented Canner REST API — the versioned `/v1` surface. See the [API reference](https://canner.ca/developers) (interactive explorer at <https://api.canner.ca/docs>, OpenAPI spec at <https://api.canner.ca/openapi.json>).\n\n### What's intentionally not here\n\nDestructive operations — deleting a project, revoking a token, dropping a database or domain — are **not** exposed as tools, so an agent can't take them by mistake. Do those from the [dashboard](https://canner.ca/dashboard) or the [`@canner-ca/cli`](https://canner.ca/cli).\n\n## Environment\n\n| Variable | Purpose |\n|---|---|\n| `CANNER_TOKEN` | Your `cnr_` API token. If unset, the server reads `~/.canner/credentials` (written by `canner login`). |\n| `CANNER_API_BASE` | Override the API endpoint. Default `https://api.canner.ca`. |\n\n## How it works\n\nThe server reads JSON-RPC requests on stdin and writes responses on stdout, one JSON object per line. It implements `initialize`, `tools/list`, `tools/call`, and `ping`. Every `tools/call` resolves credentials, issues one authenticated HTTPS request to the Canner API, and returns the JSON result as text content. Errors (auth, validation, not-found) come back as `isError` tool results with the API's message and `request_id`, so the agent can react instead of crashing.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}