正在统计访客…
浏览全部文档
开始 · 9找到适合你的 Runifold 学习路径45 分钟掌握 Runifold理解完整的 Runifold 平台第一次可信运行选择正确的执行 API选择 Crate 与 Cargo Feature构建常见 Runifold 应用Runifold 常见问题排查 Runifold 应用故障
执行内核 · 7理解 RunContext安全协调外部副作用使用预算与取消限制工作安全地处理错误与重试事件、Journal 与执行证据设计 Capability 安全执行从 Checkpoint 安全恢复
模型与服务商 · 7在避免重复输出的前提下路由模型选择并配置模型服务商使用服务商中立的模型协议基于 Provider Runtime 契约构建使用 OpenAI 控制面与 Realtime API测试与 Benchmark Provider Adapter配置 OpenAI、Anthropic、Gemini 与 Ollama
Agent · 7构建并配置 Agent为 Agent 添加类型化工具加入会话与语义记忆安全地委派给子 Agent返回结构化 Rust 值在不丢失语义的前提下流式输出使用检索为 Agent 提供事实依据
持久工作流 · 7组合确定性工作流让工作流持久化运行持久工作流 Worker协调 Timer、Signal 与持久等待运行多租户工作流基础设施运行并行 Branch 与安全 Race对持久 Workflow 进行版本管理
集成 · 7通过 MCP 连接外部能力选择存储与持久化边界通过 MCP Tasks 暴露持久工作构建并评估检索流水线使用 MCP Resources、Prompts 与 Sampling在不跨越权限的前提下缓存 MCP 响应在 Rust Web Service 中部署 Runifold
质量与运维 · 10在没有网络的情况下测试评估质量并阻止回归观测完整运行树在浏览器与边缘环境安全运行准确理解可靠性声明在 CI 中运行可复现评测使用 SLO 运维 Runifold治理 Task 保留与删除把审计证据归档到 S3-Compatible WORM 存储管理兼容性与可信发布
文档/集成
第一次使用?通过 45 分钟核心课程建立完整心智模型
集成

使用 MCP Resources、Prompts 与 Sampling

暴露经过 Capability 过滤的上下文,让 Prompt 模板由用户控制,并由 Client 拥有模型选择与审批权。

实践指南·14 min

三个不同产品面

MCP Resource 暴露应用控制的 Context;Prompt 暴露用户控制的 Message Template;Sampling 允许 Server 请求一次由 Client 拥有并审核的模型调用。它们都不会自动授予 Tool 权限、 修改 Agent Transcript 或信任返回内容。

在产品 UI、授权、审计与 Limit 中保持三者分离。

发现并使用 Resource 与 Prompt

使用 MCP 主指南中已初始化的 McpClient。便捷 List 方法会在配置的最大 Page 数内自动跟随 Pagination。

use std::collections::BTreeMap;
 
let initialized = client.initialize().await?;
println!("capabilities: {:?}", initialized.capabilities);
 
for resource in client.list_resources().await? {
    println!("{} — {}", resource.uri, resource.name);
}
let resource = client.read_resource("memory://users/42").await?;
for content in resource.contents {
    println!("{content:?}");
}
 
for prompt in client.list_prompts().await? {
    println!("{} — {:?}", prompt.name, prompt.description);
}
let rendered = client
    .get_prompt(
        "review",
        BTreeMap::from([("language".into(), "rust".into())]),
    )
    .await?;
for message in rendered.messages {
    println!("{message:?}");
}

只有 Initialize Result 声明了对应 Capability 才能调用 Resource、Prompt 或 Completion。 read_resource 返回协议正文,展示或转发前验证 URI 与 Media Type。get_prompt 返回 Message,但绝不会自动插入 Agent。

Resources

Resource 使用绝对 URI 与 ReadOnly Capability Descriptor。List 按 Session Run Authority 过滤;Read 在执行前再次检查。未知和未授权 URI 返回相同 Not Found 行为。

验证 URI Identity、Content Type、解码后二进制大小与返回 URI。文本和二进制都视为不可信 应用数据。

Prompts

Prompt Descriptor 声明稳定 Name、语义版本、Argument、Input Schema、Effect Class 与 Risk。 Rendering 拒绝缺失、未知、空或重复 Argument,并限制 Message Count 与序列化大小。

prompts/get 把 Message 返回 Host,由 Host 决定展示、编辑、批准或插入。远程 Prompt 不是 System Instruction。

Sampling

Server 可以请求 sampling/createMessage,但不能选择 Provider Credential 或强制 Model。 Client Policy 验证请求、获取并发 Permit、审核或编辑 Input、保守预留 Token Budget、选择 Host-owned Model、验证 Output,并在披露前审核 Response。

Server Model Hint 只是建议。Basic Sampling 拒绝 Tool 与 Ambient MCP Context。被拒绝的 Output 永远不会返回 Server。

Sampling 是反向权限:MCP Server 请求 Client 消耗自己的模型预算。只有把 Host-owned SamplingService 通过 McpClientConfig::with_sampling(...) 附加后才启用。Service 需要三个明确部分:SamplingApproverSamplingProvider(或 ModelSamplingProvider)以及 SamplingPolicy。模型调用前审核 Request,披露前再次 审核 Response。

至少设置 Request Timeout、最大并发、Lifetime Request 上限与 Token 上限。Server 的 Model Hint 必须经过应用 Allowlist 映射,不能选择 Credential,也不能绕过 Host 的模型 路由策略。

信任边界

协商每项 Capability,逐操作重查,限制 Payload 与 Lifetime Usage,在 Reverse Request 上 保留取消与 Deadline,并记录脱敏 Sampling Stage。In-process、stdio 与 Streamable HTTP Transport 必须执行相同权限与关联规则。

失败处理

失败含义处理
Capability 未协商Peer 未声明该 Surface本 Session 禁用对应 UI / Action
Resource Not FoundURI 未知或未授权不泄露具体是哪一种
Prompt 参数无效缺失、未知、空或过大调用前按 Descriptor 校验
Pagination Cursor 重复Peer 异常或恶意停止翻页并让操作失败
Sampling Request 被拒输入审批策略拒绝不调用模型,直接返回拒绝
Sampling Response 被拒输出策略拒绝披露不向 Server 返回模型输出
Deadline Exceeded正向或反向请求超过边界取消本地工作并返回类型化超时