释放数据潜力:利用 MCP 资源让大模型读懂你的服务器

简介: MCP(Model Control Protocol)资源系统是将服务器数据暴露给客户端的核心机制,支持文本和二进制两种类型资源。资源通过唯一URI标识,客户端可通过资源列表或模板发现资源,并使用`resources/read`接口读取内容。MCP还支持资源实时更新通知及订阅机制,确保动态数据的及时性。实现时需遵循最佳实践,如清晰命名、设置MIME类型和缓存策略,同时注重安全性,包括访问控制、路径清理和速率限制等。提供的示例代码展示了如何用JavaScript和Python实现资源支持。

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

0 前言

向LLM暴露服务器上的数据和内容

资源(Resources)是MCP核心概念,允许服务器将数据和内容暴露,供客户端读取,并作为大模型交互的上下文使用。

注意

资源是由应用控制的,即客户端应用可自行决定资源的使用方式和时机。不同 MCP 客户端可能不同方式处理资源,如:

  • Claude Desktop 要求用户手动选择资源后才能用
  • 其他客户端可能会基于启发式方法自动选择资源
  • 有些实现甚至允许 AI 模型自行决定使用哪些资源。

因此,服务器开发者在实现资源支持时,应考虑各种交互方式。如希望自动将数据暴露给模型,应使用由模型控制的工具。

1 概述

资源可代表 MCP 服务器希望提供给客户端的任何类型的数据,包括但不限于:

  • 文件内容
  • 数据库记录
  • API 响应
  • 实时系统数据
  • 截图和图像
  • 日志文件
  • 其他各种数据

每个资源都有一个唯一 URI 标识,内容可以是文本或二进制数据。

2 URI

资源通过 URI 唯一标识,格式如下:

[protocol]://[host]/[path]

示例:

  • file:///home/user/documents/report.pdf
  • postgres://database/customers/schema
  • screen://localhost/display1

URI 的协议和路径结构由 MCP 服务器自行定义,服务器可定制自己的 URI 方案。

3 类型

资源内容可分为两种类型:

3.1 文本

包含 UTF-8 编码的文本数据,适合以下内容:

  • 源代码
  • 配置文件
  • 日志文件
  • JSON/XML 数据
  • 纯文本

3.2 二进制

包含使用 base64 编码的原始二进制数据,适合以下内容:

  • 图像
  • PDF
  • 音频文件
  • 视频文件
  • 其他非文本格式

4 发现方式

客户端可通过两种方式发现可用资源:

4.1 直接资源列表

服务器通过 resources/list 接口提供明确的资源清单,每个资源包含以下信息:

{
   
  uri: string;           // 资源唯一标识
  name: string;          // 可读名称
  description?: string;  // 可选描述信息
  mimeType?: string;     // 可选 MIME 类型
}

4.2 资源模板

对于动态资源,服务器可暴露 URI 模板,客户端可根据模板生成合法的资源 URI:

{
   
  uriTemplate: string;   // 遵循 RFC 6570 的 URI 模板
  name: string;          // 可读名称
  description?: string;  // 可选描述
  mimeType?: string;     // 可选 MIME 类型
}

5 读取资源内容

客户端使用资源 URI 通过 resources/read 请求读取资源,服务器返回资源内容列表:

{
   
  contents: [
    {
   
      uri: string;        // 资源 URI
      mimeType?: string;  // 可选 MIME 类型

      // 二选一:
      text?: string;      // 文本内容
      blob?: string;      // 二进制内容(base64 编码)
    }
  ]
}

服务器可在一次 resources/read 请求中返回多个资源,如读取目录时可返回其中的所有文件。

6 更新

MCP 支持实时资源更新,主要有两种机制:

6.1 列表变更

当服务器的资源列表发生变化时,通过 notifications/resources/list_changed 通知客户端。

6.2 内容变更

客户端可以订阅某个资源的变更:

  1. 客户端发送 resources/subscribe 请求并附带资源 URI;
  2. 服务器在资源内容变更时,发送 notifications/resources/updated 通知;
  3. 客户端通过 resources/read 获取最新内容;
  4. 客户端可以发送 resources/unsubscribe 取消订阅。

7 示例

简单的 MCP 服务器实现资源支持的例子:

