{"serverId":"mcp-registry/ca.netgrant/canadian-grants","tools":[{"name":"compare_opportunities","fixed":{"name":"compare_opportunities","description":"Fetch 2–4 opportunities at once so you can present them side by side. Use after search_opportunities when the user is choosing between a few options.\n\nReturns the full detail rows (including eligibility + body) for every id, in the order requested. Present them as a comparison table — rows = attributes (funding, deadline, region, eligibility highlights), columns = the opportunities — then recommend which fits the user best and why.","inputSchema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":4,"minItems":2,"description":"Array of 2–4 opportunity UUIDs (from search_opportunities) to compare."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":199,"tokensAfter":199},{"name":"eligibility_check","fixed":{"name":"eligibility_check","description":"Pull a single opportunity's eligibility criteria alongside a description of the applicant, so you can judge whether they qualify. Use when the user asks \"do I qualify for this?\" or \"does this apply to me?\".\n\nThe response contains the opportunity's eligibility text + key fields and echoes the applicant description — it does NOT decide for you. Read the eligibility, compare it against the applicant, then give a clear verdict (Likely eligible / Partially / Unlikely) with the specific criteria that ","inputSchema":{"type":"object","required":["id","applicant_description"],"properties":{"id":{"type":"string","description":"Opportunity UUID to check eligibility for."},"applicant_description":{"type":"string","description":"The applicant's details: sector, stage, location/province, incorporation status, size, demographics — whatever is relevant to eligibility."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":256,"tokensAfter":256},{"name":"get_opportunity_details","fixed":{"name":"get_opportunity_details","description":"Fetch full details for a single opportunity by ID. Use this after search_opportunities when:\n- The user wants to know more about a specific match\n- You need the full eligibility text to confirm a strong-match claim\n- The user wants to draft an application — you need the requirements\n\nThe response includes all fields including the full body text and eligibility criteria. Present the eligibility as a checklist when relevant.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Opportunity UUID returned from search_opportunities"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":178,"tokensAfter":178},{"name":"search_opportunities","fixed":{"name":"search_opportunities","description":"Search Canadian funding opportunities (grants, competitions, accelerators, tax credits, wage subsidies, loans, events). Returns JSON.\n\nWHEN TO CALL:\n- The user asks about Canadian funding, grants, competitions, accelerators, or pitch programs\n- The user mentions their startup/business and wants opportunities relevant to it\n- The user wants to see what's available in a specific province or category\n\nWHEN NOT TO CALL:\n- General questions about how grants work (answer from your own knowledge)\n- Non","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search across title and body. Pass the user's actual keywords (e.g. \"AI\", \"agriculture\", \"women-led\")."},"region":{"type":"string","description":"Optional province code: ON, BC, QC, AB, MB, SK, NS, NB, NL, PE, YT, NT, NU. Use Federal for nation-wide programs."},"category":{"type":"string","description":"Optional: grant, competition, tax_credit, wage_subsidy, loan, event, workshop, conference, other"},"is_rolling":{"type":"boolean","description":"Optional. true = only rolling/no-fixed-deadline opportunities; false = only those with a fixed deadline. Omit to include both."},"max_funding":{"type":"integer","minimum":0,"description":"Optional. Only return opportunities with max_funding_amount <= this value (in CAD). Use with min_funding to bound a funding range, or alone to cap how large a program you want."},"max_results":{"type":"integer","default":20,"maximum":50,"minimum":1,"description":"Default 20. Increase only if the user wants a comprehensive sweep."},"min_funding":{"type":"integer","minimum":0,"description":"Optional. Only return opportunities with max_funding_amount >= this value (in CAD). Use when the user specifies a minimum funding threshold."},"exclude_expired":{"type":"boolean","default":true,"description":"Default true. Set false only if the user explicitly wants to see past-deadline or historical opportunities."},"deadline_within_days":{"type":"integer","maximum":365,"minimum":1,"description":"Optional. Only return fixed-deadline opportunities whose deadline falls between today and this many days from now. Rolling / no-fixed-deadline opportunities are EXCLUDED by this filter. Use for \"closing soon\" queries."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":643,"tokensAfter":643}],"toolsChanged":4,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}