MCP Server Resource 开发学习文档

开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑 深入解析MCP资源的使用逻辑,从协议规范到实战场景,探讨如何通过这一机制释放大模型的无限潜能。 阅读详情

MCP Server Resource 开发学习文档

目录

  1. 简介
  2. 主要依赖与环境准备
  3. 服务器核心结构与原理
    • 资源定义与管理
    • 资源列表接口实现
    • 资源读取接口实现
    • 传输方式(stdio 与 sse)
  4. 源码详细解析
  5. SSE 方式本地部署方法
  6. 客户端访问 SSE 服务示例

1. 简介

MCP(Modular Communication Protocol)是一种用于模块化服务通信的协议。本文以 simple-resource 服务器为例,讲解如何开发一个简单的 MCP 资源服务器,将本地文本资源以标准接口暴露给客户端访问。


2. 主要依赖与环境准备

  • Python 3.8+
  • anyio
  • click
  • pydantic
  • starlette
  • uvicorn
  • mcp(自定义/三方库)

安装依赖(假设 requirements.txt 已配置):

pip install -r requirements.txt

3. 服务器核心结构与原理

3.1 资源定义与管理

资源以字典形式存储,key 为资源名,value 为资源内容:

SAMPLE_RESOURCES = {
    "greeting": "Hello! This is a sample text resource.",
    "help": "This server provides a few sample text resources for testing.",
    "about": "This is the simple-resource MCP server implementation.",
}

3.2 资源列表接口实现

通过 @app.list_resources() 装饰器注册资源列表接口,返回所有可用资源的元数据:

@app.list_resources()
async def list_resources() -> list[types.Resource]:
    return [
        types.Resource(
            uri=AnyUrl(f"file:///{name}.txt"),
            name=name,
            description=f"A sample text resource named {name}",
            mimeType="text/plain",
        )
        for name in SAMPLE_RESOURCES.keys()
    ]
  • uri:资源唯一标识,采用 file 协议
  • name:资源名
  • description:资源描述
  • mimeType:资源类型

3.3 资源读取接口实现

通过 @app.read_resource() 装饰器注册资源读取接口,按 uri 读取资源内容:

@app.read_resource()
async def read_resource(uri: AnyUrl) -> str | bytes:
    if uri.path is None:
        raise ValueError(f"Invalid resource path: {uri}")
    name = uri.path.replace(".txt", "").lstrip("/")
    if name not in SAMPLE_RESOURCES:
        raise ValueError(f"Unknown resource: {uri}")
    return SAMPLE_RESOURCES[name]
  • 校验 uri 合法性
  • 解析资源名
  • 返回对应资源内容

3.4 传输方式(stdio 与 sse)

  • stdio:标准输入输出,适合本地进程间通信
  • sse:Server-Sent Events,基于 HTTP,适合网络通信

通过命令行参数 --transport 选择,默认 stdio。


4. 源码详细解析

4.1 主函数入口

@click.command()
@click.option("--port", default=8000, help="Port to listen on for SSE")
@click.option(
    "--transport",
    type=click.Choice(["stdio", "sse"]),
    default="stdio",
    help="Transport type",
)
def main(port: int, transport: str) -> int:
    app = Server("mcp-simple-resource")
    # ...注册接口...
    if transport == "sse":
        # SSE 相关逻辑
    else:
        # stdio 相关逻辑
    return 0
  • 使用 click 实现命令行参数解析
  • 根据 transport 参数选择不同的服务启动方式

4.2 SSE 传输实现

if transport == "sse":
    from mcp.server.sse import SseServerTransport
    from starlette.applications import Starlette
    from starlette.responses import Response
    from starlette.routing import Mount, Route

    sse = SseServerTransport("/messages/")

    async def handle_sse(request):
        async with sse.connect_sse(
            request.scope, request.receive, request._send
        ) as streams:
            await app.run(
                streams[0], streams[1], app.create_initialization_options()
            )
        return Response()

    starlette_app = Starlette(
        debug=True,
        routes=[
            Route("/sse", endpoint=handle_sse, methods=["GET"]),
            Mount("/messages/", app=sse.handle_post_message),
        ],
    )

    import uvicorn
    uvicorn.run(starlette_app, host="0.0.0.0", port=port)
  • 使用 Starlette 框架搭建 HTTP 服务
  • /sse 路由用于 SSE 连接
  • /messages/ 路由用于消息传递
  • 通过 uvicorn 启动服务

4.3 stdio 传输实现

else:
    from mcp.server.stdio import stdio_server

    async def arun():
        async with stdio_server() as streams:
            await app.run(
                streams[0], streams[1], app.create_initialization_options()
            )

    anyio.run(arun)
  • 适合本地开发和测试

