The blocking wait is the design that makes it usable — the agent asks for the code and gets it, instead of polling and reasoning about whether the message has landed. Sessions hold real allocations, so releasing them matters, and list_numbers exists precisely to find the ones a failed run left behind.
An MCP server for AgentSIM. It gives an agent a programmable phone number to receive SMS one-time codes, blocks until the code arrives, and returns it — so a signup or login flow that needs a text message can be finished without a human holding a handset.
- provision_number — lease a temporary number for receiving SMS OTP codes, returning the number in E.164 form and the session id every later call needs
- wait_for_otp — block until an SMS code arrives for the session, polling up to a timeout you set, and return the code with the message it came from
- get_messages — list every SMS received on the session without consuming the code, for inspecting the raw text or confirming one arrived
- release_number — return the allocation to the pool; worth calling even on the error path so capacity is not held
- list_numbers — the active sessions on the account, optionally by agent, to find leaked ones
An AgentSIM API key in AGENTSIM_API_KEY, from console.agentsim.dev. Clients run uvx agentsim-mcp over stdio, or connect to the hosted server at https://mcp.agentsim.dev/mcp over Streamable HTTP with the key in an x-api-key header. Numbers are US only.
One command plus a key — uvx agentsim-mcp, then supply credentials
