Skip to content

Commit 4d21492

Browse files
committed
release prep: v0.3.0 notes, OG/logo, announcement drafts, PyPI rename
* Rename PyPI package to `dcp-protocol` (the bare name `dcp` is taken by an unrelated package). Import name stays `dcp`. * Bump @vitejs/plugin-vue to ^6.0.0 for Vite 7 compatibility. * Add real OG image (1200x630) and a less-placeholder favicon/logo SVG via docs/site/scripts/og.py. Wire them into index.html meta tags. * Add .github/RELEASE_NOTES_v0.3.0.md (used for the v0.3.0 release). * Add .github/announce/{HN,twitter,zhihu,anthropic_outreach}.md drafts.
1 parent 10593df commit 4d21492

13 files changed

Lines changed: 2574 additions & 7 deletions

File tree

.github/RELEASE_NOTES_v0.3.0.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# DCP v0.3.0 — hardware-validated draft
2+
3+
**The first release where every line of the protocol stack — Python Bridge,
4+
ESP32 firmware, conformance suite — runs end-to-end on a real
5+
$5 microcontroller, with an LLM at the other end of the wire.**
6+
7+
This is a *draft* release: the spec is stable for v0.x but unsigned, the
8+
hardware matrix is still single-MCU, and the empirical safety study is
9+
future work (see `docs/RATIONALE.md §7` and `docs/paper/main.tex §7`).
10+
11+
## Headline numbers
12+
13+
- **88 / 88** Python unit and conformance tests pass
14+
- **10 / 10** round-trip tests pass against ESP32-WROOM-32 (CH340, 115 200 baud)
15+
- **Frame size:** 19 bytes for a typical `set_brightness(50)` call;
16+
35 bytes with the optional HMAC tail
17+
- **Firmware footprint:** ~14 KB of pure DCP over an empty Arduino sketch
18+
- **Five transports** ship: loopback, UART (COBS + CRC-16), MQTT,
19+
BLE GATT, in-process simulator. Plus the MCP server wrapper that
20+
surfaces every intent to any MCP host
21+
22+
## What's in this release
23+
24+
### Wire & protocol
25+
- v0.3 spec at [SPEC.md](../../SPEC.md): 6-byte header + CBOR map +
26+
optional 16-byte HMAC-SHA256, with all five status codes and the
27+
manifest schema documented normatively.
28+
- Language-neutral [conformance suite](../../tests/conformance/) (golden
29+
YAML + Python runner).
30+
31+
### Reference implementations
32+
- **Python Bridge** (asyncio): manifest loader, range/type/capability
33+
enforcement, dry-run wire bit, HMAC-SHA256 capability tokens, wire-level
34+
HMAC.
35+
- **MCP server wrapper**: every manifest intent → MCP tool, zero code
36+
per device.
37+
- **ESP32 firmware** (Arduino-compatible C++): hand-rolled CBOR subset,
38+
self-contained SHA-256 (no mbedTLS dep), COBS framing, constexpr
39+
`DCP_ID(name)` macro for compile-time intent IDs. Also includes BLE
40+
GATT peripheral via NimBLE-Arduino.
41+
42+
### Developer experience
43+
- [`dcp` CLI](../../README.md): `serve / inspect / codegen / token`.
44+
- [`docs/ADDING_FEATURES.md`](../../docs/ADDING_FEATURES.md): the
45+
5-step loop to add a new intent (manifest → handler → test → flash →
46+
LLM picks it up).
47+
- [`tools/test_uart_roundtrip.py`](../../tools/test_uart_roundtrip.py):
48+
hardware integration harness.
49+
50+
### Docs & design
51+
- [`docs/RATIONALE.md`](../../docs/RATIONALE.md): why not MCP-on-MCU,
52+
why not WoT, why not Matter, why not Sparkplug B, why not OpenAPI.
53+
- [`docs/paper/main.tex`](../../docs/paper/main.tex): position paper
54+
with figures, ready for arXiv submission.
55+
- [`docs/site/`](../../docs/site/): Vue 3 + Vite 7 + Tailwind v4 landing.
56+
57+
### Release prep
58+
- MIT, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, issue / PR templates,
59+
GitHub Actions CI (Linux + Windows × Python 3.11 / 3.12 / 3.13).
60+
61+
## Honest caveats
62+
63+
- Only one MCU validated so far (ESP32-WROOM-32). Cortex-M0+ port is
64+
v0.4's headline.
65+
- No measured A/B against IoT-MCP — that's the follow-up paper.
66+
- Spec is **draft**: a v1.0 freeze is gated on a second-implementer
67+
port (we're hoping for community C or Rust).
68+
- Wire-level HMAC has no in-band marker — deliberate, but means
69+
configuration discipline matters. See `SPEC.md §7`.
70+
71+
## Try it in five minutes
72+
73+
```bash
74+
pip install -e ".[mcp,serial,dev]" # all extras: ,mqtt,ble for those
75+
dcp inspect examples/lamp_manifest.yaml
76+
dcp serve examples/lamp_manifest.yaml --simulator
77+
# in another shell, point any MCP host at the simulator
78+
```
79+
80+
For real hardware, see [`firmware/esp32/README.md`](../../firmware/esp32/README.md).
81+
82+
## Thanks
83+
84+
To the IoT-MCP team (Yang et al., arXiv:2510.01260) for proving the
85+
direction; to the W3C WoT working group for the description-layer
86+
prior art; and to the MCP team at Anthropic for the upstream we extend.

.github/announce/HN.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Hacker News submission
2+
3+
## Title (under 80 chars, max 3 of these)
4+
5+
Pick whichever you like best. **First one is my recommendation** — narrow,
6+
concrete, and avoids triggering HN's "Show HN" detector unfairly.
7+
8+
1. **DCP: A compact protocol for letting LLM agents control $1 microcontrollers**
9+
2. **Show HN: DCP – Device Context Protocol, the last meter of MCP**
10+
3. **DCP: LLMs ↔ microcontrollers, with safety primitives at the wire format level**
11+
4. **Open protocol so Claude can dim your lamp through a $5 ESP32**
12+
13+
## Body (optional first comment; HN allows you to leave the body empty
14+
## and put the explanation as a top-level self-comment instead — that
15+
## form gets more engagement)
16+
17+
```
18+
Author here. Quick context for HN:
19+
20+
DCP (Device Context Protocol) is a wire format + reference implementation
21+
for letting LLM agents safely control physical devices, scaling down to
22+
the cheapest microcontrollers you can buy.
23+
24+
It's deliberately complementary to Anthropic's Model Context Protocol
25+
(MCP), which is designed for SaaS tools on host-class machines. A
26+
reference Bridge translates DCP <-> MCP so any MCP-compatible LLM
27+
(Claude Desktop, Claude Code, etc.) works zero-config.
28+
29+
The pitch in three numbers:
30+
- 19 bytes for a typical call frame (MCP JSON-RPC ~180 bytes)
31+
- ~14 KB pure DCP code over an empty Arduino sketch on ESP32
32+
- 88/88 Python tests + 10/10 round-trip tests pass against real ESP32
33+
34+
The protocol-level safety primitives are the thing I most care about:
35+
- Manifest declares units (no more F vs C confusion)
36+
- Manifest declares ranges (Bridge rejects bad input pre-wire)
37+
- Dry-run is a wire-format bit, not a convention
38+
- Capability tokens scope what a session can do (HMAC-SHA256)
39+
- All four enforced before any byte reaches the device
40+
41+
The honest caveats are equally important and are spelled out in the
42+
design rationale (RATIONALE.md): only one MCU validated so far, no
43+
empirical A/B vs IoT-MCP yet, spec is draft.
44+
45+
If you're skeptical: I'd most appreciate eyes on the spec
46+
(SPEC.md, ~250 lines), the conformance suite (golden frames in YAML),
47+
and the firmware (~450 lines of hand-rolled CBOR + COBS + SHA-256, no
48+
mbedTLS).
49+
50+
MIT licensed. Repo: github.com/device-context-protocol/dcp
51+
```
52+
53+
## When to post
54+
55+
Tuesday or Wednesday morning, 7-10 AM Pacific. Avoid:
56+
- Weekends (lower traffic, gets buried)
57+
- Right after major Anthropic news (gets eaten by it)
58+
- Same week as a known competitor launch
59+
60+
## Replying tips
61+
62+
- **Don't be defensive.** If someone says "Why not just use MQTT?",
63+
thank them and link the relevant section of RATIONALE.md. Don't argue.
64+
- **Engage with hostile comments politely.** HN rewards measured replies
65+
even more than the original post.
66+
- **Pin one good clarifying comment** as your first reply — usually
67+
"Here's the part most people don't grok about why this matters", with
68+
a 3-paragraph explanation.
69+
- **Be honest about footprint numbers.** If someone asks "is that pure
70+
DCP or includes the Arduino runtime?" — tell them: 294 KB total, ~14 KB
71+
is the DCP delta. Don't claim the delta when the metric is total.
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# Anthropic MCP team outreach
2+
3+
Two channels. Use both — discussion post is high-signal-low-noise; email
4+
is in case the right person doesn't see GitHub Discussions.
5+
6+
## Channel 1 — GitHub Discussion (PREFERRED, do this first)
7+
8+
Open at: https://github.com/orgs/modelcontextprotocol/discussions
9+
10+
**Category:** Show and Tell
11+
12+
**Title:** `DCP: a complementary protocol for LLM-driven hardware control at MCU scale`
13+
14+
**Body:**
15+
16+
```markdown
17+
Hi MCP team and community 👋
18+
19+
I built **[DCP — Device Context Protocol](https://github.com/device-context-protocol/dcp)**
20+
as a wire-format and architecture for the case MCP doesn't try to cover:
21+
LLM agents controlling physical devices on commodity microcontrollers
22+
(<16 KB flash, often without TCP/IP).
23+
24+
I want to be **explicit about positioning**: DCP is downstream of MCP, not
25+
a competitor. The reference Bridge speaks MCP to the LLM and DCP to the
26+
device, so any MCP host (Claude Desktop, Claude Code, IDE assistants)
27+
works zero-config.
28+
29+
**What's different at the wire level:**
30+
- 6-byte fixed header + CBOR map → typical call frame is 19 bytes (vs ~180 for MCP)
31+
- Static intent table — no runtime tool discovery; intent_id = CRC-16/CCITT(name)
32+
- Capability tokens for LLM-bounded permissions (HMAC-SHA256, scoped, expiring)
33+
- Dry-run as a wire-format kind, not a convention
34+
- Units declared in the manifest schema
35+
36+
**What I'd love feedback on from you specifically:**
37+
38+
1. **Is the "we extend MCP by translating" framing acceptable?** I want
39+
to avoid any framing that competes with the MCP project. If there's
40+
wording you'd prefer in the README and SPEC, please tell me.
41+
2. **Is there appetite within the MCP working groups to talk about a
42+
downstream/embedded profile of MCP itself?** If so, DCP might inform
43+
the design, or be a precursor that gets absorbed.
44+
3. **The 2026 roadmap centers on transport scalability and enterprise
45+
readiness.** Confirming my read: there's no plan to descend to MCU-scale
46+
devices upstream, so the gap DCP fills is real and stable.
47+
48+
I'm not asking for anything formal — just want this to start in the
49+
right relationship with the MCP project rather than discovered
50+
adversarially later.
51+
52+
A few additional artifacts:
53+
- Spec: [SPEC.md](https://github.com/device-context-protocol/dcp/blob/main/SPEC.md)
54+
- Design rationale (engages with the MCP gap explicitly):
55+
[docs/RATIONALE.md](https://github.com/device-context-protocol/dcp/blob/main/docs/RATIONALE.md)
56+
- Paper draft (arXiv-ready):
57+
[docs/paper/main.tex](https://github.com/device-context-protocol/dcp/blob/main/docs/paper/main.tex)
58+
59+
Hardware-validated on ESP32-WROOM-32 (the kind that costs less than a coffee).
60+
MIT licensed.
61+
62+
Thank you for MCP — it's been a huge step forward for the ecosystem.
63+
```
64+
65+
## Channel 2 — Email (use only if the discussion goes ignored for 2+ weeks)
66+
67+
**To:** Whichever MCP maintainer is most active in
68+
[modelcontextprotocol/specification](https://github.com/modelcontextprotocol/specification)
69+
recent commits/issues. Find their email from a commit
70+
(`git log --format='%an <%ae>'`) or LinkedIn.
71+
72+
**Subject:** `Heads-up: an open complementary protocol for LLM control of microcontrollers`
73+
74+
**Body:**
75+
76+
```
77+
Hi <name>,
78+
79+
I'm Wayland Yang. I work on infrastructure at deeplethe.
80+
81+
Wanted to flag a project we just open-sourced that explicitly extends
82+
MCP into the hardware layer, in case it's of interest to the team:
83+
84+
https://github.com/device-context-protocol/dcp
85+
86+
The short version: MCP's 2026 roadmap reasonably centers on enterprise
87+
SaaS scaling, not embedded devices. Meanwhile every "MCP server on
88+
ESP32" project ends up reinventing serial framing with no schema and no
89+
safety primitives. DCP is a small wire format (sub-50-byte frames,
90+
~14 KB MCU code) plus an architectural pattern where a Bridge process
91+
translates DCP <-> MCP and enforces all safety. The result is that any
92+
MCP-compatible LLM controls a $5 microcontroller without seeing any
93+
device-specific code.
94+
95+
I'm not asking for endorsement; I just want to make sure if anyone on
96+
your end thinks about this layer of the stack, you know we exist and
97+
are aimed at being a downstream consumer, not a fork.
98+
99+
The position paper draft (with explicit MCP relationship section) is at
100+
docs/paper/main.tex in the repo. Hardware-validated on ESP32. MIT.
101+
102+
Happy to talk if useful, otherwise feel free to ignore — wanted you to
103+
hear about it from us first.
104+
105+
Best,
106+
Wayland
107+
```
108+
109+
## Things to avoid in any outreach
110+
111+
- **Don't ask for code review.** That's not their job.
112+
- **Don't ask for amplification.** They can't, and asking would be tone-deaf.
113+
- **Don't claim "we filled MCP's gap".** Say "we extend MCP into a layer it
114+
doesn't cover" — the framing matters.
115+
- **Don't conflate MCP team with Anthropic policy team.** This is a
116+
protocol/engineering reach-out, not a partnership pitch.
117+
118+
## If they engage
119+
120+
Best-case outcomes, in order of value:
121+
122+
1. They link DCP from an "ecosystem" section on the MCP site
123+
2. They open issues on DCP with feedback / disagreements (huge signal of seriousness)
124+
3. They suggest the project could become an MCP "device profile" in a future spec — start a real working-group conversation
125+
126+
Anything beyond that is bonus.
127+
128+
## Realistic timing
129+
130+
- Discussion post → expect first reply 3-10 days, possibly never
131+
- Email → expect first reply 1-3 weeks, often never
132+
- Don't take silence as rejection; take silence as "they're busy, the
133+
project speaks for itself."

.github/announce/twitter.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Twitter / X thread
2+
3+
## Hero tweet (post first)
4+
5+
> 📡 Introducing DCP — Device Context Protocol.
6+
>
7+
> The protocol that lets LLM agents safely control a $5 microcontroller.
8+
>
9+
> Sub-50-byte frames. <16 KB MCU footprint. Capability-scoped.
10+
> Complementary to Anthropic's MCP — works zero-config with Claude.
11+
>
12+
> Open source, MIT.
13+
> 🧵 1/9
14+
>
15+
> [attach og.png]
16+
17+
## Thread (one tweet per line; reply-chain them)
18+
19+
> 2/9 ─ MCP is brilliant for SaaS tools. But it's JSON-RPC over WebSocket. ESP32 has 32 KB of RAM. The numbers don't work. The "MCP server on ESP32" projects out there are all hand-rolled serial protocols with no schema.
20+
21+
> 3/9 ─ DCP keeps MCP's mental model (manifest + tool calls) but compiles to a 6-byte header + CBOR payload. A typical call: 19 bytes on the wire. MCP equivalent: ~180 bytes.
22+
23+
> 4/9 ─ The host-side Bridge is the sole trust boundary. It speaks MCP to Claude, DCP to the device. Every safety check — capability, range, type, dry-run — happens *before* a byte reaches the MCU.
24+
>
25+
> Devices stay simple. LLMs never see raw GPIO.
26+
27+
> 5/9 ─ Safety primitives the LLM gets *for free*:
28+
> • Units are part of the type (no F vs C confusion)
29+
> • Ranges are enforced pre-wire (no out-of-range slipping through)
30+
> • Dry-run is a wire bit (LLM can ask "what would this do?")
31+
> • Capability tokens scope what a session can touch
32+
33+
> 6/9 ─ Validated on real hardware: ESP32-WROOM-32 over CH340 @ 115 200.
34+
> 10/10 round-trip tests, 88/88 Python tests. The full firmware (Arduino + FreeRTOS + DCP) is 294 KB; pure DCP delta is ~14 KB.
35+
36+
> 7/9 ─ Five transports out of the box: loopback (testing), UART (COBS + CRC), MQTT, BLE GATT, plus the MCP server wrapper. Same frame format across all of them — your device's firmware doesn't change when you swap the wire.
37+
38+
> 8/9 ─ Honest about what we have NOT done yet: only one MCU validated, no empirical A/B vs IoT-MCP (arXiv:2510.01260 — the closest prior art), spec is still draft. Everything we're sure of is in SPEC.md; everything we're not is in RATIONALE.md §7.
39+
40+
> 9/9 ─ Spec, code, paper draft, firmware, conformance suite — all MIT-licensed:
41+
> 🔗 github.com/device-context-protocol/dcp
42+
>
43+
> If you have an ESP32 in a drawer and a Claude subscription, you have everything you need to reproduce the demo in 10 minutes.
44+
45+
## Reply-back tweet to pin (after the thread)
46+
47+
> One thing I keep wanting to add — DCP exists because the official MCP roadmap is going UP-stack toward enterprise SaaS, not DOWN to embedded. Both directions are right. We're the down version.
48+
>
49+
> Thanks to the IoT-MCP team for proving the direction first.
50+
51+
## Tone notes
52+
53+
- No emojis except the first 📡 and 🔗 — over-emoji'd announcements get
54+
ignored on tech Twitter
55+
- The `og.png` is the make-or-break visual; if it doesn't show, the
56+
thread dies
57+
- Reply to every @ mention for the first 48 hours
58+
- Don't engage with the bots that auto-quote-tweet announcements with
59+
"have you considered X?" generated content

0 commit comments

Comments
 (0)