Eclipse Dispatch MCP
io.github.CYAN-ECLIPSE-TECHNOLOGIES-LLCPublished by GitHub account CYAN-ECLIPSE-TECHNOLOGIES-LLCv0.1.1Updated Oct 29, 2026
Drafts once, syndicates drafts everywhere sanctioned, unifies the analytics. Never publishes
Overview
Local MCP server that drafts a newsletter once, previews per-platform adaptations, records hash-bound approval, and fans approved drafts out to beehiiv, Ghost…
- What you can do
- Create and version a canonical draft with per-platform variants, returning a content hash
- Preview per-platform renderings and every adaptation diff against the canonical draft
- Record owner approval as a token bound to the content hash
- Syndicate approved drafts: beehiiv and Ghost drafts via adapters, Substack as local paste packs
- Read unified analytics with per-platform provenance and definitions, refusing to average across differing definitions
- List and verify hash-chained receipts for drafts, approvals, syndications and analytics runs
- When to use it
- For publishers who write one newsletter and re-enter it on several platforms and want a review-first drafting and syndication workflow with unified, honestly labelled analytics. Note that v0.1.0 runs only against shipped fixtures and local stub servers, so it is currently a way to evaluate the workflow rather than to reach live platforms.
- Requirements
- Runs locally over stdio as a Python package (eclipse-dispatch, launched with uvx) using only the standard library. No authentication, environment variables or headers are declared. State is written to data/state.json beside the server, overridable with ECLIPSE_DISPATCH_STATE; adapter base URLs can be set with ECLIPSE_DISPATCH_BEEHIIV_URL and ECLIPSE_DISPATCH_GHOST_URL. Desktop only.
Installation
In SourceWeft
- Open Eclipse Dispatch MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Eclipse Dispatch MCP
Powered by Cyan Eclipse Technologies — https://cetech.ai
Eclipse Dispatch — the newsletter layer above the platforms: it drafts once and syndicates the drafts to every sanctioned platform, unifies the analytics, and watches your own subscriptions like a portfolio. It never publishes without approval, and it never scrapes.
Why this exists
A publisher multi-homed across beehiiv, Ghost, and Substack writes once and re-enters everywhere, then reads three dashboards with three different definitions of an "open." Each platform's own tooling stops at its own wall: Substack's official MCP is read-only analytics gated to Bestseller admins; beehiiv's official MCP drafts into beehiiv only. Dispatch is the cross-platform layer none of them will build — one canonical draft, per-platform drafts via sanctioned routes, analytics unified without silent blending, and review-first as a property of the code, not a policy memo.
Status — honest labels
v0.1.0, phases D0 + D1-core. Bench pending — no certification claimed. Local stdio transport, Python stdlib only. Adapters run against shipped fixtures and local stub HTTP servers shaped like the real APIs — nothing in this build contacts a platform. Live wiring is owner-gated Wave 2: the beehiiv signup is an open owner item, and no Ghost instance runs here. The reader face (spec §5, phase D2 — subscription portfolio, renewal radar, engagement truth) is not in v0.1; neither is the §4.6 unofficial-endpoint module, which the spec recommends not building in v1 at all.
Tools (6)
The invariants (encoded + tested)
- Hash-bound approval. Approval binds to the canonical draft's content hash. Any post-approval edit — a new version, or a silent in-place tamper — invalidates it; syndication recomputes the hash and refuses by name. There is no path from "edited" to "sent" that passes through a stale approval.
- The beehiiv adapter has no publish method. Deliberate, mirroring the platform's own design (its official MCP also stops at drafts; publishing is the publisher's in-app act). A unit test asserts the method's absence. The server exposes no publish tool at all — no auto-publish, at any tier, for any platform.
- The Substack adapter is read-only. No sanctioned write surface exists, so write attempts raise a named refusal (
ReadOnlyRefusal: "Substack adapter is READ-ONLY…"). Substack receives paste packs, never writes. The spec's unofficial-endpoint module is not built (spec decision 3 recommendation: not in v1) — its absence changes nothing. - Analytics never blend silently. Three platforms define "open rate" over three different populations (the fixtures say so, in each definition). Dispatch labels every figure and refuses to average across definitions.
- No scraping. Public RSS of the owner's own publication is consumption as offered; bulk extraction does not exist here (spec §7).
Receipts
Draft creations, preview packs, approvals, per-platform syndications, and analytics runs append hash-chained receipts — append-only and machine-verifiable (verify_receipt_chain); tampering with any entry breaks the chain and is detected by test.
Run it
State persists in data/state.json beside the server (override with ECLIPSE_DISPATCH_STATE); paste packs land in data/paste-packs/. data/ is gitignored. Adapter base URLs can be pointed at stub (or, in Wave 2, real) endpoints via ECLIPSE_DISPATCH_BEEHIIV_URL / ECLIPSE_DISPATCH_GHOST_URL; with none set, in-process fixture transports answer.
Fixtures
fixtures/ ships per-platform analytics (each metric with the platform's own name and definition — the beehiiv and Ghost revenue figures deliberately use different definitions, period gross vs MRR, so the no-blending rule has something honest to catch) and substack_feed.xml, the owner's own publication RSS in fixture form. Stub servers shaped like the beehiiv v2 API and the Ghost Admin API live in adapters.py and are exercised over real local HTTP by the tests.
Roadmap (per spec)
- D2 — reader face: subscription portfolio graph, renewal radar, engagement truth, cancel prep (own data only, strictest data tier).
- D3 — Substack depth as the sanctioned surface grows — design waits for sanctioned writes; no scraping milestone exists.
- Wave 2 (owner-gated) — live beehiiv wiring after the owner's signup; live Ghost against a real instance.
License / attribution
A Cyan Eclipse Technologies product. The "Powered by Cyan Eclipse Technologies" attribution travels with it.
Source: README.md at commit 5325514
Tools
0Version history
2- v0.1.1LatestOct 29, 2026
- v0.1.0Oct 26, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts