dVeracity Semantic API

com.dveracityPublished by dveracity.comOfficial publisherv0.8.3Updated Nov 3, 2026

Validate emissions data against Open Footprint, check EU CBAM records, query verified methane data

VerifiedStreamable HTTPWeb executableKnowledge & MemoryData & AnalyticsBusiness & Commerce

Overview

dVeracity Semantic API's hosted MCP server (api.dveracity.com), published by dveracity.com; no sign-in required; Streamable HTTP; 23 tools.

No AI overview yet: these facts come from the registry entry and the server itself.

Publisher
dveracity.com
Endpoint
api.dveracity.com
Last checked

Installation

In SourceWeft

  1. Open dVeracity Semantic API in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.dveracity%2Fsemantic-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "dveracity-semantic-api": {
      "type": "http",
      "url": "https://api.dveracity.com/mcp"
    }
  }
}

README

dVeracity Semantic MCP server

[smithery badge]

Gives any MCP-capable AI agent (Claude Code, Cursor, custom agents) metered access to the dVeracity Semantic API — natural-language queries over the verified-emissions knowledge graph (Open Footprint / PPDM / OGMP-methane) — and VaaS standards validation.

Prerequisites

  1. A free Explorer account (OAuth) or a paid plan: https://dveracity.com/pricing — Explorer includes API-key management and a monthly metered-call allowance.
  2. An API key (dvrc_…): POST /api/v1/api-keys (or the dashboard)
  3. API credits for calls beyond the free allowance: POST /api/v1/vaas/credits/purchase (or ask the agent to use billing_purchase)

The machine-readable service contract lives at GET /api/v1/semantic/manifest (public, no auth).

Install

From this directory: npm install

Claude Code

bash
claude mcp add dveracity \  -e DVERACITY_API_KEY=dvrc_yourkey \  -- node /path/to/dVE/mcp/semantic-mcp/index.js

Generic MCP JSON config (Cursor, etc.)

json
{  "mcpServers": {    "dveracity": {      "command": "node",      "args": ["/path/to/dVE/mcp/semantic-mcp/index.js"],      "env": { "DVERACITY_API_KEY": "dvrc_yourkey" }    }  }}

Optional: DVERACITY_API_URL overrides the API base URL (defaults to prod).

KERI mode — verified agent identity (optional)

If the agent holds a dVeracity Agent Authorization credential (an ACDC issued by its Legal Entity, chained to the Legal Entity's vLEI — see elm/docs/VLEI_AGENT_TOKENS_DESIGN.md), set:

DVERACITY_KERI_AID=<the agent's AID (credential issuee)>DVERACITY_KERI_PRESENTATION=/path/to/agent-credential.cesr   # self-contained CESR

The server then authenticates the agent by verifiable presentation (challenge → exchange → 1-hour session, refreshed transparently) and attaches X-Keri-Session to every call: the API key keeps carrying billing, the KERI session adds verified identity — every metered call is attributed to the agent AID and Legal Entity LEI in dVeracity's audit trail. The keri_identity tool (free) shows the active identity. Scope denials (a credential that doesn't carry e.g. semantic:query) surface as actionable errors naming the carried scopes. Signify-based nonce signing is a planned enhancement.

Tools

ToolCostWhat it does
semantic_querycreditsNatural-language question over the verified-emissions knowledge graph
semantic_templatesfreeCatalog of supported query templates
credits_balancefreeRemaining credit balance
list_standardsfreeStandards VaaS can validate against
validate_datacreditsValidate a payload against a supported standard
keri_identityfreeThis agent's verified vLEI identity, when KERI mode is configured

Every tool definition carries _meta.pricing: { "unit": "credit", "amount": <int>, "usd": <decimal> }, with amount 0 for a free tool. A plan-gated tool also carries "plan_required": "<tier>" — 0 credits on compliance_policies or compliance_evaluate means "included in the VaaS plan", not "free for any account".

Billing

