get_case_law_decisions
List case law decisions from a Canadian court database. Apply date filters on publication, modification, or decision dates. Results ordered by most recently added for efficient browsing.
Instructions
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.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Language: 'en' for English (default), 'fr' for French | en |
| databaseId | Yes | Court database ID (e.g., 'onsc' for Ontario Superior Court, 'onca' for Ontario Court of Appeal, 'csc-scc' for Supreme Court of Canada) | |
| offset | No | Start position for results (default 0 = most recent) | |
| resultCount | No | Number of results to return (max 10,000, default 20) | |
| publishedBefore | No | Date first published on CanLII (YYYY-MM-DD) | |
| publishedAfter | No | Date first published on CanLII (YYYY-MM-DD) | |
| modifiedBefore | No | Date content last modified on CanLII (YYYY-MM-DD) | |
| modifiedAfter | No | Date content last modified on CanLII (YYYY-MM-DD) | |
| changedBefore | No | Date metadata or content last changed on CanLII (YYYY-MM-DD) | |
| changedAfter | No | Date metadata or content last changed on CanLII (YYYY-MM-DD) | |
| decisionDateBefore | No | Decision date upper bound (YYYY-MM-DD) | |
| decisionDateAfter | No | Decision date lower bound (YYYY-MM-DD) |
Implementation Reference
- src/index.ts:224-252 (handler)The async handler function that executes the get_case_law_decisions tool logic: calls the CanLII caseBrowse API with language, databaseId, offset, resultCount, and date parameters, then parses the response with CasesResponseSchema.
async (params) => { try { const { language, databaseId, offset, resultCount, ...dateParams } = params; const urlParams = new URLSearchParams({ api_key: apiKey, offset: offset.toString(), resultCount: resultCount.toString(), }); buildDateParams(urlParams, dateParams); const response = await apiFetch( `https://api.canlii.org/v1/caseBrowse/${language}/${encodeURIComponent(databaseId)}/?${urlParams.toString()}` ); if (!response.ok) { return errorResponse(`Error: Failed to fetch case law decisions (${response.status})`); } const data = await response.json(); const parsed = CasesResponseSchema.parse(data); return jsonResponse(parsed); } catch (error) { return errorResponse( `Error: ${error instanceof Error ? error.message : "Unknown error"}` ); } } ); - src/index.ts:208-252 (registration)Tool registration via server.tool() with name 'get_case_law_decisions', description, and Zod schema for parameters (language enum, databaseId, offset, resultCount, date parameters).
server.tool( "get_case_law_decisions", "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.", { language: z.enum(["en", "fr"]).default("en") .describe("Language: 'en' for English (default), 'fr' for French"), databaseId: pathSegmentSchema .describe("Court database ID (e.g., 'onsc' for Ontario Superior Court, 'onca' for Ontario Court of Appeal, 'csc-scc' for Supreme Court of Canada)"), offset: z.number().default(0) .describe("Start position for results (default 0 = most recent)"), resultCount: z.number().max(10000).default(20) .describe("Number of results to return (max 10,000, default 20)"), ...dateParametersSchema, }, async (params) => { try { const { language, databaseId, offset, resultCount, ...dateParams } = params; const urlParams = new URLSearchParams({ api_key: apiKey, offset: offset.toString(), resultCount: resultCount.toString(), }); buildDateParams(urlParams, dateParams); const response = await apiFetch( `https://api.canlii.org/v1/caseBrowse/${language}/${encodeURIComponent(databaseId)}/?${urlParams.toString()}` ); if (!response.ok) { return errorResponse(`Error: Failed to fetch case law decisions (${response.status})`); } const data = await response.json(); const parsed = CasesResponseSchema.parse(data); return jsonResponse(parsed); } catch (error) { return errorResponse( `Error: ${error instanceof Error ? error.message : "Unknown error"}` ); } } ); - src/schema.ts:24-26 (schema)CasesResponseSchema - Zod schema defining the response shape: { cases: array of CaseSchema objects }. Used to parse the API response.
export const CasesResponseSchema = z.object({ cases: z.array(CaseSchema), }).passthrough(); - src/schema.ts:16-22 (schema)CaseSchema - Zod schema for individual case objects in the browse results (databaseId, caseId, title, citation, aiContentId).
export const CaseSchema = z.object({ databaseId: z.string(), caseId: CaseIdSchema, title: z.string(), citation: z.string(), aiContentId: z.record(z.string(), z.string()).optional(), }).passthrough(); - src/index.ts:105-114 (helper)dateParametersSchema - shared Zod schema object for date filter parameters (publishedBefore/After, modifiedBefore/After, changedBefore/After, decisionDateBefore/After) used by the tool via spread operator.
const dateParametersSchema = { publishedBefore: dateSchema.describe("Date first published on CanLII (YYYY-MM-DD)"), publishedAfter: dateSchema.describe("Date first published on CanLII (YYYY-MM-DD)"), modifiedBefore: dateSchema.describe("Date content last modified on CanLII (YYYY-MM-DD)"), modifiedAfter: dateSchema.describe("Date content last modified on CanLII (YYYY-MM-DD)"), changedBefore: dateSchema.describe("Date metadata or content last changed on CanLII (YYYY-MM-DD)"), changedAfter: dateSchema.describe("Date metadata or content last changed on CanLII (YYYY-MM-DD)"), decisionDateBefore: dateSchema.describe("Decision date upper bound (YYYY-MM-DD)"), decisionDateAfter: dateSchema.describe("Decision date lower bound (YYYY-MM-DD)"), };