MCP客户端/服务器和OAuth示例
该项目包含2个MCP客户端和2个MCP服务器:
服务器:
- weather/weather.py:一个基本的stdio MCP服务器,无需授权
- math-server/server.py:需要授权的http服务器
客户:
- mcp-client/client.py:一个基本的stdio mcp客户端,未执行授权
- mcp-client/http_client.py:一个http mcp客户端,根据需要使用DCR执行Oauth
有关更多详细信息,请参阅嵌套README。
端到端演示说明:
这将使用3个终端:一个用于Keycloak,一个用于服务器,另一个用于 客户。
0.先决条件
安装和更新(通过您的包管理器/其他选择的方法):
- 紫外线
- docker/docker桌面
航站楼1:钥匙斗篷
docker run -p 127.0.0.1:8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak start-dev终端2:服务器
配置Keycloak,设置服务器环境
cd math-server
./setup-keycloak.sh在浏览器中运行上述命令后,导航到localhost:8080, 并登录(默认用户名和密码都设置为“admin” 上文)。转到左侧的“客户端”面板,然后转到“客户端” “注册”选项卡,然后选择“受信任的主机”。禁用“客户端URI必须 匹配”,并在“受信任的主机”字段中添加您的客户端将使用的IP地址 从\*连接,点击保存。
\*(如果你不确定你的客户端IP,一个简单的方法就是回来找 稍后执行此步骤-您第一次尝试连接客户端时, 你会得到一个403错误,但如果你查看keycloak日志(在终端1中) 您应该看到一个警告日志,其中包含CLIENT_REGISTER_ERROR和指定的 IP地址-这是要使用的地址;按照上述说明进行应用, 然后重新运行客户端)。
注: 如果你运行了此演示的早期版本,你可能已经 在您的环境中设置OAUTH_CLIENT_SECRET。按原样清除它 重写新版本使用的.env。
启动服务器
uv run server.py终端3:客户端
环境设置
客户端包装Claude,将一个简单的对话循环连接到 指定的服务器。因此,您需要提供Anthropic API密钥 在您的环境中(或 mcp-client/.env 文件):
cd mcp-client
ANTHROPIC_API_KEY=your_api_key_here运行客户端
注: 如果你已经对之前的Keycloak实例运行了客户端, 或者只是想重置演示的Oauth步骤,请使用以下命令清除mcp缓存 rm -rf ~/.mcp/cache
uv run http_client.py http://localhost:3000在第一次运行时,它应该打开一个web浏览器来请求权限,作为一部分 标准Oauth DCR流。后续运行应使用缓存信息 在必要时请求新令牌,而无需重新进行身份验证。
注: 如上文Keycloak设置部分所述,如果您遇到 a 403您可能需要将您的IP地址标记为受信任的主机
使用工具!
像“add 21+55”这样的查询应该调用服务器工具寻求帮助。
