惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
人人都是产品经理
人人都是产品经理
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Cloudflare Blog
N
News and Events Feed by Topic
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
AWS News Blog
AWS News Blog
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Spread Privacy
Spread Privacy
J
Java Code Geeks
博客园 - 聂微东
T
Tor Project blog
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Webroot Blog
Webroot Blog
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Heimdal Security Blog
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
I
InfoQ
Security Latest
Security Latest
Martin Fowler
Martin Fowler
Hacker News: Ask HN
Hacker News: Ask HN
P
Privacy International News Feed
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
雷峰网
雷峰网
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
H
Help Net Security
L
LINUX DO - 最新话题
L
LINUX DO - 热门话题

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第17章:与 Qt VTK Python pythonOCC 生态集成 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第八章:MCP 集成与上下文文件
我才是银古 · 2026-05-04 · via 博客园 - 我才是银古

第八章:MCP 集成与上下文文件

把 Hermes 接到外部工具世界,最干净的方式是 MCP(Model Context Protocol)。它由 Anthropic 推动、目前已经成为 Agent 工具互操作的事实标准。Hermes 不仅是一个出色的 MCP 客户端,还和"项目级上下文文件(context files)"无缝结合,让你不用自己写工具就能让 Agent 操作 GitHub、数据库、文件系统、内部 API 等。本章把 MCP 与 Context Files 一次讲清。

8.1 MCP 是什么

MCP(Model Context Protocol)是一种让"模型/Agent"与"外部工具/数据源"通信的协议。一个 MCP server 把若干工具、资源、prompts 打包成统一接口;一个 MCP client(如 Hermes)按协议拉清单、调工具、读资源。

它的核心好处:

  • 不必每次都写一个 Hermes 工具——已有的 MCP server 直接拿来;
  • stdio 与 HTTP 两种传输:本地子进程跑 stdio;跨机器跑 HTTP;
  • 资源(resources)和 prompts 也能被读取;
  • 工具自动发现与注册:Hermes 启动时拉清单、注册成动态工具(前缀如 mcp_<server>_<tool>)。

8.2 安装 MCP 支持

如果你用了一键安装脚本(含 [all] extra),MCP 已经装好。否则:

cd ~/.hermes/hermes-agent
uv pip install -e ".[mcp]"

依赖会带上 mcppydanticanyio 等。

8.3 添加你的第一个 MCP Server

~/.hermes/config.yaml 中加:

mcp_servers:
  filesystem:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/me/projects"]

然后启动 Hermes:

hermes

Hermes 会在启动时:

  1. 拉起这个 stdio 子进程;
  2. tools/listresources/listprompts/list
  3. 将所有工具注册成动态工具(schema 自动转成 OpenAI 风格)。

跟它说:

列一下 /home/me/projects 下的文件,然后概括其中三个最大的项目

它会自动用刚刚注册的 filesystem 工具完成。

8.4 stdio 与 HTTP 两种 server

8.4.1 stdio(推荐)

mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_TOKEN: ${GITHUB_TOKEN}
  postgres:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-postgres", "postgres://localhost/mydb"]
  obsidian:
    command: "uvx"
    args: ["mcp-server-obsidian", "--vault", "/home/me/notes"]

特点:本地子进程,无网络暴露,启动开销小。env 字段允许传具体的密钥(注意从 .env 注入)。

8.4.2 HTTP(远端)

mcp_servers:
  internal-api:
    transport: http
    url: https://mcp.example.com/internal-api/sse
    headers:
      Authorization: Bearer ${INTERNAL_API_TOKEN}
    sampling: true        # 服务器请求 sampling 时使用 Hermes 的主模型

特点:跨机器、跨网络;可以服务化部署 MCP server。开启 sampling: true 后,远端 MCP server 在它的工具内部如果需要"让 LLM 帮我决定下一步",可以反过来调用你 Hermes 当前主模型。

8.4.3 OAuth 与凭据

Hermes 支持 MCP server 的 OAuth:

mcp_servers:
  notion:
    transport: http
    url: https://mcp.notion.com/mcp
    auth: oauth          # 走 OAuth 流程

第一次启动 Hermes 会提示打开浏览器授权;token 存到 ~/.hermes/.env,自动刷新。

