mcpField
A
A Template MCP Server

A Template MCP Server

本地服务
github.com/Alexander-Nestor-Bergmann开发工具078 周前更新

关于 A Template MCP Server

A Template MCP Server 是基于 PostgreSQL 构建 MCP 服务的教学示例。它通过简单的用户记录操作演示工具定义与请求处理,并非面向生产环境。

主要功能

  1. 01公开自定义 MCP 工具
  2. 02连接 PostgreSQL
  3. 03添加和列出用户
  4. 04按邮箱查找用户
  5. 05按邮箱删除用户
  6. 06返回结构化结果与错误

适用场景

  1. 01学习 MCP 服务实现
  2. 02搭建数据库工具原型
  3. 03演示客户端到数据库的请求

MCP 相关

它向 MCP 客户端公开用户管理示例工具,将客户端请求转换为 PostgreSQL 操作,并返回结果或错误。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"agents-mcp-demo": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

一个模板 MCP 服务

此存储库是一个模板,演示如何实现 MCP(Model Context Protocol)服务——这是一种开放标准,旨在将 AI Agent 和服务(如 Claude)连接到工具和数据源。**此存储库的主要目标是展示如何构建、配置和运行基础 MCP 服务。**其中的工具是简化示例,不适用于生产环境。

此示例服务使用简单的 PostgreSQL 数据库作为后端来管理用户数据,展示 MCP 如何在 AI Agent 与外部资源之间搭建桥梁。

概览

该服务充当 MCP 客户端(例如 AI Agent)与外部数据源(本例中是包含 users 表的示例 PostgreSQL 数据库)之间的安全网关。它演示了如何:

  • 通过 MCP 标准定义和公开自定义工具。
  • 处理来自 MCP 客户端的请求。
  • 将这些请求转换为对后端资源执行的操作(例如数据库查询)。
  • 将结构化结果或错误返回给客户端。

本示例使用的演示 users 表具有以下结构:

  • id(整数,主键)
  • name(文本)
  • email(文本,唯一)

服务公开的示例工具

为说明如何定义和公开工具,此服务实现了以下与用户数据库交互的示例函数:

  • add_user:向数据库添加新用户。
    • 参数:name(字符串)、email(字符串)
    • 返回值:确认消息(字符串)或错误。
  • get_all_users:从数据库获取所有用户的列表。
    • 参数:无
    • 返回值:用户对象列表(每个对象都是包含 id、name、email 的字典)或错误。
  • find_user_by_email:根据电子邮件地址查找特定用户。
    • 参数:email(字符串)
    • 返回值:单个用户对象(字典);如果未找到,则返回错误。
  • delete_user_by_email:根据电子邮件地址从数据库中删除用户。
    • 参数:email(字符串)
    • 返回值:确认消息(字符串)或错误。

这些工具为 MCP 服务可能提供访问权限的操作类型提供了具体示例。

先决条件

  • Python 3.10+
  • 可访问 PostgreSQL 数据库。服务需要数据库连接信息。
  • Docker(推荐用于轻松运行服务)。
  • uv(用于本地开发依赖管理)。

配置

使用环境变量配置数据库连接和服务设置。将 .env.example 文件复制为 .env,并更新其中的值:

cp .env.example .env
# Edit .env with your database details and desired server settings

关键变量:

变量说明示例必需默认值
DB_URL完整的 PostgreSQL 连接 URL。postgresql+asyncpg://user:pass@host:5432/dbname是
DB_HOSTMCP 服务监听的主机地址。0.0.0.0否0.0.0.0
DB_PORTMCP 服务监听的端口。8051否8051
MCP_SIGNING_KEY用于对客户端与服务之间的请求进行签名的可选密钥。your_very_secret_key否

注意:DB_URL 应使用兼容 asyncpg 的驱动程序前缀,例如 postgresql+asyncpg://。

用法

使用 Docker(推荐)
  1. 构建镜像: (请确保已安装并运行 Docker)

    # 导航到项目根目录(agents-mcp-demo)
    docker build -t sql-mcp-demo-server --build-arg PORT=${DB_PORT:-8051} .
    
  2. 运行容器:

    docker run --rm -d --env-file .env -p ${DB_PORT:-8051}:${DB_PORT:-8051} --name sql-mcp-server sql-mcp-demo-server
    
本地开发
  1. 安装依赖项:需要 uv。导航到项目根目录。
    # 创建虚拟环境(推荐)
    python -m venv .venv
    source .venv/bin/activate # or .\.venv\Scripts\activate on Windows
    # 使用 uv 安装
    uv pip install -e .[dev]
    
  2. 设置环境变量:确保在 shell 环境中设置了必需的 DB_URL,或将其放在根目录下的 .env 文件中(使用 dotenv)。
  3. 运行服务:
    uv run python sqlmcp/server.py
    
    (服务将使用环境变量中的主机/端口,或使用默认值)
使用 MCP 客户端连接

配置 MCP 客户端以连接正在运行的服务。连接详情取决于服务的运行方式。

SSE 配置示例(通过 Docker/Compose 运行时):

{
  "mcpServers": {
    "sqlDemoServer": { // Choose a name for this server connection
      "transport": "sse",
      "url": "http://localhost:8051/sse", // Adjust port if changed from default
    }
  }
}

Stdio 配置示例(用于本地开发):

这样客户端就可以直接管理服务进程。

{
  "mcpServers": {
    "sqlDemoServerLocal": { // Choose a name
      "command": "python", // Or path to python in your venv e.g., ".venv/bin/python"
      "args": ["sqlmcp/server.py"], // Path relative to workspace root
      "env": {
        "TRANSPORT": "stdio", // Crucial: Tells server to use stdio
        "DB_URL": "postgresql+asyncpg://user:pass@host:5432/dbname", // MUST provide DB URL
      },
      "workingDirectory": "." // Ensure paths are resolved correctly
    }
  }
}

(请根据具体设置调整路径、URL、端口和连接详情。)

开发实践

  • 代码检查/格式化:使用 Ruff(已在 pyproject.toml 中配置)。
    uv run ruff check .
    uv run ruff format .
    
  • 测试:使用 Pytest。(尚未实现测试)。
    # 占位命令,请在 tests/ 目录中添加测试
    # uv run pytest
    
    • 应在 tests/ 目录下添加测试,并遵循 sqlmcp 的结构。请遵循 Pytest 标准规范。

贡献

这主要是一个示例仓库。欢迎通过 Pull Request 提交有助于提升清晰度、正确性,或展示 MCP 服务开发最佳实践的贡献。提交前请确保代码已格式化并通过代码检查。

许可证

本项目采用 MIT License 授权。详情请参阅 LICENSE 文件,或访问 https://opensource.org/licenses/MIT。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。