Skip to main content
Glama

Server Details

Food additive regulations of Japan, the EU and the US, side by side, with sources (free tier).

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 5 tools

Disambiguation4/5

Each tool targets a distinct action: label analysis, substance search, and substance detail, with the _diff variants clearly flagged as the paid/cross-axis counterparts. The boundary between analyze_label/get_substance and their _diff siblings is well explained, though having two tools that only return an HTTP endpoint rather than data can still mislead an agent.

Naming Consistency5/5

Names follow a clean verb_noun pattern (analyze_label, get_substance, search_substances) with a consistent _diff suffix marking the paid variants. No mixing of conventions.

Tool Count3/5

Five tools is a reasonable count on paper, but two of them (analyze_label_diff, get_substance_diff) are non-functional stubs that only redirect to HTTP, leaving just three usable tools. For a multi-axis regulatory data domain that feels thin.

Completeness3/5

Core read paths are covered (search, get one substance, analyze a label including interactions), but there is no way to list or browse substances, explore categories/groups directly, or query interactions outside of label analysis. Cross-axis comparison is only reachable via paid HTTP, a notable gap.

Available Tools

5 tools
analyze_labelFind the additives named on a labelA
Read-only
Inspect

Find the additives named on a label (same as HTTP POST /v1/labels/analyze). Splits the additive section into tokens and returns, per token, the substances it resolves to (SubstanceSummary: facts on their own axis), plus known interactions between the detected substances. Cutting the additive section out of the label is the caller's job; sending the whole ingredient section is allowed. Matching is exact against the alias vocabulary in scope: a token with matches: [] is unresolved, which (open world) does not distinguish "not an additive" from "an additive not known here". axis and lang must be one of the accepted pairs: JP+ja, US+en, EU+nl, EU+fr, EU+de, EU+es, EU+pl, EU+el, EU+bg. Not a safety judgement: every record is a draft and needs verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisYesRegulatory axis the label or name belongs to: JP, EU or US.
langYesLanguage of the name or label text (ISO 639-1), e.g. ja, en, de, fr.
textYesThe additive (or whole ingredient) section of one label: one raw string (split at 、 , , / for Japanese and , ; . : for Latin script, at bracket depth zero; whitespace is not a separator), or an array of already-split items (tokens[i] corresponds to item i).

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: exact matching against the in-scope alias vocabulary, the meaning of matches: [] (unresolved, open-world ambiguity between 'not an additive' and 'unknown additive'), the required axis+lang pairs, and the explicit caveat that results are drafts requiring verification rather than safety judgements. Note a mild tension with openWorldHint=false in the empty-match semantics, but it describes vocabulary ambiguity, not external-world interaction, so it is not a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in the first sentence, then layers mechanics, constraints, and caveats in a logical order. Dense with parentheticals, but nearly every clause carries operative information; only the HTTP-endpoint equivalence is arguably filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: per-token SubstanceSummary records plus known interactions between detected substances, with the empty-match case explained. Combined with the axis/lang constraint and the draft-verification caveat, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value the schema lacks: the enumerated legal axis+lang combinations (JP+ja, US+en, EU+nl/fr/de/es/pl/el/bg) and confirmation that either raw text or pre-split arrays are acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find the additives named on a label') and describes the transformation (tokenize the additive section, resolve substances, surface interactions), so the agent knows exactly what the tool produces. It does not, however, distinguish itself from the sibling analyze_label_diff, which an agent must infer on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives input-scope guidance ('cutting the additive section out of the label is the caller's job; sending the whole ingredient section is allowed'), which is useful precondition context. But it never says when to prefer this over analyze_label_diff, get_substance, or search_substances, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_label_diffFind the additives named on a label, with the cross-axis derivation (paid, HTTP only)A
Read-only
Inspect

