Docs · Start Overview Choose the right entry point and understand the pre-alpha boundary. Docs · Start Getting started Install the pinned toolchain and validate the repository locally. Docs · Start Core contract examples Compile the first Agent, typed Tool, Model stream, and explicit protocol mapping without runtime dependencies. Docs · Start Typed Agent Generate and pin typed schemas, then bind the first-party OpenAI and Anthropic adapters. Docs · Start In-process Agent Run a typed Agent without HTTP while preserving PostgreSQL durability, authorization, recovery, and owned roles. Docs · Start Durable admission Atomically commit authenticated intent, database time, the first event, and the initial checkpoint. Docs · Start Durable runs and results Submit with a durable ingress key, recover the original run, and read a verified public result. Docs · Understand Compile a graph Build a schema-pinned graph, validate its topology, and freeze its canonical digest. Docs · Understand Subgraphs and loops Compose shared-state subgraphs, finite loops, and explicit recovery-safe return paths. Docs · Understand Skill composition Choose capability bundles, shared-state subgraphs, durable child runs, and guarded MCP Skills without creating a second runtime. Docs · Understand Durability model Learn how journal, checkpoint, lease, fence, and recovery evidence fit together. Docs · Understand Durable Graph runtime Register exact executable code, replay noninitial state, and drive deterministic bounded sibling batches under one fence. Docs · Understand Durable Agent Loop Commit lifecycle handoffs and execute one tenant-scoped durable scheduling quantum. Docs · Understand Durable invocations Execute exact model and tool attempts with durable starts, staged ordered Tool coordination, streaming validation, and no-dispatch terminal recovery. Docs · Understand Provider-native Agent Compile and operate the durable multi-turn graph with bounded output repair, ordered parallel read-only Tools, write barriers, policy, accounting, and cancellation evidence. Docs · Integrate Local Rust Tools Generate digest-pinned schemas, register typed local code, and preserve the durable invocation boundary. Docs · Integrate AgentService v1 Authorize and expose exact durable Agent revisions through the versioned embedding boundary. Docs · Integrate Agent HTTP v1 Submit, recover, read and cancel through authenticated bounded JSON HTTP. Docs · Integrate General MCP Tool client Discover and call bounded stateless MCP 2026-07-28 Tools with JSON/SSE, OAuth, custom headers, and mediated MRTR. Docs · Integrate MCP OAuth client Bind one MCP resource to challenge-driven discovery, PKCE, issuer validation, durable credentials, and bounded replay. Docs · Integrate MCP Remote Tool Bind one strict stateless MCP 2026-07-28 Tool with pinned identity, schemas, durable dispatch, and reconciliation. Docs · Integrate MCP Server profile Expose bounded Tools, Resources, Prompts, Completion, and MRTR behind the strict stateless production boundary. Docs · Integrate MCP Skills Publish and activate Final SEP-2640 static Skills with immutable manifests, origin-scoped approval, and verified lazy reads. Docs · Integrate MCP conformance status See the frozen official runner inventory, implemented evidence, and exact boundary of current MCP claims. Docs · Integrate A2A 1.0 Client Discover and pin one agent, call all eleven operations, and reconcile durable unknown sends only through attested remote guarantees. Docs · Integrate Durable artifact storage Materialize terminal A2A parts into immutable PostgreSQL metadata and private integrity-checked object bytes. Docs · Integrate A2A 1.0 Server Expose bounded HTTP+JSON and JSON-RPC/SSE through identity-first policy and a durable service contract. Docs · Integrate A2A conformance status Inspect the frozen official TCK, audited harness patch, exact result, and server-only claim boundary. Docs · Operate Fair scheduling Configure replica-safe weighted tenant selection, exact starvation bounds, rollout, and retention. Docs · Operate PostgreSQL provider Configure, migrate, verify, and test the implemented durability provider. Docs · Operate Host qualification Record bounded capacity, recovery and fault evidence without turning CI into a production SLO claim. Docs · Project Versioning and releases Pin the public alpha exactly and understand compatibility, MSRV, durable-data, and release gates. Docs · Project Implementation status See what is implemented, in progress, and deliberately not claimed. Home Architecture map What exists, what is active, and what remains planned. Home Current cut Implemented slices and explicit gaps. Home Roadmap The path from contracts to a qualified v1. Repository Source code StateKnot/StateKnot on GitHub. Repository RFCs Draft architecture and durable execution contracts. Repository Security policy Private vulnerability reporting and support policy.
↑↓ navigate ↵ open 39 results

