使用说明
智能MCP服务器
一个HTTP-友好模型上下文协议(MCP)服务器,它为MCP客户端公开JSON-RPC,并提供一个版本化的REST API,用于管理提示、资源和工具。该实现遵循域、用例、基础设施和适配器之间的干净架构划分。持久性通过SQLAlchemy依赖于SQLite,而语义搜索则由FAISS+句子转换器嵌入提供支持。一切都是容器/Kubernetes就绪的,并附带了自动化测试。
🚀 亮点
- 干净的架构布局(域/用例/适配器/基础设施)
- FastAPI应用程序,带有与Cursor和其他MCP客户端兼容的手动JSON-RPC处理程序
- 通过SQLAlchemy+Pydantic域模型实现SQLite持久化
- FAISS矢量存储,用于对资源/工具进行语义搜索
- SentenceTransformer嵌入(可配置模型)
- Kubernetes为DB+FAISS索引提供持久存储
- 演示脚本和基于pytest的API覆盖范围
- 自动文档可在
/docs
📋 先决条件
- Python 3.12+
- 点
🛠️ 安装
cd /Users/mdnaziurrahman/Documents/mcp-server-101
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
1.为数据库添加种子
python scripts/seed_data.py
这将重置SQLite数据库+FAISS索引,并加载精心策划的提示/资源/工具。
2.运行服务器
python run_server.py
终点:
- JSON-RPC MCP端点:
POST http://127.0.0.1:8000/ - REST API根:
http://127.0.0.1:8000/api/v1 - 文件:
http://127.0.0.1:8000/docs - 健康:
http://127.0.0.1:8000/health
📁 项目结构
mcp-server-101/
├── src/
│ └── mcp_server/
│ ├── __init__.py
│ ├── core/ # configuration helpers
│ ├── domain/ # domain models + repository interfaces
│ ├── usecases/ # application services
│ ├── infrastructure/ # SQLite + FAISS adapters
│ └── adapters/http/ # FastAPI app + schemas
├── scripts/
│ └── seed_data.py
├── deploy/ # Kubernetes manifests
├── tests/ # pytest API coverage
├── docs/
├── run_server.py
├── requirements.txt
└── README.md
⚙️ 配置
环境变量(默认值存在 core/config.py):
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_DATABASE_URL |
SQLAlchemy URL | sqlite:///data/mcp.db |
MCP_FAISS_INDEX_PATH |
FAISS索引文件的路径 | data/faiss.index |
MCP_EMBEDDING_MODEL_NAME |
句子转换器模型 | sentence-transformers/all-MiniLM-L6-v2 |
MCP_EMBEDDING_DIM |
嵌入向量维度 | 384 |
MCP_FAISS_TOP_K |
默认语义结果计数 | 5 |
🔌 API概述
MCP JSON-RPC(POST /)
支持的方法: initialize, notifications/initialized, resources/list, resources/read, prompts/list, prompts/get, tools/list, tools/call, ping.
REST管理API(/api/v1)
| 方法 | 路径 | 描述 |
|---|---|---|
GET |
/prompts |
列表提示 |
GET |
/prompts/{id} |
提取提示 |
POST |
/prompts |
创建提示 |
PUT |
/prompts/{id} |
更新提示 |
DELETE |
/prompts/{id} |
删除提示 |
GET/POST/PUT/DELETE |
/resources, /tools |
资源和工具的语义相同 |
GET |
`/search?q=...&target=all | prompt |
GET |
/health |
健康探头 |
GET |
/docs |
FastAPI swagg-docs |
快速cURL片段
# Create a prompt
curl -X POST http://localhost:8000/api/v1/prompts \
-H "Content-Type: application/json" \
-d '{"name":"My Prompt","role":"system","content":"Hi","tags":["demo"]}'
# Semantic search
curl "http://localhost:8000/api/v1/search?q=vector+database"
# MCP initialize
curl -X POST http://localhost:8000/ \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
🧰 内置Meta MCP工具
MCP tools/list 响应总是包含一组元工具,因此Cursor(或任何MCP客户端)可以在没有定制REST调用的情况下管理数据:
meta.createPrompt/meta.updatePromptmeta.createResource/meta.updateResourcemeta.createTool/meta.updateToolmeta.searchResources/meta.searchTools(FAISS支持的语义搜索)
用标准调用它们 tools/call RPC并将记录的JSON模式传递给 arguments.Responses以JSON格式返回受影响的对象(或搜索结果)。
🔍 与光标一起使用
创建或更新 ~/.cursor/mcp.json:
{
"mcpServers": {
"dev-mcp": {
"url": "http://localhost:8000",
"type": "http",
"enabled": true
}
}
}
您的MCP服务器将显示为 dev-mcp 可以访问提示/资源/工具以及语义搜索。
🧪 测试
pytest
互动演示
python scripts/demo_management_api.py
该脚本执行健康检查、CRUD、语义搜索和JSON-RPC发现流程。
☁️ Kubernetes部署
kubectl apply -f deploy/pvc.yaml
kubectl apply -f deploy/deployment.yaml
kubectl apply -f deploy/service.yaml
该部署安装了一个PVC /app/data 因此SQLite和FAISS索引在pod重启时都会持续存在。更新 image 标签指向您已发布的容器。
📦 依赖项
fastapi,uvicorn[standard]pydantic,pydantic-settingssqlalchemysentence-transformers,faiss-cpumcp[cli]pytest用于测试
看 requirements.txt 查看完整列表。
📄 许可证
MIT许可证-可根据需要自由使用和修改。
🤝 贡献
这是一个个人/学习项目。请随意分叉和定制!
内置于❤️ 使用官方的MCP Python SDK。
