AhaSend

com.ahasendPublished by ahasend.comOfficial publisherv0.1.1Updated Oct 24, 2026

Send email, check deliverability, set up domains, and run templates, contacts and campaigns.

VerifiedStreamable HTTPWeb executableCommunication & CollaborationBusiness & Commerce

Overview

AI-generated overview

Lets an assistant send email through AhaSend and manage domains, templates, contacts, lists, campaigns, webhooks and routes.

What you can do
Exposes AhaSend's email platform as MCP tools grouped into toolsets: sending (one-off, conversation and template emails, cancel scheduled sends), diagnostics (message lookup, bounce and delivery-time stats), domains, templates, audience (contacts and lists), campaigns, and management (webhooks, routes, suppressions, SMTP credentials, sub-accounts). Each tool calls the AhaSend v2 API, and the API key's scopes decide which tools are shown. Campaign sends require a person to confirm a form, and one-off sends are capped by a recipient limit.
When to use it
Use it when an assistant should draft and send transactional or campaign email, investigate why a message failed, or maintain AhaSend domains, templates, contact lists and campaigns without leaving the chat.
Requirements
A remote endpoint at mcp.ahasend.com with OAuth sign-in. The Go library route needs an AhaSend API key, an account ID, a dashboard base URL and a confirmation key of at least 32 random bytes; the local dev command reads AHASEND_API_KEY and AHASEND_ACCOUNT_ID, with optional AHASEND_BASE_URL.
Before you install
Tools can send email, create, update and delete domains, templates, contacts, lists, campaigns, webhooks, routes and suppressions, and delete SMTP credentials. Campaign sends need explicit user confirmation and fail if no form can be shown. Received email is hidden unless ReadInbound is enabled, and is then marked untrusted because it may contain prompt-injection text. The confirmation key is a secret.

Installation

In SourceWeft

  1. Open AhaSend in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.ahasend%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "ahasend": {
      "type": "http",
      "url": "https://mcp.ahasend.com/mcp"
    }
  }
}

README

ahasend-mcp

A Go module with MCP tools for AhaSend. With these tools, an AI agent can send email, find out why an email failed, and manage domains, templates, contacts, lists, campaigns, webhooks, routes, suppressions, SMTP credentials and sub-accounts.

Each tool calls the AhaSend v2 API through ahasend-go. The API key's scopes decide what the agent can do.

The module builds a server with the official Go MCP SDK. Your program chooses how to serve it: stdio, HTTP, or any other SDK transport.

sh
go get github.com/AhaSend/ahasend-mcp

Example

go
server, err := ahasendmcp.NewServer(	&mcp.Implementation{Name: "my-app", Version: "1.0.0"},	ahasendmcp.Options{		Client:           api.NewAPIClient(api.WithAPIKey(apiKey)),		AccountID:        accountID,		DashboardBaseURL: "https://dash.ahasend.com",		ConfirmationKey:  key, // at least 32 random bytes	},)if err != nil {	return err}return server.Run(ctx, &mcp.StdioTransport{})

Options

FieldWhat it does
ClientThe ahasend-go client, with the API key. Required.
AccountIDThe account the tools work on. Required.
DashboardBaseURLThe AhaSend dashboard URL, used in campaign links. Required.
ConfirmationKeyA secret of at least 32 bytes that signs campaign send questions. Required.
ScopesThe API key's scopes. Only tools the key can use are shown. nil shows every tool.
ToolsetsShow only these toolsets. nil shows all.
ReadOnlyShow only tools that change nothing.
StatelessSet to true if you serve over stateless HTTP.
MaxRecipientsPerSendThe most recipients for one send. Default 50.
ReadInboundLet the message tools return email the account received. Off by default.
BlockedIf set, every tool call returns this text as an error and does nothing.
RecorderGets one record per tool call: tool name, success, error kind and time taken. Never the inputs or results.

If you serve many users, build a new server for each request with that user's key and scopes. This is cheap. Use the same ConfirmationKey on every instance.

Catalogue() lists every tool with the scopes it needs. OfferedScopes() lists every scope the tools use, for a page where a user picks scopes.

Tools

ToolsetTools
sendingsend_email, send_conversation_email, send_template_email, cancel_scheduled_email
diagnosticslist_messages, get_message, diagnose_message, get_deliverability_stats, get_bounce_stats, get_delivery_time_stats
domainslist_domains, get_domain, add_domain, check_domain_dns, update_domain, delete_domain
templateslist_templates, get_template, get_published_template, create_template, update_template, delete_template, discard_template_draft, publish_template, list_template_versions, get_template_version, restore_template_version, list_campaign_templates, get_campaign_template, create_campaign_template, update_campaign_template, delete_campaign_template
audiencelist_contacts, get_contact, create_contact, upsert_contacts, update_contact, delete_contact, list_contact_lists, list_lists, get_list, create_list, update_list, delete_list, list_list_contacts, add_contacts_to_list, upsert_list_contact, remove_contact_from_list, list_segments, get_segment, create_segment, update_segment, delete_segment, preview_segment, list_segment_contacts, list_contact_segments
campaignslist_campaigns, get_campaign, create_campaign, update_campaign, delete_campaign, duplicate_campaign, send_campaign_test, send_campaign, schedule_campaign, unschedule_campaign, get_campaign_stats, list_campaign_recipients
managementget_account, list_webhooks, get_webhook, create_webhook, update_webhook, delete_webhook, list_routes, get_route, create_route, update_route, delete_route, list_suppressions, add_suppression, remove_suppression, list_smtp_credentials, get_smtp_credential, delete_smtp_credential, list_sub_accounts, get_sub_account, create_sub_account, update_sub_account, get_sub_account_usage

Each tool needs the scopes its API endpoint needs. send_campaign and schedule_campaign also need campaigns:read and lists:read, and segments:read to send a campaign that uses segments. The campaign template tools also need campaigns:read. preview_segment, list_segment_contacts and list_contact_segments need contacts:read as well as segments:read.

List tools return 20 items by default and at most 100. Pass the returned cursor to get the next page.

There are no tools to create API keys or SMTP credentials, change account settings, billing or team members, remove all suppressions, or delete or suspend sub-accounts.

Simple Editor designs and AhaML

The template, campaign template and campaign tools read and write a design of the dashboard's Simple Editor as AhaSend Markup (AhaML), an XML form of the design, in the content's markup field. get_template returns a template's working copy, the draft while one exists, so an agent edits what it read; get_published_template returns the copy a send uses.

The server has one resource, ahasend://docs/ahaml: the AhaML reference, with every tag, attribute, limit and error code. It is also at https://ahasend.com/docs/send-api/ahaml. The resource is listed on every connection, so an agent without web access can read it.

Safety rules

Campaign sends need a person's yes. send_campaign and schedule_campaign show the user a form with the send time, the number of contacts, the campaign name, subject, sender, lists and segments, and the excluded lists and segments. They send only if the user answers yes. If the campaign changes after the question, the tool asks again. If the client cannot show a form, the tool sends nothing and returns a link to the campaign in the dashboard.

One-off sends have a recipient limit. A single send to more than MaxRecipientsPerSend recipients (default 50) is refused. Use a campaign for bulk email.

Received email is hidden by default. Anyone can send email to an account's inbound addresses, and that email can contain text that tries to trick the agent. Unless ReadInbound is on, the message tools do not return received email. When it is on, received messages are marked untrusted: true.

Errors

When the API refuses a call, the tool returns an error with the API's message and what to do next. When it refuses AhaML, the error lists the problems, up to the first 100, each with its code, line, column, path and hint; the API's message gives how many there are.

Trying it locally

cmd/ahasend-mcp-dev serves every tool over stdio with your own API key. It is for testing only.

sh
go build -o ahasend-mcp-dev ./cmd/ahasend-mcp-devclaude mcp add ahasend \  -e AHASEND_API_KEY=... -e AHASEND_ACCOUNT_ID=... \  -- ./ahasend-mcp-dev

Set AHASEND_BASE_URL to use an API other than the default.

License

MIT

Source: README.md at commit e67830c

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

1
  1. v0.1.1LatestOct 14, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts