FastAPI MCP服务器和客户端
该项目提供了一个基于FastAPI的服务器,实现了模型上下文协议(MCP),并包括与OpenAI、Anthropic和Google Gemini等各种AI提供商交互的示例客户端实现。服务器支持基本用户身份验证(注册和登录)。
目录
- 拟人客户 - OpenAI客户端 - 谷歌Gemini客户端
特性
- MCP服务器: 实现模型上下文协议的FastAPI应用程序。
- 用户身份验证: 基本用户注册和登录功能(内存存储,用于演示目的)。
- 多AI提供商客户端: 示例客户:
- 拟人(克劳德模型) - OpenAI(GPT模型) - 谷歌(双子座车型)
- 互动聊天: 客户端为交互式聊天会话提供命令行界面。
- 工具使用: 演示客户端如何列出和调用MCP服务器公开的工具。
- SSE(服务器发送事件): 客户端使用SSE连接到服务器进行实时通信。
项目结构
.
├── .gitignore
├── .python-version # Specifies Python version (used by pyenv, etc.)
├── README.md # This file
├── client/ # Contains client implementations
│ ├── client_anthropic.py # Client for Anthropic (Claude)
│ ├── client_gemini.py # Client for Google (Gemini)
│ ├── client_openai.py # Client for OpenAI (GPT)
│ └── mcp_client.log # Log file for client activities (example)
├── main.py # Main FastAPI server application
├── models/ # Pydantic models
│ └── user.py # User model for authentication
├── pyproject.toml # Project metadata and dependencies for Poetry/uv
└── uv.lock # Lock file for uv (alternative to requirements.txt)先决条件
- Python 3.8+
uv(推荐使用Python包管理器)或pip- 您打算使用的人工智能服务的API密钥(Anthropic、OpenAI、Google)。
安装
- 克隆存储库:
git clone https://github.com/biplavdotcom/MCP-client-for-fastapi-mcp-server.git
cd MCP-client-for-fastapi-mcp-server- 安装
uv(如果你没有):
pip install uv- 使用创建和激活虚拟环境
uv:
uv venv # Creates a .venv directory- 在Windows上:
.venv\Scripts\activate- 在Unix/macOS上:
source .venv/bin/activate- 使用安装依赖项
uv:
uv pip install -r requirements.txt # If requirements.txt exists
# Or, if using pyproject.toml with uv/Poetry:
uv pip install .*(注:原始README中提到 requirements.txt,但回购结构表明 pyproject.toml 是主要的。如果 requirements.txt 不存在或不是最新的,请使用生成它 uv pip freeze > requirements.txt 或直接从安装 pyproject.toml)*
环境设置
创建一个 .env 文件在 根 项目目录(旁边 main.py 和那个 client/ 目录)。客户(client_anthropic.py, client_openai.py, client_gemini.py)加载此 .env 文件。
# .env
# Required for client/client_anthropic.py
ANTHROPIC_API_KEY="your_anthropic_api_key"
# Required for client/client_openai.py
OPENAI_API_KEY="your_openai_api_key"
# Required for client/client_gemini.py
# Note: The client_gemini.py uses genai.configure(api_key=os.environ.get("GOOGLE_API_KEY"))
# Ensure your environment variable is named GOOGLE_API_KEY or update the client code.
GOOGLE_API_KEY="your_google_api_key"重要提示:
- 确保
.env文件位于项目的根目录中,而不是client/目录,如python-dotenv从当前工作目录或其父目录加载它。 - 添加
.env到你的.gitignore文件以阻止提交API密钥。
运行服务器
使用启动FastAPI服务器 uvicorn (其中 uv run 可以管理):
uv run main:app --reload
# Or directly with uvicorn:
# uvicorn main:app --reload服务器通常在以下时间可用 http://127.0.0.1:8000MCP端点将位于 http://127.0.0.1:8000/mcp.
运行客户端
每个客户端连接到MCP服务器,列出可用的工具,然后与特定的AI提供商交互,如果AI要求,使用MCP服务器来促进工具调用。
启动任何客户端之前,请确保FastAPI服务器正在运行。
拟人客户
- 使用Anthropic API(例如,Claude模型,如
claude-3-5-sonnet-20241022). - 通过向Anthropic API声明服务器提供的工具来支持工具使用。
要运行Anthropic客户端,请执行以下操作:
uv run python client/client_anthropic.pyOpenAI客户端
- 使用OpenAI API(例如,GPT模型,如
gpt-4o-mini). - 通过将服务器提供的工具模式传递到OpenAI API来支持工具使用。
要运行OpenAI客户端:
uv run python client/client_openai.py谷歌Gemini客户端
- 使用Google Generative AI API(例如,Gemini模型,如
gemini-2.0-flash). - 将MCP工具模式转换为与Gemini函数调用兼容的格式。
- 管理聊天记录和工具调用/结果序列。
要运行Google Gemini客户端:
uv run python client/client_gemini.py所有客户端都提供交互式命令行界面。键入您的查询,然后按Enter键。类型 quit 退出。Gemini和OpenAI客户端也支持 refresh 命令清除对话历史记录。
安全说明
这个项目是一个演示,为了清楚起见,它包括了简化的实现。对于生产环境,请考虑以下因素:
- 用户身份验证:
- 数据库: 使用健壮的数据库(例如PostgreSQL、MySQL)而不是内存中的列表来存储用户。 - 密码散列: 使用bcrypt或Argon2等强算法安全地散列密码。切勿存储纯文本密码。 - 会话管理: 实施安全会话管理(例如,使用JWT或带有安全Cookie的服务器端会话)。
- API密钥管理:
- 安全存储API密钥(例如,使用HashiCorp Vault、AWS Secret manager或Google Cloud Secret manager等密钥管理器),而不是 .env 生产中的文件。 - 将API密钥权限限制为所需的最低权限。
- 输入验证:
- 严格验证和净化客户端和服务器端的所有用户输入,以防止注入攻击(XSS、SQLi等)。 - 验证数据类型、长度和格式。
- HTTPS: 在生产环境中始终使用HTTPS加密传输中的数据。
- 速率限制: 对API端点实施速率限制,以防止滥用。
- 错误处理: 实施全面的错误处理,不会泄露敏感信息。
- 依赖关系管理: 保持依赖关系最新,并定期扫描漏洞。
- 记录和监控: 实施稳健的日志记录和监控,以检测和应对安全事件。
贡献
欢迎投稿!请随时提交拉取请求。 一些潜在贡献的领域:
- 添加更复杂的错误处理。
- 实现更强大的用户身份验证。
- 通过MCP服务器扩展可用的工具集。
- 为其他AI提供商添加客户端。
- 编写单元和集成测试。
许可证
此项目根据MIT许可证获得许可-请参阅 LICENSE 文件以获取详细信息(如果已将其添加到存储库中,则按照原始README假定为MIT)。