(Paid; not available through MCP.) Same input as analyze_label, but each detected substance carries the cross-axis derivation. This tool does not return that data: it returns the HTTP endpoint (POST /v1/labels/analyze/diff with the same JSON body, 0.01 USDC per request via x402 on Base) to call instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisYesRegulatory axis the label or name belongs to: JP, EU or US.
langYesLanguage of the name or label text (ISO 639-1), e.g. ja, en, de, fr.
textYesThe additive (or whole ingredient) section of one label: one raw string (split at 、 , , / for Japanese and , ; . : for Latin script, at bracket depth zero; whitespace is not a separator), or an array of already-split items (tokens[i] corresponds to item i).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, the description discloses that the tool is paid, absent from MCP, returns no analysis data, and gives the concrete endpoint (POST /v1/labels/analyze/diff), pricing (0.01 USDC per request) and payment rail (x402 on Base). This is unusually rich behavioral context that annotations cannot convey, and nothing contradicts the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the two most decision-relevant facts (paid, not available via MCP) front-loaded in parentheses. There is mild redundancy between 'each detected substance carries the cross-axis derivation' and 'This tool does not return that data', but the clarification is warranted given the counterintuitive behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining what the agent gets back, and it does so fully: not the data, but the endpoint URL, request shape and cost. Combined with 100% schema coverage on inputs, nothing an agent needs in order to call and act on this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so text, axis and lang are already fully documented in the input schema, which sets the baseline at 3. The description only adds that the input matches analyze_label, which is useful for parity but not new per-parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The definition states exactly what the tool is (a routing shim that returns an HTTP endpoint) and how it relates to its sibling analyze_label: same input, but the paid variant carries cross-axis derivation. An agent can tell without opening either schema that this tool does not perform the analysis itself and what it returns instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly signals the condition that selects this tool over analyze_label (you need cross-axis derivation) and warns that it is unavailable through MCP, which is critical for invocation decisions. It stops short of an explicit 'do not use this if...' exclusion or pointing to alternatives like get_substance_diff.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_substanceOne substance, with everything its own roster saysA
Read-only
Inspect

