AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

CanLII

mcp-vaquill-ai-canlii-mcp · by Vaquill-AI

MCP for CanLII: Canadian case law and legislation metadata (federal, provincial, territorial).

No reviews yet
0 installs
61 views
0.0% view→install

Install

$ agentstack add mcp-vaquill-ai-canlii-mcp

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-vaquill-ai-canlii-mcp)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of CanLII? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

canlii-mcp

An MCP (Model Context Protocol) server for the CanLII Canadian legal information API. Gives AI assistants access to Canadian case law and legislation metadata across all federal, provincial, and territorial jurisdictions.

> Forked from tomilashy/canlii-mcp. This fork adds bring-your-own-key (BYOK) auth, a /health route, and a hosted endpoint at canlii-mcp.vaquill.ai. Tools are unchanged.

> Note: The CanLII API provides metadata only — titles, citations, dates, keywords, and citation relationships. Full document text is not available through the API.

Use the hosted endpoint (no install)

https://canlii-mcp.vaquill.ai/mcp

Two headers are required for the hosted instance:

  • Authorization: Bearer — gates access to the MCP server itself
  • X-CanLII-Token: — your CanLII key. Apply at canlii.org/en/api/. The server never stores your key.

Claude Desktop / Claude Code

{
  "mcpServers": {
    "canlii": {
      "url": "https://canlii-mcp.vaquill.ai/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN",
        "X-CanLII-Token": "YOUR_CANLII_API_KEY"
      }
    }
  }
}

Cursor / VS Code / Windsurf

Same pattern: any client supporting MCP streamable HTTP with custom headers works. For stdio-only clients use mcp-remote to proxy.

Authentication

| Mode | Header | When | |---|---|---| | BYOK (preferred) | X-CanLII-Token: | Hosted / shared deployments | | Server fallback | (env CANLII_API) | Self-hosted single-tenant. Required for stdio. | | MCP gate | Authorization: Bearer | Optional. Restricts who may use the hosted endpoint. |

Tools

| Tool | Description | |------|-------------| | list_case_databases | List all courts and tribunals in the CanLII collection | | list_cases | Browse decisions from a specific court/tribunal database | | get_case | Get metadata for a specific case (title, citation, date, keywords) | | get_case_citations | Get cases cited by a case, cases citing it, or legislation it references | | list_legislation_databases | List all statute and regulation databases | | list_legislation | Browse statutes or regulations from a specific database | | get_legislation | Get metadata for a specific piece of legislation |

Requirements

Usage

stdio via npx (quickest)

{
  "mcpServers": {
    "canlii": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@tomilashy/canlii-mcp"],
      "env": {
        "CANLII_API": "your_api_key"
      }
    }
  }
}

stdio (from source)

npm install
npm run build
node dist/index.js

Add to your MCP config:

{
  "mcpServers": {
    "canlii": {
      "command": "node",
      "args": ["/path/to/canlii-mcp/dist/index.js"],
      "env": {
        "CANLII_API": "your_api_key"
      }
    }
  }
}

HTTP server

PORT=3000 CANLII_API=your_api_key node dist/index.js --transport http

The MCP endpoint is available at http://localhost:3000/mcp. The server runs in stateless mode — each request is self-contained, no session ID or initialize handshake required. Clients can call tools directly:

curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_case_databases","arguments":{"language":"en"}}}'

Docker

docker run -e CANLII_API=your_api_key -e MCP_AUTH_TOKEN=your_secret -p 3000:3000 ghcr.io/tomilashy/canlii-mcp

Or with Docker Compose:

services:
  canlii-mcp:
    image: ghcr.io/tomilashy/canlii-mcp
    environment:
      CANLII_API: your_api_key
      MCP_AUTH_TOKEN: your_secret  # optional
    ports:
      - "3000:3000"

Cloudflare Workers

The server includes a Workers-compatible entry point (src/worker.ts).

CLI deploy
npx wrangler secret put CANLII_API
npx wrangler secret put MCP_AUTH_TOKEN  # optional
npx wrangler deploy
Dashboard deploy (Connect to Git)
  1. Go to Cloudflare DashboardWorkers & PagesCreateConnect to Git
  2. Select your tomilashy/canlii-mcp repository
  3. On the Set up your application page:
  • Project name: canlii-mcp
  • Build command: npm install && npm run build
  • Deploy command: npx wrangler deploy (pre-filled)
  1. Expand Advanced settings:
  • Variable name: CANLII_API
  • Variable value: your CanLII API key
  • Check Encrypt to store it as a secret
  1. Click Deploy

The MCP endpoint will be at https://canlii-mcp..workers.dev/mcp.

Configuration

| Environment Variable | Required | Default | Description | |---------------------|----------|---------|-------------| | CANLII_API | Yes | — | Your CanLII API key | | PORT | No | 3000 | HTTP server port (HTTP mode only) | | MCP_AUTH_TOKEN | No | — | Bearer token for HTTP authentication. If set, all HTTP requests must include Authorization: Bearer . If not set, the server runs without authentication. |

Rate Limits

The server enforces CanLII's API limits automatically:

  • 1 request at a time
  • 2 requests per second
  • 5,000 requests per day

Requests that exceed the daily limit return an error rather than hitting the API.

Development

npm install
npm run build      # compile TypeScript
npm run watch      # watch mode

Release

This project uses Semantic Versioning via semantic-release. Commit messages follow the Conventional Commits spec:

| Commit prefix | Release type | |---------------|-------------| | fix: | Patch (1.0.01.0.1) | | feat: | Minor (1.0.01.1.0) | | feat!: or BREAKING CHANGE | Major (1.0.02.0.0) |

Pushing to main triggers the release workflow. If a release is cut, the Docker image is automatically built and published to ghcr.io.

License

MIT

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.