Skip to main content
Glama

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

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for criteria text
sectionNoFilter by criteria section type
policy_typeNoFilter by policy type
jurisdictionNoFilter by MAC jurisdiction
limitNoResults per page
cursorNoPagination cursor

Implementation Reference

  • 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)}` }], }; } }
  • 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)}` }], }; } } );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tylerbryy/verity_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server