addrbookFor publishers
← The evidence ledger

Evidence row 523418

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 014e96c0-bfe1-40ac-b5c4-01d36e66ba36
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
ed026dd4a33df4e7dcb65f94f6e977e9b19251d7729ea1a8204422060e3da74a
Leaf
0x9d2b575487d288683652f0f923609a988284c7e885f72e4ff8140fefa2f6a26e

What was observed

{
  "count": 12,
  "tools": [
    {
      "description": "Turn activity data into greenhouse-gas emissions: emissions = activity × factor. Give an amount + unit and a factor key; the unit engine converts to the factor basis (MWh→kWh, tonne→kg, gallon→litre, mile→km) and returns the emissions with the working, the GHG Protocol scope, and the source. Use search_factors / lookup_factor to find the factor key.",
      "inputSchema": {
        "properties": {
          "activity": {
            "description": "{ \"value\": <number>, \"unit\": \"<unit e.g. kWh, MWh, litres, tonne, km>\" }.",
            "type": "object"
          },
          "factor_key": {
            "description": "Canonical emission-factor key.",
            "type": "string"
          }
        },
        "required": [
          "activity",
          "factor_key"
        ],
        "type": "object"
      },
      "name": "calculate_activity"
    },
    {
      "description": "Business travel emissions (Scope 3 Cat 6), distance method: emissions = km × passengers × factor. Air factors come in with_rf / without_rf (radiative forcing) variants. Find factors via search_factors (section \"business_travel\").",
      "inputSchema": {
        "properties": {
          "distance": {
            "description": "{ \"value\": <number>, \"unit\": \"km|mi\" }.",
            "type": "object"
          },
          "factor_key": {
            "description": "Per-passenger-km travel factor key.",
            "type": "string"
          },
          "passengers": {
            "description": "Optional, defaults to 1.",
            "type": "number"
          }
        },
        "required": [
          "distance",
          "factor_key"
        ],
        "type": "object"
      },
      "name": "calculate_business_travel"
    },
    {
      "description": "GHG Protocol Scope 2 for purchased electricity, both methods. Always returns location-based (grid-average) emissions; also returns market-based when you supply a contractual supplier_factor (e.g. a green tariff / REC = 0) or a market_factor_key (residual mix). Find grid keys via search_factors (section \"grid\").",
      "inputSchema": {
        "properties": {
          "consumption": {
            "description": "{ \"value\": <number>, \"unit\": \"kWh|MWh|GWh\" }.",
            "type": "object"
          },
          "location_factor_key": {
            "description": "Grid-average factor key, e.g. grid.gbr.electricity.location_based.",
            "type": "string"
          },
          "market_factor_key": {
            "description": "Optional: residual-mix / supplier grid factor key.",
            "type": "string"
          },
          "supplier_factor": {
            "description": "Optional contractual factor { value, unit } (wins over market_factor_key).",
            "type": "object"
          }
        },
        "required": [
          "consumption",
          "location_factor_key"
        ],
        "type": "object"
      },
      "name": "calculate_electricity"
    },
    {
      "description": "Whole-life embodied carbon for materials, per EN 15978. Give a material key + quantity (+ optional boundary A1-A3 / A1-A4 / A1-A5 / A1-C); it assembles the declared lifecycle modules (A1-A3, B, C1-C4, D) into stages, totals the boundary, reports module D separately, and flags any missing stage as not-assessed (never zero). Find material keys via search_factors (section \"materials\").",
      "inputSchema": {
        "properties": {
          "materials": {
            "description": "Each: { material_key, quantity:{value,unit e.g. m3/kg/tonne/m2}, boundary? }.",
            "items": {
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "materials"
        ],
        "type": "object"
      },
      "name": "calculate_embodied"
    },
    {
      "description": "Freight & logistics emissions (Scope 3 Cat 4 & 9), GLEC framework. THE FACTOR'S DENOMINATOR PICKS THE METHOD — check the factor's unit before choosing the input. Per tonne-km: emissions = tonnes × km × factor, send \"mass\". Per TEU-km (the sea-container family, e.g. freight_detailed.sea.container.trans_suez.dry): emissions = TEU × km × factor, send \"teu\" — a TEU is a twenty-foot container slot, not a mass, and a forty-foot box is 2 TEU. Sending mass against a per-TEU-km factor is refused (422), not converted. Find mode factors via search_factors (section \"freight\" or \"freight_detailed\"), e.g. freight.road_hgv.tonne_km.",
      "inputSchema": {
        "properties": {
          "distance": {
            "description": "{ \"value\": <number>, \"unit\": \"km|mi|nmi\" }.",
            "type": "object"
          },
          "factor_key": {
            "description": "Freight factor key. Its unit says whether to send mass (per tonne-km) or teu (per TEU-km).",
            "type": "string"
          },
          "mass": {
            "description": "{ \"value\": <number>, \"unit\": \"tonne|kg|lb\" }. Required for a per-tonne-km factor; omit for a per-TEU-km one.",
            "type": "object"
          },
          "teu": {
            "description": "{ \"value\": <number> } — container slots. Required for a per-TEU-km factor; omit for a per-tonne-km one.",
            "type": "object"
          }
        },
        "required": [
          "distance",
          "factor_key"
        ],
        "type": "object"
      },
      "name": "calculate_freight"
    },
    {
      "description": "Compute PCAF Part A financed emissions for a portfolio. Returns each holding's attribution factor and financed emissions, the portfolio total, the outstanding-weighted data-quality score, and the audit trail (formula + PCAF source).",
      "inputSchema": {
        "properties": {
          "asset_class": {
            "type": "string"
          },
          "holdings": {
            "description": "Each: { outstanding_amount, denominator:{type:\"evic\"|\"equity_plus_debt\", value}, company_emissions:{value,unit?} OR estimate_from_spend:{amount_usd, sector_key}, data_quality_score? }.",
            "items": {
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "holdings"
        ],
        "type": "object"
      },
      "name": "calculate_pcaf"
    },
    {
      "description": "Spend-based (EEIO) Scope 3 screening: emissions = spend × economic-intensity factor. Spend must be in the factor's own currency/year (no FX). Find sector factors via search_factors (section \"spend_based\"), e.g. spend_based.us.naics6.541511.custom_computer_programming_services.",
      "inputSchema": {
        "properties": {
          "factor_key": {
            "description": "Spend-based (EEIO) sector factor key.",
            "type": "string"
          },
          "spend": {
            "description": "{ \"value\": <number>, \"currency\": \"USD|GBP|EUR|SGD\" }.",
            "type": "object"
          }
        },
        "required": [
          "spend",
          "factor_key"
        ],
        "type": "object"
      },
      "name": "calculate_spend"
    },
    {
      "description": "Ask why a factor is NOT in the corpus. The reasoned counterpart to coverage: where a country reports zero rows for an inventory family, this says whether that is the world's limit or our backlog. Five classifications: \"structural\" (no publisher issues this anywhere — stop looking, and do not silently substitute another country), \"not_yet_sourced\" (a publisher exists and is named; it is our backlog), \"refused\" (we found it and declined — the reason is stated), \"held_not_counted\" (we DO hold it — see we_hold for the key), \"coupled\" (empty only because another family is empty). Each record names the publisher checked, the route tried, a confidence and a review date, and reports stale:true once past review. These are authored judgements about what the world publishes, not values derived from our data. Call this before concluding that a gap is permanent, and before telling a user to look elsewhere.",
      "inputSchema": {
        "properties": {
          "classification": {
            "description": "Filter: structural | not_yet_sourced | refused | held_not_counted | coupled.",
            "type": "string"
          },
          "country": {
            "description": "ISO-3166 alpha-3 code, e.g. \"can\".",
            "type": "string"
          },
          "family": {
            "description": "Inventory family, e.g. \"water\", \"wtt\", \"travel\", \"spend\", \"heat\".",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "explain_absence"
    },
    {
      "description": "Look up a single greenhouse-gas emission factor by its canonical key. Returns the value plus an audit envelope: provenance (publisher, exact source reference, retrieval date, LICENCE and whether it may be redistributed, with the attribution the licence requires) and verification (whether the per-gas components sum to the headline, the GWP set, and the source note stating what the publisher did NOT provide). If the key does not exist you get candidate keys back rather than a dead end. Use search_factors first if you do not know the key.",
      "inputSchema": {
        "properties": {
          "key": {
            "description": "Canonical factor key, e.g. \"grid.gbr.electricity.location_based\".",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "name": "lookup_factor"
    },
    {
      "description": "Look up SEVERAL emission factors by key in one call, each with the same audit envelope lookup_factor returns — provenance (publisher, exact source reference, retrieval date, licence, redistribution) and verification. Use this instead of calling lookup_factor in a loop: a portfolio or a multi-country comparison is one call, not one per factor. Keys that do not exist come back in `not_found` rather than failing the batch.",
      "inputSchema": {
        "properties": {
          "keys": {
            "description": "Canonical factor keys, e.g. [\"grid.gbr.electricity.location_based\", \"grid.fra.electricity.location_based\"]. Maximum 25 per call.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "keys"
        ],
        "type": "object"
      },
      "name": "lookup_factors"
    },
    {
      "description": "Find the best emission-factor key(s) for a plain-language description — the hardest step is picking the right key out of ~16,000. Returns ranked matches, each carrying the key, value, unit and a confidence score; feed the chosen key to a calculate_* tool or lookup_factor. Prefer this over guessing a key. PUT THE COUNTRY IN THE DESCRIPTION. Geography is read from the description text itself, not from a separate field — \"diesel per litre\" and \"diesel per litre France\" resolve differently, and omitting the country will quietly return a factor from somewhere else marked \"geo_match\":\"proxy\". ACT ON THE LABEL. Every candidate carries label: \"accept\" or \"review\", plus \"why\". \"accept\" means confidence >= 0.85 and no demotion applied — right about nine times in ten. \"review\" means the answer may be usable but something is off (low confidence, only one term matched, a proxy country, or a gate demoted it); confirm it before adopting the number rather than using it silently. Roughly half of CORRECT answers are also flagged \"review\" — that is the intended trade, so treat \"review\" as \"check this\", not \"discard this\". A MISS MAY EXPLAIN ITSELF. When nothing matches, or the only matches are from the wrong country, the response may carry an \"absence\" object saying WHY. classification \"structural\" means no publisher issues this anywhere — STOP, do not retry with reworded queries and do not substitute a different country without saying so. \"not_yet_sourced\" means a publisher exists and we have not ingested it (the publisher is named). \"refused\" means we found the data and declined it, with the reason. \"coupled\" means this reads empty only because a related family is empty. Use explain_absence to ask the same question directly.",
      "inputSchema": {
        "properties": {
          "description": {
            "description": "What you need a factor for, INCLUDING the country if it matters, e.g. \"UK grid electricity\", \"diesel per litre France\", \"hotel stay Japan\". Geography is parsed from this string.",
            "type": "string"
          },
          "limit": {
            "description": "Optional, default 5.",
            "type": "number"
          },
          "section": {
            "description": "Optional section filter, e.g. \"fuels\", \"grid\", \"freight\".",
            "type": "string"
          }
        },
        "required": [
          "description"
        ],
        "type": "object"
      },
      "name": "resolve_factor"
    },
    {
      "description": "Find emission factors by section, key prefix, or free text. Returns each match with its key, name, section, VALUE, unit and gas — enough to choose between them or read a few numbers without a second call. For one factor's full audit envelope (publisher, exact source reference, retrieval date, licence, verification) call lookup_factor; for several, call lookup_factors.",
      "inputSchema": {
        "properties": {
          "key_prefix": {
            "description": "Restrict to keys starting with this prefix.",
            "type": "string"
          },
          "limit": {
            "description": "Max results (default 20).",
            "type": "number"
          },
          "query": {
            "description": "Free-text search over factor names/keys.",
            "type": "string"
          },
          "section": {
            "description": "Restrict to a section, e.g. \"grid\", \"fuels\", \"freight\".",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "search_factors"
    }
  ]
}

What the leaf hashes

{"body":"ed026dd4a33df4e7dcb65f94f6e977e9b19251d7729ea1a8204422060e3da74a","id":523418,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793124347588780,"prev":null,"subject":"014e96c0-bfe1-40ac-b5c4-01d36e66ba36","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0x9d2b532aa43584ad092adcf0509a8d6b3dee2fdc37a9426e6560159dc3a64878
  2. 0x2da82fe5d5826feea8c5b08776fa03268b33086e81c4d5ad2c037871c4c36ae8
  3. 0x78a05cb34ef0873efbed209acae7ab9d44747f19cdf480894fe71595c859b05d
  4. 0xacd1bab74c0541718ab4f3e77d12f8b45c68203bf4ea0a3ca6fb63071e50e295
  5. 0x82d08415910587e0e58d7b4f6305e0a45b68a559165b9d9ab07d352b05cb7bfc
  6. 0x9f4aac3b2d96e1acef47e498b3fc13b24fa6a8b38a150af36655e8f544c9b013
  7. 0x15d3ba447432154bc0b8afbbf22ba27d50db3323ebcf6ddd6616b523f918d2db
  8. 0x234d4668fbd5be8418bef8cd68c04574b1685e5c809048dc632277e07396fc37
  9. 0x9fc915f792d3dd292c68a2d3319e40f469c3b6a0828ca00b06a828e260730c5d
  10. 0xff9e180b3d149e0efd3fdce83f8cba40e051b166a2b118467d73ab2d083ffb91
  11. 0x00030ef583f69b3277c49a56d1ebdd422f1784bcc963473282ee6631e8d9cca4
  12. 0x6e52b67215988e172a57437ef7e49cbf100e86fb3bb11c32506b78488daa7f10
  13. 0xe8a6f20810396abd4baf9472081cda6d396bc7cf52a77bffdd9f33b41c62adcc
  14. 0xb37e6165108af3c1962db6b76953aee5ee86201747a07444ad2760bf2d5dca23
  15. 0xa3fff4662cd48659f5bafd0612931759a90e53a7b4209ed8f26f6594a07bb547
  16. 0x64c405a28e8819716221eb2529fe4ce277ab08025e17e685cbd5ece75ceb75c7
  17. 0xf30fddbf4811226c58e8f0daf36fddd79fc5f1356b592bb1d99a8061ddbabe66
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON