mcpField
E
Eclipse Ditto

Eclipse Ditto

本地服务
github.com/nagarjunr云与基础设施06 天前更新

关于 Eclipse Ditto

Eclipse Ditto MCP 服务将数字孪生框架的 HTTP API 封装为工具,供管理设备、策略、连接和集群的用户使用。它覆盖 Ditto HTTP API 的主要功能,并可用于基于 Ditto 协议的部署。

主要功能

  1. 01搜索和管理数字孪生
  2. 02读写属性与功能状态
  3. 03发送实时消息并领取设备
  4. 04管理策略与连接配置
  5. 05查看变更事件及集群状态

适用场景

  1. 01批量查询或更新设备孪生
  2. 02调整设备策略和访问权限
  3. 03检查连接状态并收集变更事件

MCP 相关

它将 Eclipse Ditto 的 HTTP API 功能作为 MCP 工具提供给客户端,涵盖孪生、策略、消息、连接、运维管理和变更事件。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nagarjunr-eclipse-ditto": {
"command": "uvx",
"args": [
"eclipse-ditto-mcp-server"
],
"env": {
"DITTO_BASE_URL": "<DITTO_BASE_URL>",
"DITTO_USERNAME": "<DITTO_USERNAME>",
"DITTO_PASSWORD": "<DITTO_PASSWORD>",
"DITTO_BEARER_TOKEN": "<DITTO_BEARER_TOKEN>",
"DITTO_DEVOPS_USERNAME": "<DITTO_DEVOPS_USERNAME>",
"DITTO_DEVOPS_PASSWORD": "<DITTO_DEVOPS_PASSWORD>"
}
}
}
}
启动命令uvx eclipse-ditto-mcp-server
需要配置的环境变量
DITTO_BASE_URLBase URL of the Ditto HTTP API, e.g. http://localhost:8080
DITTO_USERNAMEBasic auth username for the Things/Policies/Messages/Search API
DITTO_PASSWORD密钥Basic auth password for the Things/Policies/Messages/Search API
DITTO_BEARER_TOKEN密钥Bearer token, used instead of Basic auth for the same API
DITTO_DEVOPS_USERNAMEBasic auth username for the separate DevOps/Connections realm
DITTO_DEVOPS_PASSWORD密钥Basic auth password for the separate DevOps/Connections realm

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypieclipse-ditto-mcp-server0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Eclipse Ditto MCP 服务

一个适用于 Eclipse Ditto 的 Model Context Protocol(MCP)服务。Eclipse Ditto 是一个开源(EPL-2.0)数字孪生框架。它将 Ditto 的 HTTP API 暴露为 MCP 工具,使 AI Agent 能够管理设备(“things”)及其属性/功能、策略、连接和集群管理功能,涵盖 Ditto HTTP API 的完整范围。

由于 Bosch IoT Things 和其他商业 IoT 平台基于 Ditto 的开放协议构建,此服务也适用于这些部署——代码中没有任何针对特定供应商的内容。

使用 FastMCP 构建。

工具

Things
工具描述
list_things(namespaces, filter, fields, limit)搜索/列出 things。filter 是 Ditto RQL 表达式,例如 eq(attributes/location,"lab-1")。
count_things(namespaces, filter)统计符合筛选条件的 things 数量,不获取其内容。
get_things(thing_ids, fields)在一次请求中按 ID 批量获取多个 things。
get_thing(thing_id, fields)获取单个 thing 的完整数字孪生。
put_thing(thing_id, thing, overwrite=False)创建 thing,或在 overwrite=True 时替换现有 thing。
patch_thing(thing_id, patch)通过 RFC-7396 JSON Merge Patch 部分更新 thing。
delete_thing(thing_id, confirm=False)删除 thing。不可撤销。
get_thing_policy_id / set_thing_policy_id读取或更改控制某个 thing 的策略。
get_thing_definition / set_thing_definition / delete_thing_definition管理 thing 的 WoT/模型定义。
whoami()返回 Ditto 验证此连接器身份时使用的身份信息——可用于检查凭据是否正常。
属性与功能
工具描述
get_thing_attributes(thing_id, path=None)获取所有属性,或通过 JSON 指针路径获取单个属性。
set_thing_attributes(thing_id, value, path=None, overwrite=False)设置整个属性对象,或设置单个属性。
delete_thing_attributes(thing_id, path=None, confirm=False)删除属性(整个对象或指定路径)。
get_thing_features(thing_id)获取所有功能(传感器/执行器状态)。
get_feature / put_feature / delete_feature读取/创建并替换/删除整个功能。
get_feature_properties / set_feature_properties / delete_feature_properties读取/写入/删除功能属性或 desiredProperties,可操作全部内容或指定路径。
get_feature_definition / set_feature_definition / delete_feature_definition管理功能定义。
消息
工具描述
send_message(thing_id, subject, payload, feature_id=None, direction="inbox", timeout=10)向 thing 或功能发送实时消息,或从中接收消息(例如调用设备操作)。
claim_thing(thing_id, payload=None, timeout=10)发送认领消息,以获取对 thing 的访问权限。
策略
工具描述
get_policy / put_policy / delete_policy读取/创建并替换/删除策略。
get_policy_entries(policy_id, label=None)读取所有条目,或按标签读取单个条目。
set_policy_entry / delete_policy_entry创建并替换/删除单个策略条目。
连接与 DevOps (需要 DITTO_DEVOPS_USERNAME/DITTO_DEVOPS_PASSWORD)

