关于 mailchimp-mcp-server
mailchimp-mcp-server 让团队通过 MCP 客户端管理 Mailchimp 活动、受众和订阅者,并以发送确认门控和发送后报告为特色。
主要功能
- 01起草、测试、发送或定时发送活动
- 02管理受众与订阅者记录
- 03创建和更新细分及合并字段
- 04查看活动报告和互动数据
- 05可选使用本地素材与模板
适用场景
- 01发送前准备并测试新闻邮件
- 02导入或更新受众订阅者
- 03查看点击、打开和退订数据
- 04使用本地模板编写活动
MCP 相关
通过 MCP 工具、资源和新闻邮件提示词提供 Mailchimp 账户、受众、订阅者、活动、模板及报告操作。支持 STDIO 和 Streamable HTTP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @cyanheads/mailchimp-mcp-serverMAILCHIMP_API_KEY密钥Mailchimp Marketing API key, including the '-dc' data-center suffix (e.g. 'abc...-us22'). Generate at Mailchimp → Account → Extras → API keys.MAILCHIMP_BASE_URLOverride the API base URL (for mock servers or testing). Defaults to 'https://{dc}.api.mailchimp.com/3.0' derived from the API key suffix.MAILCHIMP_TIMEOUT_MSPer-request timeout in milliseconds.MAILCHIMP_MAX_RETRIESMax retry attempts for transient upstream failures (0-10).MAILCHIMP_CONCURRENCY_LIMITMax in-flight upstream requests across this process (1-10).MAILCHIMP_ASSETS_DIRAbsolute path to a local assets directory. When set (Node-only — Workers ignored), enables the `mailchimp_assets` tool and auto-uploads `@assets/<path>` references in campaign HTML to Mailchimp File Manager at send time. Cache at <dir>/.mailchimp-cache.json.MAILCHIMP_TEMPLATES_DIRAbsolute path to a local templates directory. When set (Node-only), enables the `mailchimp_local_templates` tool and support for `content.localTemplate` on campaign tools. Templates are `.eta` files with optional YAML frontmatter; legacy `<name>.meta.yaml` sidecars are read when frontmatter is absent. Canonical write path on free-tier Mailchimp.MCP_LOG_LEVELMinimum log level for output: debug, info, notice, warning, or error.MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODE密钥Authentication mode to use: 'none', 'jwt', or 'oauth'.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@cyanheads/mailchimp-mcp-server
直接通过 MCP 客户端起草、测试和发送 Mailchimp 营销活动 — 具备受众管理、订阅者增删改查,以及默认安全的发送关卡保护下的发送后分析功能。支持 STDIO 或 Streamable HTTP。
概览
Mailchimp 营销活动管理。起草、测试和发送电子邮件营销活动,管理受众和订阅者,并查看发送后分析;还可选配本地图片和模板目录用于内容创作。
工具
| 工具 | 描述 |
|---|---|
mailchimp_account | 账户资料、套餐、数据中心和 Chimp Chatter 活动动态 |
mailchimp_audiences | 读取、创建和更新受众(列表),并提供按受众划分的分析数据和注册表单配置 |
mailchimp_audience_overview | 一次调用获取受众摘要:信息、统计数据、增长历史、热门电子邮件客户端和合并字段架构 |
mailchimp_subscribers | 订阅者的读取、更新、归档、标签、备注和互动历史 |
mailchimp_upsert_subscriber | 以幂等方式添加或更新单个订阅者,并设置状态、合并字段、标签和备注 |
mailchimp_find_subscriber | 在单个受众中或整个账户中按电子邮件查找订阅者 |
mailchimp_import_subscribers | 每次调用批量添加或更新最多 500 位订阅者,默认状态为 pending |
mailchimp_segments | 细分受众群的增删改查(已保存、静态、模糊),成员列表,以及批量添加/移除 |
mailchimp_merge_fields | 读取、创建和更新订阅者自定义属性 |
mailchimp_campaigns | 营销活动记录、内容、发送检查清单以及 RSS/重发控制 |
mailchimp_send_campaign | 一次调用即可撰写营销活动并将其保存为草稿、测试、发送或安排发送 |
mailchimp_replicate_campaign | 复制营销活动并设置覆盖项,然后保存为草稿、测试、发送或安排发送 |
mailchimp_reports | 营销活动报告:报告索引、单份报告或 10 种报告维度之一 |
mailchimp_campaign_report | 发送后摘要:关键指标以及热门链接、位置和退订数据 |
mailchimp_templates | Mailchimp 托管的模板;免费套餐可读取,写入需要付费套餐 |
mailchimp_files | 在 Mailchimp 的 CDN 上上传、列出、重命名和删除文件管理器中的文件 |
mailchimp_search | 在整个账户中搜索成员或营销活动 |
mailchimp_assets (条件启用:MAILCHIMP_ASSETS_DIR) | 检查并预热营销活动 HTML 中 @assets/<path> 引用对应的上传文件 |
mailchimp_local_templates (条件启用:MAILCHIMP_TEMPLATES_DIR) | 编写并渲染本地 .eta 模板;这是免费套餐的模板写入路径 |
mailchimp_playbook | 与实时账户状态合并的流程手册;仅提供建议 |
资源
| 资源 | 描述 |
|---|---|
mailchimp://account | 账户快照:资料、套餐、数据中心、订阅者总数 |
mailchimp://audiences/{audienceId} | 受众快照:名称、联系人、统计数据、双重选择加入状态 |
mailchimp://campaigns/{campaignId} | 营销活动快照:状态、设置、收件人 |
mailchimp://campaigns/{campaignId}/report | 营销活动发送后的关键指标 |
所有资源数据也可通过工具获取;受众和营销活动可通过各工具的 list 操作列出。
提示词
| 提示词 | 描述 |
|---|---|
newsletter_from_source | 根据 URL 或简介撰写编辑类新闻简报,然后依次完成草稿、测试和发送流程 |
设计参考:docs/email-design-playbook.md。
能力参考
mailchimp_account 工具
operation: info返回资料、套餐、数据中心、订阅者总数和行业基准;operation: activity-feed返回 Chimp Chatter 事件,可通过count(最多 100,默认 20)和offset分页- 活动动态为空时,会附带一条
note,说明可能的原因
mailchimp_audiences 工具
- 操作:
list、get、create、update、分析数据读取操作list-activity、list-growth、list-clients、list-abuse-reports、list-locations,以及get-signup-forms/customize-signup-forms(接收signupFormConfig);除list和create外,所有操作都需要audienceId create需要name、contact(company、address1、city、state、zip、country)、permissionReminder和campaignDefaults(fromName、fromEmail、language)
mailchimp_audience_overview 工具
audienceId和growthMonths(1–36,默认值为 12);返回信息、统计数据、联系人、营销活动默认值、增长历史、热门电子邮件客户端以及合并字段架构notes[]说明增长或电子邮件客户端数组为空的原因,区分“暂无数据”和零互动
mailchimp_subscribers 工具
- 每次调用都需要
audienceId;除list(可按status筛选)外,每项操作都需要email;操作包括:list、get、update、archive、list-tags、set-tags、list-notes/add-note/update-note/delete-note(按noteId操作),以及list-activity/list-events/list-goals - 地址会先去除首尾空格;如果缺少本地部分或域名部分,则会被拒绝;
list的email为空时不会应用筛选。将状态update为subscribed时,如果是在恢复订阅,会要求确认;已订阅的成员则保持原状 set-tags是声明式操作:tags会成为完整的活动标签集合,除非在preserveTags中指定,否则会移除其他所有标签(静态细分的成员资格会作为标签存储)。返回tagsAdded、tagsRemoved和tagsActive
mailchimp_upsert_subscriber 工具
- 必须提供
audienceId、email和status;可选参数包括mergeFields、tags+preserveTags(与set-tags使用相同的声明式同步方式)、note、vip、language;updateExistingStatus: false只会将status应用于新记录 - 返回
isNew、最终的status、tagsAdded/tagsRemoved/tagsFinal、noteAttached和webUrl status: "pending"使用 Mailchimp 的双重选择加入流程。对于新的或恢复订阅的subscribed状态,在写入任何内容之前,都需要确认已记录的同意;如果拒绝,则不会写入任何内容。对于已订阅记录的更新以及updateExistingStatus: false,会保留现有状态,无需确认
mailchimp_find_subscriber 工具
email接受电子邮件地址或自由格式的搜索片段,包括不含@的片段;可限定在一个audienceId内搜索,或在省略该参数时搜索账户中的所有受众(通过searchedAcross返回搜索范围)- 返回包含合并字段和统计数据的
exactMatches和fuzzyMatches;includeTags(默认值为true)会为每个匹配项额外调用一次,以附加其标签
mailchimp_import_subscribers 工具
- 每次调用需要提供
audienceId和 1–500 行subscribers;status默认为pending(双重选择加入),每行的status可覆盖该默认值;updateExisting默认为false,因此会跳过现有记录 - 任何将设置为
subscribed的行都需要在整个批次写入前进行一次确认;如果拒绝,则不会写入任何内容。仅导入待处理状态的记录无需确认 - 返回
totalCreated、totalUpdated、errorCount以及逐行的succeeded和failed条目;地址不完整的记录会以invalid_email失败;批次中没有有效行时,不会发出上游请求
mailchimp_segments 工具
- 每次调用都需要
audienceId;除list(可按type筛选:saved、static、fuzzy)和create外,每项操作都需要segmentId;create/update接受name、staticEmails或已保存细分的options batch-update-members会将membersToAdd/membersToRemove应用于静态细分,并返回added、removed和逐个电子邮件地址的errors- 免费套餐支持静态细分和基本的已保存细分;高级条件需要 Premium,否则会以
mailchimp_forbidden失败
mailchimp_merge_fields 工具
- 支持
list、get、create、update;create需要name、tag(最多 10 个字符)和type;get/update需要mergeId options用于传递特定类型的配置:dropdown/radio使用choices,date/birthday使用date_format,phone使用phone_format
mailchimp_campaigns 工具
- 操作:
list(按status、listId、sinceSendTime/beforeSendTime筛选)、get、create(type为regular/plaintext/rss,另需recipients和settings)、update、replicate、get-content、set-content、get-checklist、cancel-send、create-resend、pause-rss、resume-rss;除list和create外,其他操作均需提供campaignId set-content接受html、plainText、templateId+templateSections、archiveContent、url或localTemplate(不能与html和templateId同时使用);get-checklist返回isReady和带类型的条目get-content接受variant: html | plainText | archiveHtml | all(默认值为all);空正文会被省略- 此处不支持发送、测试、排期或删除;发送操作通过
mailchimp_send_campaign或mailchimp_replicate_campaign进行
mailchimp_send_campaign 工具
- 必须提供
audienceId、subject、fromName、replyTo和content(至少提供html、plainText、templateId、localTemplate中的一项);mode可以是draft(默认值)、test(需要testEmails,最多 50 个)、send或schedule(需要提供至少 15 分钟后的scheduleTime) - 返回
campaignId、实际生效的mode、status、recipientCount、webUrl和非阻塞的checklistWarnings;在draft以外的模式下,阻塞性检查清单错误会抛出pre_send_checklist_failed;发生中途流程失败时,cleanupOnError(默认值为true)会删除草稿 send和schedule需要设置confirmSend: true,之后会在创建任何 campaign 之前显示一次性确认提示;拒绝后会保留草稿并设置cancelledByUser。内容变更或重放时会再次询问;上游失败状态不明确时,绝不会重试创建操作
mailchimp_replicate_campaign 工具
- 提供
sourceCampaignId,以及可选的subjectOverride、previewTextOverride、fromNameOverride、replyToOverride、titleOverride、audienceOverride、segmentOverride和contentOverride;mode、testEmails、scheduleTime和cleanupOnError的用法与mailchimp_send_campaign相同 - 返回新的
campaignId、overridesApplied[],以及相同的状态、检查清单和cancelledByUser字段 send和schedule同样需要设置confirmSend: true并通过确认提示门槛
mailchimp_reports 工具
list(按type、sinceSendTime/beforeSendTime筛选)、get,或使用campaignId和dimension执行slice;dimension可为:abuse-reports、advice、click-details(通过linkId指定一个 URL)、open-details(通过subscriberHash指定一个成员)、domain-performance、eepurl、email-activity、locations、sent-to、unsubscribedslice返回按维度定义结构的rows以及totalItems;对于尚未发送的 campaign,get会抛出campaign_not_sent
mailchimp_campaign_report 工具
- 提供
campaignId和includeTopN(每个切片返回 1–100 行,默认值为 10) - 返回
delivery(送达数、按类型划分的退信数、滥用举报)、engagement(打开数、点击数、取消订阅数)、topClickedLinks、topLocations、recentUnsubscribes;如果 Mailchimp 提供了行业基准数据,也会返回industryBenchmarks;对于尚未发送的 campaign,会抛出campaign_not_sent
mailchimp_templates 工具
list(按type为user/base/gallery、category、folderId筛选)、get、get-default-content、create、update和delete;update仅接受name、html和folderId,因此各分区的编辑需通过 campaign 的templateSections进行- 免费套餐支持读取
base和user模板;写入和读取gallery需要付费套餐,否则会失败并返回mailchimp_forbidden。所有套餐均可通过mailchimp_local_templates创建模板
mailchimp_files 工具
list(可按type、folderId、sinceCreatedAt/beforeCreatedAt筛选)、get、upload(name需包含扩展名,fileData为 base64,不带data:前缀)、update(重命名,或使用folderId移动,0表示根目录)、delete,以及只读的list-folders/get-folder;图片上传上限为每张 1 MB,其他文件为 10 MB;不接受.webp/.avifupload和get会返回fullSizeUrl,即用于嵌入营销活动 HTML 的公共 CDN URL;list会额外返回totalFileSizeInBytes
mailchimp_search 工具
scope(members或campaigns)和query;audienceId可缩小成员搜索范围;includeTopN(1–100,默认值为 10)用于限制每个结果数组的条目数- 成员搜索结果以
exact和fuzzy返回,并包含上游的totalExact/totalFuzzy;营销活动搜索结果以matches返回,并包含snippet和totalMatches;结果为空时会附带note
mailchimp_assets 工具
list、info(按relPath查询;返回sha256和任何已缓存的上传文件)、sync(发送前上传尚未缓存的文件;返回uploaded、cached,以及带原因说明的skipped)和clear-cache- 传递给
mailchimp_send_campaign、mailchimp_replicate_campaign或mailchimp_campaignsset-content的内容中,@assets/<path>引用会被上传到 File Manager,并替换为 CDN URL。上传文件按 SHA-256 缓存至<assetsDir>/.mailchimp-cache.json;超出大小限制的文件及目录外的路径会在上传前被拒绝 - 仅在设置了
MAILCHIMP_ASSETS_DIR时列出
mailchimp_local_templates 工具
list、get(源文件及解析后的元数据)、render-preview(name和vars;返回 HTML,不会发送任何内容)和seed-from-mailchimp(将 Mailchimp 模板mailchimpTemplateId写入磁盘,文件名为name)- 模板为
.eta文件,可选用 YAML frontmatter 声明subject、previewText和vars;已声明但未提供的变量会导致渲染失败。营销活动工具可通过content.localTemplate+content.localTemplateVars渲染模板,且不能与html和templateId同时使用。示例模板 - 仅在设置了
MAILCHIMP_TEMPLATES_DIR时列出
mailchimp_playbook 工具
topic:send、post-send-review、deliverability、list-hygiene、onboarding、subscriber-triage或design-campaign;send/list-hygiene/design-campaign需要audienceId,post-send-review需要campaignId,subscriber-triage需要email- 返回根据实时数据定制的 Markdown
instructions、liveState快照,以及带预填输入的nextToolSuggestions;不会执行写入操作
mailchimp://account 资源
- 无参数;返回包含个人资料、套餐、数据中心、订阅者总数和
fetchedAt的application/json - 数据与
mailchimp_account的operation: info相同
mailchimp://audiences/{audienceId} 资源
- 名称、联系信息、统计数据、营销活动默认设置、许可提醒、双重选择加入状态和订阅 URL
audienceId来自mailchimp_audiences的operation: list
mailchimp://campaigns/{campaignId} 资源
- 状态、设置、收件人、跟踪信息和报告摘要
campaignId来自mailchimp_campaigns的operation: list
mailchimp://campaigns/{campaignId}/report 资源
- 已发送邮件数、退信数、打开数、点击数、退订数、滥用举报数和行业统计数据
- 营销活动发送前调用会因验证错误而失败
newsletter_from_source 提示词
- 参数:必填的
source(URL 或自由格式的简报);可选的audienceId和seasonalContext - 返回一条用户消息,其中先调用
mailchimp_playbook(topic: design-campaign),再生成 HTML 草稿,随后通过mailchimp_send_campaign创建草稿、测试并发送
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),并提供结构化日志记录和可选的 OpenTelemetry 跟踪。
Mailchimp 专属功能:
- Marketing API v3 客户端可根据 API 密钥的
-<dc>后缀推导 API 主机和数据中心,并支持重试、进程级并发限制(MAILCHIMP_CONCURRENCY_LIMIT)以及 429 响应后的冷却时间 - 发送关卡:Campaign 默认处于
draft状态;send/schedule需要设置confirmSend: true并提供确认提示词;新建或恢复为subscribed状态的订阅也需要确认;导入默认处于pending状态 - 不执行不可逆删除:移除受众、合并字段或 Campaign,以及永久删除订阅者,需在 Mailchimp 界面中操作;
archive是移除订阅者的最彻底方式 - 本地创作:
@assets/<path>文件会在发送时上传并重写;.eta模板在本地渲染,适用于 Templates API 只读的免费套餐 - 列表操作支持通过
count(最大值为 1000)和offset分页
便于 Agent 使用的输出:
- 说明空结果:当活动动态、受众概览和搜索结果为空时,
note/notes[]会说明是缺少数据还是真正的零结果 - 部分失败:
mailchimp_import_subscribers和mailchimp_segments的batch-update-members会逐行返回成功结果和错误,而不会导致整个批次失败 - 判别式输出:
operation、dimension和mode指明哪些字段已填充;isNew和cancelledByUser报告实际发生的情况 - 类型化错误:每个已声明的原因(
campaign_not_sent、pre_send_checklist_failed、mailchimp_forbidden,等等)都会附带恢复提示,告知调用方下一步该怎么做
开始使用
将以下内容添加到 MCP 客户端配置文件中。有关如何生成 Mailchimp API 密钥,请参阅 docs/api-key.md。
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/mailchimp-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"MAILCHIMP_API_KEY": "your-key-with-dc-suffix-e.g.-us22"
}
}
}
}
或者使用 npx(无需 Bun):
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/mailchimp-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"MAILCHIMP_API_KEY": "your-key-with-dc-suffix-e.g.-us22"
}
}
}
}
或者使用 Docker:
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "MAILCHIMP_API_KEY=your-key-with-dc-suffix-e.g.-us22",
"ghcr.io/cyanheads/mailchimp-mcp-server:latest"
]
}
}
}
要使用 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 MAILCHIMP_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- Mailchimp Marketing API 密钥。其
-dc后缀(例如-us22)标识数据中心,并会在启动时解析。
安装
- 克隆仓库:
git clone https://github.com/cyanheads/mailchimp-mcp-server.git
- 进入目录:
cd mailchimp-mcp-server
- 安装依赖项:
bun install
- 配置环境:
cp .env.example .env
# edit .env and set MAILCHIMP_API_KEY
配置
| 变量 | 说明 | 默认值 |
|---|---|---|
MAILCHIMP_API_KEY | 必填。 Marketing API 密钥,包含 -dc 后缀(例如 abc…-us22)。 | 无 |
MAILCHIMP_BASE_URL | API 基础 URL 覆盖项,用于模拟服务或测试。 | https://{dc}.api.mailchimp.com/3.0 |
MAILCHIMP_TIMEOUT_MS | 每个请求的超时时间,单位为毫秒。 | 60000 |
MAILCHIMP_MAX_RETRIES | 上游临时故障时的重试次数(0–10)。 | 3 |
MAILCHIMP_CONCURRENCY_LIMIT | 整个进程中同时进行的上游请求数上限(1–10)。 | 4 |
MAILCHIMP_ASSETS_DIR | 本地资源目录的绝对路径。启用 mailchimp_assets 以及在营销活动 HTML 中使用 @assets/<path> 上传资源。 | 无 |
MAILCHIMP_TEMPLATES_DIR | 本地模板目录的绝对路径。启用 mailchimp_local_templates 和营销活动工具中的 content.localTemplate。 | 无 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_SESSION_MODE | 会话模式;确认操作需要 stateful,而 stateless 会拒绝启动 HTTP(不影响 stdio)。 | stateful |
MCP_REQUEST_STATE_KEY | 可选的密封密钥,至少 32 字节。确认操作只能使用一次且与单个进程绑定,因此重启或使用其他实例时会再次询问。 | 无 |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <app-root>/logs |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | 追踪和指标的基础 URL。 | 无 |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | OTLP 日志端点;除非设置此项,否则不会导出日志。 | 无 |
LOG_TOOL_FAILURE_PAYLOADS | 记录失败调用的参数和结果,按键名脱敏,并限制在 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认值为 16384)以内。自由格式值中的机密仍会显示。 | false |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
-
监视模式(传输方式由
MCP_TRANSPORT_TYPE指定):bun run dev # stdio (default) MCP_TRANSPORT_TYPE=http bun run dev # http -
构建并运行:
bun run rebuild bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t mailchimp-mcp-server .
docker run --rm -e MAILCHIMP_API_KEY=your-key-us22 -p 3010:3010 mailchimp-mcp-server
Dockerfile 默认使用 HTTP 传输、有状态会话模式,并将日志写入 /var/log/mailchimp-mcp-server。默认会安装 OpenTelemetry 对等依赖;构建时使用 --build-arg OTEL_ENABLED=false 可省略这些依赖。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口:注册工具、资源和提示词,并初始化服务。 |
src/config | 使用 Zod 解析并验证 MAILCHIMP_* 环境变量。 |
src/mcp-server/tools | 工具定义(*.tool.ts)以及用于模板渲染、资源重写和发送确认的共享辅助函数。 |
src/mcp-server/resources | 资源定义(*.resource.ts)。 |
src/mcp-server/prompts | 提示词定义(*.prompt.ts)。 |
src/services/mailchimp | Mailchimp API 客户端:HTTP、请求节流、重试、响应规范化。 |
src/services/assets | 本地资源:发现、哈希、上传缓存、@assets/ 重写。 |
src/services/templates | 本地模板:Eta 渲染、frontmatter 解析、从 Mailchimp 填充模板。 |
templates/ | .eta 模板示例;将 MAILCHIMP_TEMPLATES_DIR 指向此目录即可试用。 |
docs/ | API 密钥指南和电子邮件设计手册。 |
tests/ | 用于配置、服务、工具和提示词的 Vitest 测试套件。 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简而言之:
- 由处理程序抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求范围内的日志 - 通过
src/mcp-server/*/definitions/index.ts中的汇总文件注册新工具和资源 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;切勿伪造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0 — 详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。