任务管理应用程序
概述
该项目提供了 FastAPI应用程序 用于管理任务,与 (MCP)服务器该系统采用PostgreSQL容器化,并在域逻辑、服务抽象和API层之间进行了明确的分离。
该架构确保:
- 一致的类型和数据模式 接口之间。
- 服务抽象 通过PostgreSQL查询
psycopg. - 使用单例模式和依赖项注入清除API生命周期管理。
- 独立MCP服务器功能。
______________________________________________________________________
技术栈
- Python 3.12
- 快速API (REST API服务器)
- FastMCP (mcp服务器)
- Dotenv。 (环境变量)
- psycopg (PostgreSQL客户端)
- 皮丹提克 (数据验证)
- 朗肯 (代理集成)
- langchain_mcp_适配器 (MCP工具适配器)
- PostgreSQL (集装箱化数据库)
______________________________________________________________________
安装说明
1.创建一个 .env 文件
创建一个 .env 在项目根中。例子:
POSTGRES_DB=task_mcp
POSTGRES_USER=root
POSTGRES_PASSWORD=123qwe123QWE
DATABASE_URL=postgresql://root:123qwe123QWE@postgres:5432/task_mcp
OPENAI_API_KEY=
PHOENIX_COLLECTOR_ENDPOINT=http://phoenix:6006
PHOENIX_ENABLE_TRACING=true提示: 这DATABASE_URL使用Docker网络主机名(postgres)而不是localhost因为容器是通过Docker网络连接的。
______________________________________________________________________
2.启动应用程序
构建并运行容器:
docker-compose up -d --build-d在后台运行容器。--build在发生更改时重建图像。
查看REST API文档,网址:
http://127.0.0.1:8000/docs要检查MCP服务器:
npx @modelcontextprotocol/inspector python task_mcp_server.py______________________________________________________________________
建筑
目录概述
domain/–定义类型和数据模式,在接口之间一致共享。
service/–包含依赖库的逻辑,例如。,task_service.py使用以下命令对PostgreSQL查询进行抽象psycopg。由工具和端点使用。
app/–API层:
- routes/ –端点定义。 - life_span.py –确保服务依赖性的单例模式,API的正确设置/拆卸。
main.py–FastAPI应用程序的入口点开始:
- 任务CRUD API - MCP服务器 - 使用MCP的代理端点
task_mcp_server.py–可以作为独立的MCP服务器运行,而无需main.py.
______________________________________________________________________
设计考量
- 服务摘要: 逻辑集中在
service以避免API和MCP服务器之间的重复。 - 单例和生命周期管理: FastAPI应用程序使用
life_span.py以确保服务初始化一次并正确清理。 - 集装箱数据库: Postgres在Docker容器中运行,通过Docker网络连接到应用程序。
______________________________________________________________________
局限性
- 目前的工具是基本的,可以扩展为:
- 文本搜索 - 任务字段的语义搜索
- 预计两者之间会有一些重复
task_router和task_mcp_server逻辑原因:
- 不同的错误处理(HTTPException 对比 ToolError) - FastAPI与FastMCP的不同装饰器
- MCP服务器无法从API服务器中使用的单例或依赖项注入中获益,因为它在单独的进程中运行。
______________________________________________________________________
使用说明
- 确保
.env凭据匹配POSTGRES_PASSWORD和DATABASE_URL不匹配将导致身份验证错误。 - 使用
docker-compose down -v如果需要,可以重置容器和数据库卷。
______________________________________________________________________
