CanLII MCP Server: Canadian Legal Research

A CanLII MCP server is a Model Context Protocol bridge that lets an AI assistant like Claude, Cursor, or VS Code query the CanLII API for Canadian court decisions, legislation, and citation graphs. You bring a CanLII API key, connect the server, and your assistant can list courts, pull case metadata, and walk citations from inside the editor.

This guide covers what the CanLII API actually returns (metadata, not full judgment text), how to install and configure a CanLII MCP in four editors, a real query-to-result example, the access and rate-limit caveats, and how the hosted Vaquill AI server compares to the DIY options.

Last verified: June 2026.

TL;DR

  • A CanLII MCP gives an AI assistant structured access to 2.5M+ Canadian court and tribunal decisions, plus federal and provincial legislation, through the CanLII API.
  • The catch most reviews skip: the CanLII API returns metadata and a citation graph, not full-text judgments. The value is graph traversal and jurisdiction mapping, not reading the reasoning.
  • The 5,000-requests-per-day cap is the binding constraint for any automated workflow. Plan citation walks accordingly.
  • Two real choices exist: a hosted bring-your-own-key server (no install) or a self-hosted stdio server you run yourself. Both hit the same CanLII quota.
  • If you need full judgment text inside the assistant, no CanLII-API wrapper can give it to you. Pair the MCP with pasted excerpts or a different full-text source.
Quick check

What is the hard daily request cap on the CanLII API, the binding constraint for automated workflows?

Part of our MCP and developer guide series.

For related MCP / API / developer coverage, see CourtListener MCP: US Federal & State Court Research and Composing Three Legal MCPs (CourtListener, CanLII, Vaquill AI) Into One Workflow.

After shipping a CourtListener MCP server for US law (see /blog/courtlistener-mcp-server-us-legal-research), we added a second jurisdiction: Canada via CanLII.

CanLII (Canadian Legal Information Institute, at canlii.org) is Canada's primary free legal research platform. It provides access to decisions from all federal and provincial courts, plus statutes and regulations from every Canadian jurisdiction.

The CanLII API (canlii.org/en/api) exposes this data programmatically.

The MCP server is a thin streamable-HTTP wrapper that you connect to with your own CanLII API key.

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

Authentication: Two headers. Authorization: Bearer <MCP gate token> controls who can use the hosted server, and X-CanLII-Token: <your CanLII API key> is forwarded to canlii.org so calls hit your CanLII quota, not ours.

We never store your key.

Understanding the Canadian Court System

Before diving into the tools, it helps to understand how Canadian courts are structured - since this directly maps to the databases you'll query through the MCP server.

Canada has a bijural legal system: common law applies in nine provinces and the three territories, while Quebec follows civil law (derived from the French tradition) for private matters.

All jurisdictions share the same criminal law under the federal Criminal Code.

The court hierarchy, from highest to lowest:

  1. Supreme Court of Canada (SCC) - the final court of appeal for all legal matters in Canada. Hears roughly 60-80 cases per year on leave (permission to appeal). Its decisions are binding on all courts below.
  2. Federal Court of Appeal & Provincial/Territorial Courts of Appeal - intermediate appellate courts. The Federal Court of Appeal handles appeals from the Federal Court and certain federal tribunals. Each province has its own Court of Appeal.
  3. Federal Court & Provincial/Territorial Superior Courts - trial-level courts of general jurisdiction. The Federal Court handles immigration, intellectual property, maritime law, and disputes involving the federal government. Provincial superior courts (called the Court of Queen's/King's Bench in some provinces, Superior Court in Quebec and Ontario) handle serious criminal cases, civil disputes above a threshold, and family law.
  4. Provincial Courts - handle the majority of criminal cases, family law, youth justice, traffic, and small claims. Not all provincial court decisions appear on CanLII.
  5. Federal and Provincial Tribunals - specialized bodies like the Immigration and Refugee Board, Canadian Human Rights Tribunal, labour relations boards, and securities commissions. CanLII covers many of these.

This hierarchy matters because when you use list_case_databases, you'll see entries for each of these courts, and you need to know which database ID corresponds to which level of authority.

What Is CanLII?

CanLII is operated by the Federation of Law Societies of Canada and funded by Canada's 14 law societies.

Launched in 2000, it has grown into the most comprehensive free legal research platform in Canada, hosting over 2.5 million court and tribunal decisions and the full text of legislation from all Canadian jurisdictions.

