Skip to main content

Extend the Model Context Protocol (MCP) to edge and IoT devices: a bridging gateway, a lightweight MCP-Lite server, and a four-tier device taxonomy.

Project description

MCP-Edge

CI

Extend the Model Context Protocol (MCP) to edge and IoT devices.

MCP-Edge lets cloud LLM agents discover and invoke physical hardware through the same tool interface they already use for software APIs. It provides:

  • a gateway that bridges cloud-native MCP transports (SSE / HTTP) to constrained device channels (UART, BLE, local Wi-Fi), presenting every downstream device as a standard MCP tool provider;
  • MCP-Lite, a lightweight MCP server for devices with as little as ~512 KB of RAM;
  • a four-tier device taxonomy (constrained MCUs, smart IoT nodes, BLE-only wearables, Linux-class edge computers) that maps an MCP strategy to each tier;
  • protocol adaptations for constrained links: CBOR encoding, schema caching, connection pooling, and offline request buffering.

Status: alpha, under active development. The public API is unstable and will change. This repository is a reference implementation of the framework described in the MCP-Edge paper (IEEE Cloud Summit 2026). Performance figures reported in the paper are projected estimates, not measurements taken from this codebase. The full gateway path is exercised against simulated devices. A serial/UART transport has landed in the codebase — validated in software against an in-memory fake, but not yet exercised on physical hardware or paired with example firmware; BLE and Wi-Fi transports arrive in a later version.

Installation

Requires Python 3.10+.

pip install mcp-edge

For development, install from source:

git clone https://github.com/jemsbhai/mcp-edge
cd mcp-edge
pip install -e ".[dev]"

Quickstart

Run a demo gateway — an MCP server exposing two simulated devices over stdio:

mcp-edge run --demo

This serves a simulated sensor (read_temp, read_humidity) and a simulated ring (heart_rate), each tool namespaced by device (sensor-01/read_temp, ...). To drive it from an MCP client such as the MCP Inspector or Claude Desktop, configure a stdio server with command mcp-edge and arguments ["run", "--demo"]. The process logs to stderr and waits for a client on stdin.

Use the gateway as a library:

import asyncio

from mcp_edge.client import MCPLiteClient
from mcp_edge.devices import SimulatedDevice
from mcp_edge.gateway import Gateway
from mcp_edge.registry import DeviceRegistry
from mcp_edge.tiers import Tier
from mcp_edge.transports import LoopbackTransport


async def main() -> None:
    device = SimulatedDevice("sensor-01")
    device.add_tool("read_temp", lambda args: {"celsius": 21.5})

    transport = LoopbackTransport(device.handle)
    await transport.open()

    registry = DeviceRegistry()
    registry.register("sensor-01", MCPLiteClient(transport), Tier.SMART_NODE)

    gateway = Gateway(registry)
    print([tool["name"] for tool in await gateway.list_tools()])  # ['sensor-01/read_temp']
    print(await gateway.call_tool("sensor-01/read_temp", {}))     # {'celsius': 21.5}


asyncio.run(main())

Connect your own device over serial (experimental) — install the serial extra (pip install "mcp-edge[serial]") and point SerialTransport at the port your device is on. It exposes the same Transport interface, so it drops into the example above in place of LoopbackTransport:

from mcp_edge.transports import SerialTransport

# "COM3" on Windows, "/dev/ttyUSB0" on Linux/macOS
transport = SerialTransport("COM3", baudrate=115200)

Frames use a length-prefixed wire format — a 2-byte big-endian length followed by the CBOR payload — documented in transports/serial.py. Device firmware must frame its replies the same way; the exported encode_frame / decode_frame helpers make that straightforward. This path is not yet validated on physical hardware, and example firmware is still in progress.

Roadmap

  • v0.1 — gateway core, in-process (loopback) transport, protocol adaptations (CBOR, schema caching, connection pooling, offline buffering), device simulator, health monitor, CLI, hermetic CI
  • v0.2 — real transports and Wokwi firmware-in-the-loop tests (Arduino / ESP32 / RP2040). The serial/UART transport (pyserial) has landed (software-tested); BLE and Wi-Fi/mDNS are still to come
  • v0.2+ — Edge Impulse (inference as an MCP tool) and Arduino IoT Cloud (properties as MCP) integration examples; Renode / QEMU backends

Development

pip install -e ".[dev]"
pytest -q
ruff check .

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_edge-0.1.1.tar.gz (34.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_edge-0.1.1-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file mcp_edge-0.1.1.tar.gz.

File metadata

  • Download URL: mcp_edge-0.1.1.tar.gz
  • Upload date:
  • Size: 34.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for mcp_edge-0.1.1.tar.gz
Algorithm Hash digest
SHA256 778b64f578d4b4e4da16d1e319a7bc2aa865bdeeba45791acb4554f26ed5b2b9
MD5 d782e38c384e59feadde7841286b3efb
BLAKE2b-256 c8e7b566987138a9707caad1c4b7976c1f96606da2c37112b877809ea59b9473

See more details on using hashes here.

File details

Details for the file mcp_edge-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: mcp_edge-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for mcp_edge-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e55951273113028b6bc9286955eea530f66c665f764011faa77cd282b234b2a5
MD5 14c0633ef8c19f38fbfb018717a96f4b
BLAKE2b-256 93c9079b1efc2205089baf9dc9f8bc51e50e8befb4d1c20ecf6dca81b57da1f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page