任务管理应用

一个基于FastAPI的任务管理应用,集成MCP服务器,使用PostgreSQL数据库,提供任务CRUD功能和代理端点。

  • by IliaFarzi
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 IliaFarzi/int-postgres-crud-mcp

使用说明

任务管理应用程序

概述

该项目提供了 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=<your_openai_api_key_here>
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 如果需要,可以重置容器和数据库卷。