Malize's blog Malize's blog
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • MCP

    • MCP 学习导航
    • 概念与运行机制
    • draw.io 源码与画图调用链
    • MCP、插件与 MCP Apps
    • 开发与数据采集实践
    • 离线渲染与内网部署
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)

Malize

持续学习,持续成长
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • MCP

    • MCP 学习导航
    • 概念与运行机制
    • draw.io 源码与画图调用链
    • MCP、插件与 MCP Apps
    • 开发与数据采集实践
    • 离线渲染与内网部署
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)
  • MCP

    • MCP
    • MCP概念与运行机制
    • draw.io源码与画图调用链
    • MCP、插件与MCP Apps
    • 开发第一个MCP与数据采集实践
      • 1. 自己写一个 MCP,需要哪些步骤?
      • 2. 数据采集领域里,MCP 做什么?
      • 3. 记住这几个边界
      • 延伸阅读
    • draw.io离线渲染与内网部署
  • 大模型学习
  • MCP
malize
2026-10-19
目录

开发第一个MCP与数据采集实践

# 开发第一个MCP与数据采集实践

从加法函数到设备温度采集,明确 SDK 做什么、业务函数做什么,以及结果如何回到 AI。

# 1. 自己写一个 MCP,需要哪些步骤?

  1. 确定要提供的能力。
  2. 先实现普通业务函数。
  3. 用 MCP SDK 创建服务。
  4. 注册工具名称、说明、参数和执行函数。
  5. 选择 stdio 或 Streamable HTTP,并配置客户端。
  6. 验证工具发现、正常调用、参数错误和业务失败。

最简单的加法服务如下,使用官方 Python SDK v1 API:

python -m venv .venv
.venv/bin/python -m pip install 'mcp[cli]>=1,<2'
1
2

创建 server.py:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("计算工具")

@mcp.tool()
def add(a: float, b: float) -> float:
    """计算两个数的和。"""
    return a + b

if __name__ == "__main__":
    mcp.run(transport="stdio")
1
2
3
4
5
6
7
8
9
10
11

Windows 环境需使用对应的虚拟环境路径。安装后可记录实际依赖版本,便于复现。客户端启动命令指向虚拟环境中的 Python,参数为 server.py 的绝对路径。stdio 模式不要把普通调试日志写到 stdout,应写 stderr,以免污染协议消息。

用户:12 加 30
  ↓
模型选择 add,生成参数 a=12、b=30
  ↓
客户端发送 MCP 工具调用
  ↓
服务执行 return a + b
  ↓
结果 42 经 SDK 返回客户端,再交给模型
1
2
3
4
5
6
7
8
9

与 draw.io 的对应关系是:加法工具的业务是计算和返回数字;画图工具的业务是处理图形、生成链接、打开浏览器和返回链接。SDK 处理通信,业务代码由开发者自己写。示例 API 参考 官方 Python SDK (opens new window)。

# 2. 数据采集领域里,MCP 做什么?

以工厂温度采集为例,可以提供:

工具 实际业务
list_devices() 查询设备列表
read_temperature(device_id) 调用采集接口,或通过 Modbus 等协议读设备
query_history(device_id, start, end) 查询历史数据库
用户:3 号设备当前多少度?
  ↓
模型选择 read_temperature,参数为 device-3
  ↓
MCP 服务调用采集函数
  ↓
采集函数读取设备并换算数值
  ↓
返回温度、单位、设备编号和采样时间
  ↓
AI 用自然语言回答
1
2
3
4
5
6
7
8
9
10
11

设备离线应返回错误,读取历史缓存时应标明采样时间,避免把旧值称为“当前值”。持续轮询、断线重连和数据落库由采集系统承担;MCP 可以暴露查询、任务启动和配置接口,但不是采集引擎本身。

# 3. 记住这几个边界

  • 协议不等于函数,工具可以包装函数。
  • Server 不一定是一台远程机器,也可以是本地进程。
  • 工具描述负责说明,业务代码负责执行,SDK 负责协议通信。
  • 图形数据、链接、文件和渲染产物是不同阶段。
  • 本地 MCP 不自动意味着离线;需要检查完整依赖链。
  • MCP 的价值是标准化连接与调用,让已有程序能力被 AI 应用复用。

# 延伸阅读

  • MCP概念与运行机制
  • draw.io源码与画图调用链
  • MCP、插件与MCP Apps
  • draw.io离线渲染与内网部署
编辑 (opens new window)
#MCP#Agent#draw.io
上次更新: 2026/10/19, 01:44:57
MCP、插件与MCP Apps
draw.io离线渲染与内网部署

← MCP、插件与MCP Apps draw.io离线渲染与内网部署→

最近更新
01
MCP概念与运行机制
10-19
02
draw.io源码与画图调用链
10-19
03
MCP、插件与MCP Apps
10-19
更多文章>
Theme by Vdoing | Copyright © 2023-2026 Malize | GitHub | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式