Skip to content

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.

Tools: 13 delete, 13 irreversible, 45 write, 63 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.
  • 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.

deny to break every path
{
  "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.

.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.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.chatwithhal/mcp
[![anlyon.dev](https://anlyon.dev/badge/com.chatwithhal/mcp.svg)](https://anlyon.dev/servers/com.chatwithhal/mcp)

Source: MCP Registry. Synced Oct 30, 2026, 14:17 UTC.