ToolCostWhat it does
billing_plansfreePlans, credit packs, per-credit price and the free allowance (anonymous on the hosted endpoint)
billing_statusfreeThis account's plan, balance and remaining free allowance
billing_purchasefreeOne-time credit checkout: returns a checkoutUrl for a human, plus a paymentLink when the deployment configures one
billing_subscribefreeMembership checkout: returns checkoutUrl only; recurring charges need human approval

Open Footprint canonical model

Design-time tools for building an application on the Open Footprint standard. Reading the model is free; only the check at the end is metered.

ToolCostWhat it does
ofp_modelsfreeThe model domains (nine as of openfootprint b60a24e), and which database dialects have published DDL
ofp_search_entitiesfreeSearch the canonical entities (262 entries as of b60a24e) by name, description or field
ofp_entityfreeOne entity in full: fields, types, keys, relationships, physical table
ofp_sectorsfreeIndustry sectors, each with a status
ofp_sectorfreeOne sector, with its reference artifacts
ofp_policiesfreeA sector's Rego guardrails, or an explicit "none published"
compliance_policiespaid planApproved regulatory compliance policies (rules extracted from a regulation, admin-approved); never drafts
compliance_policypaid planOne approved policy: Rego, extracted rules, inputs, provenance
compliance_policy_registerpaid planThe published release register: every provision, its legal reference, review status and why it is or is not enforced
compliance_evaluatepaid planExecute one named approved policy against a record: four-valued decision, per-check results, missing inputs, remediation, coverage. Stores an audit record
compliance_evaluationpaid planRead back one stored evaluation — the caller's own only
ofp_validatecreditsCheck a payload against the model and, optionally, sector guardrails
ofp_semanticsfreeO-DEF semantic codes, for aligning another system's fields onto the model
ofp_semantic_codefreeWhich canonical fields carry one code — the reverse lookup a connector needs
ofp_model_provenancefreeWhich snapshot of the standard this deployment serves

Two behaviours are deliberate and worth knowing before you build against them.

Ambiguous entity names fail rather than resolve. dozens of entity names (the ofp_models summary reports the count as ambiguousNameCount) are defined in more than one domain — Country is in four. ofp_entity without a domain returns an error listing the candidates instead of picking one. Pass domain whenever you know it.

Semantic codes vary in usefulness. Most canonical fields carry an O-DEF code, but a code shared by many fields is a generic classification, and aligning to one asserts almost nothing. The ofp_models summary reports the real shape under precision — preciseFieldThreshold (the fieldCount at or below which a code is precise rather than generic), fieldsOnPreciseCodes and preciseShareOfAnnotated — and those follow the vendored snapshot rather than this document. Every code is returned with its fieldCount: check it before aligning to one, and pass maxFieldCount at that threshold to ofp_semantics to see only the precise ones.

"Nothing published" is an answer, not an error. Most sectors are named in the taxonomy but have no reference implementation, and only seven publish policy guardrails. ofp_policies on such a sector returns published: false with a reason, and ofp_validate reports policy.ran: false. Both mean no rules are published, never there are no constraints — a payload checked for structure alone is not a compliant one, and should not be described as one.

A fourth outcome, unevaluable, means the sector's rules ran but every rule that came back false reads an input the payload does not carry (policy.missingInputs, e.g. co2e_kg, direction, counterparty_industry). Those are e-ledger record fields, not canonical Open Footprint field names — ofp_policies lists them per policy under inputs. Unevaluable is neither a pass nor a breach, and valid is null.

What ofp_validate checks, and what it does not

The response is a contract, not a verdict. Every call reports the check catalogue in two lists: checked (what ran) and checks_not_run (what did not, each with a reason and usually a detail). Read both before describing a payload as anything.

