DPP MCP

Free, no account

Many claim to be able to generate a DPP. The question is whether it holds.

One HTTP request measures any Digital Product Passport against the six published EN standards — yours, a supplier's, a competitor's. It fetches the passport, negotiates content the way EN 18216 requires, and scores the data it gets back.

Example

A published passport, measured

Lindex publishes a passport for this jacket. Below is what the validator returned for it, in full.

# Measured 7 September 2026
curl "https://dppagent.com/api/v1/validate?url=https://lindex.dpp.dppagent.com/01/07314781685466/21/003"
B Waterproof shell jacket  ·  Lindex  ·  GTIN 07314781685466
88%
Overall
100%
System conformance
100%
Passport header, 7 of 7
75%
Content, 12 of 16 fields

Standards

  • PASS EN 18219 §5.2 URL is a parseable GS1 Digital Link — valid path, and the GTIN satisfies its check digit.
  • PASS EN 18216 §5 Machine-readable JSON via content negotiation — server returned JSON on Accept: application/json.
  • PASS EN 18220 §5.2 The data carrier target resolves to a passport — resolver responded 2xx.
  • PASS EN 18219 §5.2 · linkset ?linkType=all returns a GS1 linkset — six link types served, including gs1:dpp and gs1:sustainabilityInfo.
  • PASS EN 18221 §4.5 A back-up host is advertised — Link rel="backup" present, so the passport outlives its publisher.
  • PASS EN 18223 §4.1.2.1 Every mandatory header attribute is present — granularity, schema version, last updated, economic operator.
  • PASS EN 18222 §4.1 The three mandatory Life Cycle API methods answer — ReadDPPById, ReadDPPByProductId and ReadDPPIdsByProductIds at /api/v1/.
  • PASS EN 18246 §4.3 Public passport data needs no login — served to an anonymous request with no credentials.
  • PASS EN 18246 §5.4.2 Readable on any consumer device — served as text/html, no app to install.
  • PASS EN 18246 §5.1.2 / §5.1.5 Nobody is tracked for reading it — no third-party tracking hosts on the served page.

Fields present

  • Unique Product Identifier
  • GTIN
  • Product Name
  • Economic Operator Name
  • Economic Operator Country
  • Economic Operator Identifier
  • Economic Operator Role
  • Manufacturer Name
  • Manufacturer Identifier
  • Country of Manufacture
  • Material Composition
  • Substances of Concern

Missing

  • Commodity Code (TARIC)
  • Concentration Levels
  • Substance Location
  • Care Label Symbols

Four fields, and the same four turn up on most textile catalogues.

Recommendations

  • 1 Add the commodity code. A shell jacket sits at CN heading 6201. The code is a classification anyone can check against the tariff rather than a claim, so it is the cheapest of the four to fill.
  • 2 Complete the substances declaration. The passport declares no substances of concern, which is an answer, but concentration and location are separate fields and both are blank. A declaration of none should say none to all three rather than leaving two empty.
  • 3 Add ISO 3758 care symbols. The passport carries care instructions as sentences — machine wash 30°, dry in a drying cabinet at low temperature. The symbol set is a separate field, and it is the one a machine and a non-Swedish reader can both use.
  • 4 Nothing to do on the system side. All ten clause checks pass and all seven header attributes are present. That half is the platform's responsibility and it is done. The four gaps above are catalogue data.

Measured 7 September 2026 and written into this page as a snapshot. Run it again with the field below and compare.

Your turn

Validate your own

Paste any passport URL. No account, and it works on passports published by anyone — the validator has no idea whose platform it is looking at.

Available now

The endpoint

GET https://dppagent.com/api/v1/validate?url=<passport-url> returns a grade, the clause checks, the passport-header score under EN 18223 Table 1, and how many mandatory ESPR fields are populated. CORS is open, so a browser can call it directly.

Without a key

The grade, every clause check, the counts, and the three most important gaps named the way a person would say them — "Commodity Code (TARIC)", not an internal key. Sixty calls an hour.

With a key

Every field we score against, each with its citation, the header broken out attribute by attribute, and coverage across more than one passport. A free account issues a key.

Why the full list needs a key

The full list names every field we score against and the clause behind each one. That is the field specification, and it took months of reading standards to put together. A brand checking its own passport needs to know it is missing four fields and which three matter. The list with a citation per field is what you would need to build your own checker, and that is the part behind a key.

Not open yet

The same tools, inside your assistant

Filling in a passport means finding forty or so facts scattered across a PIM, a supplier's spreadsheet and an emailed certificate. That is searching, and people already do their searching in Claude, ChatGPT and Cursor.

An MCP server will put these tools there: read the catalogue, propose mappings with a visible source, say what is still missing. Anything that would be published goes back to a person first. It is not accepting connections yet.

What it will do, and how to hear when it opens →

Boundaries

What this is not

  • —Not a schema library. The schemas live in DPP Agent, attached to real rows.
  • —Not a second validator. There is one. It runs on the platform that holds the data, and this domain is a shorter way to reach it.
  • —Not a way around the admin. Anything that changes what the world sees passes a person in DPP Agent.
  • —Not a customer list. The passport above is measured, not endorsed, and it is measured because it is published.