What this does
When you ask Claude or ChatGPT to text someone, it sends the text from your phone, and it can read the texts you get back. It can text any number you ask it to, and it asks you before each text goes out. You add Sparetext once, as a "custom connector" in Claude or ChatGPT: copy the address below, then follow the steps for your app.
You need a plan that allows custom connectors. On Claude, every plan does (the free plan allows one). On ChatGPT, it depends on your plan and workspace.
Your connection address
Livesend_smsSend a text to one or more numberswait_for_replyWait a few seconds for a reply or a codeget_conversationRead the thread with one numberlist_conversationsWho texted, with unread countsmark_readClear the unread count for a numberlist_messagesSearch sent and received textsget_messageCheck one text's statuscancel_textStop a text that hasn't gone out yetlist_devicesWhich phones are online, and how they sendget_statsTotals for the last N days
claude.ai, Claude Desktop and the Claude apps
- 1Open Customize › Connectors and choose Add custom connector.
- 2Paste the server URL. Leave the OAuth client fields empty.https://sparetext.dev/mcp
- 3Click Add, then Connect. A Sparetext page opens: sign in and choose Allow. If Claude asks how to sign in, pick Sign in now and Use Claude's published identity.
- 4In a chat, open + › Connectors, turn on Sparetext, and ask: “Text +44 7700 900124 that I'm running 10 minutes late.”
Claude asks before each send. The Free plan allows one custom connector. On Team and Enterprise plans an Owner adds it first, under Organization settings › Connectors.
Claude Code
claude mcp add --transport http --scope user \
sparetext https://sparetext.dev/mcp
claude mcp login sparetextThe login opens a Sparetext page: choose Allow. Inside Claude Code, /mcp does the same. Or skip the browser and pass a key:
claude mcp add --transport http --scope user \
sparetext https://sparetext.dev/mcp \
--header "Authorization: Bearer YOUR_API_KEY"As a plugin (custom MCP server)
- 1On the web, open chatgpt.com/plugins, select +, then Add custom MCP server.
- 2Name it Sparetext, paste the Server URL and set Authentication to OAuth:https://sparetext.dev/mcp
- 3Select I understand and want to continue, then Create as a plugin. When ChatGPT sends you to Sparetext, sign in and choose Allow.
- 4Install the plugin from your plugins. In a new chat, type @, pick Sparetext and ask it to send or read a text. ChatGPT asks you to confirm each send.
Your plan and workspace settings decide whether you can add custom MCP servers. After we add tools, open the plugin and choose Refresh.
Custom GPTs
OpenAI retires custom GPTs on December 11, 2026, and their Actions don't carry over to plugins. Connect Sparetext as a plugin instead. Other tools can still import our OpenAPI spec.
Cursor
Add Sparetext to ~/.cursor/mcp.json (or .cursor/mcp.json in a project). Cursor signs you in with OAuth: choose Allow on the Sparetext page.
{
"mcpServers": {
"sparetext": {
"url": "https://sparetext.dev/mcp"
}
}
}Or use a key from your environment, so it never sits in the file:
{
"mcpServers": {
"sparetext": {
"url": "https://sparetext.dev/mcp",
"headers": {
"Authorization": "Bearer ${env:SPARETEXT_API_KEY}"
}
}
}
}Other MCP clients
Most take the same URL and sign in with OAuth, or send the header Authorization: Bearer YOUR_API_KEY.
Clients that only take a URL
Put the key in the address. Treat this URL like a password: anyone with it can text from your phone.
Local stdio clients
Bridge with mcp-remote:
{
"mcpServers": {
"sparetext": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://sparetext.dev/mcp",
"--header",
"Authorization: Bearer YOUR_API_KEY"
]
}
}
}Connect the MCP server
- 1Save your key in the Gateway's env file, add the server, and restart:Terminal
echo 'SPARETEXT_API_KEY=YOUR_API_KEY' >> ~/.openclaw/.env openclaw mcp set sparetext '{"url":"https://sparetext.dev/mcp","transport":"streamable-http","headers":{"Authorization":"Bearer ${SPARETEXT_API_KEY}"}}' openclaw gateway restart - 2Check it answers:
openclaw mcp doctor sparetext --probe - 3Ask your agent: “text +44 7700 900124 that the build passed.”
To sign in with OAuth instead, set "auth": "oauth" in place of the header, stop the Gateway and run openclaw mcp login sparetext.
Or install the Sparetext skill
Download the skill and unzip it into ~/.openclaw/skills, so you have sparetext/SKILL.md. It reads SPARETEXT_API_KEY and uses the sparetext command when it's installed (it ships in the Mac download), or curl.
sparetext login YOUR_API_KEY --server https://sparetext.dev
sparetext send --to +44 7700 900124 --text "Build passed"
sparetext wait --contact +44 7700 900124 --timeout 120Start a new session (/new) or restart the Gateway so it loads.
Give an n8n AI Agent the tools
Add an MCP Client Tool to the agent. Endpoint: the MCP URL. Server Transport: HTTP Streamable. Authentication: MCP OAuth2 to sign in, or Bearer Auth with an API key.
Send from a workflow
Add an HTTP Request step:
POST https://sparetext.dev/api/v1/messages
x-api-key: YOUR_API_KEY
content-type: application/json
{"to": "+44 7700 900124", "text": "Order #1042 has shipped"}Start a workflow when a text arrives
Use a Webhook trigger in your tool, then add its URL on the Webhooks page with the Text received event. Every delivery is signed. In n8n, check it in a Code node right after the trigger:
const crypto = require('crypto');
const secret = 'YOUR_WEBHOOK_SECRET'; // from Sparetext › Webhooks
const { headers, body } = $input.first().json;
const sig = Object.fromEntries(String(headers['x-sparetext-signature'] ?? '').split(',').map((p) => p.split('=')));
const expected = crypto.createHmac('sha256', secret).update(`${sig.t}.${JSON.stringify(body)}`).digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(sig.t)) < 300;
if (!fresh || String(sig.v1).length !== expected.length || !crypto.timingSafeEqual(Buffer.from(String(sig.v1)), Buffer.from(expected))) {
throw new Error('This request did not come from Sparetext.');
}
return $input.all();Self-hosted n8n needs NODE_FUNCTION_ALLOW_BUILTIN=crypto. The signature is t=<unix seconds>,v1=<hex HMAC-SHA256> over <t>.<body>. Sparetext signs compact JSON, so re-serializing the parsed body gives back the exact bytes.
Zapier and Make
To react to texts, use Webhooks by Zapier › Catch Hook or Make's Custom webhook as the trigger, and add that URL on the Webhooks page as above. To send, add Zapier's Webhooks by Zapier › POST or Make's HTTP › Make a request step with the request on the left.
Agents send texts to real people from your number. Each connection gets its own key, listed on API keys, where you can cut it off at any time.