CheckStatusReason reported when it does not run
schema — presence, primary key, types, declared constraintsrunsentity_has_no_fields
value_rangeruns where the model declares a bound: a quantity outside the declared minimum or maximum is rejected. Which fields declare a bound moves with the vendored snapshot, so it fires on some entities and not others — read checked and schema.coverage.constraintsDeclared per callno_range_declared, no_numeric_fields
unit_coherencenot runnot_implemented
calculation_reproducibilityruns where the record carries all three of a quantity, an emission factor value and a stated CO2e result: quantity × factor = result is reproduced within 1%, and a record that contradicts itself is rejectedno_calculation_inputs, calculation_inputs_incomplete, ambiguous_calculation_inputs, calculation_inputs_unparseable
temporal_consistencyruns: a validity period whose end precedes its start is rejectedno_validity_pair, validity_pair_incomplete, validity_values_unparseable
enum_membershipruns where the vocabulary publishes its members: a well-formed key for a referent that does not exist is rejectedno_members_published, no_reference_field_supplied, reference_ids_unparseable
referential_integritynot run: keys are pattern- and member-checked, never resolved against live recordsno_data_plane
factor_provenancenot runnot_implemented
materialitynot runnot_implemented
sector_policyruns when a sector with published guardrails covers the record typeno_sector_supplied, no_policy_published, policy_source_missing, policy_package_unparseable, not_applicable, unevaluable

Any check can also report schema_not_run, which means the structural check it builds on could not run at all.

calculation_reproducibility is self-referential and nothing more. It resolves its three inputs from the model — the field carrying the emission-measure role, a … Factor Value (never a … Factor ID, which is a reference to a factor rather than a number to multiply by) and a … CO2e … result — or, for a record in the vocabulary the guardrails read, from quantity_value / emission_factor_value / co2e_kg. A slot the record fills more than once is ambiguous_calculation_inputs and the check declines rather than picks. The 1% tolerance is the one CalculationAccuracy in the verification engine and calc_tolerance in the ISO 14064 quantification policy use, so the identity has one tolerance on every surface. What it catches is a record whose own numbers do not multiply out. It does not say the factor is the right one for this source and period (factor_provenance, still not run) or that the quantity came from the meter it claims (the data plane, still not run) — a reproduced calculation is a self-consistent record, not a verified one.

  • schemaValid is the structural verdict (null if the structural check could not run).
  • assuranceLevel names the depth earned: schema-only, schema-and-value, schema-value-and-policy or full. Each level needs every check beneath it, so guardrails without a value check is still schema-only. The ladder is gated on value_range — a bound the model itself declares — so a record that reproduced its own arithmetic without one still reads schema-only; checked is where that shows up, and it is the more precise of the two.
  • Every violation and warning carries severity (error | warning). Rule ids are stable: required_field_missing, pattern_mismatch, format_mismatch, type_mismatch, primary_key_missing, enum_violation, value_range (with bound: minimum | maximum), temporal_consistency, enum_membership, calculation_reproducibility (with expected, received, tolerance and the three inputs it read), … unknown_field is a per-field warning and stays one.
  • unknown_field warnings carry didYouMean: up to three canonical candidates, each with a confidence and the O-DEF code that field carries. The list is empty when nothing in the model is a plausible match — a key that belongs to another system stays a key that belongs to another system. schema.normalisations separately discloses keys that resolved through case and separator folding.
  • advisories carries findings that are true of the payload but do not bear on its validity. Today that is deprecated_field: a field the model has retired, severity warning, carrying modelDescription verbatim and a successor when the model names one. Where the model names no replacement the key is absent rather than guessed. An advisory never changes schemaValid, and the same entries also appear in schema.warnings.
  • valid is deprecated (see deprecations in the response). It keeps its 0.5.0 meaning through the 0.5.x line and is removed no earlier than 0.6.0. Read schemaValid instead.

Billing behavior (for agents)

Metered calls return an HTTP 402 when the account is out of credits. The server surfaces this as a tool error that tells the agent to ask its human operator to purchase credits or upgrade — agents should relay that message and stop, not retry.

Retrying metered calls safely

