# GAP (GX AI Protocol) > A wire protocol for delivering corporate ESG data as raw activity data, signed at source, > straight to an investor's AI agent over MCP and REST — with no PDF disclosure report in between. GAP does not carry emissions. It carries activity data, and the evidence that it is genuine. Emissions are activity data times an emission factor, and choosing the factor is a judgement that varies by regime, standard and year. GAP separates that choice out to the receiving side, and asks the reporting company for nothing but what it measured. ## Status - Version: `gap/0.1` (wire version). Status: **Draft**. - License: **undetermined**. This specification does not currently grant or guarantee the right to implement it. - Normative text: Japanese. The English pages are informative translations. - This site is `noindex` while the specification is a draft. It is the distribution point referenced by GAP nodes' `/.well-known/gap.json`, not a search-acquisition site. ## Why a wire protocol rather than better parsing PDF exists, by the stated purpose in ISO 32000-2:2020, for "preservation of document fidelity independent of the device, platform and software". It keeps position; it does not carry what that position means. Measured downstream: - Table detection F1 across 400 financial documents: pdfplumber 0.06, Camelot 0.10, Tabula 0.24, TATR 0.79 — while **body-text extraction on the same corpus reaches 0.95–0.99** (Adhikari & Agarwal 2024, arXiv:2410.09871) - Relating a KPI to its value across 81 hand-annotated 10-K filings: best model Relation F1 22.68% (Deußer et al., ICMLA 2022, arXiv:2210.09163) - Extraction from the 2022 ESG reports of 166 HKEX-listed companies: 76.9% accurate with GPT-4 + RAG (Deng et al. 2023, arXiv:2312.17264) - Time to transcribe one figure, per a data vendor's own account: ~20 min from HTML, ~30 min from PDF, ~50 min from an image; 1–2 seconds from XBRL (XBRL US ESG Working Group white paper) The failure has a shape: prose extracts fine, tables collapse. Nothing in the format says a number is part of a table. GAP therefore does not try to parse documents better — it signs one layer earlier, before anything is flattened into a document. Citations with the extent to which each was checked: https://gxai.dev/references/evidence-sources.json ## What GAP closes, and what it does not Of the eight kinds of distortion the phrase "greenwashing" collapses together, GAP v0.1 reaches three — and in every case only along one path: **a record already committed to the chain being quietly rewritten afterwards**. Two more are partial, and three lie outside what any wire protocol can reach. - **Loss of information** (source records, computation, correction history vanish into a PDF) — reaches it, narrowly. Signed at source, provenance kept by the append-only `payload_hash` / `prev_hash` chain. What this detects is a broken link where a committed record was later rewritten — **not evidence that was never committed, nor a chain that simply stops** - **Numerical embellishment** (computing emissions inappropriately) — reaches it, narrowly. The Zero-Embellishment Constraint plus refusing to return a figure when the factor is ambiguous closes at least that one path. Putting a false value into a permitted field and calling it measured is not prevented - **Methodological embellishment** (changing base year, factor or method) — reaches it, narrowly. Rewriting past values tends to surface as a broken link, but **adding the change as a legitimate new record contradicts nothing in the chain rules**, and GAP has no provision for judging whether the change was sound - **Boundary embellishment** (dropping subsidiaries or Scope 3 categories) — partial. `list_sources` returns registered sources only, so **an entity never registered does not appear in that query either**. Closing this requires reconciliation against an external legal-entity identifier system such as LEI - **Selective disclosure** — partial. An `engagement` source is visible as existing even without a grant, but nothing enforces which indicators must be published, or how often - **Falsehood**, **temporal embellishment**, **narrative embellishment** — structurally out of reach. Falsehood arises when the key holder signs false activity data or the instrument is rigged; the other two are matters of how the accompanying prose is written A signature attests that a value signed with a registered key was not altered afterwards. It does not attest that the value reflects reality. Not having been tampered with, and having been measured correctly, are different questions. Instrument installation and calibration remain the work of assurance and audit. Following from that, the most uncomfortable possibility for this protocol: where the institutions for correcting a wrong figure remain thin, **a figure that is wrong but demonstrably untampered can end up being trusted more, precisely because it is untampered**. Above the tamper-detection layer, a separate layer is still needed — what happens when the value itself turns out to be wrong. (A concern drawn from the evidence, not a measured result.) ## What this is, and is not GAP is a **worked example, not a solution**. It was written to show what closes and what remains when parts that already work in adjacent domains — stable identifiers (LEI), live API access (SEC EDGAR), standard tagging (XBRL, GRI Taxonomy) — are assembled in a non-financial reporting context. It has no track record as an industry standard and has not been independently verified. Financial disclosure already has a working precedent: XBRL US operates an official MCP server over SEC, FDIC and FERC filing data. That gap is itself the measure of what non-financial reporting has yet to catch up on. Two seams remain open, and GAP closes neither: - **The standards seam** — between product/activity-level data exchange specifications and company-level disclosure regimes. GAP states explicitly that it holds no mapping to CSRD / SSBJ / GHG Protocol line items; the mapping is the recipient's responsibility. - **The institutional seam** — what is accepted by default. Where self-declared narrative is accepted by default and verifiability is structurally required of only a small share of items, providing an evidence-native path as a component changes nothing on its own. Someone has to make it the default path. ## Documents - [Specification v0.1 (Japanese, normative)](https://gxai.dev/spec/gap/v0.1) - [Specification v0.1 (English, informative)](https://gxai.dev/en/spec/gap/v0.1) - [Full specification text](https://gxai.dev/llms-full.txt) - [Overview (Japanese)](https://gxai.dev/) · [Overview (English)](https://gxai.dev/en/) ## Machine-readable schemas Each schema's `$id` is its URL below, and `$ref` resolves against the same origin. - [reading-payload.schema.json](https://gxai.dev/spec/gap/v0.1/reading-payload.schema.json) — the signed unit: one measurement period of raw activity data - [ingest-request.schema.json](https://gxai.dev/spec/gap/v0.1/ingest-request.schema.json) — batch envelope from a primary source to a node - [source.schema.json](https://gxai.dev/spec/gap/v0.1/source.schema.json) — public descriptor of a data source - [emission-factor.schema.json](https://gxai.dev/spec/gap/v0.1/emission-factor.schema.json) — a citable factor, kept outside the signed stream - [compute-result.schema.json](https://gxai.dev/spec/gap/v0.1/compute-result.schema.json) — shape of a computed figure - [test-vectors.json](https://gxai.dev/spec/gap/v0.1/test-vectors.json) — canonicalization, hashing, chaining and signature vectors - [manifest.json](https://gxai.dev/spec/gap/v0.1/manifest.json) — provenance of this distribution and SHA-256 of each file ## The three layers 1. **Semantic** — the reading payload IS the byte string that gets signed. One timestamp format only (`YYYY-MM-DDTHH:MM:SSZ`). `quality` is mandatory. `seq` increments from 1 per source. Zero-Embellishment Constraint: a payload whose `metric` or `meta` keys contain `co2`, `co2e`, `ghg`, `emission`, `scope1|2|3`, `tco2` or `carbon_footprint` must be rejected — GAP carries activity data only. 2. **Query and execution (MCP native)** — six read-only, idempotent tools. Responses cap at 1000 points and return `too_many_points` rather than silently truncating. `compute_emissions` returns no figure when the factor is not uniquely determined (`factor_ambiguous`). 3. **Trust** — canonicalization is an RFC 8785 subset (sorted keys, no whitespace); hash SHA-256; signature Ed25519; chain `prev_hash` plus monotonic `seq` per source. A node must re-verify immediately before computing rather than trusting an ingest-time flag, returning `provenance_compromised` on mismatch. ## MCP tools `list_sources`, `get_activity_data`, `list_emission_factors`, `compute_emissions`, `verify_provenance`, `detect_anomalies` ## Node discovery A GAP node publishes `GET /.well-known/gap.json` without authentication, declaring its capabilities, endpoints, tools and the schema location. That document points back to this site's specification URL. ## Reference implementation - Lives in a **private repository** (`kokubee/gxceed`) and is not publicly accessible at this time. Do not cite it as a public artifact. - `GAP_MCP_ENABLED` and `GAP_INGEST_ENABLED` both default to `false` (fail-closed). - Emission factors whose `factor_id` begins with `demo-` are proof-of-concept placeholders, not published values. ## Deliberately out of scope in v0.1 Zero-knowledge proofs and differential privacy; the key rotation procedure; cross-verification between nodes; Scope 3 / supply-chain chaining; streaming subscriptions (polling only); mapping to CSRD / SSBJ / GHG Protocol line items.