Skip to main content
Glama

ICS2 Stop-Words Checker

ics2_check
Read-onlyIdempotent

Check a goods description against the official EU ICS2 stop-words list — terms the European Commission deems too vague or generic for an entry summary declaration (ENS) goods-description field (data element 18 05 000 000).

Pass description=. Behavior: deterministic term matching against the in-force EU list; each flagged term carries a note (a standalone stop-word means automatic rejection, an embedded one means make the description more specific); clean=true means no listed term matched — it does NOT guarantee acceptance, and no binary accepted/rejected verdict is given. Rate-limited: a limit error carries reset_at, the UTC time the allowance resets.

Returns: the description echo, flagged[] (term + note), clean, caveat and disclaimer under result, plus a _source citing the EU list and legal basis, plus confidence, _source and citation (the FreightUtils v1 response envelope).

Limitations: STRICTLY a reference check — not an ENS filing, not a customs-compliance determination, not legal advice; the EU list is non-exhaustive and updated periodically.

Related: hs_code_lookup (commodity codes — a different field of the ENS), uk_duty_calculator (duty/VAT, unrelated to ENS screening). Intended for checking a goods description before an ENS is filed.

Identifiers: Each record carries fu_id, a stable FreightUtils identifier (and fu_version_id where the dataset has editions); resolve_reference resolves one to exactly its record.

Input Schema

NameRequiredDescriptionDefault
descriptionYesThe goods description to check against the EU ICS2 stop-words list.

Output Schema

