项目简介
本项目是一个演示如何为Model Context Protocol (MCP) 服务器实现强大的认证和授权机制的示例。它结合使用了AWS Cognito进行用户身份验证和客户端认证,以及AWS Verified Permissions (AVP) 实现基于策略的细粒度访问控制,特别是对服务器提供的工具进行权限管理。
主要功能点
- 实现一个符合MCP协议规范的基础服务器。
- 通过OAuth2和AWS Cognito实现客户端(如Agent应用)对MCP服务器的认证。
- 使用AWS Verified Permissions (AVP) 定义和 enforcing 访问策略。
- 基于客户端的Scopes和AVP策略,过滤 MCP 服务器返回的工具列表,确保客户端只能看到其被授权使用的工具。
- 允许工具根据经过认证的用户身份获取临时AWS凭证, enabling 用户级别的资源访问控制(例如,S3和DynamoDB操作)。
- 提供一个简单的客户端应用来演示不同的权限如何影响可用的工具。
安装步骤
- 克隆仓库并安装依赖:
git clone https://github.com/birenderpal/mcp-authentication-demo.git cd mcp-authentication-demo npm run install:all - 部署AWS Amplify后端:
这将创建Cognito用户池、身份池等资源。cd client npx amplify deploy # 或者使用 npx ampx sandbox 进行本地测试 - 手动配置AWS资源: 根据README中的指示,您需要在AWS控制台中手动配置Amazon Verified Permissions (AVP) 策略存储、Schema和策略,以及配置Cognito身份池的角色映射。这些是实现细粒度授权的关键步骤。
- 更新服务器配置:根据Amplify部署输出(位于 'client/amplify_outputs.json')以及您的手动AWS配置,更新服务器的环境变量或配置文件(通常是 '.env' 或类似的机制),提供Cognito用户池ID、身份池ID、AVP策略存储ID和AWS区域。
服务器配置
MCP客户端需要知道如何连接到此服务器。以下是基于项目代码和结构推断出的MCP服务器配置信息(JSON格式),您可以将其提供给您的MCP客户端:
{ "name": "demoserver", "command": "node", "args": [ "server/src/index.js" ], "url": "http://localhost:3001/mcp", "capabilities": {} }
- 'name': MCP服务器的唯一名称,用于标识。
- 'command': 启动MCP服务器进程的命令(例如,'node')。
- 'args': 传递给启动命令的参数,这里是服务器的入口文件路径。
- 'url': MCP服务器监听的HTTP URL,客户端通过此URL发送JSON-RPC请求。
- 'capabilities': 服务器声明支持的MCP协议能力,具体内容取决于服务器实现。
请注意,上述 'url' 是本地开发环境的默认设置。在生产环境中,您需要将其替换为实际部署后服务器的公共可访问URL。
基本使用方法
- 确保您已完成所有安装和配置步骤(包括手动配置AWS)。
- 启动客户端和服务器:
或者分别启动:npm run devnpm run server:dev npm run client:dev - 通过浏览器访问客户端应用(通常是 'http://localhost:3000')。
- 客户端应用将引导您完成认证流程,并连接到MCP服务器。
- 根据您使用的客户端身份和AWS中配置的AVP策略,客户端将只能看到并调用其被授权使用的工具。例如,某些客户端可能只能列出S3存储桶,而其他客户端可能还能列出DynamoDB表。
信息
分类
开发者工具