5. SSE 方式本地部署方法

5.1 启动 SSE 服务

在 simple-resource 目录下运行:

uv run mcp-simple-resource --transport sse --port 8000

或直接用 Python 启动:

python mcp_simple_resource/server.py --transport sse --port 8000
  • 服务将监听本地 8000 端口,SSE 路径为 /sse

6. 客户端访问 SSE 服务示例

6.1 Python 客户端示例

假设有 mcp 客户端库,示例代码如下:

import asyncio
from mcp.types import AnyUrl
from mcp.client.session import ClientSession
from mcp.client.sse import SseServerParameters, sse_client

async def main():
    async with sse_client(
        SseServerParameters(url="http://localhost:8000/sse")
    ) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # 列出所有资源
            resources = await session.list_resources()
            print(resources)

            # 读取特定资源
            resource = await session.read_resource(AnyUrl("file:///greeting.txt"))
            print(resource)

asyncio.run(main())
  • SseServerParameters 指定服务端地址
  • list_resources() 获取资源列表
  • read_resource() 读取具体资源内容

总结

本文详细介绍了 MCP simple-resource 服务器的开发原理、源码结构、接口实现、SSE 部署与客户端访问方法。通过本例,开发者可以快速理解如何基于 MCP 协议开发自定义资源服务,并通过多种传输方式对接客户端。

MCP Resource模块详解 MCP Resource模块是模型上下文协议的核心组件,通过标准化URI接口为AI模型提供安全可控的只读数据访问能力。其核心设计包括数据隔离架构和客户端驱动的访问控制,支持文本/二进制编码格式,适用于配置文件读取、数据库查询和实时监控等场景。模块通过URI解耦物理存储与逻辑访问,结合订阅机制实现动态数据监听,为AI系统提供安全边界内的静态数据交互能力 阅读详情

相关推荐

构建高效开发基石:手把手教你搭建MCP Server

MCP(Model-Controller-Proxy)架构是软件开发领域的一项创新技术,其核心组件MCP Server具备Tool、Resource和Prompt三大能力。Tool能力通过调用外部服务(如数据库或API)扩展应用功能;Resource能力提供只读数据支持;Prompt能力则通过定义模板引导与大语言模型的交互。本文详细介绍了如何搭建开发环境、实现这三大能力,并进行配置与测试。通过一个简单的MCP Server实现,展示了其在应用开发中的潜力,特别是在Tool能力方面的广泛应用。未来,MCP架构

无声旅者的博客 1206

MCP 核心概念 -- Resources(上),官方原文分析

本文是: 以通俗的语言说明 resources 的作用和用法。开头就简要的说明,resources是用来暴露数据和内容的,是一个类似GET请求获取的资源。资源被设计为由应用程序控制 ,这意味着客户端应用程序可以决定如何使用它们以及何时使用它们。不同的 MCP 客户端可能以不同的方式处理资源。

WeEvolve的博客 1614

【DeepSeek实战】11、从零构建MCP Server实战:掌握Tool/Resource/Prompt核心能力

本文将系统解析MCP Server的核心技术与实现方法,帮助读者快速构建功能完整的模型交互系统。MCP Server作为连接大模型与外部世界的"能力中台",主要提供三大核心功能:自动化工具调用(Tool)、安全资源访问(Resource)和标准化对话模板(Prompt)。文章包含系统架构设计、技术选型建议以及5000字以上的深度代码解析,通过可视化图表和关键代码示例,指导开发者从零搭建MCP Server,掌握大模型与外部资源交互的关键技术。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1637

【MCP 核心概念】Resources

MCP资源组件摘要 Model Context Protocol (MCP)中的Resources是服务器向客户端提供上下文数据的核心机制,包含文本和二进制两种类型。每个资源通过唯一URI标识,可包含文件、数据库内容、多媒体等各类数据。服务器通过资源列表或URI模板公开可用资源,客户端可以读取资源内容或订阅实时更新。该组件支持应用程序控制,允许不同客户端以自定义方式处理资源,为LLM交互提供灵活的数据上下文支持。典型应用包括展示配置文件、日志、客户数据、图表图像等,既支持静态内容也允许动态数据流。

showyoui的博客 1187

MCP协议实战:用Python 5分钟搭建你的第一个MCP Server(附完整代码)

摘要:本文介绍了MCP协议(Model Context Protocol)的实战应用,通过Python快速搭建MCP Server。MCP协议已成为AI Agent调用外部工具的标准,支持阿里、腾讯等平台。文章首先解释了MCP协议的核心概念(Server、Client、Transport),然后提供5分钟快速入门指南,包含完整Python代码示例(计算器、字符串反转、时间查询等功能),并演示客户端调用验证。最后总结了常见问题排查方法。适合Python开发者学习如何为AI Agent开发标准化工具接口

