A Program Integrity Alliance (PIA) MCP server providing access to government watchdog reports and compliance recommendations
This is a proxy server that forwards tool calls to a remote MCP server. Tool definitions are loaded from a JSON file (tool_specs.json) which is NOT visible in the provided source code. While the server registers two tools (pia_search, pia_oversight_recommendations), the actual schema definitions, parameter types, and detailed descriptions cannot be verified from the source provided. The visible code shows tool names and basic descriptions in the request header, but the critical inputSchema and outputSchema structures are loaded from an external JSON resource file that was not provided for evaluation. This violates the core evaluation principle: 'Score ONLY what you can verify in the source code.' Without seeing the actual schema definitions, parameter types, constraints, and field descriptions, I cannot accurately assess schema quality, parameter validation, or output structure. The handler functions are generic pass-throughs with minimal error handling and no input validation. The descriptions visible in the header are generic: 'Search the PIA database for government watchdog reports and compliance information' and 'Get PIA oversight recommendations for compliance and risk mitigation', these are adequate but lack specificity about parameters, return structure, or usage guidance.
Get PIA oversight recommendations for compliance and risk mitigation
Search the PIA database for government watchdog reports and compliance information
Input schemas not visible for evaluation, tool_specs.json file not provided in source code submission. Cannot verify parameter types, descriptions, constraints, enums, or required fields.
Output schemas not visible, tool_specs.json not provided. Cannot verify return field structure, types, or whether output is properly paginated or includes chaining IDs.
Tool descriptions are generic and lack context. 'Search the PIA database for government watchdog reports and compliance information' does not explain: what parameters are accepted, what output structure to expect, what constitutes a successful response, or when to use this vs the recommendations tool.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 37 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
No input validation visible in handler functions. _forward_to_remote() passes arguments directly to the remote server without checking parameter types, required fields, or value constraints. This defers validation to the remote server but provides no local error catching or user-friendly feedback.
Error handling is minimal and generic. The _forward_to_remote() function catches httpx.HTTPStatusError and generic Exception, but error messages are forwarded as-is from the remote API without enrichment, recovery guidance, or categorization (retryable vs user-fixable). Example: 'HTTP Error 404: Not Found' tells the agent nothing about what to do next.
No pagination parameters visible in handler signatures. If pia_search or pia_oversight_recommendations can return large result sets, there is no evidence of limit, offset, or cursor parameters to prevent context window exhaustion.
Tool naming does not strictly follow verb_noun convention. 'pia_oversight_recommendations' lacks a clear action verb, it reads more like a noun than an action. Better alternatives: 'get_oversight_recommendations', 'list_oversight_recommendations', or 'fetch_compliance_recommendations'.
API key is retrieved from settings during each call but logged with partial exposure ('API_KEY retrieved successfully: [first 10 chars]...'). While masking helps, logging the presence and partial value of secrets is still a weak practice. Prefer silent retrieval without any logging of authentication status.