Any client that speaks MCP or the Anthropic Messages API can point at it, and from there the policy follows the user rather than the client. The property worth checking against your own requirements is where secrets live: they are decrypted into the tool subprocess environment, so the process holding the model context never writes the value.
A self-hosted governance layer for AI clients, shipped as one Rust binary against PostgreSQL. It fronts model providers behind a single endpoint, hosts MCP servers as isolated OAuth resource servers, and writes every request to your own database.
- A gateway that routes by model id to Anthropic, OpenAI, Gemini, Bedrock, Vertex or any compatible upstream, from one endpoint
- Per-user model permissions evaluated live: disable a model for a user and their next call is refused with a structured reason, no restart
- A governance pipeline on every tool call — JWT validation, RBAC scope check, secret detection, a blocklist of destructive operations, and rate limiting
- Credentials decrypted from a ChaCha20-Poly1305 store and injected into the tool subprocess environment only, never into the context the model sees
- MCP servers hosted per-tenant, each an isolated OAuth2 resource server with its own scopes, connected over Streamable HTTP
- systemprompt plugins mcp list, status and tools — enumerate configured servers, their health, and the tools each one exposes
- An audit row per request with identity, session, model, provider, tokens in and out, cost and the policy decisions that ran
Rust 1.75+ and PostgreSQL 18+ if you build it, or one of the published deploy paths — a container image, Helm, Homebrew, Nix, or a one-click template on Railway, Render, Northflank or Zeabur. Clone the template, run the local setup task with a provider key, and it serves governance, agents, MCP and the admin UI on port 8080. Clients connect to the MCP path over Streamable HTTP, with OAuth in production.
One command plus a key — curl -sSL https://get.systemprompt.io | sh, then supply credentials
