Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
OAuth 2.1/OIDC resource-server reference for secure MCP authorization
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
MCP_SERVER_RESOURCE_SERVER_URL, MCP_SERVER_AUTH_PROVIDER, MCP_SERVER_REQUIRED_SCOPES, MCP_SERVER_TRANSPORT_ALLOWED_HOSTS, MCP_SERVER_ENTRA_TENANT_ID, MCP_SERVER_ENTRA_AUDIENCE, MCP_SERVER_ENTRA_APPLICATION_ID_URI, MCP_SERVER_GENERIC_ISSUER_URL, MCP_SERVER_GENERIC_AUDIENCE, MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINSDu brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"auth-template": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_SERVER_RESOURCE_SERVER_URL",
"-e",
"MCP_SERVER_AUTH_PROVIDER",
"-e",
"MCP_SERVER_REQUIRED_SCOPES",
"-e",
"MCP_SERVER_TRANSPORT_ALLOWED_HOSTS",
"-e",
"MCP_SERVER_ENTRA_TENANT_ID",
"-e",
"MCP_SERVER_ENTRA_AUDIENCE",
"-e",
"MCP_SERVER_ENTRA_APPLICATION_ID_URI",
"-e",
"MCP_SERVER_GENERIC_ISSUER_URL",
"-e",
"MCP_SERVER_GENERIC_AUDIENCE",
"-e",
"MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS",
"ghcr.io/brunovicco/mcp-server-auth-template:v0.7.0"
],
"env": {
"MCP_SERVER_RESOURCE_SERVER_URL": "your-value",
"MCP_SERVER_AUTH_PROVIDER": "your-value",
"MCP_SERVER_REQUIRED_SCOPES": "your-value",
"MCP_SERVER_TRANSPORT_ALLOWED_HOSTS": "your-value",
"MCP_SERVER_ENTRA_TENANT_ID": "your-value",
"MCP_SERVER_ENTRA_AUDIENCE": "your-value",
"MCP_SERVER_ENTRA_APPLICATION_ID_URI": "your-value",
"MCP_SERVER_GENERIC_ISSUER_URL": "your-value",
"MCP_SERVER_GENERIC_AUDIENCE": "your-value",
"MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add auth-template --env MCP_SERVER_RESOURCE_SERVER_URL=your-value --env MCP_SERVER_AUTH_PROVIDER=your-value --env MCP_SERVER_REQUIRED_SCOPES=your-value --env MCP_SERVER_TRANSPORT_ALLOWED_HOSTS=your-value --env MCP_SERVER_ENTRA_TENANT_ID=your-value --env MCP_SERVER_ENTRA_AUDIENCE=your-value --env MCP_SERVER_ENTRA_APPLICATION_ID_URI=your-value --env MCP_SERVER_GENERIC_ISSUER_URL=your-value --env MCP_SERVER_GENERIC_AUDIENCE=your-value --env MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS=your-value -- docker run -i --rm -e MCP_SERVER_RESOURCE_SERVER_URL -e MCP_SERVER_AUTH_PROVIDER -e MCP_SERVER_REQUIRED_SCOPES -e MCP_SERVER_TRANSPORT_ALLOWED_HOSTS -e MCP_SERVER_ENTRA_TENANT_ID -e MCP_SERVER_ENTRA_AUDIENCE -e MCP_SERVER_ENTRA_APPLICATION_ID_URI -e MCP_SERVER_GENERIC_ISSUER_URL -e MCP_SERVER_GENERIC_AUDIENCE -e MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS ghcr.io/brunovicco/mcp-server-auth-template:v0.7.0Trag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"auth-template": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_SERVER_RESOURCE_SERVER_URL",
"-e",
"MCP_SERVER_AUTH_PROVIDER",
"-e",
"MCP_SERVER_REQUIRED_SCOPES",
"-e",
"MCP_SERVER_TRANSPORT_ALLOWED_HOSTS",
"-e",
"MCP_SERVER_ENTRA_TENANT_ID",
"-e",
"MCP_SERVER_ENTRA_AUDIENCE",
"-e",
"MCP_SERVER_ENTRA_APPLICATION_ID_URI",
"-e",
"MCP_SERVER_GENERIC_ISSUER_URL",
"-e",
"MCP_SERVER_GENERIC_AUDIENCE",
"-e",
"MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS",
"ghcr.io/brunovicco/mcp-server-auth-template:v0.7.0"
],
"env": {
"MCP_SERVER_RESOURCE_SERVER_URL": "your-value",
"MCP_SERVER_AUTH_PROVIDER": "your-value",
"MCP_SERVER_REQUIRED_SCOPES": "your-value",
"MCP_SERVER_TRANSPORT_ALLOWED_HOSTS": "your-value",
"MCP_SERVER_ENTRA_TENANT_ID": "your-value",
"MCP_SERVER_ENTRA_AUDIENCE": "your-value",
"MCP_SERVER_ENTRA_APPLICATION_ID_URI": "your-value",
"MCP_SERVER_GENERIC_ISSUER_URL": "your-value",
"MCP_SERVER_GENERIC_AUDIENCE": "your-value",
"MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"auth-template": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_SERVER_RESOURCE_SERVER_URL",
"-e",
"MCP_SERVER_AUTH_PROVIDER",
"-e",
"MCP_SERVER_REQUIRED_SCOPES",
"-e",
"MCP_SERVER_TRANSPORT_ALLOWED_HOSTS",
"-e",
"MCP_SERVER_ENTRA_TENANT_ID",
"-e",
"MCP_SERVER_ENTRA_AUDIENCE",
"-e",
"MCP_SERVER_ENTRA_APPLICATION_ID_URI",
"-e",
"MCP_SERVER_GENERIC_ISSUER_URL",
"-e",
"MCP_SERVER_GENERIC_AUDIENCE",
"-e",
"MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS",
"ghcr.io/brunovicco/mcp-server-auth-template:v0.7.0"
],
"env": {
"MCP_SERVER_RESOURCE_SERVER_URL": "your-value",
"MCP_SERVER_AUTH_PROVIDER": "your-value",
"MCP_SERVER_REQUIRED_SCOPES": "your-value",
"MCP_SERVER_TRANSPORT_ALLOWED_HOSTS": "your-value",
"MCP_SERVER_ENTRA_TENANT_ID": "your-value",
"MCP_SERVER_ENTRA_AUDIENCE": "your-value",
"MCP_SERVER_ENTRA_APPLICATION_ID_URI": "your-value",
"MCP_SERVER_GENERIC_ISSUER_URL": "your-value",
"MCP_SERVER_GENERIC_AUDIENCE": "your-value",
"MCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
MCP_SERVER_REQUIRED_SCOPES envMCP_SERVER_TRANSPORT_ALLOWED_HOSTS envMCP_SERVER_ENTRA_TENANT_ID envMCP_SERVER_ENTRA_AUDIENCE envMCP_SERVER_ENTRA_APPLICATION_ID_URI envMCP_SERVER_GENERIC_ISSUER_URL envMCP_SERVER_GENERIC_AUDIENCE envMCP_SERVER_GENERIC_JWKS_ALLOWED_ORIGINS envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto brunovicco bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: MCP_SERVER_RESOURCE_SERVER_URL, MCP_SERVER_AUTH_PROVIDER
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.7.0) kam letzten Monat in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Docker auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, FlyDocs
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Spec-driven development workflow: your agent works issues, sessions and the status lifecycle.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
*Leia em português*
A production-oriented OAuth 2.1 resource-server reference for remote MCP: Microsoft Entra ID and
generic OIDC, exact token/resource validation, fail-closed authorization, progressive scope
challenges, stateless MCP
2026-07-28, and metadata-only OpenTelemetry evidence.
Use this repository when the hard part is not "how do I expose an MCP tool?" but how do I expose it without weakening identity, authorization, transport, and observability boundaries. The server pairs with mcp-client-auth-template for an executable end-to-end reference using synthetic identities and no production credentials.
The paired executable path validates real resource-server behavior rather than configuration claims:
403 insufficient_scope is returned before dispatch for progressive authorization401, with an explicit token-resource policy that does not depend on MCP SDK defaultstools/list is filtered per principal and carries only bounded private cache hints2026-07-28 stays stateless and does not mint Mcp-Session-IdFor a requirement-by-requirement view of the paired OAuth/MCP behavior, including explicit evidence gaps and discussion topics for the MCP Authorization Interest Group / Tool Scopes Working Group, see the Authorization Implementer Report.
flowchart LR
Client["MCP client"] -->|"OAuth 2.1 / OIDC"| AS["Authorization server Entra ID or generic OIDC"] Client -->|"MCP 2026-07-28 resource-bound bearer"| Admission["Transport admission"] Admission --> AuthN["Token verification"] AuthN --> AuthZ["Tool authorization"] AuthZ --> Tools["MCP tools"] Server["This resource server"] --- Admission
Server -->|"OIDC discovery + cached JWKS"| AS Server -.->|"W3C trace context + OTLP"| Collector["OpenTelemetry Collector"] Collector --> Tempo["Tempo"] Tempo --> Grafana["Grafana"]
The authorization server owns login, consent, client registration and token issuance. This repository owns the protected resource: transport admission, metadata publication, access-token verification, request-scoped principal construction, tool authorization and dispatch.
For layer boundaries and the detailed authorization sequence, see Architecture.
The companion client owns the executable cross-repository reference flow. With both repositories cloned as siblings, verify this server directly from source:
cd ../mcp-client-auth-template
./scripts/run_reference_demo.sh \ --server-root ../mcp-server-auth-template
The flow starts the real server from this checkout plus a deterministic local OIDC provider and proves CIMD-first Authorization Code + PKCE, authenticated whoami, bounded scope step-up, wrong-audience rejection and stateless MCP behavior.
For the observable published-image proof:
cd ../mcp-client-auth-template
./scripts/run_observability_demo.sh --keep
The observable flow verifies one distributed trace across client and server, positive Collector receipt, Tempo retrieval, Grafana provisioning and telemetry privacy assertions.
See Verification guide for the exact evidence boundary.
The terminal proof below is captured from the source-level paired reference flow:
The trace screenshots are captured from a successful observable run and focus on mcp-server-auth-template spans:
| Profile | Intended use | Key behavior |
|---|---|---|
| Entra delegated | Interactive enterprise users | Validates scp, tenant/application identifiers, issuer, audience and subject |
| Entra application | Provider-specific app-only deployments | Requires explicit idtyp=app; keeps roles separate from delegated scopes |
| Generic OIDC delegated | Standards-based interactive clients | Validates issuer/audience/signature/expiry and OAuth scopes |
| Generic OIDC client credentials | Unattended services in the deterministic pair profile | Accepts pre-registered machine tokens and progressive OAuth scopes |
Set MCP_SERVER_AUTH_PROVIDER=entra or generic to switch adapters. The example whoami tool returns the verified caller identity; health requires the additional mcp:tools:health scope and demonstrates a pre-dispatch 403 insufficient_scope challenge.
Prerequisites: Python 3.13 or 3.14 and uv.
git clone https://github.com/brunovicco/mcp-server-auth-template.git
cd mcp-server-auth-template cp .env.example .env uv sync --frozen --all-groups uv run uvicorn mcp_server_auth_template.entrypoints.mcp_server:create_app --factory --reload
Configure either the Entra or generic-OIDC block in .env, then point an MCP client at http://localhost:8000/mcp.
| Endpoint | Purpose | Authentication |
|---|---|---|
/mcp | MCP Streamable HTTP | Bearer token |
/.well-known/oauth-protected-resource | Authorization-server discovery metadata | Public |
/livez | Process liveness | Public, minimal response |
/readyz | MCP lifespan readiness | Public, minimal response |
For production-style execution:
uv run python -m mcp_server_auth_template.entrypoints.serve
See Production operations before exposing the service outside loopback.
The server is published in the Official MCP Registry as:
io.github.brunovicco/mcp-server-auth-template@0.7.0
server.json describes the public GHCR image as an OCI package using the real streamable-http transport; it does not claim a hosted remotes endpoint. Publication is gated by the secure release pipeline and a dedicated Registry workflow that validates the immutable image, ownership metadata, and persisted Registry responses before publication.
See Official MCP Registry and the Authorization Implementer Report.
The implementation is deliberately fail closed:
validate_token_resource=False policy: provider audiences (Entra API client ID, api:// identifiers) are enforced by the token verifier, never by SDK URL string equality (ADR-0027);This is a transparent reference implementation, not a security certification. Read Privacy and data handling and the architecture decisions under docs/adr/ before adapting the boundary.
2026-07-28Baseline: MCP specification 2026-07-28 and MCP Python SDK >=2.2,<3.
The paired templates exercise the modern stateless profile as executable behavior:
server/discover and per-request _meta carry protocol version, client identity and capabilities without the legacy initialize / initialized handshake;MCP-Protocol-Version, Mcp-Method and Mcp-Name;Mcp-Session-Id;resource binds the access token audience exactly;server/discover and tools/list carry SEP-2549 cache hints (ttlMs=30000, cacheScope=private);403 insufficient_scope preserves prior grants and permits only one bounded replay of the undispatched operation;io.modelcontextprotocol/oauth-client-credentials.See Compatibility and the companion client's cross-repository E2E evidence.
a2a-otel-kit continues W3C trace context at the MCP ASGI boundary. Export remains network-silent unless A2A_OTEL_ENABLED=true and a complete OTLP traces endpoint are configured. Spans are metadata-only and sit inside hardened HTTP admission but outside authentication and tool dispatch.
See LLM and application observability.
| Reference evidence | Production adoption |
|---|---|
| Synthetic local OIDC in companion demo | Enterprise authorization server with reviewed registration and consent |
| Loopback/local reference networking | TLS-protected servic
Nur der Anfang wird gezeigt; den Rest findest du im Repo