Hail MCP server

Connect Hail and your agent gets 20 tools, among them create_contact, get_call, get_email. It answers at https://mcp.hail.so over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 10 of 10 times since 5 September 2026; the last check, on 18 October 2026, succeeded.

Status
Answering
Tools
20
Reliability
10 of 10 checks
Response time
66 ms
Transport
streamable HTTP
Last checked
18 October 2026

Phone, SMS and email for AI agents. One remote MCP endpoint, OAuth login, zero install.

Description as the publisher wrote it.

The 20 tools Hail offers

ToolWhat it does
create_contactSave a new contact for the workspace. Provide at least one of ``phone_e164`` (E.164, e.g. ``+14155551234``) or ``email`` — the API rejects (422) a contact with neither. A duplicate phone or email on an existing contact returns 409. Example:
Inputs: name, phone_e164, email
get_callFetch the current state of one call by id. Use this after ``place_call`` (or to check on any prior call) to read the call's latest ``status`` and timing fields. Returns the API's ``CallResponse`` as a dict, or ``{"error": "call not found"}`
Inputs: call_id
get_emailFetch the full record of one email by id. Returns the complete row — including ``body_text`` / ``body_html`` and (for inbound mail) the ``in_reply_to`` / ``message_id`` headers and ``spam``/``virus``/``spf``/``dkim``/``dmarc`` verdicts. Use
Inputs: email_id
get_email_attachmentGet a fetchable URL for one inbound email attachment. ``attachment_id`` comes from an item in ``get_email``'s ``attachments`` list. Returns ``{"url": "<presigned-s3-url>"}`` — a short-lived (~5 minute) link to the attachment bytes, fetchabl
Inputs: email_id, attachment_id
get_email_eventsDelivery/engagement timeline (sent→delivered→opened…) for one email. Chronological lifecycle events for a single email — use this to see exactly what happened to one message (bounced? opened? clicked?) rather than the account-wide aggregate
Inputs: email_id, cursor, limit
get_email_rawGet a fetchable URL for an email's original MIME source. Returns ``{"url": "<presigned-s3-url>"}`` — a short-lived (~5 minute) link to the full raw RFC822 message. Fetch the URL directly to read the complete original; it needs no auth heade
Inputs: email_id
get_email_statsAccount-level email deliverability stats (counts, rates, time series). Aggregates across your whole organization's outbound mail over a window — use this for "how's deliverability doing" rather than one message's history (``get_email_events
Inputs: from_, to, bucket
get_eventsPage through events from across the org or one resource. Pass ``id="<type>:<uuid>"`` to narrow to a single resource — supported types are ``call``, ``email``, and ``sms`` (e.g. ``id="sms:<uuid>"`` after ``send_sms``). When narrowed to a cal
Inputs: id, kind, cursor, limit
get_smsFetch the current state of one SMS by id. Use this after ``send_sms`` to check delivery status. Example: get_sms(sms_id="...")
Inputs: sms_id
list_callsList recent calls in your organization, newest first. Cursor-paginated: pass the previous response's ``next_cursor`` to fetch the next page. ``status`` (one of queued, dialing, ringing, in_progress, completed, failed, busy, no_answer, cance
Inputs: cursor, limit, status, to
list_contactsList the workspace's contacts: org members (with their phone/email) plus manually saved contacts. Use ``lookup_contact`` for name searches. ``q`` optionally filters server-side (matches name/email/phone). ``limit`` caps the page (server def
Inputs: q, limit
list_email_domainsList the addresses this workspace can send email from. Call this BEFORE ``send_email`` when you do not already know the ``from_`` address — do not guess a domain. Returns ``{"items": [...], "next_cursor": ..., "default_from": ...}``. Each i
Inputs: cursor, limit
list_emailsList emails in your organization, newest first. Cursor-paginated: pass the previous response's ``next_cursor`` to fetch the next page. Two optional server-side filters: * ``direction`` — ``outbound`` or ``inbound``. Pass ``direction="inboun
Inputs: cursor, limit, status, direction
list_smsPage through recent SMS messages for your organization. ``status`` filters to one of: queued, sent, delivered, failed, undelivered, received. ``to`` filters to messages sent to a specific E.164 number. Paginate with the returned ``next_curs
Inputs: cursor, limit, status, to
lookup_contactFind a contact by name, email, or phone fragment. Resolve a person to their ``phone_e164``/``email`` BEFORE calling ``place_call``, ``send_sms``, or ``send_email`` — do not guess a contact's number. Returns up to 10 matches, same item shape
Inputs: query
place_callOriginate an outbound phone call. Provide ``system_prompt`` (mode A — Hail's bundled fallback LLM uses this prompt) or ``llm`` (mode B — bring your own OpenAI-compatible endpoint as ``{"base_url": ..., "api_key": ..., "model": ...}``), or b
Inputs: to, recipient_consent, system_prompt, llm, from_, first_message
send_emailSend an outbound email through your configured SES sender. ``to`` is a non-empty list of RFC-style email addresses. At least one of ``body_text`` / ``body_html`` is required (both is fine — multipart-alternative). Prefer including ``body_ht
Inputs: to, subject, recipient_consent, body_text, body_html, from_
send_smsSend an outbound SMS from your organization's dedicated number. ``to`` must be E.164 (e.g. ``+14155551234``). ``body`` is the message text. SMS requires a dedicated phone number on your organization — it does not use the shared voice-call p
Inputs: to, body, recipient_consent, from_, metadata, idempotency_key
upload_email_attachmentUpload a file to attach to a future outbound email. ``content_base64`` is the file's raw bytes, base64-encoded. Returns ``{"id": ..., "filename": ..., "content_type": ..., "size_bytes": ...}`` — pass ``id`` in ``send_email``'s ``attachment_
Inputs: content_base64, filename, content_type
whoamiIdentify the human whose credentials this session runs under. Use it to sign or route mail as that person: pass their address as ``send_email(reply_to=...)`` so replies reach them rather than the sending domain, which is often an unattended

Add Hail to your AI client

Every block below points at https://mcp.hail.so. Pick your client and copy.

Claude Code: one command in your terminal
claude mcp add --transport http hail https://mcp.hail.so
Claude Desktop: claude_desktop_config.json
{
  "mcpServers": {
    "hail": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.hail.so"]
    }
  }
}
Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "hail": {
      "url": "https://mcp.hail.so"
    }
  }
}
VS Code and GitHub Copilot: .vscode/mcp.json
{
  "servers": {
    "hail": {
      "type": "http",
      "url": "https://mcp.hail.so"
    }
  }
}
Zed: Zed settings.json
{
  "context_servers": {
    "hail": {
      "url": "https://mcp.hail.so"
    }
  }
}
Windsurf: ~/.codeium/mcp_config.json
{
  "mcpServers": {
    "hail": {
      "serverUrl": "https://mcp.hail.so"
    }
  }
}
JetBrains AI Assistant: Settings, Tools, AI Assistant, MCP, New MCP Server, as JSON
{
  "mcpServers": {
    "hail": {
      "url": "https://mcp.hail.so"
    }
  }
}
Continue: .continue/mcpServers/neuronto.yaml
name: Hail
version: 0.0.1
schema: v1
mcpServers:
  - name: Hail
    type: streamable-http
    url: https://mcp.hail.so
Gemini CLI: ~/.gemini/settings.json
{
  "mcpServers": {
    "hail": {
      "httpUrl": "https://mcp.hail.so"
    }
  }
}
Codex CLI: MCP server config
{
  "mcpServers": {
    "hail": {
      "type": "http",
      "url": "https://mcp.hail.so"
    }
  }
}
Warp: MCP servers, + Add, paste JSON
{
  "mcpServers": {
    "hail": {
      "url": "https://mcp.hail.so"
    }
  }
}
Goose: a one-click extension link
goose://extension?url=https%3A%2F%2Fmcp.hail.so&type=streamable_http&id=hail&name=Hail

Is Hail up right now?

It answered our last check on 18 October 2026 in 66 ms. Over 10 checks since 5 September 2026 it answered 10. Status here comes from Neuronto's own probes, not from the publisher.

MCP servers similar to Hail

Questions about Hail

How many tools does Hail have?

20, as returned by the server's own tools/list on 31 August 2026: create_contact, get_call, get_email, get_email_attachment, get_email_events, get_email_raw, get_email_stats, get_events, and 12 more.

Is Hail down?

It answered our last check on 18 October 2026 in 66 ms. Over 10 checks since 5 September 2026 it answered 10.

How do I add Hail to Cursor?

Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.hail.so. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.

Does Hail need an API key?

It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.

Where this comes from

Publisher: io.github.hail-hq. Endpoint host: mcp.hail.so. ARD identifier: urn:air:io.github.hail-hq:mcp:hail-mcp. First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page is inferred from its name. Ranking in Neuronto search is never for sale.

Is this your server? Get a message the day it stops answering or its tools change: monitoring, 14 days free. Or claim the domain to manage how it is listed.