MCP server providing retrieval-first government program information from official Canadian sources
PlainGov provides 6 tools with complete JSON schemas and basic descriptions. All tools follow verb_noun naming (explain_, get_, eligibility_, generate_, timeline, questions_). Schemas are well-formed with enum constraints on program_id. However, descriptions are generic (10-50 chars), parameter descriptions are minimal or absent, output schemas are undocumented, and error handling lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint). The eligibility_check tool accepts a complex user_context object but provides no guidance on which fields are required vs optional or how missing data affects results. No pagination, no result limits documented. Typical of community servers in the 50-60 range.
Check eligibility for a program based on user context
Get plain-language explanation of a government program
Generate a step-by-step checklist for applying to a program
Get eligibility criteria for a program
Get questions to ask a tax professional or accountant about a program
Get timeline information for a program (processing times, payment schedules, etc.)
Tool descriptions are too short (10-50 chars) and lack context for LLM selection. E.g., 'Get plain-language explanation of a government program' does not explain WHEN to use this vs get_eligibility_criteria or generate_checklist.
Output schemas are not documented. LLMs cannot plan downstream calls or extract structured data. What fields does explain_program return? Is it a string, an object with sections, or a list?
eligibility_check accepts user_context with 7 optional fields but provides no guidance on which are required, how missing data is handled, or what the output structure is. The EligibilityResult interface exists in code but is not exposed in the tool schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 6 tools are read-only but this is not declared in the schema, forcing LLMs to infer safety from descriptions.
Error handling is minimal. retrieveDocument() returns {error, details} on failure, but tool handlers do not provide recovery guidance (e.g., 'Retrieval failed. Check network or try a different program.').