Ditto HTTP APIを介して、モノ、属性、ポリシー、接続、およびクラスター管理を含むデジタルツインをAIエージェントが管理できるようにします。
別名 nagarjunr/iot-mcp-servers, eclipse-ditto, eclipse-ditto-mcp-server
- スター
- 0
- ツール
- —
- ダウンロード数(30日間)
- 85
- 最新バージョン
- 0.1.1
- 最終コミット
- 2026年10月31日
- ライセンス
- MIT
Eclipse Ditto MCPとは
Eclipse DittoはMCPサーバーです。 Ditto HTTP APIを介して、モノ、属性、ポリシー、接続、およびクラスター管理を含むデジタルツインをAIエージェントが管理できるようにします。.
プロジェクトのREADMEから生成された概要
Eclipse Ditto MCP server について
このEclipse Ditto MCP serverを使用すると、AIエージェントを通じてデジタルツインとIoTデバイスの状態を管理できます。Eclipse Ditto HTTP APIへのブリッジを提供し、モノ、属性、機能、およびポリシーとのインタラクションを可能にします。このサーバーは、Bosch IoT Thingsのような商用プラットフォームを含む、オープンプロトコルに従うあらゆるデプロイメントで動作するように設計されています。
開発者は、DITTO_BASE_URLなどの環境変数を設定することで、このサーバーをローカルまたはリモートゲートウェイに対して使用できます。認証は、Basic認証の資格情報またはベアラートークンを介して行われます。接続やクラスター構成を含む高度な管理タスクには、別途DevOps用の資格情報が必要です。ツールセットには、RQL式を使用したモノの検索、デバイスへのライブメッセージの送信、接続メトリクスの管理を行うための特定のコマンドが含まれています。
安全性については、すべての削除操作に対する確認ゲートや、競合のない作成ロジックを通じてツール設計に組み込まれています。また、指定された期間の変更をポーリングすることで、ライブイベントストリームを近似する方法も提供しています。これにより、日常的なデバイス管理と低レベルのDevOps管理の両方に対応する汎用性の高いインターフェースとなっています。
できること
- 1デバイスのセンサーデータの更新AIに対して、デジタルツインの特定のプロパティや機能を変更するよう指示できます。
- 2リモートデバイス操作の実行エージェントがモノや機能に対してライブメッセージを送信し、特定の操作を呼び出すことができます。
プロジェクトの README から作成されています。すべてのユースケースは、その引用と照らし合わせて確認されています。
Eclipse Ditto MCPのインストール方法
フォーマット検証日 2026年11月10日Cursor に追加Gooseに追加Claude CodeにEclipse Ditto MCPをインストール
$ claude mcp add --env 'DITTO_BASE_URL=<DITTO_BASE_URL>' --env 'DITTO_BEARER_TOKEN=<YOUR_DITTO_BEARER_TOKEN>' --env 'DITTO_DEVOPS_PASSWORD=<YOUR_DITTO_DEVOPS_PASSWORD>' --env 'DITTO_PASSWORD=<YOUR_DITTO_PASSWORD>' eclipse-ditto -- uvx eclipse-ditto-mcp-serverCursorにEclipse Ditto MCPをインストール
~/.cursor/mcp.json
{
"mcpServers": {
"eclipse-ditto": {
"command": "uvx",
"args": [
"eclipse-ditto-mcp-server"
],
"env": {
"DITTO_BASE_URL": "<DITTO_BASE_URL>",
"DITTO_BEARER_TOKEN": "<YOUR_DITTO_BEARER_TOKEN>",
"DITTO_DEVOPS_PASSWORD": "<YOUR_DITTO_DEVOPS_PASSWORD>",
"DITTO_PASSWORD": "<YOUR_DITTO_PASSWORD>"
}
}
}
}VS CodeにEclipse Ditto MCPをインストール
.vscode/mcp.json
{
"servers": {
"eclipse-ditto": {
"type": "stdio",
"command": "uvx",
"args": [
"eclipse-ditto-mcp-server"
],
"env": {
"DITTO_BASE_URL": "<DITTO_BASE_URL>",
"DITTO_BEARER_TOKEN": "<YOUR_DITTO_BEARER_TOKEN>",
"DITTO_DEVOPS_PASSWORD": "<YOUR_DITTO_DEVOPS_PASSWORD>",
"DITTO_PASSWORD": "<YOUR_DITTO_PASSWORD>"
}
}
}
}VS Code CLIにEclipse Ditto MCPをインストール
$ code --add-mcp '{"name":"eclipse-ditto","type":"stdio","command":"uvx","args":["eclipse-ditto-mcp-server"],"env":{"DITTO_BASE_URL":"<DITTO_BASE_URL>","DITTO_BEARER_TOKEN":"<YOUR_DITTO_BEARER_TOKEN>","DITTO_DEVOPS_PASSWORD":"<YOUR_DITTO_DEVOPS_PASSWORD>","DITTO_PASSWORD":"<YOUR_DITTO_PASSWORD>"}}'Claude DesktopにEclipse Ditto MCPをインストール
claude_desktop_config.json
{
"mcpServers": {
"eclipse-ditto": {
"command": "uvx",
"args": [
"eclipse-ditto-mcp-server"
],
"env": {
"DITTO_BASE_URL": "<DITTO_BASE_URL>",
"DITTO_BEARER_TOKEN": "<YOUR_DITTO_BEARER_TOKEN>",
"DITTO_DEVOPS_PASSWORD": "<YOUR_DITTO_DEVOPS_PASSWORD>",
"DITTO_PASSWORD": "<YOUR_DITTO_PASSWORD>"
}
}
}
}CodexにEclipse Ditto MCPをインストール
$ codex mcp add eclipse-ditto --env 'DITTO_BASE_URL=<DITTO_BASE_URL>' --env 'DITTO_BEARER_TOKEN=<YOUR_DITTO_BEARER_TOKEN>' --env 'DITTO_DEVOPS_PASSWORD=<YOUR_DITTO_DEVOPS_PASSWORD>' --env 'DITTO_PASSWORD=<YOUR_DITTO_PASSWORD>' -- uvx eclipse-ditto-mcp-serverCodex config.tomlにEclipse Ditto MCPをインストール
~/.codex/config.toml
[mcp_servers.eclipse-ditto] command = "uvx" args = ["eclipse-ditto-mcp-server"] [mcp_servers.eclipse-ditto.env] DITTO_BASE_URL = "<DITTO_BASE_URL>" DITTO_BEARER_TOKEN = "<YOUR_DITTO_BEARER_TOKEN>" DITTO_DEVOPS_PASSWORD = "<YOUR_DITTO_DEVOPS_PASSWORD>" DITTO_PASSWORD = "<YOUR_DITTO_PASSWORD>"
Gemini CLIにEclipse Ditto MCPをインストール
$ gemini mcp add -s user -e 'DITTO_BASE_URL=<DITTO_BASE_URL>' -e 'DITTO_BEARER_TOKEN=<YOUR_DITTO_BEARER_TOKEN>' -e 'DITTO_DEVOPS_PASSWORD=<YOUR_DITTO_DEVOPS_PASSWORD>' -e 'DITTO_PASSWORD=<YOUR_DITTO_PASSWORD>' eclipse-ditto uvx -- eclipse-ditto-mcp-serverGemini settings.jsonにEclipse Ditto MCPをインストール
~/.gemini/settings.json
{
"mcpServers": {
"eclipse-ditto": {
"command": "uvx",
"args": [
"eclipse-ditto-mcp-server"
],
"env": {
"DITTO_BASE_URL": "<DITTO_BASE_URL>",
"DITTO_BEARER_TOKEN": "<YOUR_DITTO_BEARER_TOKEN>",
"DITTO_DEVOPS_PASSWORD": "<YOUR_DITTO_DEVOPS_PASSWORD>",
"DITTO_PASSWORD": "<YOUR_DITTO_PASSWORD>"
}
}
}
}設定
DITTO_BASE_URL必須Base URL of the Ditto HTTP API, e.g. http://localhost:8080
DITTO_BEARER_TOKENシークレットBearer token, used instead of Basic auth for the same API
DITTO_DEVOPS_PASSWORDシークレットBasic auth password for the separate DevOps/Connections realm
DITTO_PASSWORDシークレットBasic auth password for the Things/Policies/Messages/Search API
DITTO_DEVOPS_USERNAMEBasic auth username for the separate DevOps/Connections realm
DITTO_USERNAMEBasic auth username for the Things/Policies/Messages/Search API
| 名前 | 説明 | 種類 |
|---|---|---|
| DITTO_BASE_URL | Base URL of the Ditto HTTP API, e.g. http://localhost:8080 | 必須 |
| DITTO_BEARER_TOKEN | Bearer token, used instead of Basic auth for the same API | シークレット |
| DITTO_DEVOPS_PASSWORD | Basic auth password for the separate DevOps/Connections realm | シークレット |
| DITTO_PASSWORD | Basic auth password for the Things/Policies/Messages/Search API | シークレット |
| DITTO_DEVOPS_USERNAME | Basic auth username for the separate DevOps/Connections realm | |
| DITTO_USERNAME | Basic auth username for the Things/Policies/Messages/Search API |
自動チェック
実行日 2026年11月13日完全なレポート →自動チェックに合格しました。これはセキュリティ監査ではありません。コードを読み、サーバーに必要最小限のアクセス権を与えてください。 チェックの仕組み
- ソースリポジトリがリンクされており、アクセス可能nagarjunr/iot-mcp-servers is public and reachablegithub.com/nagarjunr/iot-mcp-servers ↗合格
- パッケージがこのリポジトリをソースとして指定eclipse-ditto-mcp-server names nagarjunr/iot-mcp-servers as sourcepypi.org/project/eclipse-ditto-mcp-server/ ↗合格
- ビルドの来歴 (Sigstore 証明)No build attestation published for this release未チェック
- オープンソースライセンス (OSI)MITspdx.org/licenses/MIT.html ↗合格
- 過去1年以内にコミットまたはリリースありLast commit or release 2026-10-31github.com/nagarjunr/iot-mcp-servers ↗合格
- OpenSSF Scorecard未チェック
- パッケージ名が有名なパッケージに酷似していないNo popular package one edit away from eclipse-ditto-mcp-server合格
- パッケージおよびその依存関係に重大な勧告なし65 resolved dependencies checked; no critical advisoryosv.dev ↗合格
- モデルへの隠れた指示がない0 tool descriptions and the README read; no override phrases, credential paths or hidden characters合格
- 破壊的なツールがラベル付けされている未チェック
- リモートエンドポイントが MCP ハンドシェイクに応答未チェック
README
GitHubで見るEclipse Ditto MCP Server
A Model Context Protocol (MCP) server for Eclipse Ditto — the open-source (EPL-2.0) digital twin framework. It exposes Ditto's HTTP API as MCP tools so an AI agent can manage devices ("things"), their attributes/features, policies, connections, and cluster admin — the full Ditto HTTP API surface.
Since Bosch IoT Things and other commercial IoT platforms are built on Ditto's open protocol, this server also works against those deployments — nothing in the code is vendor-specific.
Built with FastMCP.
Tools
Things
| Tool | Description |
|---|---|
list_things(namespaces, filter, fields, limit) |
Search/list things. filter is a Ditto RQL expression, e.g. eq(attributes/location,"lab-1"). |
count_things(namespaces, filter) |
Count things matching a filter without fetching them. |
get_things(thing_ids, fields) |
Bulk-fetch multiple things by ID in one request. |
get_thing(thing_id, fields) |
Fetch the full digital twin for one thing. |
put_thing(thing_id, thing, overwrite=False) |
Create a thing, or replace one with overwrite=True. |
patch_thing(thing_id, patch) |
Partially update a thing via RFC-7396 JSON Merge Patch. |
delete_thing(thing_id, confirm=False) |
Delete a thing. Irreversible. |
get_thing_policy_id / set_thing_policy_id |
Read/repoint the policy controlling a thing. |
get_thing_definition / set_thing_definition / delete_thing_definition |
Manage a thing's WoT/model definition. |
whoami() |
Return the identity Ditto authenticated this connector as — useful to sanity-check credentials. |
Attributes & Features
| Tool | Description |
|---|---|
get_thing_attributes(thing_id, path=None) |
Get all attributes, or one by JSON pointer path. |
set_thing_attributes(thing_id, value, path=None, overwrite=False) |
Set the whole attributes object, or one attribute. |
delete_thing_attributes(thing_id, path=None, confirm=False) |
Delete attributes (whole object or one path). |
get_thing_features(thing_id) |
Get all features (sensor/actuator state). |
get_feature / put_feature / delete_feature |
Read/create-replace/delete one whole feature. |
get_feature_properties / set_feature_properties / delete_feature_properties |
Read/write/delete feature properties or desiredProperties, whole or by path. |
get_feature_definition / set_feature_definition / delete_feature_definition |
Manage a feature's definition. |
Messages
| Tool | Description |
|---|---|
send_message(thing_id, subject, payload, feature_id=None, direction="inbox", timeout=10) |
Send a live message to/from a thing or feature (e.g. invoke a device operation). |
claim_thing(thing_id, payload=None, timeout=10) |
Send a claim message to gain access to a thing. |
Policies
| Tool | Description |
|---|---|
get_policy / put_policy / delete_policy |
Read/create-replace/delete a policy. |
get_policy_entries(policy_id, label=None) |
Read all entries, or one by label. |
set_policy_entry / delete_policy_entry |
Create-replace/delete one policy entry. |
Connectivity & DevOps (require DITTO_DEVOPS_USERNAME/DITTO_DEVOPS_PASSWORD)
Ditto's Connections API and DevOps API (log levels, cluster config, piggyback commands) sit behind a separate "devops" Basic-auth realm on the gateway, independent of the policy-based auth used for things/policies.
| Tool | Description |
|---|---|
list_connections / get_connection |
List/fetch connection configs. |
create_connection(connection, dry_run=False) |
Create a connection (ID generated by Ditto). |
update_connection(connection_id, connection) |
Update an existing connection (404 if it doesn't exist). |
delete_connection(connection_id, confirm=False) |
Delete a connection. |
get_connection_status / get_connection_metrics / get_connection_logs |
Inspect a connection's live state. |
send_connection_command(connection_id, command) |
Open/close/reset-metrics/enable-logs/reset-logs. |
get_logging_config / set_logging_config |
Read/set cluster log levels. |
get_devops_config(path) |
Read cluster-wide runtime config. |
send_devops_piggyback(command, service_name=None, instance_index=None) |
Low-level admin command — Ditto's most powerful, least-guarded API. Use with care. |
Live events
| Tool | Description |
|---|---|
poll_thing_changes(thing_ids, namespaces, filter, fields, duration_seconds=10, max_events=50) |
Open a short-lived SSE connection and collect live thing-change events. A request/response approximation of Ditto's persistent change feed — see caveat below. |
Safety conventions
- Create vs. replace: every
put_*/set_*/create_*tool defaults tooverwrite=False, using Ditto'sIf-None-Match: *header so create-only is race-free (not a check-then-set). Passoverwrite=Trueto replace existing data. - Deletes are confirm-gated: every
delete_*tool requiresconfirm=True. There is no bulk/cascading delete. - Not covered (deliberately): WoT Web-of-Things descriptor endpoints (
/.well-known/wot,/devops/wot/*), and fine-grained policy sub-resources (subjects/{id},resources/{path},imports, token-integration actions) — whole-entryset_policy_entry/get_policy_entriescovers the common case. Add these later if you need them.
Configuration
| Env var | Required | Description |
|---|---|---|
DITTO_BASE_URL |
Yes | Base URL of the Ditto HTTP API, e.g. http://localhost:8080 or your gateway's public URL. |
DITTO_USERNAME / DITTO_PASSWORD |
No | Basic auth for the Things/Policies/Messages/Search API. Typical for self-hosted Ditto (nginx demo setup uses ditto/ditto). |
DITTO_BEARER_TOKEN |
No | Bearer token, used instead of Basic auth for the same API. Typical for OAuth2-fronted deployments (e.g. Bosch IoT Things). |
DITTO_DEVOPS_USERNAME / DITTO_DEVOPS_PASSWORD |
No | Basic auth for the separate DevOps/Connections realm (self-hosted default: devops/foobar). Required only for the Connectivity and DevOps tools. |
If both DITTO_BEARER_TOKEN and Basic auth credentials are set, the bearer token takes precedence. If neither is set, requests are sent unauthenticated (only works if your Ditto instance allows anonymous/pre-authenticated access).
Running locally
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
See mcp.json for ready-to-use client configs (stdio and Docker).
Testing against a real Ditto instance
This repo's design principles call for testing against a real instance rather than mocks. docker-compose.yml (adapted from Ditto's official example, trimmed to the services this connector needs) spins up a full local Ditto stack — MongoDB, the Ditto microservices, and an nginx front door with Basic auth.
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
The 47 tests cover every tool group (things, attributes/features, messages, policies, connectivity, devops, live events) against this real stack, including delete/confirm gating and create/overwrite gating.
A note on the live-events approximation
poll_thing_changes opens Ditto's SSE change feed for a bounded window instead of holding a persistent subscription (which doesn't map cleanly onto a single MCP tool call). Ditto's SSE stream sends periodic empty data: keepalive lines even when nothing has changed — the tool checks its deadline on every line received, including keepalives, so it reliably returns within duration_seconds regardless of how chatty or quiet the stream is.
License notes
docker-compose.yml and the files under docker/ are adapted from the Eclipse Ditto project (EPL-2.0) and are used here only to spin up a local test instance — they are not part of the MCP server itself.
Eclipse Ditto MCPのよくある質問
Eclipse Ditto MCPをClaude Codeに追加するには
ターミナルでclaude mcp add --env 'DITTO_BASE_URL=<DITTO_BASE_URL>' --env 'DITTO_BEARER_TOKEN=<YOUR_DITTO_BEARER_TOKEN>' --env 'DITTO_DEVOPS_PASSWORD=<YOUR_DITTO_DEVOPS_PASSWORD>' --env 'DITTO_PASSWORD=<YOUR_DITTO_PASSWORD>' eclipse-ditto -- uvx eclipse-ditto-mcp-serverを実行します。すべてのプロジェクトで利用するには--scope userを追加します。
Eclipse Ditto MCPをCursorに追加するには
~/.cursor/mcp.jsonを開き、上記のインストールセクションに示すCursor設定を使ってmcpServersの下にサーバーを追加します。
このサーバーはリアルタイムのイベント監視をサポートしていますか?
はい、短時間のSSE接続を使用して、モノの変更に関するライブイベントをポーリングできます。