Skip to main content
Glama
dnanatihor

Epistemic Envelope

by dnanatihor

Epistemic Envelope — Keep certified, observed, and inferred claims apart

License

demo

Why

Data tools mix a rule that passed, a measurement from last year, and a model's guess in one paragraph. Agents then repeat the guess as if someone certified it. This library keeps those three kinds of claim in separate layers, for catalog teams that expose data through MCP tools.

Related MCP server: autokg

Quickstart

uv run python -m examples.catalog_server

That starts the reference catalog server on stdio and waits for an MCP client. EPIENV_INFERENCE=off withholds AI inferences.

How it works

flowchart LR
  Tool[MCP tool] --> Shape[Shape into layers]
  Shape --> Policy[Inference policy]
  Policy --> Text[Deterministic text]

A tool returns catalog facts. The decorator places approved rule results in certified findings, profiler metrics in observations, and model text in AI inferences. Policy can drop the inferences. The rendered text names the layer of every line.

Results / example output

describe_asset for fixture column col_email, from the reference server:

## Certified findings (authoritative)
- [cf-1] Email format rule passed — rule DQ-17, pass, certified by steward_a on 2026-09-20
## Profiling observations (measured; may be stale)
- [po-1] null_pct = 0.02 (observed 2026-09-20, run pr_9)
## AI inferences (unverified; do not present as fact)
- [ai-1] Likely contains personal email addresses — model static/canned, based on [po-1], review: unreviewed
Governance notice: AI-generated content is unverified and not certified.

Design decisions

Roadmap

  • A recorded demo GIF (the image above is a placeholder)

  • An MCP Governance Auditor report for this server

  • A decision on whether the curated layer ships

  • Name and IP clearance

Licence

Code is Apache-2.0. The specification text is CC BY 4.0.

Available Tools

4 tools
describe_assetdescribe_assetB
Read-only

Return quality results, profile, and inferences for one asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
subjectYes
attributesNo
ai_inferencesNo
curated_metadataNo
envelope_versionYes
governance_noticeNo
certified_findingsNo
inference_permittedYes
profiling_observationsNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe, non-mutating read, so the bar is lower. The description adds only the shape of the returned content, with no notes on cost, latency, or whether the profile/quality computation is expensive, so it adds modest value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or restatement of the title. It is efficient, though the terseness contributes to the missing usage guidance rather than compensating for it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the annotations cover the safety profile. The remaining gap is routing: nothing explains how this differs from get_asset_profile or get_quality, which is the main decision an agent must make here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 0%, so the description must carry the meaning; 'for one asset' implies asset_id is a single-asset identifier rather than a list or filter, but adds no format, source, or lookup guidance. Marginal value over the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ('Return') plus the specific payload (quality results, profile, inferences) scoped to 'one asset', so the agent knows what comes back. It does not, however, differentiate itself from siblings get_asset_profile and get_quality, whose names suggest they return overlapping subsets of this data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of the alternatives. With siblings get_asset_profile and get_quality available, the agent cannot tell whether to call this aggregator or the narrower tools, or whether this is a superset that makes them redundant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_profileget_asset_profileC
Read-only

Return profiling observations, and inferences when policy allows them.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
subjectYes
attributesNo
ai_inferencesNo
curated_metadataNo
envelope_versionYes
governance_noticeNo
certified_findingsNo
inference_permittedYes
profiling_observationsNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds one genuine behavioral detail — that inferences are only returned 'when policy allows' — which tells the agent output may be conditional, but it does not explain what policy governs this or what the agent should do when inferences are withheld.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler and the key behavior (conditional inferences) placed at the end. It is efficient, though its brevity borders on under-specification rather than tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value structure need not be described, and the read-only nature is annotated. What is missing is the relationship to sibling tools and the meaning of the required asset_id, leaving the definition minimally viable for a one-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description says nothing about asset_id — its format, whether it accepts IDs from list_assets, or whether it accepts names. For a tool whose only parameter is an opaque identifier, this leaves the agent to infer usage from the sibling tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb ('Return') and a resource ('profiling observations, and inferences'), which is more than a restatement of the name. However, it does not clarify what an 'asset profile' is relative to sibling tools like describe_asset or get_quality, so an agent cannot confidently distinguish its scope from theirs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus describe_asset or get_quality, both of which plausibly cover asset metadata. No prerequisites, no exclusions, no alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_qualityget_qualityB
Read-only

