关于 MyAIServ: AI-Powered FastAPI Server with MCP 🚀
MyAIServ 是面向开发者的 FastAPI MCP 服务,用于连接 LLM 与应用。它将 MCP 能力与 GraphQL、WebSocket、搜索、缓存和监控结合起来。
主要功能
- 01MCP 资源、工具、提示词与采样
- 02文件、天气、文本和图像工具
- 03GraphQL 与 WebSocket API
- 04Elasticsearch 语义搜索
- 05Redis 缓存与 Prometheus 指标
适用场景
- 01向 LLM 应用提供文件和文本操作
- 02对索引内容进行语义搜索
- 03监控工具请求数与耗时
MCP 相关
该服务实现 MCP,向 MCP 客户端提供资源、工具、提示词和采样能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Server - Model Context Protocol API
MCP Server 是基于 FastAPI 实现的 Model Context Protocol(MCP),为大模型与应用之间的交互提供标准化接口。
特性
- 🚀 基于 FastAPI 和异步操作的高性能 API
- 🔄 全面支持 MCP,包括资源、工具、提示词和采样
- 📊 通过 Prometheus 和 Grafana 实现监控与指标
- 🧩 通过简单接口添加新工具,实现可扩展性
- 📝 GraphQL API,灵活处理数据
- 💬 WebSocket 支持,实现实时交互
- 🔍 通过集成 Elasticsearch 实现语义搜索
- 🗃️ 通过 Redis 缓存提升性能
- 📦 通过 Poetry 管理依赖,可靠地管理软件包
开始使用
安装
-
克隆仓库:
git clone https://github.com/yourusername/myaiserv.git cd myaiserv -
安装 Poetry(如果尚未安装):
curl -sSL https://install.python-poetry.org | python3 - -
通过 Poetry 安装依赖:
poetry install
启动服务
poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
也可以通过 just 工具启动:
just run
启动后,可通过以下地址访问 API:http://localhost:8000
API 文档
- Swagger UI:http://localhost:8000/docs
- ReDoc:http://localhost:8000/redoc
- GraphQL Playground:http://localhost:8000/graphql
项目结构
myaiserv/
├── app/
│ ├── core/ # Базовые компоненты MCP
│ │ ├── base_mcp.py # Абстрактные классы MCP
│ │ └── base_sampling.py # Базовые классы для сэмплирования
│ ├── models/ # Pydantic модели
│ │ ├── mcp.py # Модели данных MCP
│ │ └── graphql.py # GraphQL схема
│ ├── services/ # Бизнес-логика
│ │ └── mcp_service.py # Сервис MCP
│ ├── storage/ # Хранилище данных
│ ├── tools/ # Инструменты MCP
│ │ ├── example_tool.py # Примеры инструментов
│ │ └── text_processor.py # Инструмент обработки текста
│ ├── utils/ # Утилиты
│ └── main.py # Точка входа FastAPI
├── app/tests/ # Тесты
├── docs/ # Документация
│ └── MCP_API.md # Описание API
├── pyproject.toml # Конфигурация Poetry и инструментов
└── .justfile # Задачи для утилиты just
可用工具
File System Tool
用于操作文件系统,支持读取、写入、删除和列出文件。
curl -X POST "http://localhost:8000/tools/file_operations" \
-H "Content-Type: application/json" \
-d '{"operation": "list", "path": "."}'
Weather Tool
用于根据坐标获取天气数据。
curl -X POST "http://localhost:8000/tools/weather" \
-H "Content-Type: application/json" \
-d '{"latitude": 37.7749, "longitude": -122.4194}'
Text Analysis Tool
用于分析文本,包括情感分析和摘要生成。
curl -X POST "http://localhost:8000/tools/text_analysis" \
-H "Content-Type: application/json" \
-d '{"text": "Example text for analysis", "analysis_type": "sentiment"}'
Text Processor Tool
用于处理文本,包括格式化、统计数据计算和实体提取。
curl -X POST "http://localhost:8000/tools/text_processor" \
-H "Content-Type: application/json" \
-d '{"operation": "statistics", "text": "Example text", "stat_options": ["chars", "words"]}'
Image Processing Tool
用于处理图像,支持调整大小、裁剪和应用滤镜。
curl -X POST "http://localhost:8000/tools/image_processing" \
-H "Content-Type: application/json" \
-d '{"operation": "resize", "image_data": "base64...", "params": {"width": 800, "height": 600}}'
WebSocket API
连接 WebSocket API:
const socket = new WebSocket("ws://localhost:8000/ws");
socket.onopen = () => {
socket.send(JSON.stringify({
type: "initialize",
id: "my-request-id"
}));
};
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log("Received:", data);
};
GraphQL API
GraphQL 查询示例:
# Получение списка всех инструментов
query {
getTools {
name
description
}
}
# Выполнение инструмента
mutation {
executeTool(input: {
name: "text_processor",
parameters: {
operation: "statistics",
text: "Example text for analysis"
}
}) {
content {
type
text
}
is_error
}
}
运行测试
使用 Poetry 运行测试:
poetry run pytest
也可以通过 just 工具运行:
just test
Docker
使用 Docker Compose 构建和启动
docker compose up -d
启动单个服务:
docker compose up -d web redis elasticsearch
与大模型集成
MCP Server 为集成不同供应商的大模型提供标准化接口:
import httpx
async def query_mcp_with_llm(prompt: str):
async with httpx.AsyncClient() as client:
# Запрос к MCP для получения контекста и инструментов
tools_response = await client.get("http://localhost:8000/tools")
tools = tools_response.json()["tools"]
# Отправка запроса к LLM с включением MCP контекста
llm_response = await client.post(
"https://api.example-llm.com/v1/chat",
json={
"messages": [
{"role": "system", "content": "You have access to the following tools:"},
{"role": "user", "content": prompt}
],
"tools": tools,
"tool_choice": "auto"
}
)
return llm_response.json()
指标与监控
MCP Server 通过 /metrics 端点提供 Prometheus 格式的指标。指标包括:
- 每个工具的请求数量
- 请求执行时间
- 错误和异常
开发
格式化代码并运行代码检查工具:
just fmt
just lint
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。