Skip to main content
Glama

CanLII MCP 服务器

npm version License: MIT

一个用于通过 CanLII API 搜索加拿大法律信息的 模型上下文协议 (MCP) 服务器。在 Claude Desktop 或 Claude Code 中搜索案例、浏览法规并检查引文。

npx canlii-mcp

功能

  • 全文搜索 — 通过关键词、案例名称或法律概念搜索整个 CanLII 数据库

  • 案例引文分析 — 通过查找后续引用案例来检查案例是否仍然有效

  • 法规浏览 — 按司法管辖区浏览成文法和法规

  • 双语支持 — 所有工具(包括引文分析器)均支持英语和法语

  • 9 个工具 — 搜索、浏览法院、浏览案例、案例元数据、完整引文分析、引文预览、法规数据库、浏览法规、法规元数据

  • 内置速率限制 — 序列化请求队列遵循 CanLII 的 API 限制(2 次请求/秒,1 个并发,5,000 次/天)

  • 输入验证 — 所有参数均经过正则表达式验证和 URI 编码,以防止注入

  • 极简占用 — 仅 2 个运行时依赖,约 500 行代码,作为 stdio 进程在本地运行

  • 安全优先 — 无文件系统访问权限,无 shell 执行权限,仅连接至 api.canlii.org

Related MCP server: canlii-mcp

快速入门

先决条件: Node.js 18+ 和一个 CanLII API 密钥(研究用途免费)。

Claude Desktop — 添加到您的配置中(macOS 上位于 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "canlii": {
      "command": "npx",
      "args": ["-y", "canlii-mcp"],
      "env": {
        "CANLII_API_KEY": "your_api_key_here"
      }
    }
  }
}

保存后重启 Claude Desktop。

Claude Code:

claude mcp add canlii -e CANLII_API_KEY=your_key -- npx -y canlii-mcp

从源码安装(用于开发):

git clone https://github.com/mohammadfarooqi/canlii-mcp.git
cd canlii-mcp
npm install && npm run build

可用工具 (9)

在整个 CanLII(案例、法规和评论)中进行全文关键词搜索。这是法律研究的主要入口。

search({ query: "material change in circumstances Ontario", resultCount: 10 })

get_courts_and_tribunals

列出所有可用的法院和法庭数据库。返回其他工具所需的数据库 ID。

安大略省主要数据库:onsc(高等法院)、onca(上诉法院)、oncj(司法法院)、csc-scc(加拿大最高法院)。

get_case_law_decisions

浏览特定法院数据库中的判例法,按最新添加顺序排列。支持日期筛选。

get_case_law_decisions({ databaseId: "onsc", resultCount: 20 })

get_case_metadata

获取特定案例的详细信息——引文、判决日期、案卷号、关键词以及用于阅读完整判决的 CanLII URL。

get_case_metadata({ databaseId: "onsc", caseId: "2021onsc8582" })

get_case_citator

查找案例的引文关系。使用 citingCases 检查案例是否仍然有效。

get_case_citator({ databaseId: "csc-scc", caseId: "1996canlii190", metadataType: "citingCases" })

get_case_citator_tease

快速引文预览,最多返回 5 个结果。比完整引文分析器更快,适合快速检查。

get_case_citator_tease({ databaseId: "csc-scc", caseId: "1996canlii190", metadataType: "citingCases" })

get_legislation_databases

列出所有法规数据库。安大略省:ons(成文法)、onr(法规)。联邦:cas(成文法)、car(法规)。

browse_legislation

列出特定数据库中的法规条目。

browse_legislation({ databaseId: "ons" })

get_legislation_regulation_metadata

获取特定成文法或法规的元数据,包括其 CanLII URL。

典型研究工作流程

  1. 搜索 — search({ query: "gatekeeping parenting time" }) 以查找相关案例

  2. 获取详情 — get_case_metadata(...) 以获取完整引文和 CanLII URL

  3. 检查引文 — get_case_citator(..., metadataType: "citingCases") 以验证案例是否仍然有效

  4. 阅读判决 — 点击 CanLII URL 在 canlii.org 上阅读全文

API 速率限制

根据 CanLII 的 API 条款:

  • 每天 5,000 次查询

  • 每秒 2 次请求

  • 一次 1 个请求

  • 仅限访问元数据 — API 不提供完整文档文本

服务器通过内置的速率限制器自动强制执行这些限制。

开发

npm run build    # Compile TypeScript
npm run start    # Run the server (needs CANLII_API_KEY env var)

项目结构

src/
  index.ts     # MCP server — tools, rate limiter, stdio transport
  schema.ts    # Zod schemas for CanLII API responses

贡献

欢迎贡献!本项目旨在通过 AI 工具使加拿大法律研究更加便捷。

贡献方式:

  • 报告错误或意外的 API 行为 — 提交 issue

  • 建议新工具或改进 — 发起讨论

  • 提交包含修复或新功能的 PR

提交 PR:

  1. Fork 本仓库

  2. 创建功能分支 (git checkout -b feature/my-improvement)

  3. 进行更改并在本地测试 (npm run build && CANLII_API_KEY=your_key npm run start)

  4. 提交并推送到您的 fork

  5. 提交拉取请求,并描述更改内容及原因

如果您发现 CanLII API 响应、模式不匹配的问题,或者有任何有助于法律研究人员的新工具想法,请提交 issue — 即使您不确定如何修复它。我们将共同调查。

安全性

本服务器设计为透明且极简:

  • 仅连接至 api.canlii.org — 无其他网络调用,无遥测,无分析

  • API 密钥保留在本地 — 通过环境变量传递,从不记录或包含在响应中

  • 所有输入均经过验证 — 数据库 ID、案例 ID 和日期在使用前均经过正则表达式验证;路径段经过 URI 编码

  • 所有 API 响应均经过验证 — 在返回前通过 Zod 模式解析

  • 无文件系统访问权限 — 服务器仅向 CanLII 发起 HTTPS 调用

  • 无 shell 执行权限 — 无 child_process、exec 或 spawn

  • 2 个运行时依赖 — @modelcontextprotocol/sdk(官方 Anthropic MCP SDK)和 zod(模式验证)

  • 内置速率限制器 — 序列化请求队列防止 API 滥用

  • MIT 许可,完全开源 — 在 src/index.ts(约 350 行)和 src/schema.ts(约 140 行)阅读每一行代码

如果您发现安全问题,请参阅 SECURITY.md。

已知限制

  • 无判决正文 — 全文搜索有效(搜索案例标题、引文和内容),但 API 无法返回判决的全文。您必须点击 CanLII URL 才能在 canlii.org 上阅读判决。段落编号和直接引用需要通过阅读源文件进行验证。

  • 搜索基于关键词,而非语义 — 诸如 "mother gatekeeping sole decision-making" 之类的查询可能会返回混合结果。请优化查询并在深入研究元数据之前检查案例标题。

  • 搜索结果不包含案例详情 — 搜索仅返回引文和标题。您需要为每个案例单独调用 get_case_metadata 以获取关键词、主题、判决日期和 CanLII URL。

  • 无处理指示器 — 引文分析器显示哪些案例引用了某项判决,但并未指出该判决是被遵循、区分还是推翻。您需要阅读引用案例以确定其处理方式。

  • 引文预览限制为 5 个结果 — 使用 get_case_citator(完整版)进行全面的引文分析。

  • 搜索无数据库/司法管辖区过滤器 — 您无法在服务器端将搜索结果限制为特定法院或省份;请在查询中添加司法管辖区关键词(例如,使用 "custody Ontario" 而不是仅使用 "custody")。

  • 搜索端点未记录 — 它可以使用,但不在 CanLII 的官方 API 文档中,因此可能会在不另行通知的情况下更改。

  • 速率限制严格 — 每天 5,000 次查询,每秒 2 次请求,1 个并发请求(由内置速率限制器自动强制执行)。

许可

MIT — 参见 LICENSE。

Available Tools

9 tools
browse_legislationA

