Decision Gate MCP Tools
Download: tooling.json (326 KB) Download: openapi/decision-gate.json (408 KB)
Tool detail pages
scenario_define- Register a ScenarioSpec, validate it, and return the canonical hash used for integrity checks.scenario_start- Create a new run state for a scenario and optionally emit entry packets.scenario_status- Fetch a read-only run snapshot and safe summary without changing state.scenario_next- Evaluate gates in response to an agent-driven next request.scenario_submit- Submit external artifacts into run state for audit and later evaluation.scenario_trigger- Submit a trigger event (scheduler/external) and evaluate the run.evidence_query- Query an evidence provider with full run context and disclosure policy.runpack_export- Export deterministic runpack artifacts for offline verification.runpack_verify- Verify a runpack manifest and artifacts offline.providers_list- List registered evidence providers and capabilities summary.provider_contract_get- Fetch the canonical provider contract JSON and hash for a provider.provider_check_schema_get- Fetch check schema details (params/result/comparators) for a provider.schemas_register- Register a data shape schema for a tenant and namespace.schemas_list- List registered data shapes for a tenant and namespace.schemas_get- Fetch a specific data shape by identifier and version.scenarios_list- List registered scenarios for a tenant and namespace.precheck- Evaluate a scenario against asserted data without mutating state.decision_gate_docs_search- Search Decision Gate documentation for runtime guidance.typed_providers_import- Import OpenAPI into typed provider artifacts and register a profile version.typed_providers_register- Register prebuilt typed provider contract + runtime profile artifacts.typed_providers_list- List typed provider lifecycle catalogs and registered versions.typed_providers_get- Fetch typed provider artifacts + lifecycle metadata for one version.typed_providers_activate- Activate a typed provider lifecycle version.typed_providers_deprecate- Deprecate a typed provider lifecycle version, with optional active rollback.
This document summarizes the MCP tool surface and expected usage. Full schemas are in tooling.json, with supporting schemas under schemas/ and examples under examples/.
Lifecycle quickstart
scenario_defineregisters and validates a ScenarioSpec.scenario_startcreates a run and optionally issues entry packets.scenario_nextadvances an agent-driven run;scenario_triggeradvances time/external triggers.scenario_statuspolls run state without mutating it.scenario_submitappends external artifacts for audit and later checks.runpack_exportandrunpack_verifysupport offline verification.
Artifact references
authoring.md: authoring formats and normalization guidance.[scenario.json](/downloads/decision-gate/examples/scenario.json): full ScenarioSpec example.examples/scenario.ron: authoring-friendly ScenarioSpec example.[run-config.json](/downloads/decision-gate/examples/run-config.json): run config example for scenario_start.[decision-gate.toml](/downloads/decision-gate/examples/decision-gate.toml): MCP config example for providers.
| Tool | Description |
|---|---|
| scenario_define | Register a ScenarioSpec, validate it, and return the canonical hash used for integrity checks. |
| scenario_start | Create a new run state for a scenario and optionally emit entry packets. |
| scenario_status | Fetch a read-only run snapshot and safe summary without changing state. |
| scenario_next | Evaluate gates in response to an agent-driven next request. |
| scenario_submit | Submit external artifacts into run state for audit and later evaluation. |
| scenario_trigger | Submit a trigger event (scheduler/external) and evaluate the run. |
| evidence_query | Query an evidence provider with full run context and disclosure policy. |
| runpack_export | Export deterministic runpack artifacts for offline verification. |
| runpack_verify | Verify a runpack manifest and artifacts offline. |
| providers_list | List registered evidence providers and capabilities summary. |
| provider_contract_get | Fetch the canonical provider contract JSON and hash for a provider. |
| provider_check_schema_get | Fetch check schema details (params/result/comparators) for a provider. |
| schemas_register | Register a data shape schema for a tenant and namespace. |
| schemas_list | List registered data shapes for a tenant and namespace. |
| schemas_get | Fetch a specific data shape by identifier and version. |
| scenarios_list | List registered scenarios for a tenant and namespace. |
| precheck | Evaluate a scenario against asserted data without mutating state. |
| decision_gate_docs_search | Search Decision Gate documentation for runtime guidance. |
| typed_providers_import | Import OpenAPI into typed provider artifacts and register a profile version. |
| typed_providers_register | Register prebuilt typed provider contract + runtime profile artifacts. |
| typed_providers_list | List typed provider lifecycle catalogs and registered versions. |
| typed_providers_get | Fetch typed provider artifacts + lifecycle metadata for one version. |
| typed_providers_activate | Activate a typed provider lifecycle version. |
| typed_providers_deprecate | Deprecate a typed provider lifecycle version, with optional active rollback. |
scenario_define
Register a ScenarioSpec, validate it, and return the canonical hash used for integrity checks.
Inputs
spec(required): Scenario specification to register.
Outputs
scenario_id(required): Scenario identifier.spec_hash(required): Type: object.
Notes
- Use before starting runs; scenario_id becomes the stable handle for later calls.
- Validates stage/gate/condition IDs, RET trees, and condition references.
- Spec hash is deterministic; store it for audit and runpack integrity.
- Fails closed on invalid specs or duplicate scenario IDs.
Example
Register the example scenario spec.
Input:
{
"spec": {
"conditions": [
{
"comparator": "equals",
"condition_id": "env_is_prod",
"expected": "production",
"policy_tags": [],
"query": {
"check_id": "get",
"params": {
"key": "DEPLOY_ENV"
},
"provider_id": "env"
}
},
{
"comparator": "equals",
"condition_id": "after_freeze",
"expected": true,
"policy_tags": [],
"query": {
"check_id": "after",
"params": {
"timestamp": 1710000000000
},
"provider_id": "time"
}
}
],
"default_tenant_id": null,
"namespace_id": 1,
"policies": [],
"scenario_id": "example-scenario",
"schemas": [],
"spec_version": "v1",
"stages": [
{
"advance_to": {
"kind": "terminal"
},
"entry_packets": [
{
"content_type": "application/json",
"expiry": null,
"packet_id": "packet-hello",
"payload": {
"kind": "json",
"value": {
"message": "hello",
"purpose": "scenario entry packet"
}
},
"policy_tags": [],
"schema_id": "schema-hello",
"visibility_labels": [
"public"
]
}
],
"gates": [
{
"gate_id": "env_gate",
"requirement": {
"Condition": "env_is_prod"
}
},
{
"gate_id": "time_gate",
"requirement": {
"Condition": "after_freeze"
}
}
],
"on_timeout": "fail",
"stage_id": "main",
"timeout": null
}
]
}
}
Output:
{
"scenario_id": "example-scenario",
"spec_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
}
}
scenario_start
Create a new run state for a scenario and optionally emit entry packets.
Inputs
issue_entry_packets(required): Issue entry packets immediately.run_config(required): Run configuration and dispatch targets.scenario_id(required): Scenario identifier.started_at(required): Caller-supplied run start timestamp.
Outputs
current_stage_id(required): Current stage identifier.decisions(required): Type: array.dispatch_targets(required): Type: array.gate_evals(required): Type: array.namespace_id(required): Namespace identifier.packets(required): Type: array.run_id(required): Run identifier.scenario_id(required): Scenario identifier.spec_hash(required): Type: object.stage_entered_at(required): One of: object, object.status(required): Type: string.submissions(required): Type: array.tenant_id(required): Tenant identifier.tool_calls(required): Type: array.triggers(required): Type: array.
Notes
- Requires RunConfig (tenant_id, run_id, scenario_id, dispatch_targets).
- Use started_at to record the caller-supplied start timestamp.
- If issue_entry_packets is true, entry packets are disclosed immediately.
- Fails closed if run_id already exists or scenario_id is unknown.
Example
Start a run for the example scenario and issue entry packets.
Input:
{
"issue_entry_packets": true,
"run_config": {
"dispatch_targets": [
{
"agent_id": "agent-alpha",
"kind": "agent"
}
],
"namespace_id": 1,
"policy_tags": [],
"run_id": "run-0001",
"scenario_id": "example-scenario",
"tenant_id": 1
},
"scenario_id": "example-scenario",
"started_at": {
"kind": "unix_millis",
"value": 1710000000000
}
}
Output:
{
"current_stage_id": "main",
"decisions": [],
"dispatch_targets": [
{
"agent_id": "agent-alpha",
"kind": "agent"
}
],
"gate_evals": [],
"namespace_id": 1,
"packets": [],
"run_id": "run-0001",
"scenario_id": "example-scenario",
"spec_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"stage_entered_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"status": "active",
"submissions": [],
"tenant_id": 1,
"tool_calls": [],
"triggers": []
}
scenario_status
Fetch a read-only run snapshot and safe summary without changing state.
Inputs
request(required): Status request payload.scenario_id(required): Scenario identifier.
Outputs
current_stage_id(required): Current stage identifier.issued_packet_ids(required): Type: array.last_decision(required, nullable): One of: null, object.namespace_id(optional): Namespace identifier.run_id(required): Run identifier.safe_summary(required, nullable): One of: null, object.scenario_id(required): Scenario identifier.status(required): Type: string.
Notes
- Use for polling or UI state; does not evaluate gates.
- Safe summaries omit evidence values and may include retry hints.
- Returns issued packet IDs to help track disclosures.
Example
Poll run status without advancing the run.
Input:
{
"request": {
"correlation_id": null,
"namespace_id": 1,
"requested_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"run_id": "run-0001",
"tenant_id": 1
},
"scenario_id": "example-scenario"
}
Output:
{
"current_stage_id": "main",
"issued_packet_ids": [],
"last_decision": null,
"run_id": "run-0001",
"safe_summary": null,
"scenario_id": "example-scenario",
"status": "active"
}
scenario_next
Evaluate gates in response to an agent-driven next request.
Inputs
feedback(optional, nullable): Optional feedback level override for scenario_next.request(required): Next request payload from an agent.scenario_id(required): Scenario identifier.
Outputs
decision(required): Type: object.feedback(optional, nullable): One of: null, object.packets(required): Type: array.status(required): Type: string.
Notes
- Idempotent by trigger_id; repeated calls return the same decision.
- Records decision, evidence, and packet disclosures in run state.
- Requires an active run; completed or failed runs do not advance.
- Optional feedback can include gate trace or evidence when permitted by server feedback policy.
Example
Example 1: Evaluate the next agent-driven step for a run.
Input:
{
"request": {
"agent_id": "agent-alpha",
"correlation_id": null,
"namespace_id": 1,
"run_id": "run-0001",
"tenant_id": 1,
"time": {
"kind": "unix_millis",
"value": 1710000000000
},
"trigger_id": "trigger-0001"
},
"scenario_id": "example-scenario"
}
Output:
{
"decision": {
"correlation_id": null,
"decided_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"decision_id": "decision-0001",
"outcome": {
"kind": "complete",
"stage_id": "main"
},
"seq": 0,
"stage_id": "main",
"trigger_id": "trigger-0001"
},
"packets": [],
"status": "completed"
}
Example 2: Evaluate a run and request trace feedback.
Input:
{
"feedback": "trace",
"request": {
"agent_id": "agent-alpha",
"correlation_id": null,
"namespace_id": 1,
"run_id": "run-0001",
"tenant_id": 1,
"time": {
"kind": "unix_millis",
"value": 1710000000000
},
"trigger_id": "trigger-0001"
},
"scenario_id": "example-scenario"
}
Output:
{
"decision": {
"correlation_id": null,
"decided_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"decision_id": "decision-0001",
"outcome": {
"kind": "complete",
"stage_id": "main"
},
"seq": 0,
"stage_id": "main",
"trigger_id": "trigger-0001"
},
"feedback": {
"gate_evaluations": [],
"level": "trace"
},
"packets": [],
"status": "completed"
}
scenario_submit
Submit external artifacts into run state for audit and later evaluation.
Inputs
request(required): Submission payload and metadata.scenario_id(required): Scenario identifier.
Outputs
record(required): Type: object.
Notes
- Payload is hashed and stored as a submission record.
- Payload is persisted in run state/runpack logs; do not send raw secrets.
- Does not advance the run by itself.
- Use for artifacts the model or operator supplies.
Example
Submit an external artifact for audit and later evaluation.
Input:
{
"request": {
"content_type": "application/json",
"correlation_id": null,
"namespace_id": 1,
"payload": {
"kind": "json",
"value": {
"artifact": "attestation",
"status": "approved"
}
},
"run_id": "run-0001",
"submission_id": "submission-0001",
"submitted_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"tenant_id": 1
},
"scenario_id": "example-scenario"
}
Output:
{
"record": {
"content_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"content_type": "application/json",
"correlation_id": null,
"payload": {
"kind": "json",
"value": {
"artifact": "attestation",
"status": "approved"
}
},
"run_id": "run-0001",
"submission_id": "submission-0001",
"submitted_at": {
"kind": "unix_millis",
"value": 1710000000000
}
}
}
scenario_trigger
Submit a trigger event (scheduler/external) and evaluate the run.
Inputs
scenario_id(required): Scenario identifier.trigger(required): Trigger event payload.
Outputs
decision(required): Type: object.packets(required): Type: array.status(required): Type: string.
Notes
- Trigger time is supplied by the caller; no wall-clock reads.
- Records the trigger event and resulting decision.
- Payload is persisted in run state/runpack logs; do not send raw secrets.
- Use for time-based or external system triggers.
Example
Advance a run from a scheduler or external trigger.
Input:
{
"scenario_id": "example-scenario",
"trigger": {
"correlation_id": null,
"kind": "tick",
"namespace_id": 1,
"payload": null,
"run_id": "run-0001",
"source_id": "scheduler-01",
"tenant_id": 1,
"time": {
"kind": "unix_millis",
"value": 1710000000000
},
"trigger_id": "trigger-0001"
}
}
Output:
{
"decision": {
"correlation_id": null,
"decided_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"decision_id": "decision-0001",
"outcome": {
"kind": "complete",
"stage_id": "main"
},
"seq": 0,
"stage_id": "main",
"trigger_id": "trigger-0001"
},
"packets": [],
"status": "completed"
}
evidence_query
Query an evidence provider with full run context and disclosure policy.
Inputs
context(required): Evidence context used for evaluation.query(required): Evidence query payload.
Outputs
result(required): Type: object.
Notes
- Disclosure policy may redact raw values; hashes/anchors still returned.
- Use for diagnostics or preflight checks; runtime uses the same provider logic.
- Requires provider_id, check_id, and full EvidenceContext.
Example
Query an evidence provider using the run context.
Input:
{
"context": {
"correlation_id": null,
"namespace_id": 1,
"run_id": "run-0001",
"scenario_id": "example-scenario",
"stage_id": "main",
"tenant_id": 1,
"trigger_id": "trigger-0001",
"trigger_time": {
"kind": "unix_millis",
"value": 1710000000000
}
},
"query": {
"check_id": "get",
"params": {
"key": "DEPLOY_ENV"
},
"provider_id": "env"
}
}
Output:
{
"result": {
"content_type": "text/plain",
"error": null,
"evidence_anchor": {
"anchor_type": "env",
"anchor_value": "DEPLOY_ENV"
},
"evidence_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"evidence_ref": null,
"lane": "verified",
"signature": null,
"value": {
"kind": "json",
"value": "production"
}
}
}
runpack_export
Export deterministic runpack artifacts for offline verification.
Inputs
generated_at(required): Timestamp recorded in the manifest.include_verification(required): Generate a verification report artifact.manifest_name(optional, nullable): Optional override for the manifest file name.namespace_id(required): Namespace identifier.output_dir(optional, nullable): Optional output directory (required for filesystem export).run_id(required): Run identifier.scenario_id(required): Scenario identifier.tenant_id(required): Tenant identifier.
Outputs
manifest(required): Type: object.report(required, nullable): One of: null, object.storage_uri(optional, nullable): Optional storage URI for managed runpack storage backends.
Notes
- Writes manifest and logs to output_dir; generated_at is recorded in the manifest.
- include_verification adds a verification report artifact.
- Export-time report.checked_files excludes verifier_report.json; offline runpack_verify checked_files includes it (+1 for the same runpack).
- Use after runs complete or for audit snapshots.
Example
Export a runpack with manifest metadata.
Input:
{
"generated_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"include_verification": false,
"manifest_name": "manifest.json",
"namespace_id": 1,
"output_dir": "/var/lib/decision-gate/runpacks/run-0001",
"run_id": "run-0001",
"scenario_id": "example-scenario",
"tenant_id": 1
}
Output:
{
"manifest": {
"artifacts": [
{
"artifact_id": "decision_log",
"content_type": "application/json",
"hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"kind": "decision_log",
"path": "decision_log.json",
"required": true
}
],
"generated_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"hash_algorithm": "sha256",
"integrity": {
"file_hashes": [
{
"hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"path": "decision_log.json"
}
],
"root_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
}
},
"manifest_version": "v1",
"namespace_id": 1,
"run_id": "run-0001",
"scenario_id": "example-scenario",
"spec_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"tenant_id": 1,
"verifier_mode": "offline_strict"
},
"report": null,
"storage_uri": null
}
runpack_verify
Verify a runpack manifest and artifacts offline.
Inputs
manifest_path(required): Manifest path relative to runpack root.runpack_dir(required): Runpack root directory.
Outputs
report(required): Type: object.status(required): Runpack verification status.
Notes
- Validates hashes, integrity root, and decision log structure.
- Fails closed on missing or tampered files.
- Use in CI or offline audit pipelines.
Example
Verify a runpack manifest and artifacts offline.
Input:
{
"manifest_path": "manifest.json",
"runpack_dir": "/var/lib/decision-gate/runpacks/run-0001"
}
Output:
{
"report": {
"checked_files": 12,
"errors": [],
"status": "pass"
},
"status": "pass"
}
providers_list
List registered evidence providers and capabilities summary.
Inputs
Outputs
providers(required): Type: array.
Notes
- Returns provider identifiers and transport metadata.
- Results are scoped by auth policy.
Example
List registered evidence providers.
Input:
{}
Output:
{
"providers": [
{
"checks": [
"get"
],
"provider_id": "env",
"transport": "builtin"
}
]
}
provider_contract_get
Fetch the canonical provider contract JSON and hash for a provider.
Inputs
provider_id(required): Provider identifier.
Outputs
contract(required): Type: object.contract_hash(required): Type: object.provider_id(required): Provider identifier.source(required): Contract source origin.version(required, nullable): Optional contract version label.
Notes
- Returns the provider contract as loaded by the MCP server.
- Includes a canonical hash for audit and reproducibility.
- Subject to provider disclosure policy and authz.
Example
Fetch the contract JSON for a provider.
Input:
{
"provider_id": "json"
}
Output:
{
"contract": {
"checks": [],
"config_schema": {
"additionalProperties": false,
"type": "object"
},
"description": "Reads JSON or YAML files and evaluates JSONPath.",
"name": "JSON Provider",
"notes": [],
"provider_id": "json",
"transport": "builtin"
},
"contract_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"provider_id": "json",
"source": "builtin",
"version": null
}
provider_check_schema_get
Fetch check schema details (params/result/comparators) for a provider.
Inputs
check_id(required): Provider check identifier.provider_id(required): Provider identifier.
Outputs
allowed_comparators(required): Comparator allow-list for this check.anchor_types(required): Anchor types emitted by this check.check_id(required): Check identifier.content_types(required): Content types for check output.contract_hash(required): Type: object.determinism(required): Determinism classification for provider checks.examples(required): Type: array.params_required(required): Whether params are required for this check.params_schema(required): JSON schema for check params.provider_id(required): Provider identifier.result_schema(required): JSON schema for check result value.
Notes
- Returns compiled schema metadata for a single check.
- Includes comparator allow-lists and check examples.
- Subject to provider disclosure policy and authz.
Example
Fetch check schema details for a provider.
Input:
{
"check_id": "path",
"provider_id": "json"
}
Output:
{
"allowed_comparators": [
"equals",
"in_set",
"exists",
"not_exists"
],
"anchor_types": [],
"check_id": "path",
"content_types": [
"application/json"
],
"contract_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"determinism": "external",
"examples": [],
"params_required": true,
"params_schema": {
"properties": {
"file": {
"type": "string"
},
"jsonpath": {
"type": "string"
}
},
"required": [
"file"
],
"type": "object"
},
"provider_id": "json",
"result_schema": {
"type": [
"null",
"string",
"number",
"boolean",
"array",
"object"
]
}
}
schemas_register
Register a data shape schema for a tenant and namespace.
Inputs
record(required): Type: object.
Outputs
record(required): Type: object.
Notes
- Schemas are immutable; registering the same version twice fails.
- Provide created_at to record when the schema was authored.
Example
Register a data shape schema.
Input:
{
"record": {
"created_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"description": "Asserted payload schema.",
"namespace_id": 1,
"schema": {
"additionalProperties": false,
"properties": {
"deploy_env": {
"type": "string"
}
},
"required": [
"deploy_env"
],
"type": "object"
},
"schema_id": "asserted_payload",
"tenant_id": 1,
"version": "v1"
}
}
Output:
{
"record": {
"created_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"description": "Asserted payload schema.",
"namespace_id": 1,
"schema": {
"additionalProperties": false,
"properties": {
"deploy_env": {
"type": "string"
}
},
"required": [
"deploy_env"
],
"type": "object"
},
"schema_id": "asserted_payload",
"tenant_id": 1,
"version": "v1"
}
}
schemas_list
List registered data shapes for a tenant and namespace.
Inputs
cursor(optional, nullable): One of: null, string.limit(optional): Maximum number of records to return.namespace_id(required): Namespace identifier.tenant_id(required): Tenant identifier.
Outputs
items(required): Type: array.next_token(required, nullable): One of: null, string.
Notes
- Requires tenant_id and namespace_id.
- Supports pagination via cursor + limit.
Example
List data shapes for a namespace.
Input:
{
"cursor": null,
"limit": 50,
"namespace_id": 1,
"tenant_id": 1
}
Output:
{
"items": [
{
"created_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"description": "Asserted payload schema.",
"namespace_id": 1,
"schema": {
"additionalProperties": false,
"properties": {
"deploy_env": {
"type": "string"
}
},
"required": [
"deploy_env"
],
"type": "object"
},
"schema_id": "asserted_payload",
"tenant_id": 1,
"version": "v1"
}
],
"next_token": null
}
schemas_get
Fetch a specific data shape by identifier and version.
Inputs
namespace_id(required): Namespace identifier.schema_id(required): Data shape identifier.tenant_id(required): Tenant identifier.version(required): Data shape version identifier.
Outputs
record(required): Type: object.
Notes
- Requires tenant_id, namespace_id, schema_id, and version.
- Fails closed when schema is missing.
Example
Fetch a data shape by identifier and version.
Input:
{
"namespace_id": 1,
"schema_id": "asserted_payload",
"tenant_id": 1,
"version": "v1"
}
Output:
{
"record": {
"created_at": {
"kind": "unix_millis",
"value": 1710000000000
},
"description": "Asserted payload schema.",
"namespace_id": 1,
"schema": {
"additionalProperties": false,
"properties": {
"deploy_env": {
"type": "string"
}
},
"required": [
"deploy_env"
],
"type": "object"
},
"schema_id": "asserted_payload",
"tenant_id": 1,
"version": "v1"
}
}
scenarios_list
List registered scenarios for a tenant and namespace.
Inputs
cursor(optional, nullable): One of: null, string.limit(optional): Maximum number of records to return.namespace_id(required): Namespace identifier.tenant_id(required): Tenant identifier.
Outputs
items(required): Type: array.next_token(required, nullable): One of: null, string.
Notes
- Requires tenant_id and namespace_id.
- Returns scenario identifiers and hashes.
Example
List scenarios for a namespace.
Input:
{
"cursor": null,
"limit": 50,
"namespace_id": 1,
"tenant_id": 1
}
Output:
{
"items": [
{
"namespace_id": 1,
"scenario_id": "example-scenario",
"spec_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
}
}
],
"next_token": null
}
precheck
Evaluate a scenario against asserted data without mutating state.
Inputs
data_shape(required): Type: object.namespace_id(required): Namespace identifier.payload(required): Asserted data payload.scenario_id(optional, nullable): One of: null, string.spec(optional, nullable): One of: null, ref decision-gate://contract/schemas/scenario.schema.json.stage_id(optional, nullable): One of: null, string.tenant_id(required): Tenant identifier.
Outputs
decision(required): One of: object, object, object, object, object.gate_evaluations(required): Type: array.
Notes
- Validates asserted data against a registered shape.
- Does not mutate run state; intended for simulation.
Example
Precheck a scenario with asserted data.
Input:
{
"data_shape": {
"schema_id": "asserted_payload",
"version": "v1"
},
"namespace_id": 1,
"payload": {
"deploy_env": "production"
},
"scenario_id": "example-scenario",
"spec": null,
"stage_id": null,
"tenant_id": 1
}
Output:
{
"decision": {
"kind": "hold",
"summary": {
"policy_tags": [],
"retry_hint": "await_evidence",
"status": "hold",
"unmet_gates": [
"ready"
]
}
},
"gate_evaluations": []
}
decision_gate_docs_search
Search Decision Gate documentation for runtime guidance.
Inputs
max_sections(optional): Maximum number of sections to return (default 3, hard cap 10).query(required): Search query for documentation sections.
Outputs
docs_covered(required): Type: array.sections(required): Type: array.suggested_followups(required): Role-aware follow-up prompts.
Notes
- Use for quick lookups on evidence flow, comparators, and provider semantics.
- Returns ranked sections with role tags and suggested follow-ups.
- Search is deterministic and scoped to the configured doc catalog.
Example
Search for evidence flow and trust lane guidance.
Input:
{
"max_sections": 2,
"query": "precheck vs live run trust lanes"
}
Output:
{
"docs_covered": [
{
"doc_id": "evidence_flow_and_execution_model",
"doc_role": "reasoning",
"doc_title": "Evidence Flow + Execution Model"
}
],
"sections": [
{
"content": "...",
"doc_id": "evidence_flow_and_execution_model",
"doc_role": "reasoning",
"doc_title": "Evidence Flow + Execution Model",
"heading": "Core Data Flow",
"rank": 0
}
],
"suggested_followups": [
"Refine the query with comparator or provider keywords for targeted guidance."
]
}
typed_providers_import
Import OpenAPI into typed provider artifacts and register a profile version.
Inputs
activate(optional): Activate this version after registration.allow_unsafe_methods(optional): Allow non-safe HTTP methods during import.credential_bindings(required): OpenAPI security scheme id to structured credential binding metadata (locator + value_render). Use {} for unauthenticated imports.external_ref_mode(optional): Optional external $ref resolution policy.max_response_bytes(optional): Optional runtime response-size limit override.media_support_mode(optional): Optional media support mode.namespace_id(required): Namespace identifier.openapi(required): OpenAPI 3.x document as JSON.openapi_conformance_mode(optional): Conformance mode: strict blocks unsupported constructs; audit reports without activation.openapi_semantics_mode(optional): Optional OpenAPI semantics mode override.openapi_source_path(optional): Optional source path used to resolve local-file refs.operation_allowlist(required): Explicit operationId allowlist for strict import.outbound_max_inflight(optional): Optional outbound inflight limit override.provider_id(required): Typed provider identifier.retry_initial_backoff_ms(optional): Optional outbound retry initial-backoff override.retry_max_attempts(optional): Optional outbound retry max-attempts override.retry_max_backoff_ms(optional): Optional outbound retry max-backoff override.tenant_id(required): Tenant identifier.timeout_ms(optional): Optional runtime timeout override in milliseconds.version(required): Lifecycle version identifier.
Outputs
active_version(required, nullable): One of: null, string.conformance_summary(required): Type: object.contract_hash(required): Type: object.operation_count(required): Type: integer.profile_digest(required): Type: object.provider_id(required): Typed provider identifier.register_outcome(required): Typed profile lifecycle registration outcome.source_digest(required): Type: object.version(required): Lifecycle version identifier.
Notes
- Requires tenant_id and namespace_id scope fields.
- Strict fail-closed import requires explicit operation allowlist.
- Requires explicit credential_bindings mapping; use {} for unauthenticated imports.
- Supports bounded outbound limits and retry policy for generated runtime profiles.
- Generates deterministic provider contract + runtime profile artifacts.
- Registers lifecycle metadata and optionally activates the imported version.
Example
Import an OpenAPI document into typed artifacts.
Input:
{
"activate": true,
"allow_unsafe_methods": false,
"credential_bindings": {},
"external_ref_mode": "local_file_only",
"max_response_bytes": 1048576,
"media_support_mode": "json_only",
"namespace_id": 1,
"openapi": {
"openapi": "3.1.0",
"paths": {
"/assets": {
"get": {
"operationId": "listAssets",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"additionalProperties": false,
"properties": {
"items": {
"type": "array"
}
},
"required": [
"items"
],
"type": "object"
}
}
},
"description": "ok"
}
}
}
}
}
},
"openapi_conformance_mode": "strict",
"openapi_semantics_mode": "auto",
"operation_allowlist": [
"listAssets"
],
"outbound_max_inflight": 32,
"provider_id": "asset_api",
"retry_initial_backoff_ms": 100,
"retry_max_attempts": 3,
"retry_max_backoff_ms": 2000,
"tenant_id": 1,
"timeout_ms": 5000,
"version": "2026-02-17.1"
}
Output:
{
"active_version": "2026-02-17.1",
"conformance_summary": {
"activation_allowed": true,
"import_mode": "strict",
"supported_feature_hits": [
"openapi.version.3_1"
],
"supported_features_covered": 1,
"unsupported_codes": [],
"unsupported_construct_count": 0,
"unsupported_findings": []
},
"contract_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"operation_count": 1,
"profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"provider_id": "asset_api",
"register_outcome": "registered",
"source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"version": "2026-02-17.1"
}
typed_providers_register
Register prebuilt typed provider contract + runtime profile artifacts.
Inputs
activate(optional): Activate this version after registration.contract(required): Type: object.namespace_id(required): Namespace identifier.provider_id(required): Typed provider identifier.runtime_profile(required): Typed runtime profile artifact.tenant_id(required): Tenant identifier.version(required): Lifecycle version identifier.
Outputs
active_version(required, nullable): One of: null, string.contract_hash(required): Type: object.operation_count(required): Type: integer.profile_digest(required): Type: object.provider_id(required): Typed provider identifier.register_outcome(required): Typed profile lifecycle registration outcome.source_digest(required): Type: object.version(required): Lifecycle version identifier.
Notes
- Requires tenant_id and namespace_id scope fields.
- Validates typed transport/provider identity consistency.
- Validates runtime profile digest integrity before registration.
- Registers lifecycle metadata and optionally activates the version.
Example
Register prebuilt typed provider artifacts.
Input:
{
"activate": false,
"contract": {
"checks": [],
"config_schema": {
"additionalProperties": false,
"type": "object"
},
"description": "Typed API provider",
"name": "Asset API",
"notes": [],
"provider_id": "asset_api",
"transport": "typed"
},
"namespace_id": 1,
"provider_id": "asset_api",
"runtime_profile": {
"anchors": {
"anchor_type": "typed_request"
},
"operations": [
{
"allowed_status_codes": [
200
],
"auth": {
"alternatives": [
{
"kind": "none"
}
]
},
"bindings": [],
"check_id": "listAssets",
"content_types": [
"application/json"
],
"extraction": {
"kind": "json_body"
},
"method": "GET",
"operation_id": "listAssets",
"target": "https://api.example.com/assets"
}
],
"profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"profile_version": "typed-runtime-v4",
"protocol": "openapi_http",
"provider_id": "asset_api",
"security": {
"allow_http": false,
"allow_private_networks": false,
"allowed_hosts": null,
"max_response_bytes": 1048576,
"outbound_max_inflight": 32,
"retry": {
"initial_backoff_ms": 100,
"max_attempts": 3,
"max_backoff_ms": 2000
},
"timeout_ms": 5000
},
"source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
}
},
"tenant_id": 1,
"version": "2026-02-17.2"
}
Output:
{
"active_version": null,
"contract_hash": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"operation_count": 1,
"profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"provider_id": "asset_api",
"register_outcome": "registered",
"source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"version": "2026-02-17.2"
}
typed_providers_list
List typed provider lifecycle catalogs and registered versions.
Inputs
cursor(optional, nullable): One of: null, string.limit(optional): Maximum number of provider catalogs to return.namespace_id(required): Namespace identifier.tenant_id(required): Tenant identifier.
Outputs
items(required): Type: array.next_token(required, nullable): One of: null, string.
Notes
- Requires tenant_id and namespace_id scope fields.
- Supports deterministic pagination via cursor + limit.
- Results are scoped by provider discovery disclosure policy.
Example
List typed provider lifecycle catalogs.
Input:
{
"cursor": null,
"limit": 50,
"namespace_id": 1,
"tenant_id": 1
}
Output:
{
"items": [
{
"active_version": "2026-02-17.1",
"provider_id": "asset_api",
"versions": [
{
"deprecated": false,
"profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"version": "2026-02-17.1"
}
]
}
],
"next_token": null
}
typed_providers_get
Fetch typed provider artifacts + lifecycle metadata for one version.
Inputs
namespace_id(required): Namespace identifier.observed_profile_digest(optional, nullable): Optional profile digest observation for drift checks.observed_source_digest(optional, nullable): Optional source digest observation for drift checks.provider_id(required): Typed provider identifier.tenant_id(required): Tenant identifier.version(optional, nullable): One of: null, string.
Outputs
active_version(required, nullable): One of: null, string.catalog_version(required): Typed lifecycle catalog schema version.contract(required): Type: object.drift_status(required, nullable): One of: null, string.provider_id(required): Typed provider identifier.record(required): Type: object.runtime_profile(required): Typed runtime profile artifact.selected_version(required): Selected lifecycle version.source(required): How the typed artifacts were registered.
Notes
- Requires tenant_id and namespace_id scope fields.
- Returns provider contract + runtime profile for the selected version.
- Can evaluate digest drift against observed source/profile digests.
- If version is omitted, active version is selected.
Example
Fetch typed provider artifacts and lifecycle metadata.
Input:
{
"namespace_id": 1,
"observed_profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"observed_source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"provider_id": "asset_api",
"tenant_id": 1,
"version": "2026-02-17.1"
}
Output:
{
"active_version": "2026-02-17.1",
"catalog_version": "typed-lifecycle-v1",
"contract": {
"checks": [],
"config_schema": {
"additionalProperties": false,
"type": "object"
},
"description": "Typed API provider",
"name": "Asset API",
"notes": [],
"provider_id": "asset_api",
"transport": "typed"
},
"drift_status": "in_sync",
"provider_id": "asset_api",
"record": {
"deprecated": false,
"profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"version": "2026-02-17.1"
},
"runtime_profile": {
"anchors": {
"anchor_type": "typed_request"
},
"operations": [
{
"allowed_status_codes": [
200
],
"auth": {
"alternatives": [
{
"kind": "none"
}
]
},
"bindings": [],
"check_id": "listAssets",
"content_types": [
"application/json"
],
"extraction": {
"kind": "json_body"
},
"method": "GET",
"operation_id": "listAssets",
"target": "https://api.example.com/assets"
}
],
"profile_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
},
"profile_version": "typed-runtime-v4",
"protocol": "openapi_http",
"provider_id": "asset_api",
"security": {
"allow_http": false,
"allow_private_networks": false,
"allowed_hosts": null,
"max_response_bytes": 1048576,
"outbound_max_inflight": 32,
"retry": {
"initial_backoff_ms": 100,
"max_attempts": 3,
"max_backoff_ms": 2000
},
"timeout_ms": 5000
},
"source_digest": {
"algorithm": "sha256",
"value": "5c3a5b6bce0f4a2c9e22c4fa6a1e6d8d90b0f2dfed1b7f1e9b3d3b3d1f0c9b21"
}
},
"selected_version": "2026-02-17.1",
"source": "openapi_import"
}
typed_providers_activate
Activate a typed provider lifecycle version.
Inputs
namespace_id(required): Namespace identifier.provider_id(required): Typed provider identifier.tenant_id(required): Tenant identifier.version(required): Lifecycle version to activate.
Outputs
active_version(required): Activated version.previous_active_version(required, nullable): One of: null, string.provider_id(required): Typed provider identifier.
Notes
- Requires tenant_id and namespace_id scope fields.
- Activation records prior active versions for rollback.
- Deprecated versions cannot be activated.
Example
Activate a typed provider version.
Input:
{
"namespace_id": 1,
"provider_id": "asset_api",
"tenant_id": 1,
"version": "2026-02-17.2"
}
Output:
{
"active_version": "2026-02-17.2",
"previous_active_version": "2026-02-17.1",
"provider_id": "asset_api"
}
typed_providers_deprecate
Deprecate a typed provider lifecycle version, with optional active rollback.
Inputs
namespace_id(required): Namespace identifier.provider_id(required): Typed provider identifier.rollback_if_active(optional): Rollback active version before deprecating when required.tenant_id(required): Tenant identifier.version(required): Lifecycle version to deprecate.
Outputs
active_version(required, nullable): One of: null, string.deprecated_version(required): Deprecated lifecycle version.provider_id(required): Typed provider identifier.rolled_back_from(required, nullable): One of: null, string.
Notes
- Requires tenant_id and namespace_id scope fields.
- Deprecating the active version requires explicit rollback_if_active=true.
- Rollback selects the most recent non-deprecated prior active version.
Example
Deprecate a typed provider version with rollback.
Input:
{
"namespace_id": 1,
"provider_id": "asset_api",
"rollback_if_active": true,
"tenant_id": 1,
"version": "2026-02-17.2"
}
Output:
{
"active_version": "2026-02-17.1",
"deprecated_version": "2026-02-17.2",
"provider_id": "asset_api",
"rolled_back_from": "2026-02-17.2"
}