MCP server exposing current Parions Sport Point de Vente odds from the official FDJ offer database.
Server has 6 well-named tools with complete input schemas and descriptions. All tools follow verb_noun naming (list_*, search_*, get_*). Schemas are properly typed with Pydantic validation. However, output schemas are not documented, LLMs cannot predict response structure. Parameter descriptions are adequate but lack format/constraint details (e.g., date_from/date_to say 'ISO 8601 format' but no validation guidance). Error handling is minimal, no recovery guidance or actionable error messages. No tool annotations (readOnlyHint, etc.). Missing documentation of response fields and pagination behavior.
Retrieve detailed odds for a specific event by ID.
Link a Parions Sport event to its match result from TheSportsDB using fuzzy matching on team names and dates.
Retrieve match results from TheSportsDB, optionally filtered by sport, league, team, or date.
List competitions (leagues) available in the FDJ offer database, optionally filtered by sport.
List all sports with active odds in the FDJ offer database.
Search for betting odds across events in the FDJ database with optional filters.
Output schemas not documented. LLMs cannot predict response structure or plan downstream tool calls. Tools return dict[str, Any] with no field documentation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the schema, forcing LLMs to infer safety.
Date parameters (date_from, date_to, date) mention 'ISO 8601 format' but lack validation error guidance. If LLM passes invalid date, error message is not shown in code.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
search_odds and get_match_results accept limit parameter (default 20, max 100) but no pagination (offset/cursor) is documented. Large result sets may be truncated without guidance on how to fetch next page.
Error handling is minimal. Code catches ParionsSportError and ValidationError but does not return actionable recovery guidance (e.g., 'Try search_sports() first' or 'Invalid sport ID, available sports: Soccer, Basketball').