AhaSend Email API & SMTP relay
공식AhaSend 계정에서 이메일을 보내고, 이메일이 실패한 이유를 확인하고, 발신 도메인을 설정하고, 템플릿, 연락처, 목록 및 캠페인을 관리하세요.
AhaSend Email API & SMTP Relay MCP(으)로 무엇을 할 수 있나요?
- 이메일 보내기 — 일회성 이메일, 템플릿 이메일 또는 대화 이메일을 보내도록 어시스턴트에 요청하고, 예약된 발송을 취소합니다.
- 전송 진단 — 메시지를 조회하고, 이메일이 실패한 이유를 확인하며, 전달 가능성, 반송, 전송 시간 통계를 가져옵니다.
- 도메인 관리 — 발송 도메인을 나열, 추가, 업데이트, 삭제하고 도메인의 DNS 레코드를 확인합니다.
- 템플릿 작성 — 템플릿과 캠페인 템플릿을 생성, 업데이트, 게시, 버전 관리하며, Simple Editor 디자인을 AhaML 마크업으로 편집합니다.
- 오디언스 관리 — 연락처, 목록, 세그먼트를 생성 및 업데이트하고, 연락처를 목록에 추가하며, 세그먼트를 미리 봅니다.
- 캠페인 실행 — 캠페인을 생성, 복제, 테스트, 발송, 예약한 다음 캠페인 통계와 수신자를 확인합니다.
호스팅형 MCP 서버
npx add-mcp 'https://mcp.ahasend.com/mcp'Claude Code, Codex, Cursor 등에 설치됩니다
문서
ahasend-mcp
AhaSend용 MCP 도구를 제공하는 Go 모듈입니다. 이 도구들을 사용하면 AI 에이전트가 이메일을 보내고, 이메일이 실패한 이유를 확인하며, 도메인, 템플릿, 연락처, 목록, 캠페인, 웹훅, 라우트, 억제 목록, SMTP 자격 증명, 하위 계정을 관리할 수 있습니다.
각 도구는 ahasend-go를 통해 AhaSend v2 API를 호출합니다. API 키의 스코프가 에이전트가 할 수 있는 작업을 결정합니다.
이 모듈은 공식 Go MCP SDK로 서버를 구성합니다. 프로그램에서 stdio, HTTP 또는 기타 SDK 전송 방식 중 어떻게 제공할지 선택합니다.
go get github.com/AhaSend/ahasend-mcp
예제
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{})
옵션
| 필드 | 기능 |
|---|---|
Client | API 키가 포함된 ahasend-go 클라이언트입니다. 필수입니다. |
AccountID | 도구가 작업할 계정입니다. 필수입니다. |
DashboardBaseURL | 캠페인 링크에 사용되는 AhaSend 대시보드 URL입니다. 필수입니다. |
ConfirmationKey | 캠페인 발송 확인 질문에 서명하는 최소 32바이트의 비밀 값입니다. 필수입니다. |
Scopes | API 키의 스코프입니다. 키가 사용할 수 있는 도구만 표시됩니다. nil은 모든 도구를 표시합니다. |
Toolsets | 지정한 도구 세트만 표시합니다. nil은 모두 표시합니다. |
ReadOnly | 아무것도 변경하지 않는 도구만 표시합니다. |
Stateless | 상태 비저장 HTTP로 제공하는 경우 true로 설정합니다. |
MaxRecipientsPerSend | 한 번 발송 시 최대 수신자 수입니다. 기본값 50입니다. |
ReadInbound | 메시지 도구가 계정이 수신한 이메일을 반환하도록 합니다. 기본적으로 꺼져 있습니다. |
Blocked | 설정하면 모든 도구 호출이 이 텍스트를 오류로 반환하고 아무 작업도 하지 않습니다. |
Recorder | 도구 호출마다 레코드 하나를 받습니다: 도구 이름, 성공 여부, 오류 종류, 소요 시간. 입력이나 결과는 절대 포함되지 않습니다. |
많은 사용자에게 제공하는 경우, 각 요청마다 해당 사용자의 키와 스코프로
새 서버를 구성하세요. 비용이 적게 듭니다. 모든 인스턴스에서 동일한
ConfirmationKey을 사용하세요.
Catalogue()은 필요한 스코프와 함께 모든 도구를 나열합니다.
OfferedScopes()는 사용자가 스코프를 선택하는 페이지를 위해 도구가 사용하는
모든 스코프를 나열합니다.
도구
| 도구 세트 | 도구 |
|---|---|
sending | send_email, send_conversation_email, send_template_email, cancel_scheduled_email |
diagnostics | list_messages, get_message, diagnose_message, get_deliverability_stats, get_bounce_stats, get_delivery_time_stats |
domains | list_domains, get_domain, add_domain, check_domain_dns, update_domain, delete_domain |
templates | list_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 |
audience | list_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 |
campaigns | list_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 |
management | get_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 |
각 도구는 해당 API 엔드포인트에 필요한 스코프를 요구합니다. send_campaign과
schedule_campaign은 campaigns:read과 lists:read도 필요하며,
세그먼트를 사용하는 캠페인을 보내려면 segments:read도 필요합니다. 캠페인
템플릿 도구는 campaigns:read도 필요합니다. preview_segment,
list_segment_contacts, list_contact_segments은 segments:read뿐 아니라
contacts:read도 필요합니다.
목록 도구는 기본적으로 20개 항목을 반환하며 최대 100개입니다. 반환된 커서를 전달하면 다음 페이지를 가져옵니다.
API 키나 SMTP 자격 증명을 생성하거나, 계정 설정, 결제, 팀 구성원을 변경하거나, 모든 억제 항목을 제거하거나, 하위 계정을 삭제 또는 정지하는 도구는 없습니다.
Simple Editor 디자인과 AhaML
템플릿, 캠페인 템플릿, 캠페인 도구는 대시보드의 Simple Editor 디자인을
AhaSend Markup(AhaML) 형식, 즉 디자인의 XML 형태로 콘텐츠의 markup 필드에
읽고 씁니다. get_template는 템플릿의 작업 사본, 즉 초안이 있는 동안의 초안을
반환하므로 에이전트는 읽은 내용을 편집합니다. get_published_template은 발송에 사용되는
사본을 반환합니다.
서버에는 리소스가 하나 있습니다. ahasend://docs/ahaml: 모든 태그, 속성, 제한, 오류 코드가
담긴 AhaML 참조입니다. https://ahasend.com/docs/send-api/ahaml에도 있습니다. 이 리소스는 모든
연결에 나열되므로 웹 접근이 없는 에이전트도 읽을 수 있습니다.
안전 규칙
캠페인 발송에는 사용자의 동의가 필요합니다. send_campaign와
schedule_campaign은 발송 시간, 연락처 수, 캠페인 이름, 제목, 발신자, 목록과 세그먼트,
제외된 목록과 세그먼트를 담은 양식을 사용자에게 보여줍니다. 사용자가 예라고
답한 경우에만 발송합니다. 질문 후 캠페인이 변경되면 도구는 다시 질문합니다.
클라이언트가 양식을 표시할 수 없으면 도구는 아무것도 보내지 않고 대시보드의
캠페인 링크를 반환합니다.
일회성 발송에는 수신자 제한이 있습니다. MaxRecipientsPerSend명(기본값 50)을 초과하는
수신자에게 단일 발송하는 것은 거부됩니다. 대량 이메일에는 캠페인을
사용하세요.
수신 이메일은 기본적으로 숨겨집니다. 누구나 계정의 인바운드 주소로 이메일을
보낼 수 있으며, 그 이메일에는 에이전트를 속이려는 텍스트가 포함될 수 있습니다.
ReadInbound이 켜져 있지 않으면 메시지 도구는 수신 이메일을 반환하지 않습니다.
켜져 있으면 수신 메시지에 untrusted: true 표시가 붙습니다.
오류
API가 호출을 거부하면 도구는 API의 메시지와 다음에 할 일을 담은 오류를 반환합니다. AhaML을 거부하면 오류는 최대 처음 100개까지의 문제를 각각의 코드, 줄, 열, 경로, 힌트와 함께 나열합니다. 전체 개수는 API의 메시지에 나옵니다.
로컬에서 사용해 보기
cmd/ahasend-mcp-dev은 자신의 API 키로 모든 도구를 stdio를 통해 제공합니다.
테스트 전용입니다.
go build -o ahasend-mcp-dev ./cmd/ahasend-mcp-dev
claude mcp add ahasend \
-e AHASEND_API_KEY=... -e AHASEND_ACCOUNT_ID=... \
-- ./ahasend-mcp-dev
기본값이 아닌 API를 사용하려면 AHASEND_BASE_URL을 설정하세요.
라이선스
MIT