// 提供资源列表
server.setRequestHandler(ListResourcesRequestSchema, async () => {
   
  return {
   
    resources: [
      {
   
        uri: "file:///logs/app.log",
        name: "应用日志",
        mimeType: "text/plain"
      }
    ]
  };
});

// 读取资源内容
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
   
  const uri = request.params.uri;

  if (uri === "file:///logs/app.log") {
   
    const logContents = await readLogFile();
    return {
   
      contents: [
        {
   
          uri,
          mimeType: "text/plain",
          text: logContents
        }
      ]
    };
  }

  throw new Error("未找到资源");
});
@app.list_resources()
async def list_resources() -> list[types.Resource]:
    return [
        types.Resource(
            uri="file:///logs/app.log",
            name="应用日志",
            mimeType="text/plain"
        )
    ]

@app.read_resource()
async def read_resource(uri: AnyUrl) -> str:
    if str(uri) == "file:///logs/app.log":
        log_contents = await read_log_file()
        return log_contents

    raise ValueError("未找到资源")

# 启动服务器
async with stdio_server() as streams:
    await app.run(
        streams[0],
        streams[1],
        app.create_initialization_options()
    )

8 最佳实践

实现资源支持时,建议:

  1. 使用清晰、具描述性的资源名称和 URI;
  2. 添加有用的描述,帮助大模型理解资源;
  3. 在已知的情况下设置合适的 MIME 类型;
  4. 为动态内容实现资源模板;
  5. 对频繁变更的资源使用订阅机制;
  6. 出错时返回清晰明了的错误信息;
  7. 对资源列表进行分页处理(如有必要);
  8. 在适当情况下缓存资源内容;
  9. 处理资源前先验证 URI;
  10. 文档中注明自定义的 URI 方案。

9 安全

在暴露资源时,请注意以下安全措施:

  • 验证所有资源 URI 的合法性;
  • 实施适当的访问控制策略;
  • 清理文件路径,防止目录遍历攻击;
  • 谨慎处理二进制数据;
  • 对资源读取设置速率限制;
  • 审计资源访问记录;
  • 传输过程中加密敏感数据;
  • 验证 MIME 类型是否符合预期;
  • 为耗时较长的读取操作设置超时机制;
  • 适时清理过期或无效资源。
