List Cases
list_casesRetrieve case titles, citations, and IDs from a Canadian caselaw database by specifying the database ID, with optional filters for decision date, publication date, language, and result count.
Instructions
List decisions from a specific caselaw database. Returns case titles, citations, and IDs.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| databaseId | Yes | Database ID from list_case_databases (e.g. "onca", "csc-scc") | |
| decisionDateAfter | No | Filter: decision date after (YYYY-MM-DD) | |
| decisionDateBefore | No | Filter: decision date before (YYYY-MM-DD) | |
| language | No | Response language | en |
| offset | No | Starting record index | |
| publishedAfter | No | Filter: published on CanLII after this date (YYYY-MM-DD) | |
| publishedBefore | No | Filter: published on CanLII before this date (YYYY-MM-DD) | |
| resultCount | No | Number of results to return (max 10000) |
Implementation Reference
- src/server.ts:120-183 (registration)The tool 'list_cases' is registered using server.registerTool() with inputSchema (databaseId, decisionDateAfter/Before, language, offset, publishedAfter/Before, resultCount) and an async handler.
// 2. List cases server.registerTool( "list_cases", { annotations: { readOnlyHint: true }, description: "List decisions from a specific caselaw database. Returns case titles, citations, and IDs.", inputSchema: { databaseId: z .string() .describe('Database ID from list_case_databases (e.g. "onca", "csc-scc")'), decisionDateAfter: z .string() .optional() .describe("Filter: decision date after (YYYY-MM-DD)"), decisionDateBefore: z .string() .optional() .describe("Filter: decision date before (YYYY-MM-DD)"), language: z.enum(["en", "fr"]).default("en").describe("Response language"), offset: z.number().int().min(0).default(0).describe("Starting record index"), publishedAfter: z .string() .optional() .describe("Filter: published on CanLII after this date (YYYY-MM-DD)"), publishedBefore: z .string() .optional() .describe("Filter: published on CanLII before this date (YYYY-MM-DD)"), resultCount: z .number() .int() .min(1) .max(10000) .default(25) .describe("Number of results to return (max 10000)"), }, title: "List Cases", }, async ({ language, databaseId, offset, resultCount, publishedBefore, publishedAfter, decisionDateBefore, decisionDateAfter, }) => { try { const params: Record<string, string> = { offset: String(offset), resultCount: String(resultCount), }; if (publishedBefore) params.publishedBefore = publishedBefore; if (publishedAfter) params.publishedAfter = publishedAfter; if (decisionDateBefore) params.decisionDateBefore = decisionDateBefore; if (decisionDateAfter) params.decisionDateAfter = decisionDateAfter; return ok(await request(`/caseBrowse/${language}/${databaseId}/`, params)); } catch (e) { return err(String(e)); } }, ); - src/server.ts:159-182 (handler)The handler function for 'list_cases': builds query params from the inputs and calls the CanLII API endpoint /caseBrowse/{language}/{databaseId}/, returning results as JSON.
async ({ language, databaseId, offset, resultCount, publishedBefore, publishedAfter, decisionDateBefore, decisionDateAfter, }) => { try { const params: Record<string, string> = { offset: String(offset), resultCount: String(resultCount), }; if (publishedBefore) params.publishedBefore = publishedBefore; if (publishedAfter) params.publishedAfter = publishedAfter; if (decisionDateBefore) params.decisionDateBefore = decisionDateBefore; if (decisionDateAfter) params.decisionDateAfter = decisionDateAfter; return ok(await request(`/caseBrowse/${language}/${databaseId}/`, params)); } catch (e) { return err(String(e)); } }, - src/server.ts:127-156 (schema)Input schema for 'list_cases' defining six optional filter parameters and two required ones (databaseId, language) with Zod validation.
inputSchema: { databaseId: z .string() .describe('Database ID from list_case_databases (e.g. "onca", "csc-scc")'), decisionDateAfter: z .string() .optional() .describe("Filter: decision date after (YYYY-MM-DD)"), decisionDateBefore: z .string() .optional() .describe("Filter: decision date before (YYYY-MM-DD)"), language: z.enum(["en", "fr"]).default("en").describe("Response language"), offset: z.number().int().min(0).default(0).describe("Starting record index"), publishedAfter: z .string() .optional() .describe("Filter: published on CanLII after this date (YYYY-MM-DD)"), publishedBefore: z .string() .optional() .describe("Filter: published on CanLII before this date (YYYY-MM-DD)"), resultCount: z .number() .int() .min(1) .max(10000) .default(25) .describe("Number of results to return (max 10000)"), }, - src/server.ts:96-97 (helper)The 'request' helper closure (bound to apiKey) used by the handler to make API calls.
const request = (path: string, params?: Record<string, string>) => canliiRequest(apiKey, path, params);