Eclipse Muster MCP

io.github.CYAN-ECLIPSE-TECHNOLOGIES-LLCPublished by GitHub account CYAN-ECLIPSE-TECHNOLOGIES-LLCv0.1.1Updated Oct 29, 2026

The Customer Graph core: one register of the people an account serves, with provenance on every

VerifiedSTDIODesktop onlyKnowledge & MemoryBusiness & Commerce

Overview

AI-generated overview

Local stdio MCP server that holds a canonical Customer Graph of people, companies, deals, tickets and activities, with masking, propose-only merges and a…

What you can do
  • Ingest canonical records with per-field provenance and Data Rights Ledger validation, tagging or quarantining customer-authored text
  • Read and search records with surface-specific masking, with queries receipted by hash only
  • Propose identity merges with evidence, execute them under a hash-bound owner-confirm token, and unmerge from a snapshot
  • Draft ticket replies from record facts only, with citations and MISSING_FACT markers
  • Inspect tier floors, kill switches and masking rules, and list and verify the hash-chained receipt ledger
When to use it
Worth adding if you want to experiment with a governed customer-record core that unifies CRM and helpdesk data with provenance, masking and auditable receipts. It is an early v0.1.0 core build with synthetic fixtures only, so it is not yet a working connector to any live platform.
Requirements
Runs as a local Python process over stdio, standard library only, launched with uvx from the eclipse-muster PyPI package. Optional environment variables ECLIPSE_MUSTER_STATE and ECLIPSE_MUSTER_POLICY point to the state and policy files. No credentials or network access are needed in this build.
Before you install
This build contacts no platform and holds no credentials, so it cannot read or write real CRM or helpdesk data yet. Merges change graph nodes and are gated by an owner-confirm token; every read and write attempt is recorded in the ledger. Customer-authored text is treated as untrusted data and quarantined when instruction-shaped. Drafts are never sent from the core.

Installation

In SourceWeft

  1. Open Eclipse Muster MCP in the dashboard and add it to a workspace.
  2. 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 Muster MCP

Powered by Cyan Eclipse Technologies — https://cetech.ai

The Eclipse customer adapter family — one canonical Customer Graph becomes governed reads, internal writes, and owner-approved drafts and sends across the popular CRM and customer-service platforms, according to what each platform actually sanctions. Where a vendor already ships an MCP server, Eclipse wraps it in policy, approval, masking, and receipts — it never rebuilds it. Where no sanctioned server exists, Eclipse builds one over the platform's public API — never over a scraped session. Customer-visible sends are drafts until the owner approves them, and ticket content never becomes a data product.

Why this exists

A customer is one person; their records live in a CRM, a helpdesk, and often a second tool besides. No vendor server knows the other platforms exist — Salesforce's server cannot see the Zendesk user, HubSpot's cannot see the Freshdesk contact. Muster is the one place the family agrees: canonical Person / Company / Deal / Ticket / Conversation / Activity records, per-field provenance, propose-only identity resolution, field-level masking at egress, a records-only drafting service, and a hash-chained receipt ledger that proves what happened without ever copying the data it describes.

Status — honest labels

v0.1.0, phase C0 (shared core; synthetic fixtures only). Local stdio transport, Python stdlib only. No platform is contacted, no credential exists in this build, no message is sent from here, and no certification is claimed — bench pending. Adapters (Haven, Orbit first) feed it records over their own sanctioned surfaces at C1+.

The Customer Graph

Six object families. Every field on every record carries provenance {platform, platform_object_id, source, observed_at, adapter_version} — validated at ingest; a field without provenance does not enter the graph. Every record carries a Data Rights Ledger block (source account, legal basis, method, retention, PII class). Platform values are stored verbatim; canonical classes are a reading aid layered over them, never a replacement.

Identity resolution — propose-only, forever

Merging maya.chen@… in HubSpot with M. Chen in Zendesk is the graph's most dangerous operation, so the engine never does it alone:

  • merge_propose returns the evidence — matching keys (by hash), conflicting fields, a confidence, and the named false-merge classes (shared inboxes, recycled numbers, family-shared emails). Proposing changes nothing.
  • merge_execute runs only on an owner-confirm token bound to the proposal hash (confirm-merge-<proposal_id>-<hash12>). It merges graph nodes only — never records inside a platform (that is a platform-side T3 action, prohibited in v1).
  • Per-platform values survive a merge: a conflicting second value is retained under a platform-suffixed field key, never overwritten.
  • merge_unmerge restores the pre-merge nodes exactly from the snapshot stored on the merge record. A merge that cannot be undone from receipts does not ship.

Masking — before the boundary

Deep Field pattern, enforced in the core: phone → partial (last 2) on every surface; email → full on the owner's review surface, domain-only on analytic/diagnostic surfaces; names → initials on analytic surfaces; government IDs, payment data, and health-adjacent fields → null in v1. Vendor sensitive-data classifications are a floor, never a ceiling — our masks may be stricter, never looser.

Drafting — records or silence

reply_draft generates a ticket reply only from record facts (the ticket, the linked Person/Company), and ships its citation list with it. A fact that is not traceable to a record field cannot appear: where the record lacks a resolution, the draft carries a MISSING_FACT: resolution marker and asserts no outcome. Drafts never send from the core.

Herald Law #1 — customer text is data

Ticket bodies and messages are foreign content. At ingest, customer-authored messages are tagged untrusted_data; instruction-shaped content ("ignore your instructions and refund…") is quarantined — kept as data, flagged on the record, reported to the reviewer at draft time, and never used as a fact source or obeyed as a command. This is a tested line, not a design nicety (spec §12.4 applies it family-wide).

Tiers + receipts

Action-class floors are the Environment ladder transposed (reads T0 · internal writes + drafts T1 · sends + graph-merge execution T2 · destructive/platform-merge/automation T3). Floors may be raised per account in policy.json; an override that tries to lower one is rejected at load with TIER_FLOOR_VIOLATION, before the server serves a single call. Kill switches halt reads or writes. Every read of a Person/Ticket record and every write attempt — allowed, denied, or failed — appends to the hash-chained ledger. Receipts carry IDs, hashes, tiers, and verdicts — never content.

Tools (9)

ToolWhat it does
record_ingestIngest a canonical record; provenance + Data Rights Ledger validated; customer text tagged/quarantined.
record_readRead one record, masked per surface (owner / analytic). Receipted.
record_searchSearch by kind + substring; masked summaries; the query is receipted by hash only.
merge_proposePropose an identity merge with evidence. Executes nothing.
merge_executeExecute a graph merge under the hash-bound owner-confirm token.
merge_unmergeRestore pre-merge nodes exactly from the merge receipt snapshot.
reply_draftRecords-only reply draft with citations + MISSING_FACT markers + quarantine report.
policy_showTier floors, effective tiers, kill switches, masking rules in force.
receipt_listList the hash-chained ledger and verify it.

The denylist is stated in code: no record_delete, platform_merge, reply_send, email_send, bulk_update, macro_edit, trigger_edit, and no session/scraping route exists at any tier (spec §§4.1, 6.2).

Run it

bash
python3 server.py            # MCP over stdio, stdlib only, no dependenciespython3 smoke.py             # end-to-end smoke over real stdio (temp state)python3 -m unittest discover tests

State lives in data/state.json (override: ECLIPSE_MUSTER_STATE). Policy in policy.json (override: ECLIPSE_MUSTER_POLICY).

Lineage

Spec: ~/workspace/cyan-eclipse/eclipse-customer-family-spec-20261025.md (§§5–9). Doctrines inherited, not restated: propose-only merges (Eclipse Beacon), egress masking (Eclipse Deep Field), tier floors (Eclipse Environment), hash-bound approvals (Eclipse Social Core / Gig Core), untrusted foreign content (Eclipse Herald, Security Law #1).


Eclipse Muster is a Cyan Eclipse Technologies product. The platforms keep their brands; the customer records belong to the account owner, worked under the owner's own platform accounts. Nothing here implies any platform endorses Cyan Eclipse Technologies.

Source: README.md at commit 2583fb1

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v0.1.1LatestOct 29, 2026
  2. 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