thaibulksms
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@thaibulksmsCheck my SMS credit balance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@thaibulksms/tbs
Zero-dependency MCP & CLI for ThaiBulkSMS and ThaiBulkMail APIs.
Install
npm install -g @thaibulksms/tbsRelated MCP server: seven-mcp
Quick Start
# 1. Save credentials (from developer.thaibulksms.com)
tbs login
# 2. Use it
tbs send 0812345678 "Hello" --sender OTP_SMS # Send SMS
tbs email a@b.com "Subject" --from s@d.com --template <uuid> # Send email
tbs credit # Check balance
tbs otp 0812345678 # SMS OTP
tbs email-otp a@b.com --template <uuid> # Email OTPNo install needed with npx:
npx @thaibulksms/tbs login
npx @thaibulksms/tbs send 0812345678 "Hello"Add to AI Agent (MCP)
Claude Code
claude mcp add thaibulksms \
-e THAIBULKSMS_API_KEY=xxx \
-e THAIBULKSMS_API_SECRET=xxx \
-e THAIBULKSMS_OTP_KEY=xxx \
-e THAIBULKSMS_OTP_SECRET=xxx \
-- npx -y @thaibulksms/tbsOr .mcp.json (project-scoped, commit to git):
{
"mcpServers": {
"thaibulksms": {
"command": "npx",
"args": ["-y", "@thaibulksms/tbs"],
"env": {
"THAIBULKSMS_API_KEY": "${THAIBULKSMS_API_KEY}",
"THAIBULKSMS_API_SECRET": "${THAIBULKSMS_API_SECRET}",
"THAIBULKSMS_OTP_KEY": "${THAIBULKSMS_OTP_KEY}",
"THAIBULKSMS_OTP_SECRET": "${THAIBULKSMS_OTP_SECRET}"
}
}
}
}Gemini CLI
gemini mcp add thaibulksms -- npx -y @thaibulksms/tbsOpenCode
{
"mcp": {
"thaibulksms": {
"type": "local",
"command": ["npx", "-y", "@thaibulksms/tbs"],
"environment": {
"THAIBULKSMS_API_KEY": "{env:THAIBULKSMS_API_KEY}",
"THAIBULKSMS_API_SECRET": "{env:THAIBULKSMS_API_SECRET}",
"THAIBULKSMS_OTP_KEY": "{env:THAIBULKSMS_OTP_KEY}",
"THAIBULKSMS_OTP_SECRET": "{env:THAIBULKSMS_OTP_SECRET}"
},
"enabled": true
}
}
}OpenClaw
OpenClaw reads .mcp.json (same as Claude Code). Drop the .mcp.json file in your project root — OpenClaw picks it up automatically.
Claude Desktop
Config: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
{
"mcpServers": {
"thaibulksms": {
"command": "npx",
"args": ["-y", "@thaibulksms/tbs"],
"env": {
"THAIBULKSMS_API_KEY": "your_key",
"THAIBULKSMS_API_SECRET": "your_secret",
"THAIBULKSMS_OTP_KEY": "your_otp_key",
"THAIBULKSMS_OTP_SECRET": "your_otp_secret"
}
}
}
}Then ask your agent: "Check my SMS credit balance"
CLI Commands
tbs login Save API credentials
tbs credit Check SMS + email credit
tbs send <to> <message> Send SMS
tbs email <to> <subject> Send email (template)
tbs otp <to> Request SMS OTP
tbs verify <token> <pin> Verify SMS OTP
tbs email-otp <to> Request email OTP
tbs email-verify <token> <code> Verify email OTP
tbs profiles List saved profiles
tbs help <command> Per-command helpFlags
Flag | Description | Commands |
| SMS sender ID (default: |
|
| Sender email address |
|
| Template UUID |
|
| Machine-readable output | all |
| Use specific profile | all |
Examples
tbs send 0812345678 "Hello" --sender OTP_SMS
tbs send 0812345678 "Hello" --json
tbs email user@example.com "Subject" --from sender@domain.com --template <uuid>
tbs credit --json
tbs otp 0812345678
tbs verify <token> 1234
tbs email-otp user@example.com --template <uuid>
tbs email-verify <token> 733923
tbs login --profile production
tbs credit --profile productionMCP Tools (8)
Tool | Description |
| Send SMS to one Thai mobile number |
| Send email via ThaiBulkMail template |
| Check SMS credit balance |
| Check email credit balance |
| Send OTP PIN via SMS |
| Verify SMS OTP PIN |
| Send OTP code via email |
| Verify email OTP code |
Credentials & Setup
API Keys
What | Where to get it |
SMS/Email API Key & Secret | |
SMS OTP Key & Secret | |
SMS Sender Name | Dashboard > Sender Name (must register before use) |
Email Template | Dashboard > Email Templates (create and copy template UUID) |
Email OTP Template | Dashboard > Email OTP (create and copy template UUID) |
Environment Variables
Variable | For | Required |
| SMS, Email | Yes |
| SMS, Email | Yes |
| SMS OTP | For OTP |
| SMS OTP | For OTP |
Precedence: --profile flag > env vars > ~/.config/tbs/default.json
SMS/Email use HTTP Basic Auth. SMS OTP uses separate key/secret in request body. Email OTP uses the same Basic Auth as email.
Architecture
src/
index.ts Entry point — CLI commands or MCP (no args)
cli.ts Twilio-style CLI handlers
profile.ts Credential storage (~/.config/tbs/, chmod 0600)
transport.ts MCP JSON-RPC stdio transport (~80 lines)
server.ts MCP tool definitions (raw JSON Schema) + handlers
client.ts ThaiBulk HTTP client (fetch + Basic Auth)
validators.ts Phone/email validation (pure regex)Zero runtime dependencies. No @modelcontextprotocol/sdk (26MB, 91 packages). Just ~80 lines of JSON-RPC stdio transport using Node.js built-ins.
Development
npm install # Dev deps only
npm test # Node.js
npm run test:bun # Bun
npm run build # CompileSecurity
Credentials in
~/.config/tbs/(chmod 0600) or env vars — never hardcodedSingle-recipient only — no bulk sends
Thai mobile validation, email header injection prevention
Human-in-the-loop for destructive MCP tools
Zero runtime deps = zero supply chain risk
Links
GitHub: github.com/thaibulksms/tbs
API Docs: developer.thaibulksms.com
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thaibulksms/tbs'
If you have feedback or need assistance with the MCP directory API, please join our Discord server