Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
OAuth 2.1/OIDC resource-server reference for secure MCP authorization
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
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_ORIGINS必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"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"
}
}
}
}ターミナルでこれを実行します
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.0動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
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 envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント brunovicco で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:MCP_SERVER_RESOURCE_SERVER_URL, MCP_SERVER_AUTH_PROVIDER
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.7.0)がレジストリに届いたのは先月です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにDockerも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, SuperCollider
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Make sound with SuperCollider: synths, drums, chords, melodies and soundscapes over OSC.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
*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
冒頭だけを表示しています。続きはリポジトリで読めます