Asi signal-messaging
Signal Protocol MCP server (Rust). 3 tools — encrypt, initialize_session, verify_safety_number. Bypass route when Beeper Desktop is down.
install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/asi/skills/signal-messaging" ~/.claude/skills/plurigrid-asi-signal-messaging && rm -rf "$T"
manifest:
plugins/asi/skills/signal-messaging/SKILL.mdsource content
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:
- Read
tool definitions (3server.rs
blocks) for current API surface#[tool( - Read
for what's placeholder vs realIMPLEMENTATION_STATUS.md - 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
adds a 4th tool → skill auto-updatesserver.rs- 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
tags<loaded_skill>
Status (transcluded 2026-04-04)
- ✅ Compiles, 6 tests pass
- ⚠️ Tools are placeholder implementations awaiting
integrationlibsignal-protocol - ✅ 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