Coverage varies by court:

  • Supreme Court of Canada: decisions dating back to 1876
  • Federal Courts: generally from the 1970s onward
  • Provincial Superior Courts and Courts of Appeal: coverage typically starts between the 1980s and 2000s, varying by province
  • Tribunals: coverage depends on the individual tribunal's participation

CanLII provides free access to:

  • Court decisions from the Supreme Court of Canada, Federal Court, Federal Court of Appeal, Tax Court, all provincial superior courts, courts of appeal, and many tribunals
  • Legislation - federal statutes and regulations, plus provincial/territorial statutes and regulations from all 13 provinces and territories
  • Bilingual content - full English and French coverage across all jurisdictions

Why Bilingual Matters

Canada's Official Languages Act requires all federal legislation and Supreme Court decisions to be published in both English and French. Many provincial courts in Quebec issue decisions only in French, while courts in other provinces issue primarily in English.

For lawyers practicing in bilingual jurisdictions or dealing with federal matters, the ability to research in both languages is not optional - it's essential.

The CanLII MCP server preserves this bilingual capability. When your AI assistant retrieves case metadata, it returns whatever language the original decision was published in. For federal statutes, both language versions are available.

Canadian Citation Format

Canadian law uses a neutral citation system adopted by courts starting in 1999. Unlike the US system (where citations reference print reporters like "410 U.S. 113"), Canadian neutral citations are court-assigned and don't depend on any publisher:

  • 2016 SCC 27 = Supreme Court of Canada, 27th decision of 2016 (this is R v Jordan)
  • 2024 FCA 101 = Federal Court of Appeal, 101st decision of 2024
  • 2023 ONCA 456 = Ontario Court of Appeal, 456th decision of 2023
  • 2022 QCCS 789 = Quebec Superior Court, 789th decision of 2022

Older decisions still use traditional reporter citations: SCR (Supreme Court Reports), DLR (Dominion Law Reports), OR (Ontario Reports), etc. CanLII supports both formats.

The get_case tool returns the neutral citation for any decision, which is the standard way to reference Canadian cases in legal writing. The get_case_citations tool uses these citations to build the citation graph.

The CanLII API provides metadata access (case titles, citations, dates, keywords, citation relationships). Note that full-text document content is not available through the API, only metadata.

7 Tools Available

The CanLII MCP server exposes 7 tools:

Case Law Tools

ToolWhat It Does
list_case_databasesList all courts and tribunals in the CanLII system. Returns database IDs you'll need for other tools.
list_casesBrowse decisions from a specific court. Filter and paginate through a court's entire decision catalog.
get_caseGet case metadata - title, citation, date, docket number, keywords, and database info.
get_case_citationsGet the citation graph for a case. Returns three lists: cases this decision cites, cases that cite this decision, and legislation this decision references.

Legislation Tools

ToolWhat It Does
list_legislation_databasesList all statute and regulation databases - federal, provincial, and territorial.
list_legislationBrowse statutes and regulations from a specific database.
get_legislationGet legislation metadata - title, citation, type, and database info.

Getting a CanLII API Key

Every CanLII MCP needs a CanLII API key. There is no public self-serve signup. You request access through the API page at canlii.org/en/api and describe the scope of your project; CanLII issues keys for research and educational use (CanLII, accessed June 2026). Approval is generally straightforward for legal professionals and researchers, but it is a manual review, so apply before you plan to build.

A few terms worth reading before you commit a workflow to it:

  • Metadata access only. CanLII's terms allow programmatic access to metadata. They do not grant a license to re-host or redistribute the underlying documents, which is part of why no API wrapper can hand you full judgment text.
  • The key is yours, the quota is yours. Whether you self-host or use a hosted server, calls count against the key you applied for.

Rate limits (CanLII API):

  • 1 concurrent request
  • 2 requests per second
  • 5,000 requests per day (hard cap)

These are CanLII's limits, not any MCP server's. The 5,000/day cap is the binding constraint for most workflows.

CanLII MCP Options Compared

Search "canlii mcp" and you will find several servers. They split into three shapes. Pick by whether you want to run anything yourself and whether you need full text.