8.5 Per-Server 工具过滤

MCP server 暴露的工具不一定个个都要。Hermes 支持 allow/deny:

mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    tools:
      allow:
        - search_repositories
        - get_file_contents
        - create_pull_request
      # deny: ["delete_repository"]    # 或者反向

也可以全局对 MCP 工具做命名规则:

mcp:
  prefix: "mcp"             # 默认;动态工具名形如 mcp_github_search_repositories
  max_tools_per_server: 50  # 防止 server 把 200 个工具都塞 prompt

8.6 Resources 与 Prompts

部分 MCP server 暴露:

  • Resources:文件、记录、URL。Hermes 通过 mcp_<server>_read_resource 读取并就地展开(类似 @ 引用)。
  • Prompts:服务器提供"成熟的 prompt 模板"。Hermes 把它注册成 /mcp_<server>_<prompt> 斜杠命令,方便用户直接调用。

8.7 一些"立即好用"的 MCP Server 推荐

Server 干啥 安装
@modelcontextprotocol/server-filesystem 读写指定目录 npx
@modelcontextprotocol/server-github GitHub 全套(issue、PR、commit、search) npx
@modelcontextprotocol/server-gitlab 同上 GitLab 版 npx
@modelcontextprotocol/server-postgres 直连 PG,跑只读查询 npx
@modelcontextprotocol/server-sqlite SQLite npx
@modelcontextprotocol/server-puppeteer 浏览器(替代 browser_*) npx
@modelcontextprotocol/server-slack Slack 工作区 npx
mcp-server-obsidian Obsidian 知识库 uvx
mcp-server-jira Jira uvx
mcp-server-confluence Confluence uvx
mcp-server-linear Linear uvx
mcp-server-figma Figma uvx
mcp-server-stripe Stripe uvx
mcp-server-kubernetes K8s 操作 uvx
mcp-server-aws AWS CLI 风格 uvx
mcp-server-time 时区/日历 uvx
mcp-server-puppeteer-extra 浏览器+vision npx

完整列表见 mcpservers.org / Awesome MCP Servers

8.8 自己写 MCP Server

最常见做法是用 official Python/TypeScript SDK。一个最小 Python 例子:

# my_mcp_server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-tools")

@mcp.tool()
def fortune(category: str = "default") -> str:
    """返回一句随机箴言。"""
    return "..."

if __name__ == "__main__":
    mcp.run()

启动方式:在 config.yaml

mcp_servers:
  my-tools:
    command: "python"
    args: ["/abs/path/my_mcp_server.py"]

更多见官方 MCP 教程 与 Hermes guides/use-mcp-with-hermes.md

8.9 MCP vs Hermes 内置工具:什么时候选哪个

选 MCP 选写 Hermes 插件
已有现成 server 没有现成方案
跨多个 Agent 复用 仅 Hermes 用
想跨网络调用 仅本地
不想维护 Hermes 源代码 想深度结合 Hermes 内部 hook/事件
不需要访问 Hermes 内部状态 需要

8.10 Context Files:项目级"自动上下文"

除了 MCP 这种"工具协议",Hermes 还有一项让它在每个项目里"立刻知道你在做什么"的能力:Context Files

启动时(CLI 模式)Hermes 会从当前工作目录起向上递归,自动加载这些文件:

文件名 来源/惯例 作用
.hermes.md Hermes 原生 项目级针对 Hermes 的指引
AGENTS.md OpenAI / SWE-agent / Aider 等共享惯例 项目级 Agent 指引
CLAUDE.md Anthropic Claude Code 项目级 Claude 指引
SOUL.md OpenClaw 时代 注意:仅从 $HERMES_HOME 加载身份,从工作目录读
.cursorrules Cursor IDE 项目级 Cursor 规则

这些文件以一个统一节注入系统提示(在 MEMORY 之后、Tool schema 之前)。它们是"项目特征",记忆是"长期画像",二者各司其职。

8.10.1 一个典型 AGENTS.md

# Project Conventions for AI Agents

## Tech stack
- Python 3.11, FastAPI, SQLAlchemy 2.x, PostgreSQL
- pre-commit + ruff + black + pytest

## Working agreements
- Always run `pytest -x` before claiming the task done
- All new endpoints must include OpenAPI docstrings
- Migrations use Alembic; never run `alembic upgrade` without showing the SQL diff first

## Where to look
- HTTP layer: `src/api/`
- DB models: `src/db/models.py`
- Configuration: `src/config.py` (env-driven)

## Things Agents should never do
- Don't touch `data/migrations/0001_init.py`
- Don't `pip install` outside Poetry

把它放在仓库根,Hermes 在该目录下启动后立刻知道"这个项目用 FastAPI,跑 pytest -x,别动 0001 迁移"。

8.10.2 多文件协作

Hermes 默认会同时加载多个 context file 名字(按上面的列表),它们之间无优先级,全部拼接成"项目上下文"块。这样:

  • 同一个仓库可以同时容纳 Aider/Cursor/Claude Code/Hermes 的指令;
  • 不同 Agent 都能读到自己关心的文件。

8.10.3 配置控制

context_files:
  enabled: true
  filenames:
    - .hermes.md
    - AGENTS.md
    - CLAUDE.md
    - .cursorrules
  search_upward: true        # 一直向上找直到 root 或 git root
  max_total_chars: 24000     # 上限,避免某个超大文件挤爆系统提示

8.10.4 与 SOUL.md 的关系

注意:SOUL.md 不会从当前目录读,它只从 $HERMES_HOME/SOUL.md 加载,并占据系统提示的"身份"槽位(slot #1)。这是为了让"人格"不随项目漂移。

如果你想"为某个项目设一个不同人格",正确做法是用 /personality <name> overlay,而不是改 SOUL.md

8.11 Context References:@ 即时上下文

第四章简单提到过 @,这里再次强调它和 context files 的关系:

  • Context Files 是"项目级、每次开会都注入";
  • @ 引用 是"这条消息临时引入";
  • 二者互补;MCP resources 是"工具可触达的远端文件/记录"。

8.12 实战:把 Hermes 变成"GitHub + Postgres + 文件系统"全能助理

mcp_servers:
  filesystem:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/me/projects"]

  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_TOKEN: ${GITHUB_TOKEN}
    tools:
      allow:
        - search_repositories
        - get_file_contents
        - list_pull_requests
        - create_pull_request
        - merge_pull_request
        - list_issues

  postgres:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-postgres",
           "postgres://readonly:***@db.internal/myapp"]

然后在仓库放:

~/code/myapp/
├── AGENTS.md
└── ...

效果:Hermes 在 ~/code/myapp/ 里启动后,

  • 自动读到项目 AGENTS.md 知道约定;
  • mcp_filesystem_* 操作 ~/me/projects/
  • mcp_github_* 浏览/合并 PR;
  • mcp_postgres_* 跑只读 SQL 调研数据;
  • 同时仍可以用 Hermes 内置的 terminalpatchmemorysession_search

一个对话就能涵盖 issue → 调研 → 写代码 → 跑测试 → 起 PR 全流程。

8.13 调试 MCP

hermes mcp list                        # 当前启用的 MCP server
hermes mcp inspect <server>            # 看 schema、工具列表
hermes mcp test <server> tools/list    # 直接打方法
HERMES_LOG_LEVEL=debug hermes          # 看运行时日志

常见坑:

  • npx 第一次拉很慢——可以预先 npm i -g <package>
  • env 变量没注入——记得 ${VAR} 形式 + .env 内有定义;
  • HTTP server 401——检查 headers.Authorization
  • 工具数量爆炸——用 tools.allow 缩小范围。

8.14 本章小结

  • MCP 是 Hermes 与外部工具世界互通的最干净协议,stdio + HTTP + OAuth 全支持;
  • 启用方式仅需 mcp_servers: 几行 YAML,Hermes 启动时自动发现注册;
  • per-server 工具过滤、prompts、resources 一应俱全;
  • Context Files.hermes.mdAGENTS.mdCLAUDE.md.cursorrules)让 Hermes 进入项目即"懂规矩";
  • MCP + Context Files + 内置工具 + 技能四件套,几乎能覆盖你 95% 的工程任务。

下一章我们把 Hermes "扩散"出去:消息网关与 15+ 平台接入。