EVERY LAYER, AN OPEN STANDARD. ZERO PROPRIETARY PROTOCOLS.
MCP on the wire, OAuth2 with PKCE and WebAuthn for identity, plain SQL schemas in PostgreSQL, Markdown with YAML frontmatter for content, and public RustCrypto libraries for AEAD. No proprietary protocol terminates inside your network.
MCP On The Wire
When the wire protocol between an agent and a governance layer is a vendor's private RPC, switching vendors means rewriting every client. Every integration ever shipped pays the exit cost. systemprompt.io blocks that at the protocol layer by picking the Model Context Protocol, the public spec every major coding agent already implements.
Agent traffic runs on MCP. A Claude Code, OpenAI Codex, or Gemini CLI client connects with no adapter. Admin traffic is plain HTTP JSON over the same request shape any HTTP client already makes. Real-time updates use Server-Sent Events, a native browser feature, not a proprietary websocket dialect. Replace systemprompt.io with another MCP server and the same clients keep pointing at it. CTOs can confirm this in one file. The rmcp dependency is declared in the workspace manifest, and every feature flag enabled is a standard MCP transport.
The marketplace MCP server exposes tool handlers across six categories. Skills, agents, MCP servers, plugins, secrets, and sync. Each is a public JSON Schema tool definition any MCP client can introspect. The reference below lists each handler in source.
- MCP, The Published Spec — Any MCP-compatible client (Claude Code, OpenAI Codex, Gemini CLI) connects without an adapter. The effect on exit: replace systemprompt.io with any other MCP server and existing clients still work.
- Plain HTTP JSON Admin Routes — Admin routes return structured JSON over HTTP, the default shape of every HTTP client in every language. No RPC envelope, no generated stubs, no lock-in on the admin surface either.
- Server-Sent Events Over HTTP — Real-time updates use SSE, the W3C streaming primitive every browser implements. Replacing the streaming backend does not require a client-library rewrite because the client is the browser itself.
OAuth2, WebAuthn, JWT
A proprietary auth SDK is the deepest form of lock-in because every service that trusts the identity layer is coupled to one vendor's session format. Leaving means reissuing every token and reintegrating every IdP. systemprompt.io rules that out by running identity on three published standards. OAuth 2.0 (RFC 6749), WebAuthn (W3C), and JWT (RFC 7519).
OAuth 2.0 client records, scopes, and grant types live in three explicit SQL schema files, one per concern. Plain-text schemas, not an ORM's hidden model, so psql and pg_dump read them directly. WebAuthn credentials live in a separate schema file, per-user public keys and credential ids, no shared server-side secret, because the W3C spec designs out replay. A CISO auditing this has a one-line answer. The database holds no credential a phisher can replay, and that is a property of the standard, not a claim made about it.
JWT issue-and-verify lives in a dedicated services module under the oauth domain. Every library in every language already validates JWTs because RFC 7519 is ubiquitous. Walking away means pointing services at another OAuth 2.0 issuer, and the token format they validate is the same one.
- OAuth 2.0 In Plain SQL — Clients, scopes, and grant types live in SQL schema files readable by psql. Migrating to another OAuth issuer is a data export, not a re-modelling exercise.
- WebAuthn Stores Only Public Keys — Per-user public keys and credential ids sit in a plain SQL schema. No shared secret means no server-side breach can replay a user login, whether you stay or leave.
- JWT Verification Via RFC 7519 — Tokens are signed with standard claims any JWT library verifies. Another issuer that signs compatible claims is a drop-in replacement.
- oauth_clients.sql OAuth 2.0 client registration schema (RFC 6749).
- oauth_client_scopes.sql OAuth scope definitions per client.
- oauth_client_grant_types.sql OAuth 2.0 grant-type allowlist per client.
- webauthn/ (services) W3C WebAuthn registration and authentication services.
- webauthn_credentials.sql Per-user public key and credential id storage.
- jwt/ (services) RFC 7519 JWT issue and verify services.
Storage Is The Export
An "export to open formats" feature on a SaaS product is a tell. It means the real format is something else, and the export is best-effort. When the storage format already is the open format, nothing needs exporting, and walking away is a git clone of the files on disk. systemprompt.io picks the second option for every user-facing artefact.
Skills are SKILL.md files with YAML frontmatter, and the data model in source maps one-to-one to what is on disk. A staff engineer reading the file and a developer querying the database see the same shape. Any text editor opens the file, any YAML parser reads the frontmatter, any Markdown renderer displays the body. The export-and-sync path round-trips the file back to disk without translation because no intermediate representation sits in between.
MCP tool inputs are JSON Schema, the IETF draft spec every JSON validator in every language implements. These schemas are generated at compile time from the Rust types that back each handler, so the schema in the wire protocol and the type in the code cannot drift. For a CTO, this means a client in Python, TypeScript, or Go can validate tool calls against the same schema the server enforces, regardless of which server is on the other end.
- SKILL.md Files A Text Editor Opens — Skills live as Markdown with YAML frontmatter. Walking away is a git clone of the folder. No export format because the storage format is already open.
- JSON Schema Every Language Validates — Tool input schemas are generated from Rust types at compile time. A client in Python, TypeScript, or Go validates against the same spec, so swapping the server does not force a client rewrite.
- Handlebars And TOML, Multi-Language Parsers — Templates are Handlebars, build configuration is TOML. Both are widely parsed outside Rust, so porting templates to another build system does not demand a conversion pass.
- skill.rs Skill struct mapping one-to-one to SKILL.md plus YAML frontmatter.
- skills_sync.rs Round-trip sync between disk files and database with no conversion layer.
- export/skills.rs Export path that writes skills back to disk in the read format.
- tools/mod.rs (JSON Schema generation) Per-handler input_schema and output_schema emitted as JSON Schema.
- Cargo.toml (schemars dependency) schemars crate for compile-time JSON Schema derivation.
Review In Git, Back Up With pg_dump
When governance content lives in a vendor SaaS, it cannot be diffed, cannot be reviewed in the tooling the team already uses for code, and cannot be moved. Reviewers lose the workflow they trust at the exact moment AI policy starts mattering. systemprompt.io stores content where reviewers already work. On disk, in Git, and in a PostgreSQL database they already know how to back up.
Skill, agent, and plugin definitions sync to and from disk, landing as plain files in a directory any team can commit to their own Git host. Branches, pull requests, and diffs work the same way they do for source code. Operational state lives in PostgreSQL with per-domain SQL schemas under each domain's schema directory. No proprietary migration format hides the table shape. A CTO evaluating a move answers "can I take the data with me" by running pg_dump, the standard Postgres backup tool packaged with every install.
Queries are checked against the live schema at compile time by sqlx, which validates each query against the database before the binary links. The data model is in plain SQL a reader can open, not hidden behind an ORM whose internal representation has to be reverse-engineered on exit. Two audit trails run in parallel. Git history for content changes, database rows for operational events. Both export with tooling every team already owns.
- Git Clone Is The Export Step — Skills and plugins are written to disk as files ready to commit, branch, review, and push with standard Git tooling. Leaving means taking the directory.
- Per-Domain Plain-SQL Schemas — Table definitions live in .sql files under each domain. pg_dump backs them up, psql restores them, and no ORM hides the shape from a migration engineer on exit.
- Postgres Runs Everywhere — Compile-time query validation against the live schema means the data model is in plain SQL. Move to RDS, Cloud SQL, Supabase, Neon, or your own Postgres host without changing application code.
- skills_sync.rs (local sync) Local sync that writes skills to disk as files ready for Git.
- export/ (module) Export module for skills, agents, and content back to disk.
- schema/ (per-domain SQL) Plain SQL schema files per domain (OAuth shown, same pattern elsewhere).
- Cargo.toml (sqlx dependency) sqlx crate for compile-time query validation against Postgres.
Named Crypto Primitives
Custom cryptography is its own form of lock-in. A security team that cannot name the primitive cannot audit it, and an auditor cannot tell a regulator what is protecting secrets at rest. systemprompt.io picks named, peer-reviewed algorithms so that question has a one-line answer, and so the same primitives work in whatever system a team moves to.
Secrets at rest use an AEAD construction from the public RustCrypto family. The same class of construction secures TLS 1.3 sessions and WireGuard tunnels, so a CISO auditing it can point at two independent public specifications. The implementation lives in a single file under the admin extension, calling the public RustCrypto library declared in the template manifest. A staff engineer reads the call site and the dependency in two files.
Message integrity uses SHA-2 and HMAC from the same public RustCrypto family. SHA-2 is a NIST-standardised hash family parsed by every cryptography library in every language. Data encrypted or signed by systemprompt.io can be decrypted or verified by any library that implements the same RFCs, which is all of them. The exit cost on the crypto layer is a key export, not a re-encryption pass.
- AEAD At Rest, TLS 1.3 Class — Secrets at rest use the same class of authenticated-encryption construction TLS 1.3 and WireGuard use. A CISO cites the public specs, and any library implementing the same RFC can decrypt the data on exit.
- SHA-2 And HMAC, NIST-Standardised — Message integrity uses SHA-2 with HMAC. Every cryptography library in every ecosystem parses it, so verification survives a move to any other stack.
- Public RustCrypto Crates — The AEAD, SHA-2, and HMAC crates are public RustCrypto libraries declared in the manifest. An auditor reads the dependency, the call site, and the public specification. Nothing compiled in is untraceable.
- secret_crypto.rs (AEAD usage) Secret encryption and decryption using a public RustCrypto AEAD crate.
- Cargo.toml (AEAD crate declaration) RustCrypto AEAD crate declaration.
- get_secrets/ (secret read path) MCP tool reading decrypted secrets via the admin crypto layer.
- manage_secrets/ (secret write path) MCP tool writing encrypted secrets via the admin crypto layer.
Honest Exit Cost
The honest version of "no lock-in" is not zero migration cost. Custom extensions built on top of systemprompt.io are still the customer's to port, and an integration with a customer IdP still has to be redone if the whole stack is replaced. What every layer above rules out is the worst case. A proprietary wire protocol, a proprietary storage format, and a hosted control plane a customer cannot run themselves.
Every interface on this page is a published standard and every identifier that matters is named in source. Authorisation for MCP requests runs through a single middleware function in the MCP domain that a reviewer reads end-to-end. The whole library compiles to one Rust binary with PostgreSQL as the only external dependency. The same binary runs on a laptop, a cloud VM, a bare-metal box, or an air-gapped network, and the rebuild step on another host is a standard Rust build, not a re-platforming project.
This is not an "open-source alternative" to a SaaS product. It is an infrastructure library that speaks the standards existing systems already speak. MCP clients connect without adapters. OAuth flows plug into an existing IdP. Git repositories clone with standard tooling. The exit story on every layer points to another open-standard implementation, not a blank page.
- Honest Exit Cost, Not Zero Cost — Standards, schemas, and storage formats are open, so data and auth flows survive a swap. Custom extensions written on top of systemprompt.io are still a migration to do, because they are customer code.
- Single Binary, Postgres The Only Dependency — One Rust binary runs on Docker, bare metal, a cloud VM, or an air-gapped network. Postgres is itself open source, so the dependency chain has no proprietary link.
- Named Middleware, Not A Generic Engine — MCP request authorisation runs through a single named middleware function any reviewer reads end-to-end. The function is cited in the reference below, nothing important is behind a vendor black box.
- rbac.rs (MCP authorisation middleware) enforce_rbac_from_registry, the single middleware gating MCP tool calls.
- systemprompt-template (single-binary deployment) Template repository you clone, build, and run on your own infrastructure.
- Cargo.toml (workspace dependencies) Workspace dependency manifest listing every crate in the binary.
Founder-led. Self-service first.
No sales team. No demo theatre. The template is free to evaluate — if it solves your problem, we talk.
Who we are
One founder, one binary, full IP ownership. Every line of Rust, every governance rule, every MCP integration — written in-house. Two years of building AI governance infrastructure from first principles. No venture capital dictating roadmap. No advisory board approving features.
How to engage
Evaluate
Clone the template from GitHub. Run it locally with Docker or compile from source. Full governance pipeline.
Talk
Once you have seen the governance pipeline running, book a meeting to discuss your specific requirements — technical implementation, enterprise licensing, or custom integrations.
Deploy
The binary and extension code run on your infrastructure. Perpetual licence, source-available under BSL-1.1, with support and update agreements tailored to your compliance requirements.
Every standard on this page ships in one binary.
Clone the template, build the binary, run it on your infrastructure. Postgres is the only external dependency, and it is itself open source and portable.