OptionInstallTransportFull text?Notes
Hosted BYOK server (Vaquill AI)None, point at a URLStreamable HTTPNo (CanLII API limit)You bring a CanLII key via header; 7 tools, citation graph
Self-hosted stdio server (open source)npm or Dockerstdio or HTTPNo (CanLII API limit)Several exist on GitHub and npm; you run and update it. Some add an undocumented keyword search endpoint that can change without notice
A2AJ MCPNone, custom connectorStreamable HTTPYesNot a CanLII wrapper. Serves the A2AJ Canadian legal dataset and returns full case and legislation text; built for small retrievals, not bulk (A2AJ, accessed June 2026)

The honest read: if your assistant needs to read the actual reasoning, a CanLII-API server (hosted or self-hosted) cannot do it, and A2AJ's full-text MCP is the better fit for that one job. If you want CanLII's citation graph and jurisdiction coverage across every Canadian court and tribunal, a CanLII MCP is the tool, and the only real question is whether you want to run it yourself.

Setup

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

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

Two headers, two jobs. Authorization is the gate token that lets you use the hosted server. X-CanLII-Token is your own CanLII API key, forwarded to canlii.org so calls draw down your quota, not ours.

Claude Code

claude mcp add canlii \
  --transport http \
  --header "Authorization: Bearer YOUR_MCP_GATE_TOKEN" \
  --header "X-CanLII-Token: YOUR_CANLII_API_KEY" \
  https://canlii-mcp.vaquill.ai/mcp

Cursor

Go to Settings > MCP and add:

  • Type: streamableHttp
  • URL: https://canlii-mcp.vaquill.ai/mcp
  • Headers: Authorization: Bearer YOUR_MCP_GATE_TOKEN and X-CanLII-Token: YOUR_CANLII_API_KEY

VS Code (Copilot)

Add to .vscode/settings.json:

{
  "mcp": {
    "servers": {
      "canlii": {
        "type": "http",
        "url": "https://canlii-mcp.vaquill.ai/mcp",
        "headers": {
          "Authorization": "Bearer YOUR_MCP_GATE_TOKEN",
          "X-CanLII-Token": "YOUR_CANLII_API_KEY"
        }
      }
    }
  }
}

Windsurf

Add to your MCP config:

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

Example Prompts

Once connected, try these in your AI editor:

  • "List all courts in the CanLII system"
  • "Find recent Supreme Court of Canada decisions"
  • "Get the case details for R v Jordan 2016 SCC 27"
  • "Show the citation graph for this case - what does it cite and what cites it?"
  • "List federal statutes in the CanLII database"
  • "Browse Ontario provincial legislation on employment standards"

Your AI assistant will call the right CanLII tools and return structured metadata from actual Canadian court records.

A Real Query and What Comes Back

Ask the assistant: "Get the case details for R v Jordan 2016 SCC 27." It calls get_case against the Supreme Court database and returns metadata shaped like this (fields abbreviated):

{
  "caseId": { "en": "2016scc27" },
  "databaseId": "csc-scc",
  "title": "R. v. Jordan",
  "citation": "2016 SCC 27, [2016] 1 SCR 631",
  "language": "en",
  "docketNumber": "36068",
  "decisionDate": "2016-07-08",
  "keywords": "criminal law; trial within a reasonable time; section 11(b)",
  "url": "https://www.canlii.org/en/ca/scc/doc/2016/2016scc27/2016scc27.html"
}

Notice the url field. That is your bridge to the full text, since the API itself stops at metadata. Follow it with get_case_citations and you get the citing-cases list that tells you whether Jordan has been narrowed since 2016. The decision date, docket, and keyword tags are enough for the assistant to confirm you have the right case before it spends another request.

Citation Graph: The Killer Feature

The get_case_citations tool is particularly useful. For any Canadian case, it returns three lists:

  1. citedCases - decisions this case cites in its reasoning
  2. citingCases - subsequent decisions that cite this case
  3. citedLegislation - statutes and regulations referenced in the decision

This gives your AI assistant a real citation graph to work with. Ask it to trace how a legal principle has evolved through Canadian courts, and it can follow the citation chain through actual case relationships rather than guessing.

The real value is graph traversal and jurisdiction mapping, not reading the reasoning.

Practical Citation Graph Workflows

Checking if a case is still good law. Ask your AI assistant: "Get the citation graph for R v Jordan 2016 SCC 27 and tell me if any subsequent SCC decisions have narrowed or distinguished it." The tool will return all citing cases, and your assistant can analyze the list for Supreme Court-level decisions that may have modified the principle.

