OAuth保护MCP包装器

一个完整的monorepo项目,提供受Keycloak OAuth/OIDC访问令牌保护的MCP JSON-RPC端点,包装一个微型假REST API。

  • by mesterM12
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mesterM12/mcp-server-test

使用说明

Bun+Elysia MCP包装器(密钥斗篷OAuth)

一个完整的monoreto,它包装了一个微小的伪造/有趣的REST API,带有一个受Keycapture-issued OAuth/OIDC访问令牌保护的MCP JSON-RPC端点。

堆栈

  • Bun+TypeScript
  • Elysia后端
  • Next.js前端示例(apps/web)
  • Turborepo monorepo
  • Keycloak(自托管OAuth/OIDC提供商)
  • Vitest覆盖

Monorepo布局

  • apps/mcp-server:Elysia REST+MCP服务器
  • apps/web:Next.js示例前端(Keycloak PKCE+MCP工具控制台)
  • packages/core:共享域逻辑和模式
  • packages/test-utils:可重用的测试令牌帮助程序
  • infra/keycloak:领域/客户端引导
  • docs:Claude/OpenAI集成指南

快速入门(本地)

bun install
bun run dev

或者完整的Docker堆栈:

docker compose up --build

脚本

  • bun run dev
  • bun run build
  • bun run typecheck
  • bun run lint
  • bun run test
  • bun run test:watch
  • bun run test:coverage
  • bun run docker:up
  • bun run docker:down
  • bun run docker:prod
  • bun run security:scan
  • bun run verify:all
  • bun run deploy:prod

环境

复制 .env.example 到 .env 并根据需要调整值。

对于生产风格的撰写,请复制 .env.prod.example 到 .env.prod 并设置了强大的秘密。

前端特定变量 apps/web 也包括在 .env.example:

  • MCP_SERVER_URL (默认为 http://localhost:3000)
  • KEYCLOAK_ISSUER (默认为 http://localhost:8080/realms/mcp-local)
  • KEYCLOAK_CLIENT_ID (默认为 mcp-local-client)
  • KEYCLOAK_CLIENT_SECRET (为公共PKCE客户端留空)
  • NEXTAUTH_URL (默认为 http://localhost:3333)
  • NEXTAUTH_SECRET (设置一个长随机值)

Next.js PKCE前端示例(apps/web)

示例前端演示了:

  • 用户使用Keycloak授权码+PKCE登录
  • 服务器端代理从Next.js路由处理程序调用到 POST /mcp
  • 交互式MCP工具要求:
    • tools/list
    • get_random_funny_task
    • list_funny_tasks
    • complete_funny_task

只运行前端:

bun run --cwd apps/web dev

然后打开:

  • http://localhost:3333

来自的默认本地凭据 infra/keycloak/realm-export.json:

  • 用户名: mcpuser
  • 密码: mcppass

测试

运行所有测试:

bun run test

跑步覆盖率:

bun run test:coverage

运行容器化Keycloak集成测试:

RUN_KEYCLOAK_INTEGRATION=1 bun run --cwd apps/mcp-server test -- src/integration/keycloak.integration.test.ts

集成套件现在验证了以下两项:

  • 服务到服务 client_credentials 令牌流
  • 完整授权码+PKCE用户流

一次指挥生产部署

  1. 创建并配置您的生产环境变量文件:
    cp .env.prod.example .env.prod
    
  2. 部署时进行门控验证和部署后烟雾检查:
    bun run deploy:prod
    

有用的部署标志:

scripts/deploy-prod.sh --env-file .env.prod --no-build
scripts/deploy-prod.sh --env-file .env.prod --skip-verify

这使用:

  • docker-compose.prod.yml 适用于Postgres+Keycloak+MCP服务器+Caddy
  • Caddyfile 用于反向代理入口点
  • scripts/verify-all.sh 用于类型检查/lint/测试/覆盖率/集成/安全扫描
  • scripts/security-scan.sh 用于依赖性+秘密模式检查(以及可选的Trivy图像扫描)

默认本地主机名:

  • MCP API: https://mcp.localhost
  • 钥匙斗篷: https://auth.localhost

操作说明

看 docs/operations-prod.md 对于证书行为,需要环境变量、烟雾检查和回滚。