One substance with everything its own roster says (same as HTTP GET /v1/substances/{id}): identifiers, category, aliases, translations, the source-ledger row, groups, and — depending on the axis — Japanese use standards, EU/Codex conditions of use, mandatory labelling statements, the roster's definition text or the CFR citation. Facts from the substance's own axis only; nothing here crosses an axis (that is get_substance_diff, paid, HTTP only). Axis-specific keys are present only where the roster has that concept, and an empty list means something (use_standards: [] = no use standard; use_conditions: [] = no permitted food category). Not a safety judgement: every record is a draft and needs verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubstance id as returned by search_substances or analyze_label, e.g. eu:e951, jp:designated-aspartame, us:cfr-172-804.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds genuinely new semantics: axis-specific keys appear only where the roster has that concept, empty lists are meaningful ('use_standards: [] = no use standard'), and every record is a draft needing verification. This is substantive context beyond the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core resource statement and then layers scope, boundary, and caveats. The second and third paragraphs earn their place, though the long parenthetical key list is dense and slightly heavy for a single tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the return shape — and it does, enumerating the returned keys and the meaning of empty lists. Combined with the boundary and draft-status caveats, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single id parameter is documented with format examples in the schema itself. The description adds no additional syntax or format detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (one substance's full roster record) and enumerates the exact contents it returns (identifiers, category, aliases, translations, ledger row, groups, axis-specific fields). It explicitly carves out the sibling boundary: 'nothing here crosses an axis (that is get_substance_diff)'. An agent can distinguish this from get_substance_diff without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (get_substance_diff) and the condition that selects it ('crosses an axis'), and the id schema points to search_substances/analyze_label as upstream sources. It stops short of saying when to prefer this over analyze_label, so it is clear but not fully exhaustive routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_substance_diffOne substance, with the cross-axis derivation (paid, HTTP only)A
Read-only
Inspect

(Paid; not available through MCP.) For every axis other than the substance's own, what that axis says (with a per-cell source) kept separate from what was derived from it; when nothing can be concluded, a refusal says why and what would settle it. This tool does not return that data: it returns the HTTP endpoint (GET /v1/substances/{id}/diff, 0.01 USDC per request via x402 on Base) to call instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubstance id as returned by search_substances or analyze_label, e.g. eu:e951, jp:designated-aspartame, us:cfr-172-804.

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, it discloses the critical behavior that this tool does NOT return the diff data but instead returns the endpoint (GET /v1/substances/{id}/diff), along with cost (0.01 USDC per request) and the payment rail (x402 on Base). This is exactly the kind of non-obvious operational context an agent cannot get from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The paid/HTTP-only warning is correctly front-loaded in parentheses. The first sentence is dense and describes data the tool does not itself return, which costs some clarity, but it still earns its place by telling the agent what the paid endpoint would yield before routing them there.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must explain the return value, and it does state that the response is the HTTP endpoint rather than the diff. It could be more explicit about the exact response shape (bare URL vs. structured field), but for a 1-parameter routing tool the essential context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single 'id' parameter with 100% schema description coverage, including format examples, so the schema carries the semantics. The description adds nothing about the id beyond the {id} path placeholder, matching the baseline-3 case where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The name/title and description clearly state that this retrieves the cross-axis derivation for one substance (all axes other than the substance's own), and the second sentence uniquely clarifies that the tool returns an HTTP endpoint rather than the data itself. That non-obvious distinction separates it from siblings like get_substance and analyze_label_diff, though the purpose sentence is wordy and indirect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (you want the per-axis derivation with source separation and refusals) and flags it as paid/HTTP-only, but it never explicitly contrasts it with get_substance or analyze_label_diff, nor states conditions under which an agent should prefer those siblings instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_substancesLook up substances by nameA
Read-only
Inspect

Look up substances by name on one regulatory axis (same as HTTP GET /v1/substances?name=…). The name is normalised (NFKC, whitespace removed, lower-cased) and matched exactly against the names and aliases the axis itself uses in that language (E numbers and official names for EU, 品目名 and label terms for JP, CFR names for US) — no partial or fuzzy matching. The official name is an alias of itself. Returns the matching substances (SubstanceSummary: facts from their own roster only) and, per row, what text matched. axis and lang must be one of the accepted pairs: JP+ja, US+en, EU+nl, EU+fr, EU+de, EU+es, EU+pl, EU+el, EU+bg. Not a safety judgement: every record is a draft and needs verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisYesRegulatory axis the label or name belongs to: JP, EU or US.
langYesLanguage of the name or label text (ISO 639-1), e.g. ja, en, de, fr.
nameYesThe name to look up, as printed on a label or roster.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint/openWorldHint already covering the safety profile, the description adds substantial non-obvious behavior: NFKC normalisation, exact-only matching against axis-specific name sets, what the response rows contain (SubstanceSummary plus the matched text), and an explicit caveat that records are drafts requiring verification.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and matching semantics, and the dense sentences each carry information rather than filler. It is still a fairly long block for a three-parameter lookup, and the HTTP GET parenthetical is conveniences rather than essentials.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description appropriately explains the return shape (matching SubstanceSummary rows plus the matched text). Combined with the draft-verification caveat and the axis/lang constraint, an agent has everything needed to invoke and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description materially exceeds the schema by constraining axis+lang to an enumerated pair list (the schema has no enums) and by explaining what each axis's vocabulary actually contains (E numbers for EU, 品目名 for JP, CFR names for US) and how the input name is transformed before matching.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('look up substances by name') scoped to one regulatory axis, and the exact-match semantics clearly frame it as a name-lookup rather than an ID fetch. It does not explicitly name or contrast itself with the sibling get_substance, so the differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (resolve a printed name or label term to substances) but never states when to use this versus get_substance or the analyze_label family, nor any when-not condition. The accepted axis/lang pair list gives practical invocation guidance but is not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observedanalyze_label
    • First observedanalyze_label_diff
    • First observedget_substance
    • First observedget_substance_diff
    • First observedsearch_substances

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables checking food additive safety, nutrition profiles, pesticide residues, and ingredient lists with regulatory flags and dietary compatibility. All data is sourced from authoritative bodies like JECFA, EFSA, and FDA.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for Japanese food nutrition data, enabling bilingual JP/EN lookups across konbini, restaurant chains, and grocery brands.
    6
    68 npm
    2
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources