ESP32 MCP服务器

A. 模型上下文协议 (MCP)服务器在ESP32上运行(Nordic nRF52840在仅传感器模式下运行),通过WebSocket/JSON-RPC 2.0将真实世界的传感器数据和总线协议暴露给AI助手和自动化工具。
将AI代理直接连接到您的硬件:查询I2C传感器,解析NMEA 0183 GPS/海洋数据,解码NMEA 2000和OBD-II CAN帧,重放总线历史记录——所有这些都是通过标准MCP接口完成的。
______________________________________________________________________
特性
| 能力 | 详细信息 |
|---|---|
| MCP协议 | 基于WebSocket的JSON-RPC 2.0、资源发现和订阅 |
| I2C传感器 | BME280、MPU6050、ADS1115、SHT31、BH1750、INA219的自动扫描+驱动程序 |
| NMEA 0183 | GGA、RMC、VTG、GSV、MWV、DBT、DPT、HDG、HDT,带XOR校验和验证 |
| NMEA 2000/CAN | 29位PGN:位置、航向、速度、深度、风、姿态、水温 |
| OBD-II/CAN | 标准11位OBD-II服务01/09 PID解码(60+PID) |
| 巴士历史 | CAN、NMEA、NMEA 2000、OBD-II的持久环形缓冲区——可通过MCP查询 |
| 公交车阅读器 | 有时间限制的串行和CAN读取,原始或解析模式,JSON输出 |
| 无线网络 | AP设置UI+STA模式;存储在NVS中的凭据 |
| 发现 | mDNS(_mcp._tcp)+UDP功能广播 |
| 指标 | 堆、正常运行时间、RSSI、带引导持久性的直方图统计数据 |
| 多板 | ESP32-S3、ESP32-C3、ESP32、阿达果HUZZAH32、M5Stack、北欧nRF52840 DK、阿达果羽毛nRF5284O |
| 测试 | 本地单元测试(Unity),模拟I2C/CAN/串行/LittleFS |
______________________________________________________________________
支持的板
ESP32板——全MCP服务器(WiFi+WebSocket+CAN)
| 板 | 平台IO环境 | MCU | 闪存 | RAM | WiFi | BLE | CAN | RGB LED |
|---|---|---|---|---|---|---|---|---|
| ESP32-S3-DevKitC-1 | esp32-s3-devkitc-1 | Xtensa LX7×2@240 MHz | 8 MB | 512 KB+8 MB PSRAM | ✓ | 5.0 | ✓ | GPIO48 |
| ESP32 DevKitC V4 | esp32-devkitc | Xtensa LX6×2@240 MHz | 4 MB | 520 KB | ✓ | 4.2 | ✓ | — |
| ESP32-C3-DevKitM-1 | esp32-c3-devkitm-1 | RISC-V@160 MHz | 4 MB | 400 KB | ✓ | 5.0 | ✓ | GPIO8 |
| Adafruit HUZZAH32 | adafruit-huzzah32 | Xtensa LX6×2@240 MHz | 4 MB | 520 KB | ✓ | 4.2 | ✓ | — |
| M5Stack核心ESP32 | m5stack-core | Xtensa LX6×2@240 MHz | 16 MB | 520 KB | ✓ | 4.2 | ✗ | — |
nRF52840板——仅传感器(I2C+串行,无WiFi)
| 板 | 平台IO环境 | MCU | 闪存 | RAM | BLE |
|---|---|---|---|---|---|
| 北欧nRF52840 DK | nrf52840-dk | Cortex-M4F@64 MHz | 1 MB | 256 KB | 5.0+802.15.4 |
| 阿达果羽毛nRF52840 | nrf52840-feather | Cortex-M4F@64 MHz | 1 MB | 256 KB | 5.0 |
nRF52840目标运行单独的 main_nrf.cpp 入口点:仅传感器+I2C+串行输出。没有WiFi,没有MCP WebSocket,没有LittleFS,没有总线历史记录。对于WiFi上的全MCP,通过连接到UART1的AT命令模式下的ESP32-C3桥接。电路板特征矩阵
| 功能 | ESP32-S3 | ESP32 V4 | ESP32-C3 | HUZZAH32 | M5堆栈 | nRF52840 DK | nRF52440羽毛 |
|---|---|---|---|---|---|---|---|
| WiFi | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
| BLE | ✓ | ✓ | |||||
| CAN/TWAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ |
| I2C | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 通用异步收发器(ext) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| LittleFS | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
| MCP服务器 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
| 巴士历史 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
| mDNS/UDP发现 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
______________________________________________________________________
建筑
flowchart TD
Client[AI Agent / MCP Client] -->|WebSocket :9000 JSON-RPC 2.0| MCPServer
subgraph ESP32
MCPServer -->|resources/list| Resources
MCPServer -->|sensors/i2c/scan| SensorMgr
MCPServer -->|sensors/read| SensorMgr
MCPServer -->|buses/serial/read| BusReader
MCPServer -->|buses/can/read| BusReader
MCPServer -->|bus/history/read| BusHistory
MCPServer -->|bus/history/config/*| BusHistory
SensorMgr -->|Wire I2C| I2CSensors[BME280 · MPU6050 · ADS1115\nSHT31 · BH1750 · INA219]
BusReader -->|UART| NMEAParser[NMEA 0183 Parser]
BusReader -->|CAN TWAI| CANParser[NMEA 2000 / OBD-II Parser]
BusReader -->|feed| BusHistory[Bus History\nRing Buffers]
BusHistory --> LittleFS
NetworkMgr[Network Manager] --> WiFi
NetworkMgr --> WebSetup[Setup UI :80]
DiscoveryMgr[Discovery Manager] -->|mDNS + UDP| Network
Metrics[Metrics System] --> LittleFS
uLogger --> LittleFS
end
MCPServer --> Metrics
MCPServer --> uLogger______________________________________________________________________
硬件
引脚分配(ESP32-S3-DevKitC-1)
| GPIO | 功能 | 已连接 |
|---|---|---|
| IO8 | I2C SDA | 所有I2C传感器 |
| IO9 | I2C SCL | 所有I2C传感器 |
| IO16 | UART1 RX | GPS/海图仪TX |
| IO17 | UART1 TX | GPS/海图仪RX(可选) |
| IO4 | CAN RX | TJA1050/SN65HVD230 CRXD |
| IO5 | CAN TX | TJA1050/SN65HVD230 CTXD |
nRF52840 DK引脚分配
| 引脚 | 功能 |
|---|---|
| P0.26/D6 | I2C SDA |
| P0.27/D7 | I2C SCL |
| P0.06/TX | UART1 TX |
| P0.08/RX | 3月1日RX |
物料清单
| # | 部分 | 目的 |
|---|---|---|
| 1 | ESP32-S3-DevKitC-1 | 主MCU |
| 1 | BME280分接 | 温度/湿度/压力 |
| 1 | MPU6050分接头 | 6轴IMU(可选) |
| 1 | TJA1050或SN65HVD230 | CAN总线收发器(可选) |
| 1 | GPS模块(3.3V UART) | NMEA 0183位置/时间(可选) |
| 2 | 4.7 kΩ电阻器 | I2C上拉 |
| -- | 面包板+跳线 |
ESP32-S3-DevKitC-1接线
┌──────────────────────────────────────┐
│ ESP32-S3-DevKitC-1 │
│ │
3V3 ───┤ 3V3 GND ├─── GND
GND ───┤ GND IO0 ├
│ │
I2C SDA ── IO8 ───┤ IO8 ┌──────────┐ IO17 ├─── UART1 TX → GPS
I2C SCL ── IO9 ───┤ IO9 │ ESP32 │ IO16 ├─── UART1 RX ← GPS
│ IO10 │ S3 │ IO15 ├
│ IO11 └──────────┘ IO14 ├
│ IO12 IO13 ├
│ IO3 IO4 ├─── CAN RX ← TJA1050
│ IO46 IO5 ├─── CAN TX → TJA1050
│ │
│ USB (flash / serial log) │
└───────────────────────────────┘I2C传感器接线
所有传感器共享一条总线。将SDA和SCL的4.7 kΩ上拉电压添加到3V3。
ESP32-S3 BME280 MPU6050 ADS1115 INA219
───────── ─────── ─────── ─────── ───────
IO8 (SDA)─────SDA──────────SDA──────────SDA──────────SDA
IO9 (SCL)─────SCL──────────SCL──────────SCL──────────SCL
3V3 ──────────VCC──────────VCC──────────VCC──────────VCC
GND ──────────GND──────────GND──────────GND──────────GND
SDO→GND AD0→GND ADDR→GND
(0x76) (0x68) (0x48) (0x40)其他支持的传感器(相同的总线接线): SHT31 (0x44), BH1750 (0x23)。
NMEA 0183接线(GPS/海图绘图仪)
GPS / chart plotter ESP32-S3
─────────────────── ────────
TX (3.3 V TTL NMEA out) ─────── IO16 (UART1 RX)
RX (optional NMEA in) ─────── IO17 (UART1 TX)
GND ─────── GND
VCC (3.3 V) ─────── 3V3如果设备输出RS-232电平,请使用MAX3232电平转换器。切勿将RS-232直接连接到ESP32 GPIO。
CAN总线接线(NMEA 2000/OBD-II)
TJA1050 / SN65HVD230 ESP32-S3
──────────────────── ────────
CTXD ─────────── IO5 (CAN TX)
CRXD ─────────── IO4 (CAN RX)
VCC (5 V for TJA1050) ─────────── VIN / external 5 V
GND ─────────── GND
CANH ──────────────── NMEA 2000 backbone / OBD-II CANH
CANL ──────────────── NMEA 2000 backbone / OBD-II CANLNMEA 2000的运行速度为250 kbps。OBD-II以500kbps的速度运行。在您的设备中设置波特率 CANBusReader 相应地配置。______________________________________________________________________
软件先决条件
- 平台IO核心 CLI或VS代码的PlatformIO IDE插件
- Python 3.8+
- Git
pip install platformio______________________________________________________________________
构建和Flash
# 1. Clone
git clone https://github.com/navado/ESP32MCPServer.git
cd ESP32MCPServer
# 2. Install library dependencies
pio pkg install
# 3. Upload web assets to LittleFS (optional but recommended)
pio run -t uploadfs -e esp32-s3-devkitc-1
# 4. Build firmware
pio run -e esp32-s3-devkitc-1
# 5. Flash
pio run -t upload -e esp32-s3-devkitc-1
# 6. Monitor
pio device monitor --baud 115200nRF52840
pio run -e nrf52840-dk
pio run -t upload -e nrf52840-dk______________________________________________________________________
首次运行
- 板上的电源。它广播WiFi AP:
ESP32_XXXXXX(MAC地址的最后6位十六进制数字)。 - 连接到该AP并打开
http://192.168.4.1. - 输入您的WiFi凭据,然后单击“保存”。
- 该板加入您的网络,并在串行控制台上打印其IP地址。
- 将MCP客户端连接到
ws://:9000.
______________________________________________________________________
Web仪表板
基于浏览器的仪表板由flash提供 http:///app.
| 选项卡 | 它的作用 |
|---|---|
| 传感器 | 扫描I²C总线,显示检测到的设备,读取值,自动刷新 |
| 指标 | 列出所有指标、实时值、火花线历史图 |
| 日志 | 查询并清除度量日志条目 |
| MCP控制台 | 带有预设请求和实时消息日志的交互式JSON-RPC控制台 |
______________________________________________________________________
HTTP端点(端口80)
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | / | WiFi设置页面 |
| 职位 | /save | 保存WiFi凭据(ssid, password 表单参数) |
| 得到 | /status | 网络状态JSON |
| WS | /ws | 实时网络状态WebSocket |
| 得到 | /app | 浏览器仪表板 |
| 得到 | /bus-history | 读取总线历史配置JSON |
| 职位 | /bus-history | 更新总线历史配置JSON |
______________________________________________________________________
MCP API参考(WebSocket端口9000)
所有方法使用 JSON-RPC 2.0 通过WebSocket。
协议
| 方法 | 参数 | 描述 |
|---|---|---|
initialize | -- | 服务器信息、协议版本、功能 |
resources/list | -- | 列出已注册的MCP资源 |
resources/read | uri | 按URI读取资源 |
resources/subscribe | uri | 订阅以推送资源的更新 |
resources/unsubscribe | uri | 取消订阅 |
传感器
| 方法 | 参数 | 描述 |
|---|---|---|
sensors/i2c/scan | —— | 扫描I²C总线;自动检测和初始化驱动程序 |
sensors/read | sensorId? | 读取一个传感器的所有通道(省略ID以读取全部) |
sensors/i2c/scan
{"jsonrpc":"2.0","method":"sensors/i2c/scan","id":1}{
"jsonrpc":"2.0","id":1,
"result":{"devices":[
{"address":118,"name":"BME280","supported":true,"parameters":["temperature","pressure","humidity"]},
{"address":104,"name":"MPU6050","supported":true,"parameters":["accel_x","accel_y","accel_z","gyro_x","gyro_y","gyro_z","temperature"]}
]}
}sensors/read
{"jsonrpc":"2.0","method":"sensors/read","id":2,"params":{"sensorId":"bme280_0x76"}}{
"jsonrpc":"2.0","id":2,
"result":{"readings":[
{"sensorId":"bme280_0x76","parameter":"temperature","value":22.4,"unit":"°C","timestamp":1234567890,"valid":true},
{"sensorId":"bme280_0x76","parameter":"humidity","value":58.1,"unit":"%RH","timestamp":1234567890,"valid":true},
{"sensorId":"bme280_0x76","parameter":"pressure","value":101320.0,"unit":"Pa","timestamp":1234567890,"valid":true}
]}
}巴士历史
总线历史记录在循环RAM缓冲区中累积CAN帧、NMEA线路、解码的NMEA 2000消息和OBD-II记录。缓冲区的大小由可配置的RAM预算决定,其配置将持久化到LittleFS。
| 方法 | 参数 | 描述 |
|---|---|---|
bus/history/read | type, limit? | 从历史缓冲区读取累积消息 |
bus/history/config/get | -- | 读取当前缓冲区大小配置 |
bus/history/config/set | config字段 | 调整缓冲区大小并保持配置 |
bus/history/read
type 必须是以下之一: can, nmea, nmea2000, obdii. limit 默认为所有存储的条目。
{"jsonrpc":"2.0","method":"bus/history/read","id":3,"params":{"type":"can","limit":10}}{
"jsonrpc":"2.0","id":3,
"result":{
"type":"can",
"frames":["7E8#0441050300000000","7E8#04410D0000000000"],
"count":2,
"capacity":500
}
}{"jsonrpc":"2.0","method":"bus/history/read","id":4,"params":{"type":"nmea2000"}}{
"jsonrpc":"2.0","id":4,
"result":{
"type":"nmea2000",
"messages":[
{"pgn":129025,"priority":2,"source":0,"name":"Position Rapid Update",
"valid":true,"hasPosition":true,"latitude":47.6097,"longitude":-122.3331}
],
"count":1,"capacity":200
}
}{"jsonrpc":"2.0","method":"bus/history/read","id":5,"params":{"type":"obdii"}}{
"jsonrpc":"2.0","id":5,
"result":{
"type":"obdii",
"records":[
{"service":1,"pid":12,"name":"Engine RPM","value":1500,"unit":"rpm","valid":true},
{"service":1,"pid":13,"name":"Vehicle Speed","value":65,"unit":"km/h","valid":true}
],
"count":2,"capacity":300
}
}bus/history/config/get
{"jsonrpc":"2.0","method":"bus/history/config/get","id":6}{
"jsonrpc":"2.0","id":6,
"result":{
"canFrameCount":500,
"nmeaLineCount":1000,
"nmea2000Count":200,
"obdiiCount":300,
"ramBudgetBytes":1048576,
"safetyMarginBytes":65536,
"freeHeapBytes":2097152
}
}bus/history/config/set
所有字段都是可选的;省略的字段保留其当前值。
{
"jsonrpc":"2.0","method":"bus/history/config/set","id":7,
"params":{"canFrameCount":1000,"ramBudgetBytes":2097152}
}{"jsonrpc":"2.0","id":7,"result":{"ok":true,"canFrameCount":1000,"nmeaLineCount":1000,"nmea2000Count":200,"obdiiCount":300,"ramBudgetBytes":2097152,"safetyMarginBytes":65536}}集canFrameCount,nmeaLineCount,nmea2000Count,obdiiCount全部到0要启用自动调整大小:服务器拆分ramBudgetBytes根据每种记录类型的大小,在四种缓冲区类型之间相等。
指标
| 方法 | 参数 | 描述 |
|---|---|---|
metrics/list | category? | 列出所有已注册的指标(名称、类型、单位、类别) |
metrics/get | name | 一个指标的当前值 |
metrics/history | name, seconds? | 一个指标的历史样本(默认值:过去300秒) |
metrics/list
{"jsonrpc":"2.0","method":"metrics/list","id":8,"params":{"category":"system"}}{
"jsonrpc":"2.0","id":8,
"result":{"metrics":[
{"name":"system.heap.free","type":"gauge","description":"Free heap","unit":"bytes","category":"system"},
{"name":"system.uptime","type":"counter","description":"Uptime","unit":"s","category":"system"},
{"name":"system.wifi.rssi","type":"gauge","description":"WiFi signal strength","unit":"dBm","category":"system"}
]}
}度量类型: counter (累积整数), gauge (当前值), histogram (最小/最大/平均/计数对象)。
metrics/get
{"jsonrpc":"2.0","method":"metrics/get","id":9,"params":{"name":"system.heap.free"}}{
"jsonrpc":"2.0","id":9,
"result":{"name":"system.heap.free","type":"gauge","value":214032,"unit":"bytes","category":"system","timestamp":1234567890}
}对于直方图度量, value 是一个对象: {"mean":…,"min":…,"max":…,"count":…}.
metrics/history
{"jsonrpc":"2.0","method":"metrics/history","id":10,"params":{"name":"system.heap.free","seconds":60}}{
"jsonrpc":"2.0","id":10,
"result":{"name":"system.heap.free","entries":[
{"ts":1234567800,"val":214100},
{"ts":1234567830,"val":214032}
]}
}日志
| 方法 | 参数 | 描述 |
|---|---|---|
logs/query | name?, seconds? | 查询二进制度量日志(默认值:最近3600秒) |
logs/clear | -- | 删除LittleFS中的所有日志条目 |
{"jsonrpc":"2.0","method":"logs/query","id":11,"params":{"name":"system.heap.free","seconds":120}}{
"jsonrpc":"2.0","id":11,
"result":{"name":"system.heap.free","count":4,"entries":[
{"ts":1234567810,"val":214100},
{"ts":1234567840,"val":214032}
]}
}{"jsonrpc":"2.0","method":"logs/clear","id":12}{"jsonrpc":"2.0","id":12,"result":{"ok":true}}订阅
{"jsonrpc":"2.0","method":"resources/subscribe","id":13,"params":{"uri":"sensor://i2c/bme280_0x76"}}订阅后,服务器会主动推送 notifications/resources/updated 每次值更改时:
{"jsonrpc":"2.0","method":"notifications/resources/updated","params":{"uri":"sensor://i2c/bme280_0x76"}}TypeScript客户端示例
看 examples/client/client.ts 对于一个完整的打字客户端。
______________________________________________________________________
I2C传感器参考
| 传感器 | 地址 | 参数 | 单位 |
|---|---|---|---|
| BME280/BMP280 | 0x76、0x77 | temperature, pressure, humidity¹ | °C,Pa,%RH |
| 微处理器6050 | 0x68、0x69 | accel_x/y/z, gyro_x/y/z, temperature | g,°/s,°C |
| ADS1115 | 0x48–0x4B | ch0_V, ch1_V, ch2_V, ch3_V | V(±4.096范围) |
| SHT31 | 0x44、0x45 | temperature, humidity | °C,相对湿度% |
| BH1750 | 0x23,0x5C | light_lux | 勒克斯 |
| 中国219 | 0x40-0x4F | bus_voltage_V, shunt_mV, current_mA, power_mW | V、mV、mA、mW |
¹ humidity BMP280上没有。
______________________________________________________________________
NMEA 0183支持的句子
| 句子 | 描述 | 字段已解码 |
|---|---|---|
| GGA | GPS定位数据 | 时间、纬度、经度、定位质量、卫星、HDOP、高度、大地水准面分离 |
| RMC | 推荐最小导航 | 时间、活动、纬度、经度、速度(kn和km/h)、航向、磁变化 |
| VTG | 轨道修复/地面速度 | 航向(真实和磁性),速度(kn和km/h) |
| GSV | 视野中的卫星 | 每颗卫星的PRN、仰角、方位角、信噪比 |
| 最大工作电压 | 风速和角度 | 角度,相对/真实,速度,单位(K/M/N) |
| 数据库 | 传感器下方深度 | 深度(英尺/米/英寻) |
| DPT | 水深 | 深度(米) |
| HDG | 航向-偏差和变化 | 航向、偏差、变化(E/W) |
| 高清电视 | 航向–真 | 航向(正北) |
解析功能:XOR校验和验证、DDMM。MMMM → 符号十进制度数HHMMSS。SS时间,说话者ID提取,优雅的空白字段处理。
______________________________________________________________________
支持NMEA 2000 PGN
| PGN | 名称 | 关键字段 |
|---|---|---|
| 127250 | 船舶航向 | heading, variation |
| 127257 | 态度 | pitch, roll, yaw |
| 128259 | 水中速度 | speedKnots |
| 128267 | 水深 | depthMetres, offset |
| 129025 | 职位快速更新 | latitude, longitude |
| 129026 | COG&SOG | courseOverGround, speedOverGround |
| 130306 | 风力数据 | speedKnots, angle,明显/真实标志 |
| 130310 | 水温 | tempCelsius |
______________________________________________________________________
支持OBD-II PID(服务01)
已解码的选定PID;完整列表在 src/CANParser.cpp:
| 类别 | PID |
|---|---|
| 发动机 | RPM、负载、冷却液温度、进气温度、MAP、MAF、正时提前 |
| 燃料 | 燃油压力、微调(短/长)、油轨压力、喷射正时、燃油率 |
| 排放 | 氧传感器电压、EGR、蒸发系统、DPF压力 |
| 运动 | 车速、油门位置、油门踏板位置 |
| 温度 | 机油温度、进气温度、EGR温度、发动机排气温度(EGT) |
| 电的 | 控制模块电压、蓄电池电压 |
| 混合 | 混合动力电池剩余寿命 |
| 扭矩 | 驾驶员需求、实际扭矩、参考扭矩 |
| 车辆信息 | VIN、校准ID(维修09) |
______________________________________________________________________
发现
在网络连接上,服务器注册了两个mDNS服务,并定期发送UDP能力信标:
| 发现 | 详细信息 |
|---|---|
| 多播DNS | _mcp._tcp 和 _http._tcp 具有TXT记录:版本、功能、检测到的传感器 |
| UDP广播 | JSON信标 255.255.255.255:5354 每30秒(可配置);包括传感器清单 |
mDNS和UDP在网络连接、I2C扫描完成、MCP服务器就绪和总线历史配置更改时自动触发。
______________________________________________________________________
测试
测试在Linux上本机编译和运行——不需要硬件。
# All tests
pio test -e native
# Specific suites
pio test -e native -f test_nmea_parser
pio test -e native -f test_can_parser
pio test -e native -f test_i2c_sensors
pio test -e native -f test_bus_reader
pio test -e native -f test_mcp_server
pio test -e native -f test_metrics_system
# With coverage (requires lcov)
pio test -e native --coverage| 套房 | 保险范围 |
|---|---|
test_nmea_parser | GGA、RMC、VTG、GSV、MWV、DBT、DPT、HDG、HDT、校验和验证 |
test_can_parser | OBD-II PID,NMEA 2000 PGN 127250/122757/128259/128267/129025/129026/130306/130310 |
test_i2c_sensors | 通过模拟I2C连接BME280、MPU6050、ADS1115、SHT31、BH1750、INA219 |
test_bus_reader | 定时读取、原始/解析模式、超时处理 |
test_mcp_server | JSON-RPC调度、资源管理、方法注册 |
test_metrics_system | 计数器、仪表、直方图、LittleFS持久性 |
______________________________________________________________________
使用自定义MCP方法进行扩展
在运行时注册其他JSON-RPC处理程序:
mcpServer.registerMethodHandler("myns/doSomething",
[](uint8_t clientId, uint32_t reqId, const JsonObject& params) {
StaticJsonDocument doc;
doc["result"]["ok"] = true;
std::string out;
serializeJson(doc, out);
return out;
});
// Remove when no longer needed
mcpServer.unregisterMethodHandler("myns/doSomething");______________________________________________________________________
贡献
- 分叉存储库
- 创建要素分支:
git checkout -b feature/my-feature - 添加新功能的测试(
pio test -e native必须通过) - 打开拉取请求
看 贡献.md 关于编码风格和指导原则。
______________________________________________________________________
许可证
麻省理工学院——见 许可证.
