{"_id":"@daanrongen/signal-mcp","_rev":"3-0b8a999fc9fdf2223cf569559839ae0c","name":"@daanrongen/signal-mcp","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.1":{"name":"@daanrongen/signal-mcp","version":"1.0.1","_id":"@daanrongen/signal-mcp@1.0.1","maintainers":[{"name":"daanrongen","email":"hi@daan.website"}],"homepage":"https://github.com/daanrongen/signal-mcp#readme","bugs":{"url":"https://github.com/daanrongen/signal-mcp/issues"},"bin":{"signal-mcp":"dist/main.js"},"dist":{"shasum":"421402db45b7a6a2f64ca4df4185ba173ea72db4","tarball":"https://registry.npmjs.org/@daanrongen/signal-mcp/-/signal-mcp-1.0.1.tgz","fileCount":3,"integrity":"sha512-Q9Yguz9FECVh0/S1jz8d4HSWqbdKzzf9nWKQ5okFYobimmtU/M0f4uCzEcicViBQ7Fv/nlbhSCCsxbrNCC1oyw==","signatures":[{"sig":"MEYCIQCp8z2GQzodW/3FlzTZ0WKpFyiKo89kMvNHg9fc9tUOdQIhAPPoDie3RGvU0A+HfRhbNzN33XG/e6w0zYMph+M+riqi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daanrongen%2fsignal-mcp@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1511863},"main":"./dist/main.js","type":"module","_from":"file:daanrongen-signal-mcp-1.0.1.tgz","engines":{"bun":">=1.0.0"},"scripts":{"dev":"bun --watch src/main.ts","lint":"biome check .","test":"bun test","build":"bun build src/main.ts --outfile dist/main.js --target bun","format":"biome format --write .","typecheck":"tsc -p tsconfig.check.json","postversion":"git push --follow-tags","release:major":"npm version major","release:minor":"npm version minor","release:patch":"npm version patch"},"_npmUser":{"name":"daanrongen","email":"hi@daan.website"},"_resolved":"/home/runner/work/signal-mcp/signal-mcp/daanrongen-signal-mcp-1.0.1.tgz","_integrity":"sha512-Q9Yguz9FECVh0/S1jz8d4HSWqbdKzzf9nWKQ5okFYobimmtU/M0f4uCzEcicViBQ7Fv/nlbhSCCsxbrNCC1oyw==","repository":{"url":"git+https://github.com/daanrongen/signal-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"MCP server for Signal messaging via signal-cli JSON-RPC","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.24.1","effect":"^3.21.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lefthook":"^2.1.5","bun-types":"latest","typescript":"^5.8.3","@biomejs/biome":"^2.4.12"},"_npmOperationalInternal":{"tmp":"tmp/signal-mcp_1.0.1_1776551114544_0.8819707215513324","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@daanrongen/signal-mcp","version":"1.0.2","_id":"@daanrongen/signal-mcp@1.0.2","maintainers":[{"name":"daanrongen","email":"hi@daan.website"}],"homepage":"https://github.com/daanrongen/signal-mcp#readme","bugs":{"url":"https://github.com/daanrongen/signal-mcp/issues"},"bin":{"signal-mcp":"dist/main.js"},"dist":{"shasum":"06fef0605241ddf154e4cbc1f3d41224f0308c51","tarball":"https://registry.npmjs.org/@daanrongen/signal-mcp/-/signal-mcp-1.0.2.tgz","fileCount":3,"integrity":"sha512-WZipRAhDBr4647zEeGoFn+31WXSWezWyHrzHsI3oOPJQKK9PS/Y0OuYMndVD60+1+Vju3hn5YCA3qXoJVvCNmg==","signatures":[{"sig":"MEUCIQD8rjLyi3l10IlMCsBybtzPkz3/SVJuX8nzREW39qGJNQIgOpKDHDsMsJZE6xooIsLfgIn25b0xknWCQO3KfhZTx4I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daanrongen%2fsignal-mcp@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1513703},"main":"./dist/main.js","type":"module","_from":"file:daanrongen-signal-mcp-1.0.2.tgz","engines":{"bun":">=1.0.0"},"scripts":{"dev":"bun --watch src/main.ts","lint":"biome check .","test":"bun test","build":"bun build src/main.ts --outfile dist/main.js --target bun","format":"biome format --write .","typecheck":"tsc -p tsconfig.check.json","postversion":"git push --follow-tags","release:major":"npm version major","release:minor":"npm version minor","release:patch":"npm version patch"},"_npmUser":{"name":"daanrongen","email":"hi@daan.website"},"_resolved":"/home/runner/work/signal-mcp/signal-mcp/daanrongen-signal-mcp-1.0.2.tgz","_integrity":"sha512-WZipRAhDBr4647zEeGoFn+31WXSWezWyHrzHsI3oOPJQKK9PS/Y0OuYMndVD60+1+Vju3hn5YCA3qXoJVvCNmg==","repository":{"url":"git+https://github.com/daanrongen/signal-mcp.git","type":"git"},"_npmVersion":"10.9.7","description":"MCP server for Signal messaging via signal-cli JSON-RPC","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.24.1","effect":"^3.21.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lefthook":"^2.1.5","bun-types":"latest","typescript":"^5.8.3","@biomejs/biome":"^2.4.12"},"_npmOperationalInternal":{"tmp":"tmp/signal-mcp_1.0.2_1776553498213_0.6487550200814898","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@daanrongen/signal-mcp","version":"1.0.5","description":"MCP server for Signal messaging via signal-cli JSON-RPC","type":"module","bin":{"signal-mcp":"dist/main.js"},"main":"./dist/main.js","scripts":{"dev":"bun --watch src/main.ts","build":"bun build src/main.ts --outfile dist/main.js --target bun","typecheck":"tsc -p tsconfig.check.json","test":"bun test","lint":"biome check .","format":"biome format --write .","release:patch":"npm version patch","release:minor":"npm version minor","release:major":"npm version major","postversion":"git push --follow-tags"},"engines":{"bun":">=1.0.0"},"repository":{"type":"git","url":"git+https://github.com/daanrongen/signal-mcp.git"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","effect":"^3.21.0","zod":"^3.24.1"},"devDependencies":{"@biomejs/biome":"^2.4.12","bun-types":"latest","lefthook":"^2.1.5","typescript":"^5.8.3"},"_id":"@daanrongen/signal-mcp@1.0.5","bugs":{"url":"https://github.com/daanrongen/signal-mcp/issues"},"homepage":"https://github.com/daanrongen/signal-mcp#readme","_integrity":"sha512-u30XL+E3uR/yS/AjuvrZpZQ/1itqjnHj8YDg+aRHJyVTWziGKS+dY7vlPKQLtYRhjYrSRjskLYXU8vXaqhLUNg==","_resolved":"/home/runner/work/signal-mcp/signal-mcp/daanrongen-signal-mcp-1.0.5.tgz","_from":"file:daanrongen-signal-mcp-1.0.5.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-u30XL+E3uR/yS/AjuvrZpZQ/1itqjnHj8YDg+aRHJyVTWziGKS+dY7vlPKQLtYRhjYrSRjskLYXU8vXaqhLUNg==","shasum":"babb808e69f1c05f19e4991ff9ece4ac952d20d9","tarball":"https://registry.npmjs.org/@daanrongen/signal-mcp/-/signal-mcp-1.0.5.tgz","fileCount":3,"unpackedSize":1513703,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daanrongen%2fsignal-mcp@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDikKWM9gqO7oWQhadw8og32+zErLiUi6DJWRryEPFGbAiEAvpSofr/cIoDcinq8sJOurrzuUivud0dDkv1n3FhZJSw="}]},"_npmUser":{"name":"daanrongen","email":"hi@daan.website"},"directories":{},"maintainers":[{"name":"daanrongen","email":"hi@daan.website"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/signal-mcp_1.0.5_1776719194998_0.049150984603520964"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-18T22:25:14.414Z","modified":"2026-04-20T21:06:35.583Z","1.0.1":"2026-04-18T22:25:14.698Z","1.0.2":"2026-04-18T23:04:58.387Z","1.0.5":"2026-04-20T21:06:35.297Z"},"bugs":{"url":"https://github.com/daanrongen/signal-mcp/issues"},"homepage":"https://github.com/daanrongen/signal-mcp#readme","repository":{"type":"git","url":"git+https://github.com/daanrongen/signal-mcp.git"},"description":"MCP server for Signal messaging via signal-cli JSON-RPC","maintainers":[{"name":"daanrongen","email":"hi@daan.website"}],"readme":"# signal-mcp\n\nMCP server for [Signal](https://signal.org/) via signal-cli — send messages, receive messages, manage contacts and groups, react, and more over stdio.\n\n## Installation\n\n```bash\nbunx @daanrongen/signal-mcp\n```\n\n## Tools (10 total)\n\n| Domain        | Tools                                                                                                     | Coverage                                                              |\n| ------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |\n| **Contacts**  | `list_accounts`, `list_contacts`, `list_groups`, `get_user_status`                                        | Account listing, contact and group management, registration checks    |\n| **Messaging** | `send_message`, `send_attachment`, `receive_messages`, `subscribe_messages`, `send_reaction`, `send_typing`, `mark_as_read` | Send text and files, poll or subscribe for incoming messages, reactions, typing indicators, read receipts |\n\n## Configuration\n\n| Variable     | Required | Description                                          |\n| ------------ | -------- | ---------------------------------------------------- |\n| `SIGNAL_URL` | Yes      | signal-cli base URL (e.g. `http://localhost:8080`)   |\n\n## Setup\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"signal\": {\n      \"type\": \"stdio\",\n      \"command\": \"bunx\",\n      \"args\": [\"@daanrongen/signal-mcp\"],\n      \"env\": {\n        \"SIGNAL_URL\": \"http://localhost:8080\"\n      }\n    }\n  }\n}\n```\n\n### Claude Code CLI\n\n```bash\nclaude mcp add signal -e SIGNAL_URL=http://localhost:8080 -- bunx @daanrongen/signal-mcp\n```\n\n## Development\n\n```bash\nbun install\nbun run dev        # watch mode\nbun test           # run tests\nbun run typecheck  # tsc type check\nbun run lint       # biome check\nbun run build      # bundle to dist/main.js\n```\n\n## Architecture\n\n```\nsrc/\n  config.ts              # SIGNAL_URL env var config\n  errors.ts              # SignalError, SignalRpcError tagged errors\n  main.ts                # stdio entry point, ManagedRuntime setup\n  domain/\n    SignalClient.ts       # port interface (Context.Tag)\n    models.ts             # Schema.Class domain models\n    signal.test.ts        # unit tests against test adapter\n  infra/\n    SignalClientLive.ts   # HTTP JSON-RPC adapter (signal-cli)\n    SignalClientTest.ts   # in-memory test adapter\n  mcp/\n    server.ts             # McpServer factory, tool registration\n    utils.ts              # runTool, formatSuccess helpers\n    tools/\n      contacts.ts         # list_accounts, list_contacts, list_groups, get_user_status\n      messaging.ts        # send_message, send_attachment, receive_messages, subscribe_messages, send_reaction, send_typing, mark_as_read\n```\n\nHexagonal architecture: domain port (`SignalClient`) is injected via Effect `Layer`. The live adapter calls the signal-cli JSON-RPC HTTP API; the test adapter returns predictable in-memory values.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}