NameRequiredDescriptionDefault
okYes
_metaNo
as_ofNo
resultYes
statusNo
_sourceYes
editionNo
citationYes
validityNo
warningsNo
confidenceYes
missing_inputsNo
blocking_errorsNo
envelope_versionYes
normalized_inputNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / upstream
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "datasets": {
      +      "additionalProperties": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "kind": {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "watched",
      +                  "checksum-only",
      +                  "manual"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "last_success": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "type": "string"
      +          },
      +          "stale": {
      +            "type": "boolean"
      +          },
      +          "state": {
      +            "enum": [
      +              "in_step",
      +              "changed_upstream",
      +              "schema_drift",
      +              "unreachable",
      +              "window_missed",
      +              "unknown"
      +            ],
      +            "type": "string"
      +          },
      +          "window_days": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "state",
      +          "kind",
      +          "last_success",
      +          "window_days",
      +          "stale"
      +        ],
      +        "type": "object"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "stale": {
      +      "type": "boolean"
      +    },
      +    "state": {
      +      "enum": [
      +        "in_step",
      +        "changed_upstream",
      +        "schema_drift",
      +        "unreachable",
      +        "window_missed",
      +        "unknown"
      +      ],
      +      "type": "string"
      +    },
      +    "state_read_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "state",
      +    "stale",
      +    "state_read_at",
      +    "datasets"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / ids
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "pattern": {
      +      "type": "string"
      +    },
      +    "scheme": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "scheme",
      +    "pattern"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • removedOutput schema / properties / _meta / properties / receipt / properties / reason / const
      Removed value: -"key_required"
    • addedOutput schema / properties / _meta / properties / receipt / properties / reason / enum
      Added value: +[
      +  "key_required",
      +  "quota"
      +]
  4. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / receipt
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "created_at": {
      +      "type": "string"
      +    },
      +    "dataset_version": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "engine_version": {
      +      "type": "string"
      +    },
      +    "inputs": {},
      +    "reason": {
      +      "const": "key_required",
      +      "type": "string"
      +    },
      +    "receipt_hash": {
      +      "type": "string"
      +    },
      +    "result": {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "schema_version": {
      +      "type": "string"
      +    },
      +    "stored": {
      +      "const": false,
      +      "type": "boolean"
      +    },
      +    "tool": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "stored",
      +    "reason",
      +    "schema_version",
      +    "receipt_hash",
      +    "created_at",
      +    "tool",
      +    "inputs",
      +    "dataset_version",
      +    "engine_version",
      +    "result"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / edition_basis
      Added value: +{
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / _meta
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "check_id": {
      +      "type": "string"
      +    },
      +    "receipt_url": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  7. Changed5 schema fields changed
    • addedOutput schema / properties / as_of
      Added value: +{
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / edition
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "applies_from": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "may_apply_until": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "name": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name",
      +        "applies_from",
      +        "may_apply_until"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / envelope_version / enum
      Previous value: -[
      -  "1",
      -  "1.1"
      -]New value: +[
      +  "1",
      +  "1.1",
      +  "1.2"
      +]
    • addedOutput schema / properties / missing_inputs
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "ok",
      +    "partial",
      +    "not_found",
      +    "unsupported",
      +    "ambiguous"
      +  ],
      +  "type": "string"
      +}
  8. Changed2 schema fields changed
    • removedOutput schema / properties / validity / properties / effective_to / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / validity / properties / effective_to / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  9. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  10. Changed5 schema fields changed
    • addedOutput schema / properties / _source / properties / authority_current_edition
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / checked_at
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / dataset_edition
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / envelope_version / const
      Removed value: -"1"
    • addedOutput schema / properties / envelope_version / enum
      Added value: +[
      +  "1",
      +  "1.1"
      +]
  11. Changed29 schema fields changed
    • removedOutput schema / properties / _source / description
      Removed value: -"Citability envelope: EU ICS2 list + legal basis + provenance"
    • removedOutput schema / properties / _source / properties / authority
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / _source / properties / checked
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / _source / properties / dataset
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / legal_basis
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / licence
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / list_in_force
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / _source / properties / name
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / _source / properties / non_exhaustive
      Removed value: -{
      -  "type": "boolean"
      -}
    • addedOutput schema / properties / _source / properties / provenance_status
      Added value: +{
      +  "enum": [
      +    "verified",
      +    "pending-verification",
      +    "computed",
      +    "live"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / _source / properties / retrieved
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / retrieved_via
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / type
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / _source / required
      Previous value: -[
      -  "type",
      -  "authority",
      -  "dataset",
      -  "legal_basis",
      -  "list_in_force",
      -  "source_url",
      -  "licence",
      -  "retrieved",
      -  "non_exhaustive",
      -  "retrieved_via"
      -]New value: +[
      +  "name",
      +  "checked",
      +  "provenance_status"
      +]
    • addedOutput schema / properties / blocking_errors
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "recovery": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "action": {
      +            "type": "string"
      +          },
      +          "params": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "tool": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message",
      +      "recovery"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / caveat
      Removed value: -{
      -  "description": "Non-exhaustive-list caveat: clean does not mean accepted",
      -  "type": "string"
      -}
    • addedOutput schema / properties / citation
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "qualifier": {
      +      "type": "string"
      +    },
      +    "text": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "text"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / clean
      Removed value: -{
      -  "description": "True if no listed stop-word was found — NOT a guarantee of acceptance",
      -  "type": "boolean"
      -}
    • addedOutput schema / properties / confidence
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "basis": {
      +      "enum": [
      +        "deterministic",
      +        "provenance",
      +        "match_quality",
      +        "freshness"
      +      ],
      +      "type": "string"
      +    },
      +    "level": {
      +      "enum": [
      +        "high",
      +        "medium",
      +        "low"
      +      ],
      +      "type": "string"
      +    },
      +    "score": {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "level",
      +    "basis"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / description
      Removed value: -{
      -  "description": "Echo of the submitted description",
      -  "type": "string"
      -}
    • removedOutput schema / properties / disclaimer
      Removed value: -{
      -  "description": "Reference-only disclaimer",
      -  "type": "string"
      -}
    • addedOutput schema / properties / envelope_version
      Added value: +{
      +  "const": "1",
      +  "type": "string"
      +}
    • removedOutput schema / properties / flagged
      Removed value: -{
      -  "description": "Listed stop-words found (empty if none)",
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "note": {
      -        "description": "Standalone (automatic rejection) vs embedded guidance",
      -        "type": "string"
      -      },
      -      "term": {
      -        "description": "The listed stop-word found",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "term",
      -      "note"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / normalized_input
      Added value: +{
      +  "additionalProperties": {},
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / ok
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / result
      Added value: +{
      +  "additionalProperties": {},
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / validity
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "as_of": {
      +      "type": "string"
      +    },
      +    "effective_from": {
      +      "type": "string"
      +    },
      +    "effective_to": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "as_of"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / warnings
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "details": {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "message": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "description",
      -  "flagged",
      -  "clean",
      -  "caveat",
      -  "_source",
      -  "disclaimer"
      -]New value: +[
      +  "envelope_version",
      +  "ok",
      +  "result",
      +  "confidence",
      +  "_source",
      +  "citation"
      +]
  12. Added

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses deterministic term matching, the meaning of the two note types (standalone = automatic rejection vs embedded = make more specific), the crucial caveat that clean=true does not guarantee acceptance, that no binary verdict is returned, and that rate-limit errors carry reset_at. Limitations (not a filing, not legal advice, non-exhaustive list) are spelled out.

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

Conciseness3/5

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

The purpose and behavior sections are front-loaded and dense with useful information, but the "Returns:" block restates what the existing output schema already provides, and the closing "Identifiers:" paragraph about fu_id and resolve_reference is boilerplate that does not earn its place for a single-parameter read-only checker.

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 an output schema and full annotation coverage, the remaining burden is behavioral framing, and the description covers matching semantics, result caveats, rate limiting, scope limitations, and sibling relationships. Nothing an agent needs to call this correctly or interpret the result is missing.

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; the description adds a little by framing the value as the ENS goods-description field and giving an explicit "Pass description=<goods description>" invocation pattern. It does not add length, language, or formatting constraints on the string, so it stops short of a 5.

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 precise verb and resource: "Check a goods description against the official EU ICS2 stop-words list," and pins it to data element 18 05 000 000 of the ENS. It also names two siblings (hs_code_lookup, uk_duty_calculator) and explains they cover different fields, so an agent can route without opening schemas.

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?

Gives a clear usage context ("Intended for checking a goods description before an ENS is filed") and distinguishes itself from the two related tools it is most likely to be confused with. It stops short of explicit exclusions or a routing rule such as "if you need X, use Y instead," so it is not quite a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.