待办事项管理服务

一个基于Model Context Protocol (MCP)构建的最小化待办事项应用,支持OAuth认证,可通过AWS Bedrock AgentCore进行远程访问,并提供ChatGPT App SDK兼容性。

  • by 3dw1np
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 3dw1np/mcp-gpt-app

使用说明

待办事项列表MCP服务器

一个使用AWS Bedrock AgentCore Runtime的模型上下文协议(MCP)构建的最小待办事项列表应用程序,具有OAuth身份验证功能。

特性

  • 添加新待办事项
  • 列出所有待办事项及其完成状态
  • 将待办事项标记为已完成
  • 删除待办事项
  • 使用AWS Cognito进行OAuth身份验证
  • 通过AWS Bedrock AgentCore进行远程访问
  • ChatGPT应用程序SDK兼容性 具有小部件支持和结构化内容

可用工具

  • add_todo(task: str) -添加新的待办事项
  • list_todos() -列出所有待办事项
  • complete_todo(todo_id: int) -将待办事项标记为已完成
  • delete_todo(todo_id: int) -删除待办事项

本地测试

  1. 安装依赖项:
pip install -r requirements.txt
  1. 启动MCP服务器:
python mcp_server.py
  1. 运行测试:
./tests/run_tests.sh

AWS部署

  1. 安装部署工具:
pip install bedrock-agentcore-starter-toolkit
  1. 设置Cognito身份验证:
cd setup && ./setup_cognito.sh

此脚本自动创建Cognito用户池、客户端和测试用户。

  1. 设置DynamoDB表:
cd setup && ./setup_dynamodb.sh

此脚本为持久todo存储创建DynamoDB表。

  1. 使用OAuth配置部署(重要提示:不包括 allowedAudience -Cognito代币没有 aud 声称):
agentcore configure -e mcp_server.py --protocol MCP --name mcp_gpt_app --non-interactive --disable-memory --authorizer-config '{"customJWTAuthorizer":{"discoveryUrl":"https://cognito-idp.us-east-1.amazonaws.com/YOUR_POOL_ID/.well-known/openid-configuration","allowedClients":["YOUR_CLIENT_ID"]}}'
  1. 将DynamoDB权限添加到执行角色:
aws iam attach-role-policy --role-name AmazonBedrockAgentCoreSDKRuntime-us-east-1-f4f595c44d --policy-arn arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess
  1. 部署到AWS:
agentcore deploy

远程客户端使用

  1. 复制配置模板:
cp config.py.sample config.py
  1. 更新 config.py 与你的价值观:

    • AGENT_ARN:你部署的特工ARN
    • BEARER_TOKEN:新鲜干邑访问令牌
    • AWS_REGION:AWS区域(默认:us-east-1)
  2. 测试远程客户端:

python mcp_remote_client.py

ChatGPT应用SDK集成

服务器包括ChatGPT App SDK兼容性和小部件支持:

  1. 启动ChatGPT兼容服务器:
python mcp_chatgpt_server.py
  1. 测试服务器:
python test_chatgpt_server.py
  1. ChatGPT的功能:
    • 带有可视化UI模板的小部件支持工具
    • 结构化内容响应,实现丰富的交互
    • 更好的用户体验工具调用元数据
    • 基于web的客户端的CORS支持

Claude桌面集成

直接使用Claude Desktop测试您部署的MCP服务器:

1.配置克劳德桌面

编辑Claude Desktop的配置文件:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

添加此配置:

{
  "mcpServers": {
    "todo-list-remote": {
      "command": "/path/to/your/project/.venv/bin/python",
      "args": ["/path/to/your/project/mcp_bridge_server.py"],
      "cwd": "/path/to/your/project"
    }
  }
}

重要:替换 /path/to/your/project 根据您的实际项目路径。

2.更新承载令牌

生成新令牌(每小时过期一次):

cd setup && ./generate_token.sh

更新 config.py 使用新令牌。

3.重新启动克劳德桌面

关闭并重新打开Claude Desktop以加载配置。

4.测试远程MCP工具

在Claude Desktop中,您现在可以使用:

  • “添加待办事项:购买杂货”
  • “列出我的所有待办事项”
  • “将待办事项1标记为已完成”
  • “删除待办事项2”

这 mcp_bridge_server.py 充当Claude Desktop(stdio)和部署的AWS MCP服务器(带OAuth的HTTP)之间的桥梁。

MCP检查器集成

使用MCP检查器测试部署的服务器:

  1. 启动MCP检查器:
npx @modelcontextprotocol/inspector
  1. 配置连接:
    • 运输: 可流式传输的HTTP
    • URL:您的AgentCore端点URL
    • 头球 Authorization: Bearer YOUR_TOKEN

认证

服务器使用OAuth 2.0和AWS Cognito。不记名代币在1小时后过期。

重要的OAuth配置说明:

  • 不 allowedAudience 必需的:Cognito访问令牌不包括 aud 默认索赔
  • 仅限使用 allowedClients:这将验证JWT令牌中的客户端ID
  • 新代币:过期时生成新令牌(每小时)

生成新代币:

使用令牌生成脚本:

cd setup && ./generate_token.sh

使用自定义参数:

cd setup && ./generate_token.sh CLIENT_ID CLIENT_SECRET POOL_ID

使用完整的设置脚本(创建新池):

cd setup && ./setup_cognito.sh

手动生成令牌:

CLIENT_ID="your_client_id"
CLIENT_SECRET="your_client_secret"
USERNAME="testuser"
PASSWORD="TestPassword123!"

SECRET_HASH=$(echo -n "${USERNAME}${CLIENT_ID}" | openssl dgst -sha256 -hmac "$CLIENT_SECRET" -binary | base64)

aws cognito-idp initiate-auth \
  --client-id "$CLIENT_ID" \
  --auth-flow USER_PASSWORD_AUTH \
  --auth-parameters USERNAME=$USERNAME,PASSWORD=$PASSWORD,SECRET_HASH=$SECRET_HASH \
  --region us-east-1 \
  --query 'AuthenticationResult.AccessToken' \
  --output text

项目结构

├── mcp_server.py           # Main MCP server
├── mcp_chatgpt_server.py   # ChatGPT App SDK compatible server
├── mcp_remote_client.py    # Remote client example
├── config.py.sample        # Configuration template
├── setup/                  # Cognito setup scripts
│   └── setup_cognito.sh    # OAuth setup script
├── tests/                  # Test files
│   ├── test_basic.py       # Basic functionality tests
│   ├── test_comprehensive.py # Full feature tests
│   ├── test_errors.py      # Error handling tests
│   └── run_tests.sh        # Test runner script
├── test_chatgpt_server.py  # ChatGPT App SDK server test
├── requirements.txt        # Dependencies
└── __init__.py            # Python package file