Klassio — EU customs tariff (CN/HS) classification + EUDR
EU customs tariff classification: CN/HS code + GIR rule, MFN duty and EUDR scope. Sourced.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"eu-customs-tariff-eudr": {
"url": "https://klassio.se/api/mcp"
}
}
}远程端点
https://klassio.se/api/mcpstreamable-http它能做什么
工具清单
工具(2)
🟢klassio_classify_article(description, destination_iso2, origin_iso2, materials, intended_use, ...)
Single-product classification. Accepts a free-text description plus optional structured hints (materials, intended_use, category, origin/destination country). POPULATE EVERY HINT YOU HAVE — materials/intended_use/category materially improve retrieval and candidate quality vs a description-only call (e.g. description:"Funko POP Vinyl", category:"Figurines", materials:["PVC plastic"], intended_use:"decorative collectible figure" reliably surfaces ch. 95). Returns top-3 CN candidates, EUDR scope, MFN duty, a bilingual reasoning_md narrative, a gap_analysis flagging missing inputs, and a tri-state status (confident / review_recommended / manual_review_required). Trust `status` for review-routing — do not re-derive your own confidence threshold. PAT-authed callers also receive prior_decisions[] from the org dictionary history.
输入模式
{
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"destination_iso2": {
"description": "Import destination country (ISO 3166-1 alpha-2, e.g. \"SE\"). Adds destination-specific measure/declaration context.",
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"origin_iso2": {
"description": "Country of origin (ISO 3166-1 alpha-2, e.g. \"CN\"). Improves duty/FTA and EUDR country-risk context and disambiguates origin-sensitive headings.",
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"materials": {
"description": "Constituent materials, e.g. [\"PVC plastic\",\"vinyl\"] or [\"wood\",\"MDF\"]. Strongly improves retrieval — a material-poor description retrieves weaker candidates. Populate whenever known.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"intended_use": {
"description": "Function / end use, e.g. \"decorative collectible figure\" or \"kitchen cabinet door panel\". Disambiguates products whose bare name misleads (a \"Funko POP Vinyl\" reads as raw vinyl without it). Populate whenever known.",
"type": "string",
"maxLength": 500
},
"current_cn": {
"type": "string",
"pattern": "^(\\d{2}|\\d{4}|\\d{6}|\\d{8}|\\d{10})$"
},
"category": {
"description": "Your internal product-taxonomy label, e.g. \"Figurines\", \"Vacuum Cleaner Accessories\". Folded into the retrieval query to anchor the right chapter (e.g. \"Figurines\" pulls ch. 95 toys instead of ch. 39 raw polymer). Populate whenever you have one.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"dry_run": {
"description": "First half of the BYOM eval loop: with dry_run:true retrieval + prompt-build run but the judge is NOT called — returns candidates_top10 + request_token only, no judge spend. Judge with your own model (e.g. fan out across subagents to parallelise), then call klassio_submit_classification_verdict. Prefer this over the inline judge for bulk eval/scoring.",
"type": "boolean"
},
"omit_system_prompt": {
"description": "Dry-run only: omit the re-sent judge system prompt from dry_run_prompt.system (set null) to save ~3k tokens per call. prompt_version is still returned so a caller can validate a system cached via klassio_get_judge_system_prompt. Does NOT change request_token. Default false (system included).",
"type": "boolean"
},
"omit_raw_candidates": {
"description": "Dry-run only: omit the diagnostic dry_run_prompt.raw_candidates pool. Default false (raw_candidates included). The BYOM submit path re-runs retrieval, so omitting this does not affect request_token.",
"type": "boolean"
},
"include": {
"description": "L3 opt-ins. 'compact_rules' hoists per-candidate rule bodies into a shared top-level classification_rules pool (candidates carry rule_ids[] instead). 'truncate_rules' truncates the pool bodies to ~240 chars (use with compact_rules). Default = master shape (per-candidate bilingual classification_rules, no pool).",
"type": "array",
"items": {
"type": "string",
"enum": [
"compact_rules",
"truncate_rules"
]
}
},
"lang": {
"description": "Return reasoning in a single language: drops the redundant rationale_* field for the other and (with compact_rules) collapses the shared rule pool to this language. Absent = bilingual (default).",
"type": "string",
"enum": [
"sv",
"en"
]
}
},
"required": [
"description"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"confident",
"review_recommended",
"manual_review_required"
]
},
"confidence": {
"type": "number"
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cn_code": {
"type": "string"
},
"cn_code_display": {
"type": "string"
},
"description_sv": {
"type": "string"
},
"description_en": {
"type": "string"
},
"confidence": {
"type": "number"
},
"eudr": {
"type": "object",
"properties": {
"in_scope": {
"type": "boolean"
},
"is_ex": {
"type": "boolean"
},
"commodity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"in_scope",
"is_ex",
"commodity"
],
"additionalProperties": false
},
"duty": {
"anyOf": [
{
"type": "object",
"properties": {
"mfn_rate_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"geo_area": {
"type": "string"
},
"as_of": {
"type": "string"
}
},
"required": [
"mfn_rate_percent",
"geo_area",
"as_of"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"classification_rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rule_id": {
"type": "string"
},
"scope": {
"type": "string"
},
"text_sv": {
"type": "string"
},
"text_en": {
"type": "string"
}
},
"required": [
"rule_id",
"scope",
"text_sv",
"text_en"
],
"additionalProperties": false
}
},
"rule_ids": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"cn_code",
"cn_code_display",
"description_sv",
"description_en",
"confidence",
"eudr",
"duty"
],
"additionalProperties": false
}
},
"classification_rules": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"scope": {
"type": "string"
},
"text_sv": {
"type": "string"
},
"text_en": {
"type": "string"
}
},
"required": [
"scope",
"text_sv",
"text_en"
],
"additionalProperties": false
}
},
"recommended_action": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "accept"
}
},
"required": [
"kind"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "add_fields"
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"kind",
"fields"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "human_review"
},
"reason": {
"type": "string"
}
},
"required": [
"kind",
"reason"
],
"additionalProperties": false
}
]
},
"retrieval_quality": {
"type": "object",
"properties": {
"top_distance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"distance_gap": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"normalizer_fired": {
"type": "boolean"
},
"bm25_only_top1": {
"type": "boolean"
},
"advice": {
"type": "string",
"enum": [
"ok",
"add_fields",
"thin_retrieval",
"ambiguous_cluster"
]
}
},
"required": [
"top_distance",
"distance_gap",
"normalizer_fired",
"bm25_only_top1",
"advice"
],
"additionalProperties": false
},
"reasoning_md": {
"type": "string"
},
"gap_analysis": {
"type": "object",
"properties": {
"missing": {
"type": "array",
"items": {
"type": "string"
}
},
"affects": {
"type": "string"
},
"suggested_questions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"missing",
"affects",
"suggested_questions"
],
"additionalProperties": false
},
"query_used": {
"type": "string"
},
"rationale_sv": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"rationale_en": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"gri_applied": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"judge_winner": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"judge_runner_up": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"judge_debug": {
"type": "object",
"properties": {
"fired": {
"type": "boolean"
},
"shortlist_size": {
"type": "number"
},
"chapter_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"api_key_set": {
"type": "boolean"
},
"fallback_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"rerank_fired": {
"type": "boolean"
},
"rerank_skip_reason": {
"type": "string",
"enum": [
"disabled",
"high_confidence_dense",
"shortlist_too_small",
"fallback_no_api_key",
"fallback_sidecar_error",
"fallback_model_error"
]
},
"rerank_top_n": {
"type": "number"
},
"rerank_prompt_version": {
"type": "string"
},
"rerank_duration_ms": {
"type": "number"
},
"rerank_top_changed": {
"type": "boolean"
},
"bm25_top_n": {
"type": "number"
},
"bm25_overlap_with_dense_top10": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"retrieval_query": {
"type": "string"
},
"query_normalize_fired": {
"type": "boolean"
},
"winner_off_shortlist": {
"type": "boolean"
},
"chapter_hint_source": {
"type": "string",
"enum": [
"normalised",
"raw",
"bti"
]
},
"rerank_error": {
"type": "string"
},
"rationale_winner_mismatch": {
"type": "boolean"
},
"judge_flagged_missing": {
"type": "boolean"
},
"off_list_cn_code": {
"type": "string"
},
"off_list_rejected": {
"type": "string"
},
"off_list_reason": {
"type": "string"
},
"normalize_prompt_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tariff_rewrite": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"proposed_headings": {
"type": "array",
"items": {
"type": "string"
}
},
"proposed_headings_valid": {
"type": "array",
"items": {
"type": "string"
}
},
"heading_proposal_injected": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"rewrite_dense_n": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"rewrite_only_in_pool": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"rewrite_only_codes": {
"type": "array",
"items": {
"type": "string"
}
},
"normalize_outcome": {
"type": "string",
"enum": [
"off",
"cache_hit",
"ok",
"timeout",
"parse_fail",
"refused",
"error"
]
},
"normalize_ms": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"retrieval_ms": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"deciding_notes": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"rendered",
"not_triggered",
"no_clauses",
"loader_error"
]
},
"clause_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"chars": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"chapters": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"status",
"clause_keys",
"chars",
"chapters"
],
"additionalProperties": false
}
},
"required": [
"fired",
"shortlist_size",
"chapter_hint",
"api_key_set",
"fallback_reason",
"rerank_fired",
"bm25_top_n",
"bm25_overlap_with_dense_top10",
"retrieval_query",
"query_normalize_fired"
],
"additionalProperties": false
},
"result_ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"taric_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"taric_basis": {
"type": "string",
"enum": [
"deterministic",
"resolved",
"needs_input",
"needs_resolution",
"no_taric"
]
},
"taric_candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cn_code10": {
"type": "string"
},
"effective_description_sv": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"effective_description_en": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"cn_code10",
"effective_description_sv",
"effective_description_en"
],
"additionalProperties": false
}
},
"taric_measures": {
"type": "object",
"properties": {
"third_country_duty": {
"anyOf": [
{
"type": "object",
"properties": {
"duty_expression": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"duty_rate_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duty_amount_eur": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duty_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"geo_area": {
"type": "string"
},
"as_of": {
"type": "string"
},
"source_cn": {
"type": "string"
}
},
"required": [
"duty_expression",
"duty_rate_pct",
"geo_area"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"conditional": {
"type": "array",
"items": {
"type": "object",
"properties": {
"measure_type": {
"type": "string",
"enum": [
"anti_dumping",
"countervailing",
"quota",
"suspension",
"restriction",
"prohibition"
]
},
"present": {
"type": "boolean"
},
"caveats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"geo_area": {
"type": "string"
},
"additional_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"geo_area",
"additional_code"
],
"additionalProperties": false
}
}
},
"required": [
"measure_type",
"present",
"caveats"
],
"additionalProperties": false
}
}
},
"required": [
"third_country_duty",
"conditional"
],
"additionalProperties": false
},
"taric_gap": {
"type": "object",
"properties": {
"missing": {
"type": "array",
"items": {
"type": "string"
}
},
"affects": {
"type": "string"
},
"suggested_questions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"missing",
"affects",
"suggested_questions"
],
"additionalProperties": false
},
"mfn_across_leaves": {
"type": "object",
"properties": {
"rate": {
"anyOf": [
{
"type": "object",
"properties": {
"duty_expression": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"duty_rate_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duty_amount_eur": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duty_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"geo_area": {
"type": "string"
},
"as_of": {
"type": "string"
},
"source_cn": {
"type": "string"
}
},
"required": [
"duty_expression",
"duty_rate_pct",
"geo_area"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"basis": {
"type": "string",
"enum": [
"all_leaves_agree",
"majority_with_conditional_exception",
"leaves_differ"
]
},
"per_leaf": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cn10": {
"type": "string"
},
"duty": {
"anyOf": [
{
"type": "object",
"properties": {
"duty_expression": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"duty_rate_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duty_amount_eur": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"duty_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"geo_area": {
"type": "string"
},
"as_of": {
"type": "string"
},
"source_cn": {
"type": "string"
}
},
"required": [
"duty_expression",
"duty_rate_pct",
"geo_area"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"conditional": {
"type": "boolean"
}
},
"required": [
"cn10",
"duty",
"conditional"
],
"additionalProperties": false
}
}
},
"required": [
"rate",
"basis",
"per_leaf"
],
"additionalProperties": false
},
"prior_decisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"entry_id": {
"type": "string"
},
"cn_code_display": {
"type": "string"
},
"decided_at": {
"type": "string"
}
},
"required": [
"entry_id",
"cn_code_display",
"decided_at"
],
"additionalProperties": false
}
},
"judge_quota_remaining": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"dry_run_prompt": {
"type": "object",
"properties": {
"system": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"user": {
"type": "string"
},
"raw_candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cn_code": {
"type": "string"
},
"source": {
"type": "string"
},
"distance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"cn_code",
"source",
"distance"
],
"additionalProperties": false
}
},
"request_token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"prompt_version": {
"type": "string"
},
"retrieval_query": {
"type": "string"
},
"candidates_top10": {
"type": "array",
"items": {
"type": "object",
"properties": {
"cn_code": {
"type": "string"
},
"cn_code_display": {
"type": "string"
},
"description_en": {
"type": "string"
},
"source": {
"type": "string",
"enum": [
"vector",
"bm25",
"both",
"bti"
]
},
"distance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"cn_code",
"cn_code_display",
"description_en",
"source",
"distance"
],
"additionalProperties": false
}
},
"next_step": {
"type": "string"
}
},
"required": [
"system",
"user",
"request_token",
"prompt_version",
"retrieval_query",
"candidates_top10",
"next_step"
],
"additionalProperties": false
}
},
"required": [
"status",
"confidence",
"candidates",
"reasoning_md",
"gap_analysis",
"query_used",
"rationale_sv",
"rationale_en",
"gri_applied",
"judge_winner",
"judge_runner_up",
"judge_debug",
"result_ref"
],
"additionalProperties": false
}🟢klassio_lookup_cn_code(cn_code, include)
Fast lookup for a known CN code. Returns the canonical description (SV + EN), chapter heading, applicable classification rules, EUDR Annex I scope (in_scope + is_ex), and the MFN duty headline. Pass include=["reasoning"] to also receive the bilingual reasoning_md narrative.
输入模式
{
"type": "object",
"properties": {
"cn_code": {
"type": "string",
"pattern": "^(\\d{2}|\\d{4}|\\d{6}|\\d{8}|\\d{10})$"
},
"include": {
"type": "array",
"items": {
"type": "string",
"enum": [
"reasoning"
]
}
}
},
"required": [
"cn_code"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"cn_code": {
"type": "string"
},
"cn_code_display": {
"type": "string"
},
"description_sv": {
"type": "string"
},
"description_en": {
"type": "string"
},
"chapter_description_sv": {
"type": "string"
},
"chapter_description_en": {
"type": "string"
},
"classification_rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rule_id": {
"type": "string"
},
"scope": {
"type": "string"
},
"text_sv": {
"type": "string"
},
"text_en": {
"type": "string"
}
},
"required": [
"rule_id",
"scope",
"text_sv",
"text_en"
],
"additionalProperties": false
}
},
"eudr": {
"type": "object",
"properties": {
"in_scope": {
"type": "boolean"
},
"is_ex": {
"type": "boolean"
},
"commodity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"in_scope",
"is_ex",
"commodity"
],
"additionalProperties": false
},
"duty": {
"anyOf": [
{
"type": "object",
"properties": {
"rate": {
"type": "string"
},
"type": {
"type": "string"
},
"geo_area": {
"type": "string"
},
"as_of": {
"type": "string"
}
},
"required": [
"rate",
"type",
"geo_area",
"as_of"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"reasoning_md": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"found",
"cn_code"
],
"additionalProperties": false
}社区
证据