目录
相关文章
|
5天前
|
人工智能 监控 数据挖掘
5个开源MCP服务器:扩展AI助手能力,高效处理日常工作
AI大语言模型虽强大,但其原生能力仅限于文本对话,难以直接与外部世界交互。MCP(Model Context Protocol)服务器技术作为桥梁,赋予AI实质性环境交互能力,如浏览网页、分析数据等。本文基于实际经验,精选五种开源MCP服务器实现:Stagehand用于网络内容提取;Jupyter适用于数据分析;Opik提供AI行为监控;GitHub集成代码仓库管理;FastAPI-MCP支持自定义API集成。这些工具免费且可定制,为构建实用AI系统奠定基础。文章还提供了配置指南和应用场景剖析,助读者快速上手。
184 3
5个开源MCP服务器:扩展AI助手能力,高效处理日常工作
|
17天前
|
数据采集 人工智能 运维
上阿里云百炼用Qwen3搞定MCP Agent,有机会瓜分1亿tokens
Qwen3 Agent有奖征文活动正式启动,使用Qwen3+MCP Server搭建Agent,即有机会瓜分1亿Tokens及30个限定周边大奖!活动时间为2025年5月6日至5月30日,提交形式包括技术文档、故事感悟、演示视频等。欢迎扫码报名,发挥创意,赢取丰厚奖励!
|
23天前
|
人工智能 自然语言处理 小程序
蚂蚁百宝箱 3 分钟上手 MCP:6 步轻松构建 Qwen3 智能体应用并发布小程序
本文介绍如何用6个步骤、3分钟快速构建一个基于Qwen3与蚂蚁百宝箱MCP的智能体应用,并发布为支付宝小程序。通过结合Qwen3强大的语言理解和生成能力,以及支付宝MCP提供的支付功能,开发者可轻松打造具备商业价值的“数字员工”。案例以“全球智能导游助手”为例,支持119种语言,不仅提供旅行建议,还能收取用户打赏。文章详细说明了从登录百宝箱、创建应用、添加插件到配置角色、发布上架及手机端体验的完整流程,同时提醒当前支付功能仅适用于测试环境。适合希望探索AI应用变现潜力的开发者尝试。
149 14
|
4天前
|
人工智能 自然语言处理 搜索推荐
AI 零成本搭建个人网站,小白 3 步搞定!通义灵码智能体+MCP 新玩法
通过AI技术,即使不编写代码也能高效开发项目。从生成诗朗诵网页到3D游戏创建,这些令人惊叹的操作如今触手可及。经过摸索,我利用AI成功上线了个人站点:https://koi0101-max.github.io/web。无需一行代码,借助强大的工具即可实现创意,让开发变得简单快捷!
182 30
|
5天前
|
人工智能 调度
【MCP教程系列】在阿里云百炼上用Qwen3+且慢MCP,用AI重新定义资产管理效率
通义千问Qwen3通过MCP协议,在Agent中具备强大的工具调度与复杂任务拆解能力,成为构建复杂AI应用的核心引擎。以“基金助手”为例,集成且慢MCP服务后,可一键调用多源金融数据并动态组合分析工具,实现精准调度。在阿里云百炼平台上,只需4步即可构建一个“金融顾问”智能体:开通且慢MCP服务、新建智能体、添加MCP技能、测试效果。此外,还可增加提示词规范输出内容,完成更复杂的任务。
【MCP教程系列】在阿里云百炼上用Qwen3+且慢MCP,用AI重新定义资产管理效率
|
1天前
|
人工智能 测试技术 API
通义灵码 + 魔搭MCP:全流程构建创空间应用
最近,通义灵码上线 MCP(ModelScope Cloud Platform)功能,从之前代码生成及修改的基础功能,到可以使用MCP服务连接更多功能,开发者可以实现从 代码爬取、模型推理到应用部署
44 10
|
2天前
|
人工智能 搜索推荐 机器人
Qwen3+MCP快速解决今晚吃什么?
智能体是一种基于云计算和人工智能的自主决策系统,相比通用AI大模型,更注重场景化适配与垂直领域深耕。本文以“今天吃什么”智能体为例,依托Qwen3多模态能力和MCP动态规划框架,打造个性化饮食推荐服务。从开通百炼平台、创建智能体到设计Prompt和部署MCP服务,最终实现精准美食推荐,解决选择困难问题,将点餐变为一场充满惊喜的探险。总结来看,智能体通过云+AI技术,在垂直场景中展现高效精准的决策能力。
|
3天前
|
JavaScript 搜索推荐 前端开发
通义灵码2.5智能体模式联合MCP:打造自动化菜品推荐平台,实现从需求到部署的全流程创新
本项目利用通义灵码2.5的智能体模式与MCP服务,构建在线点餐推荐网站。基于Qwen3模型,实现从需求到代码生成的全流程自动化,集成“今天吃什么”和EdgeOne MCP服务,提供个性化推荐、偏好管理等功能。技术架构采用React/Vue.js前端与Node.js后端,结合MCP工具链简化开发。项目涵盖功能测试、部署及未来扩展方向,如餐厅推荐、语音交互等,展示高效开发与灵活扩展能力。
|
3天前
|
弹性计算 NoSQL 数据库
阿里云服务器如何备份数据?
阿里云服务器数据备份有多种方法,用户可按需选择。主要方式包括:1)快照备份,创建云盘的时间点拷贝,支持定期备份与数据恢复;2)数据库备份DBS,适用于多种环境的数据库备份,涵盖本地及多云场景;3)云备份Cloud Backup,提供统一灾备平台,支持ECS整机、数据库、文件系统等全方位备份,保障数据安全。
|
8天前
|
SQL 自然语言处理 关系型数据库
通义灵码2.5来袭!MCP 功能直接让开发效率提升300%(附实战案例)
通义灵码2.5是阿里云推出的AI编码助手,以智能协作为核心,深度融合开发全流程。其三大升级点包括:编程智能体实现任务自主规划、MCP工具生态支持自然语言生成SQL、记忆进化系统个性化适配开发者习惯。通过自然语言即可完成数据库操作、代码生成与优化,大幅提升开发效率。此外,还具备工程级变更管理、多文件协同编辑及版本控制功能,适用于多种IDE环境,为企业提供安全高效的开发解决方案。