使用说明
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客户端使用。服务器提供:
- 工具发现-客户端可以查询可用的工具及其元数据
- 工具调用-客户端可以使用参数调用工具
- 结果处理-结果直接返回给客户端
导入模块时,这些工具会自动注册,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感知扩展时:
- 配置扩展以连接到此FastMCP服务器
- 通过扩展的界面浏览可用工具
- 使用参数调用工具并接收结果
示例工具调用格式:
# 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的客户端集成。