mcpbeat Sign in

HAL MCP Server

by chatwithhal Your server? Claim it
answering

HAL is answering right now. Last checked 12 min ago. It exposes 134 tools.

Customer conversations, help center, CRM, deals and email campaigns on HAL (chatwithhal.com).

Uptime history 70 hours of history
70 hours agonow
100.0%
Uptime 24h
91 of 91 checks
134
Tools
read from the server
188 ms
Response time
average over 24h
open, no key
Access
streamable-http

Nothing serious here today

Today is the operative word: we check HAL every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 12 min ago.

run in your terminal
claude mcp add mcp --transport http https://api.chatwithhal.com/mcp
Settings → Connectors → Add custom connector, then paste this address
https://api.chatwithhal.com/mcp
~/.codex/config.toml
[mcp_servers.mcp]
url = "https://api.chatwithhal.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://api.chatwithhal.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "mcp": {
      "type": "http",
      "url": "https://api.chatwithhal.com/mcp"
    }
  }
}

Available tools 134

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

email
create_email_campaign
New to HAL email? Call get_email_capabilities_overview first. Create an email campaign using campaign language instead of workflow graph internals.
create_email_template
New to HAL email? Call get_email_capabilities_overview first. Create a reusable workflow email template.
delete_email_campaign
Delete an email campaign. Refuses if another workflow in the project still chains into it via trigger_campaign or next_campaign_id.
delete_email_image
Delete an image from a project’s email image library. Remove it from any email templates first, or the image block will break.
delete_email_template
Delete a reusable workflow email template. Existing campaigns keep their embedded copy.
get_email_campaign
Get email campaign details.
get_email_campaign_run
Get one email campaign run with clicked URLs.
get_email_capabilities_overview
Orientation for HAL email features: campaigns vs workflows vs broadcasts, templates vs project defaults vs inline design, sender domains, images, test sending, track_event, and unsubscribe/suppression. Call this before creating any campaign, workflow, broadcast, or template.
get_email_deliverability
Project email reporting. Always returns: health (last 30 days across every campaign, workflow and broadcast: sent, sent_last_24h, delivered, hard bounces (bounced), soft bounces, complaints and their rates, plus the status that blocks broadcasts, and reset_at when a list-cleanup reset restarted the window), sources (the same window broken down per workflow/broadcast with delivered, hard/soft bounces, unique opens, clicks and replies), warm-up progress (only broadcasts count toward it), and the footer postal address. Pass workflow_id or broadcast_id (optionally with days; omitted = all time) to also get stats for that one campaign. Opens and clicks exclude automatic ones from security scanners and Apple Mail Privacy Protection, which are reported as automatic_opens/automatic_clicks. Replies count recipients who answered the email (auto-replies are ignored). Delivered counts only cover emails sent after delivery tracking was enabled.
get_email_template
Get a reusable workflow email template.
get_email_unsubscribe_status
Check whether an email address is currently suppressed for lifecycle email campaigns, for a given category (default "all").
list_email_campaign_runs
List email campaign runs with delivery, open, and click data.
list_email_campaigns
List email campaigns backed by visitor workflows.
list_email_categories
List a project's email categories used for per-category unsubscribe/preferences (marketing, product updates, transactional, ...). A project with no customized categories returns the built-in defaults.
list_email_images
List images in a project’s email image library, newest first. Use these for lifecycle/workflow email `image` blocks.
list_email_suppressions
List email addresses suppressed for lifecycle email campaigns in a project.
list_email_templates
List reusable workflow email templates for a project.
update_email_campaign
Update an email campaign.
update_email_categories
Replace the full set of email categories for a project (upserts by key, removes any key not included). Refused with the referencing suppressions/broadcasts/workflows if a key still in use would be removed.
update_email_postal_address
Set the physical mailing address shown in the footer of every marketing/lifecycle email (required by CAN-SPAM). Pass null or an empty string to remove it. Confirm the exact address with the user first.
update_email_template
Update a reusable workflow email template.
workflow
create_workflow
New to HAL email? Call get_email_capabilities_overview first. Create a visitor workflow: a trigger plus a branching graph of condition/send_widget_message/send_email/trigger_campaign/end nodes. Call get_workflow_builder_reference first.
delete_workflow
Delete a visitor workflow. Refuses if another workflow in the project still chains into it via trigger_campaign or next_campaign_id.
get_workflow
Get a visitor workflow including its full node/edge graph definition.
get_workflow_builder_reference
New to HAL email? Call get_email_capabilities_overview first. Static reference for building visitor workflows through create_workflow/update_workflow/validate_workflow: trigger shapes, node types, graph rules, condition/predicate operators, email block types, and variable syntax.
get_workflow_email_defaults
Get the project default email design used to seed new send_email nodes.
get_workflow_execution
Get one visitor workflow execution.
list_workflow_executions
List execution history for a visitor workflow.
set_workflow_enabled
Enable or disable a visitor workflow.
update_workflow
Update a visitor workflow. Partial: only provided fields change. If trigger fields change without a new definition, the existing trigger node is synced in place.
update_workflow_email_defaults
Update the project default email design (subject/preheader/theme/template_document) used to seed new send_email nodes. Merges into the project config without touching other settings.
broadcast
create_broadcast
New to HAL email? Call get_email_capabilities_overview first. Create a draft (or scheduled, if scheduled_at is set) one-off email broadcast. Does not send anything.
delete_broadcast
Delete a broadcast. Refused while it is actively sending.
get_broadcast
Get a single email broadcast, including delivery/open/click counts. With an A/B test, `ab_test` has its settings, `phase` (testing, waiting, winner_sending, done, skipped, cancelled), `ends_at` (automatic winner pick), the `winner`, and `results` (test-group sent/opens/clicks/rates per variant plus a confidence score).
get_broadcast_audience_fields
List the fields available for building a broadcast audience (contact/company builtins, sampled metadata keys, valid operators per type).
get_broadcast_readiness
Deliverability checklist for a broadcast before sending: sender authentication (custom domain, DMARC, MAIL FROM/SPF), postal address, project bounce/complaint health, warm-up capacity (how many days the send will be spread over), and content lint (size, image-heavy, subject, spam phrases, link shorteners). `error` checks block sending; share warnings with the user.
list_broadcast_recipients
List the per-recipient delivery status for a broadcast.
update_broadcast
Update a draft or scheduled broadcast (name, email content, audience, schedule, list-hygiene or tracking options, A/B test).
deal
create_deal
Create a deal for a company. The company's own stage and value follow its primary deal (its newest open new-business deal).
delete_deal
Delete a deal. A company with no deals left drops out of the pipeline.
get_deal
Get a deal with its company, stage, contacts and stage/amount history
get_deal_pipeline
Summarize the sales pipeline: per stage the number of deals, total and probability-weighted amount, plus open/won/lost totals, win rate and open deals whose expected close date has passed. Use list_deals for the deals themselves.
remove_deal_contact
Remove a contact from a deal
set_deal_contact
Add a contact to a deal, or change their role on it
update_deal
Update a deal. Moving it to a 100% stage marks it won and a 0% stage marks it lost (pass lost_reason); moving it back to an open stage reopens it.
article
create_article
Create an article with an initial translation
create_article_group
Create a new article group
get_article
Get an article with translations
list_article_groups
List all article groups
update_article
Update article properties or upsert a translation
update_article_group
Update an article group
guide
create_guide
Create a new guide
delete_guide
Permanently delete a guide and its execution history
get_guide
Get guide details
get_guide_health
Which guides had steps fail to anchor recently — the signal that a selector rotted in the target app
get_guide_stats
Per-guide analytics: triggers, completions, completion rate, per-step drop-off, selector misses
update_guide
Update a guide
send
send_broadcast_now
IMMEDIATELY sends this broadcast to its whole live audience - a real, irreversible email blast to real contacts, not a test. You MUST call preview_broadcast_audience first and pass its exact `count` as confirm_recipient_count; a mismatch is refused. Call get_broadcast_readiness first too: sends with blocking deliverability checks are refused. Only call this after the user has explicitly confirmed they want to send to that many recipients right now.
send_test_broadcast_email
Send a test of a broadcast email to an account user email address only (never to real contacts).
send_test_email_campaign
Send a test email for an existing email campaign to an account user email address only.
send_test_email_template
Send a workflow email template test to an account user email address only.
send_test_workflow_email
Send a real test email for one send_email node in a workflow to an account user email address only.
sender
check_sender_domain
Re-check the project's custom sender domain verification status against Amazon SES.
get_sender_domain
Get the custom sender domain (Starter plan and above) configured for this project, including DNS records, verification status, and any Reply-To override (`sender_domain.reply_to`, alongside the top-level `reply_to` this project's emails actually use).
remove_sender_domain
Remove the project's custom sender domain. Visitor-facing email reverts to the default Hal address.
update_sender_identity
Update the local part, display sender name, and/or Reply-To override of the configured sender domain, without changing the domain itself. By default, Reply-To stays on the HAL inbound address so inbound routing/threading keep working. Setting `reply_to` overrides that with the given address - it must already forward into the project's HAL inbound address, or replies will be lost. Pass an empty string or omit `reply_to` as `null` to clear an existing override and revert to the HAL address.
automation
create_automation
Create a new automation
get_automation
Get automation details
update_automation
Update an automation
company
create_company
Create a new company
get_company
Get a company with contacts, details and its deals. The company stage and deal_value mirror its primary deal.
update_company
Update a company
contact
create_contact
Create a new contact
get_contact
Get a contact with full details, recent activity and the deals they are on
update_contact
Update a contact
conversation
get_conversation
Get a conversation with its messages and attachment metadata. agents_typing lists teammates drafting a reply right now; if someone is, let them answer instead of replying over them. replied_to_email is set when the conversation started as a reply to a campaign, workflow or broadcast email. Call get_conversation_image with an image attachment ID to inspect its visual content. To incorporate HAL's own evidence-backed AI draft into your final answer, call generate_ai_response_suggestion next.
get_conversation_image
Get an image attached to a conversation message as MCP image content so the AI client can inspect it. Images over 2 MB are resized and compressed before delivery. Use an attachment ID returned by get_conversation.
update_conversation
Update conversation status, assignment, snooze state, or spam. is_spam true does what "Mark as spam" does in the inbox: the conversation leaves the inbox, is marked read, and the same sender's next conversations in this project go straight to spam; is_spam false undoes it and lets the sender back in. The change is recorded in the conversation's activity as done via MCP. Use list_conversations with spam "only" to review spam.
validate
validate_email_template
Validate an email template and return AI-client-friendly errors.
validate_guide
Validate a guide's start location and step selectors against the live pages the developer is logged into. Results are recorded by the widget's authoring mode (?hal_guide_debug=1 on any page where the widget runs); this tool returns the newest snapshot per page, so a guide that spans pages reports each of them.
validate_workflow
Validate a visitor workflow definition without saving it. Same input as create_workflow.
webhook
create_webhook
Create a new webhook
delete_webhook
Delete a webhook
update_webhook
Update an existing webhook
companies
list_companies
List companies with optional search and stage filter. Includes companies with no linked contacts. Paginated.
list_companies_by_stage
Read-only CRM board: list ALL companies grouped by pipeline stage, including companies with no linked contacts and unstaged companies. Returns per-stage deal totals so agents can reconcile Won totals with company rows. Company stage and deal value mirror the company primary deal; use list_deals to see every deal, including expansions and renewals.
import
import_conversation
Import a single historical conversation silently (no webhooks, no notifications). Use for migrating data from other chat platforms.
import_conversations
Import multiple historical conversations in batch (max 100). Each conversation is imported independently — one failure does not affect others. Silent: no webhooks, no notifications.
message
get_message_tags_stats
Get all project tags with their usage counts
list_message_tags
List all tags defined for this project
preview
preview_broadcast_audience
Preview who a broadcast (or a candidate audience) would reach: match count, suppressed count, contacts left out by list hygiene (invalid/disposable/role addresses, unengaged, recently emailed) per reason, and a sample.
preview_email_template
Render an email template preview as subject, preheader, HTML, and plain text.
toggle
toggle_automation
Enable or disable an automation
toggle_guide
Enable or disable a guide
articles
list_articles
List articles, optionally filtered by group or to published ones. To show a help article to the visitor, write `[label](hal-article:<article id or slug>)` into the `content` of reply_to_conversation. The widget renders it as a clickable card at that spot, on its own line (it is not an inline link inside a sentence), so put it between sentences or paragraphs, e.g. "Refunds take 5 days.\n[Refund policy](hal-article:refund-policy)\nAnything else?". The label is the card title, so use the article title. Several cards in one reply are fine. Only published articles the visitor may see are accepted; each reference is checked and rewritten to the slug for the visitor's language. Find the right article with find_relevant_articles (matched to the conversation, or to your own query), or list_articles with published_only.
automations
list_automations
List all automations for this project
broadcasts
list_broadcasts
List one-off email broadcasts for a project.
cancel
cancel_broadcast
Cancel a scheduled, in-progress, or paused broadcast. Recipients not yet sent to are marked cancelled.
configure
configure_sender_domain
Configure a custom sender domain for visitor-facing email on this project (Starter plan and above). Returns DNS records (DKIM CNAMEs, and MX/TXT if a mail-from subdomain is set) that the user must add themselves at their DNS provider before the domain can verify. Reply-To stays on the HAL inbound address so inbound routing keeps working, unless a Reply-To override is set afterwards with update_sender_identity.
contacts
list_contacts
List contacts with optional search
conversations
list_conversations
List conversations with filters (status, spam, limit, offset). Each result says whether it is marked as spam.
crm
list_crm_stages
List CRM pipeline stages
custom
list_custom_properties
List visitor custom properties and sampled metadata keys available for campaign predicates and conditions.
deals
list_deals
List deals (sales opportunities). A company can have several deals: new business, expansion, renewal. Each deal has a stage, amount, expected close date, owner, next step and contacts. Filter by company, contact, stage, owner or status.
disable
disable_email_campaign
Disable an email campaign.
enable
enable_email_campaign
Enable an email campaign.
event
list_event_names
List tracked lifecycle event names seen in a project.
generate
generate_ai_response_suggestion
Generate an advisory-only HAL AI reply suggestion for the latest visitor message. Call this after get_conversation, then combine HAL's draft, evidence, and confidence with the conversation messages when composing your final answer. This tool never sends a message to the visitor, even when project auto-send or AI deflection is enabled.
guides
list_guides
List all guides for this project
link
link_contact_to_company
Link an existing contact to an existing company. The operation is idempotent and both records must belong to the selected project.
macro
get_macro
Get a single shared macro by ID
macros
list_macros
List shared macros (available to all team members)
merge
merge_companies
Merge a duplicate company into a keeper. Contacts, tracked events, and CRM timeline move to the keeper; the source company is deleted. Use when the same org has a HAL-generated row and a later source-system (e.g. Apollo) id row. Refuses to merge companies that already have different external ids.
projects
list_projects
List projects available to this MCP key. Call this first, then get_email_capabilities_overview for email features.
relevant
find_relevant_articles
Find published help articles that fit a conversation, in the visitor's language and limited to ones this visitor may see. Matches the visitor's latest message, or `query` when given. Returns up to 6, best match first; weaker results can be only loosely related, so check the title and excerpt before sharing one. Read-only; uses no AI quota. Each result has `insert`, the exact markup to put in the reply. To show a help article to the visitor, write `[label](hal-article:<article id or slug>)` into the `content` of reply_to_conversation. The widget renders it as a clickable card at that spot, on its own line (it is not an inline link inside a sentence), so put it between sentences or paragraphs, e.g. "Refunds take 5 days.\n[Refund policy](hal-article:refund-policy)\nAnything else?". The label is the card title, so use the article title. Several cards in one reply are fine. Only published articles the visitor may see are accepted; each reference is checked and rewritten to the slug for the visitor's language. Find the right article with find_relevant_articles (matched to the conversation, or to your own query), or list_articles with published_only.
reorder
reorder_workflows
Reorder visitor workflows by priority; the first id in the list gets the highest priority.
reply
reply_to_conversation
Send an agent message to a conversation. To show a help article to the visitor, write `[label](hal-article:<article id or slug>)` into the `content` of reply_to_conversation. The widget renders it as a clickable card at that spot, on its own line (it is not an inline link inside a sentence), so put it between sentences or paragraphs, e.g. "Refunds take 5 days.\n[Refund policy](hal-article:refund-policy)\nAnything else?". The label is the card title, so use the article title. Several cards in one reply are fine. Only published articles the visitor may see are accepted; each reference is checked and rewritten to the slug for the visitor's language. Find the right article with find_relevant_articles (matched to the conversation, or to your own query), or list_articles with published_only. To walk the visitor through a flow, pass `offer_guide_id` instead of writing guide markup. To send files, pass `attachments`; they are delivered with the message in the widget and in email replies.
reset
reset_email_deliverability_health
Start a fresh 30-day health window for a project that is blocked from sending broadcasts by old bounces or complaints. ONLY use this after the bounced and complained addresses have been suppressed (list_email_suppressions / suppress_email_recipient) so the same list cannot bounce again. HAL enforces this: the reset is refused, and nothing changes, if any recipient that bounced or complained in the current window is not suppressed (by a project-wide or platform-wide suppression), and a project can be reset at most once per 30 days. Once it succeeds, sends before the reset stop counting toward the project's bounce and complaint rate, and any new bounces after it count normally and can block the project again. This only resets HAL's own project health window; it does not change the Amazon SES account reputation or review status. Per-broadcast auto-pause is not affected. Cannot be undone and is logged: get explicit user confirmation, then pass confirm: true and a reason describing the cleanup (3-500 characters). Returns the updated health (including reset_at).
resume
resume_broadcast
Resume a paused broadcast. Broadcasts auto-pause when their bounce or spam-complaint rate is too high, or when a scheduled send hits a blocking deliverability check; `pause_reason` says why. Only resume after the user understands the reason and has addressed it (e.g. removed bad addresses). The remaining recipients are sent to, and it pauses again if rates stay high.
schedule
schedule_broadcast
Schedule a draft (or reschedule a scheduled) broadcast to send at a future time.
select
select_broadcast_ab_winner
End a broadcast's A/B test early and send the winner to the rest of the audience now, instead of waiting for the automatic pick. `ab_test.results` on get_broadcast shows each variant's open/click rates. Pass `variant` to choose it; omit it to send the current leader. This sends real email to the remaining recipients: confirm with the user first.
statistics
get_statistics
Get project statistics including responsiveness, conversation volume, and per-agent metrics. Defaults to last 30 days.
suppress
suppress_email_recipient
Suppress an email address so lifecycle email campaigns skip it. Defaults to category "all" (blocks everything); pass a specific category key (see list_email_categories) to block only that category.
tag
tag_message
Add tags to a message. Merges with existing tags (deduplicates). If Damper integration is enabled and a tag matches tags_to_sync, pushes the conversation to Damper as feedback.
team
get_team
Get a team with its members
teams
list_teams
List all teams for this project with member and conversation counts
test
list_test_email_recipients
List account user emails allowed as workflow/email test recipients.
track
track_event
Track a lifecycle event exactly like the public track-event API. THIS CAN SEND REAL EMAILS: matching enabled api_trigger workflows fire immediately for real contacts. Use dry_run to preview matches without tracking or sending anything. Workflows only fire for events that resolve to a visitor (via user_id or email); company-only events never trigger workflows.
typing
set_typing
Show the visitor and your teammates in the dashboard that a reply is being written. Call it right before you draft a reply the visitor will read, so a live agent sees the conversation is being handled. Do not call it for internal notes, for reading or summarizing, or when you are not going to reply. reply_to_conversation clears it; call again with is_typing false if you decide not to reply.
unsuppress
unsuppress_email_recipient
Remove an email address from the lifecycle email suppression list. Omit category to lift every suppression on the address (bounce/complaint rows are never removed); pass category to lift only that one.
untag
untag_message
Remove specific tags from a message
upload
upload_email_image
Upload an image to a project's email image library so it can be used in lifecycle/workflow email `image` blocks (email_block_types.image.url must be an absolute URL — external hosting is no longer required). Provide exactly one of data_base64 (with mime_type) or source_url. Use email_url in email image blocks (image.url).
webhooks
list_webhooks
List all webhooks for this project
workflows
list_workflows
List visitor workflows for a project (trigger + branching graph automations), ordered by priority.

Endpoints

URLTransportStateLatencyChecked
https://api.chatwithhal.com/mcp streamable-http answering 181 ms 12 min ago

Alternatives to HAL

same job, measured the same way
ConverZAP — WhatsApp (official API)
by converzap

WhatsApp via the official Meta API: contacts, conversations, messages, CRM deals and campaigns.

answering
Gro
by usegro

Manage subscriptions, customers and email campaigns in your Gro account.

answering
AirysChat MCP Server
by airys

Operate AirysChat — conversations, CRM, AI Agents, Meta Business Agent, and WhatsApp campaigns.

answering
Cordex
by cordex-app

WhatsApp CRM: inbox, contacts, deals, campaigns, AI agents, automations, ads and reports.

answering
TeleBoost
by teleboost

Telegram CRM: manage contacts, conversations, tickets, campaigns and analytics.

answering
Emailit
by emailit

Send email, run campaigns and automations, manage contacts and domains, fix deliverability.

answering
Klaviyo
by mcparmory

Create and manage email campaigns, lists, and marketing automation

210 installs/wk local only
Send16
by send16

Email, SMS and marketing automation: campaigns, contacts, automations and stats from Claude.

87 tools answering

HAL — questions

Answers built from our own checks of this server.

What can HAL do?
It exposes 134 tools, read directly from the server on our last check. Among them: cancel_broadcast, check_sender_domain, configure_sender_domain, create_article, create_article_group, create_automation and 128 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is HAL mostly used for?
Its tools cluster around email, workflow and broadcast. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is HAL working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 188 ms. The bar chart above shows every period we have measured.
How do I connect HAL?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does HAL need an API key?
No. HAL completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 134 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is HAL?
It answers our handshake in 188 ms on average, which is faster than 74% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.