<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Prompts on Weiuou的博客</title><link>https://blog.weiuou.top/tags/prompts/</link><description>Recent content in Prompts on Weiuou的博客</description><image><title>Weiuou的博客</title><url>https://blog.weiuou.top/avatar.png</url><link>https://blog.weiuou.top/avatar.png</link></image><generator>Hugo</generator><language>zh-cn</language><copyright>Weiuou</copyright><lastBuildDate>Wed, 24 Jun 2026 09:30:00 +0800</lastBuildDate><atom:link href="https://blog.weiuou.top/tags/prompts/index.xml" rel="self" type="application/rss+xml"/><item><title>MCP Server</title><link>https://blog.weiuou.top/posts/mcp-server-tools-resources-prompts/</link><pubDate>Wed, 24 Jun 2026 09:30:00 +0800</pubDate><guid>https://blog.weiuou.top/posts/mcp-server-tools-resources-prompts/</guid><description>MCP Server 通过 Tools、Resources 和 Prompts 三类能力，向 AI 应用提供特定功能。</description><content:encoded><![CDATA[<p>MCP Server 是通过标准化的协议接口，向 AI 应用提供特定功能的程序，常见的包括文件系统服务器、GitHub 服务器等。</p>
<h2 id="核心功能主要包含三类">核心功能主要包含三类</h2>
<ol>
<li>Tools：AI 应用可以根据用户请求主动决定调用这些功能，实现类似于向数据库写数据、调用外部 API、修改文件等操作。</li>
<li>Resources：被动型的数据源，提供只读的访问权限，用来获取文件内容等。</li>
<li>Prompts：预先构建好的指令模板，用来指导 AI 使用特定工具和资源来完成任务（MCP Server 官方说明书）。</li>
</ol>
<p>MCP 使用 JSON Schema 来进行验证，每个工具只执行一项操作，输入和输出都是明确定义的。</p>
<h2 id="tools">Tools</h2>
<table>
	<thead>
			<tr>
					<th>方法</th>
					<th>用途</th>
					<th>返回内容</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>tools/list</code></td>
					<td>获取可用的工具以及描述</td>
					<td>包含各种工具定义的列表</td>
			</tr>
			<tr>
					<td><code>tools/call</code></td>
					<td>执行特定的工具/命令</td>
					<td>工具执行结果</td>
			</tr>
	</tbody>
</table>
<p>以下是一个简单的工具定义：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;searchFlights&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Search for available flights&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;inputSchema&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;object&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;properties&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;origin&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;string&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Departure city&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;destination&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;string&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Arrival city&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;date&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;string&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;format&#34;</span><span class="p">:</span> <span class="s2">&#34;date&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Travel date&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;required&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;origin&#34;</span><span class="p">,</span> <span class="s2">&#34;destination&#34;</span><span class="p">,</span> <span class="s2">&#34;date&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>示例：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">searchFlights(origin: &#34;NYC&#34;, destination: &#34;Barcelona&#34;, date: &#34;2024-06-15&#34;)
</span></span></code></pre></div><p>通常 AI 应用可以自主地发现并调用这些工具，不过 MCP 通过多种机制来确保人类可以起到监督的作用，例如：</p>
<ul>
<li>UI 中显示各种可用工具，让用户能够决定在特殊的交互场景中是否使用某项工具。</li>
<li>针对工具执行的确认对话框。</li>
<li>对于涉及权限的操作进行预先审批。</li>
<li>工具调用的过程以及结果的日志记录。</li>
</ul>
<h2 id="resources">Resources</h2>
<p>为 AI 应用提供结构化的方式来获取信息，随后可以用于模型的输入数据或上下文信息。</p>
<p>资源支持两种发现模式：</p>
<ul>
<li>直接资源：指向特定数据的固定 URI。</li>
<li>资源模板：用带参数的动态 URI 实现灵活的查询。</li>
</ul>
<table>
	<thead>
			<tr>
					<th>方法</th>
					<th>用途</th>
					<th>返回值</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>resources/list</code></td>
					<td>列出可用的直接资源</td>
					<td>资源描述列表</td>
			</tr>
			<tr>
					<td><code>resources/templates/list</code></td>
					<td>列出可用的资源模板</td>
					<td>资源模板定义列表</td>
			</tr>
			<tr>
					<td><code>resources/read</code></td>
					<td>检索资源内容</td>
					<td>包含元数据的资源数据</td>
			</tr>
			<tr>
					<td><code>resources/subscribe</code></td>
					<td>监控资源变化情况</td>
					<td>订阅确认</td>
			</tr>
	</tbody>
