From e26fb44237bfa95dd8a0a0fdbef31d3d373cde61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=B8ydahl?= Date: Thu, 30 Jul 2026 17:14:30 +0200 Subject: [PATCH] docs(security): document single-tenant deployment model (#169) Add docs/security/deployment-model.md as the single authoritative statement that the server is single-tenant and does not support multi-tenancy: each user runs their own instance with their own Solr credentials, and every action the configured Solr identity is permitted is reachable via the MCP tools by design. Authorization is delegated to Solr, not re-implemented in the MCP layer. Reference the new doc (pointer links only) from the README security list and the STDIO/HTTP transport security docs. THREAT_MODEL is intentionally left untouched; it is handled separately. Closes #169 --- README.md | 2 +- docs/security/deployment-model.md | 23 +++++++++++++++++++++++ docs/security/http.md | 1 + docs/security/stdio.md | 1 + 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 docs/security/deployment-model.md diff --git a/README.md b/README.md index a6234f96..0ce88c73 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ Running in **HTTP mode** — OAuth2, CORS, and the `HTTP_SECURITY_ENABLED` toggl **Using it** - [Quick start](docs/site/content/pages/mcp/quick-start.md) · [Client setup](docs/site/content/pages/mcp/clients/) — Claude Desktop, Claude Code, VS Code, Cursor, JetBrains, MCP Inspector - [Observability](docs/site/content/pages/mcp/observability.md) — OpenTelemetry traces, metrics, logs -- Security: [STDIO model](docs/security/stdio.md) · [HTTP model](docs/security/http.md) · OAuth2 setup: [Auth0](docs/security/auth0.md) · [Keycloak](docs/security/keycloak.md) +- Security: [Deployment model (single-tenant)](docs/security/deployment-model.md) · [STDIO model](docs/security/stdio.md) · [HTTP model](docs/security/http.md) · OAuth2 setup: [Auth0](docs/security/auth0.md) · [Keycloak](docs/security/keycloak.md) **Developing it** - [Development guide](dev-docs/DEVELOPMENT.md) — build, run, test, IDE, native image, SBOM · [Architecture](dev-docs/ARCHITECTURE.md) diff --git a/docs/security/deployment-model.md b/docs/security/deployment-model.md new file mode 100644 index 00000000..6a478c37 --- /dev/null +++ b/docs/security/deployment-model.md @@ -0,0 +1,23 @@ +# Deployment Model — Single-Tenant by Design + +**The Solr MCP server is single-tenant. It does not support multi-tenancy.** + +The intended deployment is one instance per user, configured with that user's +own Solr credentials. Every action the configured Solr identity is allowed to +perform — including admin, schema, and collection operations — is by design +reachable through the MCP tools. The server performs no per-user authorization +or tenant isolation of its own; to limit what the tools can do, scope the Solr +identity in Solr (Basic Auth, roles, mTLS, network policy). + +In HTTP mode, OAuth2 authenticates *that* a caller is allowed in, but every +authenticated caller shares the same single Solr identity — it is an access +gate, not a tenant boundary. + +Sharing one instance across multiple users, or otherwise treating it as +multi-tenant, is unsupported: you are on your own for isolation and any +resulting exposure. Multi-tenancy may be considered in a future release. + +## Related documents + +- [STDIO transport security model](./stdio.md) +- [HTTP transport security model](./http.md) diff --git a/docs/security/http.md b/docs/security/http.md index 6add6df7..391b9d54 100644 --- a/docs/security/http.md +++ b/docs/security/http.md @@ -171,6 +171,7 @@ exists for browser-based tooling. ## Related documents +- [Deployment model — single-tenant by design](./deployment-model.md) - [STDIO transport security model](./stdio.md) - OAuth2 provider setup: [Auth0](./auth0.md) · [Keycloak](./keycloak.md) - [GraalVM native image spec](../specs/graalvm-native-image.md) diff --git a/docs/security/stdio.md b/docs/security/stdio.md index af49a0a7..e6ec7ec3 100644 --- a/docs/security/stdio.md +++ b/docs/security/stdio.md @@ -93,6 +93,7 @@ that launched the process. No code changes are required for STDIO security. ## Related documents +- [Deployment model — single-tenant by design](./deployment-model.md) - [HTTP transport security model](./http.md) - OAuth2 provider setup (HTTP mode): [Auth0](./auth0.md) · [Keycloak](./keycloak.md) - [GraalVM native image spec](../specs/graalvm-native-image.md)