npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@canner-ca/mcp

v0.1.0

Published

Model Context Protocol server for Canner — let an AI agent deploy, inspect, and manage your Canadian-hosted projects

Readme

@canner-ca/mcp

A Model Context Protocol server for Canner. It lets an MCP-aware AI agent — Claude Desktop, Cursor, and others — deploy, inspect, and manage your Canner projects as native tools.

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.

Requires Node.js 20 or later.

Setup

You need a Canner API token (cnr_…) from https://canner.ca/dashboard/account.

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "canner": {
      "command": "npx",
      "args": ["-y", "@canner-ca/mcp"],
      "env": { "CANNER_TOKEN": "cnr_your_token_here" }
    }
  }
}

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "canner": {
      "command": "npx",
      "args": ["-y", "@canner-ca/mcp"],
      "env": { "CANNER_TOKEN": "cnr_your_token_here" }
    }
  }
}

Restart the client and the Canner tools appear. If you've already run canner login with @canner-ca/cli, you can omit CANNER_TOKEN — the server falls back to the credentials stored at ~/.canner/credentials.

Tools

| Tool | What it does | |---|---| | canner_whoami | Confirm which account the server is authenticated as. | | canner_list_projects | List the projects this account can access. | | canner_get_project | Get one project's status, URL, and source. | | canner_list_deployments | List a project's deployments (newest first). | | canner_get_deployment | Get one deployment in full, including its build log — use this to diagnose a failed build. | | canner_deploy | Trigger a rebuild of a GitHub-connected project from HEAD. | | canner_list_env_vars | List a project's environment variables. | | canner_set_env_var | Add an environment variable (with optional scope + sensitivity). | | canner_list_domains | List a project's custom domains and their status. | | canner_add_domain | Attach a custom domain (starts pending). | | canner_verify_domain | Re-check DNS and provision TLS for a domain. |

Each tool wraps an endpoint of the documented Canner REST API — the versioned /v1 surface. See the API reference (interactive explorer at https://api.canner.ca/docs, OpenAPI spec at https://api.canner.ca/openapi.json).

What's intentionally not here

Destructive 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 or the @canner-ca/cli.

Environment

| Variable | Purpose | |---|---| | CANNER_TOKEN | Your cnr_ API token. If unset, the server reads ~/.canner/credentials (written by canner login). | | CANNER_API_BASE | Override the API endpoint. Default https://api.canner.ca. |

How it works

The 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.

License

MIT.