GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Beschreibung vom Entwickler (englisches Original)
MCP server for Azure IoT Hub: device registry, twins, methods, jobs, messaging.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
AZURE_IOT_HUB_CONNECTION_STRING, AZURE_IOT_HUB_AMQP_PORT, AZURE_IOT_HUB_AMQP_USE_TLSAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"azure-iot-hub": {
"command": "uvx",
"args": [
"azure-iot-hub-mcp-server"
],
"env": {
"AZURE_IOT_HUB_CONNECTION_STRING": "your-value",
"AZURE_IOT_HUB_AMQP_PORT": "your-value",
"AZURE_IOT_HUB_AMQP_USE_TLS": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add azure-iot-hub --env AZURE_IOT_HUB_CONNECTION_STRING=your-value --env AZURE_IOT_HUB_AMQP_PORT=your-value --env AZURE_IOT_HUB_AMQP_USE_TLS=your-value -- uvx azure-iot-hub-mcp-serverTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"azure-iot-hub": {
"command": "uvx",
"args": [
"azure-iot-hub-mcp-server"
],
"env": {
"AZURE_IOT_HUB_CONNECTION_STRING": "your-value",
"AZURE_IOT_HUB_AMQP_PORT": "your-value",
"AZURE_IOT_HUB_AMQP_USE_TLS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"azure-iot-hub": {
"type": "stdio",
"command": "uvx",
"args": [
"azure-iot-hub-mcp-server"
],
"env": {
"AZURE_IOT_HUB_CONNECTION_STRING": "your-value",
"AZURE_IOT_HUB_AMQP_PORT": "your-value",
"AZURE_IOT_HUB_AMQP_USE_TLS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
AZURE_IOT_HUB_AMQP_PORT envAZURE_IOT_HUB_AMQP_USE_TLS envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto nagarjunr bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: AZURE_IOT_HUB_CONNECTION_STRING
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.0) kam vor 3 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.
In derselben Kategorie: GitHub, Desktop Commander, Cloudflare MCP
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
A Model Context Protocol (MCP) server for Azure IoT Hub — device registry, device twins, direct methods, jobs, and messaging.
Scoped to IoT Hub's service-side data plane (device management), not Azure Resource Manager. Microsoft's own official Azure MCP Server already covers the ARM-level "show me my IoT Hub resource" case — this server covers the actual device-management capability that Azure MCP doesn't.
Calls Azure IoT Hub's REST Service API directly via httpx with a hand-rolled SAS token generator, rather than the official azure-iot-hub PyPI package — that package hard-depends on uamqp, a C-extension that fails to build on modern Python/platforms (confirmed: it doesn't install on Python 3.12/arm64). Built with FastMCP.
| Tool | Description |
|---|---|
list_devices(max_count) | List devices. For filtering, prefer query_devices. |
query_devices(query, max_item_count, continuation_token) | IoT Hub SQL-like query over devices/twins, with pagination. |
get_device(device_id) | Fetch a device's identity (auth mechanism, status, connection state). |
create_device(device_id, auth_type, ..., overwrite=False) | Register a device. |
update_device(device_id, status, status_reason, etag) | Update a device's enabled/disabled status. |
delete_device(device_id, confirm=False, etag) | Delete a device. Irreversible. |
| Tool | Description |
|---|---|
list_modules(device_id) / get_module(device_id, module_id) | List/read module identities on a device. |
create_module(device_id, module_id, ..., overwrite=False) | Register a module. |
delete_module(device_id, module_id, confirm=False) | Delete a module. Irreversible. |
| Tool | Description |
|---|---|
get_device_twin(device_id) / get_module_twin(device_id, module_id) | Read a twin (tags, desired/reported properties). |
update_device_twin(device_id, tags, desired_properties, etag) | Merge-update tags/desired properties. |
replace_device_twin(device_id, tags, desired_properties, etag) | Full replace (not merge) of tags/desired properties. |
update_module_twin(device_id, module_id, tags, desired_properties, etag) | Merge-update a module twin. |
| Tool | Description |
|---|---|
invoke_device_method(device_id, method_name, payload, ...) | Invoke a direct method on a device (blocks until the device responds or times out). |
invoke_module_method(device_id, module_id, method_name, payload, ...) | Same, scoped to a module. |
| Tool | Description |
|---|---|
create_scheduled_job(job_id, job_type, query_condition, ...) | Schedule a twin update or direct method across many devices matching a query. |
get_scheduled_job(job_id) / query_scheduled_jobs(job_type, job_status) | Read job status/results. |
cancel_scheduled_job(job_id, confirm=False) | Cancel a job. |
| Tool | Description |
|---|---|
send_c2d_message(device_id, payload, ...) | Send a cloud-to-device message. AMQP, not REST — see caveat below. |
purge_c2d_message_queue(device_id) | Delete all pending C2D messages queued for a device. |
| Tool | Description |
|---|---|
get_device_statistics() | Total/enabled/disabled device counts. |
get_service_statistics() | Service-level stats (e.g. connected device count). |
send_c2d_message is AMQP, not REST, and has no real-instance test coverageEvery other tool in this server wraps a documented REST endpoint. Cloud-to-device message sending is the one exception: Azure IoT Hub's REST API only exposes the *feedback* side of C2D messaging (delivery receipts); sending is AMQP-protocol-only (confirmed by reading the official azure-iot-hub SDK's source — it hands off to an AMQP client, not an HTTP call).
To support it without pulling in the broken uamqp dependency, send_c2d_message implements the CBS (Claims-Based Security) auth handshake and message send directly against python-qpid-proton (the standard AMQP 1.0 library, confirmed to install cleanly on modern Python). The protocol details (CBS field names, $cbs node, /messages/devicebound target address, to property format) were confirmed from Microsoft's own pure-Python AMQP implementation in azure-eventhub/azure-servicebus, not guessed.
This tool is not covered by real-instance testing. There's no free Azure IoT Hub emulator (see Testing below), and the test suite's respx HTTP mocking can't exercise AMQP at all. Tests instead run this against a local fake AMQP endpoint (also built with qpid-proton) that implements just enough of the CBS handshake and /messages/devicebound receiver to prove the wire protocol is well-formed — it does not validate genuine Azure IoT Hub business logic. Verify against a real hub before relying on this in production.
Same as the rest of this repo: create_* defaults to overwrite=False (best-effort describe-then-create check — IoT Hub's If-Match header is for optimistic-concurrency on updates, not create-only semantics, so this isn't fully race-free like Ditto's If-None-Match). Every delete_*/cancel_* requires confirm=True.
| Env var | Required | Description |
|---|---|---|
AZURE_IOT_HUB_CONNECTION_STRING | Yes | An IoT Hub connection string with service (or iothubowner) rights, e.g. HostName=my-hub.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=.... Find this under your hub's "Shared access policies" in the Azure portal. |
AZURE_IOT_HUB_AMQP_PORT | No | Default 5671. Only relevant to send_c2d_message. |
AZURE_IOT_HUB_AMQP_USE_TLS | No | true/false, default true. Set false only for local/test endpoints. |
AZURE_IOT_HUB_AMQP_HOSTNAME_OVERRIDE | No | Override the AMQP connection target (e.g. a local test fixture) without changing the REST hostname derived from the connection string. |
uv sync
export AZURE_IOT_HUB_CONNECTION_STRING="HostName=my-hub.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=..." uv run azureiothubmcpserver.py
See mcp.json for ready-to-use client configs (stdio and Docker).
This repo's design principles call for testing against a real instance rather than mocks. Azure IoT Hub has no official local emulator and no moto-equivalent exists for it. REST endpoints are tested with respx (httpx's dedicated mocking library, using realistic Azure response shapes); send_c2d_message is tested against a local fake AMQP endpoint (see caveat above).
uv run pytest -v
No bundled deployment artifacts here (unlike eclipse-ditto/mqtt) since there's no local broker/service to run — Azure IoT Hub only exists as an Azure-hosted service.