Omni MCP
Use Azmarq SMS, WhatsApp, RCS, and OTP from Claude Desktop, Cursor, or a hosted HTTP connector. This package wraps the published azmarqomni Node SDK. It does not change that SDK, and it does not change the HTTP API on this hub.
Two packages. Application code installs azmarqomni. Agents install azmarqomni-mcp. Pin azmarqomni-mcp@0.1.1 — that is the release with campaign tagging (Source-MCP). Send tools call https://api.azmarq.com with the apikey header and may incur charges. There is no sandbox flag.
Install
Need Node.js 20+.
Global
npm install -g azmarqomni-mcp@0.1.1
Or run without a global install:
npx
npx -y azmarqomni-mcp@0.1.1
Pin the version (@0.1.1) so you do not silently pick up a later release.
API key
- Sign in to the Azmarq console.
- Open Developer → API Key.
- Copy the key. Put it in the host
envor, for HTTP, in a request header. Never put it in chat or in tool arguments.
The Azmarq API uses the apikey header, not a Bearer token. Same key as Authentication.
Treat a project-level MCP config file as untrusted code. Prefer a user-global config for your key. Do not set AZMARQ_BASE_URL from a repo you did not write.
Campaign reporting (Source-MCP)
Every WhatsApp, RCS, and unified send from this MCP sets campaignName to Source-MCP, or Source-MCP- plus the name the customer (or the model) passes. Example: abc is stored as Source-MCP-abc.
Use that prefix on the Azmarq dashboard reporting panel to attribute MCP traffic. SMS send paths in the live API do not take campaignName.
Claude Desktop
Edit the Claude Desktop config, then fully quit Claude (Cmd+Q / Exit) and reopen it.
| OS | File |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
claude_desktop_config.json
{
"mcpServers": {
"azmarq": {
"command": "npx",
"args": ["-y", "azmarqomni-mcp@0.1.1"],
"env": {
"AZMARQ_API_KEY": "your-api-key"
}
}
}
}
If Claude cannot find npx (common with nvm), set "command" to the full path from which npx or which node and pass the built CLI.
You should see an azmarq MCP server. Ask: “List my WhatsApp templates” or “Send an SMS from SENDER to 98xxxxxxxx”.
Cursor
Project file .cursor/mcp.json or user file ~/.cursor/mcp.json. Use the same mcpServers.azmarq block as Claude Desktop. User-global config is safer for the API key.
mcp.json
{
"mcpServers": {
"azmarq": {
"command": "npx",
"args": ["-y", "azmarqomni-mcp@0.1.1"],
"env": {
"AZMARQ_API_KEY": "your-api-key"
}
}
}
}
HTTP (ChatGPT, Gemini, Grok, Claude.ai)
Those hosts need a URL, not npx. Run the same package with --http:
Local HTTP
npx -y azmarqomni-mcp@0.1.1 --http --host 127.0.0.1 --port 3333
- Default bind is 127.0.0.1 (this machine only).
GET /health— no key required.- MCP endpoint —
http://127.0.0.1:3333/mcp
On localhost, the key may come from AZMARQ_API_KEY or from a request header.
To expose it on the internet (behind HTTPS you terminate):
Public bind
npx -y azmarqomni-mcp@0.1.1 --http --host 0.0.0.0 --port 3333
On a public bind, AZMARQ_API_KEY in the environment is ignored. Every request must send the customer’s key:
| Header | Value |
|---|---|
apikey | Azmarq API key (preferred) |
x-api-key | Same |
Authorization: Bearer … | Accepted because some hosts only send this. The process still calls Azmarq with the apikey header. |
Put HTTPS and a firewall in front. Do not run --host 0.0.0.0 on a raw public IP without TLS. A shared process-wide key would let anyone send SMS on one account; that is why public HTTP requires a per-request key.
Example customer connector:
- URL:
https://mcp.your-domain.com/mcp - Header:
apikey: their-azmarq-key
Claude.ai, ChatGPT, Gemini, and Grok each have their own custom connector / MCP UI. Paste that URL and header there. If a host cannot send custom headers, it cannot use a safe public Azmarq MCP.
Tools
There is no generic HTTP tool. Payload details stay on this hub.
| Tool | What it does |
|---|---|
send_sms / send_sms_template | Live SMS |
send_whatsapp_* / send_whatsapp | Live WhatsApp |
send_rcs / send_message | Live RCS or unified send |
generate_otp / validate_otp | OTP start / check |
whatsapp_template | list / get / create |
whatsapp_group | Group admin (includes delete and billed group send) |
rcs_template | list / get / create / update / delete |
Environment
| Variable | Meaning |
|---|---|
AZMARQ_API_KEY | Stdio and localhost HTTP only. |
AZMARQ_BASE_URL | Must be https://api.azmarq.com or unset. Other hosts are rejected. |
AZMARQ_DEFAULT_COUNTRY_CODE | Default 91. |
AZMARQ_MCP_HTTP | 1 to start HTTP instead of stdio. |
AZMARQ_MCP_HOST / AZMARQ_MCP_PORT | HTTP bind. Defaults 127.0.0.1 / 3333. |
Inspect
Inspector
npx @modelcontextprotocol/inspector npx azmarqomni-mcp@0.1.1
Set AZMARQ_API_KEY in the inspector before a send tool.
Security
- The key never belongs in tool arguments.
- Error JSON redacts fields named like
apikey,token, orsecret. - Billed tools set
destructiveHintso hosts can require approval. AZMARQ_BASE_URLis allowlisted so a projectmcp.jsoncannot point your key at an attacker host.- Public HTTP ignores a process env key and requires a per-request customer key.
SDK vs MCP
Install and send from application code on Omni SDK. HTTP routes and payloads stay on Quickstart, SMS, WhatsApp, RCS, and OTP.