TracePass
Manage products, EU Digital Product Passports, operator parties, and GS1 EPCIS supply-chain events.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"tracepass": {
"command": "npx",
"args": [
"tracepass-mcp-server"
]
}
}
}실행 가능한 패키지
1.14.1stdio원격 엔드포인트
https://ai.tracepass.eu/mcpstreamable-http할 수 있는 일
도구 목록
도구 (6)
🟡tracepass_products(action, args)
Manage the TracePass product catalogue. A product is the catalogue layer — one product can have many passports (one per serialised unit). Products are not billable on their own. Actions (pass via `action`, with `args`): - list — args: { page?, limit? (≤100), category?, status?, search? }. Read-only. - get — args: { id }. Read-only. - create — args: { name, model, category, description? }. `category` is one of: battery, textile, electronics, construction, steel, detergents, paints-coatings, packaging, furniture, tyres, jewelry, toys, fmcg. - update — args: { id, name?, model?, description? }; pass at least one field to change. - create_batch — args: { products: [ { name, model, category, description? }, … ] }, up to 100. Partial-success: the response carries a per-item status, so some items can be created while others error. The whole batch consumes N writes upfront; if that would exceed the daily cap NOTHING is created (429). - archive — args: { id }. Soft-archive a product. Blocked with 409 while any non-archived passport still references it — archive those passports first. This is reversible and is NOT deletion.
입력 스키마
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"list",
"get",
"create",
"create_batch",
"update",
"archive"
],
"description": "Which product operation to run: list | get | create | create_batch | update | archive."
},
"args": {
"description": "Arguments for the chosen action; required fields depend on `action` (see each action above).",
"type": "object",
"properties": {
"id": {
"description": "Product id. Required for get and update.",
"type": "string"
},
"name": {
"description": "Product name. Required for create; optional on update.",
"type": "string"
},
"model": {
"description": "Manufacturer model / SKU. Required for create; optional on update.",
"type": "string"
},
"category": {
"description": "DPP category for create: battery | textile | electronics | construction | steel | detergents | paints-coatings | packaging | furniture | tyres | jewelry | toys | fmcg.",
"type": "string"
},
"description": {
"description": "Free-text product description (create/update).",
"type": "string"
},
"page": {
"description": "Page number for list (1-based).",
"type": "number"
},
"limit": {
"description": "Page size for list, max 100.",
"type": "number"
},
"status": {
"description": "Filter list by product status.",
"type": "string"
},
"search": {
"description": "Filter list by a search term.",
"type": "string"
},
"products": {
"description": "Products to create for create_batch: [{ name, model, category, description? }], max 100.",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"description": "The resource's TracePass id, when the response is a single entity.",
"type": "string"
},
"items": {
"description": "The page of results, when the action is a list.",
"type": "array",
"items": {}
},
"total": {
"description": "Total matching records across all pages (list actions).",
"type": "number"
},
"page": {
"description": "Current page number (list actions).",
"type": "number"
},
"limit": {
"description": "Page size (list actions).",
"type": "number"
},
"totalPages": {
"description": "Total number of pages (list actions).",
"type": "number"
},
"result": {
"description": "Wraps a non-object response body (e.g. a QR code string)."
},
"error": {
"description": "Machine-readable error code, when the API rejected the request.",
"type": "string"
},
"message": {
"description": "Human-readable error or status detail, when present.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡tracepass_passports(action, args)
Manage Digital Product Passports — create, read, and run lifecycle actions. IMPORTANT: `create` consumes a DPP slot on the account's plan and IS BILLABLE. Creating a passport beyond the included quota incurs a per-passport overage charge; if over quota the tool returns a 402-style message — only re-run with args.confirmOverage=true after the user explicitly agrees to the charge. `archive` is IRREVERSIBLE (the public QR permanently 404s); prefer `suspend` when a change might be undone. Actions (pass via `action`, with `args`): - list — args: { page?, limit? (≤100), productId?, status?, search? }. status ∈ draft|in_review|approved|published|suspended|expired|archived. Read-only. - get — args: { id, format? (summary|full), lang? }. Read-only. - get_by_serial — args: { serial, format?, lang?, gtin? }. Read-only. Addresses the passport by your own serial. A serial is unique only WITHIN a GTIN — if the same serial exists under two GTINs in your account the call returns 409 ambiguous_serial; pass `gtin` (or use the by-id action) to resolve exactly. - compliance — args: { id }. Read-only. Returns a three-tier compliance verdict (compliant | compliant_with_warnings | incomplete) with regulation-cited findings — use to gap-check a passport against the rules for its category, fix the cited fields/parties, then re-check. Also returns byRegulation[]: the same findings grouped per regulation, worst first, so you can tell WHICH regime is failing instead of reading one `incomplete` as everything being wrong. A regulation absent from that array raised no finding — that is not the same as it having passed. - registry_readiness — args: { id }. Read-only. Returns { ready, findings[] } — whether the passport would pass the EU DPP Registry's FORMAL submission gate (mandatory fields present, correct formatting, a resolvable public link, item-level granularity via a serial number, and a well-formed commodity code where the category carries one). This is the registry's mechanical pre-submission check, NOT the substantive compliance verdict; a passport can be registry-ready yet not substantively compliant. Battery passports only. - create — args: { productId, gtin, serialNumber, confirmOverage? }. BILLABLE. - suspend — args: { id }. Reversible — public QR shows 'suspended'. - suspend_by_serial — args: { serial, gtin? }. Same as suspend, addressed by your serial. 409 ambiguous_serial if the serial isn't unique in your account — pass `gtin`. - archive — args: { id }. IRREVERSIBLE — confirm with the user first. - archive_by_serial — args: { serial, gtin? }. IRREVERSIBLE, addressed by your serial — confirm first. 409 ambiguous_serial if the serial isn't unique — pass `gtin`. - get_qr — args: { id, format? (svg|png) }. Read-only. - get_qr_by_serial — args: { serial, format? (svg|png), gtin? }. Read-only. Same as get_qr, addressed by your own serial. A serial is unique only WITHIN a GTIN — if the same serial exists under two GTINs in your account the call returns 409 ambiguous_serial; pass `gtin` (or use get_qr by id) to resolve exactly.
입력 스키마
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"list",
"get",
"get_by_serial",
"compliance",
"registry_readiness",
"create",
"suspend",
"suspend_by_serial",
"archive",
"archive_by_serial",
"get_qr",
"get_qr_by_serial"
],
"description": "Which passport operation to run. Reads: list | get | get_by_serial | compliance | registry_readiness | get_qr | get_qr_by_serial. Lifecycle: create (BILLABLE) | suspend (reversible) | archive (IRREVERSIBLE), each with a _by_serial variant."
},
"args": {
"description": "Arguments for the chosen action; required fields depend on `action` (see each action above).",
"type": "object",
"properties": {
"id": {
"description": "Passport id. Required for get/compliance/create-result/suspend/archive/get_qr (the by-id actions).",
"type": "string"
},
"serial": {
"description": "Your own serial number. Required for the *_by_serial actions.",
"type": "string"
},
"gtin": {
"description": "GTIN disambiguator for *_by_serial actions when a serial isn't unique across GTINs (else 409 ambiguous_serial).",
"type": "string"
},
"productId": {
"description": "Parent product id. Required for create.",
"type": "string"
},
"serialNumber": {
"description": "Serial for the new passport. Required for create.",
"type": "string"
},
"confirmOverage": {
"description": "Set true to accept a per-passport overage charge when create is over the plan quota (402).",
"type": "boolean"
},
"format": {
"description": "get/get_by_serial: summary|full. get_qr/get_qr_by_serial: svg|png.",
"type": "string"
},
"lang": {
"description": "Resolve field values to one of the 24 EU locales server-side (get/get_by_serial).",
"type": "string"
},
"page": {
"description": "Page number for list (1-based).",
"type": "number"
},
"limit": {
"description": "Page size for list, max 100.",
"type": "number"
},
"status": {
"description": "Filter list by status: draft|in_review|approved|published|suspended|expired|archived.",
"type": "string"
},
"search": {
"description": "Filter list by a search term.",
"type": "string"
}
}
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"description": "The resource's TracePass id, when the response is a single entity.",
"type": "string"
},
"items": {
"description": "The page of results, when the action is a list.",
"type": "array",
"items": {}
},
"total": {
"description": "Total matching records across all pages (list actions).",
"type": "number"
},
"page": {
"description": "Current page number (list actions).",
"type": "number"
},
"limit": {
"description": "Page size (list actions).",
"type": "number"
},
"totalPages": {
"description": "Total number of pages (list actions).",
"type": "number"
},
"result": {
"description": "Wraps a non-object response body (e.g. a QR code string)."
},
"error": {
"description": "Machine-readable error code, when the API rejected the request.",
"type": "string"
},
"message": {
"description": "Human-readable error or status detail, when present.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡tracepass_passport_fields(action, args)
Update field values on a Digital Product Passport. Every change is recorded in the passport's audit trail, tagged as an API-key update. Actions (pass via `action`, with `args`): - update — args: { id, fieldKey, value }. `value` type matches the field's dataType (string, number, boolean, array, object). - update_by_serial — args: { serial, fieldKey, value, gtin? }. Same as update, addressed by your own serial. A serial is unique only WITHIN a GTIN — if it isn't unique in your account the call returns 409 ambiguous_serial; pass `gtin` (or use update by id) to resolve exactly.
입력 스키마
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"update",
"update_by_serial"
],
"description": "Update one passport field, addressed by passport id (update) or by your serial (update_by_serial)."
},
"args": {
"description": "Arguments for the chosen action; required fields depend on `action`.",
"type": "object",
"properties": {
"id": {
"description": "Passport id. Required for update.",
"type": "string"
},
"serial": {
"description": "Your serial. Required for update_by_serial.",
"type": "string"
},
"gtin": {
"description": "GTIN disambiguator for update_by_serial when the serial isn't unique (else 409).",
"type": "string"
},
"fieldKey": {
"description": "The field key to set (required).",
"type": "string"
},
"value": {
"description": "The new value for the field (required). Type depends on the field's dataType."
}
}
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"description": "The resource's TracePass id, when the response is a single entity.",
"type": "string"
},
"items": {
"description": "The page of results, when the action is a list.",
"type": "array",
"items": {}
},
"total": {
"description": "Total matching records across all pages (list actions).",
"type": "number"
},
"page": {
"description": "Current page number (list actions).",
"type": "number"
},
"limit": {
"description": "Page size (list actions).",
"type": "number"
},
"totalPages": {
"description": "Total number of pages (list actions).",
"type": "number"
},
"result": {
"description": "Wraps a non-object response body (e.g. a QR code string)."
},
"error": {
"description": "Machine-readable error code, when the API rejected the request.",
"type": "string"
},
"message": {
"description": "Human-readable error or status detail, when present.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴tracepass_passport_parties(action, args)
Manage the economic-operator parties on a passport — manufacturer, importer, authorisedRepresentative, distributor, recycler, producerResponsibilityOrg. Each party carries a legal name and ideally a validated 13-digit GS1 GLN. Actions (pass via `action`, with `args`): - set — args: { id, role, legalName, gln?, country?, legacyOperatorId? }. Sets or updates one role. - remove — args: { id, role }. Clears one role.
입력 스키마
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"set",
"remove"
],
"description": "Set (add/replace) or remove an economic-operator party on a passport by its role."
},
"args": {
"description": "Arguments for the chosen action; required fields depend on `action`.",
"type": "object",
"properties": {
"id": {
"description": "Passport id (required).",
"type": "string"
},
"role": {
"description": "Economic-operator role, e.g. manufacturer | importer | distributor | authorised_representative (required).",
"type": "string"
},
"legalName": {
"description": "Party legal name. Required for set.",
"type": "string"
},
"gln": {
"description": "GS1 Global Location Number for the party (set, optional).",
"type": "string"
},
"country": {
"description": "Party country code (set, optional).",
"type": "string"
},
"legacyOperatorId": {
"description": "Your internal operator id for the party (set, optional).",
"type": "string"
}
}
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"description": "The resource's TracePass id, when the response is a single entity.",
"type": "string"
},
"items": {
"description": "The page of results, when the action is a list.",
"type": "array",
"items": {}
},
"total": {
"description": "Total matching records across all pages (list actions).",
"type": "number"
},
"page": {
"description": "Current page number (list actions).",
"type": "number"
},
"limit": {
"description": "Page size (list actions).",
"type": "number"
},
"totalPages": {
"description": "Total number of pages (list actions).",
"type": "number"
},
"result": {
"description": "Wraps a non-object response body (e.g. a QR code string)."
},
"error": {
"description": "Machine-readable error code, when the API rejected the request.",
"type": "string"
},
"message": {
"description": "Human-readable error or status detail, when present.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡tracepass_epcis(action, args)
GS1 EPCIS 2.0 supply-chain events. `export` is included on Starter plans and up; `capture`, `capture_job`, and `query` require the paid EPCIS add-on (those actions return a 403-style message without it). Actions (pass via `action`, with `args`): - export — args: { id }. Export a passport's events as an EPCIS 2.0 JSON-LD document. Read-only. - export_by_serial — args: { serial, gtin? }. Same as export, addressed by your own serial. A serial is unique only WITHIN a GTIN — if it isn't unique in your account the call returns 409 ambiguous_serial; pass `gtin` (or use export by id). Read-only. - capture — args: { events }. `events` is an EPCISDocument, a single event, or an array of events (JSON-LD). Returns a 202 with a captureJobId. - capture_job — args: { jobId }. Poll an async capture job. Read-only. - query — args: { params? }. `params` is a key/value map of standard EPCIS query parameters (EQ_bizStep, GE_eventTime, MATCH_epc, …). Read-only.
입력 스키마
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"export",
"export_by_serial",
"capture",
"capture_job",
"query"
],
"description": "EPCIS 2.0: export a passport's events (export | export_by_serial), capture new events, poll a capture job, or query events."
},
"args": {
"description": "Arguments for the chosen action; required fields depend on `action`.",
"type": "object",
"properties": {
"id": {
"description": "Passport id. Required for export.",
"type": "string"
},
"serial": {
"description": "Your serial. Required for export_by_serial.",
"type": "string"
},
"gtin": {
"description": "GTIN disambiguator for export_by_serial when the serial isn't unique (else 409).",
"type": "string"
},
"events": {
"description": "EPCIS 2.0 event payload (an EPCISDocument or event list). Required for capture."
},
"jobId": {
"description": "Capture job id to poll. Required for capture_job.",
"type": "string"
},
"params": {
"description": "EPCIS query parameters as key→value strings (query, optional).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
}
}
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"description": "The resource's TracePass id, when the response is a single entity.",
"type": "string"
},
"items": {
"description": "The page of results, when the action is a list.",
"type": "array",
"items": {}
},
"total": {
"description": "Total matching records across all pages (list actions).",
"type": "number"
},
"page": {
"description": "Current page number (list actions).",
"type": "number"
},
"limit": {
"description": "Page size (list actions).",
"type": "number"
},
"totalPages": {
"description": "Total number of pages (list actions).",
"type": "number"
},
"result": {
"description": "Wraps a non-object response body (e.g. a QR code string)."
},
"error": {
"description": "Machine-readable error code, when the API rejected the request.",
"type": "string"
},
"message": {
"description": "Human-readable error or status detail, when present.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢tracepass_templates(action, args)
Discover the regulatory field schema for each DPP category — what a COMPLIANT passport must contain, per the governing EU regulation. Read-only reference data. Use this to advise on requirements before creating products/passports, and to gap-check a draft against the rules. Actions (pass via `action`, with `args`): - list — args: {}. Lists all 13 categories with their field count, required-field count, and governing regulation (name + number + effective/mandatory dates). - get — args: { category }. Full field schema for one category: every field's key, label, dataType, whether it is REQUIRED, its access level (public/restricted/authority), enum options, validation bounds, and — where known — the regulation article/annex that mandates it. `category` is one of: battery, textile, electronics, construction, steel, detergents, paints-coatings, packaging, furniture, tyres, jewelry, toys, fmcg. BATTERY — required-ness is per-category, so `required` alone is the wrong answer. Resolve it in this order: 1. SCOPE FIRST. Only EV, LMT and industrial_gt_2kwh batteries owe a passport at all (Art. 77(1), Reg (EU) 2023/1542). For portable, SLI or industrial_lte_2kwh, NO field is required — do not list mandatory fields for them; say the battery is out of scope. 2. Then `requiredBy[batteryCategory]` where the field carries that map (required | conditional | notApplicable). 3. Then fall back to `required`. The map is keyed ONLY by the three in-scope categories, so skipping step 1 falls through to `required` and invents an obligation the Regulation does not impose. Note also that EV and LMT report state-of-health through MUTUALLY EXCLUSIVE field sets — an EV battery must leave the remaining-capacity cluster empty and an LMT battery must leave stateOfCertifiedEnergy empty, so no single battery ever fills every field.
입력 스키마
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"list",
"get"
],
"description": "List all DPP category templates, or get one template by category."
},
"args": {
"description": "Arguments for the chosen action; `category` is required for get, ignored for list.",
"type": "object",
"properties": {
"category": {
"description": "DPP category to fetch (required for get): battery | textile | electronics | construction | steel | detergents | paints-coatings | packaging | furniture | tyres | jewelry | toys | fmcg.",
"type": "string"
}
}
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"description": "The resource's TracePass id, when the response is a single entity.",
"type": "string"
},
"items": {
"description": "The page of results, when the action is a list.",
"type": "array",
"items": {}
},
"total": {
"description": "Total matching records across all pages (list actions).",
"type": "number"
},
"page": {
"description": "Current page number (list actions).",
"type": "number"
},
"limit": {
"description": "Page size (list actions).",
"type": "number"
},
"totalPages": {
"description": "Total number of pages (list actions).",
"type": "number"
},
"result": {
"description": "Wraps a non-object response body (e.g. a QR code string)."
},
"error": {
"description": "Machine-readable error code, when the API rejected the request.",
"type": "string"
},
"message": {
"description": "Human-readable error or status detail, when present.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}커뮤니티
증거