Tracing a legal doctrine's development. Start with a foundational case like R v Oakes [1986] 1 SCR 103 (which established the Oakes test for justifying Charter rights limitations under Section 1). Pull its citing cases, then follow the chain through key decisions like Dagenais v CBC [1994] 3 SCR 835 and R v Bryan 2007 SCC 12 to see how the proportionality analysis evolved.

Finding the legislative basis for a decision. The citedLegislation list shows exactly which statutes and sections a court relied on.

This is invaluable when you need to understand how a particular provision has been interpreted: pull the legislation citations from multiple cases to build a picture of judicial interpretation over time.

Landmark Cases You Can Research

To give you a sense of what's available, here are some frequently researched Canadian decisions - all accessible through the CanLII MCP server:

CaseCitationSignificance
R v Oakes[1986] 1 SCR 103Established the Oakes test for Section 1 Charter analysis - the framework for determining when a government can justifiably limit a Charter right
R v Jordan2016 SCC 27Set presumptive ceilings for trial delays (18 months in provincial court, 30 months in superior court) under Section 11(b) Charter right to trial within a reasonable time
Carter v Canada2015 SCC 5Struck down the criminal prohibition on physician-assisted dying as violating Section 7 Charter rights to life, liberty, and security of the person
Reference re Secession of Quebec[1998] 2 SCR 217The SCC's landmark advisory opinion on whether Quebec could unilaterally secede - established that unilateral secession would be unconstitutional but that Canada would have a duty to negotiate
Donoghue v Stevenson[1932] AC 562While a UK House of Lords decision, it's foundational to Canadian tort law (the "neighbour principle") and heavily cited in Canadian jurisprudence
R v Grant2009 SCC 32Reformulated the test for excluding evidence obtained in breach of Charter rights under Section 24(2)
Hryniak v Mauldin2014 SCC 7Shifted the culture of summary judgment in Canadian civil procedure - courts should grant summary judgment when there is no genuine issue requiring a trial

Combine with a US Stack

The real value is running multiple MCP servers together for cross-jurisdiction research:

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

CourtListener US federal and state court research interface

With this config, your AI assistant has access to:

  • US (open data): Federal and state court opinions, dockets, PACER data, and eCFR via CourtListener
  • Canada: Federal and provincial decisions, legislation, and citation graphs via CanLII

Ask a cross-jurisdictional question like "How do the US and Canada approach the doctrine of promissory estoppel?" and your assistant will pull from both databases.

Loading diagram...

What "Metadata Only" Means in Practice

This is the most important limitation to understand. The CanLII API returns structured metadata about cases and legislation, but not the full text of judgments or statutes. Here's what you can and can't do:

What you get from the API (and the MCP server):

  • Case title, citation, date, docket number
  • Court and database identification
  • Keywords and subject matter tags
  • Full citation graph (cited cases, citing cases, cited legislation)
  • Legislation titles, citations, and types

What you don't get:

  • The full text of the judgment itself
  • Headnotes or summaries
  • The full text of statutes or regulations
  • Dissenting or concurring opinion text

Practical impact: Your AI assistant can identify the right cases, tell you what they cite and what cites them, and give you the metadata needed to assess relevance, but it can't read the actual decision for you.

Think of it as a powerful index and citation navigator rather than a full-text research tool.

For workflows where you need the AI to analyze judgment text, combine this with a workflow where you paste relevant excerpts into the conversation, or direct the AI to fetch the CanLII web page for specific cases.

Important Limitations

Since this wraps the CanLII API, it inherits CanLII's constraints:

  • Metadata only - the API returns case titles, citations, dates, and keywords, but not full-text judgment content. For full text, you'll need to visit CanLII directly.
  • 5,000 requests/day - this is a hard limit from CanLII. If you're building automated workflows, plan for this. A typical research session might use 50-200 requests, so this is generous for individual use but limiting for batch processing.
  • 1 concurrent request - requests are serialized, so your AI assistant can only make one CanLII call at a time. This means citation graph traversal across many cases will be sequential.
  • Your API key - bring your own CanLII API key. Apply at canlii.org/en/api - approval is generally straightforward for legal professionals and researchers. (The hosted CourtListener endpoint follows the same BYOK pattern with a CourtListener token.)
  • No full-text search - you can browse cases by court and date, and traverse citations, but you cannot search case text for keywords through the API. Use CanLII's website for keyword searches, then use the MCP server to explore citation relationships around the cases you find.

