Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Eclipse Ditto

by nagarjunrversion 0.1.1i★ –iRuns on your computer
Registry nameio.github.nagarjunr/eclipse-ditto

Install

Overview

Description from the maker (original English)

MCP server for the Eclipse Ditto digital twin HTTP API (things, policies, connections, more).

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Other
  • You need to fill in: DITTO_BASE_URL, DITTO_PASSWORD, DITTO_BEARER_TOKEN, DITTO_DEVOPS_PASSWORD

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • You fill in yourself: DITTO_BASE_URL, DITTO_USERNAME, DITTO_PASSWORD, DITTO_BEARER_TOKEN, DITTO_DEVOPS_USERNAME, DITTO_DEVOPS_PASSWORD

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

  • PyPIPython’s uv installed (for the uvx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "eclipse-ditto": {
      "command": "uvx",
      "args": [
        "eclipse-ditto-mcp-server"
      ],
      "env": {
        "DITTO_BASE_URL": "your-value",
        "DITTO_USERNAME": "your-value",
        "DITTO_PASSWORD": "your-value",
        "DITTO_BEARER_TOKEN": "your-value",
        "DITTO_DEVOPS_USERNAME": "your-value",
        "DITTO_DEVOPS_PASSWORD": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add eclipse-ditto --env DITTO_BASE_URL=your-value --env DITTO_USERNAME=your-value --env DITTO_PASSWORD=your-value --env DITTO_BEARER_TOKEN=your-value --env DITTO_DEVOPS_USERNAME=your-value --env DITTO_DEVOPS_PASSWORD=your-value -- uvx eclipse-ditto-mcp-server

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "eclipse-ditto": {
      "command": "uvx",
      "args": [
        "eclipse-ditto-mcp-server"
      ],
      "env": {
        "DITTO_BASE_URL": "your-value",
        "DITTO_USERNAME": "your-value",
        "DITTO_PASSWORD": "your-value",
        "DITTO_BEARER_TOKEN": "your-value",
        "DITTO_DEVOPS_USERNAME": "your-value",
        "DITTO_DEVOPS_PASSWORD": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "eclipse-ditto": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "eclipse-ditto-mcp-server"
      ],
      "env": {
        "DITTO_BASE_URL": "your-value",
        "DITTO_USERNAME": "your-value",
        "DITTO_PASSWORD": "your-value",
        "DITTO_BEARER_TOKEN": "your-value",
        "DITTO_DEVOPS_USERNAME": "your-value",
        "DITTO_DEVOPS_PASSWORD": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • DITTO_BASE_URL required env
    Base URL of the Ditto HTTP API, e.g. http://localhost:8080
  • DITTO_USERNAME env
    Basic auth username for the Things/Policies/Messages/Search API
  • DITTO_PASSWORD secret env
    Basic auth password for the Things/Policies/Messages/Search API
  • DITTO_BEARER_TOKEN secret env
    Bearer token, used instead of Basic auth for the same API
  • DITTO_DEVOPS_USERNAME env
    Basic auth username for the separate DevOps/Connections realm
  • DITTO_DEVOPS_PASSWORD secret env
    Basic auth password for the separate DevOps/Connections realm

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account nagarjunr, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Otheri

  • More stars than 0% of the other 32398 servers in this category
  • Published to the registry more recently than 19% of the other 32398 servers in this category
  • Basic checks equal to or better than 100% of the other 32398 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Eclipse Ditto safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: DITTO_BASE_URL, DITTO_PASSWORD, DITTO_BEARER_TOKEN, DITTO_DEVOPS_PASSWORD

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.1.1) reached the registry 3 months ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, AI Deprecations

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

by formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Runs on your computer★ 440MITUpdated 14 months ago
Install

Remote Desktop Commander

by desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Runs in the cloud★ 211Updated yesterday
Install

AI Deprecations

by aideprecations.com

AI model shutdown dates, replacements, change feed and webhook alerts for 8 providers.

Runs in the cloudUpdated today
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

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
ToolDescription
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_idRead/repoint the policy controlling a thing.
get_thing_definition / set_thing_definition / delete_thing_definitionManage a thing's WoT/model definition.
whoami()Return the identity Ditto authenticated this connector as — useful to sanity-check credentials.
Attributes & Features
ToolDescription
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_featureRead/create-replace/delete one whole feature.
get_feature_properties / set_feature_properties / delete_feature_propertiesRead/write/delete feature properties or desiredProperties, whole or by path.
get_feature_definition / set_feature_definition / delete_feature_definitionManage a feature's definition.
Messages
ToolDescription
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
ToolDescription
get_policy / put_policy / delete_policyRead/create-replace/delete a policy.
get_policy_entries(policy_id, label=None)Read all entries, or one by label.
set_policy_entry / delete_policy_entryCreate-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.

ToolDescription
list_connections / get_connectionList/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_logsInspect a connection's live state.
send_connection_command(connection_id, command)Open/close/reset-metrics/enable-logs/reset-logs.
get_logging_config / set_logging_configRead/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
ToolDescription
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 to overwrite=False, using Ditto's If-None-Match: * header so create-only is race-free (not a check-then-set). Pass overwrite=True to replace existing data.
  • Deletes are confirm-gated: every delete_* tool requires confirm=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-entry set_policy_entry/get_policy_entries covers the common case. Add these later if you need them.

Configuration

Env varRequiredDescription
DITTO_BASE_URLYesBase URL of the Ditto HTTP API, e.g. http://localhost:8080 or your gateway's public URL.
DITTO_USERNAME / DITTO_PASSWORDNoBasic auth for the Things/Policies/Messages/Search API. Typical for self-hosted Ditto (nginx demo setup uses ditto/ditto).
DITTO_BEARER_TOKENNoBearer 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_PASSWORDNoBasic 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.

Ask PopNx