Metered tools advertise _meta.idempotency ({ header, parameter, maxLength }). Send the key either as the Idempotency-Key header on the /mcp request or as params._meta.idempotencyKey on the tools/call itself. The hosted endpoint forwards it to the metered REST call: the same key is charged once and replays the original result, and a different body under the same key is refused. If both the header and the parameter are present they must match; a mismatch is refused with a JSON-RPC -32602 error before the tool runs. Tools without _meta.idempotency are not metered, so a key has no effect on them.

Test

npm test (no network; the HTTP layer is stubbed).

Where it is listed

Source: README.md at commit b00cd4e

Tools

23

semantic_query

Query verified emissions data

Use this when a user asks a specific question about verified oil-and-gas emissions data, for example methane emissions for a site, company or period (PPDM, OGMP 2.0). Call semantic_templates first to see what the data can answer. Do not use for general climate questions. On payment_required, tell your operator what the call needs; do not retry the same call. Prefer a specific site, company or period.

ParametersqueryrequiredsessionId

semantic_templates

Emissions data: question templates

Use this when you want to see which kinds of questions the verified emissions data can answer, before calling semantic_query.

Takes no parameters.

credits_balance

Credit balance (deprecated)

Deprecated: use billing_status, which also shows plan and free allowance. Removal planned for 0.9.

Takes no parameters.

list_standards

List supported standards

Use this when you need to see which sustainability data standards and versions validate_data can check, before calling it.

Takes no parameters.

validate_data

Validate data against a named standard

Use this when a user wants a payload checked against a standard other than Open Footprint; call list_standards first to see which are supported. For Open Footprint payloads use ofp_validate. Only masterData or referenceData; call list_standards first.

ParametersdatarequiredversionstandardrequiredentityTypeschemaCategory

keri_identity

Verified agent identity (vLEI)

Use this when an organisation needs to confirm which verified legal entity and agent identity dVeracity is attributing calls to. Only relevant when vLEI identity is configured.

Takes no parameters.

ofp_models

Open Footprint: list model domains

Use this when a user is building an app, database or integration on the Open Footprint standard and needs to know what the model covers. Start here before any other ofp_ tool. The response summary carries the served counts.

Takes no parameters.

ofp_search_entities

Open Footprint: search entities

Use this when you need the Open Footprint entity for a concept such as "Scope 3 emissions", "facility" or "product footprint". Do not use for emission factors or calculations. Matches entity names, descriptions and field names; use ofp_entity for the full definition.

Parametersqlimitdomain

ofp_entity

Open Footprint: get entity definition

Use this when you need one entity's fields, types, keys and relationships, for example to design a table or an API payload. Pass domain when known: ambiguous names fail rather than guessing (ofp_models reports ambiguousNameCount).

Parametersnamerequireddomain

ofp_sectors

Open Footprint: list industry sectors

Use this when a user asks which industries Open Footprint covers or whether a sector has a reference implementation. implemented means a reference implementation exists; planned or placeholder means nothing is published.

Parametersaxis

ofp_sector

Open Footprint: get sector

Use this when you need one sector's classification, status and reference artifacts.

Parametersidrequired

ofp_policies

Open Footprint: sector guardrails

Use this when a user asks which validation rules apply to a sector's emissions records. Do not use for regulations; use compliance_policies. inputs lists the e-ledger fields each policy reads (e.g. co2e_kg, direction), not canonical Open Footprint names. published:false means no rules are published; do not invent guardrails.

Parametersidrequired

compliance_policies

Regulatory checks: list policies

Use this when a user needs data checked against a regulation, for example EU CBAM, to find the approved policy to run. Do not use for Open Footprint sector rules; use ofp_policies. Returns only APPROVED policies; drafts and rejected never appear. An empty list means none published, not that no obligations exist; never invent rules. Requires compliance:read.

Parametersdomainframeworkinclude_retired

compliance_policy

Regulatory checks: get policy

