sdcgovernance
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sdcgovernanceValidate governance for instance.xml"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sdcgovernance
W3C standards-based governance advisory engine for Semantic Data Charter instances.
A Python library that validates governance content in XML data instances against governance components defined in the SDC data model. If the model defines governance (workflow, attestation, party/role, provenance, audit), the instance must carry that content - and this library validates it.
Returns decisions using OASIS XACML semantics: PERMIT, DENY, or INDETERMINATE.
No framework dependency. No middleware. A function call.
How It Works
SDC data models (XSD) can optionally include governance components: Workflow state machines, Attestation authority requirements, Party/Role constraints, Provenance requirements, and Audit definitions. These are part of the data model, not a separate governance layer.
When governance components are defined, every XML data instance must carry the corresponding governance content. This library validates that content against the model:
from sdcgovernance import validate_governance
result = validate_governance("model.xsd", "instance.xml")
print(result.decision) # PERMIT, DENY, or INDETERMINATE
print(result.has_governance) # True if model defines governance components
print(result.errors) # list of governance validation errors
print(result.receipt) # tamper-evident decision receiptIf the model does not define governance components, the result is PERMIT - no governance to enforce.
Related MCP server: ceco proof gate
Two Independent Libraries
sdcvalidator and sdcgovernance are separate, independent libraries. There is no hook, no chaining, no automatic invocation of one from the other.
sdcvalidator (structural validation)
Does the instance conform to the XSD schema?
Single-pass. Instance in, pass/fail out.
sdcgovernance (governance advisory)
Does the model define governance components?
If yes: does the instance carry valid governance content?
Conversational. Agents query multiple times during a workflow.Both libraries read the schema from the instance. Agents call each one independently, at different points in a workflow, in whatever order the operational logic requires. A single workflow may involve multiple calls to both libraries.
What Gets Validated
Component | What the model defines | What the instance must carry |
Workflow | Cluster tree of valid paths (sub-clusters with XdOrdinal states) | Current XdOrdinal state, proposed transition validated against ordinal adjacency in valid paths |
Attestation | Authority requirements per action | Attestation with correct role, party reference, timestamp |
Party/Role | Role constraints for governed actions | Acting party identification with required role |
Provenance/Audit | Provenance requirements (PROV-O) + retention policy (DPV) | PROV-formatted record(s) per retention policy: most recent + hash, last N, or full chain |
Governance components are discovered by their position in the DMType root (fixed RM slots: workflow, attestation, party/role, audit, and related), not by CUID2 identity. Once a slot is found, its content is validated by vocabulary binding against the relevant standard (PROV-O, SCXML, VC, DPV). Any component occupying the right slot and bound to the right vocabulary is recognized - whether it comes from the Default project or was custom-built.
Enforcement Decisions (OASIS XACML)
Decision | Meaning |
PERMIT | All governance checks pass - action is authorized |
DENY | One or more governance checks fail - action is refused |
INDETERMINATE | Governance checks partially pass - requires review (configurable) |
Every decision produces a W3C PROV record and a SHA-256 hash-chained receipt.
What happens after the decision is the agent's responsibility. sdcgovernance issues the decision and the receipt. The operational response - routing, escalation, notification, halting - is customer business logic that varies per implementation.
Two Interfaces, One Engine
Python API - for direct integration:
from sdcgovernance import validate_governance
result = validate_governance("model.xsd", "instance.xml")MCP Server - for any agent framework:
sdcgovernance # what an MCP registry client runs (uvx sdcgovernance)
sdcgovernance mcp # the same, spelled like the other Semantic Data Charter servers
sdcgovernance serve --mcp # still works for existing client configurationsA client configuration needs only "command": "uvx", "args": ["sdcgovernance"].
The MCP server exposes governance as tools that agents call. The agent runs the loop. sdcgovernance advises.
Standards
OASIS XACML - decision semantics (PERMIT/DENY/INDETERMINATE)
SDC native structure + W3C SCXML concepts - workflow sequencing via XdOrdinal components in sub-cluster paths, borrowing the concepts of state and transition from automata theory as specified in W3C SCXML
W3C PROV (PROV-O, PROV-DM) - provenance/audit records (one governance dimension)
W3C Data Privacy Vocabulary (DPV) - provenance retention policy (same vocabulary used for SDC access control)
W3C Activity Streams 2.0 - activity/event type vocabulary
W3C Verifiable Credentials Data Model 2.0 - attestation authority pattern
W3C SHACL - cross-entity constraint validation
OMG DMN - decision tables for complex governance rules
SHA-256 - tamper-evident hash chains for decision receipts
Architecture
src/sdcgovernance/
├── __init__.py # Public API: validate_governance()
├── engine.py # GovernanceEngine - the decision engine agents query
├── model_inspector.py # Inspect SDC model for governance components
├── workflow.py # Validate workflow transitions in instance
├── attestation.py # Validate attestation content in instance
├── party_role.py # Validate party/role constraints in instance
├── provenance.py # Validate provenance/audit records + PROV generation + DPV retention policy
├── decision.py # DMN decision table evaluation + content hash
├── tables.py # Decision table registry: id, version, hash; files on disk
├── receipts.py # Decision receipt chain (hash-chained)
├── shacl_runtime.py # SHACL cross-entity constraint validation
└── mcp_server.py # MCP server exposing governance tools to any agentPure Python. No Django. No middleware. No web framework dependency.
Installation
pip install sdcgovernanceIntegration with SDC Ecosystem
sdcvalidator - independent structural validation library. Agents call it separately from sdcgovernance, at different points in a workflow.
SDCStudio - models governance components visually. The XSD output includes governance definitions that sdcgovernance validates against.
AppGen - generated applications can call
validate_governance()at data entry boundaries.SDC Agents - reference implementations showing how to wire governance MCP tools into agentic workflows using Default project governance models. Customer agents connect to the same MCP server and use the tools however they want.
Status
Production-ready. Available on PyPI under Apache 2.0.
Dependencies
rdflib- RDF/PROV record generationpyshacl- SHACL constraint validation
License
Apache 2.0
Available Tools
9 toolsevaluate_decisionA
Evaluate a DMN decision table against instance context. Name the table by table_id (and table_version; the highest registered version when omitted) for a governed evaluation, or pass it inline as table_json for an ad-hoc one. Returns decision, matched_rules, reasoning, errors, the table's identity and content hash, and a tamper-evident Receipt whose receipt_hash covers table_id, table_version and table_hash as well as context_hash. instance_path is optional: when omitted, the decision is evaluated against extra_context alone, which is the path external context-only consumers (e.g. MTCP Evidence Packs) should use. Pass previous_hash to chain receipts; the caller is responsible for chain persistence.
| Name | Required | Description | Default |
|---|---|---|---|
| table_id | No | Id of a registered decision table (see register_decision_table and list_decision_tables). Give table_id or table_json, not both. | |
| table_json | No | JSON string defining the decision table inline, for an ad-hoc evaluation (the Receipt then carries the table's content hash but no id or version). Format: {"name": "...", "hit_policy": "FIRST|UNIQUE|COLLECT", "rules": [{"conditions": [{"field": "...", "op": "==|!=|<|<=|>|>=|in|not_in", "value": ...}], "outcome": "PERMIT|DENY|INDETERMINATE", "description": "..."}]} | |
| instance_id | No | Identifier for the entity being evaluated, recorded in the Receipt. For SDC instances this is the DM instance_id (CUID2). For external consumers this is the entity identifier (e.g. an MTCP model_id such as 'gpt-4o'). | |
| context_hash | No | SHA-256 hash of the extra_context payload, computed by the caller. Binds the Receipt cryptographically to the context that produced the decision. MTCP consumers pass the Evidence Pack hash here. | |
| extra_context | No | JSON string with additional context key-value pairs. | {} |
| instance_path | No | Path to the XML instance file for context extraction. Optional. Omit to evaluate against extra_context only. | |
| previous_hash | No | SHA-256 hash of the prior Receipt in the caller's chain. Pass null (default) to start a new chain. The caller is responsible for chain persistence. | |
| table_version | No | Version of the registered table. Omit for the highest registered version; the Receipt records the version that was used. | |
| instance_version | No | Version of the entity being evaluated, recorded in the Receipt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries real weight: it discloses the return payload (decision, matched_rules, reasoning, errors, identity, content hash, Receipt) and precisely what the receipt_hash binds (table_id, table_version, table_hash, context_hash). It does not cover auth/permission requirements or error semantics for invalid tables, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then routing logic, and each sentence carries distinct information; it is dense but slightly overstuffed, with return-value enumeration and chaining responsibilities packed into a single paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema and no annotations, the description enumerates the response fields, the receipt's hash coverage, and the caller's chaining obligation, so an agent knows both how to call it and what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds genuine semantic meaning: the version-defaulting rule, the ad-hoc-vs-governed tradeoff, and why context_hash and previous_hash exist (cryptographic binding and chaining).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Evaluate a DMN decision table against instance context') and immediately distinguishes the governed (table_id) path from the ad-hoc (table_json) path, separating it from siblings like register_decision_table and list_decision_tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to give table_id or table_json (not both), explains the default version behavior, and prescribes the external context-only path via omitted instance_path with a named example (MTCP Evidence Packs). It also states when to pass previous_hash and who owns chain persistence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_transitionB
Evaluate whether a specific workflow transition is permitted. Returns PERMIT/DENY/INDETERMINATE with receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Identity of the actor requesting the transition. | |
| schema_path | Yes | Path to the SDC data model XSD file. | |
| target_state | Yes | Proposed target state symbol. | |
| instance_path | Yes | Path to the XML instance file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that the result will be PERMIT, DENY, or INDETERMINATE with a receipt, but it does not state whether the operation is read-only, what permissions are required, what the receipt contains, or how INDETERMINATE should be handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with the core action and return values front-loaded. There is no filler, and every phrase contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents the four parameters, and the description covers the return values. However, without annotations or an output schema, the definition leaves important context unstated: read-only behavior, receipt meaning, failure modes, and when this tool is preferable to related governance tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are documented in the schema itself. The description adds no further parameter semantics such as actor identity requirements, path formats, or how target_state is resolved, so it remains at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: evaluating whether a workflow transition is permitted. It also states the return categories, making the operation concrete. It does not explicitly distinguish itself from siblings like get_allowed_transitions or evaluate_decision, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no guidance on when to use it versus get_allowed_transitions, validate_governance, or evaluate_decision. There are no exclusions, prerequisites, or alternative-routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_allowed_transitionsA
Get valid next states from the current workflow state. Returns list of valid transitions with target state info and path(s).
| Name | Required | Description | Default |
|---|---|---|---|
| schema_path | Yes | Path to the SDC data model XSD file. | |
| instance_path | Yes | Path to the XML instance file containing workflow and current-state. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It partially compensates by describing the return shape (list of transitions with target state info and paths), but says nothing about whether the operation is read-only, permission requirements, or behavior when the current state has no valid transitions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded and no wasted wording; the return-value sentence follows immediately and earns its place since there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description does supply the essential return-shape information and implies the read context. It falls short only on operational traits (errors when no transitions exist, read-only nature), which are not covered elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both schema_path and instance_path are already documented in the schema. The description adds no further meaning about the parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Get valid next states from the current workflow state', with the return content ('valid transitions with target state info and path(s)'). It doesn't name or contrast with the sibling evaluate_transition, so an agent can't fully distinguish the two from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied – the phrasing suggests you call it when querying what states are reachable. There is no explicit when/when-not guidance and no mention of alternatives such as evaluate_transition (which likely tests a specific target rather than enumerating options).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_governance_statusB
Report which governance dimensions the model defines. Returns model_id, model_label, has_governance, and active dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| schema_path | Yes | Path to the SDC data model XSD file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the return fields (model_id, model_label, has_governance, active dimensions), which is real behavioral value. However, it never states that the operation is a read-only inspection, nor what happens with an invalid or non-governed XSD path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose and followed by the return shape. Nothing is wasted and no sentence repeats the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter inspection tool with no output schema and no annotations, the description covers purpose plus the returned fields, which compensates for the missing output schema. It falls short only on error behavior and explicit read-only framing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter with 100% schema description coverage ('Path to the SDC data model XSD file'), so the schema already does the work. The description only implicitly connects the parameter to 'the model' and adds no format or path-resolution detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Report which governance dimensions the model defines,' which tells an agent exactly what information comes back. It does not distinguish itself from sibling governance tools like validate_governance or get_allowed_transitions, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives among the many governance-related siblings. An agent has to guess whether this is the right entry point versus validate_governance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_decision_tablesA
List the registered decision tables: table_id, version, table_hash, domain, policy and registered_at for each version, lowest version first. Filter by table_id or domain. With table_id the full table JSON of each version is included, which is how a receipt's table_id and table_version are resolved back to the rules that applied.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Only tables registered under this domain. | |
| table_id | No | Only this table's versions, with their JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses the ordered result set (lowest version first) and the important conditional behavior that supplying table_id expands each row to include full table JSON. It omits payload-size/pagination implications of that expansion and any permission or scope constraints, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences: return shape and ordering first, filtering second, and the receipt-resolution rationale last. No filler and no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description supplies the returned field set, ordering, and conditional payload expansion, which is most of what an agent needs. It stops short of covering the unfiltered case and the potentially large full-JSON response when table_id is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: it frames table_id as the receipt-resolution path and confirms that domain narrows the version list. It does not clarify behavior when both parameters are supplied together or that filters are optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list registered decision tables) and enumerates exactly what is returned per version: table_id, version, table_hash, domain, policy, registered_at. It is clearly separable from siblings such as register_decision_table (write side) and evaluate_decision (evaluation), so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: use it to filter by table_id or domain, and specifically to resolve a receipt's table_id/table_version back to the rules that applied. It does not state when not to use it or what to do if neither filter is supplied (full registry dump), which keeps it below 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_provenanceC
Record a provenance event as a W3C PROV-O record. Returns the PROV record content.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_ref | No | URI reference for the agent. | |
| entity_id | No | ID of the entity (DM.instance_id). | |
| system_id | No | System that produced this record. | |
| agent_name | Yes | Name of the agent performing the action. | |
| description | No | Human-readable description. | |
| activity_type | Yes | W3C Activity Streams 2.0 type (Create, Update, Accept, etc.) | |
| entity_hash_after | No | SHA-256 hash after action. | |
| entity_hash_before | No | SHA-256 hash before action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It reveals only that a record is written and returned; it says nothing about persistence, append-only/immutability semantics, whether the action is idempotent, or what permissions or ordering the hashes require. For a mutation tool with zero annotation coverage this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the purpose leads and the return behavior follows. It is efficient, though it is arguably too terse for an eight-parameter mutation tool rather than needlessly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With eight parameters, no annotations, and no output schema, the description should explain storage location, immutability guarantees, and what 'PROV record content' actually contains. None of that is present, leaving the agent under-informed for a write operation of this shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema and the baseline is 3. The description adds no extra semantics for the eight parameters — notably nothing on how entity_hash_before/after relate to the recorded action or how agent_ref differs from agent_name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Record a provenance event') and anchors it to a well-known standard ('W3C PROV-O record'), which tells an agent exactly what kind of artifact is produced. It does not name any sibling tool as a contrast, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to record provenance versus when to use the governance/decision siblings, no prerequisites, and no exclusions. The agent must infer the trigger condition entirely from the tool name and the surrounding toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_decision_tableA
Register a decision table under a stable table_id and an immutable version, so evaluate_decision can name it and every Receipt it produces records which policy version applied. Returns table_id, version, table_hash (SHA-256 of the table's RFC 8785 canonical JSON), domain and policy. Registering the same content again under the same id and version is a no-op; different content under an existing id and version is refused: register it as a new version. Persists to the server's tables directory when one is configured.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Optional domain the table governs, e.g. 'retention' or 'escalation'. | |
| policy | No | Optional policy reference the table implements, e.g. a policy document URI. | |
| version | Yes | Immutable version label, e.g. '1.0' or '2026-10-18'. | |
| table_id | Yes | Stable identifier, e.g. 'cordova.access-control'. Letters, digits, '.', '_', '-'. | |
| table_json | Yes | JSON string defining the decision table (same format as evaluate_decision). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses idempotency semantics, conflict refusal behavior, optional persistence to a server tables directory, and that table_hash is a SHA-256 of RFC 8785 canonical JSON. It omits authorization requirements and the exact error surface beyond the version-conflict case, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the primary action and its consumer (evaluate_decision) come first, followed by return fields and then the conflict rules. Every sentence carries information, though the parenthetical hash explanation is somewhat heavy for the space it occupies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description enumerates the returned fields (table_id, version, table_hash, domain, policy) and covers persistence and idempotency. An agent has everything needed to call this correctly for a 5-parameter write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema; baseline is 3. The description adds meaning about how version immutability and table_id stability govern future lookup and about table_hash derivation from table_json, but adds no format or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (register) and resource (decision table) plus the key scoping concepts — stable table_id, immutable version — and ties its purpose to a named sibling, evaluate_decision. An agent can distinguish it from list_decision_tables or evaluate_decision without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: register so evaluate_decision can reference the table and receipts record the policy version. It also resolves the main ambiguity an agent would face — re-registering identical content is a no-op, conflicting content is refused and must become a new version. It stops short of naming sibling tools for checking what is already registered (e.g. list_decision_tables).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_governanceB
Full governance validation of an instance against its model. Returns decision, has_governance, errors, dimensions_validated.
| Name | Required | Description | Default |
|---|---|---|---|
| schema_path | Yes | Path to the SDC data model XSD file. | |
| instance_path | No | Path to the XML instance file. Optional - if omitted, returns model governance status only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses the return fields and the model-only mode, but it does not state whether validation is read-only, what permissions are needed, or how errors are reported beyond returning an 'errors' field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core action front-loaded and the return fields listed immediately afterward. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter validation tool with no output schema, the description provides enough to understand the core behavior and returned fields. It could be stronger by clarifying read-only behavior or error semantics, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already fully documented in the input schema. The description adds no syntax or format detail beyond what the schema provides, which fits the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Full governance validation of an instance against its model.' This clearly distinguishes it from status-only siblings such as get_governance_status, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the behavior when instance_path is omitted, but that same information is already in the schema. It gives no guidance on when to choose this tool over get_governance_status or evaluate_decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_evidence_packA
Verify the integrity of an MTCP Evidence Pack by recomputing its evidence_pack_hash. Returns valid (bool), computed_hash, and expected_hash. Canonicalization follows RFC 8785: keys sorted, no whitespace, comma-colon separators, UTF-8.
| Name | Required | Description | Default |
|---|---|---|---|
| evidence_pack | Yes | JSON string of the MTCP Evidence Pack including its evidence_pack_hash field. Hash is recomputed over the remaining fields and compared. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It helpfully discloses the recomputation behavior, return fields, and RFC 8785 canonicalization rules, but it does not explicitly state that the operation is read-only, whether it has side effects, or what happens on malformed input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by return values and canonicalization details. Every sentence contributes useful information without redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the input expectations implicitly through the schema, explains the return fields since no output schema exists, and documents the canonicalization algorithm. It is nearly complete for a verification tool, though it could mention whether the operation is purely read-only and how errors are surfaced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage, and the schema already explains that the JSON string must include evidence_pack_hash and that the hash is recomputed over remaining fields. The description does not add parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (verify) and resource (MTCP Evidence Pack), and explains the exact mechanism: recomputing evidence_pack_hash. It distinguishes the tool from siblings such as evaluate_decision and validate_governance by focusing narrowly on integrity verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear that this tool is for integrity verification via hash recomputation, giving an agent enough context to select it. However, it does not explicitly state when not to use it or name an alternative for broader governance validation.
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.
9 tool updates
v4.3.1- First observed
evaluate_decision - First observed
evaluate_transition - First observed
get_allowed_transitions - First observed
get_governance_status - First observed
list_decision_tables - First observed
record_provenance - First observed
register_decision_table - First observed
validate_governance - First observed
verify_evidence_pack
TDQS
Scored across 9 tools
Each tool targets a distinct resource and action, but there are two close pairs: get_allowed_transitions vs evaluate_transition (enumerate vs decide) and get_governance_status vs validate_governance (report dimensions vs validate an instance). Descriptions do make the boundaries explicit, so misselection risk is low but non-zero.
All nine tools follow a strict verb_noun snake_case pattern (evaluate_*, get_*, validate_*, record_*, register_*, list_*, verify_*). The repeated verbs are used semantically consistently, with no camelCase or bare-noun outliers.
Nine tools is squarely in the well-scoped range and each maps to a concrete governance step: policy registration, policy lookup, decision evaluation, governance validation, transition discovery/authorization, provenance, and evidence verification. No filler or duplicate tools.
Core lifecycle is covered: register/list/evaluate decision tables, validate governance, inspect and evaluate transitions, verify evidence packs. Gaps remain around provenance (record only, no read/query tool), no evidence pack construction (verify only), and no deprecation/removal for registered tables, but these are workaroundable rather than blocking.
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Evidence-readiness MCP server: validate, audit, and score briefs, memos, and evidence packs.
An MCP server that provides Javelin Standalone Guardrails
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for querying the DodaOne governance framework, enabling users to retrieve governance information and evaluate proposed actions.2 npmMIT
- FlicenseNot gradedqualityCmaintenanceMCP server that evaluates agent actions against a Policy State Machine, emits a tamper-evident audit trail, and dispatches approved transitions to internal or federated handlers.-
- AlicenseBqualityDmaintenanceA governance and policy enforcement gateway for MCP servers that provides hard guardrails, dynamic parameter bounds, human-in-the-loop approvals, and audit telemetry.24 npmMIT
- AlicenseNot gradedqualityAmaintenanceMCP server wrapping the toolgovern CLI as a single generic run tool for agent-tool policy validation.Apache 2.0