Spectrum MCP Server - AS7341 sensor data via MQTT
Project description
Spectrum MCP Server — 使用与服务配置
本仓库包含一个将 ESP32 上 AS7341 光谱传感器数据通过 MQTT 收集并暴露为 MCP 资源的服务。该 README 重点说明如何在本地与平台上运行此服务,以及平台所需的启动配置说明。
快速安装(从 PyPI)
使用 pip 安装
pip install mcpserver-spectrum
使用 uvx 运行(推荐)
uvx mcpserver-spectrum
配置环境变量
运行前请配置 MQTT 连接信息:
export MQTT_BROKER=your-mqtt-broker
export MQTT_PORT=8883
export MQTT_TOPIC=your-topic
export MQTT_USER=your-user
export MQTT_PASSWORD=your-password
uvx mcpserver-spectrum
核心文件
server.py— FastMCP 服务实现,订阅 MQTT 主题并暴露资源spectrum://latest与工具get_channel()。mcp-config.json— 平台启动配置(请务必包含在仓库根目录,平台据此知道如何安装并启动服务)。
快速开始(开发机器)
- 创建并激活虚拟环境(可选但推荐):
python -m venv .venv
.\.venv\Scripts\Activate.ps1
- 安装依赖:
python -m pip install --upgrade pip
pip install -e .
# 或: pip install -r requirements.txt
- 运行 MCP 服务器(开发):
python server.py
可选参数:--no-mqtt(不启动 MQTT 客户端,便于在无设备/无 Broker 场景测试)。
服务接口
- 资源
spectrum://latest— 返回最近一次接收到的光谱 JSON(字典,通常包含channel1..channel11)。 - 工具
get_channel(name)— 返回指定通道的整数值。
检查与调试
- HTTP 健康/数据检查:
/api/latest返回当前latest_spectrum的 JSON 副本。 - 我们在响应中加入了诊断头
X-Served-By: mcpserver,平台请求返回该头则表示请求命中了本服务。 - 使用 curl 验证(检查 Content-Type 与自定义头):
curl -I 'http://YOUR_HOST:8000/api/latest' -H 'Accept: application/json'
平台说明(重要)
平台不会自动猜测如何运行你的代码:请确保仓库根目录包含 mcp-config.json(或平台指定的等价文件),其中必须明确:
- 安装依赖命令(如
pip install -r requirements.txt或pip install -e .) - 启动命令与参数(例如
python server.py,以及可选--no-mqtt) - 运行时环境变量(如
HTTP_BIND/HTTP_PORT/MCP_TRANSPORT) - 服务监听端口与协议(例如 HTTP port 8000,health-check 路径
/api/latest)
仓库中已加入示例配置文件:mcp-config.json。平台应读取该文件并据此安装依赖、启动服务并进行健康检查。
部署建议
- 临时公开测试:使用
ngrok暴露本地端口:
ngrok http 8000
# 将 ngrok 返回的 https://xxxxx.ngrok.io 指定为平台的服务 URL(/api/latest)
- 生产/稳定:部署到 VPS、Render、Railway、Fly 或 Heroku,并将平台指向部署后的 HTTPS URL(确保 /api/latest 可访问)。
容器化部署
使用 Docker 构建并运行
- 构建 Docker 镜像:
docker build -t mcpserver-spectrum .
- 运行 Docker 容器:
docker run -d \
-p 8000:8000 \
-e MQTT_BROKER=your-mqtt-broker \
-e MQTT_PORT=8883 \
-e MQTT_TOPIC=your-topic \
-e MQTT_USER=your-user \
-e MQTT_PASSWORD=your-password \
mcpserver-spectrum
使用 Docker Compose
- 复制环境变量示例文件:
cp .env.example .env
-
编辑
.env文件,配置你的 MQTT 连接信息 -
启动服务:
docker-compose up -d
- 查看日志:
docker-compose logs -f
- 停止服务:
docker-compose down
环境变量说明
MQTT_BROKER: MQTT 代理地址MQTT_PORT: MQTT 端口(默认 8883)MQTT_TOPIC: MQTT 主题MQTT_USER: MQTT 用户名MQTT_PASSWORD: MQTT 密码HTTP_BIND: HTTP 绑定地址(默认 0.0.0.0)HTTP_PORT: HTTP 端口(默认 8000)MCP_TRANSPORT: MCP 传输方式(默认 sse)
常见问题
- 我把仓库放到 GitHub,平台却拿到 HTML:如果平台的 URL 指向
https://github.com/...(仓库页面),它会返回 HTML 页面而非运行中的 API。平台需要指向正在运行的服务地址(或 raw.githubusercontent.net 的静态文件 URL)。 - 平台请求时显示 HTML 登录页(例如 GitHub):说明平台没有启动服务或 URL 指向了静态仓库页面。
后续可选操作
- 我可以帮你生成
requirements.txt(从pyproject.toml提取依赖)并提交到仓库; - 我也可以添加一个小的 systemd/Procfile 或 GitHub Actions 示例以便自动部署到云平台;
- 如果你想快速测试,我可以给出
ngrok的完整步骤并协助启动。
发布到 PyPI
详细的 PyPI 发布指南请参考 PUBLISH.md。
文件引用:启动配置位于仓库根目录的 mcp-config.json(请在平台上确认该文件被识别)。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcpserver_spectrum-0.1.1.tar.gz.
File metadata
- Download URL: mcpserver_spectrum-0.1.1.tar.gz
- Upload date:
- Size: 47.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e099152d447ba43e24923e2d7b679d815ca2ec03e4654136eb905b6b56ce4ce
|
|
| MD5 |
3587380dedddb34b189a96affb21a595
|
|
| BLAKE2b-256 |
8f1b4fd3cb91e58c5beba19aa2f1f514c0e9a3478efd6dc54a87939dc2ca2b41
|
File details
Details for the file mcpserver_spectrum-0.1.1-py3-none-any.whl.
File metadata
- Download URL: mcpserver_spectrum-0.1.1-py3-none-any.whl
- Upload date:
- Size: 56.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5951a8a6b7eaf1c5440ad8da390224a1c2663c58761ec2d4193fc675cf234c1
|
|
| MD5 |
8434fea7800e1b3948b62994ea3199a9
|
|
| BLAKE2b-256 |
7deb82b243b934c74b801fce6c6398bdc348954ccf22082352cf93911e18769d
|