HAL
com.chatwithhal/mcpchatwithhal.comstreamable-httpv1.0.0Scanned
Customer conversations, help center, CRM, deals and email campaigns on HAL (chatwithhal.com).
134 tools: 13 can delete or cancel things, 13 do something that can't be undone, 45 change things and 63 only read.
- Reads private data · 35
- Reads text others write · 28
- Can send data out · 26
- No findings
Anlyon alternative
71 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
134 tools
Deletes or cancels 13Claude Code: deny
cancel_broadcastCancel a scheduled, in-progress, or paused broadcast.No findings
Why it is in this group
- The name "cancel_broadcast" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel a scheduled, in-progress, or paused broadcast. Recipients not yet sent to are marked cancelled.
delete_broadcastDelete a broadcast.No findings
Why it is in this group
- The name "delete_broadcast" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a broadcast. Refused while it is actively sending.
delete_dealDelete a deal.No findings
Why it is in this group
- The name "delete_deal" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a deal. A company with no deals left drops out of the pipeline.
delete_email_campaignDelete an email campaign.No findings
Why it is in this group
- The name "delete_email_campaign" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete an email campaign. Refuses if another workflow in the project still chains into it via trigger_campaign or next_campaign_id.
delete_email_imageDelete an image from a project’s email image library.No findings
Why it is in this group
- The name "delete_email_image" says "delete": a word for removing or ending something.
Description, as the server wrote it 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_templateDelete a reusable workflow email template.No findings
Why it is in this group
- The name "delete_email_template" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a reusable workflow email template. Existing campaigns keep their embedded copy.
delete_guidePermanently delete a guide and its execution historyNo findings
Why it is in this group
- The name "delete_guide" says "delete": a word for removing or ending something.
- The description says "Permanently delete".
Description, as the server wrote it Permanently delete a guide and its execution history
delete_webhookDelete a webhookNo findings
Why it is in this group
- The name "delete_webhook" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a webhook
delete_workflowDelete a visitor workflow.No findings
Why it is in this group
- The name "delete_workflow" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a visitor workflow. Refuses if another workflow in the project still chains into it via trigger_campaign or next_campaign_id.
remove_deal_contactRemove a contact from a dealNo findings
Why it is in this group
- The name "remove_deal_contact" says "remove": a word for removing or ending something.
Description, as the server wrote it Remove a contact from a deal
remove_sender_domainRemove the project's custom sender domain.No findings
Why it is in this group
- The name "remove_sender_domain" says "remove": a word for removing or ending something.
Description, as the server wrote it Remove the project's custom sender domain. Visitor-facing email reverts to the default Hal address.
unsuppress_email_recipientRemove an email address from the lifecycle email suppression list.No findings
Why it is in this group
- The description's first verb is "remove": a word for removing or ending something.
Description, as the server wrote it 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_messageRemove specific tags from a messageNo findings
Why it is in this group
- The description's first verb is "remove": a word for removing or ending something.
Description, as the server wrote it Remove specific tags from a message
Can't be undone 13Claude Code: ask
create_broadcastNew to HAL email?Can send data outNo findings
Why it is in this group
- The name "create_broadcast" says "create": a word for a change.
- The name "create_broadcast" also says "broadcast": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "create_broadcast" says "broadcast": it sends or publishes something to other people.
Description, as the server wrote it 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.
merge_companiesMerge a duplicate company into a keeper.No findings
Why it is in this group
- The name "merge_companies" says "merge": a word for a change that another call does not undo.
Description, as the server wrote it 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.
reply_to_conversationSend an agent message to a conversation.Can send data outNo findings
Why it is in this group
- The name "reply_to_conversation" says "reply": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "reply_to_conversation" says "reply": it sends or publishes something to other people.
Description, as the server wrote it 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_email_deliverability_healthStart a fresh 30-day health window for a project that is blocked from sending broadcasts by old bounces or complaints.Can send data outNo findings
Why it is in this group
- The name "reset_email_deliverability_health" says "reset": a word for a change.
- The description says "Cannot be undone".
What it can reach
- outboundThe name "reset_email_deliverability_health" says "reset" and "email": it writes something other people read.
Description, as the server wrote it 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_broadcastResume a paused broadcast.Can send data outNo findings
Why it is in this group
- The name "resume_broadcast" says "broadcast": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "resume_broadcast" says "broadcast": it sends or publishes something to other people.
Description, as the server wrote it 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_broadcastSchedule a draft (or reschedule a scheduled) broadcast to send at a future time.Can send data outNo findings
Why it is in this group
- The name "schedule_broadcast" says "schedule": a word for a change.
- The name "schedule_broadcast" also says "broadcast": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "schedule_broadcast" says "broadcast": it sends or publishes something to other people.
Description, as the server wrote it Schedule a draft (or reschedule a scheduled) broadcast to send at a future time.
select_broadcast_ab_winnerEnd 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.Can send data outNo findings
Why it is in this group
- The name "select_broadcast_ab_winner" says "select": a word for a change.
- The name "select_broadcast_ab_winner" also says "broadcast": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "select_broadcast_ab_winner" says "broadcast": it sends or publishes something to other people.
Description, as the server wrote it 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.
send_broadcast_nowIMMEDIATELY sends this broadcast to its whole live audience - a real, irreversible email blast to real contacts, not a test.Can send data outNo findings
Why it is in this group
- The name "send_broadcast_now" says "send": a word for sending, and what is sent cannot be taken back.
- The description says "irreversible".
What it can reach
- outboundThe name "send_broadcast_now" says "send": it sends or publishes something to other people.
Description, as the server wrote it 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_emailSend a test of a broadcast email to an account user email address only (never to real contacts).Can send data outNo findings
Why it is in this group
- The name "send_test_broadcast_email" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_test_broadcast_email" says "send": it sends or publishes something to other people.
Description, as the server wrote it Send a test of a broadcast email to an account user email address only (never to real contacts).
send_test_email_campaignSend a test email for an existing email campaign to an account user email address only.Can send data outNo findings
Why it is in this group
- The name "send_test_email_campaign" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_test_email_campaign" says "send": it sends or publishes something to other people.
Description, as the server wrote it Send a test email for an existing email campaign to an account user email address only.
send_test_email_templateSend a workflow email template test to an account user email address only.Can send data outNo findings
Why it is in this group
- The name "send_test_email_template" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_test_email_template" says "send": it sends or publishes something to other people.
Description, as the server wrote it Send a workflow email template test to an account user email address only.
send_test_workflow_emailSend a real test email for one send_email node in a workflow to an account user email address only.Can send data outNo findings
Why it is in this group
- The name "send_test_workflow_email" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_test_workflow_email" says "send": it sends or publishes something to other people.
Description, as the server wrote it Send a real test email for one send_email node in a workflow to an account user email address only.
update_broadcastUpdate a draft or scheduled broadcast (name, email content, audience, schedule, list-hygiene or tracking options, A/B test).Can send data outNo findings
Why it is in this group
- The name "update_broadcast" says "update": a word for a change.
- The name "update_broadcast" also says "broadcast": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "update_broadcast" says "broadcast": it sends or publishes something to other people.
Description, as the server wrote it Update a draft or scheduled broadcast (name, email content, audience, schedule, list-hygiene or tracking options, A/B test).
Changes things 45Claude Code: ask
check_sender_domainRe-check the project's custom sender domain verification status against Amazon SES.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Re-check the project's custom sender domain verification status against Amazon SES.
configure_sender_domainConfigure a custom sender domain for visitor-facing email on this project (Starter plan and above).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
create_articleCreate an article with an initial translationNo findings
Why it is in this group
- The name "create_article" says "create": a word for a change.
Description, as the server wrote it Create an article with an initial translation
create_article_groupCreate a new article groupNo findings
Why it is in this group
- The name "create_article_group" says "create": a word for a change.
Description, as the server wrote it Create a new article group
create_automationCreate a new automationNo findings
Why it is in this group
- The name "create_automation" says "create": a word for a change.
Description, as the server wrote it Create a new automation
create_companyCreate a new companyNo findings
Why it is in this group
- The name "create_company" says "create": a word for a change.
Description, as the server wrote it Create a new company
create_contactCreate a new contactCan send data outNo findings
Why it is in this group
- The name "create_contact" says "create": a word for a change.
What it can reach
- outboundThe input takes a destination (input.phone): what the tool writes goes there.
Description, as the server wrote it Create a new contact
create_dealCreate a deal for a company.No findings
Why it is in this group
- The name "create_deal" says "create": a word for a change.
Description, as the server wrote it Create a deal for a company. The company's own stage and value follow its primary deal (its newest open new-business deal).
create_email_campaignNew to HAL email?Can send data outNo findings
Why it is in this group
- The name "create_email_campaign" says "create": a word for a change.
What it can reach
- outboundThe name "create_email_campaign" says "create" and "email": it writes something other people read.
Description, as the server wrote it New to HAL email? Call get_email_capabilities_overview first. Create an email campaign using campaign language instead of workflow graph internals.
create_email_templateNew to HAL email?Can send data outNo findings
Why it is in this group
- The name "create_email_template" says "create": a word for a change.
What it can reach
- outboundThe name "create_email_template" says "create" and "email": it writes something other people read.
Description, as the server wrote it New to HAL email? Call get_email_capabilities_overview first. Create a reusable workflow email template.
create_guideCreate a new guideNo findings
Why it is in this group
- The name "create_guide" says "create": a word for a change.
Description, as the server wrote it Create a new guide
create_webhookCreate a new webhookCan send data outNo findings
Why it is in this group
- The name "create_webhook" says "create": a word for a change.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Create a new webhook
create_workflowNew to HAL email?No findings
Why it is in this group
- The name "create_workflow" says "create": a word for a change.
Description, as the server wrote it 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.
disable_email_campaignDisable an email campaign.Can send data outNo findings
Why it is in this group
- The name "disable_email_campaign" says "disable": a word for a change.
What it can reach
- outboundThe name "disable_email_campaign" says "disable" and "email": it writes something other people read.
Description, as the server wrote it Disable an email campaign.
enable_email_campaignEnable an email campaign.Can send data outNo findings
Why it is in this group
- The name "enable_email_campaign" says "enable": a word for a change.
What it can reach
- outboundThe name "enable_email_campaign" says "enable" and "email": it writes something other people read.
Description, as the server wrote it Enable an email campaign.
generate_ai_response_suggestionGenerate an advisory-only HAL AI reply suggestion for the latest visitor message.No findings
Why it is in this group
- The name "generate_ai_response_suggestion" says "generate": a word for a change.
Description, as the server wrote it 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.
import_conversationImport a single historical conversation silently (no webhooks, no notifications).No findings
Why it is in this group
- The name "import_conversation" says "import": a word for a change.
Description, as the server wrote it Import a single historical conversation silently (no webhooks, no notifications). Use for migrating data from other chat platforms.
import_conversationsImport multiple historical conversations in batch (max 100).No findings
Why it is in this group
- The name "import_conversations" says "import": a word for a change.
Description, as the server wrote it Import multiple historical conversations in batch (max 100). Each conversation is imported independently — one failure does not affect others. Silent: no webhooks, no notifications.
link_contact_to_companyLink an existing contact to an existing company.No findings
Why it is in this group
- The name "link_contact_to_company" says "link": a word for a change.
Description, as the server wrote it Link an existing contact to an existing company. The operation is idempotent and both records must belong to the selected project.
reorder_workflowsReorder visitor workflows by priority; the first id in the list gets the highest priority.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Reorder visitor workflows by priority; the first id in the list gets the highest priority.
set_deal_contactAdd a contact to a deal, or change their role on itNo findings
Why it is in this group
- The name "set_deal_contact" says "set": a word for a change.
Description, as the server wrote it Add a contact to a deal, or change their role on it
set_typingShow the visitor and your teammates in the dashboard that a reply is being written.No findings
Why it is in this group
- The name "set_typing" says "set": a word for a change.
Description, as the server wrote it 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.
set_workflow_enabledEnable or disable a visitor workflow.No findings
Why it is in this group
- The name "set_workflow_enabled" says "set": a word for a change.
Description, as the server wrote it Enable or disable a visitor workflow.
suppress_email_recipientSuppress an email address so lifecycle email campaigns skip it.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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_messageAdd tags to a message.No findings
Why it is in this group
- The description's first verb is "add": a word for a change.
Description, as the server wrote it 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.
toggle_automationEnable or disable an automationNo findings
Why it is in this group
- The name "toggle_automation" says "toggle": a word for a change.
Description, as the server wrote it Enable or disable an automation
toggle_guideEnable or disable a guideNo findings
Why it is in this group
- The name "toggle_guide" says "toggle": a word for a change.
Description, as the server wrote it Enable or disable a guide
track_eventTrack a lifecycle event exactly like the public track-event API.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
update_articleUpdate article properties or upsert a translationNo findings
Why it is in this group
- The name "update_article" says "update": a word for a change.
Description, as the server wrote it Update article properties or upsert a translation
update_article_groupUpdate an article groupNo findings
Why it is in this group
- The name "update_article_group" says "update": a word for a change.
Description, as the server wrote it Update an article group
update_automationUpdate an automationNo findings
Why it is in this group
- The name "update_automation" says "update": a word for a change.
Description, as the server wrote it Update an automation
update_companyUpdate a companyNo findings
Why it is in this group
- The name "update_company" says "update": a word for a change.
Description, as the server wrote it Update a company
update_contactUpdate a contactCan send data outNo findings
Why it is in this group
- The name "update_contact" says "update": a word for a change.
What it can reach
- outboundThe input takes a destination (input.phone): what the tool writes goes there.
Description, as the server wrote it Update a contact
update_conversationUpdate conversation status, assignment, snooze state, or spam.No findings
Why it is in this group
- The name "update_conversation" says "update": a word for a change.
Description, as the server wrote it 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.
update_dealUpdate a deal.No findings
Why it is in this group
- The name "update_deal" says "update": a word for a change.
Description, as the server wrote it 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.
update_email_campaignUpdate an email campaign.Can send data outNo findings
Why it is in this group
- The name "update_email_campaign" says "update": a word for a change.
What it can reach
- outboundThe name "update_email_campaign" says "update" and "email": it writes something other people read.
Description, as the server wrote it Update an email campaign.
update_email_categoriesReplace the full set of email categories for a project (upserts by key, removes any key not included).Can send data outNo findings
Why it is in this group
- The name "update_email_categories" says "update": a word for a change.
What it can reach
- outboundThe name "update_email_categories" says "update" and "email": it writes something other people read.
Description, as the server wrote it 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_addressSet the physical mailing address shown in the footer of every marketing/lifecycle email (required by CAN-SPAM).Can send data outNo findings
Why it is in this group
- The name "update_email_postal_address" says "update": a word for a change.
What it can reach
- outboundThe name "update_email_postal_address" says "update" and "email": it writes something other people read.
Description, as the server wrote it 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_templateUpdate a reusable workflow email template.Can send data outNo findings
Why it is in this group
- The name "update_email_template" says "update": a word for a change.
What it can reach
- outboundThe name "update_email_template" says "update" and "email": it writes something other people read.
Description, as the server wrote it Update a reusable workflow email template.
update_guideUpdate a guideNo findings
Why it is in this group
- The name "update_guide" says "update": a word for a change.
Description, as the server wrote it Update a guide
update_sender_identityUpdate the local part, display sender name, and/or Reply-To override of the configured sender domain, without changing the domain itself.No findings
Why it is in this group
- The name "update_sender_identity" says "update": a word for a change.
Description, as the server wrote it 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.
update_webhookUpdate an existing webhookCan send data outNo findings
Why it is in this group
- The name "update_webhook" says "update": a word for a change.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Update an existing webhook
update_workflowUpdate a visitor workflow.No findings
Why it is in this group
- The name "update_workflow" says "update": a word for a change.
Description, as the server wrote it 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_defaultsUpdate the project default email design (subject/preheader/theme/template_document) used to seed new send_email nodes.Can send data outNo findings
Why it is in this group
- The name "update_workflow_email_defaults" says "update": a word for a change.
What it can reach
- outboundThe name "update_workflow_email_defaults" says "update" and "email": it writes something other people read.
Description, as the server wrote it 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.
upload_email_imageUpload 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 host…Can send data outNo findings
Why it is in this group
- The name "upload_email_image" says "upload": a word for a change.
What it can reach
- outboundThe name "upload_email_image" says "upload" and "email": it writes something other people read.
Description, as the server wrote it 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).
Only reads 63Show 63 read-only tools
find_relevant_articlesFind published help articles that fit a conversation, in the visitor's language and limited to ones this visitor may see.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "find_relevant_articles" says "find": a word for reading.
What it can reach
- private-dataThe description's first sentence says "find" and "conversation": it reads messages.
- untrusted-inputThe description's first sentence says "find" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it 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.
get_articleGet an article with translationsNo findings
Why it is in this group
- The name "get_article" says "get": a word for reading.
Description, as the server wrote it Get an article with translations
get_automationGet automation detailsNo findings
Why it is in this group
- The name "get_automation" says "get": a word for reading.
Description, as the server wrote it Get automation details
get_broadcastGet a single email broadcast, including delivery/open/click counts.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_broadcast" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "get" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it 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_fieldsList the fields available for building a broadcast audience (contact/company builtins, sampled metadata keys, valid operators per type).Reads private dataNo findings
Why it is in this group
- The name "get_broadcast_audience_fields" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "contact": it reads contacts.
Description, as the server wrote it List the fields available for building a broadcast audience (contact/company builtins, sampled metadata keys, valid operators per type).
get_broadcast_readinessDeliverability checklist for a broadcast before sending: sender authentication (custom domain, DMARC, MAIL FROM/SPF), postal address, project bounce/complaint health, warm-up capac…Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_broadcast_readiness" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "mail": it reads mail.
- untrusted-inputThe description's first sentence says "mail": it reads inbound email, which other people can write.
Description, as the server wrote it 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.
get_companyGet a company with contacts, details and its deals.Reads private dataNo findings
Why it is in this group
- The name "get_company" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "contact": it reads contacts.
Description, as the server wrote it Get a company with contacts, details and its deals. The company stage and deal_value mirror its primary deal.
get_contactGet a contact with full details, recent activity and the deals they are onReads private dataNo findings
Why it is in this group
- The name "get_contact" says "get": a word for reading.
What it can reach
- private-dataThe name "get_contact" says "get" and "contact": it reads contacts.
- private-dataThe description's first sentence says "get" and "contact": it reads contacts.
Description, as the server wrote it Get a contact with full details, recent activity and the deals they are on
get_conversationGet a conversation with its messages and attachment metadata.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_conversation" says "get": a word for reading.
What it can reach
- private-dataThe name "get_conversation" says "get" and "conversation": it reads messages.
- private-dataThe description's first sentence says "get" and "conversation": it reads messages.
- untrusted-inputThe name "get_conversation" says "get" and "conversation": it reads messages, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it 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_imageGet an image attached to a conversation message as MCP image content so the AI client can inspect it.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_conversation_image" says "get": a word for reading.
What it can reach
- private-dataThe name "get_conversation_image" says "get" and "conversation": it reads messages.
- private-dataThe description's first sentence says "get" and "conversation": it reads messages.
- untrusted-inputThe name "get_conversation_image" says "get" and "conversation": it reads messages, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it 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.
get_dealGet a deal with its company, stage, contacts and stage/amount historyReads private dataNo findings
Why it is in this group
- The name "get_deal" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "contact": it reads contacts.
Description, as the server wrote it Get a deal with its company, stage, contacts and stage/amount history
get_deal_pipelineSummarize 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…No findings
Why it is in this group
- The name "get_deal_pipeline" says "get": a word for reading.
Description, as the server wrote it 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.
get_email_campaignGet email campaign details.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_email_campaign" says "get": a word for reading.
What it can reach
- private-dataThe name "get_email_campaign" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "get" and "email": it reads mail.
- untrusted-inputThe name "get_email_campaign" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Get email campaign details.
get_email_campaign_runGet one email campaign run with clicked URLs.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_email_campaign_run" says "get": a word for reading.
What it can reach
- private-dataThe name "get_email_campaign_run" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "get" and "email": it reads mail.
- untrusted-inputThe name "get_email_campaign_run" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Get one email campaign run with clicked URLs.
get_email_capabilities_overviewOrientation for HAL email features: campaigns vs workflows vs broadcasts, templates vs project defaults vs inline design, sender domains, images, test sending, track_event, and uns…Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_email_capabilities_overview" says "get": a word for reading.
What it can reach
- private-dataThe name "get_email_capabilities_overview" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe name "get_email_capabilities_overview" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it 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_deliverabilityProject email reporting.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_email_deliverability" says "get": a word for reading.
What it can reach
- private-dataThe name "get_email_deliverability" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe name "get_email_deliverability" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it 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_templateGet a reusable workflow email template.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_email_template" says "get": a word for reading.
What it can reach
- private-dataThe name "get_email_template" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "get" and "email": it reads mail.
- untrusted-inputThe name "get_email_template" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Get a reusable workflow email template.
get_email_unsubscribe_statusCheck whether an email address is currently suppressed for lifecycle email campaigns, for a given category (default "all").Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_email_unsubscribe_status" says "get": a word for reading.
What it can reach
- private-dataThe name "get_email_unsubscribe_status" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe name "get_email_unsubscribe_status" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it Check whether an email address is currently suppressed for lifecycle email campaigns, for a given category (default "all").
get_guideGet guide detailsNo findings
Why it is in this group
- The name "get_guide" says "get": a word for reading.
Description, as the server wrote it Get guide details
get_guide_healthWhich guides had steps fail to anchor recently — the signal that a selector rotted in the target appNo findings
Why it is in this group
- The name "get_guide_health" says "get": a word for reading.
Description, as the server wrote it Which guides had steps fail to anchor recently — the signal that a selector rotted in the target app
get_guide_statsPer-guide analytics: triggers, completions, completion rate, per-step drop-off, selector missesNo findings
Why it is in this group
- The name "get_guide_stats" says "get": a word for reading.
Description, as the server wrote it Per-guide analytics: triggers, completions, completion rate, per-step drop-off, selector misses
get_macroGet a single shared macro by IDNo findings
Why it is in this group
- The name "get_macro" says "get": a word for reading.
Description, as the server wrote it Get a single shared macro by ID
get_message_tags_statsGet all project tags with their usage countsReads private dataReads text others writeNo findings
Why it is in this group
- The name "get_message_tags_stats" says "get": a word for reading.
What it can reach
- private-dataThe name "get_message_tags_stats" says "get" and "message": it reads messages.
- untrusted-inputThe name "get_message_tags_stats" says "get" and "message": it reads messages, which other people can write.
Description, as the server wrote it Get all project tags with their usage counts
get_sender_domainGet 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`, …Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_sender_domain" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "get" and "reply": it reads comments, which other people can write.
Description, as the server wrote it 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).
get_statisticsGet project statistics including responsiveness, conversation volume, and per-agent metrics.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_statistics" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "conversation": it reads messages.
- untrusted-inputThe description's first sentence says "get" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it Get project statistics including responsiveness, conversation volume, and per-agent metrics. Defaults to last 30 days.
get_teamGet a team with its membersNo findings
Why it is in this group
- The name "get_team" says "get": a word for reading.
Description, as the server wrote it Get a team with its members
get_workflowGet a visitor workflow including its full node/edge graph definition.No findings
Why it is in this group
- The name "get_workflow" says "get": a word for reading.
Description, as the server wrote it Get a visitor workflow including its full node/edge graph definition.
get_workflow_builder_referenceNew to HAL email?Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_workflow_builder_reference" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it 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_defaultsGet the project default email design used to seed new send_email nodes.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_workflow_email_defaults" says "get": a word for reading.
What it can reach
- private-dataThe name "get_workflow_email_defaults" says "get" and "email": it reads mail.
- private-dataThe description's first sentence says "get" and "email": it reads mail.
- untrusted-inputThe name "get_workflow_email_defaults" says "get" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Get the project default email design used to seed new send_email nodes.
get_workflow_executionGet one visitor workflow execution.No findings
Why it is in this group
- The name "get_workflow_execution" says "get": a word for reading.
Description, as the server wrote it Get one visitor workflow execution.
list_article_groupsList all article groupsNo findings
Why it is in this group
- The name "list_article_groups" says "list": a word for reading.
Description, as the server wrote it List all article groups
list_articlesList articles, optionally filtered by group or to published ones.No findings
Why it is in this group
- The name "list_articles" says "list": a word for reading.
Description, as the server wrote it 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.
list_automationsList all automations for this projectNo findings
Why it is in this group
- The name "list_automations" says "list": a word for reading.
Description, as the server wrote it List all automations for this project
list_broadcast_recipientsList the per-recipient delivery status for a broadcast.No findings
Why it is in this group
- The name "list_broadcast_recipients" says "list": a word for reading.
Description, as the server wrote it List the per-recipient delivery status for a broadcast.
list_broadcastsList one-off email broadcasts for a project.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_broadcasts" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List one-off email broadcasts for a project.
list_companiesList companies with optional search and stage filter.No findings
Why it is in this group
- The name "list_companies" says "list": a word for reading.
Description, as the server wrote it List companies with optional search and stage filter. Includes companies with no linked contacts. Paginated.
list_companies_by_stageRead-only CRM board: list ALL companies grouped by pipeline stage, including companies with no linked contacts and unstaged companies.Reads private dataNo findings
Why it is in this group
- The name "list_companies_by_stage" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "read" and "contact": it reads contacts.
Description, as the server wrote it 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.
list_contactsList contacts with optional searchReads private dataNo findings
Why it is in this group
- The name "list_contacts" says "list": a word for reading.
What it can reach
- private-dataThe name "list_contacts" says "list" and "contact": it reads contacts.
- private-dataThe description's first sentence says "list" and "contact": it reads contacts.
Description, as the server wrote it List contacts with optional search
list_conversationsList conversations with filters (status, spam, limit, offset).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_conversations" says "list": a word for reading.
What it can reach
- private-dataThe name "list_conversations" says "list" and "conversation": it reads messages.
- private-dataThe description's first sentence says "list" and "conversation": it reads messages.
- untrusted-inputThe name "list_conversations" says "list" and "conversation": it reads messages, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it List conversations with filters (status, spam, limit, offset). Each result says whether it is marked as spam.
list_crm_stagesList CRM pipeline stagesNo findings
Why it is in this group
- The name "list_crm_stages" says "list": a word for reading.
Description, as the server wrote it List CRM pipeline stages
list_custom_propertiesList visitor custom properties and sampled metadata keys available for campaign predicates and conditions.No findings
Why it is in this group
- The name "list_custom_properties" says "list": a word for reading.
Description, as the server wrote it List visitor custom properties and sampled metadata keys available for campaign predicates and conditions.
list_dealsList deals (sales opportunities).No findings
Why it is in this group
- The name "list_deals" says "list": a word for reading.
Description, as the server wrote it 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.
list_email_campaign_runsList email campaign runs with delivery, open, and click data.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_email_campaign_runs" says "list": a word for reading.
What it can reach
- private-dataThe name "list_email_campaign_runs" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_email_campaign_runs" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List email campaign runs with delivery, open, and click data.
list_email_campaignsList email campaigns backed by visitor workflows.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_email_campaigns" says "list": a word for reading.
What it can reach
- private-dataThe name "list_email_campaigns" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_email_campaigns" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List email campaigns backed by visitor workflows.
list_email_categoriesList a project's email categories used for per-category unsubscribe/preferences (marketing, product updates, transactional, ...).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_email_categories" says "list": a word for reading.
What it can reach
- private-dataThe name "list_email_categories" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_email_categories" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it 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_imagesList images in a project’s email image library, newest first.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_email_images" says "list": a word for reading.
What it can reach
- private-dataThe name "list_email_images" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_email_images" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List images in a project’s email image library, newest first. Use these for lifecycle/workflow email `image` blocks.
list_email_suppressionsList email addresses suppressed for lifecycle email campaigns in a project.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_email_suppressions" says "list": a word for reading.
What it can reach
- private-dataThe name "list_email_suppressions" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_email_suppressions" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List email addresses suppressed for lifecycle email campaigns in a project.
list_email_templatesList reusable workflow email templates for a project.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_email_templates" says "list": a word for reading.
What it can reach
- private-dataThe name "list_email_templates" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_email_templates" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List reusable workflow email templates for a project.
list_event_namesList tracked lifecycle event names seen in a project.No findings
Why it is in this group
- The name "list_event_names" says "list": a word for reading.
Description, as the server wrote it List tracked lifecycle event names seen in a project.
list_guidesList all guides for this projectNo findings
Why it is in this group
- The name "list_guides" says "list": a word for reading.
Description, as the server wrote it List all guides for this project
list_macrosList shared macros (available to all team members)No findings
Why it is in this group
- The name "list_macros" says "list": a word for reading.
Description, as the server wrote it List shared macros (available to all team members)
list_message_tagsList all tags defined for this projectReads private dataReads text others writeNo findings
Why it is in this group
- The name "list_message_tags" says "list": a word for reading.
What it can reach
- private-dataThe name "list_message_tags" says "list" and "message": it reads messages.
- untrusted-inputThe name "list_message_tags" says "list" and "message": it reads messages, which other people can write.
Description, as the server wrote it List all tags defined for this project
list_projectsList projects available to this MCP key.No findings
Why it is in this group
- The name "list_projects" says "list": a word for reading.
Description, as the server wrote it List projects available to this MCP key. Call this first, then get_email_capabilities_overview for email features.
list_teamsList all teams for this project with member and conversation countsReads private dataReads text others writeNo findings
Why it is in this group
- The name "list_teams" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "conversation": it reads messages.
- untrusted-inputThe description's first sentence says "list" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it List all teams for this project with member and conversation counts
list_test_email_recipientsList account user emails allowed as workflow/email test recipients.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "list_test_email_recipients" says "list": a word for reading.
What it can reach
- private-dataThe name "list_test_email_recipients" says "list" and "email": it reads mail.
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe name "list_test_email_recipients" says "list" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List account user emails allowed as workflow/email test recipients.
list_webhooksList all webhooks for this projectNo findings
Why it is in this group
- The name "list_webhooks" says "list": a word for reading.
Description, as the server wrote it List all webhooks for this project
list_workflow_executionsList execution history for a visitor workflow.No findings
Why it is in this group
- The name "list_workflow_executions" says "list": a word for reading.
Description, as the server wrote it List execution history for a visitor workflow.
list_workflowsList visitor workflows for a project (trigger + branching graph automations), ordered by priority.No findings
Why it is in this group
- The name "list_workflows" says "list": a word for reading.
Description, as the server wrote it List visitor workflows for a project (trigger + branching graph automations), ordered by priority.
preview_broadcast_audiencePreview who a broadcast (or a candidate audience) would reach: match count, suppressed count, contacts left out by list hygiene (invalid/disposable/role addresses, unengaged, recen…Reads private dataNo findings
Why it is in this group
- The name "preview_broadcast_audience" says "preview": a word for reading.
What it can reach
- private-dataThe description's first sentence says "preview" and "contact": it reads contacts.
Description, as the server wrote it 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_templateRender an email template preview as subject, preheader, HTML, and plain text.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "preview_email_template" says "preview": a word for reading.
What it can reach
- private-dataThe name "preview_email_template" says "preview" and "email": it reads mail.
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe name "preview_email_template" says "preview" and "email": it reads inbound email, which other people can write.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it Render an email template preview as subject, preheader, HTML, and plain text.
validate_email_templateValidate an email template and return AI-client-friendly errors.No findings
Why it is in this group
- The name "validate_email_template" says "validate": a word for reading.
Description, as the server wrote it Validate an email template and return AI-client-friendly errors.
validate_guideValidate a guide's start location and step selectors against the live pages the developer is logged into.No findings
Why it is in this group
- The name "validate_guide" says "validate": a word for reading.
Description, as the server wrote it 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_workflowValidate a visitor workflow definition without saving it.No findings
Why it is in this group
- The name "validate_workflow" says "validate": a word for reading.
Description, as the server wrote it Validate a visitor workflow definition without saving it. Same input as create_workflow.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
25480 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 26 outbound tools breaks every one.
- Reads private data35
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write28
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out26
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__chatwithhal__create_broadcast",
"mcp__chatwithhal__create_contact",
"mcp__chatwithhal__create_email_campaign",
"mcp__chatwithhal__create_email_template",
"mcp__chatwithhal__create_webhook",
"mcp__chatwithhal__disable_email_campaign",
"mcp__chatwithhal__enable_email_campaign",
"mcp__chatwithhal__reply_to_conversation",
"mcp__chatwithhal__reset_email_deliverability_health",
"mcp__chatwithhal__resume_broadcast",
"mcp__chatwithhal__schedule_broadcast",
"mcp__chatwithhal__select_broadcast_ab_winner",
"mcp__chatwithhal__send_broadcast_now",
"mcp__chatwithhal__send_test_broadcast_email",
"mcp__chatwithhal__send_test_email_campaign",
"mcp__chatwithhal__send_test_email_template",
"mcp__chatwithhal__send_test_workflow_email",
"mcp__chatwithhal__update_broadcast",
"mcp__chatwithhal__update_contact",
"mcp__chatwithhal__update_email_campaign",
"mcp__chatwithhal__update_email_categories",
"mcp__chatwithhal__update_email_postal_address",
"mcp__chatwithhal__update_email_template",
"mcp__chatwithhal__update_webhook",
"mcp__chatwithhal__update_workflow_email_defaults",
"mcp__chatwithhal__upload_email_image"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http chatwithhal https://api.chatwithhal.com/mcp --header 'Authorization: <your-authorization>'claude mcp add --transport http chatwithhal https://api.chatwithhal.com/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__chatwithhal__list_projects",
"mcp__chatwithhal__list_conversations",
"mcp__chatwithhal__get_conversation",
"mcp__chatwithhal__get_conversation_image",
"mcp__chatwithhal__list_article_groups",
"mcp__chatwithhal__list_articles",
"mcp__chatwithhal__find_relevant_articles",
"mcp__chatwithhal__get_article",
"mcp__chatwithhal__list_contacts",
"mcp__chatwithhal__get_contact",
"mcp__chatwithhal__list_crm_stages",
"mcp__chatwithhal__list_companies",
"mcp__chatwithhal__list_companies_by_stage",
"mcp__chatwithhal__get_company",
"mcp__chatwithhal__list_deals",
"mcp__chatwithhal__get_deal_pipeline",
"mcp__chatwithhal__get_deal",
"mcp__chatwithhal__get_email_capabilities_overview",
"mcp__chatwithhal__list_email_templates",
"mcp__chatwithhal__get_email_template",
"mcp__chatwithhal__preview_email_template",
"mcp__chatwithhal__validate_email_template",
"mcp__chatwithhal__list_email_suppressions",
"mcp__chatwithhal__get_email_unsubscribe_status",
"mcp__chatwithhal__list_email_campaigns",
"mcp__chatwithhal__get_email_campaign",
"mcp__chatwithhal__list_event_names",
"mcp__chatwithhal__list_custom_properties",
"mcp__chatwithhal__list_email_campaign_runs",
"mcp__chatwithhal__get_email_campaign_run",
"mcp__chatwithhal__list_email_categories",
"mcp__chatwithhal__list_email_images",
"mcp__chatwithhal__list_broadcasts",
"mcp__chatwithhal__get_broadcast",
"mcp__chatwithhal__preview_broadcast_audience",
"mcp__chatwithhal__get_broadcast_audience_fields",
"mcp__chatwithhal__list_broadcast_recipients",
"mcp__chatwithhal__get_broadcast_readiness",
"mcp__chatwithhal__get_email_deliverability",
"mcp__chatwithhal__get_workflow_builder_reference",
"mcp__chatwithhal__list_workflows",
"mcp__chatwithhal__get_workflow",
"mcp__chatwithhal__validate_workflow",
"mcp__chatwithhal__list_workflow_executions",
"mcp__chatwithhal__get_workflow_execution",
"mcp__chatwithhal__get_workflow_email_defaults",
"mcp__chatwithhal__list_test_email_recipients",
"mcp__chatwithhal__list_automations",
"mcp__chatwithhal__get_automation",
"mcp__chatwithhal__list_guides",
"mcp__chatwithhal__get_guide",
"mcp__chatwithhal__get_guide_stats",
"mcp__chatwithhal__get_guide_health",
"mcp__chatwithhal__validate_guide",
"mcp__chatwithhal__list_message_tags",
"mcp__chatwithhal__get_message_tags_stats",
"mcp__chatwithhal__list_teams",
"mcp__chatwithhal__get_team",
"mcp__chatwithhal__list_macros",
"mcp__chatwithhal__get_macro",
"mcp__chatwithhal__list_webhooks",
"mcp__chatwithhal__get_statistics",
"mcp__chatwithhal__get_sender_domain"
],
"ask": [
"mcp__chatwithhal__set_typing",
"mcp__chatwithhal__reply_to_conversation",
"mcp__chatwithhal__update_conversation",
"mcp__chatwithhal__generate_ai_response_suggestion",
"mcp__chatwithhal__create_article_group",
"mcp__chatwithhal__update_article_group",
"mcp__chatwithhal__create_article",
"mcp__chatwithhal__update_article",
"mcp__chatwithhal__create_contact",
"mcp__chatwithhal__update_contact",
"mcp__chatwithhal__link_contact_to_company",
"mcp__chatwithhal__create_company",
"mcp__chatwithhal__update_company",
"mcp__chatwithhal__merge_companies",
"mcp__chatwithhal__create_deal",
"mcp__chatwithhal__update_deal",
"mcp__chatwithhal__set_deal_contact",
"mcp__chatwithhal__create_email_template",
"mcp__chatwithhal__update_email_template",
"mcp__chatwithhal__send_test_email_template",
"mcp__chatwithhal__send_test_email_campaign",
"mcp__chatwithhal__suppress_email_recipient",
"mcp__chatwithhal__create_email_campaign",
"mcp__chatwithhal__update_email_campaign",
"mcp__chatwithhal__enable_email_campaign",
"mcp__chatwithhal__disable_email_campaign",
"mcp__chatwithhal__update_email_categories",
"mcp__chatwithhal__upload_email_image",
"mcp__chatwithhal__create_broadcast",
"mcp__chatwithhal__update_broadcast",
"mcp__chatwithhal__send_test_broadcast_email",
"mcp__chatwithhal__schedule_broadcast",
"mcp__chatwithhal__send_broadcast_now",
"mcp__chatwithhal__resume_broadcast",
"mcp__chatwithhal__select_broadcast_ab_winner",
"mcp__chatwithhal__update_email_postal_address",
"mcp__chatwithhal__reset_email_deliverability_health",
"mcp__chatwithhal__create_workflow",
"mcp__chatwithhal__update_workflow",
"mcp__chatwithhal__set_workflow_enabled",
"mcp__chatwithhal__reorder_workflows",
"mcp__chatwithhal__update_workflow_email_defaults",
"mcp__chatwithhal__send_test_workflow_email",
"mcp__chatwithhal__track_event",
"mcp__chatwithhal__create_automation",
"mcp__chatwithhal__update_automation",
"mcp__chatwithhal__toggle_automation",
"mcp__chatwithhal__create_guide",
"mcp__chatwithhal__update_guide",
"mcp__chatwithhal__toggle_guide",
"mcp__chatwithhal__tag_message",
"mcp__chatwithhal__create_webhook",
"mcp__chatwithhal__update_webhook",
"mcp__chatwithhal__configure_sender_domain",
"mcp__chatwithhal__check_sender_domain",
"mcp__chatwithhal__update_sender_identity",
"mcp__chatwithhal__import_conversation",
"mcp__chatwithhal__import_conversations"
],
"deny": [
"mcp__chatwithhal__remove_deal_contact",
"mcp__chatwithhal__delete_deal",
"mcp__chatwithhal__delete_email_template",
"mcp__chatwithhal__unsuppress_email_recipient",
"mcp__chatwithhal__delete_email_campaign",
"mcp__chatwithhal__delete_email_image",
"mcp__chatwithhal__delete_broadcast",
"mcp__chatwithhal__cancel_broadcast",
"mcp__chatwithhal__delete_workflow",
"mcp__chatwithhal__delete_guide",
"mcp__chatwithhal__untag_message",
"mcp__chatwithhal__delete_webhook",
"mcp__chatwithhal__remove_sender_domain"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as chatwithhal. Review it before you use it.
Capability tags behind 61 rules
- mcp__chatwithhal__list_conversations private-data, untrusted-input
- mcp__chatwithhal__get_conversation private-data, untrusted-input
- mcp__chatwithhal__get_conversation_image private-data, untrusted-input
- mcp__chatwithhal__reply_to_conversation outbound
- mcp__chatwithhal__find_relevant_articles private-data, untrusted-input
- mcp__chatwithhal__list_contacts private-data
- mcp__chatwithhal__get_contact private-data
- mcp__chatwithhal__create_contact outbound
- mcp__chatwithhal__update_contact outbound
- mcp__chatwithhal__list_companies_by_stage private-data
- mcp__chatwithhal__get_company private-data
- mcp__chatwithhal__get_deal private-data
- mcp__chatwithhal__get_email_capabilities_overview private-data, untrusted-input
- mcp__chatwithhal__list_email_templates private-data, untrusted-input
- mcp__chatwithhal__get_email_template private-data, untrusted-input
- mcp__chatwithhal__create_email_template outbound
- mcp__chatwithhal__update_email_template outbound
- mcp__chatwithhal__preview_email_template private-data, untrusted-input
- mcp__chatwithhal__send_test_email_template outbound
- mcp__chatwithhal__send_test_email_campaign outbound
- mcp__chatwithhal__list_email_suppressions private-data, untrusted-input
- mcp__chatwithhal__get_email_unsubscribe_status private-data, untrusted-input
- mcp__chatwithhal__list_email_campaigns private-data, untrusted-input
- mcp__chatwithhal__get_email_campaign private-data, untrusted-input
- mcp__chatwithhal__create_email_campaign outbound
- mcp__chatwithhal__update_email_campaign outbound
- mcp__chatwithhal__enable_email_campaign outbound
- mcp__chatwithhal__disable_email_campaign outbound
- mcp__chatwithhal__list_email_campaign_runs private-data, untrusted-input
- mcp__chatwithhal__get_email_campaign_run private-data, untrusted-input
- mcp__chatwithhal__list_email_categories private-data, untrusted-input
- mcp__chatwithhal__update_email_categories outbound
- mcp__chatwithhal__list_email_images private-data, untrusted-input
- mcp__chatwithhal__upload_email_image outbound
- mcp__chatwithhal__list_broadcasts private-data, untrusted-input
- mcp__chatwithhal__get_broadcast private-data, untrusted-input
- mcp__chatwithhal__create_broadcast outbound
- mcp__chatwithhal__update_broadcast outbound
- mcp__chatwithhal__preview_broadcast_audience private-data
- mcp__chatwithhal__get_broadcast_audience_fields private-data
- mcp__chatwithhal__send_test_broadcast_email outbound
- mcp__chatwithhal__schedule_broadcast outbound
- mcp__chatwithhal__send_broadcast_now outbound
- mcp__chatwithhal__get_broadcast_readiness private-data, untrusted-input
- mcp__chatwithhal__resume_broadcast outbound
- mcp__chatwithhal__select_broadcast_ab_winner outbound
- mcp__chatwithhal__get_email_deliverability private-data, untrusted-input
- mcp__chatwithhal__update_email_postal_address outbound
- mcp__chatwithhal__reset_email_deliverability_health outbound
- mcp__chatwithhal__get_workflow_builder_reference private-data, untrusted-input
- mcp__chatwithhal__get_workflow_email_defaults private-data, untrusted-input
- mcp__chatwithhal__update_workflow_email_defaults outbound
- mcp__chatwithhal__send_test_workflow_email outbound
- mcp__chatwithhal__list_test_email_recipients private-data, untrusted-input
- mcp__chatwithhal__list_message_tags private-data, untrusted-input
- mcp__chatwithhal__get_message_tags_stats private-data, untrusted-input
- mcp__chatwithhal__list_teams private-data, untrusted-input
- mcp__chatwithhal__create_webhook outbound
- mcp__chatwithhal__update_webhook outbound
- mcp__chatwithhal__get_statistics private-data, untrusted-input
- mcp__chatwithhal__get_sender_domain private-data, untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.chatwithhal/mcp/verify?hash=a1681d4a358c13f384688578aad2a05944bc3dc453f3eb68fe4c3cdcb4154924" | jq -e '.changed == false'Pinned hash a1681d4a358c, from Oct 30, 2026, 13:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.chatwithhal/mcp/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.chatwithhal/mcp)Source: MCP Registry. Synced Oct 30, 2026, 14:17 UTC.