search_criteria
Search Medicare coverage criteria to find specific indications, limitations, or documentation requirements across policies. Filter by section type, policy type, or jurisdiction for targeted results.
Instructions
Search through coverage criteria blocks across Medicare policies. Find specific indications, limitations, or documentation requirements. More targeted than full policy search.
Examples:
search_criteria("diabetes") - criteria mentioning diabetes
search_criteria("BMI", { section: "indications" }) - BMI requirements for coverage
search_criteria("frequency", { section: "limitations" }) - frequency limitations
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for criteria text | |
| section | No | Filter by criteria section type | |
| policy_type | No | Filter by policy type | |
| jurisdiction | No | Filter by MAC jurisdiction | |
| limit | No | Results per page | |
| cursor | No | Pagination cursor |
Implementation Reference
- src/index.ts:571-611 (handler)The asynchronous handler function that implements the core logic of the 'search_criteria' tool. It makes an API request to '/coverage/criteria' with the provided parameters, processes the results by formatting them into a readable text response, handles empty results and errors appropriately, and returns structured content for the MCP server.async ({ query, section, policy_type, jurisdiction, limit, cursor }) => { try { const result = await verityRequest<any>("/coverage/criteria", { params: { q: query, section, policy_type, jurisdiction, limit, cursor }, }); if (!result.data || result.data.length === 0) { return { content: [ { type: "text", text: `No criteria found for "${query}". Try:\n- Broader search terms\n- Remove section filter\n- Search full policies instead`, }, ], }; } const lines: string[] = [`Found ${result.data.length} matching criteria:\n`]; result.data.forEach((criteria: any, i: number) => { lines.push(`${i + 1}. [${criteria.section.toUpperCase()}] from ${criteria.policy.policy_id}`); lines.push(` Policy: ${criteria.policy.title}`); lines.push(` Text: ${criteria.text.slice(0, 300)}${criteria.text.length > 300 ? "..." : ""}`); if (criteria.tags?.length) lines.push(` Tags: ${criteria.tags.join(", ")}`); if (criteria.requires_manual_review) lines.push(` Note: Requires manual review`); lines.push(""); }); if (result.meta?.pagination?.cursor) { lines.push(`More results available. Use cursor: "${result.meta.pagination.cursor}"`); } return { content: [{ type: "text", text: lines.join("\n") }], }; } catch (error) { return { content: [{ type: "text", text: `Error searching criteria: ${error instanceof Error ? error.message : String(error)}` }], }; } }
- src/index.ts:550-570 (schema)The schema definition for the 'search_criteria' tool, including a detailed description and Zod-based inputSchema specifying parameters like query, section filters, policy_type, jurisdiction, limit, and cursor with validation rules and descriptions.{ description: `Search through coverage criteria blocks across Medicare policies. Find specific indications, limitations, or documentation requirements. More targeted than full policy search. Examples: - search_criteria("diabetes") - criteria mentioning diabetes - search_criteria("BMI", { section: "indications" }) - BMI requirements for coverage - search_criteria("frequency", { section: "limitations" }) - frequency limitations`, inputSchema: { query: z.string().min(1).max(500).describe("Search query for criteria text"), section: z .enum(["indications", "limitations", "documentation", "frequency", "other"]) .optional() .describe("Filter by criteria section type"), policy_type: z.enum(["LCD", "Article", "NCD", "PayerPolicy"]).optional().describe("Filter by policy type"), jurisdiction: z.string().max(10).optional().describe("Filter by MAC jurisdiction"), limit: z.number().min(1).max(100).default(20).describe("Results per page"), cursor: z.string().optional().describe("Pagination cursor"), }, },
- src/index.ts:548-612 (registration)The server.registerTool call that registers the 'search_criteria' tool with its name, schema, and handler function in the MCP server.server.registerTool( "search_criteria", { description: `Search through coverage criteria blocks across Medicare policies. Find specific indications, limitations, or documentation requirements. More targeted than full policy search. Examples: - search_criteria("diabetes") - criteria mentioning diabetes - search_criteria("BMI", { section: "indications" }) - BMI requirements for coverage - search_criteria("frequency", { section: "limitations" }) - frequency limitations`, inputSchema: { query: z.string().min(1).max(500).describe("Search query for criteria text"), section: z .enum(["indications", "limitations", "documentation", "frequency", "other"]) .optional() .describe("Filter by criteria section type"), policy_type: z.enum(["LCD", "Article", "NCD", "PayerPolicy"]).optional().describe("Filter by policy type"), jurisdiction: z.string().max(10).optional().describe("Filter by MAC jurisdiction"), limit: z.number().min(1).max(100).default(20).describe("Results per page"), cursor: z.string().optional().describe("Pagination cursor"), }, }, async ({ query, section, policy_type, jurisdiction, limit, cursor }) => { try { const result = await verityRequest<any>("/coverage/criteria", { params: { q: query, section, policy_type, jurisdiction, limit, cursor }, }); if (!result.data || result.data.length === 0) { return { content: [ { type: "text", text: `No criteria found for "${query}". Try:\n- Broader search terms\n- Remove section filter\n- Search full policies instead`, }, ], }; } const lines: string[] = [`Found ${result.data.length} matching criteria:\n`]; result.data.forEach((criteria: any, i: number) => { lines.push(`${i + 1}. [${criteria.section.toUpperCase()}] from ${criteria.policy.policy_id}`); lines.push(` Policy: ${criteria.policy.title}`); lines.push(` Text: ${criteria.text.slice(0, 300)}${criteria.text.length > 300 ? "..." : ""}`); if (criteria.tags?.length) lines.push(` Tags: ${criteria.tags.join(", ")}`); if (criteria.requires_manual_review) lines.push(` Note: Requires manual review`); lines.push(""); }); if (result.meta?.pagination?.cursor) { lines.push(`More results available. Use cursor: "${result.meta.pagination.cursor}"`); } return { content: [{ type: "text", text: lines.join("\n") }], }; } catch (error) { return { content: [{ type: "text", text: `Error searching criteria: ${error instanceof Error ? error.message : String(error)}` }], }; } } );