qq_36411553的博客 1176

阿里云Windows服务器部署网站全流程:从IIS配置到安全上线

Web服务器是承载网站应用、处理HTTP请求的核心软件。其工作原理是监听特定网络端口,接收客户端请求,并返回相应的网页、文件或动态生成的内容。在Windows Server环境中,IIS(Internet Information Services)作为微软官方Web服务器,凭借其与操作系统深度集成、图形化管理界面和对ASP.NET等微软技术栈的良好支持,成为许多开发者和运维人员的首选。其技术价值在于提供了稳定、可扩展的托管平台,支持从简单的静态网站到复杂的企业级Web应用。在云服务器普及的今天,将IIS部署

weixin_33552698的博客 327

【MCP实战】手把手教你服务端的开发与功能验证

定义与 LLM 交互的模板。

qq_46094651的博客 2476

OSGEarth 基于鼠标位置缩放

说明 osgearth 原有漫游器EarthManipulator 不支持此功能,所以需要修改此漫游器代码,其中主要原理就是在缩放的同时也要改变当前漫游器中心焦点的位置,从而保持鼠标指定点的位置缩放是不改变。 核心代码修改部分 EarthManipulator 的头文件zoom方法添加参数view /** * Zoom the camera using delt...

Rsoftwaretest的专栏 3783

MCP Server Resource 开发学习文档:从零实现可复用的资源服务

从零实现 MCP Server Resource 可复用资源服务,本文提供完整开发学习文档:资源定义模板、list_resources 与 read_resource 接口注册、stdio 与 SSE 双传输配置,并接入 TaoToken 完成模型侧前置配置与本地验证。官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 含 API Key 管理与接入文档,助你快速跑通整条调用链路。

weixin_42610671的博客 5

kepserverEX6创建tcpserver接入自有协议(使用ucon接入)

kepserverEX6创建tcpserver接入自有协议

qq_38388813的博客 1632

三角洲行动交易行自动化脚本

DFMarketBot - 三角洲行动自动交易助手 DFMarketBot是一款专为三角洲行动游戏设计的交易行自动化工具,通过OCR识别和鼠标模拟实现自动补卡、补子弹功能。项目采用Python开发,支持Windows平台,主要功能包括: 自动检测并购买指定物品(房卡/子弹) 价格监控与智能购买(低于设定价格自动下单) 自定义购买数量与次数限制 支持窗口/无窗口两种游戏模式 使用前需安装Tesseract OCR引擎并配置游戏为1920*1080分辨率。通过JSON文件可灵活配置监控物品清单、理想价格和购买策

愤怒的阿木木的博客 3万+

MCP Server 开发实战:无缝对接 LLM 和 Elasticsearch

本教程通过构建一个 Elasticsearch MCP Server 的实例,展示了如何利用 MCP 协议的三个核心原语(Tool、Resource 和 Prompt)来增强 LLM 的能力。通过 Tool 实现了索引操作和文档写入,通过 Resource 提供数据的访问能力,而 Prompt 则帮助 LLM 以标准化的方式完成任务。最后通过一个实际的组合示例,演示了如何让 LLM 利用这些组件完成更复杂的数据处理任务,充分体现了 MCP 在提升 LLM 应用开发效率方面的优势。

cr7258的博客 7569

AttributeError: module ‘numpy‘ has no attribute ‘int‘解决方案

本文主要介绍了AttributeError: module ‘numpy’ has no attribute 'int’解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 28万+

青简输入法安装指南:三平台 3 步完成首次输入

青简(Qingjian)是一款用 Rust 编写的开源拼音输入法,装上之后除了打拼音、选词、出整句,候选词旁还会多一列正在学习的语言的译词。本文按"共性步骤 + 平台增量"讲清 macOS、Windows、Linux 三平台的青简输入法安装,从下载包到打出第一句话,大约 10 分钟。 [![青简输入法 macOS 候选窗口带译词截图](https://raw.gitcode.com/gh_mir

gitblog_00112的博客 1051

《SAP FICO系统配置从入门到精通共40篇》030、集成配置:FI与生产计划(PP)的自动科目确定

FI和PP的自动科目确定,本质上是把生产业务翻译成会计语言。翻译规则就藏在那些配置表里。配的时候多想一步:这个业务动作,在财务眼里是什么?是材料消耗?是产出入库?还是工费分摊?想清楚这个,再看配置界面,那些代码就不是天书了。最好的测试方式,是月底关账前,让生产部门跑一遍所有类型的生产订单。配置对不对,业务最知道。

985大学毕业,前某大厂员工,啥都会点的程序员! 574

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

mcp-use 框架 Resources 完整指南:用 MCP Resource 与 Resource Template 暴露只读数据

本指南聚焦 mcp-use 框架中 **Resources(资源)** 这一 MCP 原语:它用于向 MCP 客户端暴露只读数据(配置、静态数据、文档、列表、应用状态),本身不接收输入参数,需要参数时应使用资源模板(Resource Templates)。本文将从基本定义、URI/命名规范、静态与动态资源、带参数模板、补全回调、错误处理、缓存等维度完整讲解,并结合本仓库中实际可运行的 mcp-us

gitblog_00968的博客 727

flash均衡磨损--实时保存设备数据

【代码】flash均衡磨损--实时保存设备数据。

Car12 480

让AI再次伟大-MCP-Server开发指南

MCP 是什么。

爱吃知识的土豆倪的博客 2640

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用 Terraform 管理 LiteLLM MCP Server:resource_mcp_server 资源完全指南

[terraform-provider-litellm 的 `litellm_mcp_server` 资源](https://link.gitcode.com/i/bba67ceea880235f9e0d6a7e605a7a26) 用于在 LiteLLM Proxy 中声明式地管理 MCP(Model Context Protocol)服务器。MCP 服务器通过暴露的 tools 与 resour

gitblog_00021的博客 356

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MCP 基础:Server、Tool、Resource 和 Prompt

MCP 让外部系统用标准方式进入 AI 应用。Tool 负责动作,Resource 负责上下文,Prompt 负责模板,Server 负责把这些能力通过协议暴露给 Client。

HBLOG 430

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

简单容易理解的MCP server实现

Model Context Protocol (MCP) 是一个专门为 LLM(大语言模型)应用设计的协议,它允许你构建服务器以安全、标准化的方式向 LLM 应用程序公开数据和功能。1. Tool(工具)Tool 允许服务器公开可执行的函数,这些函数可由客户端调用并由 LLM 使用来执行操作。Tool 不仅人让 LLM 能从外部获取信息,还能执行写入或操作,为 LLM 提供真正的行动力。模型控制:Tool 直接暴露给 LLM 可执行函数,让模型可以主动调用。2. Resource(资源)

victorwjw的博客 1091

Coolify 中的 Laravel MCP 开发实战:从 routes/ai.php 注册到 Tool / Resource / Prompt 的完整构建

> 本文以仓库内 `.cursor/skills/mcp-development/SKILL.md` 为骨架,结合 Coolify 项目源码中真实落地的 MCP(Model Context Protocol)实现,讲解如何在 Laravel 应用中开发 MCP 能力。你将掌握 MCP Server 在 `routes/ai.php` 中的注册方式、用 artisan 生成器创建 Tool / Re

gitblog_00083的博客 833

Coolify 中基于 Laravel MCP 的 MCP 服务端开发实践:Tools、Resources、Prompts 与 Server 注册完整指南

Coolify 是一个开源、可自托管的 PaaS(应用部署平台),内置了面向 AI 生态的 MCP(Model Context Protocol)服务端实现,允许 Claude、Cursor 等支持 MCP 的客户端通过 API 令牌读取与操作团队资源。本文以仓库内 `[.claude/skills/mcp-development/SKILL.md](https://link.gitcode.co

gitblog_00978的博客 350

手动写一个MCP server

本文介绍了如何构建一个MCPserver,主要包括三个部分:准备工作、构建过程和测试方法。首先通过官方GitHub仓库获取项目,使用uv工具配置Python环境并安装MCP SDK。其次展示了如何编写一个简单的MCPserver,包含工具函数(add)、资源函数(get_greeting)和提示函数(greet_user)的实现。最后详细说明了两种测试方式:本地通过stdio协议直接运行,以及通过SSE协议进行远程调用。文章还对比了stdio和SSE两种协议的区别,前者适用于本地紧密交互,后者适用于远程调用

qq_41566596的博客 1251

MCP Server 实现原理及自定义阿里云 OpenAPI MCP Server 的实践

MCP(Model Context Protocol)是一种客户端-服务器架构协议,旨在解决大型语言模型(LLM)在实际应用中的限制,如无法访问实时数据、执行外部操作或访问本地文件。MCP Server作为轻量级程序,通过标准化接口连接LLM与外部资源,提供资源、工具和提示三种功能。本文详细介绍了MCP Server的实现原理,并通过Python和FastAPI框架,手把手教你如何创建一个专属的阿里云OpenAPI MCP Server,以访问阿里云的天气API为例。文章还强调了安全性、性能优化和功能扩展的

分享平时的学习心得和笔记 2308
上一篇: MCP Server StreamableHTTP 开发学习文档
下一篇: AES加密模式详解及OpenSSL C库函数指南
未来创世纪
博客等级 码龄18年 960粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值