Use this when you need the full rules, provenance and coverage of one approved regulatory policy. Returns Rego only when the source was retained; otherwise rego_unavailable: source_not_retained. A policy without Rego is not loaded into the engine; enforcement says whether its structured rules still run. Do not reconstruct the Rego. Requires compliance:read.

Parametersidrequired

compliance_evaluate

Regulatory checks: evaluate record or CBAM declaration

Use this when a user wants an import record or an annual EU CBAM declaration (Reg. (EU) 2023/956) checked against an approved policy before filing. Do not use for carbon-footprint calculations or for regulations compliance_policies does not list. Runs the policy's regulation-derived Rego, not the generic OFP validator. The decision is passed, denied, unevaluable, not_applicable or error; an error is a refusal, never compliance, and error.code names it (policy_not_release_eligible, policy_no_rendered_checks, policy_no_faithful_checks, policy_coverage_inconsistent, policy_hash_mismatch, policy_hash_unverified). A pass covers only the encoded checks: read coverage.note. Requires the compliance:evaluate scope; every call counts against the plan limit. For an annual CBAM declaration set entity_type to cbam_declaration and send declaration + lines.

Parameterslinesentitycontextevidencepolicy_idrequireddeclarationentity_type

compliance_evaluation

Regulatory checks: get stored result

Use this when a user wants to retrieve or audit a previous regulatory evaluation by its id. Only the caller who ran it can read it; another account's id answers not found. Requires compliance:read.

Parametersevaluation_idrequired

compliance_policy_register

Regulatory checks: what a policy covers

Use this when a user asks which provisions of a regulation an evaluation actually checks and which it does not. Shows which provisions are encoded and which are not: a pass on the encoded checks is not compliance with excluded provisions. Requires the compliance:read scope.

Parametersidrequired

ofp_validate

Validate data against Open Footprint

Use this when a user wants an emissions or footprint record (JSON) checked against the Open Footprint model or a sector's guardrails before storing, exchanging or reporting it. Do not use for general data-quality questions without a payload. Checks structure, declared constraints, enum membership and calculations; with a sector, its guardrails. Always read `checked` and `checks_not_run` per call, and `schema.coverage.constraintsDeclared`, rather than assuming a range check ran. Not checked: undeclared ranges, unit coherence, live referential integrity, factor provenance. Never report a payload as compliant unless sector_policy is in `checked` and policy.outcome is passed. `schemaValid` is the structural verdict; `valid` is deprecated.

ParametersdomainentityrequiredsectorpayloadrequiredentityType

ofp_semantics

Open Footprint: semantic codes for mapping

Use this when mapping fields from SAP, another ERP or a supplier feed onto Open Footprint. A high fieldCount is a generic fallback; pass maxFieldCount (10 is a good start) for codes specific enough to align on.

ParametersmaxFieldCount

ofp_semantic_code

Open Footprint: fields for a semantic code

Use this when you have a source-system field and need to find where it belongs in the Open Footprint model. Codes carried by more than ten fields are generic classifications; aligning to one asserts less than it appears.

Parameterscoderequired

ofp_model_provenance

Open Footprint: model version

Use this when a user asks which version of the Open Footprint standard they are designing against.

Takes no parameters.

billing_plans

Plans and allowances

Use this when you need to know what each dVeracity plan includes or what the free allowance covers. Show dVeracity plans, what each plan includes and the free-tier allowance.

Takes no parameters.

billing_status

Account balance and plan

Use this when a call was refused for credits or plan, to tell the user exactly what is missing. Use it after a 402 to tell your human exactly what is missing.

Takes no parameters.

Version history

8
  1. v0.8.3LatestNov 3, 2026
  2. v0.8.1Nov 1, 2026
  3. v0.7.0Oct 22, 2026
  4. v0.6.4Oct 19, 2026
  5. v0.6.3Oct 14, 2026
  6. v0.6.2Sep 30, 2026
  7. v0.6.1Sep 30, 2026
  8. v0.6.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts