必读前置MCP 能力讲解 · 怎么接 MCP Tools系列回顾主循环 · 代码库工具 · REPL · 项目上下文 · Skills · 权限 Write · Bash · compact 2.0Tools 接线篇写过mini只接 Tools。概念篇里的 Resources挂材料和 Prompts点开场当时刻意留空。这篇补上两步v4-mcp-capabilities先把 Resources / Prompts 接到工具表和 REPL slashv4-mcp-resource-refs再把挂材料收成「只认server:uri」——slash、普通输入、headless 共用同一套解析无引用就不自动挂也仍然不改query()。从「知道」到「接上」概念篇记住的总纲还在Tools 做事Resources 给材料Prompts 给开场白。Tools 实现篇解决了「做事」怎么进 ReAct。本篇解决另外两句概念在 mini 里怎么落地Resources两个只读工具ListMcpResourcesTool/ReadMcpResourceToolHost 按文本里的server:uri按需挂载无引用不自动挂PromptsREPL 斜杠/tour:plan_trip 巴黎 3→prompts/get→ 解析引用 → meta 消息注入本轮Client 侧 Sampling / Roots / Elicitation仍然没做——这篇不重开六大能力课只讲「Server 侧三大能力」在 mini 里齐了没有。一张图启动时多发现了什么.mcp.json → connectMcpSession ├─ list_tools → mcp__* 工具实现篇 ├─ capabilities.resources? │ └─ sessionTools 追加 List/ReadMcpResource* └─ capabilities.prompts? └─ commands[] → REPL /help 与 /server:promptLoadedMcp不再只有toolsclosetypeLoadedMcp{tools:Tools clients:McpConnectedClient[]commands:McpSlashCommand[]hasResources:booleanclose:()Promisevoid}sessionTools(mcp)builtin MCP tools 任一 server 声明 resources 时ListMcpResourcesTool、ReadMcpResourceTool没有 resources 能力的 server例如纯计算器→ 工具表不加这两项零开销。Resources两条通路通路 A — 模型自己 List / ReadTool和 Read 文件一样走tool_use模型ListMcpResourcesTool可选 servertour → 返回 [{ uri, name, server, mimeType, … }] 模型ReadMcpResourceTool({ server: tour, uri: docs://handbook }) → 正文进 tool_result → 模型据此回答要点只读isReadOnly: true不进写类门卫 y/N二进制 blob不进上下文只留占位说明超长文本截断约 10 万字符这对应概念篇里「也可以做成 Tool」的那条路——Host 把 Resource 能力暴露成标准 Tool模型按需拉取。通路 B — Host 按server:uri挂材料无引用不自动挂早期 slash 会在开场前全量读取该 server 的全部 Resources。资源一多就会污染上下文而且 prompt 如果只写「差旅手册」模型还容易跑去工作区搜同名文件。现在只认显式引用从文本解析tour:docs://handbook只对命中条目做resources/read。没有任何server:uri时Host 不自动挂任何 Resource——需要材料就写引用或让模型自己走通路 A 的 List/Read。这条通路不只服务 slash。同一个resolvePromptResourceMessages会吃三类文本入口解析对象注入方式MCP slashprompts/get返回的开场文本injectBefore: [...resources, ...promptMessages]REPL 普通输入用户原文材料先挂再发送用户原文headless / pipe命令行 / stdin 的 promptmessages [...resources, userMessage]解析规则很简单空白后的server:uri用第一个:拆开。所以 URI 里可以带://tour:docs://handbook → { server: tour, uri: docs://handbook }slash 路径大致是constpromptMessagesawaitmcpSlash.command.run(mcpSlash.argsLine)constresourcesawaitresolvePromptResourceMessages(mcpClients,promptMessages,{warn:msgprint(msg)},)awaitconsume(deps.engine.runTurn(,{injectBefore:[...resources,...promptMessages],}),)普通输入则是constresourcesawaitresolvePromptResourceMessages(mcpClients,[createUserMessage(trimmed)],{warn:msgprint(msg)},)awaitconsume(deps.engine.runTurn(trimmed,{injectBefore:resources.length0?resources:undefined,}),)挂进去的是带meta: true的 user 消息形如以下材料来自 MCP Resource请严格遵守 servertour uridocs://handbook # 差旅手册Demo …QueryEngine.runTurn支持只有injectBefore、没有用户打字——slash 整轮可由 Host 组装上下文。tour demo 的.mcp.jsonkey 须为tour才能与 prompt / 用户输入中的tour:docs://handbook对齐。PromptsREPL 斜杠不经 SkillTool启动时prompts/list→ 注册 slash 元数据用户面 /tour:plan_trip (MCP) [args…] 也可 /tour:plan_trip [args…] 省略 (MCP)已注册则命中 内部名 mcp__tour__plan_trip/help会列出这些 MCP 命令。执行顺序是「先拿开场再只按引用挂材料」1. parseMcpSlashCommand 2. prompts/get → promptMessagesmeta user 消息 3. resolvePromptResourceMessages ├─ 文本里有 server:uri → 只读这些引用 └─ 完全没有 server:uri → 不自动挂 Resource 4. engine.runTurn(, { injectBefore: [...resources, ...promptMessages] })tour demo 的plan_trip现在会显式写上引用请帮我规划去「巴黎」的 3 天差旅。 要求先阅读 tour:docs://handbook 再给出日程草案。 不要编造公司政策政策以手册为准。参数按 prompt 声明的arguments按空格顺序填/tour:plan_trip 巴黎 3 → { city: 巴黎, days: 3 }和 Skills 的差别概念篇对照表的实现版SkillsMCP Prompts本篇触发模型调Skill工具用户敲 slash内容来源本地SKILL.mdMCP Serverprompts/getheadless可用 Skill不自动跑MCP slash但会解析 prompt 里的server:uri所以Skills 仍是「模型按需读说明书」MCP Prompt 是「用户点开场模板」——两条产品路径不要混成一个。30 秒试一把用 tour server项目根配置指向概念演示 Server同时有 tools / resources / prompts{mcpServers:{tour:{command:node,args:[examples/mcp-tour-server/server.js]}}}# 可选先确认 Server 本身nodeexamples/mcp-tour-server/smoke.mjsnodeexamples/mcp-tour-server/how-to-host.mjs# 接进 Agentcp或编辑.mcp.json → 如上 bun run devREPL 里/help # 应看到 /tour:plan_trip (MCP) … /tour:plan_trip 巴黎 3 # 提示已挂载 MCP Resource ×1servertour # 因为 prompt 里写了 tour:docs://handbook只挂这一本手册 # 模型按手册 开场白开始规划 # 普通消息也可以直接 引用不必走 slash 根据 tour:docs://handbook 帮我列三条差旅注意点 # 提示已挂载 MCP Resource ×1 # 材料先进入上下文再处理你的这句话 # 或让模型自己拉材料 列出 MCP 资源并读取 docs://handbook只用计算器 Server无 resources/prompts时没有 List/Read 资源工具也没有 MCP slash——行为与 Tools 接线篇一致。和主循环的关系L1 CLI / REPL → 加载 commands、clientsslash / 普通输入 / headless 解析 server:uri L2 query() → 不变看到的仍是 messages tools L3 runToolUse → List/ReadMcpResource 只是多两个只读 Tool L4 services/mcp → fetch / promptSlash / resource 工具Resources / Prompts 不改 ReAct 循环一个变工具表一个变「本轮开头注入的 meta 消息」。和 Skills目录摘要 Skill 工具、项目上下文systemPrompt是同一家族的「把外部材料喂给模型」只是协议与触发方式不同。刻意没做什么没做意味着什么Sampling / Roots / ElicitationClient 侧三大能力仍留空resources/subscribe、SSE/HTTP仍仅 stdio资源一次性 list/readheadless 自动跑 MCP slashpipe/headless不执行/server:prompt但会解析 prompt 里的server:uri自动补全 UI / 资源面板CLI 已能解析server:uri但没有输入时的补全面板无 mention 时全量挂载刻意不做没有就不自动塞材料图片进模型上下文image/blob 占位不塞 base64完整产品往往会有资源面板和更重的远程传输mini 验证的是capabilities 发现 → Resource 工具 Prompt slash → slash / 普通输入 / headless 共用 server:uri 按需挂材料 → 无引用不自动挂 → 先材料、后正文 → query 零感知系列拼图MCP 三连篇内容概念六大能力 怎么用Tools 接线stdio 适配器 门卫本篇Resources 工具 Prompts slash server:urislash / 普通消息 / headless再到整条 Agent 系列循环 → 工具 → 会话 → 上下文 → Skills → 权限 → Bash → compact →MCP 从 Tools 扩到材料与开场再收成显式引用。你可以从这里带走什么Resources 可以有两条路模型调 List/Read 工具或 Host 按文本里的server:uri自动挂材料。Prompts ≠ Skills用户点模板 vs 模型读说明书触发面不同。server:uri不只服务 slashREPL 普通输入和 headless prompt 也会解析材料在前用户原文在后。无引用就不自动挂Host 不做全量兜底需要材料就写或让模型走 List/Read。injectBefore meta不改query()只改「本轮消息从哪来」。无 capability 则零开销没有 resources/prompts 的 server行为与早期 Tools-only 一致。仓库与相关文档GitHubreact-agent-miniMCP 概念 · MCP Tools 接线 · compact 2.0tour Serverexamples/mcp-tour-server术语表src/services/mcp/CONTEXT.mdResource 工具src/tools/McpResourceTools.ts欢迎 Star、Issue 和 PR。本文基于 react-agent-mini 变更v4-mcp-capabilitiesResources 工具 Prompts slash与v4-mcp-resource-refsserver:uri按需挂载覆盖 slash / 普通消息 / headless无引用不自动挂撰写。