Ditto 的 Connections API 和 DevOps API(日志级别、集群配置、附带命令)位于网关上独立的“devops” Basic Auth 领域中,与用于事物/策略的基于策略的身份验证相互独立。

工具描述
list_connections / get_connection列出/获取连接配置。
create_connection(connection, dry_run=False)创建连接(ID 由 Ditto 生成)。
update_connection(connection_id, connection)更新现有连接(如果不存在则返回 404)。
delete_connection(connection_id, confirm=False)删除连接。
get_connection_status / get_connection_metrics / get_connection_logs检查连接的实时状态。
send_connection_command(connection_id, command)打开/关闭/重置指标/启用日志/重置日志。
get_logging_config / set_logging_config读取/设置集群日志级别。
get_devops_config(path)读取集群范围的运行时配置。
send_devops_piggyback(command, service_name=None, instance_index=None)底层管理命令——Ditto 功能最强、限制最少的 API。请谨慎使用。
实时事件
工具描述
poll_thing_changes(thing_ids, namespaces, filter, fields, duration_seconds=10, max_events=50)打开短时的 SSE 连接并收集实时事物变更事件。这是对 Ditto 持久化变更流的请求/响应式近似实现——请参阅下方的注意事项。

安全约定

  • **创建与替换:**每个 put_*/set_*/create_* 工具默认使用 overwrite=False,并使用 Ditto 的 If-None-Match: * 标头实现无竞争的仅创建操作(而非先检查再设置)。传入 overwrite=True 可替换现有数据。
  • **删除需要确认:**每个 delete_* 工具都要求 confirm=True。不支持批量删除或级联删除。
  • **未涵盖的内容(有意为之):**WoT Web-of-Things 描述符端点(/.well-known/wot、/devops/wot/*)以及细粒度策略子资源(subjects/{id}、resources/{path}、imports、令牌集成操作)——set_policy_entry/get_policy_entries 可涵盖常见用例。如有需要,可稍后添加这些功能。

配置

环境变量必填描述
DITTO_BASE_URL是Ditto HTTP API 的基础 URL,例如 http://localhost:8080 或网关的公共 URL。
DITTO_USERNAME / DITTO_PASSWORD否Things/Policies/Messages/Search API 的 Basic Auth 凭据。通常用于可自托管的 Ditto(nginx 演示配置使用 ditto/ditto)。
DITTO_BEARER_TOKEN否Bearer 令牌,用于替代同一 API 的 Basic Auth。通常用于由 OAuth2 提供前置身份验证的部署(例如 Bosch IoT Things)。
DITTO_DEVOPS_USERNAME / DITTO_DEVOPS_PASSWORD否独立 DevOps/Connections 领域的 Basic Auth 凭据(可自托管实例的默认值:devops/foobar)。仅 Connectivity 和 DevOps 工具需要。

如果同时设置了 DITTO_BEARER_TOKEN 和 Basic Auth 凭据,则优先使用 Bearer 令牌。如果两者都未设置,请求将以未身份验证的方式发送(仅当 Ditto 实例允许匿名访问/预先完成身份验证的访问时才有效)。

本地运行

uv sync
export DITTO_BASE_URL=http://localhost:8080
export DITTO_USERNAME=ditto
export DITTO_PASSWORD=ditto
export DITTO_DEVOPS_USERNAME=devops    # only needed for connectivity/devops tools
export DITTO_DEVOPS_PASSWORD=foobar
uv run dittomcpserver.py

请参阅 mcp.json 获取可直接使用的客户端配置(stdio 和 Docker)。

针对真实 Ditto 实例进行测试

本仓库的设计原则要求针对真实实例进行测试,而不是使用模拟对象。docker-compose.yml(基于 Ditto 官方示例改编,并精简为此连接器所需的服务)会启动完整的本地 Ditto 堆栈,包括 MongoDB、Ditto 微服务,以及带有 Basic auth 的 nginx 入口。

docker compose up -d       # start Ditto on http://localhost:8080 (user: ditto / pass: ditto; devops: devops / foobar)
uv run pytest -v           # tests/conftest.py also starts/stops the stack automatically
docker compose down        # stop it manually if you started it yourself

这 47 项测试针对真实堆栈覆盖了所有工具组(事物、属性/功能、消息、策略、连接、运维、实时事件),其中包括删除/确认门控和创建/覆盖门控。

关于实时事件近似实现的说明

poll_thing_changes 会在有界时间窗口内打开 Ditto 的 SSE 变更流,而不是维持持久订阅(这种方式无法很好地映射到单次 MCP 工具调用)。即使没有任何变更,Ditto 的 SSE 流也会定期发送空的 data: 保活行——该工具会在收到的每一行(包括保活行)上检查截止时间,因此无论流有多活跃或多安静,都能确保在 duration_seconds 内返回。

许可证说明

docker-compose.yml 和 docker/ 下的文件基于 Eclipse Ditto 项目(EPL-2.0)改编,仅用于启动本地测试实例;它们并非 MCP 服务本身的一部分。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。