Pre-alpha documentation

Call a stateless MCP Tool safely.

Connect the bounded StateKnot MCP 2026-07-28 Tool client, inspect its trust boundary, handle MRTR, and reproduce the pinned official evidence.

Choose the correct MCP boundary

McpClient
Dynamic interoperability: discover a bounded Tool catalog, preserve untrusted wire schemas, call Tools, receive request-scoped SSE, and mediate multi-round input.
McpRemoteTool
Durable external effects: pin reviewed server/input/output identity, commit dispatch evidence first, retain ambiguous writes, and reconcile without redispatch.

Discover and call one Tool

Production endpoints require HTTPS. Authorization resolves independently for every stateless POST, so a production provider can rotate credentials. Never put secrets in endpoint URLs, request metadata, or logs.

Rust · general Tool client
use std::sync::Arc;

use serde_json::json;
use stateknot_integrations::{
    ApiKey, McpClient, McpClientIdentity, McpClientOptions,
    McpToolCall, ProviderEndpoint, StaticMcpBearerAuthorization,
};

let client = McpClient::connect(
    ProviderEndpoint::https("https://mcp.example.com/mcp/")?,
    McpClientIdentity::new("inventory-agent", "1.0.0")?,
    Arc::new(StaticMcpBearerAuthorization::new(
        ApiKey::new(std::env::var("MCP_TOKEN")?)?,
    )),
    McpClientOptions::default(),
)
.await?;

let catalog = client.list_tools().await?;
let tool = catalog.find("inventory_lookup").ok_or("Tool unavailable")?;
let response = client.call_tool(tool, json!({ "sku": "STK-001" })).await?;

match response.into_outcome() {
    McpToolCall::Complete(result) => println!("{}", result.content().len()),
    McpToolCall::InputRequired(pending) => {
        // Route each request to a trusted host subsystem; never auto-approve it.
        println!("{} inputs required", pending.input_requests().len());
    }
    _ => return Err("unsupported future outcome".into()),
}

Inspect rejected_tools() before relying on catalog shape. An invalid x-mcp-header descriptor is excluded individually; it never becomes callable and does not hide valid siblings.

Keep discovery and output untrusted

  • Tool descriptions, annotations, schemas, content, structured content, notifications, and server instructions do not grant authority.
  • Network $ref values are retained but never dereferenced. Apply an offline allowlisted schema policy before local validation.
  • String, integer, and boolean x-mcp-header values are derived only through statically reachable properties. Unsafe bytes use the MCP Base64 sentinel; null and absent values are omitted.
  • Tool-level isError remains a result for Agent recovery; transport and protocol failures remain typed client errors.

Mediate every MRTR round

An input_required result owns the original Tool, arguments, client, and opaque requestState. The host must route each declared request to a trusted subsystem and return exactly the requested keys. resume consumes the pending value, uses a fresh JSON-RPC ID, echoes the exact state when present, and never leaks it across calls. StateKnot does not auto-approve elicitation or invent Roots/Sampling data.

Bound every exchange

ResourceDefault
Logical request / concurrent requests30 s / 16
Catalog pages / entries16 / 1,024
Request / JSON response16 MiB / 2 MiB
SSE line / event / total512 KiB / 2 MiB / 64 MiB
Notifications per response1,024

The logical request deadline has a 24-hour hard ceiling. Redirects and generic retries are disabled. A timeout or lost Tool response is never automatically replayed. Protocol version negotiation receives one bounded retry after the server explicitly advertises this version. A Bearer challenge receives one replay by default only after the authorization provider explicitly approves recovery; the replay uses a fresh JSON-RPC ID. See the MCP OAuth client contract.

Reproduce the evidence

Shell · local and official gates
cargo test -p stateknot-integrations --test mcp_client_contract --locked
bash conformance/mcp-client/run-2026-07-28.sh

The pinned official runner passes all 32 scored client scenarios, including all 25 OAuth scenarios: 371 scored assertions succeed, zero fail, and 11 out-of-surface checks are explicitly skipped. Read the exact conformance boundary before making a compatibility claim.