内容
# MCP 测试
用于实验 Model Context Protocol(MCP)服务器、客户端、网关和第三方 MCP 集成的 Python 工作空间。
此仓库包含以下示例:
- 使用 `FastMCP` 创建本地 MCP 服务器
- 通过 `stdio` 连接到 MCP 服务器
- 在可流式传输的 HTTP 上运行 MCP 服务器
- 通过 LangChain MCP 适配器加载 MCP 工具
- 尝试社区/第三方 MCP 服务器,如 DuckDuckGo、Tavily 和 AWS ECS
- 在 FastMCP 网关后面安装/代理外部 MCP 服务器
## 项目结构
```text
.
|-- create_mcp/
| |-- first_mcp_server_stdio.py # 本地 stdio FastMCP 服务器
| |-- python_client.py # 原生 MCP stdio 客户端
| `-- langchain_client.py # 用于 stdio 服务器的 LangChain MCP 客户端
|-- http_mcp/
| |-- http_mcp.py # FastMCP HTTP 服务器,监听端口 8050
| `-- langchain_client.py # 用于 stdio + HTTP MCP 服务器的 LangChain 客户端
|-- 3rd party mcp/
| |-- community_mcp.py # DuckDuckGo MCP 服务器示例
| |-- tavily_mcp.py # Tavily 远程 MCP 示例
| |-- aws.py # AWS ECS MCP + Groq 模型示例
| `-- aws_tools_llm.py # AWS ECS MCP + LangGraph/Gemini 示例
|-- 4th_mcp_gateway/
| `-- mcp.py # FastMCP 网关/代理示例
|-- main.py # 最小 Python 入口点
|-- pyproject.toml # Python 项目元数据和依赖项
|-- package.json # 基本 Node 软件包元数据
`-- uv.lock # uv 锁文件
```
## 要求
- Python `>=3.14`,如 `pyproject.toml` 中配置
- [`uv`](https://docs.astral.sh/uv/) 用于依赖项安装和运行脚本
- `uvx` 用于启动第三方 MCP 服务器的示例
- 调用托管 LLM 或远程 MCP 服务的示例所需的 API 密钥
- AWS ECS MCP 示例所需的 AWS 凭证/配置文件
## 设置
安装依赖项:
```powershell
uv sync
```
激活虚拟环境(如果要直接运行 Python):
```powershell
.\.venv\Scripts\Activate.ps1
```
或者通过 `uv run` 运行脚本,它自动使用项目环境。
## 环境变量
为远程示例使用的密钥创建本地 `.env` 文件。该文件被 git 忽略,应仅保存在本地机器上。
```env
TAVILY_API_KEY="your-tavily-api-key"
GROQ_API_KEY="your-groq-api-key"
GOOGLE_API_KEY="your-google-api-key"
AWS_REGION="ap-south-1"
```
不要提交实际的 API 密钥。如果要与开发者共享必需的环境变量,请创建带有占位符值的 `.env.example` 文件。`.env.example` 被 `.gitignore` 允许,而 `.env` 和 `.env.*` 仍然被忽略。
一些原型脚本当前包含硬编码的本地路径或凭证;在共享或超出本地测试范围之前,请用环境变量替换它们。
## 运行示例
### 基本项目入口点
```powershell
uv run python main.py
```
### 本地 stdio MCP 服务器
启动服务器:
```powershell
uv run python .\create_mcp\first_mcp_server_stdio.py
```
服务器公开两个工具:
- `fetch`
- `process`
### 原生 Python stdio 客户端
此客户端启动 `first_mcp_server_stdio.py`,初始化 MCP 会话,并打印可用的工具。
```powershell
uv run python .\create_mcp\python_client.py
```
### LangChain stdio 客户端
```powershell
uv run python .\create_mcp\langchain_client.py
```
在运行之前,请更新文件中的硬编码 Python 可执行文件和脚本路径,使其与本地副本匹配。
### HTTP MCP 服务器
启动 HTTP 服务器:
```powershell
uv run python .\http_mcp\http_mcp.py
```
服务器监听:
```text
http://localhost:8050/mcp
```
它公开:
- `http_fetch`
- `http_process`
### LangChain HTTP 客户端
在另一个终端中,启动 HTTP 服务器后:
```powershell
uv run python .\http_mcp\langchain_client.py
```
此示例从本地 stdio 服务器和 HTTP MCP 服务器加载工具。
### DuckDuckGo 社区 MCP 示例
```powershell
uv run python '.\3rd party mcp\community_mcp.py'
```
此示例使用 `uvx duckduckgo-mcp-server`,加载公开的工具,并调用第一个搜索工具。
### Tavily 远程 MCP 示例
在 `.env` 中设置 `TAVILY_API_KEY`,然后运行:
```powershell
uv run python '.\3rd party mcp\tavily_mcp.py'
```
此示例连接到 Tavily 的远程 MCP 端点并列出可用的工具。
### AWS ECS MCP 示例
这些示例通过 `uvx` 启动 AWS Labs ECS MCP 服务器:
```powershell
uv run python '.\3rd party mcp\aws.py'
uv run python '.\3rd party mcp\aws_tools_llm.py'
```
运行它们之前,您需要有效的 AWS 配置。Groq 示例从 `.env` 读取 `GROQ_API_KEY`,Gemini/LangGraph 示例从 `.env` 读取 `GOOGLE_API_KEY`。
对于具有写入权限的操作,请在启用任何写入或敏感数据选项之前仔细检查 AWS ECS MCP 服务器设置。
### MCP 网关/代理
```powershell
uv run python .\4th_mcp_gateway\mcp.py
```
此示例启动 FastMCP HTTP 服务器,监听端口 `8050`,并安装了一个代理外部 MCP 服务器。
## 注意
- `create_mcp/langchain_client.py` 和 `http_mcp/langchain_client.py` 包含来自原始本地环境的绝对 Windows 路径。在运行之前,请更新它们以使用当前项目路径。
- `3rd party mcp/tavily_mcp.py` 期望 `.env` 中的 `TAVILY_API_KEY`。
- `3rd party mcp/aws.py` 期望 `.env` 中的 `GROQ_API_KEY`。
- `3rd party mcp/aws_tools_llm.py` 期望 `.env` 中的 `GOOGLE_API_KEY`。
- 一些脚本引用 `python-dotenv` 或 `langgraph` 等软件包;如果当前锁文件不包含它们,请安装它们。
- `package.json` 存在,但此仓库中的工作示例是基于 Python 的。
## 安全检查清单
- 将 `.env` 保存在 git 之外。
- 在记录必需变量时,使用 `.env.example` 进行非机密占位符。
- 用环境变量替换硬编码的 API 密钥。
- 避免提交本地机器路径。
- 在将第三方 MCP 工具连接到 LLM 代理之前,请检查其权限。