Self-Hosting

If you prefer to run your own instance, clone the canlii-mcp source, copy .env.example to .env with your CANLII_API key, then build and run with Docker on port 3000.

The server supports two transports:

  • streamable_http at /mcp (stateless, used by the hosted endpoint)
  • stdio for local process communication

Technical Details

  • Language: TypeScript with MCP SDK and Hono
  • Transport: Streamable HTTP (stateless)
  • Docker: Port 3000
  • Bilingual: Full English and French support

What's Next

We're continuing to add jurisdiction-specific MCP servers. The integrations repo tracks what's available and what's planned (Slack bot, Discord bot, WhatsApp chatbot, WordPress plugin).

FAQ

What is a CanLII MCP?

A CanLII MCP is a Model Context Protocol server that connects an AI assistant to the CanLII API. Once connected, the assistant can list Canadian courts, pull case metadata, browse legislation, and walk citation graphs without you leaving the editor. It needs your own CanLII API key.

Does CanLII have an API?

Yes. CanLII maintains an API that returns metadata for its collection as JSON: case titles, citations, dates, keywords, citation relationships, and legislation records. There is no public self-serve signup; you request a key through canlii.org/en/api for research or educational use.

Does the CanLII API return full case text?

No. The CanLII API returns metadata and citation data, not the full text of judgments, statutes, or regulations. Every record includes the canlii.org URL, so you can follow the link to read the document on the website. If you need full text inside the assistant, pair the MCP with pasted excerpts or use a full-text source like the A2AJ MCP.

Is CanLII free to use?

Browsing on canlii.org is free. The website is funded by Canada's law societies and the Federation of Law Societies of Canada. The API also has no fee, but it is access-gated: you apply for a key and are subject to the rate limits, including the 5,000-requests-per-day cap.

How do I get a CanLII API key?

Apply through the API page at canlii.org/en/api and describe your project's scope. CanLII issues keys for research and educational use, and approval is generally straightforward for legal professionals and researchers. It is a manual review, so request access before you plan your build.

What is the CanLII API rate limit?

Three limits apply: 1 concurrent request, 2 requests per second, and 5,000 requests per day as a hard cap. The daily cap is the binding constraint. A typical research session uses 50 to 200 requests, but batch citation walks can exhaust it quickly.

How do I connect CanLII to Claude?

Add the server to your Claude Desktop config or run claude mcp add in Claude Code with two headers: an Authorization bearer token for the hosted server and an X-CanLII-Token header carrying your own CanLII API key. The setup section above has copy-paste blocks for Claude Desktop, Claude Code, Cursor, VS Code, and Windsurf. For a broader walkthrough of running legal MCPs in editors, see our legal research in Cursor and Claude Code guide.

Can I search Canadian case text by keyword through the CanLII MCP?

Not through the CanLII API itself, which supports browsing by court and date plus citation traversal, but no full-text keyword search. Some self-hosted servers add an undocumented search endpoint that can change without notice. For reliable keyword search, run it on the CanLII website, then use the MCP to explore the citation graph around the cases you find.

Vaquill AI legal research with source-linked citations Inside Vaquill AI, the same grounded research surface that the MCP servers feed, with citations you can open.

Try It

Apply for a CanLII key, point your editor at https://canlii-mcp.vaquill.ai/mcp with the two headers above, and ask your assistant to walk a citation graph. To see the wider stack this fits into, read the CourtListener MCP for US court research, the guide to composing CourtListener, CanLII, and Vaquill AI into one workflow, how to use Claude for US legal research over MCP, and the MCP registry guide for legal AI. For Vaquill AI's grounded research surface itself, see /features/legal-research, or email contact@vaquill.ai.

Legal AI that reads your documents and knows the law.
Ask a legal question, review a contract, or search thousands of your files. Every answer shows where it came from. 7-day free trial, no card.
21 min read

New legal AI guides, weekly.

Priyansh Khodiyar

Priyansh Khodiyar

Co-Founder & CTO

Priyansh leads engineering and AI at Vaquill, from the matter workbench to drafting, document comparison, document matrix, and citation-verified research.