360dialog
Server Details
Manage WhatsApp Business accounts on 360Dialog: channels, templates, sandbox, inbox, and more.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 116 tools
Most tools have distinct scoped purposes and the prefixes (getchat_, sandbox_, mba_) help separate product areas. However, the set spans many overlapping surfaces, especially messaging (getchat_send_message, mba_send_message, sandbox_send_message) and agent analytics (usage, event, conversation, and tool-call insights), so agents must rely heavily on descriptions to avoid misselection.
All tool names use snake_case and generally follow a predictable verb_noun or domain_verb_noun pattern. The mixed use of mba_, getchat_, sandbox_, and unprefixed generic tools is a minor inconsistency but remains readable and coherent.
116 tools is far beyond a reasonable scope for a single MCP server and spans templates, billing, onboarding, inbox management, Meta Business Agent configuration, analytics, docs, skills, and sandbox operations. Even though the domain is broad, this is an extreme tool-count mismatch.
The surface is very comprehensive across templates, channels, webhooks, onboarding, billing, users, inbox operations, agent knowledge/connectors, analytics, and sandbox workflows. Some gaps remain, such as template update operations and a general message-send surface outside the inbox/agent/sandbox contexts, but core workflows are covered.
Available Tools
36 toolscheck_number_eligibilityCheck number eligibilityARead-onlyInspect
Check whether a phone number can be onboarded for this client before handing over the onboarding link.
This tool only checks 360Dialog's own database and this client's channel quota. It does not ask WhatsApp/Meta anything, so a number already active on WhatsApp elsewhere (including the personal app) can still come back eligible here.
Inputs: phone_number (required), check_coex. Returns: checks, checked, message, eligible, +2 more
create_templateCreate templateADestructiveInspect
Use this tool to create a WhatsApp message template.
For this tool's 'template_json' property, pass a JSON matching this shape:
{ "name": string, "language": string, "category": "MARKETING" | "AUTHENTICATION" | "UTILITY", "components": Component[], }
General rules:
name must be lowercase snake_case.
category must be uppercase.
language must be a WhatsApp locale code such as "en_US", "tr", "es", "pt_BR".
Only include fields supported by the component variant.
Do not include null fields.
Components should normally be ordered as:
header, if any
body
footer, if any
buttons, if any
A template can have at most one header, one body, one footer, and one buttons component.
BODY is required unless the user is clearly creating a special authentication template handled elsewhere.
HEADER and FOOTER are optional.
BUTTONS are optional.
Component variants:
Text header without variables
{ "type": "HEADER", "format": "text", "text": "Your order update" }
Use this when the header is plain text.
Text header with variables
{ "type": "HEADER", "format": "TEXT", "text": "Hi {{1}}", "example": { "header_text": ["Alice"] } }
Rules:
Text header supports template variables.
If text contains variables, include example.header_text.
The example array must contain sample values in the same order as the variables appear.
For named parameters, the placeholder names appear in text, but the examples are still values.
Image header
{ "type": "HEADER", "format": "IMAGE", "example": { "header_handle": ["https://example.com/sample-image.jpg"] } }
Use this when the template header should contain an image. The example should be a sample image handle or URL when available.
Video header
{ "type": "HEADER", "format": "VIDEO", "example": { "header_handle": ["https://example.com/sample-video.mp4"] } }
Use this when the template header should contain a video. The example should be a sample video handle or URL when available.
Document header
{ "type": "HEADER", "format": "DOCUMENT", "example": { "header_handle": ["https://example.com/sample-document.pdf"] } }
Use this when the template header should contain a document. The example should be a sample document handle or URL when available.
Location header
{ "type": "HEADER", "format": "LOCATION" }
Use this when the template should display a location/map header.
Important:
For template creation, LOCATION is only the header format.
Do not put latitude, longitude, address, or name in the template creation component.
The actual location values are supplied later when sending the approved template, not when creating the template.
Body without variables
{ "type": "BODY", "text": "Your order has shipped and is on the way." }
Use this for the main message text.
Body with variables
{ "type": "BODY", "text": "Hi {{1}}, your order {{2}} has shipped.", "example": { "body_text": [ ["Alice", "ORD-12345"] ] } }
Rules:
If body text contains variables, include example.body_text.
body_text is an array containing one array of sample values.
The inner array values must match the variables in order of appearance.
Use placeholders like {{1}}, {{2}}.
Footer
{ "type": "FOOTER", "text": "Reply STOP to unsubscribe." }
Rules:
Footer is plain text only.
Do not use variables in footer text.
Buttons wrapper
{ "type": "BUTTONS", "buttons": [ Button ] }
Rules:
Buttons must be inside a single component whose type is "BUTTONS".
Do not place button objects directly in components.
Button text should be short and action-oriented.
Button variants:
A. Quick reply button
{ "type": "QUICK_REPLY", "text": "Confirm" }
Use when the user should tap a predefined reply.
B. Phone number button
{ "type": "PHONE_NUMBER", "text": "Call us", "phone_number": "+15551234567" }
Use when the user should call a business phone number. phone_number must include country code.
C. Static URL button
{ "type": "URL", "text": "View order", "url": "https://example.com/orders" }
Use when the button always opens the same URL.
D. Dynamic URL button
{ "type": "URL", "text": "View order", "url": "https://example.com/orders/{{1}}", "example": ["ORD-12345"] }
Rules:
Use this when the final URL path or query contains a variable.
The example array contains the sample value for the dynamic URL part.
E. Copy code button
{ "type": "COPY_CODE", "example": "SAVE20" }
Use for coupon or promo-code templates. The button copies the provided code when the template is sent.
G. OTP button
{ "type": "OTP", "otp_type": "COPY_CODE", "text": "Copy code" }
For one-tap OTP:
{ "type": "OTP", "otp_type": "ONE_TAP", "text": "Copy code", "autofill_text": "Autofill", "package_name": "com.example.app", "signature_hash": "abc123" }
Rules:
Use OTP buttons only for authentication templates - category should be "AUTHENTICATION". Authentication templates can only be created for WABAs that have a 2,000 messaging limit or above.
Do not use marketing or utility wording in authentication templates.
Examples:
Utility order update with named parameters:
{ "name": "order_shipped_update", "language": "en_US", "category": "UTILITY", "components": [ { "type": "HEADER", "format": "TEXT", "text": "Order {{1}} update", "example": { "header_text": [["ORD-12345"]] } }, { "type": "BODY", "text": "Hi {{1}}, your order has shipped and should arrive by {{2}}.", "example": { "body_text": [ ["Alice", "Friday"] ] } }, { "type": "FOOTER", "text": "Thank you for shopping with us." }, { "type": "BUTTONS", "buttons": [ { "type": "URL", "text": "Track order", "url": "https://example.com/orders/{{1}}", "example": ["ORD-12345"] } ] } ] }
Utility store location template:
{ "name": "store_location_info", "language": "en_US", "category": "UTILITY", "components": [ { "type": "HEADER", "format": "location" }, { "type": "BODY", "text": "Hi {{1}}, here is the location of our {{2}} store.", "example": { "body_text": [ ["Alice", "Downtown"] ] } } ] }
Inputs: template_json (required), waba_account_id (required). Returns: created, example, message, template
delete_templateDelete templateCDestructiveInspect
Delete a WhatsApp message template by its internal template ID.
Inputs: template_id (required), waba_account_id (required). Returns: deleted, message, template_id
get_balanceGet balanceCRead-onlyInspect
Get balance for an account.
Inputs: with_usage. Returns: found, balance, with_usage
get_channel_profileGet channel profileBRead-onlyInspect
Get a channel's (a.k.a. phone number) WhatsApp profile.
Inputs: channel_id (required), project_id (required). Returns: found, message, profile
get_client_documentation_pageGet client documentation pageARead-onlyInspect
Get a documentation page from the 360Dialog client documentation at https://docs.360dialog.com/docs. Fetch the full markdown content of a specific documentation page from Client Documentation. Use this when you have a page URL and want to read its content. Accepts full URLs (e.g. https://docs.360dialog.com/docs/getting-started). Since searchDocumentation returns partial content, use getPage to retrieve the complete page when you need more details. The content includes links you can follow to navigate to related pages.
Inputs: url (required).
get_company_detailsGet company detailsBRead-onlyInspect
Get the user's company's details from 360Dialog.
Inputs: no named parameters. Returns: client
get_invoicesGet invoicesBRead-onlyInspect
Get invoices for an account.
Inputs: no named parameters. Returns: found, message, audience, invoices
get_onboarding_statusGet onboarding statusBRead-onlyInspect
Get a phone number's status on whether a number is live, what type of messages it can send today, and suggestions for what's next.
A live number can send free-form replies inside the 24-hour customer service window immediately (meaning if someone messages the number, the user can respond to the message using the API). Template messages are separately blocked until Meta reviews a submitted template (template reviews take up to 48 hours.)
Lack of business verification is not a blocker. Unverified businesses can only send 250 templates to unique users per 24 hours.
Inputs: channel_id (required), phone_number. Returns: live, found, message, next_step, +6 more
get_selfGet current userARead-onlyInspect
Get currently logged in user's information in 360Dialog. You will get:
user's name,
user's email address,
partner name,
user's permissions in 360Dialog Hub,
user's roles
Inputs: no named parameters. Returns: ok, message, profile, audience
get_skillGet skillARead-onlyInspect
Get the full guide for one skill returned by 'list_skills', as markdown.
Inputs: name (required). Returns: found, skill
get_template_json_exampleGet template JSON exampleARead-onlyInspect
Sending messaging templates in WhatsApp API / 360Dialog API requires a JSON body in the API request.
The API request can be hard to form, as the body must declare in JSON what each parameter in the JSON should be filled as.
This tool creates a valid example JSON body that the user can later modify before sending the template to WhatsApp users.
It is recommended that you use this tool after creating a template, or after the user asks how to send a template. Display the JSON result of this tool.
Inputs: template_id (required), waba_account_id (required). Returns: example, message, template_id, template_name
get_webhookGet webhookARead-onlyInspect
Get a channel's (a.k.a. phone number's) webhook URL, and check if the optional webhook headers are set.
Webhook headers are optional. They can be set using the 'set_webhook' tool, which also sets the webhook URL. When webhook headers are set, 360Dialog will send webhooks to the channel's webhook URL and add the specified headers.
This helps only authenticated requests pass through app firewalls, if the user has any.
Example:
If webhook URL is https://foo.com/webhook, and webhook headers are set to {"x-360dialog-webhook-security": "RANDOM-STRING"},
the webhook URL will receive POST requests like this:
POST https://foo.com/webhook HEADERS x-360dialog-webhook-security: RANDOM-STRING
Inputs: channel_id (required). Returns: message, webhook, configured, masked_headers
list_channelsList channelsBRead-onlyInspect
Find a channel by passing in an identifier.
A channel is a phone number. By calling this tool you retrieve information about the phone number/channel in 360Dialog.
Results are paginated; use the 'page' and 'size' arguments to page through results if there are more than fit in a single page.
Returns: If not found, returns "Not found". If found, returns information of channels, like WABA ID, client ID, channel ID, and app ID, along with the current page, total pages, and total count.
Inputs: page, size, filter. Returns: page, found, message, channels, +2 more
list_skillsList skillsARead-onlyInspect
List the 360Dialog skills available to you.
A skill is a curated, up-to-date how-to guide for a 360Dialog process (e.g. drafting a compliant WhatsApp template, diagnosing a channel that stopped sending). Call this tool BEFORE answering any "how do I..." question about 360Dialog products or processes - it tells you which skills exist and when to use them. Once you find a match, call 'get_skill' with its 'name' to read the full guide.
Inputs: no named parameters. Returns: skills
list_templatesList templatesARead-onlyInspect
List templates for a WABA (WhatsApp Business Account). If you do not have a waba_account_id ending in 'WA' (case-insensitive), run the 'list_channels' tool first.
Inputs: waba_account_id (required), name_filter, status_filter. Returns: found, message, templates
list_usersList usersBRead-onlyInspect
List users for the selected account, including their roles and creation timestamps.
Inputs: no named parameters. Returns: ok, users, message
request_otpRequest OTPADestructiveInspect
Request an OTP code.
Sometimes OTP is needed to complete invoking a tool. When tool invocation fails due to OTP reasons, you will be notified in the tool response, and be asked to rqeuest an OTP code.
Only call after a tool call fails due to OTP.
Inputs: no named parameters. Returns: message, requested
sandbox_complete_registration(Sandbox) Complete registrationBRead-onlyInspect
Complete a phone number's registration. This will get you the API key to use when sending messages from the 360Dialog sandbox phone number to the user's registered phone number.
Inputs: no named parameters. Returns: mdn, api_key, messages_left
sandbox_configure_webhook(Sandbox) Configure webhookCDestructiveIdempotentInspect
Set webhook for the channel on 360Dialog sandbox. Optional.
Inputs: url (required), api_key (required). Returns: url, headers
sandbox_get_webhook_configuration(Sandbox) Get webhook configurationBRead-onlyInspect
Get configured webhook for the channel on 360Dialog sandbox.
Inputs: api_key (required). Returns: url, headers
sandbox_list_events(Sandbox) List eventsBRead-onlyInspect
List webhook events received. This will show received messages from the user, and status of messages sent from the sandbox account.
Inputs: page. Returns: page, size, items, pages, +1 more
sandbox_register_number(Sandbox) Register numberBDestructiveIdempotentInspect
Register the user's phone number on the 360Dialog sandbox. Upon registration, the user can send messages to this phone number from the 360Dialog sandbox account on WhatsApp.
The user will be given a link to complete registration. When this link is used, they will send a verification code to 360Dialog sandbox phone number on WhatsApp. They can click the link, or alternatively scan the QR code.
Inputs: phone_number (required). Returns: quick_link, sandbox_number, message_to_send
sandbox_send_message(Sandbox) Send messageADestructiveInspect
Send a message on the 360Dialog sandbox. Messages can only be sent to the user's phone number that was used during sandbox registration.
The payload must be a JSON string matching the WhatsApp messages endpoint body.
Interactive message example: use this only when there is an active conversation window, which lasts 24 hours since the customer's last message.
{ "messaging_product": "whatsapp", "to": "{{recipient_phone_number}}", "type": "text", "text": { "body": "{{message_body}}" } }
Template message example: use this when there is no active conversation window, or when sending an approved template message. You can only send the 'marketing_message' template.
{ "messaging_product": "whatsapp", "to": "{{recipient_phone_number}}", "type": "template", "template": { "name": "marketing_message", "language": { "policy": "deterministic", "code": "en" }, "components": [ { "type": "header", "parameters": [ { "type": "image", "image": { "link": "https://placehold.co/600x315/34D399/FFFFFF/png?text=Summer+Sale!" } } ] } ] } }
Inputs: api_key (required), payload (required). Returns: contacts, messages, messaging_product
search_client_documentationSearch client documentationARead-onlyInspect
Search the 360Dialog client documentation at https://docs.360dialog.com/docs. Search across the documentation to find relevant information, code examples, API references, and guides. Use this tool when you need to answer questions about Client Documentation, find specific documentation, understand how features work, or locate implementation details. The search returns contextual content with titles and direct links to the documentation pages.
Inputs: query (required).
set_display_nameSet display nameADestructiveInspect
Submit a new display name for this channel (a.k.a. phone number.)
Calling this tool will submit a display name request to Meta. Meta takes up to 48 hours to review the submitted display name. The display name may be rejected if it does not comply with display name guidelines.
The user will receive an email when their display name review is complete.
When this tool is called, the user may be prompted by 360Dialog for an OTP code delivered to their email address.
Inputs: channel_id (required), new_display_name (required). Returns: submitted, channel_id, new_display_name
set_webhookSet webhookBDestructiveInspect
Set a channel's (a.k.a. phone number's) webhook URL and optionally webhook headers.
Inputs: channel_id (required), webhook_setting (required). Returns: message, webhook, configured
show_template_previewShow template previewCRead-onlyInspect
Show a preview of a given template to the user.
Inputs: template_id (required), waba_account_id (required). Returns: template
start_number_onboardingStart number onboardingARead-onlyInspect
Get the link that lets the user connect a WhatsApp phone number in 360Dialog, plus what to tell them beforehand.
This hands over 360Dialog's own onboarding page. The user clicks through Embedded Signup themselves; this tool cannot do it for them.
The user must be signed in to 360Dialog Hub already, or the link sends them to login first and loses the destination. Tell them to make sure they're signed in first.
The link given by this tool may not work if the user's 360Dialog client account is under a partner-paid channel. Make them aware of this.
Returns the client's current channel IDs for future reference on recognizing which phone number was newly added.
Inputs: no named parameters. Returns: onboarding_url, what_meta_will_ask, current_channel_ids
start_payment_setupStart payment setupARead-onlyInspect
Get the link that lets the user add their credit card to their account.
If this client was created through assistant-led onboarding and still has no company name or country on file, the payment page is kept behind a company details form instead. In that case this tool does not return the payment link; it says to call 'update_company_details' first and try again.
The user must be signed in to 360Dialog Hub, or the link sends them to login first and loses the destination. The user enters the card themselves; this tool cannot do it for them.
Inputs: no named parameters. Returns: ready, message, payment_url, already_paid, +1 more
start_signupGet 360Dialog signup linkARead-onlyInspect
Returns the URL where a user can create a 360Dialog account. Only relevant if the user has not created a 360Dialog account yet.
Inputs: no named parameters. Returns: next_step, signup_url
test_webhookTest webhookADestructiveInspect
Test if a channel's (a.k.a. phone number's) webhook URL is functional.
A total of 32 test cases will be run by sending sample POST requests to the user's webhook URL. During this test, the user may see 32 requests being made to their webhook server.
Returns the test's results, showing which cases failed, and which succeeded.
Inputs: channel_id (required). Returns: test, tested, message, webhook, +2 more
update_channel_profileUpdate channel profileADestructiveInspect
Update the WhatsApp profile for this channel (a.k.a. phone number.)
The user may be prompted by 360Dialog for an OTP code delivered to their email address. Make them aware of the OTP requirement.
Inputs: channel_id (required), project_id (required), new_profile (required). Returns: message, updated, channel_id
update_company_detailsSet company detailsADestructiveIdempotentInspect
Set the user's company's details on 360Dialog. This change does not affect Meta; only records on 360Dialog are affected by the update.
Before calling this tool, make sure to:
Check if the
get_company_detailstool returns the correct company information already.Check with the user if they want to change their company details in 360Dialog.
Get the user's approval/confirmation.
Inputs: tax_id (required), company_name (required), billing_country (required). Returns: client
verify_otpVerify OTPADestructiveInspect
Verify the 6-digit OTP code from the user. Doing so will automatically replay the blocked tool call that required verification.
Inputs: code (required). Returns: message, replayed, verified, replayed_tool, +1 more
wait_for_onboarding_stepWait for onboarding stepARead-onlyInspect
Wait for a server-side onboarding step to finish, then report back.
Embedded Signup and payment setup finish in the person's browser. This tool polls the hub every 5 seconds for up to 45 seconds and returns one of:
"done": The step finished.
"pending": Still not finished. Call this tool again to keep waiting.
"failed": There was an error.
'channel_id' and 'phone_number' are returned back once a channel is found so you can pass 'phone_number' into the next call once you have it. When 'phone_number' is omitted, 'candidates' lists the client's most recently created channels - check it if you're unsure the right number was picked (e.g. two users connecting numbers on the same 360Dialog client account).
Only use this for the short waits during onboarding. This tool is NOT suitable for display name approval, WABA approval, or business verification scenarios, as they take days, not seconds.
Inputs: step (required), phone_number. Returns: state, detail, observed, candidates, +2 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Send WhatsApp messages and templates, manage chats, contacts, broadcasts and AI agents.
WhatsApp Business inbox for AI agents: read chats, reply, send approved templates.
1Send and read WhatsApp messages, templates, chats and campaigns through the official Business API.
WhatsApp Business on Meta's Cloud API: team inbox, templates, AI support agents and analytics.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables managing WhatsApp Business accounts through natural language, including sending messages, managing contacts, and querying conversations.6232 npmISC
- AlicenseNot gradedqualityCmaintenanceEnables authenticated MCP clients to manage multiple WhatsApp Business numbers through Meta's official Cloud API, including webhook-backed contact and conversation search, message history, and sending text, templates, or media within policy limits.MIT
- AlicenseNot gradedqualityBmaintenanceWhatsApp, Instagram, Telegram, SMS, Messenger & email in one AI-ready inbox. Manage conversations, send omnichannel messages, run campaigns, sync contacts, and query your knowledge base — 42 tools over a hosted, OAuth-secured MCP server.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables sending messages, managing templates, uploading media, and configuring webhooks for WhatsApp Business via the MCP protocol.10 npm5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.