Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "tracepass_epcis"
GS1 EPCIS 2.0 supply-chain events. `export`,is`capture`,included`capture_job`onandStarter`query`plansareandonup;every`capture`plan,`capture_job`,Freeandincluded.`query`CapturedrequireeventsthecountpaidagainstEPCIStheadd-onplan's(thoseeventactionsallowancereturn(10 a403-stylemonthmessageonwithoutFree); over it)., `capture` returns an overage or hard-block message. Actions (pass via `action`, with `args`): ⟨122 unchanged words⟩
Added "tracepass_scope"; changed the definition of "tracepass_epcis", "tracepass_passport_fields", "tracepass_passport_parties" and 3 more (6 tools before, 7 now)
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Machine-readable error code, when the API rejected the request.","type":"string"},"id":{"description":"The resource's ⟨33 unchanged words⟩ ,"type":"number"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable error or status detail, when present.","type":"string"},"page":{"description":"Current page ⟨45 unchanged words⟩
Changed the definition of "tracepass_epcis", "tracepass_passport_fields", "tracepass_passport_parties" and 3 more
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false}
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false}
Changed the definition of "tracepass_passport_fields"
⟨9 unchanged words⟩ change is recorded in the passport's audit trail with the credential that made it (API key or connected app) and this MCP channel. `source` (optional) says where the value came from. Omit it,taggedoraspass "manual", when the user gave you the value or it comes from their own records: it is written with the user's rights (approved for anAPI-keyAPIupdate.key or an admin; sent to review for a connected app acting for an editor). Pass "ai_suggested" when you found or inferred the value yourself (web research, reading a document): it lands in the dashboard review queue for a human to approve, and it is refused on fields only the economic operator may state or that must be measured (e.g. battery stateOfHealth). Actions (pass via `action`, with `args`): - update — args: { id, fieldKey, value,
Changed the definition of "tracepass_passports"
⟨473 unchanged words⟩ { productId, identifier?, gtin?, serialNumber?, confirmOverage?, lineage? }. BILLABLE. Provide identifier (preferred) or legacy ⟨13 unchanged words⟩ schemes return 400. A duplicate identifier returns 409. lineage (battery only) — a repurposed, remanufactured or reused battery needs a NEW passport linked to the original(s) (Battery Regulation Art. 77(7)): { predecessors: [ { internalPassportId? | identifier?, trigger: preparation_for_reuse|preparation_for_repurposing|repurposing|remanufacturing } ] (≤10), noPredecessorReason? (only with an empty list, e.g. placed on the market before 18 Feb 2027) }. The server derives batteryStatus from the triggers and links your own predecessor passports back. Immutable after create. Rule violations return 422 with the rule code (duplicate_predecessor, predecessor_not_found, status_trigger_mismatch, …). - suspend — args: { id }. ⟨468 unchanged words⟩ ambiguous_serial if serial not unique — pass gtin. - capture_measurements — args: { id, measurements: [ { fieldKey, value, measuredAt (ISO 8601), externalId?, unit? } ] (≤500) }. WRITE, battery passports only, published only. Pushes over-life measurements from the customer's own equipment (e.g. a BMS reporting stateOfHealth, numberOfFullEquivalentChargingCycles; the Annex XIII point 4 use-data keys). Every measurement is stored; the newest per field becomes the passport's current value and sets dynamicDataAsOf. externalId makes a measurement idempotent. A value may be at most 16 KB serialised. batteryStatus is NOT a measurement (400 invalid_field_key). A key the Regulation keeps off this battery category returns 422 field_not_applicable (e.g. stateOfCertifiedEnergy on an LMT battery). Metered against the plan's monthly measurement allowance, not the daily write budget: paid plans keep counting past it at no c
Changed the definition of "tracepass_passports"
⟨585 unchanged words⟩ — args: { id, format? (svg|png), symbology? (qr|datamatrix) }. Read-only. symbology=datamatrix renders an ISO/IEC 16022 Data Matrix instead of a QR (EN 18220 permits both; same passport URL). - get_qr_by_serial — args: { serial, format? (svg|png), symbology? (qr|datamatrix), gtin? }. Read-only. Same as get_qr, addressed ⟨42 unchanged words⟩ args: { id, page?, limit? (≤100), at? (ISO 8601) }. Read-only. Returns a paginated list ofimmutabilitysnapshots for the passport (newest first).—A snapshot is written on publish and after every change to a non-draft passport (EN 18221 change archive); each carries id, version, reason (published|republished|manual
Changed the definition of "tracepass_passports"
⟨730 unchanged words⟩ hashValid. Counts 1 against the daily read budget. - get_condition_flags — args: { id }. Read-only. Returns the resolved condition profile Record<flagKey,{value,status,source}>. Condition flags are reviewer-approved yes/no facts gating conditional legal duties. Battery flags: hasBMS, rechargeable, externalStorageOnly, isStationaryBess. An approved flag makes specific fields required — a missing gated field is a hard publish block (conditional_missing). Counts 1 against the daily read budget. - get_condition_flags_by_serial — args: { serial, gtin? }. Read-only. Same as get_condition_flags, addressed by your own serial. 409 ambiguous_serial if serial not unique — pass gtin. - set_condition_flags — args: { id, flags: Record<flagKey, boolean|null> }. WRITE. Set or clear condition flags (null clears). Keys must be registered for the passport category (battery: hasBMS, rechargeable, externalStorageOnly, isStationaryBess). WARNING: approving a flag can make fields required and block publishing if those fields are empty — fix any gated fields before or immediately after setting the flag. Writes are approved + audited. Idempotency-Key supported. Counts 1 write. - set_condition_flags_by_serial — args: { serial, gtin?, flags }. WRITE. Same as set_condition_flags, addressed by your own serial. 409 ambiguous_serial if serial not unique — pass gtin.
Changed the definition of "tracepass_passport_parties" and "tracepass_passports"
⟨13 unchanged words⟩ producerResponsibilityOrg. Each party carries a legal name andideallyat least one identifier. Identifier rules (EN 18219 §6.2–6.5): avalidatedparty13-digitneeds at least one of `gln`, `legacyOperatorId`, or `operatorIdentifier`. If both `gln` and `operatorIdentifier` (scheme gln) are provided they must agree — a mismatch returns 400. An operatorIdentifier of scheme gln also fills the top-level `gln` field; facilityIdentifier never does. Typed identifiers (operatorIdentifier / facilityIdentifier) are not set by AI extraction or CSV import. operatorIdentifier schemes: • iso6523 — { scheme:"iso6523", icd:"<4 digits>", value } — ICD 0199 = LEI (ISO 17442), 0088 = GLN, 0060 = DUNS. • gln — { scheme:"gln", gln:"<13 digits>" } — also fills top-level `gln`. • did — { scheme:"did", did:"did:<method>:<id>" } — syntax-checked only (EN 18219 §6.4.2(b)). • doi — { scheme:"doi", doi:"10.<registrant>/<suffix>" } — doi:/https://doi.org/ prefix accepted and stripped. facilityIdentifier schemes: same four; the gln variant also accepts optional `extension` (
Changed the definition of "tracepass_passports"
⟨7 unchanged words⟩ and run lifecycle actions. IMPORTANT: `create` consumesaDPPslot on the account's planslots and IS BILLABLE.Creating a passport beyond the includedOver-quotaquotacreation incurs a per-passportoveragecharge;if over quotathe toolreturnssurfaces a 402-style message — only re-run with args.confirmOverage=true after the user explicitlyagrees to the charge.agrees. `archive` is IRREVERSIBLE (the public QR permanently 404s); prefer `suspend` when a change might be undone. IDENTIFIER SCHEMES (EN 18219): passports are identified by one of five schemes. Battery passports (Battery Regulation Art. 77(3)) accept ONLY gs1 and iso15459. • gs1 — { scheme:"gs1", gtin, serialNumber } — GS1 GTIN + serial; gtin is 8/12/13/14 digits, stored as GTIN-14. • iso15459 — { scheme:"iso15459", issuingAgencyCode, primaryId, serial? } — ISO/IEC 15459; the server derives raw (IAC + primaryId + serial). • iec61406 — { scheme:"iec61406", uri } — IEC 61406 Identification Link (https URI). Not valid for batteries. • did — { scheme:"did", did, method } — W3C DID Core. Not valid for batteries. • doi — { scheme:"doi", doi } — ISO 26324 DOI, stored as bare 10.<registrant>/<suffix>. Not valid for batteries. The legacy top-level gtin + serialNumber pair is still accepted as a deprecated alias for scheme:"gs1".
Changed the definition of "tracepass_passports"
⟨189 unchanged words⟩ 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 }. ⟨216 unchanged words⟩
Certificate changed, valid to 2026-12-18
Certificate recorded, valid to 2026-10-19
Authorization not required
First tool surface recorded: 6 tools (server version 1.7.4)
Showing the latest 14 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Machine-readable error code, when the API rejected the request.","type":"string"},"id":{"description":"The resource's ⟨33 unchanged words⟩ ,"type":"number"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable error or status detail, when present.","type":"string"},"page":{"description":"Current page ⟨45 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Machine-readable error code, when the API rejected the request.","type":"string"},"id":{"description":"The resource's ⟨33 unchanged words⟩ ,"type":"number"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable error or status detail, when present.","type":"string"},"page":{"description":"Current page ⟨45 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Machine-readable error code, when the API rejected the request.","type":"string"},"id":{"description":"The resource's ⟨33 unchanged words⟩ ,"type":"number"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable error or status detail, when present.","type":"string"},"page":{"description":"Current page ⟨45 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Machine-readable error code, when the API rejected the request.","type":"string"},"id":{"description":"The resource's ⟨33 unchanged words⟩ ,"type":"number"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable error or status detail, when present.","type":"string"},"page":{"description":"Current page ⟨45 unchanged words⟩
TracePass DPP scope checker — Check what EU law says for a product type matching the facts given: whether it needs a Digital Product Passport, from when, at which level, under which act and article, and the duties of each role. Also read the company's catalogue-wide scope report and trigger a catalogue refresh run. HARD RULES — always apply these to scope answers: - Answers state what the law says for product types matching the given facts. This is not legal advice; never write 'you must' — use product-type phrasing ('LMT batteries need a passport from 18 February 2027, Battery Regulation Art. 77(1)'). - Cite the article…
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false}
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false}
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
⟨80 unchanged words⟩ for update_by_serial.","type":"string"},"source":{"description":"Where the value came from: \"manual\" (default — the user's statement) or \"ai_suggested\" (you found it; it goes to human review).","enum":["manual","ai_suggested"],"type":"string"},"value":{"description":"The new value for ⟨16 unchanged words⟩
⟨24 unchanged words⟩ get_condition_flags_by_serial | get_qr | get_qr_by_serial | list_snapshots |get_snapshot.get_snapshot | list_measurements(_by_serial) | latest_measurements(_by_serial). Writes: set_condition_flags | set_condition_flags_by_serial | capture_measurements(_by_serial) | create (BILLABLE). Lifecycle: suspend (reversible) ⟨14 unchanged words⟩ get_condition_flags","get_condition_flags_by_serial","set_condition_flags","set_condition_flags_by_serial","capture_measurements","capture_measurements_by_serial","list_measurements","list_measurements_by_serial","latest_measurements","latest_measurements_by_serial","create","suspend","suspend_by_serial","archive"," ⟨60 unchanged words⟩ to create.","type":"boolean"},"cursor":{"description":"list_measurements(_by_serial): nextCursor from the previous page.","type":"string"},"fieldKey":{"description":"list_measurements(_by_serial): only this field key.","type":"string"},"flags":{"additionalProperties":{"anyOf":[{" ⟨24 unchanged words⟩ get_qr/get_qr_by_serial: svg|png.","type":"string"},"from":{"description":"list_measurements(_by_serial): measuredAt from (ISO 8601).","type":"string"},"gtin":{"description":"For create (legacy) ⟨117 unchanged words⟩ max 100.","type":"number"},"lineage":{"description":"create, battery only: link a second-life battery's new passport to the original passport(s) (Art. 77(7)). See the create action.","properties":{"noPredecessorReason":{"maxLength":500,"type":"string"},"predecessors":{"items":{"properties":{"identifier":{"maxLength":2000,"type":"string"},"internalPassportId":{"type":"string"},"trigger":{"enum":["preparation_for_reuse","preparation_for_repurposing","repurposing","remanufacturing"],"type":"string"}},"required":["trigger"],"type":"object"},"maxItems":10,"type":"array"}},"required":["predecessors"],"type":"object"},"measurements":{"description":"capture_measurements(_by_serial): [{ fieldKey, value, measuredAt, externalId?, unit? }], max 500.","items":{"properties":{"externalId":{"type":"string"},"fieldKey":{"minLength":1,"type":"string"},"measuredAt":{"minLength":1,"type":"string"},"unit":{"type":"string"},"value":{}},"required":["fieldKey","value","measuredAt"],"type":"object"},"type":"array"},"page":{"description":"Page number for list ⟨70 unchanged words⟩ description":"get_qr/get_qr_by_serial: qr (default) | datamatrix.","type":"string"},"to":{"description":"list_measurements(_by_serial): measuredAt to (ISO 8601).","type":"string"}},"type": ⟨5 unchanged words⟩
⟨86 unchanged words⟩ each action above).","properties":{"at":{"description":"list_snapshots: ISO 8601 instant — return the snapshot valid then instead of the list.","type":"string"},"confirmOverage":{"description":"Set true to accept ⟨239 unchanged words⟩ {"description":"Filter list by status: draft|in_review|approved|published|suspended|expired|archived.","type":"string"},"symbology":{"description":"get_qr/get_qr_by_serial: qr (default) | datamatrix.","type":"string"}},"type": ⟨5 unchanged words⟩
⟨36 unchanged words⟩ ,"properties":{"country":{"description":"PartyISO 3166-1 alpha-2 country code (set, optional).","type":"string"},"glnfacilityIdentifier":{"additionalProperties":{},"description":"GS1StructuredGlobalfacilityLocationidentifierNumberperforEN 18219 §6.2–6.5. Same four schemes as operatorIdentifier; thepartygln variant also accepts optional `extension` (GS1 SGLN sub-location). Never fills the top-level gln field. Not set by AI extraction.","propertyNames":{"type":"string"},"type":"object"},"gln":{"description":"GS1optionalGlobal Location Number (13 digits). Strongly recommended for multi-role disambiguation.","type":"string"},"id":{ ⟨6 unchanged words⟩ :"string"},"legacyOperatorId":{"description":"Your internal operator id forFree-textthefallbackpartyidentifier (setVAT,optionalEORI, supplier code). Required when gln and operatorIdentifier are both absent.","type":"string"},"legalName":{ ⟨5 unchanged words⟩ for set.","type":"string"},"operatorIdentifier":{"additionalProperties":{},"description":"Structured operator identifier per EN 18219 §6.2–6.5. Must have `scheme` plus scheme fields. Schemes: iso6523 {icd:\"<4 digits>\", value} | gln {gln:\"<13 digits>\"} | did {did:\"did:<method>:<id>\"} | doi {doi:\"10.<registrant>/<suffix>\"}. scheme gln also fills the top-level gln field; they must match if both are set (400 otherwise). Not set by AI extraction.","propertyNames":{"type":"string"},"type":"object"},"role":{"description":"Economic-operator role, e.g.: manufacturer | importer | authorisedRepresentative | distributor |authorised_representativerecycler | producerResponsibilityOrg (required).","type":"string"}} ⟨6 unchanged words⟩
⟨155 unchanged words⟩ • doi — { scheme:"doi", doi, granularity:"model"|"batch"|"item" } — ISO 26324 DOI, stored as bare10.<registrant>/<suffix>.10.<registrant>/<suffix> (any https://doi.org/ or doi: prefix stripped on input; resolves as https://doi.org/<doi>); granularity REQUIRED per EN 18219 §5.6.2(b). Not valid for batteries. The legacy top-level gtin ⟨432 unchanged words⟩ or use get_qr by id) to resolve exactly. - list_snapshots — args: { id, page?, limit? (≤100) }. Read-only. Returns a paginated list of immutability snapshots for the passport (newest first) — each carries id, version, reason (published|republished|manual), snapshotAt, contentHash, hashValid (re-verified on every read), restorable, fieldCount. Passports published before the snapshot feature existed return an empty list gracefully. Counts 1 against the daily read budget. - get_snapshot — args: { id, snapshotId }. Read-only. Returns the full archival record of one snapshot: the complete JSON-LD the passport asserted at that time, plus hash and hashValid. Counts 1 against the daily read budget.
⟨16 unchanged words⟩ get_by_serial | compliance | registry_readiness | get_qr |get_qr_by_serial.get_qr_by_serial | list_snapshots | get_snapshot. Writes (BILLABLE): create. Lifecycle: suspend (reversible ⟨17 unchanged words⟩ ,"archive","archive_by_serial","get_qr","get_qr_by_serial","list_snapshots","get_snapshot"],"type":"string"},"args":{ ⟨113 unchanged words⟩ did {did, method} | doi {doi, granularity} (granularity: \"model\"|\"batch\"|\"item\" REQUIRED per EN 18219 §5.6.2(b)). Battery passports: gs1 and iso15459 only.", ⟨80 unchanged words⟩ new passport (create, legacy gs1 path).","type":"string"},"snapshotId":{"description":"Snapshot id. Required for get_snapshot.","type":"string"},"status":{ ⟨14 unchanged words⟩
⟨17 unchanged words⟩ | compliance | registry_readiness | get_qr | get_qr_by_serial.Lifecycle: createWrites (BILLABLE):|create. Lifecycle: suspend (reversible) | archive (IRREVERSIBLE), each ⟨38 unchanged words⟩ ":{"description":"Set true to acceptaper-passport overagechargecharges whencreate isover the plan quota (402). Applies to create.","type":"boolean"},"format":{ ⟨6 unchanged words⟩ :"string"},"gtin":{"description":"GTINFor create (legacy): GS1 GTIN. Also used as a disambiguator for *_by_serial actions when a serial isn't uniqueacross GTINs(else 409 ambiguous_serial).","type":"string"},"id":{"description":"Passport id. Required forget/compliance/create-result/suspend/archive/get_qrget/compliance/suspend/archive/get_qr (the by-id actions).","type":"string"},"identifier":{"additionalProperties":{},"description":"EN 18219 scheme-tagged identifier for create. Must have `scheme` plus scheme-specific fields. Schemes: gs1 {gtin, serialNumber} | iso15459 {issuingAgencyCode, primaryId, serial?} | iec61406 {uri} | did {did, method} | doi {doi}. Battery passports: gs1 and iso15459 only.","propertyNames":{"type":"string"},"type":"object"},"lang":{"description":"Resolve field values to ⟨65 unchanged words⟩ ":{"description":"Serial for the newpassport.passportRequired(create,forlegacycreate.gs1 path).","type":"string"},"status":{ ⟨14 unchanged words⟩