Agent Skills: Signal Messaging via Rust MCP

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

UncategorizedID: plurigrid/asi/signal-messaging

Install this agent skill to your local

pnpm dlx add-skill https://github.com/plurigrid/asi/tree/HEAD/plugins/asi/skills/signal-messaging

Skill Files

Browse the full folder contents for signal-messaging.

Download Skill

Loading file tree…

plugins/asi/skills/signal-messaging/SKILL.md

Skill Metadata

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

Signal Messaging via Rust MCP

<transclude src="signal-mcp/IMPLEMENTATION_STATUS.md" xpath="//h3[text()='Implementation Status']" />

Live Tools (from server.rs)

<transclude src="signal-mcp/src/server.rs" pattern="#\[tool\(" format="table"> | 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 | </transclude>

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