游乐游手机版
首页/AI热点日报/热点详情

MCP核心概念之二:数据调用、API执行与模板生成完整链条

类型:热点整理2026-07-01
深入探索MCP技术在数据调用、API执行和模板生成中的实际应用,帮助开发者理解其核心机制。 本文重点涵盖三大模块: 1 虚拟文件Resources的创建与MCP集成方法 2 通过Tools实现API调用的完整示例 3 Prompts在模板生成过程中的关键作用 接下来,我们通过三个虚拟文件分别对

深入探索MCP技术在数据调用、API执行和模板生成中的实际应用,帮助开发者理解其核心机制。
本文重点涵盖三大模块:
1. 虚拟文件Resources的创建与MCP集成方法
2. 通过Tools实现API调用的完整示例
3. Prompts在模板生成过程中的关键作用

MCP 三大核心概念(2): 用MCP实现数据调用、API执行与模板生成的完整链条

接下来,我们通过三个虚拟文件分别对应Resources、Tools与Prompts,借助这些模拟文件演示它们在MCP环境下的实际用法。每个文件都附带代码或伪代码,力求贴近真实开发场景,便于开发者上手实践。

文件 1:Resources 用法展示

文件名:server_logs.txt
描述:假设这个文件是一份服务器日志,通过MCP的Resources功能暴露给LLM,使其能够分析错误原因。
内容

[2025-02-22 10:00:01] ERROR: Database connection failed - Timeout
[2025-02-22 10:00:05] INFO: Retry attempt 1
[2025-02-22 10:00:10] ERROR: Database connection failed - Timeout
[2025-02-22 10:00:15] FATAL: System shutdown

MCP 配置(伪代码):

const server = new Server({
  name: "log-server",
  version: "1.0.0"
}, {
  capabilities: { resources: {} }
});

server.setRequestHandler("resources/list", async () => {
  return {
    resources: [{
      uri: "file:///logs/server_logs.txt",
      name: "Server Logs",
      mimeType: "text/plain"
    }]
  };
});

server.setRequestHandler("resources/read", async (request) => {
  if (request.params.uri === "file:///logs/server_logs.txt") {
    const logs = await readFile("server_logs.txt");
    return {
      contents: [{ uri: request.params.uri, mimeType: "text/plain", text: logs }]
    };
  }
  throw new Error("Resource not found");
});

用法解析:

  • 实际操作:例如在Claude Desktop中直接输入“分析 server_logs.txt 的错误原因”,LLM便会通过MCP访问这个Resource,读取日志内容并进行分析。
  • 结果:LLM可能会输出:“日志显示数据库连接多次超时,最终导致系统崩溃。建议检查网络延迟或数据库配置。” 这就像上传了一份日志文件,LLM可以“看到”内容并自动处理。Resources的核心作用是把数据提供给LLM,相当于“上传原材料”,为后续分析奠定基础。

文件 2:Tools 用法展示

文件名:weather_tool.py
描述:这是一个天气查询工具,通过MCP的Tools功能让LLM调用外部API获取实时天气数据。
内容

# Python MCP 服务器定义工具
from mcp.server import Server
import requests

app = Server("weather-server")

@app.tool("get_weather")
async def get_weather(city: str) -> str:
    url = f"http://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}"
    response = requests.get(url).json()
    temp = response["current"]["temp_c"]
    condition = response["current"]["condition"]["text"]
    return f"{city} 当前温度: {temp}°C,天气: {condition}"

async def main():
    async with app.stdio_server():
        await app.run()

用法解析

  • 实际操作:在客户端输入“告诉我上海的天气”,LLM检测到需要实时数据,便会通过MCP调用get_weather工具,并传入参数city="上海"。
  • 结果:工具返回“上海当前温度: 15°C,天气: 多云”,LLM再将这个结果整合到自然语言回答中。这就像上传了一个“天气查询脚本”,LLM不仅读取数据,还能直接“执行”它获取结果。Tools的核心价值是让LLM具备行动能力,而非仅被动查看数据。

文件 3:Prompts 用法展示

文件名:error_report_template.md
描述:这是一个错误报告模板,通过MCP的Prompts功能提供给LLM,用于生成标准化的报告内容。
内容

错误报告
日志文件: {log_file}
错误概要
{summary}
详细分析
{analysis}
修复建议
{suggestions}

MCP 配置(伪代码)

const server = new Server({
  name: "report-server",
  version: "1.0.0"
}, {
  capabilities: { prompts: {} }
});

server.setRequestHandler("prompts/list", async () => {
  return {
    prompts: [{
      id: "error_report",
      name: "Error Report Generator",
      template: await readFile("error_report_template.md"),
      parameters: ["log_file", "summary", "analysis", "suggestions"]
    }]
  };
});

用法解析

  • 实际操作:输入“根据 server_logs.txt 生成错误报告”,LLM通过MCP获取这个Prompt模板,并结合Resources中的日志数据自动填充参数:
    • log_file: "server_logs.txt"
    • summary: "数据库连接超时导致系统崩溃"
    • analysis: "多次重试失败,可能是网络问题"
    • suggestions: "检查数据库端口和网络稳定性"
  • 结果:LLM输出一份格式化的Markdown报告。这就像上传了一个“报告模板”,LLM按照既定框架填充内容,生成结构化输出。Prompts的作用是为LLM提供现成的模板和流程,显著提升生成效率与规范性。

三者如何协作:

假设将这三个文件全部“上传”到一个支持MCP的客户端(如Claude Desktop):

  1. Resources (server_logs.txt):LLM首先读取日志,获取上下文信息。
  2. Tools (weather_tool.py):如果顺便询问“今天天气如何影响服务器”,LLM便会调用工具查询天气。
  3. Prompts (error_report_template.md):最后使用模板将日志分析和天气数据整合为一份完整的报告。
最终输出(模拟):
错误报告
日志文件: server_logs.txt
错误概要
数据库连接超时导致系统崩溃
详细分析
日志显示多次超时,可能是网络问题。今日上海天气多云,温度15°C,未见极端情况。
修复建议
检查数据库端口和网络稳定性,排除硬件故障。

写到最后

通过上述例子,我们模拟了“上传文件”的直观体验,细致展示了MCP三大核心概念在实际开发中的落地方式。现实中,MCP需要服务器与客户端协同支持,但其底层原理正是如此简单直接,易于理解与实现。

来源:https://www.53ai.com/news/finetuning/2025022595642.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。