MCP服务器模板

一个基于FastMCP的MCP服务器模板,用于快速构建支持AI助手调用外部工具的服务器。

  • by sesopenko
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 sesopenko/mcp-base

使用说明

mcp基地

光秃秃的骨头 FastMCP 服务器模板。以此为起点,无需从头开始即可构建自己的MCP服务器。

MCP(模型上下文协议) 是一个开放标准,允许AI助手调用外部工具和服务。此模板通过HTTP实现MCP,因此任何兼容MCP的AI应用程序都可以访问您的服务器。


先决条件

  • 码头工人 --对于Docker Compose部署路径
  • 紫外线 --有关源部署路径(请参见 安装uv)
  • Node.js --git提交钩子所必需的;钩子使用 提交规范检查 强制执行常规提交,这是用于提交消息验证的同类最佳Node.js工具

自定义模板

1.复制模板

在GitHub上 --点击 使用此模板→ 创建新仓库。这创建了一个没有分叉关系和模板历史的干净副本。

没有GitHub --克隆、删除历史记录并重新初始化:

git clone https://github.com/sesopenko/mcp-base.git my-project
cd my-project
rm -rf .git
git init
git add .
git commit -m "chore: bootstrap from mcp-base template"

2.自定义身份值

编辑 project.env 设置自己的值(Docker镜像名称、包名称、项目名称、描述),然后运行安装脚本在整个存储库中替换它们:

bash scripts/apply-project-config.sh

该脚本是幂等的,可以安全地多次运行。


快速开始

选项A——Docker编写

  1. 创建一个 docker-compose.yml:

    services:
      mcp-base:
        image: sesopenko/mcp-base:latest
        ports:
          - "8080:8080"
        volumes:
          - ./config.toml:/config/config.toml:ro
        restart: unless-stopped
    
  2. 复制示例配置并对其进行编辑:

    cp config.toml.example config.toml
    
  3. 启动服务器:

    docker compose up -d
    

选项B——从源运行

  1. 安装 紫外线 如果你还没有。

  2. 安装依赖项:

    uv sync
    
  3. 复制示例配置并对其进行编辑:

    cp config.toml.example config.toml
    
  4. 启动服务器:

    uv run python -m mcp_base
    

安全

此服务器具有 无需认证 在其MCP端点上。它仅设计用于局域网。

请勿将此服务器直接暴露于互联网。

如果您需要远程访问它,请将其放置在处理TLS终止和访问控制的反向代理后面。配置反向代理不在此项目范围内。


配置

创建一个 config.toml 在工作目录中(或传递 --config <path>):

[server]
host = "0.0.0.0"
port = 8080

[logging]
level = "info"

[服务器]

密钥 默认值 描述
host "0.0.0.0" MCP服务器监听的地址。 0.0.0.0 绑定所有接口。
port 8080 MCP服务器侦听的端口

[日志记录]

密钥 默认值 描述
level "info" 日志冗长。什么之中的一个: debug, info, warning, error.

连接AI应用程序

此服务器使用 可流式传输的HTTP MCP运输。客户端通过HTTP POST与流式响应进行通信——在浏览器中打开端点将返回 Not Acceptable 错误,这是预期的。

将兼容MCP的AI应用程序指向服务器的MCP端点:

http://<host>:<port>/mcp

例如,如果服务器正在运行 192.168.1.10 使用默认端口:

http://192.168.1.10:8080/mcp

有关如何注册MCP服务器,请参阅您的AI应用程序的文档。确保它支持流式HTTP传输(大多数现代MCP客户端都支持)。


系统提示示例

对于系统提示,XML比markdown更受欢迎,因为显式命名标签给出了明确的语义含义——人工智能总是确切地知道每个块包含什么。Markdown标题需要推理,更容易被误解。

复制并调整此提示,为您的AI助手提供使用工具的明确指导。

小贴士——让法学硕士为你写这篇文章。 XML结构化系统提示很有效,但大多数开发人员都不熟悉,手工编写也很乏味。与任何有能力的LLM进行快速对话(描述你的工具、它们的作用以及你希望助手如何表现),都会产生一个结构良好的提示,你可以直接进入。结果通常比纯文本或markdown手动编写的任何东西都要好。

  • XML标签的作用就像带标签的文件夹——模型确切地知道每条信息的起点和终点
  • 训练数据充满了结构化标记,因此模型已经在标签中自然地“思考”了
  • 标签可防止模型将您的说明与其正在处理的内容混淆
<system>
  <role>
    You are a helpful assistant with access to an MCP server. Use the available
    tools to fulfil user requests accurately and efficiently.
  </role>
  <tools>
    <tool name="health_check">Check that the MCP server is running and reachable.</tool>
  </tools>
  <guidelines>
    <item>Call health_check if the user asks whether the server is available.</item>
  </guidelines>
</system>

可用工具

工具 说明
health_check 退货 {"status": "ok"} 确认服务器正在运行。

工具在实施过程中记录在此处。


建筑

模板遵循干净的三层分离:

文件 目的
src/mcp_base/tools.py 纯Python函数——每个工具一个函数,没有框架耦合
src/mcp_base/server.py FastMCP接线——用寄存器记录工具功能 @mcp.tool() 并运行服务器
src/mcp_base/config.py TOML配置加载-类型化数据类 [server] 和 [logging] 章节
src/mcp_base/logging.py 结构化记录器工厂

添加工具

  1. 向添加功能 src/mcp_base/tools.py 带有谷歌风格的文档字符串和完整类型的注释。
  2. 将函数导入 src/mcp_base/server.py 并在以下网址注册 @mcp.tool().
  3. 在中添加单元测试 tests/unit/.
  4. 向中添加一行 可用工具 此README中的表。

运行测试

uv run pytest tests/unit/

贡献/维护

看 维护.md 用于设置、开发命令、AI代理轨道以及如何运行测试。


许可证

版权所有(c)Sean Esopenko 2026

该项目根据 GNU通用公共许可证v3.0.


致谢:骑在巨人的背上

这个项目是在 克劳德代码,由Anthropic开发的AI编码助手。

像Claude这样的人工智能助手接受了大量数据的培训,其中大部分是由开源社区编写的:开发人员自由贡献的库、工具、文档和数十年的共享知识。没有这个基础,这样的工具是不可能的。

鉴于该债务,该项目根据 GNU通用公共许可证v3.0GPL确保此代码以及任何衍生作品保持开源。这是一个小小的互惠行为:回馈公地,使之成为可能。

对于每一位将提交推送到公共仓库、编写Stack Overflow答案或在开放许可证下发布包的开发人员——谢谢。