MCP 核心功能
MCP 核心特性
Section titled “MCP 核心特性”MCP 提供了一种结构化的方式,使 AI 模型能够与环境进行交互。这种交互主要通过 MCP 服务器提供的特性来促成,并由 MCP 客户端的功能作为补充。
服务器端核心特性
Section titled “服务器端核心特性”MCP 服务器是上下文提供的支柱,通过三种主要的抽象概念来公开数据和功能:资源(Resources)、提示(Prompts)和工具(Tools)。
**资源(Resources)**代表 LLM(大语言模型)可以访问的上下文数据。可以把它们想象成名词——描述环境或提供背景的信息片段。MCP 服务器公开资源,客户端可以查询这些资源,为 LLM 获取相关信息。
- 性质:通常是只读数据,但也可以包含元数据或指向大型数据对象的指针。
- 示例:文件内容、数据库记录、日历条目、电子邮件会话、环境变量、当前应用程序状态、项目结构。
- 交互:客户端通常可以列出可用资源,获取特定资源(其模式或内容)的详细信息,以及“采样”或检索资源内容。
- 目的:为 LLM 提供理解情况或回答查询所需的事实信息。
{ "jsonrpc": "2.0", "method": "mcp.resources.get", "params": { "resourceId": "file:///Users/dev/project/main.py" }, "id": "req-123" } // 示例:服务器响应资源内容 { "jsonrpc": "2.0", "result": { "contentType": "text/plain", "content": "print('Hello, MCP!')" }, "id": "req-123" }MCP 中的**提示(Prompts)**不仅仅是静态文本;它们是服务器定义、通常是动态的建议或模板,可以指导 LLM 的交互或帮助其构建请求。它们是与服务器功能或数据进行交互的预定义方式,通常针对特定任务量身定制。
- 性质:可以是静态文本、需要变量替换的模板,甚至是基于当前上下文动态生成的建议。
- 示例:“总结此文档:{document_id}”、“为这些更改建议提交消息:{diff}”、“分配给我的活跃问题有哪些?”、“将‘{text}’翻译成 {language}。”
- 交互:客户端可以请求可用提示。选择或使用提示可能涉及客户端提供一些输入,服务器随后使用这些输入为 LLM 生成更完整的指令或查询,甚至直接执行提供上下文的操作。
- 目的:简化常见任务,指导 LLM 行为,减少客户端进行复杂提示工程的需求,并以更友好的方式公开服务器功能。
**工具(Tools)**代表 LLM 可以请求 MCP 服务器执行的动作或操作。它们是 MCP 世界中的动词,允许 LLM 产生改变或执行超出其固有能力的计算。
- 性质:具有已定义输入和输出的可执行函数或过程。
- 示例:运行脚本、发送电子邮件、调用外部 API、创建文件、执行数据库查询、重构代码。
- 交互:客户端(通常由 LLM 提示)可以请求工具的执行,并提供必要的参数。服务器执行该工具并将结果(或状态)返回给客户端,客户端再将其反馈给 LLM。
- 目的:允许 LLM 以功能性的方式与环境交互,执行动作,并从计算或外部系统中检索结果。这与 OpenAI 的函数调用(Function Calling)或 ReAct 模式等概念相符。
{ "jsonrpc": "2.0", "method": "mcp.tools.execute", "params": { "toolId": "git.createBranch", "arguments": { "branchName": "feature/new-ui", "fromBranch": "main" } }, "id": "req-456" } // 示例:服务器响应工具执行结果 { "jsonrpc": "2.0", "result": { "success": true, "message": "Branch 'feature/new-ui' created successfully from 'main'." }, "id": "req-456" }客户端核心特性
Section titled “客户端核心特性”尽管提供上下文的大部分繁重工作由 MCP 服务器完成,但 MCP 客户端(及其运行的主机应用程序)也具有关键职责和特性。
采样(Sampling)是一个关键的客户端(或客户端导向的)过程,用于选择并检索资源的相关部分以提供给 LLM。LLM 具有上下文窗口限制,因此发送所有潜在相关资源的全部内容通常是不切实际或不可能的。采样通过智能地提取最相关的信息来解决这个问题。
- 性质:一个选择和总结的过程,通常由 LLM 的当前任务或查询、用户焦点或启发式方法指导。
- 示例:从代码文件中只提取相关函数、总结长文档、从邮件会话中挑选最近的邮件、基于光标位置选择活跃代码块。
- 交互:客户端,可能结合主机应用程序对用户上下文(例如,开放文件、IDE 中的光标位置)的理解,决定对哪些资源的哪些部分进行采样。然后它向 MCP 服务器请求这些特定样本或处理原始资源数据。
- 目的:为 LLM 提供简洁而全面的上下文视图,使其符合操作限制,并将其注意力集中在最相关的数据上。有效的采样是使 LLM 在信息丰富的环境中发挥作用的关键。