A Model Context Protocol (MCP) providing access to EFSA's comprehensive OpenFoodTox database containing 8,006 chemical substances across 8 interconnected data tables with over 138,000 entries.
The server provides 9 tools with consistently strong descriptions and well-structured schemas. All tools have clear, contextual descriptions (range 150-300 chars), proper JSON Schema definitions with typed parameters, and logical naming conventions. The primary weaknesses are: (1) lack of output schema documentation, tools return results but response structures are not formally defined; (2) no error handling guidance in descriptions; (3) missing idempotency/destructiveness annotations; (4) parameter descriptions could provide more specific guidance on usage patterns and prerequisites. Tool naming is verb-noun consistent (get_*, search_*, list_*) and descriptions clearly explain WHAT each tool does and WHEN to use it. All parameters are properly typed with enums where appropriate (e.g., is_mutagenic, is_genotoxic, is_carcinogenic in list_substances_by_class_and_safety). All tools are READ_ONLY, reducing risk, but this is not explicitly declared in tool definitions.
Get genotoxicity study details from GENOTOX table by GENOTOX_ID. Retrieves detailed genotoxicity study records including test methods, guidelines, and results. This tool provides the experimental data used to assess whether substances have genotoxic or mutagenic properties that could cause DNA damage.
Get EFSA opinion documents from OPINION table by OP_ID. Retrieves published EFSA scientific opinions, assessments, and regulatory documents. This tool provides access to the original source documents that contain the full scientific assessment and regulatory context for food safety evaluations.
Get risk assessment data from CHEM_ASSESS table by HAZARD_ID. Retrieves comprehensive risk assessment records including ADI (Acceptable Daily Intake), TDI (Tolerable Daily Intake), and other safety limit values. This tool provides the quantitative safety assessments used by EFSA to establish safe intake levels for food substances.
Get a comprehensive safety assessment for a substance by SUB_COM_ID. Combines all relevant safety data from STUDY, GENOTOX, ENDPOINT_STUDY, CHEM_ASSESS, OPINION, and QUESTION tables to provide a complete safety profile.
Get toxicity endpoint study data from ENDPOINT_STUDY table by TOX_ID. Retrieves detailed toxicity endpoint records including NOAEL, LD50, and other toxicity measurements from animal and in vitro studies. This tool provides the experimental data used to assess the toxicological effects of food substances.
Output schemas not documented. Tools return data but response structure (fields, types, nesting) is not formally defined in the tool registration. LLMs cannot plan downstream tool calls without knowing what fields to expect (e.g., does search_substance return sub_id, hazard_ids, synonyms as separate fields or nested objects?).
No error handling guidance in tool descriptions. Descriptions do not explain what to do if a query returns no results, if an ID is invalid, or if the database is unavailable. Example: get_risk_assessments should state 'If no results found, try search_substance() to discover available HAZARD_IDs.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 9 | - | v1 |
Find HAZARD_IDs from risk assessments (CHEM_ASSESS table) filtered by population, assessment type, and dosage thresholds. This tool enables discovery of substances that have specific safety limits or restrictions for particular populations. Use the returned HAZARD_IDs with other tools to get substance details.
Find substances matching specific risk assessment criteria by searching the CHEM_ASSESS table. Filters by population, assessment type, risk values, and returns substance details from COMPONENT and SYNONYM tables. Combines population/dosage discovery with substance lookup in one call.
Filter substances by STUDY criteria including substance class, mutagenic/genotoxic/carcinogenic properties, and remarks. Returns list of matching substances with details from COMPONENT and SYNONYM tables. Use this tool to discover substances matching safety profiles or regulatory categories.
Search the OpenFoodTox database for substances by name, E-number, or synonym. Returns hierarchical results including synonyms, component details, and all associated study data (toxicity, genotoxicity, risk assessments, and EFSA opinions).
Missing tool annotations. No readOnlyHint, destructiveHint, or idempotentHint annotations declared, even though all tools are READ_ONLY. FastMCP supports tool annotations via @mcp.tool decorator; none are used. This forces LLMs to infer safety properties from descriptions alone.
Parameter descriptions lack usage hints and prerequisites. Example: list_substances_by_class_and_safety accepts 'sub_class' but does not explain valid classes (additives, pesticides, etc.) or recommend calling search_substance first to discover available classes. Parameters describe format but not discovery/workflow.
Tool names list_substances_by_assessment and list_hazard_ids_by_assessment are similar and could cause LLM confusion. Both filter by population, assessment_type, and risk_value. Distinction ('returns substances' vs 'returns HAZARD_IDs') is subtle. Consider renaming to list_substances_by_risk_assessment_criteria and list_hazard_ids_by_risk_criteria for clarity.
Pagination support inconsistent. Tools accepting 'limit' parameter (list_substances_by_class_and_safety, list_hazard_ids_by_assessment, list_substances_by_assessment) do not document total count, next_cursor, or offset. Large result sets could exceed context windows without cursor-based pagination.