</table>
<p>示例：</p>
<ul>
<li>日历数据（<code>calendar://events/2024</code>）：查看用户的可用时间。</li>
<li>证件（<code>file://Documents/Travel/IdCard.pdf</code>）：查看身份证复印件。</li>
</ul>
<p>AI 应用可以获取这些资源并决定如何处理它们，模型就能了解各种资源的可用性，并据此做出更准确的决策。</p>
<p>资源模板示例：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;uriTemplate&#34;</span><span class="p">:</span> <span class="s2">&#34;weather://forecast/{city}/{date}&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;weather-forecast&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Weather Forecast&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Get weather forecast for any city and date&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;mimeType&#34;</span><span class="p">:</span> <span class="s2">&#34;application/json&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;uriTemplate&#34;</span><span class="p">:</span> <span class="s2">&#34;travel://flights/{origin}/{destination}&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;flight-search&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Flight Search&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Search available flights between cities&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;mimeType&#34;</span><span class="p">:</span> <span class="s2">&#34;application/json&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>资源模板使查询更加灵活。对于天气数据，AI 应用可以查询任意城市/日期的天气预报组合；对于航班信息，可以查询任意两个城市机场之间的航线，为 AI 应用规划行程提供详细数据。</p>
<p>动态资源支持参数补全，例如输入 <code>Par</code> 作为 <code>weather://forecast/{city}</code> 的参数，很可能是想输入 <code>Paris</code>，系统可以帮助用户在不明确了解格式要求时查到准确的数据。</p>
<h2 id="prompts">Prompts</h2>
<p>提示词是一种结构化的模板，用来定义所需的输入内容以及交互方式，由用户来控制，需要用户主动触发，还具有情景感知能力，可以利用现有的资源和工具来构建完整的工作流程。与资源类似，提示词也支持参数补全，来帮助用户确定合适的参数。</p>
<p>示例：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;plan-vacation&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Plan a vacation&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Guide through vacation planning process&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;arguments&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;destination&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;string&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;required&#34;</span><span class="p">:</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;duration&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;number&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;days&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;budget&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;number&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;required&#34;</span><span class="p">:</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;interests&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;array&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;items&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;string&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>相比于无结构的自然语言，提示词系统能够实现：</p>
<ol>
<li>选择“规划假期”这个模板。</li>
<li>然后结构化输入目的地、时间、预算以及偏好。</li>
<li>并执行基于模板的标准化工作流的执行方式。</li>
</ol>
<p>这些提示由用户自行控制，需要用户主动触发才能显示，这常意味着开发者需要设计与其风格相协调的界面，通常包含以下原则：</p>
<ul>
<li>可以轻松找到可用的 Prompt。</li>
<li>对每个 Prompt 用来做什么进行详细说明。</li>
<li>透明地展示 Prompt 依赖的底层模板。</li>
</ul>
<blockquote>
<p>虽然很多面试题中会有一个常见的“MCP 和 Skill 有什么区别”，但是从我的感觉来看，MCP 中的 Prompt 其实就类似于一个官方的 Skill，类似于一个说明书，给出你“装了这个 MCP Server 之后都可以做什么”的一个最佳实践。<a href="https://modelcontextprotocol.io/docs/learn/server-concepts#example-multi-server-travel-planning">MCP官方文档</a>中还有一段关于将多个 MCP Server 组合在一起的内容，我觉得更类似于当前语境下的 Skill。</p>
</blockquote>
]]></content:encoded></item></channel></rss>