The problem
A calibration certificate is a structured document that is almost always exchanged as an unstructured one. Values, units, uncertainties and the identity of the reference standard are printed onto a PDF, scanned at the receiving end, and typed back into a database by hand. The traceability chain — the thing the certificate exists to prove — is reconstructed from human-readable references, one hop at a time.
MTPROTO defines a small, stable record that carries the same information in machine-readable form, together with the cryptographic material needed to verify who issued it. It does not replace accreditation, reporting templates or national regulation; it replaces retyping.
At a glance
Self-describing quantities
Every value carries its unit, its standard uncertainty, the coverage factor and the distribution assumed. Nothing is implied by column position.
Explicit traceability
A record names the reference standard used and the identifier of that standard's own certificate, so a chain can be walked automatically to its national anchor.
Transport-agnostic
Records are files. Move them over HTTPS, a message bus, a USB stick or an email attachment — the format makes no assumption about how it travels.
Verifiable
Detached Ed25519 signatures over a canonical serialisation, so a record stays verifiable after it has been reformatted, re-indented or round-tripped.
Small surface
Nine required fields. The whole specification is roughly thirty pages, and a conforming validator is a weekend of work.
Backward compatible
Unknown members are preserved, not rejected. A 1.0 consumer reads a 1.2 record and ignores what it does not understand.
A record
The example below is a complete, conforming MTPROTO 1.2 record for a single-point
gauge block calibration. The traceable_to member is what turns a pile of
certificates into a chain.
{
"mtproto": "1.2",
"record_id": "urn:mtproto:9f2a1c84-5d10-4b6e-a7f3-0c2e11d84b90",
"issued": "2026-03-02T09:41:00Z",
"issuer": {
"name": "Calibration laboratory (issuer name)",
"key_id": "mtp:ed25519:8Qf3…c1a7"
},
"item": {
"description": "Gauge block, steel, nominal 25 mm",
"identifier": "GB-25-004182"
},
"conditions": {
"temperature": { "value": 20.1, "unit": "Cel", "u": 0.15, "k": 2 },
"humidity": { "value": 44.0, "unit": "%", "u": 3.0, "k": 2 }
},
"results": [
{
"quantity": "length.deviation",
"value": -0.12,
"unit": "um",
"u": 0.045,
"k": 2,
"distribution": "normal",
"method": "mechanical comparison"
}
],
"traceable_to": [
{
"standard": "Gauge block set, reference grade K",
"certificate": "urn:mtproto:4c81b0e2-77aa-41d9-9f0c-6b3d2a5e7181"
}
],
"valid_until": "2027-03-02"
}
Units. MTPROTO uses UCUM codes rather than free text, so
um, Cel and N.m mean exactly one thing to a
parser. Section 4 of the specification covers the small number of cases where a
UCUM code alone is not sufficient.
Tooling
The working group maintains a reference validator and keeps the schema files under the same versioning policy as the specification text. Everything below is published under the MIT licence; the specification text itself is CC BY 4.0.
| Artefact | What it does | Status |
|---|---|---|
mtp-validate |
Reference validator. Checks schema conformance, canonical form and signatures. | 1.2.0 |
mtp-core |
Reading, writing and canonicalisation library. | 1.2.1 |
mtp-chain |
Resolves and walks a traceability chain from a starting record. | 0.6.0 (preview) |
mtproto-1.2.schema.json |
JSON Schema for the 1.2 record. Normative for the JSON serialisation. | published |
Status
Version 1.2 is the current stable release and the one new implementations should target. Work on 1.3 is open: the two active items are a compact profile for streaming instrument data and a resolution mechanism for chains that cross organisational boundaries.
The working group is open. Discussion happens on a public mailing list, and the review period for any normative change is at least sixty days — see Contact.