Que Faire à Paris MCP. Official "what to do in Paris" events from the City of Paris open-data portal (opendata.paris.fr, "que-faire-a-paris-" dataset, Opendatasoft v2.1 API). Keyless, ~2,700 current events. Filter by keyword, free admission, and date window via ODSQL `where` clauses. Content is in French (Paris source).
Single tool 'events' has a well-structured schema with 6 parameters, all typed and described. Tool description is clear and contextual (145 chars), explaining what it does, the data source, and language caveat. Parameters include sensible defaults (limit=20, offset=0) and constraints (limit 1-50). Output is structured with metadata (city, country, source, date_from, date_to, total_matching, count) and normalized event objects. However, output schema is not formally documented in code comments, and error handling lacks recovery guidance. No tool annotations (readOnlyHint, etc.) despite being a read-only tool. Naming 'events' is generic but acceptable for a single-tool server.
Find current "things to do" in Paris (Que Faire à Paris, City of Paris official events). Filter by keyword, free admission, and date window. Returns events sorted by start date. Note: titles/descriptions are in French.
Output schema not formally documented. While the code returns a structured object with metadata and normalized events, there is no JSDoc or inline comment describing the return type, field names, or structure. LLMs cannot plan downstream operations without knowing what fields to expect.
Error handling lacks recovery guidance. The callTool function throws generic errors (e.g., 'Unknown tool: {name}', 'HTTP {status}') without actionable next steps. LLMs cannot self-correct or retry intelligently.
No tool annotations despite read-only semantics. The 'events' tool is safe to call repeatedly and has no side effects, but lacks readOnlyHint annotation. This prevents clients from optimizing caching or parallelization.
Parameter 'query' accepts free-form strings with no validation or constraint. The description mentions 'French terms match best' but does not specify length limits, character restrictions, or handling of special characters. The code strips quotes but does not validate input length.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Date parameters ('from', 'to') accept strings but lack explicit format validation in the schema. The description states 'YYYY-MM-DD' but the schema does not enforce a pattern constraint. Invalid dates silently default or fail at runtime.