关于 Senlay Physical Context
Senlay Physical Context 为需要在现实环境中行动的系统提供带来源信息的物理环境证据和可操作性检查。它通过开放协议、JavaScript SDK 和边缘网关入门项目连接独立运营的传感器,并明确标注不可用输入。
主要功能
- 01查询地点物理环境信息
- 02检查特定活动的可操作性
- 03列出支持的领域
- 04保留证据来源信息
- 05明确报告不可用输入
适用场景
- 01为户外活动检查地点条件
- 02在 Agent 采取行动前评估可操作性
- 03区分直接观测与历史背景
MCP 相关
公开的无状态 Streamable HTTP MCP 服务提供 sense_location、check_operability 和 list_domains 三个工具,并保留证据来源、报告缺失输入。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://senlay.cloud/mcpclaude mcp add --transport http smartsurfsolar-senlay https://senlay.cloud/mcp{"mcpServers":{"smartsurfsolar-senlay":{"type":"http","url":"https://senlay.cloud/mcp"}}}在 Cursor 中打开{"servers":{"smartsurfsolar-senlay":{"type":"http","url":"https://senlay.cloud/mcp"}}}在 VS Code 中打开{"mcpServers":{"smartsurfsolar-senlay":{"type":"http","url":"https://senlay.cloud/mcp"}}}{"mcpServers":{"smartsurfsolar-senlay":{"serverUrl":"https://senlay.cloud/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
4| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| lat | number | 是 | 纬度,范围为 -90 至 90。 |
| lng | number | 是 | 经度,范围为 -180 至 180。 |
| time | string | 否 | 可选的 ISO 8601 时间。本版本仅支持当前状况(距现在 10 分钟以内)。 |
| domain | enum | 否 | 运行领域;默认为 general。general | kitesurfing | surfing | sailing | drone | paragliding | hiking | agriculture | construction | running |
详细介绍
Senlay — 为在外部采取行动的系统提供经过验证的物理环境信息
这是 Senlay Open Network:一套开放协议、JavaScript SDK 和边缘网关入门项目,用于将独立运营的传感器连接到经过验证的物理环境信息。
通过 MCP 连接 AI Agent — 无需安装
将公开的无状态 Streamable HTTP 端点添加到支持 MCP 的客户端。匿名试用无需注册或 OAuth:
{
"mcpServers": {
"senlay": {
"url": "https://senlay.cloud/mcp"
}
}
}
MCP 2026-07-28 服务仅提供 sense_location、check_operability 和 list_domains。它会保留 Senlay 证据的来源信息,并明确报告不可用的输入,而不是捏造数值。要使用账户套餐,请在服务标头中添加 Authorization: Bearer sl_live_...。可运行性结果仅用于辅助决策;最终决定权仍在于人类。
官方 MCP Registry 元数据见 server.json。版本 1.0.0 在实时端点和架构验证通过后,以 io.github.smartsurfsolar/senlay 发布。
此处开放的内容
- 与供应商无关的观测信封和 JSON Schema
- 确定性验证与规范化
- 用于供应商到网关传输的 HMAC 请求签名
- 适用于任何兼容数据摄取端点的 JavaScript 客户端
- 在转发前进行验证的小型边缘网关
- 适配器示例和自动化测试
生产级聚合引擎、全球注册表、身份验证、计费、供应商凭据、历史地点记忆语料库、风险模型和商业连接器仍保留在私有的 senlay-platform-core 仓库中。
公开网站的源代码在 senlay-world 中单独维护;其规范域名为 senlay.cloud。有关公开与私有仓库的划分以及分支策略,请参阅仓库边界。
状态
这是首个 0.x 协议版本。经过身份验证的 Senlay 账户可在 senlay.cloud 自助注册站点并提交签名观测数据。服务仅保留每个站点密钥不可恢复的哈希;请在收到密钥时保存。
网络尚处于发展初期:不保证覆盖范围,也不提供 SLA。该服务尚未宣称全面可用。
将站点接入实时网络
首先在 senlay.cloud/register.html 创建普通账户,然后在仪表板中创建 API 密钥,并在密钥显示时保存。已存储的密钥无法找回;如果密钥丢失,请创建替代密钥。使用账户密钥管理供应商和站点;仅使用站点密钥为观测数据签名。
# Create a provider with your account API key.
curl -sS -X POST https://senlay.cloud/api/v1/providers/register \
-H "Authorization: Bearer $API_KEY" -H 'content-type: application/json' \
--data '{"name":"My community network","slug":"my-community-network"}'
# Substitute the returned prv_... ID. Save the returned station secret now.
curl -sS -X POST https://senlay.cloud/api/v1/stations/register \
-H "Authorization: Bearer $API_KEY" -H 'content-type: application/json' \
--data '{"providerId":"prv_REPLACE_ME","name":"Beach wind station","sensorType":"weather_station","location":{"lat":15.8801,"lng":108.3380}}'
发布实时数据之前,请使用仪表板中的 Send signed test 操作,在不存储虚假观测数据的情况下验证站点密钥和负载格式。然后使用返回的 stationId 以及网络协议中所述的 X-Senlay-* 签名标头,向 https://senlay.cloud/api/v1/observations 发布数据。
附近已接收的观测数据会在后续经过身份验证的 /api/v1/sense 和 /api/v1/pwm 响应中显示,并明确标记为直接站点证据。经过核验的站点测量数据也会用于建立同一地点和季节的 Senlay 本地记忆基线;这些基线属于历史背景信息,并非当前证据。
五分钟 Python 站点
Python 连接器仅使用标准库,因此 Raspberry Pi 或普通计算机无需安装任何软件包。复制仪表板返回的 stationId 和一次性站点密钥,然后在本地预览模拟观测:
git clone https://github.com/smartsurfsolar/senlay-platform.git
cd senlay-platform
export SENLAY_STATION_ID='stn_REPLACE_ME'
export SENLAY_STATION_SECRET='sl_station_REPLACE_ME'
python3 python/simulator.py --seed 1
预览模式不会联系 Senlay。若要验证签名和载荷而不存储读数,请添加账户 API 密钥并使用调试端点:
export SENLAY_ACCOUNT_API_KEY='sl_live_REPLACE_ME'
python3 python/simulator.py --dry-run --seed 1
若要使用生成的数据测试实时采集,请使用 --publish。模拟器读数始终标记为 estimated,携带 simulated: true,且绝不会纳入已核验读数的位置记忆基线。
python3 python/simulator.py --publish --count 3 --interval 10 --seed 1
对于真实风速传感器,请将其读数传递给发布器。默认质量为 raw;只有在适配器和传感器校准足以支持该声明时,才使用 --quality checked。
python3 python/publish_reading.py \
--lat 15.8801 --lng 108.3380 \
--wind-speed 7.4 --wind-direction 62
从 python/senlay_client.py 导入 SenlayClient 和 observation,即可直接连接另一个传感器进程。
试用实时 API——无需安装
CREDS="$(curl -sS -X POST https://senlay.cloud/api/v1/agent-register -H 'content-type: application/json' --data '{"ownerEmail":"[email protected]","agentName":"my-first-agent"}')"; printf '%s\n' "$CREDS"
API_KEY="$(printf '%s' "$CREDS" | sed -n 's/.*"apiKey":"\([^"]*\)".*/\1/p')"
curl -sS -H "Authorization: Bearer $API_KEY" "https://senlay.cloud/api/v1/sense?lat=15.8801&lng=108.3380&field=kitesurfing"
保存第一条命令显示的 apiKey 和 recoveryToken;二者都只会返回一次。将 [email protected] 和 my-first-agent 替换为你自己的身份信息。
本地 SDK 和网关
npm install
npm test
cp .env.example .env
npm run gateway
将示例观测发送到本地网关:
npm run example
网关会在本地验证观测。设置 SENLAY_INGEST_URL,即可将其转发到经过授权的兼容采集端点。
MQTT 桥接器(可选)
对于会向 MQTT 代理发布 JSON 观测的硬件,请在 .env 中配置 MQTT 变量并运行:
npm run mqtt-bridge
桥接器会订阅 SENLAY_MQTT_TOPIC,通过 SDK 验证每条消息,使用站点密钥签名,并将其转发到 HTTPS 采集端点。每个站点使用一个桥接器凭据;不要在多台设备间共享站点密钥。
分支
main:稳定的公开发行版develop:活跃的公开开发分支
更改从功能分支进入 develop,经过审核和测试后再进入 main。请参阅 CONTRIBUTING.md。
最简 SDK 示例
import { SenlayClient } from '@senlay/open-network';
const client = new SenlayClient({
endpoint: 'https://senlay.cloud/api/v1/observations',
providerId: 'prv_REPLACE_ME',
signingSecret: process.env.SENLAY_STATION_SECRET
});
await client.publish({
stationId: 'stn_REPLACE_ME',
observedAt: new Date().toISOString(),
location: { lat: 15.8801, lon: 108.3380 },
measurements: [{ phenomenon: 'wind.speed', value: 7.4, unit: 'm/s' }]
});
许可证
Apache-2.0。欢迎在同一许可证下贡献代码。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。