安全MCP TypeScript服务器
一个基于TypeScript的模型上下文协议(MCP)服务器,采用Asgardeo提供的OAuth2认证。
概述
这个项目展示了如何创建一个安全的MCP服务器,该服务器能够:
- 使用TypeScript确保类型安全
- 使用Asgardeo实现OAuth2认证
- 暴露需要认证的MCP工具
- 返回经过身份验证的用户资料信息
先决条件
- Node.js(v16或更高版本)
- npm、yarn 或 pnpm
- Asgardeo账户
- Claude 桌面版
快速入门
1. 克隆仓库
git clone https://github.com/ngsanthosh/typescript-mcp-auth-quickstart.git
cd typescript-mcp-auth-quickstart2. 安装依赖项
npm install3. 配置Asgardeo
- 登录您的 Asgardeo 控制台
- 导航至 应用程序 > 新建应用程序
- 选择 单页应用程序 并完成向导设置
- 名字SecureMCPServer 翻译为中文是:“安全MCP服务器” - 授权重定向URLhttp://localhost:3000/oauth/callback 翻译为中文是:“本地主机的3000端口上的OAuth回调地址”
- 从应用程序中保存以下值:
- client-id (来自“协议”选项卡) - 基本URL(例如。, https://api.asgardeo.io/t/your-org)
4. 设置环境变量
创建一个 .env 在根目录中的文件:
cp .env.example .env更新 .env 使用您的Asgardeo配置:
ASGARDEO_BASE_URL=https://api.asgardeo.io/t/your-org
PORT=30005. 构建并运行
开发模式:
npm run dev生产模式:
npm run build
npm start服务器将在 http://localhost:3000/mcp
6. 配置Claude桌面版
- 打开Claude桌面版
- 首选 设置 > 开发者选项
- 点击 编辑配置 打开
claude_desktop_config.json - 添加以下配置:
{
"mcpServers": {
"secure-whoami-server": {
"command": "npx",
"args": [
"mcp-remote@latest",
"http://localhost:3000/mcp",
"--static-oauth-client-info",
"{\"client_id\": \"\"}",
"--static-oauth-client-metadata",
"{\"scope\": \"openid profile email\"}"
]
}
}
}替换 `` 使用您Asgardeo应用程序中的客户端ID。
7. 测试服务器
- 重启Claude桌面版
- 您将被重定向到Asgardeo进行登录
- 认证通过后,请问Claude: “我是谁?”
- 服务器将返回您经过身份验证的用户资料信息
项目结构
.
├── src/
│ └── index.ts # Main MCP server implementation
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── .env.example # Example environment variables
├── .gitignore # Git ignore rules
├── README.md # This file
└── LICENSE # License主要特点
- OAuth2 认证通过Asgardeo进行安全认证
- 类型安全全面支持 TypeScript
- MCP 工具暴露
whoami返回用户资料的工具 - Express 服务器基于Express.js构建的HTTP传输层
- 认证中间件保护MCP端点,使用
mcpAuthServer.protect()
可用工具
我是谁
返回已认证用户的个人资料信息。
输入: 无
输出:
{
"profile": {
"sub": "user-id",
"email": "user@example.com",
"given_name": "John",
"family_name": "Doe",
...
}
}环境变量
| 变量 | 描述 | 示例 |
|---|---|---|
ASGARDEO_BASE_URL | 您的Asgardeo组织基础URL | https://api.asgardeo.io/t/my-org |
PORT | 服务器端口(默认:3000) | 3000 |
故障排除
“未认证”错误
- 确保您已在Asgardeo中创建了一个测试用户指南;引导者)
- 在Claude Desktop配置中验证您的客户端ID是否正确
- 清除浏览器缓存并尝试重新登录
服务器无法启动
- 检查端口3000是否未被使用:
lsof -i :3000 - 验证所有环境变量是否已设置
.env - 确保 Node.js 版本为 16 或更高版本
模块未找到错误
- 跑
npm install再次 - 删除
node_modules和package-lock.json,然后重新安装
了解更多
许可证
麻省理工学院(MIT)
支持
对于问题和疑问:
- 检查一下 Asgardeo 文档
- 参观 Stack Overflow(堆栈溢出,但在此语境下通常指一个知名编程问答网站)
- 在这个仓库中打开一个问题(或:提交一个问题)
