FastMCP工具服务器

一个基于FastMCP的服务器,用于注册和调用Python函数作为工具,适用于数据库查询和领域特定功能的自动化调用。

  • by tpushkarsingh
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 tpushkarsingh/custom_mcp_server

使用说明

MCP服务器(本地MCP)

该存储库实现了一个纯粹的基于FastMCP的服务器,该服务器将数据库自检和特定于域的功能作为“工具”公开。服务器使用FastMCP将Python函数注册为MCP客户端可以发现和调用的工具。

此README解释了服务器提供的内容、如何配置它以及MCP客户端如何发现和使用这些工具。


这个服务器是什么

  • 一个公开工具注册表的纯FastMCP服务器。
  • 工具是通过FastMCP装饰器注册的Python函数。
  • 存储库中包含数据库帮助程序 app/db.py (部门、员工和工作级别的自省和领域助手)。
  • 这些助手在中注册为工具 app/mcp_server.py 使用FastMCP的工具注册系统。

预期用途是让任何了解FastMCP协议的MCP客户端发现并调用这些工具。


存储库布局(相关文件)

  • app/mcp_server.py --FastMCP服务器实施和工具注册
  • app/db.py --Postgres助手(自省+域方法,如 list_employees)
  • db-init/init.sql --数据库初始化SQL(域表和示例数据)
  • test_server.py --用于验证数据库连接和查询的小脚本

配置

配置是通过环境变量进行的。为当地发展设定默认值;根据需要进行更改。

  • DB_HOST --数据库主机(默认值: localhost)
  • DB_PORT --数据库端口(默认值: 5432)
  • DB_NAME --数据库名称(默认值: mcpdb)
  • DB_USER --数据库用户(默认值: pguser)
  • DB_PASS --数据库密码(默认值: pgpass)

在启动服务器之前,在shell或流程管理器中设置它们。例子:

export DB_HOST=localhost DB_PORT=5432 DB_NAME=mcpdb DB_USER=pguser DB_PASS=pgpass

如果您使用的是随附的 docker-compose.yml 随着 db 服务 db-init/ 脚本在postgres容器首次初始化时应用于数据库。如果你改变 db-init/init.sql 在DB已经初始化后,重新创建DB容器或对正在运行的DB手动应用SQL。


使用FastMCP服务器

该服务器被实现为纯FastMCP服务器,这意味着它可以被任何理解FastMCP协议的MCP客户端使用。服务器提供:

  1. 工具发现-客户端可以查询可用的工具及其元数据
  2. 工具调用-客户端可以使用参数调用工具
  3. 结果处理-结果直接返回给客户端

导入模块时,这些工具会自动注册,FastMCP会处理所有通信协议细节。


工具使用

可以通过任何与FastMCP兼容的客户端发现和调用工具。每个工具都是一个Python函数,具有:

  • 唯一名称
  • 可选文档
  • 键入带注释的参数
  • JSON可序列化返回值

Python中FastMCP客户端的示例用法:

from fastmcp import FastMCPClient

client = FastMCPClient("postgres-mcp-server")
tools = client.list_tools()  # discover available tools

# Invoke a tool
result = client.invoke("employees", department_id=1)
print(result)

与VS代码一起使用

VS Code可以通过任何与FastMCP兼容的扩展或客户端与此FastMCP服务器交互。这些工具是自动发现的,可以直接通过FastMCP协议调用。

使用FastMCP感知扩展时:

  1. 配置扩展以连接到此FastMCP服务器
  2. 通过扩展的界面浏览可用工具
  3. 使用参数调用工具并接收结果

示例工具调用格式:

# Example: Filter employees by department and job band
result = client.invoke("employees_filtered", 
                      department_id=1, 
                      job_band_id=2)

工具返回JSON可序列化的Python对象,任何客户端都可以轻松处理。


重要注意事项和故障排除

  • 本地使用的数据库DDL和示例数据位于 db-init/init.sql。这些语句仅在创建新的Postgres容器时自动应用(docker compose first start)。如果你修改 db-init/init.sql 在DB已经存在后,执行以下任一操作:

    • 重新创建数据库容器,以便再次运行初始化,或
    • 连接到正在运行的数据库并手动应用SQL(psql或数据库客户端)。
  • 如果工具因以下错误而失败 relation "XXX" does not exist,确认数据库架构存在 DB_* env变量指向正确的数据库。

  • MCP包装器仅接受并返回JSON可序列化结果。工具函数应返回简单的Python原语(字典、列表、字符串、数字)或JSON可序列化的对象(例如,使用psycopg2 RealDictCursor,结果类似字典且可序列化)。


安全

  • 此存储库用于本地开发。部署时,使用FastMCP的内置安全功能进行身份验证和授权。

扩展服务器

  • 要注册新工具,请在中添加一个函数 app/mcp_server.py 并用 @mcp.tool
  • 使用 mcp.expose_module(your_module) 自动公开模块中的所有公共函数
  • 添加文档字符串和类型提示,以提高工具的可发现性和使用率

下一步(建议)

  • 添加示例FastMCP客户端代码,显示工具发现和调用
  • 使用FastMCP的测试工具添加单元测试
  • 添加更详细的工具文档和参数模式
  • 实施其他数据库自检工具

该服务器现在是一个纯FastMCP实现,使其更容易维护和与任何兼容FastMCP的客户端集成。