inspect_governance_rules
inspect_governance_rules lists the governing rules for one asset: every deployed instruction decision from the current deployment publication that applies to the asset, optionally narrowed to one canonical scenario. Each rule is summarized from allow-listed published fields — decision, reason, scenario, enforcement mode, resolution provenance, policy provenance — never from raw policy prose. It is an operationally pure read — it changes nothing and records nothing — and clients that present hyphenated tool names can call it as inspect-governance-rules.
When to useDirect link to When to use
Use this tool to browse or audit the rule set itself:
- "What rules apply to
employees, and why do they apply?" — including how each rule reached the asset (direct selector, collection membership, or taxonomy match). - To review enforcement posture: which rules are
enforceableversusadvisory, and theirenforce/monitor/advisoryenforcement modes. - To gather
decision_idvalues for follow-upexplain_whycalls.
Versus get_decision_context: both tools read the same instruction rows and cite the same record shape, but get_decision_context additionally derives an effective_decision (the single winning verdict) and structured business_context. inspect_governance_rules returns the ranked rule list only — use it when you want the rules, and get_decision_context when you want the rules plus the bottom line. For a verdict on one concrete proposed use, use authorize_use instead.
InputDirect link to Input
| Parameter | Type | Required | Description |
|---|---|---|---|
asset | object | Yes | Reference to a governed table or column. |
asset.database | string | Yes | Normalized database name, as shown in the catalog. |
asset.schema | string | Yes | Normalized schema name. |
asset.table | string | Yes | Normalized table name. |
asset.column | string | No | Normalized column name. Omit it for a table-level reference. |
scenario_key | string | No | A canonical scenario key (for example access.read) to narrow the read to one scenario. Non-canonical values are rejected with invalid_parameters. |
The schema is strict: unknown keys are rejected with invalid_parameters. A table-level reference returns rules scoped to the table and to its columns.
OutputDirect link to Output
A successful call returns one JSON payload discriminated by state. When the state is answered:
| Field | Description |
|---|---|
state | "answered". |
asset | The resolved asset scope; column is always present and null for table-level. |
scenario_key | The scenario filter that was applied, or null for all scenarios. |
rules | The active instruction rules (at least one), in rank order: column-level before table-level, then more explicit resolution (selector over collection over taxonomy), then higher priority, then the more restrictive decision. |
publication | Current-publication provenance: publication_id, published_at. |
evaluated_at | The RFC 3339 UTC instant this listing filtered validity windows at. Present in every state. |
Each entry in rules is the same instruction record shape get_decision_context returns in decisions: decision_id, instruction_key, instruction_family, scenario_key, scenario_lane, category, priority, weight, enforcement_mode, decision, decision_reason, parameters (the extracted policy parameters, served verbatim — keys inside follow the policy YAML authoring convention), scope, provenance (policy_id, policy_version_id, policy_name, version_number), primary_resolution_source, resolution_paths, effective_from, effective_until, conflict_status, conflict_group_id, and conflicts_with. See get_decision_context for the field-by-field description.
There is deliberately no effective_decision field: this tool describes the rule set without collapsing it to a verdict.
Rules are served as authoredDirect link to Rules are served as authored
The listing applies the same validity filter as the decision-bearing tools — a rule outside its window at evaluated_at does not appear, and each returned rule shows its own effective_from / effective_until. It does not apply purpose or actor substitution: what you see is what was authored. A usage_guidance rule reads here exactly as written, even where an authorize_use call would resolve it differently for a particular purpose or a particular token role.
That is the point of this tool. It answers "what do our policies say about this asset", not "what would this agent be told". For the second question, call authorize_use.
Answer statesDirect link to Answer states
All three typed states are possible:
answered— as above.review_required— published rules exist but must not be presented as a settled listing.reason_codeisconflicted_published_state(rules in scope conflict; the payload adds aconflictgroup carrying every opposing source) ordecision_requires_review(the top-ranked rule is an explicitrequire_review). The payload keepsrulesand addsnext_actions.not_enough_published_state—reason_codeisno_current_publication,no_published_instruction_state(no published rule covers this asset and scenario — never returned as an empty rule list),unresolved_published_target(withunresolved_targetsdetails), ornot_currently_effective(rules exist for this asset and scenario, but none is inside its validity window atevaluated_at). The payload carries the asset echo, a fixedmessage, andnext_actions.
See Typed answer states for the full model and reason-code semantics.
ExampleDirect link to Example
Request arguments:
{
"asset": {
"database": "master",
"schema": "public",
"table": "employees"
},
"scenario_key": "access.read"
}
Response:
{
"state": "answered",
"asset": {
"database": "master",
"schema": "public",
"table": "employees",
"column": null
},
"scenario_key": "access.read",
"rules": [
{
"decision_id": "accef000-0000-4000-8000-000000000040",
"instruction_key": "role_grant:spec.accessControl.deniedRoles:public:deny",
"instruction_family": "role_grant",
"scenario_key": "access.read",
"scenario_lane": "platform",
"category": "enforceable",
"priority": 2,
"weight": 1,
"enforcement_mode": "enforce",
"decision": "deny",
"decision_reason": "employee-data-access v1 role_grant:spec.accessControl.deniedRoles:public:deny -> deny on master.public.employees",
"parameters": {
"action": "deny",
"role": "PUBLIC"
},
"scope": {
"database": "master",
"schema": "public",
"table": "employees",
"column": null
},
"provenance": {
"policy_id": "accef000-0000-4000-8000-000000000041",
"policy_version_id": "accef000-0000-4000-8000-000000000042",
"policy_name": "Customer 360 employee data access",
"version_number": 1
},
"primary_resolution_source": "selector",
"resolution_paths": [{ "source": "selector", "ref": null }],
"conflict_status": "none",
"conflict_group_id": null,
"conflicts_with": []
}
],
"publication": {
"publication_id": "accef000-0000-4000-8000-000000000001",
"published_at": "2026-07-16T00:00:00.000Z"
}
}
Without the scenario_key filter, the same asset returns its full rule set across all scenarios (the sample workspace returns 25 rules for employees).
Limits and notesDirect link to Limits and notes
scenario_keymust be canonical. Free-text intents are not accepted here; there is noproposed_useoruseparameter on this tool. See Scenarios for the vocabulary, or take valid keys per asset fromdiscover_context.- Summaries only. Rules are composed from allow-listed published instruction fields. Raw policy source is never returned; read the policy itself in the app if you need the authored YAML.
- Conflicts are never ranked away. A conflict anywhere in the applicable rules turns the listing into
review_requiredwith every opposing source attached — the tool will not present conflicted state as a settled answer. - Metering. Every call that passes input validation consumes one MCP call before any read; over quota, the call fails with
quota_exceeded. Calls rejected withinvalid_parametersare not metered. - Error codes.
asset_not_found(the reference does not resolve in the workspace's current catalog — a cross-workspace reference is indistinguishable from not found),invalid_parameters,read_failed, plus the sharedunauthorized,auth_unavailable,rate_limited,quota_exceeded.
RelatedDirect link to Related
get_decision_context— the same rules plus the effective decision and business contextauthorize_use— an advisory verdict for one proposed useexplain_why— explain one cited rule bydecision_id- Governance model — policies, instructions, and publications
- Typed answer states — states and reason codes in depth
- MCP schemas — full input and output schema reference