The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Warmplane listing page.
The local control plane that keeps Model Context Protocol (MCP) sessions warm with compact capability facades, policy governance, and deterministic execution.
v0.28.0 — Changelog · User Guide · Agent Skill · Performance · Whitepaper · OpenAPI
Warmplane is a local control plane and reverse proxy for AI tool calling. It maintains persistent, warm connections to multiple upstream MCP servers and multiplexes them behind a single, governed interface.
AliasTarget) and generates compact parameter signatures (tool(req, [opt])) to optimize zero-shot agent accuracy without upstream code edits.idk_<sha256>) and explicit retry classifications (safe, idempotent, unsafe).Homebrew (macOS & Linux):
Cargo (crates.io):
Build from Source:
Add servers interactively or import from existing AI tools:
Or configure mcp_servers.json:
Choose the run-mode that matches your workflow:
Mode 1: Direct MCP Stdio Integration (No background daemon needed):
Point your AI client (Cursor, Claude Desktop, Antigravity) to warmplane mcp-server. The AI client spawns Warmplane directly as a child process:
Mode 2: Background Daemon & Web Control Deck: Run a central persistent daemon hosting the REST API, interactive Web UI, and audit logs:
Mode 3: Persistent Daemon with Streamable HTTP/SSE MCP Connection:
If mcpHttpServer is configured, your AI clients can connect over HTTP/SSE (http://127.0.0.1:9191/sse) to a single shared daemon instance.
Warmplane exposes three primary access models sharing the same unified core state, policy gates, and telemetry:
warmplane mcp-server)Point any MCP-native desktop client (Claude Desktop, Cursor, Zed, Windsurf) directly to Warmplane:
warmplane daemon)Full-featured HTTP JSON API for gateways, web apps, and backend services:
GET /v1/capabilities: Compact capability catalog indexPOST /v1/capabilities/search: Hybrid lexical + semantic capability searchPOST /v1/tools/call: Normalized execution envelope with context distillation (_jsonpath, _limit_lines) and idempotency keysPOST /v1/tools/batch_call: Chained multi-step execution with $step.field parameter interpolationGET /v1/tasks & POST /v1/tasks/:id/update: SEP-2663 async task lifecycle & HITL reviewGET /ui: Embedded standalone Web Control DeckEmbeddedWarmplane)Direct in-process Rust library for zero-overhead agent execution without HTTP child processes or network hops:
Warmplane includes an official Agent Skill (.skills/warmplane/) adhering to the agentskills.io open standard. Point your coding agent (Claude Code, Google Antigravity, Cursor, OpenCode, Codex) directly to this repository:
.skills/warmplane/SKILL.md — Core prompt triggers and standard agent workflowsreferences/mcp_stdio_usage.md — 1-Click client configs (17 IDEs) & MCP facade toolsreferences/configuration_schema.md — mcp_servers.json schema & dynamic secretsreferences/cli_cheatsheet.md — Terminal commands for daemon, sync, and vaultreferences/error_resolution.md — Circuit breakers, policy denials, and recoveryWarmplane is engineered in pure Rust with zero-cost abstractions:
If-None-Match $\rightarrow$ 304 Not Modified)👉 See complete benchmarks and methodology in docs/PERFORMANCE.md.
| Capability | Since | Description |
|---|---|---|
Real-Time MCP list_changed & Passthrough Tools | v0.28.0 | Real-time tool/resource/prompt list change notifications, SEP-1319 _meta discovery hints, top-level native tool passthrough, and WORM mutation audit logging |
| Custom Alias Descriptions & Signatures | v0.27.0 | Polymorphic docstring overrides (AliasTarget), compact LLM signatures (tool(req, [opt])), bidirectional alias resolution |
| 1-Click AI Client Injector & Sync | v0.26.0 | Bidirectional MCP adapter engine for Claude Desktop, OpenCode, Claude Code, Cursor, Zed, Windsurf, Cline |
| Native OS Keychain Vault | v0.26.0 | Secure OS Keychain storage and dynamic secret URI resolution (keychain://, op://, env://) |
| Actionable ChatOps Webhooks | v0.26.0 | Bidirectional Slack, Discord, and Microsoft Teams approval cards with HMAC-SHA256 signatures |
| Per-Profile Governance & Constellations | v0.26.0 | Fine-grained per-profile policy rules, constellation boundary badges, and live filter metrics |
| Control Deck Tasks & HITL UI | v0.25.0 | Live Tasks & Approvals hub, MRTR input resolution forms, Playground async toggle, and embedded task API |
| SEP-2663 Tasks Extension | v0.24.0 | Non-blocking io.modelcontextprotocol/tasks capability, unified HITL state machine, REST & CLI commands |
| In-Process Embedded Rust Engine | v0.23.0 | EmbeddedWarmplane & ControlPlaneHandle for zero-overhead library integration |
| Streamable HTTP/SSE MCP Transport | v0.22.0 | Co-hosted /mcp/sse MCP transport for remote agent connectivity |
| Named Server Constellations | v0.21.0 | Profile grouping (profiles) with scoped ETag partitioning and stdio filtering |
| Multi-Tenant RBAC | v0.20.0 | Role-based token access, deterministic catalog partitioning, tenant context propagation |
| Client-Delegated MCP Sampling | v0.19.0 | Reverse RPC sampling (sampling/createMessage) with ticket tracking & long-polling |
| Persistent State Subsystem | v0.18.0 | Atomic restart-resilient disk storage (AtomicFile<T>) for approvals, idempotency, and OAuth2 tokens |
| Signal Handling & Graceful Teardown | v0.18.0 | Robust SIGINT/SIGTERM handling, async worker flushes, child process orphan prevention |
| MCP Resource & Prompt Studio | v0.17.0 | 360° resource explorer, prompt template renderer with dynamic forms, and SSE syncing |
| Multi-Step Batch Pipelines | v0.17.0 | Visual pipeline editor with reference parameter interpolation (POST /v1/tools/batch_call) |
| Enterprise Security & Auth | v0.16.0 | Token-based middleware protection, WORM audit HMAC verification, and secret masking |
| Fault Tolerance & Supervision | v0.15.0 | Degraded startup, per-server circuit breakers, exponential backoff restart supervision |
| Agent Enrichment Suite | v0.14.0 | Facade search, context distillation (_jsonpath/_limit_lines), and multi-step batch execution |
| HITL Approval Engine | v0.13.0 | Operator gate approval engine, suspension, argument editing, and HMAC webhook dispatch |
| WORM Audit & SIEM | v0.12.0 | Append-only SHA-256 hash-chained audit logging, verification API, and Splunk/Webhook SIEM export |
| Control Deck Web UI | v0.11.0 | Standalone embedded web dashboard for servers, testing playground, policy & telemetry |
| Dynamic Hot-Reloading | v0.11.0 | Zero-downtime upstream mounting/unmounting, explicit warmplane reload & /v1/config/reload |
list_changed Notifications, SEP-1319 Discovery Hints & Passthrough Toolslist_changed Notifications (src/mcp_server.rs, src/daemon/state.rs): Advertised listChanged: true across tools, resources, and prompts capabilities (enable_tool_list_changed, enable_resources_list_changed, enable_resources_subscribe, enable_prompts_list_changed). Active MCP stdio sessions receive real-time JSON-RPC notifications whenever upstream servers mount/unmount or config/aliases mutate.src/mcp_server.rs): Injected io.warmplane/discovery_hint metadata payload into notifications/tools/list_changed advising agents to run capabilities_list to discover backend capabilities without incurring constant token costs on tool schemas.src/config.rs, src/mcp_server.rs, src/cli_config.rs): Promoted capability aliases (passthrough: true) into native top-level tools exported directly in tools/list with strict MCP name sanitization (^[a-zA-Z0-9_-]{1,64}$) and direct dispatch resolution.src/daemon/lifecycle.rs, src/http_v1/config_api.rs): Added tamper-evident SHA-256 hash-chained AuditEventType::ConfigMutation audit records across server mounts/unmounts, alias mutations, security policy updates, and profile configuration changes.ui/src/components/aliases.ts, ui/src/main.ts): Added click-to-edit alias rows, passthrough toggle pill badges, and input sanitization directly in the Control Deck web UI.src/config.rs, src/supervisor.rs): Upgraded alias configuration model to support polymorphic definitions (AliasTarget). Aliases can be simple target strings ("alias": "server.tool") or detailed objects ("alias": { "target": "server.tool", "summary": "...", "description": "..." }), enabling platform engineers and developers to repair or improve poorly-described upstream tools for zero-shot LLM ergonomics without upstream source changes.src/supervisor.rs, src/daemon/types.rs, src/engine/types.rs): Derived deterministic, compact parameter signatures (tool_name(req1, [opt1], [opt2])) from JSON Schemas (accounting for required fields vs nullable/optional properties). Surfaced across MCP capabilities_list, catalog search, and Web UI index summaries.src/supervisor.rs): Resolved mapping mismatch where supervisory discovery checks target equality against configured alias keys, ensuring canonical targets are promoted seamlessly to client interfaces.ui/src/components/tasks.ts): Enhanced Tasks & Approvals UI with dedicated inspector modal, live state viewers, formatted JSON payload inspections, and dual inspect/cancel action controls.ui/src/components/servers.ts, src/vault/): Added live (Missing Keys) warning badges and status indicators across server cards and diagnostics when required template environment variables or Keychain secrets are unconfigured.ui/src/components/aliases.ts) and CLI (warmplane config alias set --summary ...) with automated live hot-reloading reconciliation on disk mutation.src/telemetry.rs): Configured tracing_subscriber::fmt::layer() to write to stderr (.with_writer(std::io::stderr)). Prevents runtime structured JSON logs and span diagnostics from polluting stdout.src/supervisor.rs): Upstream stdio child processes now explicitly inherit Warmplane's standard error (cmd.stderr(std::process::Stdio::inherit())). Prevents upstream startup banners (e.g. Memory and Filesystem server banners) from leaking into stdio JSON-RPC sessions.invalid message version tag ""; expected "2.0") when running Warmplane in stdio server mode (warmplane mcp-server) with AI agents and IDEs.src/client_sync.rs): Zero-configuration bidirectional MCP adapter engine. Detects, injects, and detaches Warmplane proxy configurations with profile binding across Claude Desktop (macOS, Linux, Windows), OpenCode, Claude Code CLI (CLAUDE_CONFIG_DIR), Cursor (Global & Workspace), Zed Editor (context_servers), Windsurf, and Roo Code / Cline.src/config_import.rs): Unified external config discovery with dialect-aware parsers (StandardMcpServers, OpenCode mcp, Zed context_servers) and self-proxy protection.src/vault/): Added secure OS-level credential management (warmplane secret set/get/delete) and dynamic runtime secret expansion (keychain://, op://, env://) in environment variables with masked logs.src/chatops/): Rich interactive approval cards for Slack (Block Kit), Discord (Embeds), and Microsoft Teams (Adaptive Cards) with HMAC-SHA256 signature verification.src/policy.rs, ui/src/components/policy.ts): Fine-grained per-profile allow, deny, and requireApproval rules overriding or scoping global policies.ui/src/components/servers.ts): Visual constellation badges (✔ IN CONSTELLATION, 🚫 EXCLUDED FROM PROFILE), auto-derived <server>.* implicit policy denials, and 1-click membership toggles.POST /v1/config/servers/:id/restart), and automated smoke testing suite for all 25 MCP server templates (scripts/test-templates.ts).sha256:...-p:<profile_id>:<hash>) ensuring immediate ETag invalidation and playground catalog re-population. Stabilized viewport layouts with continuous scrollbar gutter reservation.packaging/mcpb/, .github/workflows/release-artifacts.yml): Added automated build and packaging of platform-specific Model Context Protocol Bundles (.mcpb) containing standalone binaries, bootstrap configurations, and standardized manifests (manifest_version: "0.3").server.json): Release workflows now automatically generate canonical registry metadata adhering to the official server.schema.json specification (io.github.warmplane/warmplane) with multi-arch SHA-256 package digests.Warmplane/homebrew-tap): Configured official tap distribution with prebuilt macOS and Linux formula (brew tap warmplane/tap && brew install warmplane).src/engine/mod.rs, src/http_v1/execute.rs): Resolved regression where asynchronous capability executions (async_task: true or Prefer: respond-async) and tasks resumed after Human-in-the-Loop (HITL) input responses remained indefinitely in TaskStatus::Working. Background workers now reliably record terminal state (TaskStatus::Completed with result, or TaskStatus::Failed with structured error) directly into TaskRegistry.tests/embedded_tests.rs, tests/tasks_tests.rs): Added comprehensive automated integration tests verifying that get_task and list_tasks observe terminal completed status with upstream payload following approval submissions and direct asynchronous calls.ui/src/components/tasks.ts): Upgraded the review queue into a unified Tasks & Approvals dashboard (data-tab="tasks") with live status KPIs (input_required, working, completed, cancelled/failed), interactive action cards with inlined MRTR input resolution forms (booleans, JSON editors, text fields), TTL countdown timers, and cooperative cancellation controls.202 Accepted task card preview with 1-click navigation to the Tasks & Approvals review deck.ControlPlaneHandle): Exposed direct task management methods on the in-process ControlPlaneHandle (list_tasks, get_task, update_task, cancel_task), allowing embedding applications to manage asynchronous SEP-2663 tasks without HTTP or JSON-RPC serialization overhead.input_required tasks.src/tasks.rs): Implemented the official io.modelcontextprotocol/tasks capability with atomic persistent storage (tasks.json), safe TTL expiration detection, and oneshot input response channels (TaskWaitSender / TaskWaitReceiver).async_task: true / Prefer: respond-async return 202 Accepted with resultType: "task" and status: "input_required", inlining MRTR inputRequests./v1/tasks/*): Added comprehensive REST endpoints for task inspection and control: GET /v1/tasks (list), GET /v1/tasks/:id (poll status/result), POST /v1/tasks/:id/update (submit inputResponses to wake up worker), and POST /v1/tasks/:id/cancel (cooperative cancellation).task_get, task_update, and task_cancel tools on the MCP facade server for direct agent orchestration.warmplane tasks list, warmplane tasks get <id>, warmplane tasks update <id> -r '<json>', warmplane tasks cancel <id>, and the --async-task flag to warmplane call-capability.docs/MCP_ROADMAP_REPORT.md analyzing the official MCP roadmap and Warmplane's architectural alignment across stateless transports, sessionless routing, and progressive capability discovery.EmbeddedWarmplane, ControlPlaneHandle): Exposed Warmplane as a pure in-process library without HTTP, daemon child process, or JSON-RPC serialization overhead. Callers spawn the engine directly on their own Tokio runtime via EmbeddedWarmplane::start(config) or EmbeddedWarmplane::start_from_path(path) and interact via typed ControlPlaneHandle methods (list_capabilities, describe_capability, search_capabilities, call_capability, batch_call, read_resource, get_prompt, health_status).Envelope<T>, WarmplaneError, CapabilitySummary, CapabilityDetail, ExecutionOptions, ReadResourceOptions, GetPromptOptions, and EngineHealthStatus in warmplane::engine::types, preserving structured diagnostics (request_id, trace_id, retry, operator) for programmatic orchestration.mcp_server.rs to delegate all tool call execution, search, descriptions, batch execution, and resource/prompt dispatch directly to ControlPlaneHandle, eliminating duplicated logic and unifying execution pipelines.tests/embedded_tests.rs covering embedded lifecycle startup, degraded server handling, health status inspection, and graceful cancellation.mcp-http-server): Built standalone and daemon-co-hosted HTTP/SSE MCP server endpoints (/mcp/sse, /mcp/messages), allowing remote AI agents and IDEs (Cursor, Windsurf, Claude Desktop) to connect over standard HTTP/SSE networks with automatic keep-alives and zero client drift.mcpHttpServer): Added first-class configuration support (mcpHttpServer) enabling automatic background initialization of HTTP/SSE MCP server instances directly alongside the core /v1 HTTP daemon.profile) on the MCP server transport, strictly isolating tools and resources exposed to remote clients. Automatically enforced bearer token authentication when binding to public non-loopback network interfaces (0.0.0.0 / external IPs).prefers-reduced-motion accessibility support, and added collision guards with automatic unique server ID derivation.ProfileConfig) allowing task-relevant subsets of upstream MCP servers to be grouped into named constellations (e.g. coding, research, data_science).X-Warmplane-Profile headers and ?profile= query parameters. Catalog endpoints (/v1/capabilities, /v1/resources, /v1/prompts) and search (/v1/capabilities/search) dynamically prune items outside the active profile and maintain deterministic profile-partitioned ETags (sha256:...-p:<profile_id>).--profile <name> CLI option to warmplane mcp-server and warmplane list-capabilities, providing agent hosts with a strictly scoped MCP tool and resource surface.tokio_util::sync::CancellationToken dispatch on SIGINT (Ctrl-C) / SIGTERM, unblocked SSE stream draining, added child process orphan prevention via kill_on_drop(true), and enforced a 3-second bounded safety shutdown timeout.src/rbac): Built role-based access control engine with support for static API tokens, token-to-role mappings in configuration (rbac.tokens), and cryptographic HMAC-SHA256 symmetric JWT signature verification with configurable secret key (rbac.jwt_secret)./v1/capabilities, /v1/resources, /v1/prompts, and /v1/capabilities/search to dynamically filter items by caller role and effective policy. Unauthorized items are completely invisible in catalog listings and search queries.TenantContext (tenant_id, role, actor_id, grant_id, effective_policy) into request extensions via RBAC guard middleware (src/rbac/middleware.rs). Bound verified tenant/actor metadata automatically into WORM audit events.RolePolicyConfig) with custom allow, deny, require_approval, and redact_keys rules, overriding or intersecting with base system policy.tests/rbac_integration.rs) covering token authentication, search filtering, catalog isolation, policy boundary enforcement, and multi-tenant audit verification.sampling/createMessage): Implemented client-delegated LLM completion reverse RPC handling (src/sampling.rs). Upstream servers or agents submit sampling requests, generating tracked tickets (samp_<timestamp>_<seq>) with synchronous long-polling or asynchronous lifecycle endpoints (POST /v1/sampling/create_message, GET /v1/sampling/requests, GET /v1/sampling/requests/:id, POST /v1/sampling/requests/:id/respond).sampling.json) via AtomicFile<HashMap<String, PendingSamplingRequest>> with automated expiration reaper tasks.MAX_VECTOR_SEARCH_CANDIDATES = 250; bounded audit export queries to MAX_IN_MEMORY_AUDIT_EVENTS (20,000); enforced Host header and loopback Origin checks on OAuth proxy requests.tsc --noEmit) to Web UI CI pipeline and restricted push triggers to main to eliminate duplicate runs.// Rust guideline compliant YYYY-MM-DD).AtomicFile<T> and StateDirectory) for Human-in-the-Loop pending approvals (approvals.json), idempotent execution records (idempotency.json), OAuth2 tokens (oauth_tokens.json), and catalog mutation events (catalog_events.json). Added state block in McpConfig and warmplane config state show/set CLI commands.SIGINT (Ctrl+C) and SIGTERM signal capture on Unix and Windows, integrated graceful HTTP server draining, async audit worker flushes (AuditWorkerMsg::FlushAndShutdown), and clean stdio subprocess process termination on shutdown.// Rust guideline compliant YYYY-MM-DD).ci.yml) and release pipelines (release-artifacts.yml), with automated build steps and strict git diff --exit-code ui/dist/index.html drift detection.tests/e2e_tests.rs) exercising stdio MCP protocol handshakes, live TCP SSE streaming, config hot-reloading, mock OAuth2 RFC 8414 provider round-trips with silent 401 token refresh, and supervisor recovery./v1/audit/events), and context-aware CSV and JSONL export downloads (/v1/audit/export).file://, postgres://, github://, memory://, sqlite://, etc.), metadata/MIME viewer, and live content reader supporting context distillation (_jsonpath, _limit_lines, _truncate_bytes).REQUIRED validation badges, rendering resolved system/user prompt envelopes (/v1/prompts/get).POST /v1/operations/:id/cancel).${steps[0].result.id}) and per-node fault tolerance (POST /v1/tools/batch_call)./v1/resources/updates SSE stream to automatically refresh resources, prompts, and catalog feeds on the Control Deck.--auth-token CLI parameter, McpConfig.auth_token configuration field, and WARMPLANE_AUTH_TOKEN environment variable support to securely protect daemon endpoints with Bearer/X-Warmplane-Key authentication.state and PKCE code_challenge secrets in log output.work_item_id, client_ip, resource_uri, execution_latency_us, error_message); added HMAC-SHA256 keyed digest calculations and checkpoint generation for external cryptographic anchoring.token, secret, password, key, authorization, etc.); restricted external HITL webhook events to only transmit sanitized_args; sanitized secrets before printing in CLI commands.HalfOpen circuit breaker state; implemented 60-second sliding-window restart backoff; pruned removed items during catalog reconciliation; cleaned up circuit breakers on server unmount.MAX_BATCH_STEPS = 50 and DEFAULT_BATCH_TIMEOUT_MS = 60_000 execution budget; capped wildcard JSONPath output expansion to 10,000 items and search results to 100; returned POLICY_DENIED (HTTP 403) and 404 for unknown operation cancellation; sanitized CSV audit exports against formula injection.cargo-audit scanning in GitHub Actions CI; updated dependencies resolving all reported advisories.--version and -V flags in the warmplane binary parser.degraded without crashing the daemon or blocking other healthy upstreams.failureThreshold, cooldownMs, autoRestart, maxRestarts) with state tracking (CLOSED, OPEN, HALF-OPEN) and exponential backoff restart supervision.✏️ Edit), live circuit breaker telemetry badges, and server resilience indicators._jsonpath, _limit_lines, _truncate_bytes) and execution latency measurements.connected 🟢, degraded 🟡, error 🔴).warmplane config resilience set and warmplane config resilience show for headless circuit breaker management.capability_search tool over MCP stdio facade with keyword, tag, server ID, and execution mode filters._jsonpath, _limit_lines, and _truncate_bytes modifiers to /v1/tools/call and capability_call to protect LLM context windows from oversized outputs.POST /v1/tools/batch_call and capabilities_batch_call for single-roundtrip dependent tool executions with $step.field reference interpolation.requireApproval)./v1/approvals), inspect, approve with modified arguments (/v1/approvals/:id/approve), or reject (/v1/approvals/:id/reject).approvalTimeoutSecs) returning structured cancellation envelopes./v1/audit/...), Splunk HEC and generic Webhook ingestion./ui and / with live telemetry, server manager, interactive tool playground, policy/redaction manager, and alias registry.warmplane reload CLI command and POST /v1/config/reload endpoint to cleanly reconcile in-memory workers against manual edits to mcp_servers.json.warmplane server (add, remove, list, get, test) commands with interactive inquire wizards and flag-driven headless automation.warmplane config (init, show, import, alias, policy) for safe, transactional configuration mutations.fs::rename) preventing JSON corruption.rmcp 3.1.2 and reqwest 0.13."2026-07-28" with backward compatibility for "2025-11-25".input_responses and request_state) across HTTP REST, stdio facade, and upstream workers.ttl_ms: 300000, cache_scope: "public") and deterministic alphabetical sorting on catalog listings.subscriptions_listen tool to stdio facade and /v1/resources/updates SSE stream for real-time notifications.iss callback verification for OAuth 2.0 flows.--features semantic-search.Full adoption of Microsoft's Pragmatic Rust Guidelines (AGENTS.md). Implemented Builder Pattern (M-INIT-BUILDER) for core state (AppStateBuilder), search filters (SearchFilterBuilder), and request context (RequestContextBuilder). Enhanced error safety (M-PANIC-IS-STOP), structured logging (M-LOG-STRUCTURED), canonical documentation (M-CANONICAL-DOCS), and flexible trait interop (M-IMPL-ASREF).
Pass Idempotency-Key / X-Idempotency-Key to deduplicate concurrent tool calls. Abort any in-flight request via cancel endpoint or CLI. Every response envelope now includes structured "retry" metadata (classification + state) for orchestrator-aware retry logic.
Structured RequestContext (operation_id, work_item_id, actor_id, grant_id) threaded through all execution envelopes and tracing spans. HTTP header fallback (X-Request-ID, X-Operation-ID, X-Actor-ID, X-Grant-ID).
SHA-256 catalog version. ETag headers on all catalog reads, If-None-Match conditional requests returning 304 Not Modified. GET /v1/catalog/events change feed with cursor-based pagination.
POST /v1/capabilities/search with BM25 scoring, optional FastEmbed vector embeddings, tag/server-ID filters, and ranked results.
POST /v1/capabilities/search with BM25 scoring, optional FastEmbed vector embeddings, tag/server-ID filters, and ranked results.
| Document | Description |
|---|---|
| docs/USER-GUIDE.md | Complete usage guide: config, modes, all CLI commands, auth, policy |
| docs/PERFORMANCE.md | Benchmark methodology, latency percentiles, and profiling results |
| docs/openapi.yaml | OpenAPI 3.1 spec |
| docs/config.schema.json | JSON Schema for mcp_servers.json |
| docs/OBSERVABILITY.md | Structured logs, OTLP config, trace correlation |
| docs/INSTALL.md | Build variants, distribution notes |
| docs/DEPLOYMENT.md | Production deployment runbook |