List all legislation items in a specific database. Use to find legislation IDs for metadata lookup. Key statutes by database — ons: Children's Law Reform Act, Family Law Act, Employment Standards Act. cas: Divorce Act, Criminal Code, Canada Labour Code, Federal Child Support Guidelines.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
databaseIdYesLegislation database ID (e.g., 'ons' for Ontario Statutes, 'cas' for Canada Statutes, 'onr' for Ontario Regulations)
publishedBeforeNoDate first published on CanLII (YYYY-MM-DD)
publishedAfterNoDate first published on CanLII (YYYY-MM-DD)
modifiedBeforeNoDate content last modified on CanLII (YYYY-MM-DD)
modifiedAfterNoDate content last modified on CanLII (YYYY-MM-DD)
changedBeforeNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
changedAfterNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
decisionDateBeforeNoDecision date upper bound (YYYY-MM-DD)
decisionDateAfterNoDecision date lower bound (YYYY-MM-DD)

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as pagination, rate limits, or output size. For a listing tool, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: purpose, use case, and examples. No redundant information; every sentence is necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters and no output schema, the description is adequate but lacks details on how filters interact, output format, or pagination. Suitable for a basic list tool but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by listing key statutes per database (e.g., 'ons: Children's Law Reform Act'), helping agents select the correct databaseId. This goes beyond the schema's pattern description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all legislation items in a specific database and is used to find legislation IDs for metadata lookup. It distinguishes from sibling tools which focus on case law.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies using the tool to find legislation IDs, but does not explicitly state when not to use it or compare to the sibling 'search' tool. The context is clear enough for legislation-specific tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_case_citatorA

Look up citation relationships for a case. Critical for verifying if a case is still good law. Use 'citingCases' to see what later cases cite this decision — if many recent cases cite it approvingly, it is strong authority. Use 'citedCases' to see what authorities this case relied on. Use 'citedLegislations' to see what statutes the case references. Returns the full list of citing/cited items.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
databaseIdYesCourt database ID (e.g., 'onsc', 'onca', 'csc-scc')
caseIdYesCase unique identifier (e.g., '2021onsc8582')
metadataTypeYes'citingCases' = what later cases cite this one (check if still good law); 'citedCases' = what this case relies on; 'citedLegislations' = statutes referenced
publishedBeforeNoDate first published on CanLII (YYYY-MM-DD)
publishedAfterNoDate first published on CanLII (YYYY-MM-DD)
modifiedBeforeNoDate content last modified on CanLII (YYYY-MM-DD)
modifiedAfterNoDate content last modified on CanLII (YYYY-MM-DD)
changedBeforeNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
changedAfterNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
decisionDateBeforeNoDecision date upper bound (YYYY-MM-DD)
decisionDateAfterNoDecision date lower bound (YYYY-MM-DD)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It states 'Returns the full list of citing/cited items,' which implies a complete list without pagination. However, it does not cover potential limits, error handling, authentication needs, or response structure. For a read-only lookup tool, this is adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of four sentences, front-loaded with the core purpose. Every sentence provides useful information without unnecessary words. It is highly concise and well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 12 parameters (mostly optional date filters) and no output schema, the description focuses on the essential use cases and the returned item list. It covers the critical metadataType options and the tool's importance. However, it does not mention the filtering capabilities or language parameter, which are documented in the schema but not in the description. Overall, it is sufficiently complete for an AI agent to understand the tool's core functionality.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, providing clear meaning for all parameters. The description adds value by explaining the semantic intent of metadataType and the overall workflow, e.g., 'use 'citingCases' to see what later cases cite this decision.' It does not repeat parameter descriptions but enhances understanding, going beyond the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Look up citation relationships for a case.' It specifies the three metadataType values and their meanings (citingCases, citedCases, citedLegislations), making the tool's function very specific and distinguishable from siblings like get_case_citator_tease, though not explicitly differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use each metadataType: 'Use 'citingCases' to see what later cases cite this decision... Use 'citedCases' to see what authorities this case relied on. Use 'citedLegislations' to see what statutes the case references.' It frames the tool as 'critical for verifying if a case is still good law,' but does not mention when not to use it or how it compares to the sibling get_case_citator_tease.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_case_citator_teaseA

Quick preview of citation relationships (max 5 results). Faster than the full citator. Use this for a quick check on whether a case has been cited, then use get_case_citator for the complete list if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
databaseIdYesCourt database ID (e.g., 'onsc', 'onca', 'csc-scc')
caseIdYesCase unique identifier (e.g., '2021onsc8582')
metadataTypeYesType of citation data to preview

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the key behavioral trait of returning at most 5 results and being faster than the full citator. However, with no annotations provided, it does not cover other traits like authentication requirements or error handling, which would be valuable for a write operation but this is a read-only preview.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with two sentences that convey purpose, limits, speed advantage, and recommended workflow. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's role and limits but does not describe the output format or behavior beyond the preview, leaving some ambiguity for an agent. However, given the simplicity of the tool and the absence of an output schema, it is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter already well-described in the schema. The description adds no further parameter-level detail beyond the tool's overall purpose, so it aligns with the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool provides a quick preview of citation relationships with a maximum of 5 results, distinguishing it from the sibling 'get_case_citator' which offers the complete list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool ('quick check') and advises to use the full citator for a complete list if needed, providing clear usage context and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_case_law_decisionsA

List case law decisions from a specific court database. Use date filters to narrow results. Useful for browsing recent decisions from a specific court. Results are ordered by most recently added. Use get_case_metadata to get full details on a specific case.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
databaseIdYesCourt database ID (e.g., 'onsc' for Ontario Superior Court, 'onca' for Ontario Court of Appeal, 'csc-scc' for Supreme Court of Canada)
offsetNoStart position for results (default 0 = most recent)
resultCountNoNumber of results to return (max 10,000, default 20)
publishedBeforeNoDate first published on CanLII (YYYY-MM-DD)
publishedAfterNoDate first published on CanLII (YYYY-MM-DD)
modifiedBeforeNoDate content last modified on CanLII (YYYY-MM-DD)
modifiedAfterNoDate content last modified on CanLII (YYYY-MM-DD)
changedBeforeNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
changedAfterNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
decisionDateBeforeNoDecision date upper bound (YYYY-MM-DD)
decisionDateAfterNoDecision date lower bound (YYYY-MM-DD)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that results are ordered by most recently added, which is key behavior. However, it does not mention any potential side effects, authorization needs, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences that front-load the main purpose and add relevant usage context. Could be slightly more structured, but overall concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 12 parameters (all documented in schema) and no output schema, the description sufficiently explains the tool's purpose, ordering, and relationship to sibling tools. References get_case_metadata for full details, which helps complete the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description adds high-level purpose but does not provide additional meaning beyond what the schema already specifies for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists case law decisions from a specific court database, with date filtering capabilities. It explicitly distinguishes from the sibling tool get_case_metadata, which provides full details on a specific case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use (browsing recent decisions from a specific court) and mentions an alternative tool (get_case_metadata) for full details. However, it does not explicitly mention when not to use this tool or other alternatives like 'search'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_case_metadataA

Get detailed metadata for a specific case including its CanLII URL, citation, decision date, docket number, keywords, and topics. The URL field links directly to the full decision text on canlii.org — always provide this to the user for verification. Use after finding a case via search or browse to get complete details before citing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
databaseIdYesCourt database ID (e.g., 'onsc', 'onca', 'csc-scc')
caseIdYesCase unique identifier from search/browse results (e.g., '2021onsc8582')
publishedBeforeNoDate first published on CanLII (YYYY-MM-DD)
publishedAfterNoDate first published on CanLII (YYYY-MM-DD)
modifiedBeforeNoDate content last modified on CanLII (YYYY-MM-DD)
modifiedAfterNoDate content last modified on CanLII (YYYY-MM-DD)
changedBeforeNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
changedAfterNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
decisionDateBeforeNoDecision date upper bound (YYYY-MM-DD)
decisionDateAfterNoDecision date lower bound (YYYY-MM-DD)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the tool is a read-like retrieval (getting metadata) and includes an instruction to always provide the URL to the user. However, it does not explicitly state it is read-only or mention any permissions or side effects, which weakens transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first states the purpose and output; the second gives usage guidance. Every word adds value, and the structure is front-loaded with the most critical information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lists key output fields, providing enough context for an agent to understand return structure despite no output schema. It does not explain all parameters or potential errors, but for a simple retrieval tool, it is complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter already has a description. The tool description adds no additional meaning beyond schema, except implying that databaseId and caseId are central. This meets the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and targets 'detailed metadata for a specific case'. It lists key outputs (CanLII URL, citation, etc.) and differentiates the tool from search and browsing by stating it provides complete details before citing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly guides the agent to use this tool 'after finding a case via search or browse to get complete details before citing it'. This provides clear context for when to invoke it, though it does not explicitly mention when not to use it or name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_courts_and_tribunalsA

List all available court and tribunal databases in Canada. Returns database IDs needed for other tools. Key databases: onsc (Ontario Superior Court), onca (Ontario Court of Appeal), oncj (Ontario Court of Justice), onscdc (Divisional Court), csc-scc (Supreme Court of Canada), bcsc (BC Supreme Court), abkb (Alberta King's Bench). Use this to discover valid databaseId values for browse and citator tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
publishedBeforeNoDate first published on CanLII (YYYY-MM-DD)
publishedAfterNoDate first published on CanLII (YYYY-MM-DD)
modifiedBeforeNoDate content last modified on CanLII (YYYY-MM-DD)
modifiedAfterNoDate content last modified on CanLII (YYYY-MM-DD)
changedBeforeNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
changedAfterNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
decisionDateBeforeNoDecision date upper bound (YYYY-MM-DD)
decisionDateAfterNoDecision date lower bound (YYYY-MM-DD)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Though no annotations are provided, the description implies a read-only operation (listing databases) and explicitly states it returns database IDs. It does not contradict any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using three sentences to convey purpose, examples, and usage guidance. Slightly verbose with examples but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and no output schema, the description covers the core purpose and return values. It does not detail the return structure but is sufficient for a listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 9 parameters are fully described in the input schema (100% coverage). The description does not add additional meaning beyond the schema, meriting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all available court and tribunal databases in Canada and returns database IDs needed for other tools. It distinguishes itself from siblings like get_legislation_databases by specifying it provides database IDs for browse and citator tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this tool to discover valid databaseId values for browse and citator tools, providing clear guidance on when to use. However, it does not mention when not to use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_legislation_databasesA

List all available legislation databases in Canada. Returns database IDs for browsing statutes and regulations. Key databases: ons (Ontario Statutes), onr (Ontario Regulations), cas (Canada Statutes), car (Canada Regulations), bcs (BC Statutes), abs (Alberta Statutes).

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
publishedBeforeNoDate first published on CanLII (YYYY-MM-DD)
publishedAfterNoDate first published on CanLII (YYYY-MM-DD)
modifiedBeforeNoDate content last modified on CanLII (YYYY-MM-DD)
modifiedAfterNoDate content last modified on CanLII (YYYY-MM-DD)
changedBeforeNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
changedAfterNoDate metadata or content last changed on CanLII (YYYY-MM-DD)
decisionDateBeforeNoDecision date upper bound (YYYY-MM-DD)
decisionDateAfterNoDecision date lower bound (YYYY-MM-DD)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool returns database IDs and lists key databases, but it does not disclose behavioral traits such as read-only nature, rate limits, or any side effects. For a simple listing tool, this is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a brief list of key databases. It is front-loaded with the purpose and provides immediate value without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 9 optional filter parameters, but the description does not explain their purpose or how to use them effectively. There is no output schema, and the description only mentions 'returns database IDs' without specifying format or structure. This leaves some gaps, but for a simple listing tool it is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description does not add meaning beyond the schema; it only mentions database IDs in the output context. The parameters are well-documented in the schema, so no further elaboration is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: listing all available legislation databases in Canada. It provides specific examples of key databases and what they represent. This distinguishes it from sibling tools like browse_legislation or get_case_citator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for retrieving a list of databases, which is a clear use case. It does not explicitly mention when not to use it or provide alternatives, but the context is sufficient for an AI agent to understand its primary role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_legislation_regulation_metadataA

Get metadata for a specific statute or regulation including its CanLII URL, citation, and table of contents. The URL links directly to the full legislation text on canlii.org — always provide this to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'en' for English (default), 'fr' for Frenchen
databaseIdYesLegislation database ID (e.g., 'ons' for Ontario Statutes)
legislationIdYesSpecific legislation ID from browse results

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description bears full burden. It reveals what is returned but does not disclose that it is read-only, any side effects, permissions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose and content, second provides actionable instruction. No wasted words, information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and absence of output schema, the description adequately covers the return content and user instruction. However, it could mention that the IDs come from browse results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so the description adds minimal extra meaning beyond the schema's field descriptions. The mention of 'CanLII URL, citation, and table of contents' provides general context but not parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves metadata for a specific statute/regulation, including URL, citation, and table of contents, distinguishing it from sibling tools like browse_legislation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need metadata for a specific legislation), but does not provide explicit guidance on when to prefer this over siblings or exclude certain cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.1.4
    • First observedbrowse_legislation
    • First observedget_case_citator
    • First observedget_case_citator_tease
    • First observedget_case_law_decisions
    • First observedget_case_metadata
    • First observedget_courts_and_tribunals
    • First observedget_legislation_databases
    • First observedget_legislation_regulation_metadata
    • First observedsearch

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a distinct purpose: browse_legislation lists legislation items, get_case_citator retrieves full citation relationships, get_case_citator_tease offers a quick preview, get_case_law_decisions lists decisions from a court database, get_case_metadata provides detailed case info, get_courts_and_tribunals lists available court databases, get_legislation_databases lists legislation databases, get_legislation_regulation_metadata fetches legislation details, and search performs keyword searches. No two tools overlap significantly.

Naming Consistency4/5

Most tools follow a 'get_' prefix (e.g., get_case_metadata, get_courts_and_tribunals), but 'browse_legislation' uses 'browse_' and 'search' is a bare verb. This slight inconsistency is minor and does not hinder readability.

Tool Count5/5

Nine tools is appropriate for a legal research server. Each tool covers a core function—searching, browsing cases and legislation, citators, and metadata retrieval—without being excessive or insufficient.

Completeness4/5

The surface covers essential read-only legal research operations: search, browse, citator, and metadata. Minor gaps include lack of date filters on search (mitigated by jurisdiction keywords) and no direct full-text retrieval (URLs provided instead). Overall, it's well-rounded.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers