Skip to main content
AI/MLplurigrid

signal-messaging

Signal Protocol MCP server (Rust). 3 tools — encrypt, initialize_session, verify_safety_number. Bypass route when Beeper Desktop is down.

Stars
23
Source
plurigrid/asi
Updated
2026-04-26
Slug
plurigrid--asi--signal-messaging
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/plurigrid/asi/HEAD/plugins/asi/skills/signal-messaging/SKILL.md -o .claude/skills/signal-messaging.md

Drops the SKILL.md into .claude/skills/signal-messaging.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Signal Messaging via Rust MCP

Live Tools (from server.rs)

| Tool | Description | |------|-------------| | `signal_encrypt_message` | Encrypt via Double Ratchet + Sealed Sender | | `signal_initialize_session` | X3DH key agreement for new sessions | | `signal_verify_safety_number` | Compute/verify identity fingerprints |

MCP Config

{
  "signal": {
    "command": "cargo",
    "args": ["run", "--release", "--example", "signal-server-stdio"],
    "cwd": "/Users/alice/worlds/s/signal-mcp",
    "env": { "RUST_LOG": "signal_mcp=info" }
  }
}

Transclusion Protocol

This skill is a sparse pointer with live transclusion targets. On every interaction where signal-messaging is loaded, the agent SHOULD:

  1. Read server.rs tool definitions (3 #[tool( blocks) for current API surface
  2. Read IMPLEMENTATION_STATUS.md for what's placeholder vs real
  3. Inject as XML into the conversation context:
<loaded_skill name="signal-messaging">
  <transcluded from="signal-mcp/src/server.rs" extracted="tool-signatures">
    <!-- live content from grep '#\[tool(' server.rs -->
  </transcluded>
  <transcluded from="signal-mcp/IMPLEMENTATION_STATUS.md" extracted="status">
    <!-- live implementation status -->
  </transcluded>
  <static>
    <!-- the rest of this SKILL.md -->
  </static>
</loaded_skill>

Why Transclusion > Static

  • server.rs adds a 4th tool → skill auto-updates
  • Implementation status changes from placeholder → real → skill reflects it
  • Zero maintenance; the code IS the documentation
  • Anthropic API XML injection is already the delivery mechanism for <loaded_skill> tags

Status (transcluded 2026-04-04)

  • ✅ Compiles, 6 tests pass
  • ⚠️ Tools are placeholder implementations awaiting libsignal-protocol integration
  • ✅ Resource listing: sessions, identities (JSON)
  • ✅ Tool router with macro-derived handlers

Relationship to Beeper

beeper (unified) ──── Beeper Desktop bridge ──── Signal (via Matrix)
                                                      │
signal-messaging ──── Rust MCP server ────────────── Signal (native)
                      (bypass route)                   │
                                                  libsignal-protocol

Use signal-messaging when:

  • Beeper Desktop is not running
  • You need E2E encryption primitives directly
  • You need safety number verification
  • You want to avoid Matrix protocol overhead