使用说明
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 devbun run buildbun run typecheckbun run lintbun run testbun run test:watchbun run test:coveragebun run docker:upbun run docker:downbun run docker:prodbun run security:scanbun run verify:allbun 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/listget_random_funny_tasklist_funny_taskscomplete_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用户流
一次指挥生产部署
- 创建并配置您的生产环境变量文件:
cp .env.prod.example .env.prod - 部署时进行门控验证和部署后烟雾检查:
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服务器+CaddyCaddyfile用于反向代理入口点scripts/verify-all.sh用于类型检查/lint/测试/覆盖率/集成/安全扫描scripts/security-scan.sh用于依赖性+秘密模式检查(以及可选的Trivy图像扫描)
默认本地主机名:
- MCP API:
https://mcp.localhost - 钥匙斗篷:
https://auth.localhost
操作说明
看 docs/operations-prod.md 对于证书行为,需要环境变量、烟雾检查和回滚。
