สำหรับเอเจนต์ AI
MCP server ของ SendHQ
ให้เอเจนต์ AI ควบคุมเวิร์กสเปซ SendHQ หนึ่งเวิร์กสเปซได้เต็มรูปแบบและปลอดภัย ส่งและรับอีเมล ยืนยันโดเมน เผยแพร่เทมเพลต และตรวจสอบความสามารถในการส่งถึงผ่านเครื่องมือที่กำหนดชนิดข้อมูลอย่างเข้มงวด 59 รายการ เขียนสำหรับเอเจนต์เป็นหลัก แต่ผู้ใช้ที่เป็นมนุษย์ก็ยินดีต้อนรับ
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcpเซิร์ฟเวอร์นี้คืออะไร
MCP server ของ SendHQ ให้เอเจนต์ AI ใช้งานเวิร์กสเปซ SendHQ หนึ่งเวิร์กสเปซผ่าน Model Context Protocol ได้ ส่งอีเมล (แบบเดี่ยว แบบชุด แบบเทมเพลต การตอบกลับ ไฟล์แนบ และการลองใหม่แบบ idempotent) อ่านและค้นหาอีเมลที่ส่งและได้รับ (หัวเรื่อง เนื้อหา และชื่อไฟล์แนบ) พร้อมอีเวนต์การส่ง จัดอีเมลเข้าป้ายกำกับด้วยกฎจัดเก็บอัตโนมัติ จัดการฉบับร่างและไฟล์แนบส่วนตัว เขียนและเผยแพร่เทมเพลตแบบโฮสต์ เพิ่มและยืนยันโดเมนพร้อม DNS ตั้งค่าการรับอีเมลขาเข้าและที่อยู่ขาเข้า ตรวจสอบความสามารถในการส่งถึง bounce complaint และการระงับการส่ง และอ่านการใช้งานบัญชี สถานะการเรียกเก็บเงิน การวิเคราะห์ และเมทาดาทาของ API key
เป็นเซิร์ฟเวอร์ stdio ในเครื่องที่ฝังอยู่ในไบนารี CLI sendhq MCP client ของคุณเริ่ม sendhq mcp เป็นโปรเซสลูกและสื่อสาร JSON-RPC ผ่าน stdin/stdout การเรียกเครื่องมือทุกครั้งกลายเป็นคำขอที่มีเอกสารหนึ่งรายการไปยัง SendHQ REST API ที่ https://sendhq.cc/api/v1 โดยยืนยันตัวตนด้วย API key ของเวิร์กสเปซคุณ ดังนั้น MCP server จึงมีสิทธิ์เท่ากับคีย์นั้นทุกประการและไม่เกินกว่านั้น
- 59 เครื่องมือ ใน 8 กลุ่ม สร้างจากแค็ตตาล็อกเดียวที่เผยแพร่เป็น tools.json ด้วย
- JSON Schema ที่เข้มงวด: อาร์กิวเมนต์ที่ไม่รู้จัก ชนิดที่ผิด และฟิลด์บังคับที่ขาดหายจะถูกปฏิเสธในเครื่องก่อนที่จะไปถึง SendHQ
- ข้อผิดพลาดแบบมีโครงสร้าง พร้อม
codeที่คงที่statusของ HTTPexplanationremedyที่เป็นรูปธรรม และข้อมูลว่าการลองใหม่ช่วยได้หรือไม่ - ทุกเครื่องมือที่ส่งอีเมลจริงหรือทำลายข้อมูลจะระบุไว้ในคำแรกของคำอธิบาย และมี MCP safety annotation
- โหมด
--read-onlyซ่อนทุกเครื่องมือที่ส่งและเปลี่ยนแปลงข้อมูล - ไม่มีการบันทึกล็อกใด ๆ stdout ส่งเฉพาะข้อความโปรโตคอล API key และเนื้อหาข้อความจะไม่ไปถึงล็อกเลย
https://sendhq.cc/api/mcp (ค้นหาราคาและเอกสาร ไม่เข้าถึงบัญชี) เซิร์ฟเวอร์ในหน้านี้เป็นตัวเต็มที่ผูกกับบัญชี ทำงานในเครื่องหรือเป็นคอนเน็กเตอร์แบบโฮสต์ด้านล่างใช้ SendHQ ใน Claude และ ChatGPT
ไม่ต้องติดตั้ง SendHQ ยังให้บริการเซิร์ฟเวอร์นี้เป็นคอนเน็กเตอร์แบบโฮสต์ที่ https://mcp.sendhq.cc/mcp พร้อมเครื่องมือชุดเดียวกัน คุณเข้าสู่ระบบด้วยบัญชี SendHQ แทนการวางคีย์
Claude
- เปิด Settings → Connectors แล้วค้นหา SendHQ ในไดเรกทอรี หรือเลือก Add custom connector แล้ววาง
https://mcp.sendhq.cc/mcp - คลิก Connect เข้าสู่ระบบ SendHQ ตรวจสอบสิทธิ์การเข้าถึง แล้วคลิก Allow
- ขอให้ Claude ตรวจสอบกล่องจดหมายของคุณ ส่งอีเมลจากโดเมนที่ยืนยันแล้วของคุณ หรืออธิบายอีเมลตีกลับ
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
การอนุมัติและการตัดการเชื่อมต่อ
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - เครื่องมือที่ส่งอีเมลจริงหรือลบข้อมูลจะมีป้ายกำกับระบุไว้ การที่ผู้ช่วยจะถามคุณก่อนหรือไม่ตั้งค่าต่อเครื่องมือในตัวผู้ช่วย ใน Claude ให้เลือก Needs approval สำหรับเครื่องมือเหล่านั้นที่ Settings → Connectors → SendHQ
- คอนเน็กเตอร์จะได้ API key ของตัวเองซึ่งตั้งชื่อตามผู้ช่วย (เช่น “Claude (AI connector)”) ลบที่ API Keys เพื่อตัดการเชื่อมต่อทันที
- ไม่สามารถสร้างหรือเพิกถอน API key หรือเปลี่ยนการเรียกเก็บเงินได้ ไฟล์แนบส่งและคืนเป็น base64 ไม่มีการเข้าถึงไฟล์ในเครื่อง
- เวิร์กสเปซที่ยังไม่ชำระเงิน (ช่วงทดลองการเชื่อมต่อ) ส่งถึงได้เฉพาะอีเมลของบัญชีหรือที่อยู่จำลองของ AWS SES
คำถาม: postmaster@sendhq.cc ความเป็นส่วนตัว: sendhq.cc/privacy
ติดตั้ง
ติดตั้งไบนารี sendhq (Linux, macOS และ Windows บน x86-64 และ arm64) ตัวติดตั้งจะตรวจสอบ checksum ของรุ่นที่ปล่อยและวางไบนารีไว้ที่ ~/.local/bin เป็นค่าเริ่มต้น
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctorสร้าง API key ในแดชบอร์ดที่ https://sendhq.cc/app#/keys MCP server สร้างคีย์ไม่ได้ คำสั่งเดียวที่รันเซิร์ฟเวอร์คือ:
SENDHQ_API_KEY=re_your_key sendhq mcpโดยปกติคุณไม่ต้องรันคำสั่งนั้นด้วยตนเอง MCP client จะเรียกให้ เมื่อรันในเทอร์มินัล มันจะรอ JSON-RPC บน stdin
ตั้งค่าไคลเอนต์ของคุณ
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-onlyเพิ่ม --scope user เพื่อให้ใช้ได้ในทุกโปรเจกต์ หรือ --scope project เพื่อเขียนลงใน .mcp.json ของโปรเจกต์ สำหรับ .mcp.json ที่ใช้ร่วมกัน ให้อ้างอิงคีย์จากตัวแปรสภาพแวดล้อมแทนการคอมมิต Claude Code จะขยาย ${VAR} ใน .mcp.json
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }หรือจากบรรทัดคำสั่ง: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
Claude Desktop
แก้ไข claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) แล้วรีสตาร์ทแอป แอปเดสก์ท็อปไม่สืบทอด PATH ของเชลล์คุณ จึงให้ใช้พาธสัมบูรณ์ของไบนารี (which sendhq)
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}MCP client อื่น ๆ
ตั้งค่า stdio server ด้วยคำสั่ง sendhq อาร์กิวเมนต์ ["mcp"] (ใส่ "--read-only" ได้หากต้องการ) และตัวแปรสภาพแวดล้อมด้านล่าง เซิร์ฟเวอร์รองรับ MCP protocol เวอร์ชัน 2024-11-05, 2025-03-26, 2025-06-18 และ 2025-11-25 และทำงาน initialize, ping, tools/list และ tools/call ผลลัพธ์ของเครื่องมือมีทั้งบล็อกข้อความ JSON และ structuredContent
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}เซิร์ฟเวอร์ที่ผูกกับบัญชีไม่มีทรานสปอร์ต HTTP แบบโฮสต์ endpoint MCP ระยะไกลที่เขียนได้ต้องใช้ OAuth ต่อผู้ใช้ ซึ่ง SendHQ ไม่มี ไบนารีในเครื่องเก็บคีย์ไว้บนเครื่องที่ถือคีย์อยู่แล้ว
สภาพแวดล้อมและแฟลก
| ตัวแปรหรือแฟลก | จำเป็น | ความหมาย |
|---|---|---|
SENDHQ_API_KEY | ใช่ | API key ของเวิร์กสเปซ (re_…) ทุกเครื่องมือยกเว้น get_service_health ต้องใช้ หากไม่มี เซิร์ฟเวอร์ยังเริ่มทำงานได้และทุกการเรียกจะคืน auth_error แบบมีโครงสร้างที่อธิบายวิธีแก้ |
SENDHQ_API_BASE_URL | ไม่ | API base URL ค่าเริ่มต้นคือ https://sendhq.cc/api/v1 ใช้เฉพาะกับการติดตั้งในเครื่องหรือ staging SENDHQ_BASE_URL ยังรับเป็นชื่อเรียกแบบเก่า |
SENDHQ_MCP_READ_ONLY | ไม่ | 1, true หรือ yes ทำงานเหมือน --read-only |
--read-only | ไม่ | เปิดเผยเฉพาะเครื่องมือที่ไม่ส่งอีเมลและไม่เปลี่ยนสถานะ เครื่องมือที่ซ่อนไว้จะถูกปฏิเสธด้วยหากเรียกด้วยชื่อ |
SENDHQ_PROFILE / --profile | ไม่ | ใช้คีย์ที่จัดเก็บโดย sendhq auth login ใน keyring ของระบบปฏิบัติการ แทน SENDHQ_API_KEY หากมีทั้งสองอย่าง ตัวแปรสภาพแวดล้อมจะมีผลเหนือกว่า |
คีย์ถูกส่งเฉพาะในเฮดเดอร์ Authorization: Bearer ไปยัง base URL ที่ตั้งค่าไว้ จะไม่มีการพิมพ์ บันทึกล็อก สะท้อนในข้อผิดพลาด หรือรวมในผลลัพธ์ของเครื่องมือ
โมเดลความปลอดภัยสำหรับเอเจนต์
- ส่งอีเมลจริง
send_email,send_batchและsend_template_testส่งอีเมลถึงคนจริงและใช้เครดิตการส่ง คำอธิบายของเครื่องมือเหล่านี้ขึ้นต้นด้วยSENDS REAL EMAILเรียกใช้เฉพาะเมื่อผู้ใช้ขอให้ส่งข้อความนั้นโดยเฉพาะอย่างชัดเจน และยืนยันผู้รับ ผู้ส่ง และเนื้อหาแล้ว - ทำลายข้อมูล
delete_email,delete_draft,delete_attachment,delete_domain,delete_inboxและremove_suppressionถูกทำเครื่องหมายdestructiveHint: trueและคำอธิบายขึ้นต้นด้วยDESTRUCTIVEให้ยืนยันกับผู้ใช้ก่อนremove_suppressionลดความเข้มของการบล็อกเพื่อความปลอดภัย และเหมาะสมเฉพาะเมื่อมนุษย์ยืนยันว่าที่อยู่นั้นใช้งานได้อีกครั้ง - เปลี่ยนสถานะ การสร้างหรืออัปเดตฉบับร่าง เทมเพลต โดเมน และกล่องจดหมาย การเผยแพร่เทมเพลต และการเริ่มการยืนยัน จะเปลี่ยนเวิร์กสเปซแต่ไม่ส่งอีเมล
- อ่านอย่างเดียว ที่เหลือทั้งหมดเป็น
readOnlyHint: trueและเรียกใช้ได้อย่างอิสระโดยปลอดภัย - เซิร์ฟเวอร์นี้ไม่เปลี่ยน DNS เลย
add_domainคืนเรคคอร์ดให้มนุษย์เผยแพร่get_domain_connect_linkคืน URL ขอความยินยอมที่บุคคลต้องเปิดและอนุมัติที่ผู้ให้บริการ DNS ของตน - เซิร์ฟเวอร์นี้ไม่เปลี่ยนการเรียกเก็บเงินเลย
get_accountอ่านเฉพาะแพ็กเกจ การใช้งาน และสถานะการสมัคร - เวิร์กสเปซที่ยังไม่ชำระเงิน (ช่วงทดลองการเชื่อมต่อ) ส่งถึงได้เฉพาะอีเมลของเจ้าของบัญชี (
get_account→user.email) หรือที่อยู่จำลองของ AWS SES เช่นsuccess@simulator.amazonses.comและส่งไฟล์แนบไม่ได้ - ยอมรับไม่เท่ากับส่งถึง การส่งที่สำเร็จจะคืน ID หลักฐานการส่งถึง bounce และ complaint จะมาถึงภายหลังใน
list_email_eventsห้ามอ้างว่าเข้ากล่องจดหมายหรือมีคนอ่านข้อความแล้ว - อย่าเปลี่ยนไปใช้ที่อยู่ From อื่นเพื่อเลี่ยงการหยุดชั่วคราวแบบ
423และอย่าเพิ่มผู้รับที่ยกเลิกการรับหรือร้องเรียนกลับเข้าไปอีก
API key อยู่นอกขอบเขต
โดยการออกแบบ ไม่มีเครื่องมือที่สร้าง แก้ไข หมุนเวียน เพิกถอน หรือลบ API key เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง list_api_keys คืนเฉพาะชื่อ คำนำหน้าที่ไม่เป็นความลับ และเวลาใช้งานล่าสุด การจัดการคีย์อยู่ในแดชบอร์ดกับมนุษย์ที่เข้าสู่ระบบ
เวิร์กโฟลว์
1. การส่งครั้งแรก
get_service_healthยืนยันว่าเข้าถึง API ได้ (ใช้งานได้โดยไม่ต้องมีคีย์)get_accountแสดงแพ็กเกจ (access.tier) โควตาที่เหลือ และuser.emailในช่วงทดลอง อีเมลนั้นเป็นผู้รับจริงเพียงรายเดียวที่อนุญาตlist_sending_identitiesแสดงที่อยู่ From ที่คุณใช้ได้ หากว่างเปล่า ให้ทำเวิร์กโฟลว์โดเมนก่อน- ยืนยันผู้ส่ง ผู้รับ หัวเรื่อง และเนื้อหากับผู้ใช้ จากนั้นเรียก
send_emailพร้อมidempotency_key list_email_eventsพร้อมidที่ได้คืนมาจะแสดงdelivery,bounce,complaintหรือrejectเมื่อผู้ให้บริการรายงาน (โดยปกติภายในไม่กี่วินาทีถึงไม่กี่นาที)
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. การยืนยันโดเมนตั้งแต่ต้นจนจบ
add_domainพร้อมname: "example.com"ผลลัพธ์รวมเรคคอร์ด DNS (CNAME ของ DKIM การยืนยัน SES SPF และ DMARC ที่แนะนำ)get_dns_providerพร้อมdomain_idตรวจหาผู้ให้บริการ DNS ที่เป็นผู้มีอำนาจ และคืนโฮสต์แบบสัมพัทธ์ที่ตรงกันที่ต้องกรอกสำหรับแต่ละเรคคอร์ดที่ผู้ให้บริการนั้น- หาก
providers.domainConnect.availableเป็น trueget_domain_connect_linkจะคืน URL ขอความยินยอม ให้ส่งให้มนุษย์ จะไม่มีอะไรเปลี่ยนจนกว่าเขาจะอนุมัติที่ผู้ให้บริการ มิฉะนั้นให้ส่งเรคคอร์ดที่ต้องเผยแพร่ให้มนุษย์ อย่าเผยแพร่เรคคอร์ด SPF ที่สองเด็ดขาด ให้รวมinclude:amazonses.comเข้ากับค่าv=spf1ที่มีอยู่ verify_domainตรวจ DNS และ SES ซ้ำ สถานะเปลี่ยนผ่านpending,checkingและpropagatingไปเป็นverifiedให้ pollverify_domainหรือget_domainทุก 30–60 วินาที DNS อาจใช้เวลาตั้งแต่ไม่กี่นาทีถึงหลายชั่วโมง- เมื่อ
statusเป็นverifiedที่อยู่ของโดเมนจะปรากฏในlist_sending_identities
3. Bounce, complaint และการระงับการส่ง
list_blocked_recipientsคืนทุกที่อยู่ที่ถูกบล็อกพร้อมเหตุผล (bounce,complaint,unsubscribe) และจำนวนสรุปlist_suppressionsคืนการระงับการส่งจาก hard bounce และ complaint ส่วนdeliverability_statsให้อัตราการส่งถึง bounce และ complaint ย้อนหลัง 30 วัน และlist_sender_reputationแสดงที่อยู่ From ที่ถูกจำกัดหรือหยุดชั่วคราว- การส่งที่มีผู้รับที่ถูกระงับการส่งจะล้มเหลวด้วย
422 recipient_suppressedให้ลบผู้รับรายนั้นแล้วส่งใหม่ - เรียก
remove_suppressionเฉพาะเมื่อมนุษย์ยืนยันว่ากล่องจดหมายที่เคยตีกลับใช้งานได้แล้วเท่านั้น การระงับการส่งจาก complaint เป็นแบบถาวร (409 complaint_suppression_locked)
4. รับอีเมลขาเข้า
- ต้องยืนยันโดเมน (มักเป็นโดเมนย่อย เช่น
inbound.example.com) setup_inboundจัดเตรียมการรับอีเมลและคืนเรคคอร์ด MX หนึ่งรายการ มนุษย์เป็นผู้เผยแพร่verify_inboundจนกว่าstatusจะเป็นreadycreate_inboxพร้อมdomain_idและlocal_part(เช่นsupport) สร้างsupport@inbound.example.com- poll
list_emailsพร้อมdirection: "in"และunread: true(ใส่inbox_idได้หากต้องการ) อ่านข้อความด้วยget_emailอ่านบทสนทนาด้วยget_threadไฟล์แนบด้วยdownload_attachmentและทำเครื่องหมายว่าจัดการแล้วด้วยmark_email(read: true) - ตอบกลับในเธรดเดิมด้วย
send_emailและreply_to_email_idSendHQ ตั้งค่า In-Reply-To, References และเธรดให้
5. Webhook และการแจ้งเตือนอีเวนต์
ขณะนี้ SendHQ ไม่มี webhook ที่ลูกค้าตั้งค่าเองได้ จึงไม่มีเครื่องมือ webhook การแจ้งเตือนจากผู้ให้บริการถูกประมวลผลภายใน SendHQ และเปิดให้อ่านผ่านการอ่านข้อมูล ให้ poll แทน: list_email_events สำหรับผลลัพธ์ของข้อความหนึ่งฉบับ list_emails พร้อม status (เช่น bounced) หรือ after สำหรับการเปลี่ยนแปลงล่าสุด list_emails พร้อม direction: "in" และ unread: true สำหรับอีเมลขาเข้าใหม่ และ list_blocked_recipients สำหรับการระงับการส่งใหม่ อย่า poll เกินประมาณหนึ่งครั้งต่อนาทีต่อหนึ่งคำถาม
6. วินิจฉัยความล้มเหลวในการส่งถึง
- ค้นหาข้อความ:
list_emailsพร้อมdirection: "out"และtoหรือqueryหรือget_emailหากคุณมี IDstatus: failedหมายความว่า SendHQ หรือผู้ให้บริการปฏิเสธในขั้นตอนการส่งเข้า ข้อผิดพลาดของอีเมลอธิบายสาเหตุ list_email_events:bounce(ถาวรหรือชั่วคราว พร้อมข้อมูลวินิจฉัยจากผู้ให้บริการ)complaint,rejectหรือdeliveryหากยังไม่มีอีเวนต์ แสดงว่าผู้ให้บริการยังไม่รายงาน ให้รอแล้วตรวจสอบอีกครั้ง- หากการเรียกส่งล้มเหลวเอง ให้อ่านข้อผิดพลาด
code:sender_domain_unverified→ ทำการยืนยันโดเมนให้เสร็จrecipient_suppressed→ ที่อยู่นั้นเคย hard bounce หรือร้องเรียนมาก่อนsender_paused→ ตรวจสอบlist_sender_reputationและแก้ที่มาของรายชื่อtrial_recipient_restricted→ ขีดจำกัดช่วงทดลองquota_exhausted→ การใช้งานในget_account get_domainตรวจสอบว่า DKIM, SPF และ DMARC ยังเผยแพร่อยู่ ส่วนdeliverability_statsแสดงว่าปัญหาเกิดกับข้อความเดียวหรือเป็นแนวโน้ม- รายงานสิ่งที่หลักฐานแสดง อีเวนต์
deliveryหมายความว่าเซิร์ฟเวอร์ของผู้รับยอมรับข้อความ ไม่ได้หมายความว่าไปถึงกล่องจดหมายหรือถูกอ่านแล้ว
7. ดูแล bucket งาน (ป้ายกำกับ)
create_labelพร้อมname(เช่นAgent/Orders) และskip_inbox: trueซึ่งทำให้ป้ายกำกับเป็น bucket อีเมลที่ได้รับและได้ป้ายกำกับนี้จะถูกเก็บถาวร จึงปรากฏเฉพาะในป้ายกำกับ ไม่ปรากฏในกล่องเข้าของมนุษย์- ส่งอีเมลงานด้วย
send_email(หรือsend_batch) และlabels: ["Agent/Orders"]การตอบกลับในบทสนทนานั้นจะสืบทอดป้ายกำกับโดยอัตโนมัติและข้ามกล่องเข้า - สำหรับอีเมลที่เริ่มนอกบทสนทนาของคุณ ให้เพิ่มกฎการจัดเก็บ:
create_label_ruleพร้อมinbox_id(ที่อยู่เฉพาะ เช่นorders@…)fromtoหรือsubjectส่งapply_to_existing: trueเพื่อจัดเก็บอีเมลที่ได้รับไปแล้ว - ทำงานกับ bucket:
list_emailsพร้อมlabel: "Agent/Orders"direction: "in"และunread: trueอ่านด้วยget_emailหรือget_threadตอบกลับด้วยsend_emailและreply_to_email_idและmark_emailread: trueเมื่อจัดการแล้ว - ย้ายข้อความที่หลุดเข้าหรือออกด้วย
label_email(add/remove) การเพิ่มป้ายกำกับ bucket ให้ข้อความที่ได้รับจะเก็บถาวรข้อความนั้นด้วย - หากต้องการ
set_inbox_forwardingจะส่งสำเนาทุกอย่างที่ที่อยู่ผู้รับได้รับไปยังกล่องจดหมายอื่น (ปลายทางต้องยืนยันทางอีเมลก่อน)
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. ไฟล์แนบและเทมเพลต
แนบไฟล์ได้สูงสุด 10 ไฟล์ด้วย send_email attachments (แต่ละไฟล์ต้องมี content_base64 หรือ file_path ในเครื่อง โดย filename มีค่าเริ่มต้นเป็นชื่อไฟล์ของ basename) บนแพ็กเกจแบบชำระเงิน สำหรับเทมเพลตแบบโฮสต์: create_template → update_template_draft → render_template เพื่อดูตัวอย่างด้วยข้อมูลตัวอย่าง → send_template_test (ส่งอีเมลทดสอบจริงหนึ่งฉบับ) → publish_template จากนั้นส่งด้วย send_email หรือ send_batch โดยใช้ template: {key, data} และผู้รับ to หนึ่งรายพอดี
ผลลัพธ์ การแบ่งหน้า และข้อผิดพลาด
การเรียกที่สำเร็จจะคืนออบเจ็กต์ JSON ของ API เป็น structuredContent และเป็นบล็อกข้อความ JSON ทุกเครื่องมือ list_* รับ limit (1–200 ค่าเริ่มต้น 50) และ offset และเพิ่มออบเจ็กต์ pagination ให้เรียกต่อด้วย offset: pagination.next_offset ตราบใดที่ has_more เป็น true
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}การเรียกที่ล้มเหลวจะคืน isError: true พร้อมข้อผิดพลาดแบบมีโครงสร้าง ให้ทำตาม remedy แทนที่จะลองใหม่แบบสุ่มสี่สุ่มห้า ลองใหม่เฉพาะเมื่อ retryable เป็น true
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}ฟิลด์ข้อผิดพลาดที่ไม่บังคับ: request_id (แจ้งซัพพอร์ตด้วยค่านี้) retry_after_seconds problems (รายการการละเมิด schema สำหรับ invalid_arguments) และ idempotent_replayed (ดู Idempotency)
Idempotency
send_email และ send_batch รับ idempotency_key (ไม่เกิน 200 ตัวอักษร) ซึ่งส่งเป็นเฮดเดอร์ Idempotency-Key ให้สร้างคีย์ที่คงที่หนึ่งคีย์ต่อข้อความเชิงตรรกะหนึ่งฉบับ เช่น invoice-4812-receipt
- การลองใหม่ต้องใช้คีย์เดิมและเนื้อหาคำขอที่เหมือนกันทุกประการ คีย์เดียวกันแต่มีการเปลี่ยนแปลงใด ๆ (ผู้รับ หัวเรื่อง เนื้อหา เฮดเดอร์ ข้อมูลเทมเพลต หรือแม้แต่ค่าอาร์กิวเมนต์) จะคืน
409 idempotency_conflict - คีย์เดียวกัน เนื้อหาเดียวกัน และคำขอเดิมเสร็จแล้ว: SendHQ คืนผลลัพธ์ที่เก็บไว้โดยไม่ส่งอีก นี่คือวิธีลองใหม่อย่างปลอดภัยหลังหมดเวลาหรือ
network_error - คีย์เดียวกันขณะที่คำขอเดิมยังทำงานอยู่:
409 idempotency_in_progressลองใหม่ได้หลังรอสักครู่ - ข้อความเชิงตรรกะใหม่ต้องใช้คีย์ใหม่
- ความล้มเหลวที่เก็บไว้ก็ถูกเล่นซ้ำเช่นกัน หากความพยายามแรกล้มเหลว การลองใหม่ด้วยคีย์เดียวกันจะคืนความล้มเหลวเดิมพร้อม
idempotent_replayed: trueและretryable: falseตรวจสอบlist_emails(direction: out) เพื่อยืนยันว่าไม่มีอะไรถูกส่งออกไป แก้สาเหตุ แล้วส่งด้วยคีย์ใหม่ - เซิร์ฟเวอร์ไม่เคยลอง POST ใหม่เอง มีเพียงการเรียก GET แบบอ่านอย่างเดียวที่ลองใหม่โดยอัตโนมัติ (สูงสุด 3 ครั้งเมื่อเกิดข้อผิดพลาดของเครือข่าย 429 และ 5xx)
send_emailที่มีattachmentsแบบอินไลน์ใช้idempotency_keyไม่ได้ เพราะทำงานหลายคำขอ สำหรับการส่งไฟล์แนบที่ลองใหม่ได้อย่างปลอดภัย:create_draft→upload_attachment→send_emailพร้อมdraft_idและidempotency_key
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}Rate limit และโควตา
SendHQ ไม่ได้เผยแพร่ขีดจำกัดจำนวนคำขอต่อวินาทีที่แน่นอนสำหรับ API ขีดจำกัดที่เอเจนต์พบจริงคือขีดจำกัดการใช้งาน ซึ่งคืนเป็น 429:
- การส่งถึงผู้รับรายเดือนตามแพ็กเกจ แต่ละที่อยู่ To, Cc และ Bcc นับเป็นหนึ่งการส่งถึง ดู
get_account→usage.recipientDeliveriesเทียบกับusage.emailQuotaMonth - ผู้รับรายวันต่อที่อยู่ From ที่ตรงกันทุกตัวอักษร กำหนดโดยสถานะชื่อเสียงของผู้ส่งรายนั้น (
list_sender_reputation→dailyLimitค่าเริ่มต้น 2,000 บนแพ็กเกจแบบชำระเงิน) - ช่วงทดลองการเชื่อมต่อ: ผู้รับรวม 100 ราย ส่งถึงได้เฉพาะอีเมลของบัญชีหรือที่อยู่จำลองของ SES
- ไฟล์แนบ: สูงสุด 10 ไฟล์และ 10 MB ต่อข้อความ และ 10 GB ของการถ่ายโอนไฟล์แนบตามน้ำหนักผู้รับต่อเดือนบนแพ็กเกจแบบชำระเงิน
- ต่อคำขอ: To + Cc + Bcc สูงสุด 100 ที่อยู่
send_batchสูงสุด 100 ข้อความ - ตัวตัดวงจรด้านชื่อเสียง: ในช่วงเลื่อน 7 วัน หาก bounce หรือ complaint เกินเกณฑ์ จะจำกัดหรือหยุดที่อยู่ From หนึ่งที่อยู่ชั่วคราว (
423 sender_paused) และจะกลับมาเป็นปกติโดยอัตโนมัติเมื่ออัตราลดลง
quota_exhausted ลองใหม่ไม่ได้จนกว่ารอบจะรีเซ็ตหรือเปลี่ยนแพ็กเกจ rate_limited ลองใหม่ได้หลัง retry_after_seconds สำหรับการส่ง ให้ลองใหม่ด้วย idempotency_key เดิมและเนื้อหาที่เหมือนกันทุกประการ
แค็ตตาล็อกข้อผิดพลาด
code คงที่ ให้แตกสาขาตามค่านี้ ไม่ใช่ตาม message
| code | HTTP | ลองใหม่? | ความหมายและสิ่งที่ต้องทำ |
|---|---|---|---|
invalid_arguments | — | ไม่ | อาร์กิวเมนต์ไม่ผ่าน JSON Schema ของเครื่องมือในเครื่อง ไม่มีอะไรไปถึง SendHQ ให้แก้ฟิลด์ที่ระบุใน problems |
auth_error | 401 | ไม่ | API key หายไป ถูกเพิกถอน หรือผิด ตั้ง SENDHQ_API_KEY สำหรับโปรเซสของเซิร์ฟเวอร์ โดยมนุษย์เป็นผู้สร้างคีย์ในแดชบอร์ด |
trial_recipient_restricted | 402 | ไม่ | ช่วงทดลองการเชื่อมต่อส่งถึงได้เฉพาะอีเมลของบัญชีหรือที่อยู่จำลองของ SES ให้ส่งไปที่นั่น หรือให้เจ้าของเปิดใช้แพ็กเกจแบบชำระเงิน |
payment_required | 402 | ไม่ | ฟีเจอร์นี้ต้องใช้แพ็กเกจแบบชำระเงิน (เช่น ไฟล์แนบ) ให้ส่งโดยไม่ใช้ฟีเจอร์นั้น หรืออัปเกรด |
sender_domain_not_owned | 403 | ไม่ | โดเมน From ไม่อยู่ในเวิร์กสเปซนี้ ใช้ list_sending_identities หรือ add_domain |
sender_domain_unverified | 403 | ไม่ | โดเมน From ยังไม่ได้รับการยืนยัน get_domain เผยแพร่เรคคอร์ดที่ขาด แล้ว verify_domain |
domain_limit_reached | 403 | ไม่ | ถึงขีดจำกัดโดเมนของแพ็กเกจแล้ว ลบโดเมนที่ไม่ได้ใช้ (โดยได้รับอนุมัติ) หรืออัปเกรด |
marketing_not_enabled | 403 | ไม่ | คลาส marketing ไม่ได้เปิดใช้สำหรับโดเมนหรือแพ็กเกจนี้ ใช้ transactional เฉพาะเมื่อข้อความเป็น transactional จริง ๆ |
forbidden | 403 | ไม่ | นโยบายไม่อนุญาตการดำเนินการนี้ ปรับคำขอ |
not_found | 404 | ไม่ | ID ไม่อยู่ในเวิร์กสเปซนี้ ให้แสดงรายการทรัพยากรเพื่อหา ID ที่ถูกต้อง และกู้คืนเทมเพลตที่เก็บถาวรก่อน |
idempotency_conflict | 409 | ไม่ | ใช้คีย์ซ้ำกับเนื้อหาที่ต่างกัน ส่งต้นฉบับเดิมอีกครั้ง หรือใช้คีย์ใหม่สำหรับข้อความใหม่ |
idempotency_in_progress | 409 | ใช่ | คำขอเดิมยังทำงานอยู่ รอ แล้วลองใหม่ด้วยคีย์และเนื้อหาเดิม |
revision_conflict | 409 | ไม่ | ฉบับร่างของเทมเพลตเปลี่ยนไปตั้งแต่ที่คุณอ่าน get_template ผสาน แล้วบันทึกอีกครั้ง |
complaint_suppression_locked | 409 | ไม่ | ผู้รับร้องเรียน อย่าส่งอีเมลถึงเขาอีก |
inbound_not_ready | 409 | ไม่ | การรับอีเมลขาเข้ายังไม่พร้อม setup_inbound เผยแพร่ MX แล้ว verify_inbound |
conflict | 409 | ไม่ | ทรัพยากรมีอยู่แล้วหรืออยู่ในสถานะที่ไม่ถูกต้อง อ่านแล้วปรับ |
attachments_too_large | 413 | ไม่ | เกิน 10 ไฟล์หรือ 10 MB ลบหรือย่อขนาดไฟล์แนบ |
recipient_suppressed | 422 | ไม่ | ผู้รับเคย hard bounce หรือร้องเรียนมาก่อน ให้ลบออก ดู list_blocked_recipients |
recipient_unsubscribed | 422 | ไม่ | ผู้รับยกเลิกการรับอีเมลการตลาด ให้ลบออกถาวร |
validation_failed | 422 | ไม่ | เนื้อหาถูกปฏิเสธ เช่น ข้อมูลเทมเพลตที่ละเมิดสัญญาของตัวแปร แก้อินพุต |
sender_paused | 423 | ไม่ | ที่อยู่ From นี้ถูกหยุดชั่วคราวโดยตัวตัดวงจร bounce/complaint 7 วัน หยุด แก้รายชื่อ แล้วรอการกลับสู่ปกติโดยอัตโนมัติ |
quota_exhausted | 429 | ไม่ | ถึงขีดจำกัดรายเดือน รายวันต่อผู้ส่ง ไฟล์แนบ หรือช่วงทดลอง ตรวจสอบ get_account รอการรีเซ็ตหรืออัปเกรด |
rate_limited | 429 | ใช่ | ช้าลง รอ retry_after_seconds การส่ง: คีย์เดียวกัน เนื้อหาเดียวกัน |
server_error | 5xx | ใช่ | SendHQ หรือผู้ให้บริการล้มเหลวชั่วคราว ใช้ backoff แล้วลองใหม่ การส่งใช้คีย์และเนื้อหาเดิม หาก idempotent_replayed เป็น true ให้ใช้คีย์ใหม่หลังยืนยันว่าไม่มีอะไรถูกส่ง |
network_error | — | ใช่ | คำขอหรือการตอบกลับสูญหาย ลองใหม่ สำหรับการส่ง idempotency_key เดิมทำให้ปลอดภัย |
invalid_request | 400 | ไม่ | คำขอผิดรูปแบบ อ่าน message แล้วแก้ไข |
tool_error | — | ไม่ | ความล้มเหลวภายในเครื่องของ MCP server (เช่น file_path ที่อ่านไม่ได้) อ่าน message |
ข้อมูลอ้างอิงเครื่องมือ
ทุกเครื่องมือพร้อมคลาสความปลอดภัย REST endpoint ที่เรียก พารามิเตอร์ รูปแบบค่าที่คืน และตัวอย่างออบเจ็กต์ params ของ tools/call พารามิเตอร์ต้องตรงทุกตัวอักษร เซิร์ฟเวอร์จะปฏิเสธทุกอย่างที่ไม่ได้ระบุไว้
อีเมลและเธรด: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
ป้ายกำกับและกฎจัดเก็บอัตโนมัติ: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
ฉบับร่าง ไฟล์แนบ และตัวตนผู้ส่ง: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
เทมเพลตแบบโฮสต์: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
โดเมนและ DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
อีเมลขาเข้า: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
ความสามารถในการส่งถึง bounce และการระงับการส่ง: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
บัญชี การใช้งาน การวิเคราะห์ และคีย์: get_account, get_analytics, list_api_keys, get_service_health
ไม่มีเครื่องมือที่ตรงกับตัวกรองนี้
อีเมลและเธรด
send_emailส่งอีเมลหนึ่งฉบับ
SENDS REAL EMAIL ส่งข้อความหนึ่งฉบับจากโดเมนที่ยืนยันแล้ว ได้แก่ html/text ดิบ เทมเพลตแบบโฮสต์ที่เผยแพร่แล้ว การตอบกลับในเธรดที่มีอยู่ หรือข้อความที่มีไฟล์แนบ ส่ง idempotency_key เพื่อไม่ให้การลองใหม่ส่งซ้ำสองครั้ง การลองใหม่ต้องใช้คีย์เดียวกันและคำขอที่เหมือนกันทุกประการ มิฉะนั้น SendHQ จะคืน 409 attachments เป็นทางลัดที่สร้างฉบับร่าง อัปโหลดแต่ละไฟล์ และส่งด้วยฉบับร่างนั้น ใช้ร่วมกับ idempotency_key หรือ draft_id ไม่ได้ (ใช้ create_draft + upload_attachment + send_email พร้อม draft_id สำหรับการส่งไฟล์แนบที่ลองใหม่ได้อย่างปลอดภัย) เวิร์กสเปซที่ยังไม่ชำระเงิน (ช่วงทดลองการเชื่อมต่อ) ส่งถึงได้เฉพาะอีเมลของบัญชีหรือที่อยู่จำลองของ AWS SES และส่งไฟล์แนบไม่ได้
ต้องระบุอย่างน้อยหนึ่งรายการ: html, text, template
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
from | string | ใช่ | ผู้ส่ง เช่น Acme <hello@example.com> โดเมนต้องได้รับการยืนยันในเวิร์กสเปซนี้ (ดู list_sending_identities) (สูงสุด 998 ตัวอักษร) |
to | string[] | ใช่ | ผู้รับ แต่ละรายการเป็นที่อยู่ โดยจะใส่ชื่อที่แสดงหรือไม่ก็ได้ To+cc+bcc รวมกันได้สูงสุด 100 รายการ ทุกปลายทางใช้เครดิตการส่งหนึ่งเครดิต (1–100 รายการ) |
cc | string[] | ไม่ | ผู้รับสำเนา (0–100 รายการ) |
bcc | string[] | ไม่ | ผู้รับสำเนาลับ (0–100 รายการ) |
subject | string | ไม่ | หัวเรื่อง ละไว้เมื่อส่งเทมเพลต (สูงสุด 998 ตัวอักษร) |
text | string | ไม่ | เนื้อหาข้อความล้วน ระบุ text, html หรือ template |
html | string | ไม่ | เนื้อหา HTML SendHQ ทำความสะอาดให้และสร้าง text เมื่อละ text |
reply_to | string | ไม่ | ที่อยู่ Reply-To |
headers | object | ไม่ | เฮดเดอร์กำหนดเองที่ปลอดภัยเพิ่มเติม (ค่าเป็นสตริง) เช่น {"X-Entity-Ref-ID": "123"} เฮดเดอร์การกำหนดเส้นทาง เช่น From/To/Message-ID ควบคุมโดย SendHQ |
message_class | string | ไม่ | transactional (ค่าเริ่มต้น) หรือ marketing Marketing ต้องใช้แพ็กเกจหรือโดเมนที่เปิดใช้ marketing และเพิ่มการจัดการยกเลิกการรับ (หนึ่งใน transactional, marketing) |
reply_to_email_id | string | ไม่ | ตอบกลับภายในบทสนทนาที่มีอยู่: ID em_… ของข้อความที่ตอบ SendHQ ตั้งค่า In-Reply-To/References และเธรดให้ |
thread_id | string | ไม่ | ID เธรดที่ระบุชัดเจนเพื่อจัดเก็บข้อความ |
draft_id | string | ไม่ | ส่งไฟล์แนบของฉบับร่างที่เก็บไว้ (dr_…) พร้อมข้อความนี้ ฉบับร่างจะถูกลบหลังส่งสำเร็จ |
template | object | ไม่ | ส่งเทมเพลตแบบโฮสต์ที่เผยแพร่แล้วแทน html/text ดิบ ต้องมีผู้รับ to หนึ่งรายพอดีและไม่มี cc/bcc เทมเพลตเป็นผู้ระบุหัวเรื่อง ต้องระบุอย่างน้อยหนึ่งรายการ: id, key |
template.id | string | ไม่ | ID เทมเพลต (tmpl_…) ระบุ id หรือ key |
template.key | string | ไม่ | คีย์เทมเพลต เช่น account-welcome ระบุ id หรือ key |
template.version_id | string | ไม่ | ID รุ่นที่เผยแพร่แล้ว (tmplv_…) ซึ่งไม่บังคับ ค่าเริ่มต้นคือรุ่นที่เผยแพร่ปัจจุบัน |
template.data | object | ไม่ | ค่าสำหรับตัวแปรที่มีชนิดข้อมูลของเทมเพลต |
labels | string[] | ไม่ | ชื่อป้ายกำกับหรือ ID lbl_… ที่จะจัดเก็บข้อความนี้ ชื่อที่ไม่รู้จักจะถูกสร้างขึ้น การตอบกลับในบทสนทนาจะสืบทอดป้ายกำกับ และป้ายกำกับ bucket (skip_inbox) จะเก็บการตอบกลับเหล่านั้นไม่ให้เข้ากล่องเข้า สูงสุด 10 (0–10 รายการ) |
idempotency_key | string | ไม่ | เฮดเดอร์ Idempotency-Key ใช้ซ้ำเฉพาะเพื่อลองคำขอนี้ใหม่เท่านั้น (สูงสุด 200 ตัวอักษร) |
attachments | object[] | ไม่ | ไฟล์ที่จะแนบ (สูงสุด 10 ไฟล์ รวม 10 MB) แต่ละไฟล์ต้องมี content_base64 (พร้อม filename) หรือ file_path ในเครื่อง (0–10 รายการ) ต้องระบุอย่างน้อยหนึ่งรายการ: content_base64, file_path |
attachments[].filename | string | ไม่ | ชื่อไฟล์ที่แสดงแก่ผู้รับ จำเป็นเมื่อใช้ content_base64 ค่าเริ่มต้นคือ basename ของ file_path (สูงสุด 255 ตัวอักษร) |
attachments[].content_type | string | ไม่ | MIME type เช่น application/pdf ค่าเริ่มต้นคือ application/octet-stream |
attachments[].content_base64 | string | ไม่ | เนื้อหาไฟล์แบบ base64 มาตรฐาน |
attachments[].file_path | string | ไม่ | พาธสัมบูรณ์ของไฟล์ในเครื่องที่โปรเซสของ MCP server อ่านได้ |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batchส่งอีเมลชุดที่ปรับแต่งเฉพาะราย
SENDS REAL EMAIL ส่งข้อความอิสระ 1–100 ฉบับในคำขอเดียว (ใช้สำหรับปรับแต่งเทมเพลตเฉพาะผู้รับ) แต่ละรายการมีรูปแบบเดียวกับ send_email (ไม่มี attachments/idempotency_key) แต่ละรายการสำเร็จหรือล้มเหลวแยกกัน HTTP 207 หมายถึงสำเร็จบางส่วน ให้ตรวจสอบ data[i].ok และ data[i].error แต่ละรายการ idempotency_key หนึ่งคีย์ครอบคลุมเนื้อหาชุดทั้งหมด
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
emails | object[] | ใช่ | ข้อความที่จะส่ง (1–100 รายการ) ต้องระบุอย่างน้อยหนึ่งรายการ: html, text, template |
idempotency_key | string | ไม่ | Idempotency-Key สำหรับทั้งชุด (สูงสุด 200 ตัวอักษร) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emailsแสดงรายการและค้นหาอีเมล
แสดงรายการอีเมลที่ส่ง (direction: out) และที่ได้รับ (direction: in) เรียงจากใหม่สุดพร้อมตัวกรอง อีเมลที่ได้รับจะถูกจัดประเภท: อ่านกล่องเข้าของมนุษย์ด้วย direction: in, archived: false, category: primary คัดแยกด้วย important: true สแปมจะถูกซ่อนเว้นแต่ใช้ category: spam หรือ include_spam: true แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
direction | string | ไม่ | in สำหรับที่ได้รับ out สำหรับที่ส่ง (หนึ่งใน in, out) |
status | string | ไม่ | ตัวกรองสถานะ เช่น queued, sent, delivered, bounced, complained, failed |
domain | string | ไม่ | เฉพาะข้อความของโดเมนนี้ หรือรายการโดเมนที่คั่นด้วยเครื่องหมายจุลภาค (ตรงกับข้อใดข้อหนึ่ง) |
inbox_id | string | ไม่ | เฉพาะข้อความที่กล่องจดหมายนี้ได้รับ (inb_…) |
label | string | ไม่ | เฉพาะข้อความที่มีป้ายกำกับนี้: ID ป้ายกำกับ lbl_… หรือชื่อที่ตรงกันทุกตัวอักษร หรือรายการที่คั่นด้วยเครื่องหมายจุลภาค (ตรงกับข้อใดข้อหนึ่ง) ใช้ list_labels เพื่อดูโฟลเดอร์ |
archived | boolean | ไม่ | false = มุมมองกล่องเข้า (อีเมลที่ได้รับซึ่งยังไม่เก็บถาวร) true = เฉพาะที่เก็บถาวร ละไว้เพื่อดูอีเมลทั้งหมด |
category | string | ไม่ | primary (บุคคล) updates (จดหมายข่าว อีเมลจำนวนมาก อัตโนมัติ) หรือ spam หรือรายการที่คั่นด้วยเครื่องหมายจุลภาค สแปมจะถูกซ่อนเว้นแต่ร้องขอ |
important | boolean | ไม่ | true = เฉพาะข้อความที่ทำเครื่องหมายว่าสำคัญ (การตอบกลับบทสนทนาที่คุณเริ่ม และผู้ส่งที่ทำเครื่องหมายว่าสำคัญ) |
include_spam | boolean | ไม่ | รวมสแปมในผลลัพธ์ (สำหรับการค้นหาข้ามทุกโฟลเดอร์) |
from | string | ไม่ | ที่อยู่ผู้ส่งมีค่านี้อยู่ |
to | string | ไม่ | ที่อยู่ผู้รับมีค่านี้อยู่ |
unread | boolean | ไม่ | true = เฉพาะที่ยังไม่อ่าน false = เฉพาะที่อ่านแล้ว |
after | string | ไม่ | ไทม์สแตมป์ ISO-8601 เฉพาะข้อความที่สร้างหลังจากนั้น (date-time) |
before | string | ไม่ | ไทม์สแตมป์ ISO-8601 เฉพาะข้อความที่สร้างก่อนหน้านั้น (date-time) |
query | string | ไม่ | ค้นหาข้อความอิสระในหัวเรื่อง เนื้อหา ที่อยู่ผู้ส่ง/ผู้รับ และชื่อไฟล์แนบ (สูงสุด 200 ตัวอักษร) |
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_emailดึงอีเมลหนึ่งฉบับ
ดึงข้อความหนึ่งฉบับพร้อมเฮดเดอร์ เนื้อหา html/text สถานะ เมทาดาทาของเธรด และเมทาดาทาของไฟล์แนบ (ดาวน์โหลดไบต์ด้วย download_attachment)
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
email_id | string | ใช่ | ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_emailทำเครื่องหมายว่าอ่านแล้ว เก็บถาวร สแปม หรือสำคัญ
อัปเดตข้อความหนึ่งฉบับ: read, archived, category (primary, updates, spam เฉพาะอีเมลที่ได้รับ) และ important การรายงานสแปมหรือทำเครื่องหมายว่าสำคัญเป็นการสอน SendHQ เกี่ยวกับผู้ส่งรายนั้นสำหรับอีเมลในอนาคต ส่ง learn: false เพื่อเปลี่ยนเฉพาะข้อความนี้ ต้องส่งอย่างน้อยหนึ่งฟิลด์
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
email_id | string | ใช่ | ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
read | boolean | ไม่ | true = อ่านแล้ว false = ยังไม่อ่าน |
archived | boolean | ไม่ | true = เก็บถาวร (ข้ามกล่องเข้า) false = ย้ายกลับไปกล่องเข้า |
category | string | ไม่ | ย้ายข้อความที่ได้รับไปยัง primary, updates หรือ spam (หนึ่งใน primary, updates, spam) |
important | boolean | ไม่ | ทำเครื่องหมายหรือยกเลิกการทำเครื่องหมายข้อความว่าสำคัญ |
learn | boolean | ไม่ | false = ไม่จดจำคำตัดสินนี้สำหรับผู้ส่ง (ค่าเริ่มต้น true) |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_emailลบอีเมล
DESTRUCTIVE: ลบข้อความที่เก็บรักษาไว้และไฟล์แนบที่จัดเก็บออกจาก SendHQ อย่างถาวร ไม่ได้เรียกคืนข้อความที่ส่งถึงแล้ว
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
email_id | string | ใช่ | ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_eventsแสดงรายการอีเวนต์การส่งของอีเมลฉบับหนึ่ง
อีเวนต์จากผู้ให้บริการสำหรับข้อความที่ส่งหนึ่งฉบับ: delivery, bounce, complaint, reject, open, click นี่คือหลักฐานว่าข้อความส่งถึงหรือไม่ หรือเหตุใดจึงล้มเหลว แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
email_id | string | ใช่ | ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_threadดึงบทสนทนา
ดึงทุกข้อความในบทสนทนาตามลำดับเวลา (ทั้งที่ส่งและได้รับ) พร้อมเมทาดาทาของไฟล์แนบของแต่ละข้อความ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
thread_id | string | ใช่ | ID เธรด (โดยปกติคือ ID em_… ของข้อความแรก ดู threadId ในอีเมลใด ๆ) (สูงสุด 128 ตัวอักษร) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}ป้ายกำกับและกฎจัดเก็บอัตโนมัติ
list_labelsแสดงรายการป้ายกำกับ
แสดงรายการป้ายกำกับ (โฟลเดอร์) ของเวิร์กสเปซพร้อมจำนวนทั้งหมดและจำนวนที่ยังไม่อ่าน และกฎจัดเก็บอัตโนมัติ แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_labels",
"arguments": {}
}get_labelดึงป้ายกำกับ
ดึงป้ายกำกับหนึ่งรายการพร้อมจำนวนและกฎจัดเก็บอัตโนมัติ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
label_id | string | ใช่ | ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_labelสร้างป้ายกำกับ
สร้างป้ายกำกับแบบโฟลเดอร์ ตั้ง skip_inbox: true เพื่อทำให้เป็น bucket ที่เอเจนต์เป็นเจ้าของ ส่งด้วย labels: [name] แล้วการตอบกลับจะถูกจัดเก็บเข้าป้ายกำกับและอยู่นอกกล่องเข้า กฎจัดเก็บอัตโนมัติที่ไม่บังคับจะจัดเก็บอีเมลใหม่ที่ส่ง/ได้รับ (ทุกเงื่อนไขในกฎต้องตรงกัน) ตั้ง apply_to_existing เพื่อจัดเก็บอีเมลที่เก็บรักษาไว้ด้วย
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
name | string | ใช่ | ชื่อป้ายกำกับ เช่น Billing หรือ Clients/Acme ไม่ซ้ำกันภายในเวิร์กสเปซ (ไม่สนตัวพิมพ์) (สูงสุด 64 ตัวอักษร) |
color | string | ไม่ | สีแบบเลขฐานสิบหก เช่น #1a73e8 ไม่บังคับ |
skip_inbox | boolean | ไม่ | โหมด bucket: อีเมลที่ได้รับและได้ป้ายกำกับนี้ (โดยกฎ โดยการตอบกลับบทสนทนาที่ส่งด้วยป้ายกำกับนี้ หรือโดยตนเอง) จะถูกเก็บถาวร จึงปรากฏเฉพาะในป้ายกำกับ ไม่ปรากฏในกล่องเข้า |
rules | object[] | ไม่ | กฎจัดเก็บอัตโนมัติที่ไม่บังคับ (สูงสุด 20) แต่ละกฎต้องมีอย่างน้อยหนึ่งใน inbox_id, from, to, subject (0–20 รายการ) |
rules[].direction | string | ไม่ | เฉพาะอีเมลแบบ in (ได้รับ) หรือ out (ส่ง) ละไว้เพื่อรวมทั้งสองแบบ (หนึ่งใน in, out) |
rules[].inbox_id | string | ไม่ | เฉพาะอีเมลที่กล่องจดหมายนี้ได้รับ (inb_…) จัดเก็บแต่ละที่อยู่ผู้รับเข้าโฟลเดอร์ของตนเอง |
rules[].from | string | ไม่ | ผู้ส่งมีข้อความนี้ (ไม่สนตัวพิมพ์) เช่น @stripe.com (สูงสุด 200 ตัวอักษร) |
rules[].to | string | ไม่ | To/Cc มีข้อความนี้ (ไม่สนตัวพิมพ์) (สูงสุด 200 ตัวอักษร) |
rules[].subject | string | ไม่ | หัวเรื่องมีข้อความนี้ (ไม่สนตัวพิมพ์) (สูงสุด 200 ตัวอักษร) |
rules[].skip_inbox | boolean | ไม่ | เก็บถาวรอีเมลที่ได้รับซึ่งตรงกัน เพื่อให้ปรากฏเฉพาะในโฟลเดอร์ป้ายกำกับ ไม่ปรากฏในกล่องเข้า |
apply_to_existing | boolean | ไม่ | จัดเก็บอีเมลที่เก็บรักษาไว้แล้วซึ่งตรงกับกฎด้วย |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_labelเปลี่ยนชื่อ เปลี่ยนสี หรือเปลี่ยนป้ายกำกับเป็น bucket
เปลี่ยนชื่อป้ายกำกับ เปลี่ยนสี หรือสลับโหมด bucket (skip_inbox) การเปิดโหมด bucket จะเก็บถาวรอีเมลที่ได้รับซึ่งอยู่ในป้ายกำกับอยู่แล้ว
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
label_id | string | ใช่ | ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร) |
name | string | ไม่ | ชื่อใหม่ (สูงสุด 64 ตัวอักษร) |
color | string | ไม่ | สีเลขฐานสิบหกใหม่ |
skip_inbox | boolean | ไม่ | โหมด bucket: อีเมลที่ได้รับและได้ป้ายกำกับนี้ (โดยกฎ โดยการตอบกลับบทสนทนาที่ส่งด้วยป้ายกำกับนี้ หรือโดยตนเอง) จะถูกเก็บถาวร จึงปรากฏเฉพาะในป้ายกำกับ ไม่ปรากฏในกล่องเข้า |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_labelลบป้ายกำกับ
DESTRUCTIVE: ลบป้ายกำกับและกฎของป้ายกำกับ ตัวอีเมลยังคงอยู่ เพียงแต่ไม่มีป้ายกำกับนี้
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
label_id | string | ใช่ | ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_ruleเพิ่มกฎจัดเก็บอัตโนมัติ
เพิ่มกฎให้ป้ายกำกับเพื่อให้อีเมลใหม่ที่ตรงกันถูกจัดเก็บโดยอัตโนมัติ ทุกเงื่อนไขที่คุณตั้งต้องตรงกัน ใช้ inbox_id เพื่อให้ที่อยู่ผู้รับมีโฟลเดอร์ของตนเอง เพิ่ม skip_inbox เพื่อไม่ให้ปรากฏในกล่องเข้า
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
label_id | string | ใช่ | ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร) |
direction | string | ไม่ | เฉพาะอีเมลแบบ in (ได้รับ) หรือ out (ส่ง) ละไว้เพื่อรวมทั้งสองแบบ (หนึ่งใน in, out) |
inbox_id | string | ไม่ | เฉพาะอีเมลที่กล่องจดหมายนี้ได้รับ (inb_…) จัดเก็บแต่ละที่อยู่ผู้รับเข้าโฟลเดอร์ของตนเอง |
from | string | ไม่ | ผู้ส่งมีข้อความนี้ (ไม่สนตัวพิมพ์) เช่น @stripe.com (สูงสุด 200 ตัวอักษร) |
to | string | ไม่ | To/Cc มีข้อความนี้ (ไม่สนตัวพิมพ์) (สูงสุด 200 ตัวอักษร) |
subject | string | ไม่ | หัวเรื่องมีข้อความนี้ (ไม่สนตัวพิมพ์) (สูงสุด 200 ตัวอักษร) |
skip_inbox | boolean | ไม่ | เก็บถาวรอีเมลที่ได้รับซึ่งตรงกัน เพื่อให้ปรากฏเฉพาะในโฟลเดอร์ป้ายกำกับ ไม่ปรากฏในกล่องเข้า |
apply_to_existing | boolean | ไม่ | จัดเก็บอีเมลที่เก็บรักษาไว้แล้วซึ่งตรงกันด้วย |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_ruleลบกฎจัดเก็บอัตโนมัติ
DESTRUCTIVE: ลบกฎจัดเก็บอัตโนมัติหนึ่งกฎ อีเมลที่จัดเก็บไปแล้วยังคงมีป้ายกำกับ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
label_id | string | ใช่ | ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร) |
rule_id | string | ใช่ | ID กฎ (ขึ้นต้นด้วย lrule_) จาก get_label (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_emailเพิ่มหรือลบป้ายกำกับของอีเมล
ย้ายข้อความระหว่างโฟลเดอร์: เพิ่มและ/หรือลบป้ายกำกับด้วยชื่อหรือ ID lbl_… ชื่อที่ไม่รู้จักใน add จะถูกสร้างขึ้น เว้นแต่ create เป็น false
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
email_id | string | ใช่ | ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
add | string[] | ไม่ | ป้ายกำกับที่จะเพิ่ม (0–10 รายการ) |
remove | string[] | ไม่ | ป้ายกำกับที่จะลบ (0–10 รายการ) |
create | boolean | ไม่ | สร้างป้ายกำกับที่ไม่รู้จักใน add (ค่าเริ่มต้น true) |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}ฉบับร่าง ไฟล์แนบ และตัวตนผู้ส่ง
list_sending_identitiesแสดงรายการตัวตนผู้ส่งที่ยืนยันแล้ว
ที่อยู่และโดเมนที่เวิร์กสเปซนี้ส่งได้ในขณะนี้ (โดเมนที่ยืนยันแล้ว From เริ่มต้นของโดเมน และที่อยู่กล่องจดหมายที่ใช้งานอยู่) เรียกก่อน send_email เพื่อเลือก from ที่ถูกต้อง
ไม่มีพารามิเตอร์
{
"name": "list_sending_identities",
"arguments": {}
}create_draftสร้างฉบับร่าง
สร้างฉบับร่างของตัวเขียน ฉบับร่างเก็บไฟล์แนบได้: สร้างฉบับร่าง upload_attachment แล้ว send_email พร้อม draft_id ไม่ส่งอะไรทั้งสิ้น
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
from | string | ไม่ | ที่อยู่ผู้ส่งบนโดเมนที่ยืนยันแล้ว (อาจว่างไว้ระหว่างร่าง) |
to | string[] | ไม่ | ผู้รับ (0–100 รายการ) |
cc | string[] | ไม่ | ผู้รับสำเนา (0–100 รายการ) |
bcc | string[] | ไม่ | ผู้รับสำเนาลับ (0–100 รายการ) |
subject | string | ไม่ | หัวเรื่อง (สูงสุด 998 ตัวอักษร) |
html | string | ไม่ | เนื้อหา HTML |
text | string | ไม่ | เนื้อหาข้อความล้วน |
reply_to_email_id | string | ไม่ | ID อีเมลที่ฉบับร่างนี้ตอบกลับ |
thread_id | string | ไม่ | ID เธรดที่ฉบับร่างนี้อยู่ในนั้น |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_draftsแสดงรายการฉบับร่าง
แสดงรายการฉบับร่างของตัวเขียน เรียงจากที่อัปเดตล่าสุด แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draftดึงฉบับร่าง
ดึงฉบับร่างหนึ่งฉบับพร้อมเมทาดาทาของไฟล์แนบ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
draft_id | string | ใช่ | ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draftแทนที่เนื้อหาฉบับร่าง
แทนที่เนื้อหาและผู้รับของฉบับร่าง นี่เป็นการแทนที่ทั้งหมด ฟิลด์ที่คุณละไว้จะถูกล้าง ดังนั้นให้อ่าน get_draft ก่อน แล้วส่งทุกฟิลด์ที่ต้องการเก็บไว้ ไฟล์แนบไม่ได้รับผลกระทบ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
draft_id | string | ใช่ | ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
from | string | ไม่ | ที่อยู่ผู้ส่งบนโดเมนที่ยืนยันแล้ว (อาจว่างไว้ระหว่างร่าง) |
to | string[] | ไม่ | ผู้รับ (0–100 รายการ) |
cc | string[] | ไม่ | ผู้รับสำเนา (0–100 รายการ) |
bcc | string[] | ไม่ | ผู้รับสำเนาลับ (0–100 รายการ) |
subject | string | ไม่ | หัวเรื่อง (สูงสุด 998 ตัวอักษร) |
html | string | ไม่ | เนื้อหา HTML |
text | string | ไม่ | เนื้อหาข้อความล้วน |
reply_to_email_id | string | ไม่ | ID อีเมลที่ฉบับร่างนี้ตอบกลับ |
thread_id | string | ไม่ | ID เธรดที่ฉบับร่างนี้อยู่ในนั้น |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draftทิ้งฉบับร่าง
DESTRUCTIVE: ทิ้งฉบับร่างและลบไฟล์แนบที่จัดเก็บของฉบับร่างนั้นอย่างถาวร
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
draft_id | string | ใช่ | ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachmentอัปโหลดไฟล์แนบไปยังฉบับร่าง
อัปโหลดหนึ่งไฟล์ไปยังฉบับร่าง (สูงสุด 10 ไฟล์และรวม 10 MB ต่อข้อความ) ระบุ content_base64 หรือ file_path ในเครื่อง ไฟล์แนบต้องใช้แพ็กเกจแบบชำระเงิน ณ เวลาส่ง
ต้องระบุอย่างน้อยหนึ่งรายการ: content_base64, file_path
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
draft_id | string | ใช่ | ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
filename | string | ไม่ | ชื่อไฟล์ที่แสดงแก่ผู้รับ ค่าเริ่มต้นคือ basename ของ file_path (สูงสุด 255 ตัวอักษร) |
content_type | string | ไม่ | MIME type เช่น application/pdf ค่าเริ่มต้นคือ application/octet-stream |
content_base64 | string | ไม่ | เนื้อหาไฟล์แบบ base64 มาตรฐาน |
file_path | string | ไม่ | พาธสัมบูรณ์ของไฟล์ในเครื่องที่โปรเซสของ MCP server อ่านได้ |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachmentดาวน์โหลดไฟล์แนบ
ดาวน์โหลดไฟล์แนบส่วนตัว (ที่ส่ง ได้รับ หรืออยู่ในฉบับร่าง) คืนเนื้อหาแบบ base64 หรือเขียนไฟล์เมื่อตั้ง save_to_path (จะไม่เขียนทับเว้นแต่ overwrite เป็น true)
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
attachment_id | string | ใช่ | ID ไฟล์แนบ (ขึ้นต้นด้วย att_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
save_to_path | string | ไม่ | พาธสัมบูรณ์ในเครื่องที่จะเขียนไฟล์ลง แทนที่จะคืนเป็น base64 (ไม่บังคับ) |
overwrite | boolean | ไม่ | อนุญาตให้แทนที่ไฟล์ที่มีอยู่ที่ save_to_path ค่าเริ่มต้นคือ false |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachmentลบไฟล์แนบ
DESTRUCTIVE: ลบไฟล์แนบที่จัดเก็บไว้อย่างถาวร (เช่น นำไฟล์ออกจากฉบับร่างก่อนส่ง)
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
attachment_id | string | ใช่ | ID ไฟล์แนบ (ขึ้นต้นด้วย att_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}เทมเพลตแบบโฮสต์
list_templatesแสดงรายการเทมเพลตแบบโฮสต์
แสดงรายการเทมเพลตอีเมลแบบโฮสต์พร้อมสถานะการเผยแพร่และการใช้งาน แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
lifecycle | string | ไม่ | active (ค่าเริ่มต้น) archived หรือ all (หนึ่งใน active, archived, all) |
query | string | ไม่ | ค้นหาตามชื่อหรือคีย์ (สูงสุด 120 ตัวอักษร) |
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_templateสร้างเทมเพลตแบบโฮสต์
สร้างเทมเพลตพร้อมฉบับร่างที่แก้ไขได้ โดยเริ่มจากตัวเริ่มต้นได้ (welcome, reset, receipt หรือ blank) เผยแพร่ก่อนส่งด้วยคีย์
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
name | string | ใช่ | ชื่อสำหรับมนุษย์ (สูงสุด 120 ตัวอักษร) |
key | string | ไม่ | คีย์การส่งที่คงที่: ตัวอักษรพิมพ์เล็ก ตัวเลข ขีดกลาง ขึ้นต้นด้วยตัวอักษร (2–64 ตัวอักษร) สร้างจากชื่อเมื่อละไว้ |
starter | string | ไม่ | เนื้อหาเริ่มต้น (หนึ่งใน blank, welcome, reset, receipt) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_templateดึงเทมเพลต
ดึงฉบับร่างปัจจุบันของเทมเพลต (พร้อม revision) รุ่นที่เผยแพร่และใช้งานอยู่ ประวัติรุ่น และการใช้งาน รับ ID หรือคีย์
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID เทมเพลต (tmpl_…) หรือคีย์ (สูงสุด 128 ตัวอักษร) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draftบันทึกฉบับร่างเทมเพลต
บันทึกฉบับร่างที่แก้ไขได้ของเทมเพลตโดยใช้ optimistic concurrency: ส่ง revision ปัจจุบันจาก get_template (409 หมายความว่ามีคนบันทึกก่อน ให้อ่านใหม่แล้วลองอีกครั้ง) นี่เป็นการแทนที่เนื้อหาฉบับร่างทั้งหมด ฟิลด์ที่ละไว้จะถูกล้าง ดังนั้นให้ส่งทุกฟิลด์ที่ต้องการเก็บไว้ ใช้ตัวแทน {{variable}}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
revision | integer | ใช่ | revision ปัจจุบันของฉบับร่างจาก get_template (1–…) |
name | string | ไม่ | ชื่อเทมเพลต (สูงสุด 120 ตัวอักษร) |
subject_template | string | ไม่ | หัวเรื่องพร้อมตัวแทน (สูงสุด 998 ตัวอักษร) |
preheader_template | string | ไม่ | ข้อความตัวอย่าง (สูงสุด 240 ตัวอักษร) |
html_template | string | ไม่ | เนื้อหา HTML พร้อมตัวแทน |
text_template | string | ไม่ | เนื้อหาข้อความล้วนพร้อมตัวแทน |
from | string | ไม่ | ผู้ส่งเริ่มต้นสำหรับการส่งเทมเพลตนี้ |
reply_to | string | ไม่ | Reply-To เริ่มต้น |
variables | object[] | ไม่ | สัญญาตัวแปรที่มีชนิดข้อมูล แต่ละรายการ: {key (ตัวพิมพ์เล็ก/ขีดล่าง), label, type: text|number|url|boolean, required (ค่าเริ่มต้น true), fallback, description} |
variables[].key | string | ใช่ | |
variables[].label | string | ไม่ | |
variables[].type | string | ไม่ | (หนึ่งใน text, number, url, boolean) |
variables[].required | boolean | ไม่ | |
variables[].fallback | any | ไม่ | |
variables[].description | string | ไม่ | |
sample_data | object | ไม่ | ค่าตัวอย่างที่ใช้สำหรับการดูตัวอย่างและการทดสอบ |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draftเริ่มฉบับร่างใหม่จากรุ่นที่เผยแพร่
สร้างฉบับร่างใหม่ที่แก้ไขได้โดยคัดลอกจากรุ่นที่เผยแพร่ปัจจุบัน (409 หากมีฉบับร่างอยู่แล้วหรือยังไม่มีอะไรเผยแพร่)
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_templateเรนเดอร์ตัวอย่างเทมเพลต
เรนเดอร์ผลลัพธ์จริงจากเซิร์ฟเวอร์ (subject, html, text) สำหรับฉบับร่าง รุ่นที่เผยแพร่ หรือรุ่นที่ระบุ ด้วยข้อมูลที่ให้ ไม่ส่งอีเมล คืน 422 พร้อม findings เมื่อข้อมูลละเมิดสัญญาของตัวแปร
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
version_id | string | ไม่ | ID รุ่นที่ไม่บังคับ ค่าเริ่มต้นคือฉบับร่าง แล้วจึงเป็นรุ่นที่เผยแพร่ |
data | object | ไม่ | ค่าของตัวแปร ค่าเริ่มต้นคือข้อมูลตัวอย่างของรุ่นนั้น |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_testส่งอีเมลทดสอบเทมเพลต
SENDS REAL EMAIL ส่งสแนปชอตของฉบับร่าง (หรือรุ่นที่ระบุ) ที่ขึ้นต้นด้วย [Test] ไปยังผู้รับที่ระบุ นับรวมในการใช้งาน เวิร์กสเปซช่วงทดลองส่งได้เฉพาะอีเมลของบัญชีหรือที่อยู่จำลองของ SES
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
to | string[] | ใช่ | ผู้รับทดสอบ (1–100 รายการ) |
from | string | ไม่ | ผู้ส่งบนโดเมนที่ยืนยันแล้ว ค่าเริ่มต้นคือ From ของเทมเพลต |
version_id | string | ไม่ | ID รุ่นที่ไม่บังคับ |
data | object | ไม่ | ค่าของตัวแปร ค่าเริ่มต้นคือข้อมูลตัวอย่าง |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_templateเผยแพร่รุ่นของเทมเพลต
เผยแพร่ฉบับร่างปัจจุบันเป็นรุ่นที่แก้ไขไม่ได้ ซึ่ง send_email ที่ใช้ template.key จะใช้ล้มเหลวด้วย findings 422 เมื่อมีข้อผิดพลาดในการตรวจสอบ หรือ 409 หากจะทำลายสัญญาตัวแปรที่ใช้งานจริงของเทมเพลตที่ใช้ในระบบจริงอยู่แล้ว
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_templateเก็บถาวรเทมเพลต
หยุดการส่งใหม่ที่ใช้เทมเพลตนี้ (เก็บประวัติไว้ และย้อนกลับได้ด้วย restore_template) การเชื่อมต่อใด ๆ ที่ส่งด้วยคีย์นี้จะเริ่มล้มเหลวด้วย 404
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_templateกู้คืนเทมเพลตที่เก็บถาวร
ทำให้เทมเพลตที่เก็บถาวรกลับมาใช้งานได้อีกครั้ง
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
template_id | string | ใช่ | ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}โดเมนและ DNS
list_domainsแสดงรายการโดเมน
แสดงรายการโดเมนผู้ส่งพร้อม setup_status รวม (verified | checking | pending) สถานะ DNS ต่อเรคคอร์ด และสถานะขาเข้า อาจช้า: โดเมนที่ยังไม่ยืนยันจะถูกตรวจสอบซ้ำแบบสด แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domainดึงรายละเอียดการตั้งค่าโดเมน
ดึงโดเมนหนึ่งรายการพร้อมเรคคอร์ด DNS ที่ต้องเผยแพร่ตรงตัว (type, name, value) สถานะจริงของแต่ละเรคคอร์ดจาก public resolver สองตัว dns_issues พร้อมวิธีแก้ และสถานะขาเข้า
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domainเพิ่มโดเมนผู้ส่ง
ลงทะเบียนโดเมนที่คุณควบคุมสำหรับการส่ง คืนเรคคอร์ด DNS (CNAME ของ SES Easy DKIM) ที่เจ้าของต้องเผยแพร่ ไม่เปลี่ยน DNS เอง นับรวมในขีดจำกัดโดเมนของแพ็กเกจ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
name | string | ใช่ | ชื่อโดเมนเปล่า เช่น example.com หรือ mail.example.com (สูงสุด 253 ตัวอักษร) |
default_from | string | ไม่ | ที่อยู่ผู้ส่งเริ่มต้นบนโดเมนนี้ (ไม่บังคับ) |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domainยืนยันโดเมน
รันการตรวจสอบ SES/DNS แบบสดทันที ทำซ้ำได้อย่างปลอดภัย ให้ poll ทุก 30–60 วินาทีหลังเปลี่ยน DNS (การเผยแพร่อาจใช้เวลาตั้งแต่ไม่กี่นาทีถึงหลายชั่วโมง) อนุญาตให้ส่งได้เมื่อ status เป็น verified
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domainลบโดเมน
DESTRUCTIVE: ลบโดเมนออกจากเวิร์กสเปซ รวมถึงเส้นทางรับอีเมลขาเข้า การส่งจากโดเมนนี้จะล้มเหลวทันทีหลังจากนั้น ไม่ลบเรคคอร์ด DNS ที่ผู้ให้บริการ DNS ของคุณ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_providerตรวจหาผู้ให้บริการ DNS และโฮสต์ของเรคคอร์ด
ตรวจหาผู้ให้บริการ DNS ที่เป็นผู้มีอำนาจของโดเมน และคืนโฮสต์แบบสัมพัทธ์ที่ต้องพิมพ์ในผู้ให้บริการนั้นสำหรับแต่ละเรคคอร์ด เรคคอร์ด DMARC ที่แนะนำ คำแนะนำ MX ขาเข้า และมีการตั้งค่าแบบคลิกเดียว (Domain Connect) หรือไม่
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_linkดึงลิงก์ตั้งค่า DNS แบบคลิกเดียว
เมื่อ get_dns_provider รายงาน providers.domainConnect.available ให้สร้าง URL ขอความยินยอมที่ลงนามแล้ว ส่งให้มนุษย์ เขาเปิดและอนุมัติการเปลี่ยน DNS ที่ผู้ให้บริการของตน จะไม่มีอะไรเปลี่ยนจนกว่าจะอนุมัติ 409 หากไม่รองรับ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}อีเมลขาเข้า
setup_inboundเปิดใช้การรับอีเมลขาเข้าสำหรับโดเมน
จัดเตรียมการรับอีเมลขาเข้าของ SES สำหรับโดเมนที่ยืนยันแล้ว ใช้โดเมนรากเมื่อไม่มี MX ที่ขัดแย้ง มิฉะนั้นใช้ inbound.<domain> คืนเรคคอร์ด MX ที่เจ้าของต้องเผยแพร่ ไม่แก้ไข DNS
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inboundยืนยัน MX ขาเข้า
ตรวจสอบเรคคอร์ด MX ขาเข้าอีกครั้ง สถานะจะเป็น ready เมื่อ public resolver ทั้งสองตัวเห็นเรคคอร์ดนั้น
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxesแสดงรายการที่อยู่ขาเข้า
แสดงรายการที่อยู่รับ โดยระบุเฉพาะโดเมนหนึ่งได้ แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ไม่ | ตัวกรอง ID โดเมน (ไม่บังคับ) |
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inboxดึงกล่องจดหมาย
ดึงที่อยู่ขาเข้าหนึ่งรายการ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
inbox_id | string | ใช่ | ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inboxสร้างที่อยู่ขาเข้า
สร้างที่อยู่ เช่น support@<receiving domain> บนโดเมนที่สถานะขาเข้าเป็น ready (รัน setup_inbound และ verify_inbound ก่อน) อีเมลที่ได้รับจะปรากฏใน list_emails โดย direction เป็น in
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
domain_id | string | ใช่ | ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
local_part | string | ใช่ | ส่วนก่อน @ เช่น support (สูงสุด 64 ตัวอักษร) |
name | string | ไม่ | ชื่อที่แสดง (ไม่บังคับ) |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inboxเปลี่ยนชื่อ เปิดใช้ หรือปิดใช้กล่องจดหมาย
เปลี่ยนชื่อกล่องจดหมายหรือตั้งสถานะเป็น active / disabled
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
inbox_id | string | ใช่ | ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
name | string | ไม่ | ชื่อที่แสดงใหม่ |
status | string | ไม่ | สถานะใหม่ (หนึ่งใน active, disabled) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwardingส่งต่อกล่องจดหมายไปยังที่อยู่อื่น
SENDS REAL EMAIL เมื่อส่งต่อไปยังผู้อื่นที่ไม่ใช่เจ้าของบัญชี: ตั้งค่าว่าจะส่งต่ออีเมลที่กล่องจดหมายได้รับไปที่ใด ที่อยู่ของเจ้าของเองจะเปิดใช้ทันที ที่อยู่อื่นจะได้รับอีเมลยืนยัน และการส่งต่อจะคงสถานะ pending จนกว่าคนที่นั่นจะยืนยัน ส่ง forward_to: null เพื่อปิดการส่งต่อ สำเนาที่ส่งต่อจะมาจากที่อยู่ของกล่องจดหมาย โดยมีผู้ส่งต้นฉบับเป็น Reply-To
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
inbox_id | string | ใช่ | ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
forward_to | string,null | ใช่ | ที่อยู่อีเมลปลายทางของการส่งต่อ หรือ null เพื่อปิดการส่งต่อ (สูงสุด 254 ตัวอักษร) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inboxลบกล่องจดหมาย
DESTRUCTIVE: ลบที่อยู่ขาเข้า อีเมลที่ได้รับไปแล้วยังคงเก็บไว้ อีเมลใหม่ที่ส่งมายังที่อยู่นั้นจะไม่ถูกจัดเก็บเข้าที่อยู่นั้นอีก
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
inbox_id | string | ใช่ | ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}ความสามารถในการส่งถึง bounce และการระงับการส่ง
deliverability_statsดึงสถิติการส่งถึงย้อนหลัง 30 วัน
ยอดรวมย้อนหลัง 30 วันทั้งเวิร์กสเปซ: sent, delivery, bounce, complaint, reject, open, click และ deliveryRate (%)
ไม่มีพารามิเตอร์
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputationแสดงรายการชื่อเสียงผู้ส่ง
สถานะชื่อเสียงต่อที่อยู่ From ที่ตรงกันทุกตัวอักษร: active, throttled (ขีดจำกัดรายวันต่ำลง) หรือ paused (การส่งคืน 423) พร้อมเหตุผลและขีดจำกัดรายวัน ตรวจสอบเมื่อการส่งล้มเหลวด้วย 423 หรือ 429 แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressionsแสดงรายการการระงับการส่ง
รายการระงับการส่ง (suppression list) ของเวิร์กสเปซ: ผู้รับที่ถูกบล็อกหลังเกิด bounce ถาวรหรือการร้องเรียนสแปม การส่งถึงผู้รับเหล่านี้ล้มเหลวด้วย 422 แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppressionลบการระงับการส่งจาก bounce
DESTRUCTIVE (ลดความเข้มของการบล็อกเพื่อความปลอดภัย): ลบการระงับการส่งจาก bounce เพื่อให้ส่งอีเมลถึงที่อยู่นั้นได้อีก ทำเมื่อมนุษย์ยืนยันว่าที่อยู่นั้นใช้งานได้แล้วเท่านั้น การระงับการส่งจาก complaint ลบไม่ได้ (409)
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
email | string | ใช่ | ที่อยู่ผู้รับที่ถูกระงับการส่ง (สูงสุด 320 ตัวอักษร) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipientsแสดงรายการผู้รับที่ถูกบล็อก
ทุกผู้รับที่ SendHQ จะปฏิเสธ: bounce, complaint และการยกเลิกการรับอีเมลการตลาดที่จำกัดตามโดเมน พร้อมสรุปตามประเภท อ่านสูงสุด 500 รายการล่าสุด แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}บัญชี การใช้งาน การวิเคราะห์ และคีย์
get_accountดึงบัญชี การใช้งาน และการเรียกเก็บเงิน
อีเมลเจ้าของบัญชี แพ็กเกจ/ระดับการเข้าถึง การส่งถึงผู้รับในรอบปัจจุบันที่ใช้ไปเทียบกับโควตา โดเมนที่ใช้เทียบกับขีดจำกัด การถ่ายโอนไฟล์แนบ สรุปชื่อเสียง สถานะการสมัคร แพ็กเกจที่เผยแพร่ และจำนวนของเวิร์กสเปซ ใช้ตรวจสอบโควตาที่เหลือหรือผู้ที่ช่วงทดลองส่งถึงได้ (อีเมลของบัญชี)
ไม่มีพารามิเตอร์
{
"name": "get_account",
"arguments": {}
}get_analyticsดึงการวิเคราะห์การส่ง
การวิเคราะห์ในแดชบอร์ดสำหรับ 7, 30 หรือ 90 วันที่ผ่านมา: ยอดรวมของ sent/received/delivered/bounced/blocked/opened/clicked/complaint ไทม์ไลน์รายวัน โดเมนผู้ส่งอันดับต้น และหัวเรื่องอันดับต้น
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
days | integer | ไม่ | ช่วงเวลาเป็นวัน: 7, 30 (ค่าเริ่มต้น) หรือ 90 (หนึ่งใน 7, 30, 90) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keysแสดงรายการเมทาดาทาของ API key
แสดงรายการชื่อ API key คำนำหน้าที่ไม่เป็นความลับ และเวลาใช้งานล่าสุด อ่านอย่างเดียว: MCP server นี้สร้าง หมุนเวียน หรือเพิกถอนคีย์ไม่ได้ มนุษย์เป็นผู้ทำในแดชบอร์ด แบ่งหน้า: ผลลัพธ์มี pagination {offset, limit, returned, total?, has_more, next_offset}
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
limit | integer | ไม่ | ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200) |
offset | integer | ไม่ | จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_healthตรวจสอบสถานะบริการ SendHQ
ตรวจสอบว่า SendHQ API ทำงานอยู่และผู้ให้บริการอีเมลรายใดใช้งานอยู่ ไม่ต้องใช้ API key ที่ถูกต้อง
ไม่มีพารามิเตอร์
{
"name": "get_service_health",
"arguments": {}
}รายการความครอบคลุมของ API
ทุกการดำเนินการใน API สาธารณะและเครื่องมือที่ครอบคลุม ทุกอย่างที่ผู้ใช้ทำได้ในแดชบอร์ดและมี API จะถูกครอบคลุม ส่วนที่ยกเว้นด้านล่างเป็นการเจตนา
| Endpoint | เครื่องมือ | หมายเหตุ |
|---|---|---|
| POST /emails | send_email | ส่งอีเมลหนึ่งฉบับ |
| POST /emails/batch | send_batch | ส่งข้อความที่ปรับแต่งเฉพาะรายได้สูงสุด 100 ฉบับ |
| GET /emails | list_emails | แสดงรายการอีเมลที่ส่งและได้รับ |
| GET /emails/:id | get_email | ดึงอีเมลและไฟล์แนบ |
| PATCH /emails/:id | mark_email | อัปเดตสถานะอ่านแล้ว การเก็บถาวร สแปม หมวดหมู่ หรือความสำคัญ |
| POST /emails/:id/labels | label_email | เพิ่มหรือลบป้ายกำกับของอีเมล |
| DELETE /emails/:id | delete_email | ลบอีเมลที่เก็บรักษาไว้ |
| GET /emails/:id/events | list_email_events | แสดงรายการอีเวนต์การส่งของอีเมลฉบับหนึ่ง |
| GET /threads/:id | get_thread | ดึงบทสนทนาเรียงตามลำดับเวลา |
| GET /labels | list_labels | แสดงรายการป้ายกำกับพร้อมจำนวนข้อความและกฎการจัดเก็บ |
| POST /labels | create_label | สร้างป้ายกำกับ โดยเลือกใส่กฎจัดเก็บอัตโนมัติได้ |
| GET /labels/:id | get_label | ดึงป้ายกำกับด้วย ID หรือชื่อ |
| PATCH /labels/:id | update_label | เปลี่ยนชื่อ เปลี่ยนสี หรือเปลี่ยนป้ายกำกับให้เป็น bucket |
| DELETE /labels/:id | delete_label | ลบป้ายกำกับโดยไม่ลบอีเมล |
| POST /labels/:id/rules | create_label_rule | เพิ่มกฎจัดเก็บอัตโนมัติให้ป้ายกำกับ |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | ลบกฎจัดเก็บอัตโนมัติ |
| POST /drafts | create_draft | สร้างฉบับร่างในตัวเขียนอีเมล |
| GET /drafts | list_drafts | แสดงรายการฉบับร่างในตัวเขียนอีเมล |
| GET /drafts/:id | get_draft | ดึงฉบับร่างและไฟล์แนบ |
| PUT /drafts/:id | update_draft | แทนที่เนื้อหาฉบับร่าง |
| DELETE /drafts/:id | delete_draft | ทิ้งฉบับร่าง |
| POST /drafts/:id/attachments | upload_attachment | อัปโหลดไฟล์แนบไปยังฉบับร่าง |
| GET /attachments/:id | download_attachment | ดาวน์โหลดไฟล์แนบส่วนตัว |
| DELETE /attachments/:id | delete_attachment | ลบไฟล์แนบส่วนตัว |
| GET /sending-identities | list_sending_identities | แสดงรายการตัวตนผู้ส่งที่ยืนยันแล้ว |
| GET /templates | list_templates | แสดงรายการเทมเพลตแบบโฮสต์ |
| POST /templates | create_template | สร้างเทมเพลตแบบโฮสต์ |
| GET /templates/:id | get_template | ดึงฉบับร่าง รุ่นที่เผยแพร่ และการใช้งาน |
| PUT /templates/:id/draft | update_template_draft | บันทึกฉบับร่างของเทมเพลตอัตโนมัติ |
| POST /templates/:id/draft | create_template_draft | สร้างฉบับร่างใหม่จากรุ่นที่เผยแพร่ |
| POST /templates/:id/render | render_template | เรนเดอร์ผลลัพธ์จริงจากเซิร์ฟเวอร์ |
| POST /templates/:id/test | send_template_test | ส่งสแนปชอตทดสอบ |
| POST /templates/:id/publish | publish_template | เผยแพร่รุ่นเทมเพลตที่แก้ไขไม่ได้ |
| POST /templates/:id/archive | archive_template | เก็บถาวรเทมเพลต |
| POST /templates/:id/restore | restore_template | กู้คืนเทมเพลตที่เก็บถาวร |
| POST /domains | add_domain | เพิ่มโดเมนผู้ส่ง |
| GET /domains | list_domains | แสดงรายการโดเมนและสถานะ DNS ที่แคชไว้ |
| GET /domains/:id | get_domain | ดึงรายละเอียดการตั้งค่าโดเมน |
| POST /domains/:id/verify | verify_domain | รีเฟรชการยืนยัน SES และ DNS |
| POST /domains/:id/inbound/setup | setup_inbound | จัดเตรียมการรับอีเมลขาเข้าของ SES |
| POST /domains/:id/inbound/verify | verify_inbound | ยืนยันการกำหนดเส้นทาง MX ขาเข้า |
| DELETE /domains/:id | delete_domain | ลบโดเมน |
| GET /dns/provider | get_dns_provider | ตรวจหาผู้ให้บริการ DNS ที่เป็นผู้มีอำนาจและโฮสต์แบบสัมพัทธ์ของเรคคอร์ด |
| GET /dns/domain-connect/connect | get_domain_connect_link | สร้างลิงก์ขอความยินยอม Domain Connect สำหรับตั้งค่า DNS แบบคลิกเดียว |
| POST /inboxes | create_inbox | สร้างที่อยู่ขาเข้า |
| GET /inboxes | list_inboxes | แสดงรายการที่อยู่ขาเข้า |
| GET /inboxes/:id | get_inbox | ดึงข้อมูลที่อยู่ขาเข้า |
| PATCH /inboxes/:id | update_inbox | เปลี่ยนชื่อ เปิดใช้ หรือปิดใช้กล่องจดหมาย |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | ส่งต่ออีเมลที่กล่องจดหมายได้รับไปยังที่อยู่อื่น |
| DELETE /inboxes/:id | delete_inbox | ลบกล่องจดหมายโดยเก็บข้อความไว้ |
| GET /deliverability/stats | deliverability_stats | ดึงสถิติการส่งถึงย้อนหลัง 30 วัน |
| GET /deliverability/reputation | list_sender_reputation | แสดงสถานะชื่อเสียงตามตัวตนผู้ส่งที่ตรงกันทุกตัวอักษร |
| GET /suppressions | list_suppressions | แสดงรายการระงับการส่งของเวิร์กสเปซ |
| DELETE /suppressions/:email | remove_suppression | ลบการระงับการส่งจาก bounce ที่มีสิทธิ์ |
| GET /blocked-recipients | list_blocked_recipients | แสดงรายการ bounce, complaint และการยกเลิกการรับ |
| GET /account | get_account | ดึงข้อมูลบัญชี การใช้งาน สถานะการเรียกเก็บเงิน และจำนวนเวิร์กสเปซด้วย API key |
| GET /analytics | get_analytics | ดึง analytics การส่งของแดชบอร์ดสำหรับ 7, 30 หรือ 90 วัน |
| GET /profile | get_account | คู่แฝดแบบเซสชันเท่านั้นของ GET /account MCP server อ่านเส้นทางของ API-key |
| POST /billing/checkout | ไม่เปิดให้ใช้ | การเปลี่ยนแปลงการเรียกเก็บเงินเป็นแบบเซสชันเท่านั้นโดยการออกแบบ และต้องให้เจ้าของบัญชีทำในแดชบอร์ด สถานะการเรียกเก็บเงินอ่านได้ด้วย get_account |
| POST /billing/cancel | ไม่เปิดให้ใช้ | การเปลี่ยนแปลงการเรียกเก็บเงินเป็นแบบเซสชันเท่านั้นโดยการออกแบบ และต้องให้เจ้าของบัญชีทำในแดชบอร์ด สถานะการเรียกเก็บเงินอ่านได้ด้วย get_account |
| POST /keys | ไม่เปิดให้ใช้ | ยกเว้นโดยเจตนา: เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง มนุษย์เป็นผู้จัดการคีย์ในแดชบอร์ด |
| GET /keys | list_api_keys | แสดงรายการเมทาดาทาของ API key |
| DELETE /keys/:id | ไม่เปิดให้ใช้ | ยกเว้นโดยเจตนา: เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง มนุษย์เป็นผู้จัดการคีย์ในแดชบอร์ด |
ไม่มีให้ใช้โดยเจตนา
| ความสามารถ | Endpoint | เหตุผล |
|---|---|---|
| สร้าง หมุนเวียน เพิกถอน หรือลบ API key | POST /keys, DELETE /keys/:id | ยกเว้นโดยเจตนา: เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง มนุษย์เป็นผู้จัดการคีย์ในแดชบอร์ด |
| เริ่มการชำระเงินหรือยกเลิกการสมัคร | POST /billing/checkout, POST /billing/cancel | การเปลี่ยนแปลงการเรียกเก็บเงินเป็นแบบเซสชันเท่านั้นโดยการออกแบบ และต้องให้เจ้าของบัญชีทำในแดชบอร์ด สถานะการเรียกเก็บเงินอ่านได้ด้วย get_account |
| การตั้งค่า DNS แบบคลิกเดียวของ Cloudflare (OAuth) | GET /api/dns/cloudflare/connect | ต้องใช้เซสชันเบราว์เซอร์แบบโต้ตอบและความยินยอม OAuth ของ Cloudflare ให้ใช้เรคคอร์ดจาก get_domain โฮสต์จาก get_dns_provider หรือ get_domain_connect_link แทน |
| สมัครใช้งาน เข้าสู่ระบบ ออกจากระบบ การเชื่อมโยงบัญชี Google | /api/auth/* | การยืนยันตัวตนผ่านเบราว์เซอร์สำหรับมนุษย์ MCP server ยืนยันตัวตนด้วย API key |
| แบบฟอร์มติดต่อซัพพอร์ต | POST /api/contact | แบบฟอร์มสาธารณะบนเว็บไซต์การตลาดสำหรับมนุษย์ ไม่ใช่การดำเนินการของเวิร์กสเปซ |
แค็ตตาล็อกที่เครื่องอ่านได้: /docs/mcp/tools.json (schema, annotation, การจับคู่ endpoint และรายการที่ยกเว้น) หน้านี้ฉบับ Markdown: /docs/mcp.md เมื่อติดตั้ง CLI แล้ว sendhq commands --format json จะพิมพ์แค็ตตาล็อกเดียวกัน