🧠 一个mcp
🚀 概述
一个mcp 是一种轻量级 MCP(模型上下文协议) 使用构建的服务器 快速API 它支持智能工具管理和API的语义搜索。 它允许您使用自然语言上传、管理和查询API工具,由现代嵌入模型通过 sentence-transformers.
服务器支持多种传输模式(stdio、HTTP或同时支持这两种传输模式),并提供REST API和MCP工具接口,以实现最大的灵活性。
______________________________________________________________________
✨ 特性
- 🔍 语义搜索: 使用语句转换器嵌入,基于描述性查询查找相关的API工具。
- 📤 上传工具: 通过JSON主体或文件上传添加新的API工具。
- 🗑️ 删除工具: 按名称删除特定工具(支持批量删除)。
- 🧾 工具统计: 深入了解存储的工具,包括计数、模型和存储路径。
- 🧹 工具管理: 轻松清理、检查或修改您的工具库。
- ⚡ FastAPI后端: 高性能、异步就绪的后端服务器。
- 🤝 MCP兼容性: 双接口-用于无缝集成的REST API和MCP工具。
- 🔄 双重运输: 同时支持stdio和HTTP传输。
- 💾 永久存储: 工具和嵌入保存到磁盘,并自动加载。
- 📊 结构化日志记录: 使用旋转文件处理程序进行全面的日志记录。
______________________________________________________________________
🧩 项目结构
one-mcp/
├── server.py # Main application entry point with server orchestration
├── mcp_server.py # MCP server class with multi-transport support
├── api.py # FastAPI routes and REST endpoints
├── mcp_tools.py # MCP tool definitions and handlers
├── models.py # Pydantic models for request/response validation
├── tools_store.py # Persistent tool storage with embeddings
├── config.py # Server configuration and argument parsing
├── logging_setup.py # Centralized logging configuration
├── test_specs.json # Sample tool dataset for testing
├── CURLS.md # Example cURL commands for testing API endpoints
├── MCP_TOOLS.md # MCP tools documentation
├── requirements.txt # Project dependencies
├── Dockerfile # Docker containerization (CPU-based dependencies)
└── README.md # Project documentation (this file)______________________________________________________________________
⚙️ 安装
1.克隆存储库
git clone https://github.com/freakynit/one-mcp.git
cd one-mcp2.设置虚拟环境
python -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows3.安装依赖项
pip install -r requirements.txt依赖关系包括:
fastapi>=0.104.0
uvicorn>=0.24.0
fastmcp>=0.2.0
python-multipart>=0.0.6
torch==2.4.1
torchvision==0.19.1
torchaudio==2.4.1
sentence-transformers>=2.2.0
scikit-learn>=1.3.0
numpy>=1.24.0______________________________________________________________________
🧠 运行服务器
备注:第一次运行服务器时,它将下载 all-MiniLM-L6-v2 句子转换模型。这可能需要几秒钟,具体取决于您的互联网连接。从双传输(stdio+HTTP)开始
python server.py --transport stdio,http --port 8003这同时启用MCP stdio通信和HTTP REST API访问。
仅HTTP模式
python server.py --transport http --port 8003仅标准模式(适用于MCP客户端)
python server.py --transport stdio直接使用Uvicorn
uvicorn server:app --host 0.0.0.0 --port 8003配置选项
--transport:传输模式(stdio、http或stdio、http-默认值:stdio--port:HTTP端口号-默认值:8000--host:要绑定的主机-默认值:0.0.0.0--storage_path:存储工具嵌入的路径-默认:tool_embeddings.json
默认情况下,服务器从以下位置启动: 👉 http://localhost:8003 (启用HTTP传输时)
服务器自动执行以下操作:
- 创建一个
logs/应用程序日志目录 - 从加载现有工具
tool_embeddings.json启动时 - 修改后将工具保存到磁盘
______________________________________________________________________
🧪 测试API
服务器提供两个接口:
- REST API:可在
/api/*端点(请参见 CURLS.md 例如) - MCP工具:可通过MCP协议获得(参见 MCP_TOOLS.md 文件)
REST API端点
所有端点都返回带有适当状态代码的结构化JSON响应。
检查服务器状态
curl http://localhost:8003/api/status通过JSON上传工具
curl -X POST http://localhost:8003/api/tools/upload-json \
-H "Content-Type: application/json" \
-d '{"tools": [{"type": "function", "name": "get_weather", "description": "Get the current weather for a specific city.", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "The name of the city to get weather for."}}}}]}'通过文件上传工具
curl -X POST http://localhost:8003/api/tools/upload-file \
-F "file=@test_tools.json;type=application/json"搜索类似工具
curl -X POST http://localhost:8003/api/tools/search \
-H "Content-Type: application/json" \
-d '{"query": "weather forecast for a city", "k": 3}'获取统计信息
curl http://localhost:8003/api/tools/stats删除特定工具
curl -X DELETE http://localhost:8003/api/tools/delete \
-H "Content-Type: application/json" \
-d '{"tool_names": ["get_weather", "get_news_headlines"]}'清除所有工具
curl -X DELETE http://localhost:8003/api/tools/clearMCP访问
MCP端点安装在 /mcp 对于HTTP流模式:
curl http://localhost:8003/mcp有关完整的MCP工具文档,请参阅 MCP_TOOLS.md.
有关更全面的测试示例,请参阅 CURLS.md.
______________________________________________________________________
🧰 MCP配置示例
要与MCP客户端(如Claude Desktop)集成:
{
"mcpServers": {
"one-mcp-server": {
"command": "python",
"args": [
"/absolute/path/to/server.py",
"--transport", "stdio",
"--storage_path", "tool_embeddings.json"
]
}
}
}对于双传输模式(用于MCP+用于REST API的HTTP的stdio):
{
"mcpServers": {
"one-mcp-server": {
"command": "python",
"args": [
"/absolute/path/to/server.py",
"--transport", "stdio,http",
"--port", "8004",
"--storage_path", "tool_embeddings.json"
]
}
}
}______________________________________________________________________
🏗️ 建筑
组件
- 服务器.py:初始化应用程序并启动MCP服务器的入口点
- mcp_server.py:处理多传输服务器编排(stdio/HTTP/dual)
- api.py:FastAPI应用程序工厂和REST端点定义
- mcp_tools.py:MCP工具装饰器和函数实现
- tools_store.py:具有搜索功能的工具嵌入单例存储
- models.py:用于类型安全和验证的Pydantic模型
- config.py:配置管理和CLI参数解析
- 日志设置:使用旋转文件处理程序进行集中日志记录
运作原理
- 工具存储:工具与嵌入一起存储,使用
sentence-transformers - 语义搜索:使用余弦相似度比较查询嵌入
- 持久性:工具自动保存到
tool_embeddings.json - 双接口:通过REST API和MCP工具提供相同的功能
- 多运输:服务器可以同时运行stdio(用于MCP客户端)和HTTP
______________________________________________________________________
开发
- 创建zip:
zip -r one-mcp.zip . -x "*.git/*" -x ".env" -x ".DS_Store" -x ".dockerignore" -x ".gitignore"
______________________________________________________________________
🧑💻 贡献
欢迎投稿! 贡献:
- 分叉 存储库
- 创建 一个新的功能分支(
git checkout -b feature/my-feature) - 提交 您的更改(
git commit -m "Add my feature") - 推 到你的叉子(
git push origin feature/my-feature) - 提交拉取请求
提交前,请确保:
- 代码通过了linting和基本测试。
- 如果需要,您已经更新了文档。
______________________________________________________________________
📜 许可证
该项目根据 MIT许可证 --看看 许可证 文件以获取详细信息。
______________________________________________________________________
💬 支持
如果您遇到任何问题或有功能请求:
- 打开一个问题
- 或联系 @怪胎 直接。
