MCP 服务器
将 OpenHuman Core 作为 stdio Model Context Protocol 服务器运行,供本地 MCP 客户端使用。
OpenHuman Core 可以作为可选启用的 stdio MCP 服务器运行。本地 MCP 客户端,如 Claude Desktop、Cursor 或 Zed,随后可以使用其搜索、记忆和子代理工具。
openhuman-core mcp该命令不会启动 HTTP JSON-RPC 服务器。它从 stdin 读取以换行分隔的 JSON-RPC 2.0 消息,并将 MCP 响应写入 stdout。日志输出到 stderr。添加 --verbose 以获取调试输出。
客户端来源
在 initialize,服务器会捕获 params.clientInfo.name 用于该 stdio 会话。它会按四个步骤规范化该名称:去除空白、转为小写、将每一段非 ASCII 字母数字字符替换为一个连字符,然后去掉首尾连字符。 Claude Desktop 变为 claude-desktop, Cursor 变为 cursor 和 Windsurf 变为 windsurf.
如果客户端省略 clientInfo.name,发送空值,或发送一个规范化后为空的名称,则该会话将使用纯粹的 mcp 源标签。具备写入能力的 MCP 工具会使用该标签作为记忆来源。未识别的客户端写作 mcp,而可识别的客户端写作 mcp:<client>.
工具
MCP 接口通过控制器注册表和核心安全策略进行路由。读取工具通过读取门禁。三个工具通过 act 门禁。其中两个, memory.learn 和 memory.forget,也会记录到 MCP 写入审计路径中。 agent.run_subagent 则不是,因为子代理自身会产生副作用的调用会改为通过审批门禁进行审计。
web_search*
openhuman.tools_web_search
通过已配置提供方进行排名的网页搜索,带有回退机制。
web_answer*
openhuman.tools_web_answer
带有引用的有依据回答(默认使用 Gemini 和 Google 搜索)。
searxng_search*
openhuman.tools_searxng_search
搜索已配置的自托管 SearXNG 实例。
memory.recall
openhuman.memory_recall
提出一个问题;获取带引用的答案(只读)。
memory.fetch
openhuman.memory_fetch
查询的原始命中结果,带有元数据过滤器和游标(只读)。
memory.list
openhuman.memory_items_list
分页浏览已存储条目,按最新优先(只读)。
memory.learn
openhuman.memory_learn
存储一条学习内容(添加一个条目;非破坏性)。
memory.forget
openhuman.memory_forget
按 id 永久移除条目(破坏性;受 act 门禁控制)。
core.list_tools
以内层提供
OpenHuman 向其编排器公开的实时核心代理工具目录。
core.tool_instructions
以内层提供
注入到提示驱动代理中的 Markdown 工具使用说明块。
agent.list_subagents
以内层提供
核心可调度的已注册子代理定义。
agent.run_subagent
以内层提供
运行一个已注册子代理并返回其最终响应(受 act 门禁控制)。
标有 * 的工具仅在提供方能够提供时才会列出。 web_search 和 web_answer 它们的搜索角色需要一个可用的提供方,即已登录会话或使用你自己的密钥的提供方。 searxng_search 需要在搜索设置中启用 SearXNG。
参数:
web_search:query,可选max_results(1 到 20),以及可选的provider(锁定一个提供方并禁用回退)。web_answer:query以及可选的depth(快速或深度).searxng_search:query以及可选的max_results(1 到 20)。memory.recall:question,以及可选的filter和limit.memory.fetch:query,以及可选的mode,filter,limit和cursor.mode必须是当前活动内存引擎支持的类型之一。两个启动引擎(tinyhumans,cortexdb)仅支持hybrid,因此除非你明确知道,否则请省略它。memory.list:可选的filter,limit和cursor.memory.learn:text,以及可选的kind(偏好,事实,流程,更正,其他)以及confidence(0 到 1)。memory.forget:ids(1 到 100)。
limit 默认为 10,且上限为 100。 filter 可取以下任意值: workspace, 文件夹, file_path, language, repo, commit, url, thread_id, agent_id, kinds (document, conversation, learning), 来源, tags_any, observed_after 和 observed_before (RFC 3339)。记忆工具会作答 MEMORY_OFF 当没有可用的内存引擎时。参见 memory spec 了解该模型。
在 Connections > Search 中启用 SearXNG,在 config.toml,或使用环境变量:
资源
服务器将捆绑的提示资产作为静态资源公开。支持 resources/list 和 resources/read 的客户端无需运行任何工具即可读取代理人格和子代理提示模板。
能力声明
该 initialize 响应包含:
URI 方案
openhuman://prompts/identity
IDENTITY.md (核心代理身份)
openhuman://prompts/soul
SOUL.md (核心代理人格和价值观)
openhuman://prompts/user
USER.md (用户资料上下文)
openhuman://prompts/agents/<id>
<id>/prompt.md 适用于 15 个内置子代理中的每一个
所有资源都具有 mimeType: "text/markdown".
目录一致性
一个单元测试(catalog_mirrors_builtins)会将资源目录与 BUILTINS 中 loader.rs的 BUILTINS 切片进行检查。添加一个没有对应目录项的内置子代理会导致 CI 失败。
资源模板
目录是静态的:每个 URI 都是具体的,没有模板化。 resources/templates/list 因此始终返回一个空的 resourceTemplates 数组。该处理程序存在的目的是让客户端在看到 resources 能力后去探测它时,能得到有效结果,而不是 -32601 Method not found.
资源冒烟测试
工具注册表
HTTP JSON-RPC 服务器还公开一个只读工具注册表。代理和仪表板可利用它在不打开 MCP stdio 会话的情况下发现工具:
openhuman.tool_registry_list
列出 MCP stdio 工具和由控制器支持的工具,并提供稳定的 tool_id、路由、版本、输入/输出模式、允许的代理、标签、启用状态和健康状况。
openhuman.tool_registry_get
按以下项返回一条注册表记录: tool_id,例如 memory.recall 或 tools.web_search.
openhuman.tool_registry_diagnostics
返回已脱敏的清单计数、写入面候选项、策略面以及外部能力提供方诊断信息。
该注册表仅用于发现。它不会改变工具分发或权限检查。MCP 调用仍然通过 tools/call,而由控制器支持的工具仍然使用其各自的 JSON-RPC 方法。
外部能力提供方
你可以在 config.toml中记录受信任的外部能力提供方。这只是治理元数据。它不会安装包、运行远程代码或绕过 MCP 和控制器分发路径。
提供方 id 会在策略检查前规范化,因此 Acme Tools 变为 acme-tools。规范化后的重复项会被拒绝。只有同时具备以下两项时,提供方才有资格通过未来的准入检查: enabled = true 和 trust_state = "trusted"。在没有提供方配置时,注册表为空,且不会隐藏任何现有工具。
工具冒烟测试
响应应包含 capabilities.tools 来自 initialize 以及来自 tools/list。成功运行时会向 stdout 恰好写入两行紧凑的 JSON。 notifications/initialized 是一个通知,没有响应。
最后更新于