ClickSend MCP server for AI agents

Live

API USERNAME + API KEY

SMS MESSAGING

Communication

ClickSend gives your agent business messaging from your ClickSend account: send SMS, MMS, and text-to-speech calls, run SMS campaigns to contact lists, post letters and postcards, and check delivery receipts and history.

  • Per-user credentials: each call uses the actual user's credentials, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
ClickSend
agent · Acme Q3
Run
Did yesterday's appointment reminders go out?
S
clicksend_sms_history_list
104ms
Messaging agent
142 reminder texts went out yesterday. 138 were delivered and 4 failed on invalid numbers.
Sources: SMS history, 142 messages
clicksend
142 messages
18:29
Message Claude...

Tools your messaging agent reaches for on ClickSend, scoped per user.

CALL ANY TOOL
84 tools for SMS messaging in ClickSend: send SMS, MMS, voice calls, faxes, letters, and postcards, run SMS campaigns, manage contact lists and templates, price a send before it goes, and read receipts and history.
clicksend_account_get
Get account
Get the authenticated ClickSend account's details. Returns user_id, username, name, email, country, currency, balance and account settings. Use clicksend_account_get to check credit balance or confirm the connection works. Use clicksend_account_usage_get for monthly usage.
Parameters
Name
Type
Required
Description
—
No parameters required
clicksend_contact_copy
Copy contact
clicksend_contact_create
Create contact
clicksend_contact_delete
Delete contact
clicksend_contact_get
Get contact
clicksend_contact_update
Update contact
clicksend_contacts_lists_search
Search contacts lists
clicksend_countries_list
List countries
clicksend_email_address_verification_send
Send email address verification
clicksend_email_address_verify
Verify email address
clicksend_email_history_list
List email history
clicksend_letter_cancel
Cancel letter
clicksend_letter_history_list
List letter history
clicksend_letter_price_calculate
Letter price calculate
clicksend_letter_send
Send letter
clicksend_list_create
Create list
clicksend_list_opted_out_remove
Remove list opted out
clicksend_mms_history_list
List mms history
clicksend_postcard_history_list
List postcard history
clicksend_return_address_create
Create return address
clicksend_return_address_get
Get return address
clicksend_sms_campaign_cancel
Cancel sms campaign
clicksend_sms_campaign_price_calculate
Sms campaign price calculate
clicksend_sms_campaign_send
Send sms campaign
clicksend_sms_history_list
List sms history
clicksend_sms_inbound_get
Get sms inbound
clicksend_sms_inbound_mark_all_read
Read sms inbound mark all
clicksend_sms_template_get
Get sms template
clicksend_sms_templates_list
List sms templates
clicksend_voice_history_list
List voice history

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// ClickSend tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["clicksend"], toolNames: [
    "clicksend_sms_price_calculate",
    "clicksend_sms_send",
    "clicksend_sms_receipt_get"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Text the order shipped notice to +14155550123 and confirm delivery" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["clicksend"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Text the order shipped notice to +14155550123 and confirm delivery" }],
  tools,
});

// Execute the tool call with the user's vaulted ClickSend API username and API key
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["clicksend"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Text the order shipped notice to +14155550123 and confirm delivery" }],
  tools,
});

// Tool call runs with the user's vaulted ClickSend API username and API key
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["clicksend"] }, pageSize: 100,
});

const agent = new Agent({
  name: "messaging_agent",
  model: "gemini-2.5-pro",
  instruction: "ClickSend tools scoped to this user",
  tools,
});

await agent.run("Text the order shipped notice to +14155550123 and confirm delivery");
Try these prompts
Copy any prompt into your agent. Each maps directly to a ClickSend tool. Click to copy, paste into your agent, done.
Messages
Copy the prompt
Copied
Text +14155550123: Your order has shipped and arrives Thursday.
Copy the prompt
Copied
Show the SMS replies we received today.
Copy the prompt
Copied
How much would a 2-part SMS to the VIP Customers list cost?
Campaigns and lists
Copy the prompt
Copied
Schedule an SMS campaign to the Spring Sale list for Monday at 10am.
Copy the prompt
Copied
Create a contact list called Webinar Attendees and import this CSV.
Copy the prompt
Copied
Remove every opted-out number from the Newsletter list.
Voice, fax, and post
Copy the prompt
Copied
Place a text-to-speech call to +14155550123 reminding them of tomorrow's 9am appointment.
Copy the prompt
Copied
Fax the signed contract PDF to +61290000000.
Copy the prompt
Copied
Post this invoice PDF as a letter to our Sydney client.
SEE HOW AUTH WORKS
Each user connects their own ClickSend API username and API key once, and Scalekit sends them with every call. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
ClickSend
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
ClickSend
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
ClickSend
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
ClickSend
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other messaging and communication connectors.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Test other agents
See the same per-user auth pattern across other messaging and communication connectors.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared ClickSend API key looks fine in a demo. In production every text and campaign looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
ClickSend today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access ClickSend as the user or through a shared API key?
As the user. Each user connects their own ClickSend API username and API key once, and Scalekit sends them with every call. Audit logs attribute every message and campaign to that user, not a shared service account.
Where are the ClickSend credentials stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate them, the user reconnects with a new API key. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in ClickSend?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the history, receipt, and price tools without clicksend_sms_campaign_send or clicksend_list_delete, which deletes a list and its contacts. Scalekit also enforces scope checks before every API call.
What happens when ClickSend access is turned off?
Disable the connection in the Scalekit dashboard and the next tool call fails closed with a clear error. Other tenants are unaffected, and the change is logged.
Can the agent check what a send costs before it spends credit?
Yes. ClickSend has price tools for every channel, such as clicksend_sms_price_calculate and clicksend_letter_price_calculate, that return the price without sending. clicksend_account_get returns the account balance, so an agent can confirm the cost before it sends.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""clicksend"": {
""url"": ""https://mcp.scalekit.com/clicksend"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.clicksend]
url = ""https://mcp.scalekit.com/clicksend""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""clicksend"": {
""url"": ""https://mcp.scalekit.com/clicksend"",
""type"": ""http""
}
}
}