← Back to search

simrelay-mcp-server

GitHub Actions Scanned 22h ago

MCP server for SimRelay — list SIMs, lock/release them, fetch message history, and stream incoming SMS in real time over WebSocket.

npm
B
76.9 / 100

Versions

No versions found.

PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 11

simrelay_login
annotations: verified low

Sign in to SimRelay via OAuth. Opens the user's default browser to the SimRelay authorization page; after they authorize, tokens are saved locally and refreshed automatically. Returns the path where tokens were stored. Call this when the user asks to log in or when another tool fails with 'Not authenticated'.

readOnlyHint false openWorldHint true idempotentHint true destructiveHint false
simrelay_logout
annotations: verified low

Forget the saved SimRelay OAuth tokens. Idempotent — safe to call even when not signed in. After this, the next tool call that needs auth will require simrelay_login again.

readOnlyHint false openWorldHint false idempotentHint true destructiveHint true
list_sims
annotations: verified low

List all SIMs the authenticated user can access, grouped by team. Each SIM includes id, phone_number, status, alias (organization-pivot label), organization, type, messages_received_count, and current lock state (unlocked, or locked-by-user with expiry). The response is structured as `groups: [{ team, sims: [...] }, ...]` plus a top-level flat `sims` array for convenience.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
lock_sim
annotations: verified low

Acquire an exclusive lock on a SIM so other users/agents cannot send or read messages on it. Locks expire automatically after the server-configured TTL (typically a few minutes). Use the integer hosted_sim_id from list_sims.

readOnlyHint false openWorldHint true idempotentHint false destructiveHint true
release_sim_lock
annotations: verified low

Release a previously acquired lock on a SIM. Idempotent — safe to call even if the lock has already expired or never existed.

readOnlyHint false openWorldHint true idempotentHint true destructiveHint true
get_sim_messages
annotations: verified low

Retrieve historical SMS messages for a SIM, paginated. Returns a normalized list (id, sim_id, direction, from, to, text, received_at) plus pagination metadata.

readOnlyHint true openWorldHint true idempotentHint true destructiveHint false
subscribe_to_messages
annotations: verified low

Open (or reuse) a WebSocket subscription that streams new SMS for the authenticated user. Each incoming SMS is pushed as an MCP `notifications/message` (logger=simrelay-sms, level=info, JSON-encoded payload). Also kept in an internal ring buffer of the most recent 100. Pass sim_id to filter to a single SIM. Idempotent — calling again updates the filter and returns the current subscription state.

readOnlyHint false openWorldHint true idempotentHint true destructiveHint false
wait_for_next_sms
annotations: verified low

Block until the next SMS arrives (optionally filtered by sim_id) and return its payload. Use this when an agent expects a code/OTP imminently — the call returns synchronously with the message so you don't have to poll. Ensures a WebSocket subscription is open before waiting; reuses any existing one. Default timeout is 60s, max 300s. Throws after the timeout if no matching SMS arrives.

readOnlyHint true openWorldHint true idempotentHint false destructiveHint false
get_recent_sms
annotations: verified low

Return the N most-recent SMS messages captured by the WebSocket subscription in this server's lifetime (in-memory ring buffer, capacity 100). Filter by sim_id if provided. Returns an empty list if the subscription was never started or no matching SMS has arrived since startup. For historical messages persisted by SimRelay, use get_sim_messages instead.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
get_subscription_status
annotations: verified low

Return the current WebSocket subscription state, the channel we're listening on, the active filter, and the most recent buffered SMS events. Useful for diagnosing why messages aren't arriving.

readOnlyHint true openWorldHint false idempotentHint true destructiveHint false
unsubscribe_from_messages
annotations: verified low

Stop the real-time SMS stream and close the WebSocket. Idempotent — safe to call even if no subscription is active.

readOnlyHint false openWorldHint false idempotentHint true destructiveHint false

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 37

info
Tool 'simrelay_login' annotations are consistent annotation_checker · 80%
info
Tool 'simrelay_logout' annotations are consistent annotation_checker · 80%
info
Tool 'list_sims' annotations are consistent annotation_checker · 80%
info
Tool 'lock_sim' annotations are consistent annotation_checker · 80%
info
Tool 'release_sim_lock' annotations are consistent annotation_checker · 80%
info
Tool 'get_sim_messages' annotations are consistent annotation_checker · 80%
info
Tool 'subscribe_to_messages' annotations are consistent annotation_checker · 80%
info
Tool 'wait_for_next_sms' annotations are consistent annotation_checker · 80%
info
Tool 'get_recent_sms' annotations are consistent annotation_checker · 80%
info
Tool 'get_subscription_status' annotations are consistent annotation_checker · 80%
info
Tool 'unsubscribe_from_messages' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.16.0 (GHSA-345p-7cg4-v4c7) dependency_analyzer · 95%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.16.0 (GHSA-8r9q-7v3j-jr4g) dependency_analyzer · 95%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.16.0 (GHSA-w48q-cv73-mx4w) dependency_analyzer · 95%
medium
Vulnerable dependency: ws@8.18.0 (GHSA-58qx-3vcg-4xpx) dependency_analyzer · 95%
medium
Vulnerable dependency: ws@8.18.0 (GHSA-96hv-2xvq-fx4p) dependency_analyzer · 95%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (8) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
info
package.json metadata manifest_parser · 100%
info
Tool: simrelay_login manifest_parser · 85%
info
Tool: simrelay_logout manifest_parser · 85%
info
Tool: list_sims manifest_parser · 85%
info
Tool: lock_sim manifest_parser · 85%
info
Tool: release_sim_lock manifest_parser · 85%
info
Tool: get_sim_messages manifest_parser · 85%
info
Tool: subscribe_to_messages manifest_parser · 85%
info
Tool: wait_for_next_sms manifest_parser · 85%
info
Tool: get_recent_sms manifest_parser · 85%
info
Tool: get_subscription_status manifest_parser · 85%
info
Tool: unsubscribe_from_messages manifest_parser · 85%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 112 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%