Return certified data-quality findings for one asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
subjectYes
attributesNo
ai_inferencesNo
curated_metadataNo
envelope_versionYes
governance_noticeNo
certified_findingsNo
inference_permittedYes
profiling_observationsNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this as a safe read. The description adds that only 'certified' findings are returned, which is a useful filter beyond the annotation, but it says nothing about freshness, caching, or what happens when an asset has no certified findings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight sentence with the resource and scope front-loaded and no filler. It is efficient, though the brevity is partly why parameter detail is missing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with an output schema, the description is minimally adequate. It still leaves asset_id semantics and the tool's relationship to sibling asset tools unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter asset_id has 0% schema description coverage, and the description does not clarify its expected format or source (e.g., ID from list_assets). With low coverage the description should compensate but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Return certified data-quality findings') with clear scope ('for one asset'). It does not differentiate itself from siblings like get_asset_profile or describe_asset, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives among the sibling tools, and no stated prerequisites. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assetslist_assetsA
Read-only

List tables and columns in the seed catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
subjectYes
attributesNo
ai_inferencesNo
curated_metadataNo
envelope_versionYes
governance_noticeNo
certified_findingsNo
inference_permittedYes
profiling_observationsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already tells the agent this is a safe read with no destructive effect, lowering the disclosure bar. The description adds the scoping constraint that results come from the "seed catalog," but says nothing about pagination, rate limits, or breadth of the listing beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste; the resource and scope are stated immediately. Appropriate length for a no-argument list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and with zero parameters there is little schema burden. The one real gap is the absence of guidance for selecting this tool over its siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline for a parameter-free tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("List") and resource ("tables and columns in the seed catalog"), so an agent knows exactly what it returns. It does not, however, distinguish itself from siblings like describe_asset or get_asset_profile, which also operate on catalog assets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus describe_asset, get_asset_profile, or get_quality. The description offers no context, prerequisites, or exclusions to route the agent among the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observeddescribe_asset
    • First observedget_asset_profile
    • First observedget_quality
    • First observedlist_assets

TDQS

B3.1/5.0

Scored across 4 tools

Disambiguation2/5

list_assets is distinct, but get_asset_profile, describe_asset, and get_quality overlap: describe_asset returns profile, quality, and inferences, making the narrower tools seem redundant and boundaries unclear. An agent could reasonably choose describe_asset for most per-asset queries.

Naming Consistency5/5

All names use a snake_case verb_noun format: list_assets, get_asset_profile, describe_asset, get_quality. Verb choices vary naturally by action, with no mixed conventions.

Tool Count4/5

Four tools is a reasonable, focused count for a read-oriented catalog/quality server. It is slightly thin and includes some redundant coverage, but not too many or too few.

Completeness3/5

Core per-asset inspection is covered (list, profile, description, quality), but there is no catalog-level quality listing, search, or lineage/update operation. For a read-only epistemic catalog this is a notable gap, though not a severe failure.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables secure interaction between LLMs and MCP tools by applying zero-trust security controls, including sensitive data masking, file system protection, and policy enforcement.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Turns warehouse/lakehouse tables into a governed entity-relationship knowledge graph exposed through MCP, enabling AI agents to answer multi-table business questions without hard-coded SQL or large schema prompts.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Serves an automatically inferred semantic layer from your warehouse over MCP, enabling AI agents to query with correct business context, joins, and filters.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables enterprise AI agents to query governed data lineage, PII-aware schema documentation, and semantic metadata from SQL logs via MCP, with role-based access and vector search.
    MIT