MCP / REST 接入

memhub 面向 Agent 提供 两条 MCP 接入路径,工具名与 REST 路由一一对应,共享 MemoryOperations 实现层:

路径 状态 适用场景
本地 uvx Python MCP ✅ 已实现 Cursor / Claude Desktop 本机直连,uvx --from "memhub[mcp]" memhub-mcp 或 pip install "memhub[mcp]"
Cloud-hosted HTTP MCP 🔜 规划中 托管记忆服务 + 远程 Agent;基于 REST API 暴露同一套 memory_* 契约

当前:仅本地 Python MCP Server(stdio / streamable-http)可用。
后续:REST 层(memhub serve-api + GET /v1/capabilities)已对齐 MCP 工具契约,可直接作为 HTTP MCP 的传输底座——无需重复实现业务逻辑,只需在 REST 之上封装 MCP streamable-http 协议(或 npm/TypeScript 薄客户端)。

依赖:MCP 服务基于 mcp 2.x 的 MCPServer([mcp] extra 为 mcp>=2.2,<3)。mcp 1.x 的 mcp.server.fastmcp 已不再使用;只装 [mcp] 即可运行,不需要 [api] 的 fastapi。

Agent (Cursor / Claude / 自研)
    │
    ├─ 本地 ──stdio/HTTP──▶ memhub-mcp ──▶ MemoryOperations ──▶ MemoryClient
    │
    └─ 云端 ──HTTP MCP──▶ memhub REST (/v1/...) ──▶ MemoryOperations ──▶ MemoryClient
                              ↑ 同一套 memory_* 工具名与 JSON 契约

工具 ↔ HTTP ↔ SDK

工具 / 操作 HTTP MemoryClient
memory_add POST /v1/memories/ add
memory_search POST /v1/memories/search search
conversation_search POST /v1/memories/search_conversation search_conversation
memory_list GET /v1/memories/?include_history= list
memory_get GET /v1/memories/{id} get
memory_update PUT /v1/memories/{id} update(返回新版本 id)
memory_delete DELETE /v1/memories/{id} delete(归档当前版本)
memory_delete_scope DELETE /v1/memories/?confirm=true delete_bulk
memory_list_scopes GET /v1/scopes/ list_scopes
memory_digest POST /v1/digest/ digest

发现端点:GET /v1/capabilities — 返回 tools 数组(含 method/path)。本仓库没有 npm 包;云端 HTTP MCP 仍是规划,本地用 Python memhub-mcp。

memory_list 默认只列当前版本,include_history=true 才连同已归档版本。memory_update 追加一版并返回新 id。memory_delete 归档,不物理删除。memory_digest 只在 dual 生成 L3_DERIVED;system1 返回 processed=0。

memory_add 接受 workspace_id / branch(procedure 的版本边界);memory_search 接受 procedure_limit(默认 0)/ procedure_min_score,工程经验在返回的 memories.procedures 组里,与 profile / proactive / normal / raw / schema / catalog 并列。

宿主 Hub MCP(install-host)

上表是 SDK 级 MCP(memhub-mcp,需要显式传 user_id)。各 CLI 宿主通过 memhub install-host 安装的是 python -m memhub.hub.mcp:它已绑定本机个人 scope,不接收 user_id / app_id / agent_id, 请求统一发给本机的 Hub Core。

用户意图 工具
查偏好、画像、事实、历史结论 memory_search(query)
查历史对话原话 conversation_search(query)
记住 / 别忘了 / 以后都按这个 memory_add(content)
改掉 / 撤销 / 更新约定 memory_list(query) 取 id → memory_update(memory_id, content)
忘掉 / 删掉一条记忆 memory_list(query) 取 id → memory_delete(memory_id)
排查 Hub 自身故障 memory_status()

memory_add 返回 ok=true 即写入已接收,status=pending 是正常终态(后台自动抽取)。 找不到旧条目时直接 memory_add 写新约定即可。conversation_search 结果的 session_id 形如 codex:<id>,冒号前是来源工具。

优先用宿主内置的 memhub MCP 工具。MCP 未加载或未激活时改用 Hub CLI:入口是 python3 -m memhub.cli <子命令>,安装后也可写 memhub <子命令>,须使用装有 memhub 的解释器 (install-host 写进 skill 的命令已带绝对路径和 --hub-dir)。子命令:recall(查)、 remember(写)、memory-list(列出并取 id)、memory-update <id> <content>(更正)、 memory-delete <id>(删除)、status(状态),都走同一个本机 Core。 memhub add / search / update / delete / list 是 SDK 命令,指向当前目录下另一个库,不是备选。

本地 MCP(已实现)

# uvx 零安装(推荐)
uvx --from "memhub[mcp]" memhub-mcp
uvx --from "memhub[mcp]" memhub-mcp --transport streamable-http --port 8765

# 或 pip 安装后
memhub-mcp
memhub-mcp --transport streamable-http --port 8765
memhub mcp

在代码里装配:build_mcp(client=...) 只注册工具,返回 MCPServer 实例;监听地址在运行时传入,例如 server.run(transport="streamable-http", host="127.0.0.1", port=8765)。

Cursor(本地 stdio)

{
  "mcpServers": {
    "memhub": { "command": "uvx", "args": ["--from", "memhub[mcp]", "memhub-mcp"] }
  }
}

配置:~/.memhub/config.yaml 或 MEMHUB_* 环境变量。用 MemHub 的话不必手配,memhub install-host cursor 会写好指向 Core 的 MCP。

REST / HTTP MCP 底座(已实现 REST,HTTP MCP 待封装)

REST 服务本身已可用,可作为 cloud-hosted HTTP MCP 的后端:

memhub serve-api --host 0.0.0.0 --port 8000
curl http://localhost:8000/v1/capabilities
curl http://localhost:8000/openapi.json

后续 HTTP MCP 接入方式(规划):

  • 自托管:REST + MCP streamable-http 网关(同一 memory_* 工具,Bearer 鉴权走 REST)
  • Cloud-hosted:托管 memhub serve-api 实例,Agent 通过 URL + appkey 连接,无需本机 Python 环境

Cursor 侧预期形态(示意,尚未提供官方 npm 包):

{
  "mcpServers": {
    "memhub-cloud": {
      "url": "https://your-host/mcp",
      "headers": { "Authorization": "Bearer <appkey>" }
    }
  }
}

Skill

memhub/skills/memhub-sdk/SKILL.md — 指导 agent 何时读写记忆、如何解读 profile/proactive/normal 与演化链。