关于 SendGrid MCP Server
SendGrid MCP Server 将 SendGrid API v3 接入 MCP 客户端,用于邮件操作和分析,涵盖营销、事务邮件、联系人、模板及账户数据。默认启用只读模式。
主要功能
- 01发送事务邮件
- 02管理营销活动和自动化流程
- 03搜索和更新联系人
- 04管理动态模板与细分群组
- 05分析邮件表现统计
- 06默认启用只读模式
适用场景
- 01发送个性化事务消息
- 02管理营销活动和联系人列表
- 03查看送达与互动分析
- 04将集成限制为只读访问
MCP 相关
该 MCP 服务将 SendGrid API v3 功能作为工具提供给兼容客户端。支持本地 stdio 和远程 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y sendgrid-mcpSENDGRID_API_KEY密钥Your SendGrid API key (must start with 'SG.').READ_ONLYWhen true (the default), blocks all write/delete operations at runtime while keeping every tool registered and visible.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SendGrid MCP 服务
一款 Model Context Protocol(MCP)服务,可全面访问 SendGrid API v3,支持电子邮件营销、事务性邮件操作、动态模板管理和详细分析。包含 154 个工具,涵盖电子邮件管理和效果分析的各个方面。
由一名 SendGrid 工程师独立构建并维护,并非 SendGrid 官方产品。
请参阅 RELEASES.md,了解最新版本的变更内容。
功能
- 营销自动化:创建和管理电子邮件自动化工作流
- 单次发送营销活动:管理一次性电子邮件营销活动,并详细追踪效果
- 联系人管理:对联系人执行完整的增删改查操作,并支持高级搜索和批量操作
- 电子邮件统计与分析:从浏览器、设备、地理位置和电子邮件服务提供商等多个维度分析效果,并提供 13 个月的历史数据
- 动态细分管理:根据复杂的筛选条件创建、更新和删除联系人细分,并自动刷新
- 动态模板管理:创建、管理和管理 HTML 电子邮件模板的版本,并支持使用 Handlebars 进行个性化设置
- 自定义字段管理:定义和管理额外的联系人数据字段,以实现更精细的定向
- 邮件发送:通过 SendGrid 发送事务性邮件,并全面支持个性化设置
- 发件人身份管理:管理经过验证的发件人身份,并追踪身份验证状态
- 抑制列表:管理退信、垃圾邮件举报和退订,以优化送达能力
- 账户设置:访问账户详情并管理配置
- 浏览器集成:快速访问 SendGrid 网页界面,以执行可视化操作
- 只读安全模式:安全操作模式可防止意外修改数据,同时保留完整的分析访问权限
支持的 MCP 客户端
✅ Claude Desktop - 官方桌面应用
✅ Claude Code - 官方命令行工具
✅ Claude 自定义连接器 - 通过 Streamable HTTP(请参阅安装服务)
✅ OpenAI Responses API / Apps SDK - 通过 Streamable HTTP
✅ MCP Market - 托管式一键部署,无需安装(请参阅安装服务)
✅ Cline - VS Code 扩展
✅ Zed Editor - 现代代码编辑器
✅ Continue - VS Code 自动驾驶工具
✅ Codex CLI - 通过 Streamable HTTP
✅ 任何兼容 MCP 的客户端
开始使用
请按顺序完成以下步骤 — 最后,您将安装(或部署)好服务,设置好 SendGrid API 密钥,并连接 MCP 客户端。
无论您最终使用哪种客户端,实际请求路径都如下所示 — 有些客户端会通过 stdio 在本地启动服务,另一些则通过网络使用 Streamable HTTP 访问服务(MCP Market、可自托管),并在此基础上增加客户端身份验证选项:
┌──────────┐
│ Client │
└────┬─────┘
┌──────────────────────┴───────────────────┐
│ │
stdio (local subprocess) HTTP (network)
│ auth: none | token | oauth │
│ │
└──────────────────────┬───────────────────┘
▼
┌────────────────────┐
│ MCP Server │
│ (this repo) │
└─────────┬──────────┘
│ SENDGRID_API_KEY
│ (always required, any transport)
▼
┌────────────────────┐
│ SendGrid API │
└────────────────────┘
无论选择哪种路径,都必须设置 SENDGRID_API_KEY。READ_ONLY=true
(默认值)是 MCP 服务内部的另一道限制 — 请求进入后,它会阻止创建、更新、删除和发送工具,无论请求通过哪个分支到达。完整的可配置项列表,请参阅环境变量。
1. 安装服务
如果客户端会自行启动服务,请本地安装;如果客户端通过网络连接,请选择远程方式。
本地(stdio) — 适用于 Claude Desktop、Claude Code、Cline、Zed、Continue,或任何将服务作为子进程运行的客户端:
npm install -g sendgrid-mcp
这会全局安装 sendgrid-mcp 命令,MCP 客户端会将其作为子进程启动。需要 Node.js 20+。
远程(HTTP) — 无需本地安装;选择一种方式:
MCP Market(托管,无需安装)
MCP Market 会为你部署并托管此服务 — 无需本地安装,也无需在你的机器上管理环境变量。你仍需要一个 SendGrid API 密钥;你将在 MCP Market 中输入密钥,而不是输入到自己的 shell/配置中。
在 MCP Market 的 MCP Servers 页面中,从以下任一来源部署自定义 MCP:
- GitHub — 选择 GitHub 来源,选择 Public 或 Private 仓库,粘贴
仓库 URL(
https://github.com/deyikong/sendgrid-mcp),并选择 服务名称。 - npm — 选择 npm 来源,输入软件包名称(
sendgrid-mcp), 并选择服务名称。

无论选择哪种方式,MCP Market 都会为你构建并运行服务;准备就绪后,它会显示在
MCP Servers 下,状态为 Running。继续前往
配置 MCP 客户端,设置你的
凭据并连接。
自行托管(Streamable HTTP)
自行运行服务,并通过 Streamable HTTP 对外提供,而不是让
客户端在本地启动它 — 适用于 Claude 自定义连接器、OpenAI 的 Responses
API mcp 工具 / Apps SDK,或任何其他远程客户端。
MCP 端点为 POST /mcp;GET /health 会返回供负载均衡器使用的状态文档。
请求以无状态方式处理(无需会话 ID),
这正是托管客户端所期望的方式。
下方的 none/token/oauth 并非连接的替代方式 — 它们是 HTTP 这扇新门上的三种不同门锁,如
上方的请求流程图所示。
快速开始(本地开发)
export SENDGRID_API_KEY="SG.your_api_key_here"
export MCP_TRANSPORT=http
export MCP_AUTH_MODE=token
export MCP_AUTH_TOKEN="$(openssl rand -hex 32)"
sendgrid-mcp
身份验证
将 MCP_AUTH_MODE 设置为以下一种模式:
| 模式 | 适用场景 | 要求 |
|---|---|---|
oauth | 生产环境 / 远程客户端 | MCP_OAUTH_ISSUER、MCP_OAUTH_AUDIENCE |
token | 本地开发、简单的自行托管 | MCP_AUTH_TOKEN(16 个或更多字符) |
none | 仅限环回开发 | — 在公共地址上绑定时会拒绝启动 |
OAuth 模式会使此服务成为 OAuth 2.1 资源服务器。它不会 签发或存储凭据 — 它会根据现有身份提供商(Auth0、Okta、Entra ID、Google、Stytch,……)发布的 JWKS, 验证由该身份提供商签发的访问令牌。
export MCP_AUTH_MODE=oauth
export MCP_OAUTH_ISSUER="https://your-tenant.auth0.com"
export MCP_OAUTH_AUDIENCE="https://mcp.example.com"
export MCP_OAUTH_REQUIRED_SCOPES="sendgrid:read"
export MCP_PUBLIC_URL="https://mcp.example.com"
除上述配置外,还必须设置 SENDGRID_API_KEY(参见入门指南中的图示)
— OAuth 只控制谁可以访问服务,不控制服务
使用什么与 SendGrid 通信。
服务会在 /.well-known/oauth-protected-resource 发布 RFC 9728
受保护资源元数据,以便客户端自动发现你的授权服务器:未经身份验证的
请求会收到一个 401,其 WWW-Authenticate 标头指向该文档,
客户端读取文档后会将用户引导至你的 IdP 登录,并携带
获取的令牌重试。
如果令牌已过期、签名错误,或签发者或受众不符,令牌会被拒绝(401);如果有效令牌缺少必需的作用域,则会返回 403。
设置身份提供方
无论使用哪种提供方,你都需要配置相同的三项内容:颁发者 URL、受众(此 API 资源的稳定标识符),以及客户端将请求的作用域。以下是几个具体的配置指南:
Auth0
- 登录 Auth0 Dashboard,然后前往 Applications → APIs → Create API。
- 设置 Identifier——这是你的受众,例如
https://mcp.example.com。它不需要解析到任何内容,只需确保唯一即可。 - 在 API 的 Permissions 选项卡下,添加服务应要求的作用域,例如
sendgrid:read、sendgrid:write。 - 你的 Issuer URL 是租户域名,显示在 API 的 Settings 选项卡中:
https://YOUR_TENANT.auth0.com/。
export MCP_OAUTH_ISSUER="https://YOUR_TENANT.auth0.com/"
export MCP_OAUTH_AUDIENCE="https://mcp.example.com"
export MCP_OAUTH_REQUIRED_SCOPES="sendgrid:read"
Okta
- 登录 Okta Admin Console,然后前往 Security → API → Authorization Servers。
- 使用
default授权服务器,或创建一个新的授权服务器。其 Issuer URI 显示在该服务器的设置页面顶部,格式如下:https://{yourOktaDomain}/oauth2/{authServerId}。 - 在同一页面中,Audience 字段(默认为
api://default)就是要使用的受众——将其设为专属于此服务的值,例如api://sendgrid-mcp。 - 打开 Scopes 选项卡并添加一个作用域,例如
sendgrid:read。
export MCP_OAUTH_ISSUER="https://YOUR_OKTA_DOMAIN/oauth2/YOUR_AUTH_SERVER_ID"
export MCP_OAUTH_AUDIENCE="api://sendgrid-mcp"
export MCP_OAUTH_REQUIRED_SCOPES="sendgrid:read"
Microsoft Entra ID (Azure AD)
- 在 Azure Portal 中,前往 Microsoft Entra ID → App registrations → New registration,将此 MCP 服务注册为资源。
- 打开新应用的 Expose an API 页面并设置 Application ID URI——这将成为你的受众,例如
api://<client-id>。 - 在同一页面中,点击 Add a scope 定义一个作用域,例如
sendgrid.read。 - 你的 Issuer URL 为
https://login.microsoftonline.com/{tenant-id}/v2.0,其中{tenant-id}是应用 Overview 页中的目录(租户)ID。
export MCP_OAUTH_ISSUER="https://login.microsoftonline.com/YOUR_TENANT_ID/v2.0"
export MCP_OAUTH_AUDIENCE="api://YOUR_CLIENT_ID"
export MCP_OAUTH_REQUIRED_SCOPES="sendgrid.read"
其他提供方(Google Identity Platform、Stytch 等)也遵循相同的模式:找到 OpenID Connect 颁发者(通常发布在 <issuer>/.well-known/openid-configuration),为此服务定义受众/资源标识符,并为其创建作用域。
无论使用哪种提供方,还要将 MCP_PUBLIC_URL 设置为服务可从外部访问的 URL(例如 https://mcp.example.com)——客户端会在 OAuth 发现过程中使用它。
TLS
可以在进程内终止 TLS:
export TLS_KEY_FILE=/etc/ssl/private/mcp.key
export TLS_CERT_FILE=/etc/ssl/certs/mcp.crt
export TLS_CA_FILE=/etc/ssl/certs/chain.pem # optional intermediates
……也可以在代理处终止 TLS,并告知服务信任转发的标头:
export TRUST_PROXY=true
export MCP_PUBLIC_URL="https://mcp.example.com"
默认情况下,TRUST_PROXY 处于关闭状态,因为 X-Forwarded-* 标头可由客户端控制,除非你控制的代理会覆盖它们。在进程内模式下,强制要求最低使用 TLS 1.2。
连接客户端
OpenAI(Responses API):
{
"model": "gpt-5",
"tools": [{
"type": "mcp",
"server_label": "sendgrid",
"server_url": "https://mcp.example.com/mcp",
"authorization": "ACCESS_TOKEN"
}],
"input": "List my SendGrid automations"
}
Claude(自定义连接器): 将 https://mcp.example.com/mcp 添加为自定义连接器。在 oauth 模式下,Claude 会执行发现流程并提示用户登录;在 token 模式下,直接提供 bearer token。
安全
服务器会拒绝在存在可能悄然暴露你的 SendGrid 账户的配置错误时启动,而不会以弱于你预期的模式运行:
- 绑定到非环回地址,但既未启用 TLS,也未设置
TRUST_PROXY MCP_AUTH_MODE=none,但绑定地址不是环回地址MCP_PUBLIC_URL使用http://,且地址不是环回地址- 未设置
MCP_AUTH_TOKEN或其长度不足,或者在oauth模式下未设置签发方和受众 TLS_KEY_FILE和TLS_CERT_FILE只设置了其中一个
此外:
- 保持
READ_ONLY=true,除非你需要写入和发送操作。这是限制影响范围最有效的做法——它决定了泄露的令牌暴露的是分析数据,还是能从你的域名发送邮件。 - 设置
MCP_ALLOWED_HOSTS/MCP_ALLOWED_ORIGINS,以启用 DNS 重绑定保护;对于可从浏览器访问的本地绑定服务,这一点尤为重要。 - 将 SendGrid API 密钥的权限范围限制为此服务所需的权限;该密钥才是每个请求背后的真实凭据。
2. 获取 SendGrid API 密钥
- 前往 SendGrid API Keys
- 点击“Create API Key”
- 选择“Full Access”或指定具体权限
- 复制生成的密钥(以
SG.开头)
3. 配置 MCP 客户端
MCP Market
部署好服务后(参见安装服务), 设置凭据并连接客户端。
设置环境变量
打开已部署的服务 → Variables 标签页 → My Credentials,然后 填写:

| 变量 | 必填 | 说明 |
|---|---|---|
SENDGRID_API_KEY | ✅ | 你的 SendGrid API 密钥(以 SG. 开头) |
MCP_SERVER_NAME | ❌ | 用于识别的服务名称 |
MCP_SERVER_VERSION | ❌ | 服务版本 |
LOG_LEVEL | ❌ | 日志级别(debug、info、warn、error) |
REQUEST_TIMEOUT | ❌ | API 请求超时时间,单位为毫秒 |
READ_ONLY | ❌ | 启用只读模式(true/false) |
每个字段都会单独保存——只有 SENDGRID_API_KEY 是必填项。
连接客户端
在服务页面上点击 + Connect。MCP Market 提供 Claude Desktop、Claude Code、Codex CLI、Cursor、VS Code、Windsurf、Cline、JetBrains、Gemini CLI、Amazon Q、Goose 和 Continue 的一键安装选项——选择你的客户端并按照提示操作。

对于其他客户端,请使用 Connection URL 选项,它会提供一个专属于你部署的 Streamable HTTP 端点。以下示例使用 deyikong/sendgrid-mcp 进行说明——你的端点会使用你自己的用户名和服务名称:
https://link.mcpmarket.com/<your-username>/<your-server-name>/mcp
像配置其他可自托管端点一样进行配置,例如:
# Claude Code
claude mcp add --transport http sendgrid https://link.mcpmarket.com/<your-username>/<your-server-name>/mcp
# Codex CLI
codex mcp add sendgrid --url https://link.mcpmarket.com/<your-username>/<your-server-name>/mcp
MCP Market 负责管理已部署服务的托管、TLS 和可用性;有关账户、账单或部署的问题,请直接联系 MCP Market,而非本代码仓库。
Claude Desktop
支持原生 MCP 的 Claude 官方桌面应用。
配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
配置:
{
"mcpServers": {
"sendgrid": {
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
}
}
可选配置:
{
"mcpServers": {
"sendgrid": {
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "false",
"LOG_LEVEL": "info",
"REQUEST_TIMEOUT": "30000"
}
}
}
}
配置完成后:
- 保存文件
- 重启 Claude Desktop
- SendGrid MCP 服务将在 Claude 中可用
Claude Code (CLI)
支持 MCP 的 Claude 官方命令行界面。
安装:
npm install -g @anthropic-ai/claude-code
配置文件位置:
- 所有平台:
~/.claude/config.json
配置:
{
"mcpServers": {
"sendgrid": {
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
}
}
用法:
# Start Claude Code with SendGrid MCP
claude
# The SendGrid tools will be automatically available
# Ask Claude: "List my SendGrid automations"
Cline (VS Code Extension)
支持 MCP 的热门 VS Code 扩展。
安装:
- 从 VS Code marketplace 安装 Cline 扩展
- 打开 Cline 设置
配置文件:
- 打开 VS Code 设置
- 搜索 "Cline: MCP Settings"
- 编辑 MCP 配置 JSON
配置:
{
"mcpServers": {
"sendgrid": {
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
}
}
Zed Editor
内置 AI 和 MCP 支持的现代代码编辑器。
配置文件位置:
- macOS/Linux:
~/.config/zed/settings.json - Windows:
%APPDATA%/Zed/settings.json
配置:
{
"context_servers": {
"sendgrid-mcp": {
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
}
}
Continue (VS Code Extension)
支持 MCP 的 VS Code 开源自动驾驶助手。
配置文件位置:
- 所有平台:
~/.continue/config.json
配置:
{
"experimental": {
"modelContextProtocolServers": [
{
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
]
}
}
Generic MCP Client
适用于以上未列出的任何兼容 MCP 的客户端:
命令行:
# With environment variables
SENDGRID_API_KEY="SG.your_api_key_here" READ_ONLY="true" sendgrid-mcp
配置模板:
{
"command": "sendgrid-mcp",
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
服务器完全通过环境变量进行配置。SENDGRID_API_KEY 是唯一必需的变量。
| 变量 | 必需 | 描述 | 默认值 |
|---|---|---|---|
SENDGRID_API_KEY | ✅ | 你的 SendGrid API 密钥(以 SG. 开头) | - |
READ_ONLY | ❌ | 启用只读模式(true/false) | true |
MCP_SERVER_NAME | ❌ | 用于标识的服务器名称 | sendgrid-mcp |
MCP_SERVER_VERSION | ❌ | 服务器版本 | 1.0.0 |
LOG_LEVEL | ❌ | 日志级别(debug、info、warn、error) | info |
REQUEST_TIMEOUT | ❌ | API 请求超时时间,单位为毫秒 | 30000 |
READ_ONLY 默认为 true。 在此模式下,所有工具都会注册并显示,但创建、更新、删除或发送操作会在运行时被阻止,并显示明确的错误消息——只有列表、获取、搜索和浏览器链接工具会实际运行。在完成设置期间,这是最安全的默认选项。关于被阻止操作的完整说明,请参阅只读模式;准备好允许写入和发送操作后,将 READ_ONLY=false。
这些变量在 MCP 客户端的配置中设置(作为 env 块)——请参阅配置 MCP 客户端。可自托管的 HTTP 模式有自己的一组变量(传输、身份验证、TLS)——请参阅安装服务器。
只读模式
只读模式
为确保安全,SendGrid MCP 服务默认以只读模式(READ_ONLY=true)运行。所有工具都会注册并可用,但可变更操作会在运行时被阻止,并显示有帮助的错误消息。
只读模式的工作方式
当 READ_ONLY=true(默认值)时:
- 所有工具都会注册并对 AI 助手可见
- 非变更操作正常运行(列表、获取、搜索、打开浏览器链接)
- 变更操作会被阻止,并显示明确的错误消息:
❌ Operation blocked: Server is running in READ_ONLY mode. Set READ_ONLY=false in your environment to enable write operations.
只读模式下安全的操作
当 READ_ONLY=true 时,以下 32 项操作可正常运行:
自动化与营销活动:
list_automations、get_automation、open_automation_creator、open_automation_editorlist_single_sends、get_single_send、open_single_send_creator、open_single_send_stats
联系人、列表与细分:
list_contacts、get_contact、search_contacts、search_contacts_by_emailslist_email_listslist_segments、open_segment_creatorlist_custom_fields
发件人:
list_senders、open_csv_uploader
模板:
list_templates、get_template、get_template_version、open_template_editor
统计信息(均按设计为只读):
get_global_stats、get_stats_overview、get_stats_by_browser、get_stats_by_client_type、get_stats_by_device_type、get_stats_by_mailbox_provider、get_stats_by_country、get_category_stats、get_subuser_stats
实用工具:
get_scopes
只读模式下被阻止的操作
当 READ_ONLY=true 时,以下 26 项操作会被阻止:
update_automation_settings、update_automation_step、delete_automationcreate_contact、update_contact、delete_contactcreate_contact_with_lists、remove_contact_from_listscreate_email_list、update_email_list、delete_email_listcreate_custom_field、update_custom_field、delete_custom_fieldcreate_sender、delete_senderupdate_segment、delete_segmentcreate_template、update_template、delete_templatecreate_template_version、update_template_version、delete_template_versioncreate_html_templatesend_mail
完全访问模式
若要启用创建、更新、删除和发送操作,请在 MCP 客户端的 env 块中设置 READ_ONLY=false:
{
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "false"
}
}
这样即可正常执行所有变更操作,同时保留所有读取操作。
⚠️ 安全提示: 只有在需要写入权限且信任服务器运行环境时,才应关闭只读模式。
该服务公开了 154 个工具,分为 22 个类别。无论是否启用 READ_ONLY 模式,所有工具都会注册 — 默认会阻止哪些工具,请参阅只读模式。
📚 如果要查看可以直接对 Claude 说的自然语言提示词,请参阅 EXAMPLE_PROMPTS.md。 以下示例展示了底层 JSON 工具调用。
工具摘要
| 类别 | 工具数 | 只读 | 可变更 |
|---|---|---|---|
| 营销自动化 | 7 | 4 | 3 |
| 单次发送活动 | 4 | 4 | 0 |
| 联系人 CRUD 操作 | 7 | 4 | 3 |
| 电子邮件列表管理 | 6 | 1 | 5 |
| 细分与自定义字段 | 8 | 3 | 5 |
| 发件人与导入 | 4 | 2 | 2 |
| 动态模板 | 11 | 4 | 7 |
| 邮件发送 | 1 | 0 | 1 |
| 电子邮件统计与分析 | 9 | 9 | 0 |
| 实用工具 | 1 | 1 | 0 |
| 抑制项 | 21 | 10 | 11 |
| 域名身份验证与链接品牌化 | 13 | 5 | 8 |
| 事件与入站解析 Webhook | 12 | 5 | 7 |
| 跟踪设置 | 9 | 5 | 4 |
| 邮件设置 | 11 | 6 | 5 |
| API 密钥(只读) | 2 | 2 | 0 |
| 警报(只读) | 2 | 2 | 0 |
| 团队成员(只读) | 3 | 3 | 0 |
| 专用 IP(只读) | 11 | 11 | 0 |
| 设计库 | 9 | 4 | 5 |
| 电子邮件地址验证 | 1 | 0 | 1 |
| 邮件搜索 | 2 | 2 | 0 |
| 总计 | 154 | 87 | 67 |
API 密钥、警报、团队成员和专用 IP 在此服务中刻意设为只读,而且完全未开放 SSO/证书管理 — 关于原因,请参阅有意不支持的操作。
营销自动化
list_automations- 列出所有营销自动化及其元数据get_automation- 获取特定自动化的详细信息update_automation_settings- 更新自动化级别的设置(名称、状态)update_automation_step- 更新单个步骤的设置(状态、等待时间)delete_automation- 永久删除自动化open_automation_creator- 在浏览器中打开自动化创建器open_automation_editor- 打开特定自动化的编辑器
示例
示例 — 获取自动化详情:
{
"tool": "get_automation",
"arguments": {
"automation_id": "automation_id_here"
}
}
示例 — 暂停整个自动化:
{
"tool": "update_automation_settings",
"arguments": {
"automation_id": "automation_id_here",
"status": "paused"
}
}
示例 — 更新单个步骤(状态、等待时间):
{
"tool": "update_automation_step",
"arguments": {
"automation_id": "automation_id_here",
"step_id": "step_id_here",
"step_status": "active",
"wait_time": 1440
}
}
示例 — 删除自动化:
{
"tool": "delete_automation",
"arguments": {
"automation_id": "automation_id_here"
}
}
单次发送活动
list_single_sends- 列出所有单次发送活动及其元数据get_single_send- 获取单次发送活动的详细内容和设置open_single_send_creator- 在浏览器中打开活动创建器以进行视觉设计open_single_send_stats- 查看详细的活动效果统计数据
示例
示例 — 获取活动内容和设置:
{
"tool": "get_single_send",
"arguments": {
"singlesend_id": "singlesend_id_here"
}
}
list_contacts- 分页并筛选联系人列表get_contact- 获取特定联系人的详细信息create_contact- 创建包含自定义字段的新联系人update_contact- 更新现有联系人的信息和自定义数据delete_contact- 永久删除联系人并清理相关数据search_contacts- 使用高级查询条件搜索联系人search_contacts_by_emails- 按电子邮件地址搜索特定联系人
示例
示例 — 创建新联系人:
{
"tool": "create_contact",
"arguments": {
"contacts": [
{
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Smith"
}
]
}
}
示例 — 按电子邮件搜索联系人:
{
"tool": "search_contacts_by_emails",
"arguments": {
"emails": ["[email protected]", "[email protected]"]
}
}
示例 — 使用查询条件搜索联系人:
{
"tool": "search_contacts",
"arguments": {
"query": "email LIKE '@example.com'",
"page_size": 10
}
}
示例 — 更新联系人:
{
"tool": "update_contact",
"arguments": {
"contacts": [
{
"id": "contact_id_here",
"first_name": "John",
"last_name": "Updated"
}
]
}
}
示例 — 删除联系人:
{
"tool": "delete_contact",
"arguments": {
"contact_ids": ["contact_id_1", "contact_id_2"]
}
}
电子邮件列表管理
list_email_lists- 列出所有电子邮件列表create_email_list- 创建新的电子邮件列表update_email_list- 更新电子邮件列表属性delete_email_list- 删除电子邮件列表create_contact_with_lists- 创建联系人并将其分配到列表remove_contact_from_lists- 将联系人从特定列表中移除
示例
示例 — 列出电子邮件列表:
{
"tool": "list_email_lists",
"arguments": {
"page_size": 100
}
}
示例 — 重命名电子邮件列表:
{
"tool": "update_email_list",
"arguments": {
"list_id": "list_id_here",
"name": "Updated List Name"
}
}
示例 — 从列表中移除联系人:
{
"tool": "remove_contact_from_lists",
"arguments": {
"list_id": "list_id_here",
"contact_ids": ["contact_id_1", "contact_id_2"]
}
}
示例 — 删除电子邮件列表:
{
"tool": "delete_email_list",
"arguments": {
"list_id": "list_id_here"
}
}
细分群组与自定义字段
list_segments- 列出动态细分群组及其父级关系和条件open_segment_creator- 在浏览器中打开细分群组创建器,以可视化方式构建查询update_segment- 更新现有细分群组的名称或查询条件,并实时刷新delete_segment- 删除现有细分群组(不会影响联系人)list_custom_fields- 列出自定义字段定义及其数据类型create_custom_field- 创建新的自定义字段(Text、Number、Date 类型)update_custom_field- 更新现有自定义字段定义delete_custom_field- 删除自定义字段定义并清理相关数据
示例
示例 — 重命名细分群组:
{
"tool": "update_segment",
"arguments": {
"segment_id": "segment_id_here",
"name": "Updated Segment Name"
}
}
示例 — 更新细分群组的查询条件:
{
"tool": "update_segment",
"arguments": {
"segment_id": "segment_id_here",
"query_dsl": "{\"and\": [{\"field\": \"email\", \"value\": \"@example.com\", \"operator\": \"like\"}]}"
}
}
示例 — 删除细分群组:
{
"tool": "delete_segment",
"arguments": {
"segment_id": "segment_id_here"
}
}
示例 — 创建自定义字段:
{
"tool": "create_custom_field",
"arguments": {
"name": "customer_tier",
"field_type": "Text"
}
}
示例 — 更新自定义字段:
{
"tool": "update_custom_field",
"arguments": {
"field_id": "field_id_here",
"name": "customer_level"
}
}
示例 — 删除自定义字段:
{
"tool": "delete_custom_field",
"arguments": {
"field_id": "field_id_here"
}
}
发件人与导入
list_senders- 列出已验证的发件人身份create_sender- 创建新的发件人身份delete_sender- 删除已验证的发件人身份open_csv_uploader- 打开 CSV 上传界面
示例
示例 — 创建发件人身份:
{
"tool": "create_sender",
"arguments": {
"nickname": "Marketing Team",
"from": { "email": "[email protected]", "name": "Your Company" },
"reply_to": { "email": "[email protected]", "name": "Your Company" },
"address": "123 Main St",
"city": "Denver",
"state": "CO",
"zip": "80202",
"country": "United States"
}
}
示例 — 删除发件人身份:
{
"tool": "delete_sender",
"arguments": {
"sender_id": "sender_id_here"
}
}
list_templates- 列出所有动态模板和旧版模板get_template- 获取特定模板的详细信息,包括所有版本create_template- 创建新的动态模板update_template- 更新模板名称和设置delete_template- 删除模板及其所有版本create_template_version- 使用 HTML 内容和设置创建新版本get_template_version- 获取特定模板版本的详细信息update_template_version- 更新版本内容、主题和设置delete_template_version- 删除特定模板版本create_html_template- 一步创建包含 HTML 内容的完整模板(非常适合 AI Agent)open_template_editor- 在浏览器中打开 SendGrid 的可视化模板编辑器
模板支持用于动态内容的 Handlebars 语法({{variable}}、{{#each}}、{{#if}})、内联 CSS 的响应式 HTML、每个模板最多 300 个版本、测试数据预览,以及自动生成纯文本。
示例
示例 — 一步创建完整模板(最适合 AI Agent):
{
"tool": "create_html_template",
"arguments": {
"template_name": "Welcome Email",
"version_name": "Version 1.0",
"subject": "Welcome to {{companyName}}, {{firstName}}!",
"html_content": "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Welcome</title></head><body style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;\"><h1 style=\"color: #333;\">Welcome {{firstName}}!</h1><p>Thank you for joining {{companyName}}. We're excited to have you on board.</p></body></html>",
"test_data": "{\"firstName\":\"John\",\"companyName\":\"Acme Corp\"}"
}
}
示例 — 添加包含 HTML 内容的新版本:
{
"tool": "create_template_version",
"arguments": {
"template_id": "your_template_id",
"name": "Newsletter v1.0",
"subject": "{{month}} Newsletter - {{companyName}}",
"html_content": "<!DOCTYPE html><html><head><meta charset=\"utf-8\"></head><body><h1>{{month}} Newsletter</h1>{{#each articles}}<div><h2>{{title}}</h2><p>{{summary}}</p><a href=\"{{link}}\">Read More</a></div>{{/each}}</body></html>",
"test_data": "{\"month\":\"January\",\"companyName\":\"Acme\",\"articles\":[{\"title\":\"Article 1\",\"summary\":\"Summary here\",\"link\":\"https://example.com\"}]}"
}
}
邮件发送
send_mail- 发送事务性邮件(支持使用动态模板数据的模板)
示例
示例 — 发送简单邮件:
{
"tool": "send_mail",
"arguments": {
"personalizations": [
{
"to": [{"email": "[email protected]", "name": "John Doe"}],
"subject": "Hello from SendGrid MCP!"
}
],
"from": {"email": "[email protected]", "name": "Your Name"},
"content": [
{
"type": "text/plain",
"value": "Hello! This email was sent via SendGrid MCP server."
}
]
}
}
示例 — 使用动态模板发送邮件:
{
"tool": "send_mail",
"arguments": {
"personalizations": [
{
"to": [{"email": "[email protected]", "name": "John Doe"}],
"dynamic_template_data": {
"firstName": "John",
"companyName": "Acme Corp",
"orderNumber": "12345",
"items": [
{"name": "Product A", "price": "29.99"},
{"name": "Product B", "price": "19.99"}
]
}
}
],
"from": {"email": "[email protected]", "name": "Your Company"},
"template_id": "d-1234567890abcdef1234567890abcdef"
}
}
邮件统计与分析
get_global_stats- 获取整体邮件效果指标get_stats_overview- 获取多个维度的综合统计数据get_stats_by_browser- 按浏览器类型细分的统计数据(Chrome、Firefox、Safari 等)get_stats_by_client_type- 按邮件客户端类型细分的统计数据(桌面、移动设备、Webmail)get_stats_by_device_type- 按设备类型细分的统计数据(桌面、移动设备、平板电脑)get_stats_by_mailbox_provider- 按邮箱服务商细分的统计数据(Gmail、Outlook、Yahoo 等)get_stats_by_country- 按国家和州/省细分的统计数据get_category_stats- 特定邮件类别的统计数据(13 个月历史记录)get_subuser_stats- 特定子用户账户的统计数据
跟踪投递率、打开率和点击率;退信率(硬退信/软退信)、垃圾邮件举报和取消订阅;地理位置效果和设备偏好;邮件客户端兼容性和浏览器渲染效果;以及特定服务商的送达能力。
示例
示例 — 全局邮件统计数据:
{
"tool": "get_global_stats",
"arguments": {
"start_date": "2024-01-01",
"end_date": "2024-01-31",
"aggregated_by": "day"
}
}
示例 — 按邮箱服务商统计:
{
"tool": "get_stats_by_mailbox_provider",
"arguments": {
"start_date": "2024-01-01",
"end_date": "2024-01-07",
"aggregated_by": "day",
"mailbox_providers": "gmail.com,outlook.com,yahoo.com"
}
}
示例 — 地理位置效果统计数据:
{
"tool": "get_stats_by_country",
"arguments": {
"start_date": "2024-01-01",
"end_date": "2024-01-31",
"country": "US",
"aggregated_by": "week"
}
}
示例 — 综合统计概览:
{
"tool": "get_stats_overview",
"arguments": {
"start_date": "2024-01-01",
"end_date": "2024-01-07",
"aggregated_by": "day",
"include_subusers": false
}
}
实用工具
get_scopes- 获取可用的 API 权限范围(无需参数)
抑制列表
list_suppression_groups- 列出账户中的所有退订(抑制)组create_suppression_group- 创建新的退订(抑制)组get_suppression_group- 获取特定退订(抑制)组的详细信息update_suppression_group- 更新现有抑制组的名称、描述或默认状态delete_suppression_group- 永久删除退订(抑制)组。此操作无法撤销。list_group_suppressions- 列出已退订特定抑制组的所有电子邮件地址add_group_suppressions- 将一个或多个电子邮件地址添加到特定抑制组的退订列表remove_group_suppression- 从特定抑制组的退订列表中移除单个电子邮件地址。此操作只会重新允许发送归属此组类别的邮件,不会在全局范围内重新订阅。list_global_suppressions- 列出账户级全局退订列表中的电子邮件地址,可按时间范围筛选add_global_suppression- 将收件人添加到账户级全局退订列表中,他们将不再收到此账户发送的所有非事务性邮件get_global_suppression- 检查特定电子邮件地址是否在账户级全局退订列表中delete_global_suppression- 从账户级全局抑制列表中移除电子邮件地址,从而重新订阅非事务性邮件list_bounces- 列出所有退信的电子邮件地址,可按时间范围筛选get_bounce- 获取特定电子邮件地址的退信事件记录delete_bounce- 移除电子邮件地址的退信记录,使该地址可以再次接收邮件list_blocks- 列出当前位于阻止列表中的所有电子邮件地址,可按时间范围筛选delete_block- 从阻止列表中移除电子邮件地址,使该地址可以再次接收邮件list_spam_reports- 列出所有举报邮件为垃圾邮件的电子邮件地址,可按时间范围筛选delete_spam_report- 从垃圾邮件举报列表中移除电子邮件地址,使该地址可以再次接收邮件list_invalid_emails- 列出所有被标记为无效的电子邮件地址,可按时间范围筛选delete_invalid_email- 从无效电子邮件列表中移除电子邮件地址,使该地址可以再次接收邮件
域名身份验证与链接品牌化
list_authenticated_domains- 列出所有配置为发送邮件的已验证(白标)域名get_authenticated_domain- 获取特定已验证域名的详细信息,包括其 DNS 记录create_authenticated_domain- 为通过自定义域名发送邮件设置域名身份验证(SPF/DKIM)update_authenticated_domain- 更新现有已验证域名的自定义 SPF 或默认设置delete_authenticated_domain- 永久删除已验证域名。此操作无法撤销。validate_authenticated_domain- 检查域名的 DNS 记录是否已正确配置身份验证get_default_authenticated_domain- 获取当前设为默认发送域名的已验证域名list_branded_links- 列出所有配置为点击跟踪的品牌化链接(链接白标)get_branded_link- 获取特定品牌化链接的详细信息,包括其 DNS 记录create_branded_link- 设置品牌化链接跟踪(通过发件人自己的域名而非 sendgrid.net 跟踪点击)update_branded_link- 更新现有品牌化链接的默认设置delete_branded_link- 永久删除品牌化链接。此操作无法撤销。validate_branded_link- 检查品牌化链接的 DNS 记录是否已正确配置
事件与入站解析 Webhook
list_event_webhooks- 列出账户上配置的所有事件 Webhook 设置get_event_webhook- 按 ID 获取特定事件 Webhook 的配置create_event_webhook- 创建新的事件 Webhook,将电子邮件事件(已送达、退信、已打开、已点击等)通过 POST 发送到指定 URLupdate_event_webhook- 更新现有事件 Webhook 的配置delete_event_webhook- 永久删除事件 Webhook 配置。此操作无法撤销。test_event_webhook- 向指定的 Webhook URL 发送测试事件负载,以验证其可访问且配置正确list_inbound_parse_settings- 列出账户上配置的所有入站解析 Webhook 设置get_inbound_parse_setting- 获取特定主机名的入站解析 Webhook 配置create_inbound_parse_setting- 配置入站电子邮件解析,使发送到指定主机名的邮件通过 POST 发送到指定 URLupdate_inbound_parse_setting- 更新特定主机名的入站解析 Webhook 配置delete_inbound_parse_setting- 永久删除某个主机名的入站解析 Webhook 配置。此操作无法撤销。get_inbound_parse_stats- 获取指定日期范围内解析的入站电子邮件数量统计信息
跟踪设置
get_tracking_settings- 通过一次调用获取所有跟踪设置(点击、打开、订阅、Google Analytics)get_click_tracking_settings- 获取当前的点击跟踪设置update_click_tracking_settings- 启用或禁用电子邮件中链接的点击跟踪get_google_analytics_settings- 获取当前的 Google Analytics 跟踪设置update_google_analytics_settings- 更新 Google Analytics 跟踪设置,包括 UTM 活动、内容、媒介、来源和词语值get_open_tracking_settings- 获取当前的打开跟踪设置update_open_tracking_settings- 启用或禁用打开跟踪;该功能会插入一个不可见像素,以记录电子邮件何时被打开get_subscription_tracking_settings- 获取当前的订阅跟踪设置update_subscription_tracking_settings- 更新订阅跟踪设置,包括取消订阅链接内容、落地页、URL 和替换标签
邮件设置
get_all_mail_settings- 通过一次调用获取所有邮件设置(地址白名单、退信清理、页脚、转发退信、转发垃圾邮件等)get_address_whitelist_settings- 获取当前的地址白名单邮件设置,该设置用于控制哪些电子邮件地址或域名可绕过所有抑制列表update_address_whitelist_settings- 更新地址白名单设置,用于控制哪些电子邮件地址或域名可绕过所有抑制列表get_bounce_purge_settings- 获取当前的退信清理邮件设置,该设置会在配置的天数后自动清理旧的退信记录update_bounce_purge_settings- 更新退信清理设置,该设置会在配置的天数后自动清理旧的退信记录get_footer_settings- 获取当前的页脚邮件设置,该设置会为每封外发电子邮件添加页脚update_footer_settings- 更新页脚设置,该设置会为每封外发电子邮件添加页脚get_forward_bounce_settings- 获取当前的转发退信邮件设置,该设置会将退信通知转发到指定的电子邮件地址update_forward_bounce_settings- 更新转发退信设置,该设置会将退信通知转发到指定的电子邮件地址get_forward_spam_settings- 获取当前的转发垃圾邮件设置,该设置会将垃圾邮件报告通知转发到指定的电子邮件地址update_forward_spam_settings- 更新转发垃圾邮件设置,该设置会将垃圾邮件报告通知转发到指定的电子邮件地址
API 密钥(只读)
list_api_keys- 列出账户中的所有 API 密钥(仅名称和 ID,不包括密钥值)get_api_key- 获取特定 API 密钥的详情,包括其作用范围
警报(只读)
list_alerts- 列出账户中配置的所有用量/统计警报get_alert- 获取特定警报的详情
团队成员(只读)
list_teammates- 列出账户中的所有团队成员(用户)get_teammate- 获取特定团队成员的详情,包括其权限范围list_pending_teammates- 列出尚未接受的待处理团队成员邀请
专用 IP(只读)
list_ip_addresses- 列出分配给账户的所有 IP 地址get_ip_address- 获取特定 IP 地址的详情,包括其预热状态和分配的子用户list_assigned_ips- 列出当前分配给子用户的所有 IP 地址list_ip_pools- 列出账户中的所有 IP 池get_ip_pool- 获取特定 IP 池的详情,包括其中包含的 IP 地址get_remaining_ips- 获取可供购买的额外专用 IP 地址数量及其费用list_ip_warmups- 列出当前处于预热流程中的所有 IP 地址get_ip_warmup_status- 获取特定 IP 地址的预热状态list_allowed_ips- 列出获准通过 API/UI 访问账户的 IP 地址(访问允许列表)get_allowed_ip- 获取访问允许列表中特定条目的详情list_access_activity- 列出近期的账户访问尝试(成功和被拦截的登录/API 调用)
设计库
list_designs- 列出设计库中的所有自定义电子邮件设计create_design- 使用原始 HTML 在设计库中创建新的自定义电子邮件设计get_design- 获取设计库中特定设计的详情update_design- 更新设计库中现有设计的内容或元数据delete_design- 从设计库中永久删除自定义设计。此操作无法撤销。duplicate_design- 在设计库中创建现有设计的副本list_prebuilt_designs- 列出 SendGrid 内置的预制设计模板get_prebuilt_design- 获取 SendGrid 内置的某个预制设计的详情duplicate_prebuilt_design- 创建 SendGrid 内置预制设计的可编辑副本
电子邮件地址验证
validate_email- 使用 SendGrid 的电子邮件地址验证 API 检查电子邮件地址是否有效且可能成功送达(每次调用都会消耗一个计费验证额度)
消息搜索
search_email_activity- 使用 SendGrid 的 SGQL 筛选语法搜索已发送邮件的活动(例如按收件人、状态或主题搜索)——可用于排查特定邮件未能送达的原因get_message_details- 根据邮件 ID 获取单封已发送邮件的完整送达事件历史记录和详情
可用资源
sendgrid://automations- 营销自动化数据sendgrid://singlesends- 单次发送营销活动数据sendgrid://lists- 电子邮件列表数据sendgrid://contacts- 联系人分群数据sendgrid://suppressions- 抑制列表(退信、垃圾邮件等)sendgrid://account- 账户资料信息sendgrid://stats- 全局电子邮件统计数据和性能指标(30 天概览)sendgrid://stats/browsers- 按浏览器类型划分的电子邮件统计数据(7 天数据)sendgrid://stats/devices- 按设备类型划分的电子邮件统计数据(7 天数据)sendgrid://stats/geography- 按地理位置划分的电子邮件统计数据(7 天数据)sendgrid://stats/providers- 按邮箱服务提供商划分的电子邮件统计数据(7 天数据)
可用提示词
sendgrid_automation_help- 获取营销自动化方面的帮助sendgrid_campaign_help- 获取单次发送营销活动方面的帮助sendgrid_contacts_help- 获取全面联系人管理方面的帮助sendgrid_list_management_help- 获取电子邮件列表 CRUD 操作方面的帮助sendgrid_update_list_help- 获取更新/重命名电子邮件列表方面的帮助sendgrid_contact_crud_help- 获取联系人创建/读取/更新/删除操作方面的帮助sendgrid_custom_fields_help- 获取自定义字段定义管理方面的帮助sendgrid_segment_management_help- 获取动态联系人细分管理方面的帮助sendgrid_sender_management_help- 获取发件人身份管理方面的帮助sendgrid_templates_help- 获取创建和管理动态电子邮件模板方面的帮助sendgrid_suppressions_help- 获取抑制列表方面的帮助sendgrid_settings_help- 获取账户设置方面的帮助sendgrid_mail_send_help- 获取发送电子邮件方面的帮助sendgrid_stats_help- 获取分析电子邮件效果和统计数据方面的帮助
开发与贡献
本节面向希望修改服务或参与开发的开发者。
开发环境设置、项目结构和贡献指南
前置条件
- Node.js 20+ 和 npm
- 拥有 API 密钥的 SendGrid 账户
- Git
开发环境设置
# Clone the repository
git clone https://github.com/deyikong/sendgrid-mcp.git
cd sendgrid-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Link for local development
npm link
# Test the local build
sendgrid-mcp
在 MCP 客户端中使用本地构建版本(而不是通过 npm 安装的二进制文件):
{
"mcpServers": {
"sendgrid": {
"command": "node",
"args": ["/absolute/path/to/sendgrid-mcp/build/index.js"],
"env": {
"SENDGRID_API_KEY": "SG.your_api_key_here",
"READ_ONLY": "true"
}
}
}
}
项目结构
src/
├── index.ts # Main entry point
├── shared/ # Shared utilities
│ ├── auth.ts # Authentication
│ ├── api.ts # SendGrid API client
│ ├── env.ts # Environment validation
│ └── types.ts # Shared types
├── tools/ # Tool definitions
│ ├── automations.ts # Automation tools (7 tools)
│ ├── campaigns.ts # Campaign tools (4 tools)
│ ├── contacts.ts # Contact, list, segment & sender tools (25 tools)
│ ├── mail.ts # Mail sending tools (1 tool)
│ ├── misc.ts # Miscellaneous tools (1 tool)
│ ├── stats.ts # Statistics tools (9 tools)
│ └── templates.ts # Template tools (11 tools)
├── resources/ # Resource definitions
│ └── sendgrid.ts # MCP resources
└── prompts/ # Prompt definitions
└── help.ts # Help prompts
添加新工具
- 在
src/tools/中的相应文件里添加工具定义 - 按照现有模式添加配置和处理程序
- 从
src/tools/index.ts导出 - 更新 README.md,添加新工具的文档
- 运行
npm run build进行编译
可用脚本
npm run build- 将 TypeScript 编译为 JavaScriptnpm start- 运行编译后的服务npm test- 构建并运行测试套件
测试更改
# Build the project
npm run build
# Test with environment variables
SENDGRID_API_KEY="SG.your_key" READ_ONLY="true" node build/index.js
如需手动验证真实客户端能否通过各种 HTTP 身份验证模式 (令牌、无身份验证、TLS、OAuth)连接,而不只是运行自动化测试套件,请参阅 TESTING.md。
创建发布版本
仅限维护者:
-
更新
package.json中的版本:npm version patch # or minor, major -
推送更改和标签:
git push && git push --tags -
创建 GitHub 发布版本——这会通过 GitHub Actions 触发自动发布到 npm
发布流程
- 自动化:创建发布版本时,GitHub Actions 会将软件包发布到 npm
- 来源证明:所有软件包都包含用于安全验证的来源证明
- 版本控制:遵循语义化版本控制(semver)
- 软件包:npm 上的
sendgrid-mcp——使用npm update -g sendgrid-mcp更新
故障排除
常见问题
6 个常见问题及解决方法
1. 找不到服务 / 找不到命令
Error: sendgrid-mcp: command not found
解决方法:
- 确认已全局安装:
npm install -g sendgrid-mcp - 检查 npm 全局 bin 目录是否在 PATH 中:
npm config get prefix - 尝试重新安装:
npm uninstall -g sendgrid-mcp && npm install -g sendgrid-mcp
2. API 密钥无效
Error: SENDGRID_API_KEY must start with 'SG.'
解决方法:
- 确认 API 密钥以
SG.开头 - 确认已从 SendGrid 复制完整密钥
- 检查配置中是否有多余的空格或引号
- 在 SendGrid API Keys 生成新的 API 密钥
3. 权限错误
Error: 403 Forbidden
解决方法:
- 您的 API 密钥可能没有足够的权限
- 创建一个具有“Full Access”或所需作用域的新密钥
- 确认该密钥尚未被撤销或过期
4. 只读模式阻止操作
❌ Operation blocked: Server is running in READ_ONLY mode
解决方法:
- 这是有意设置的安全保护
- 若要启用写入操作,请在 MCP 客户端配置中设置
READ_ONLY: "false" - 示例:
{ "env": { "SENDGRID_API_KEY": "SG.your_key", "READ_ONLY": "false" } }
5. MCP 客户端未检测到服务
解决方法:
- 确认特定客户端的配置文件位置
- 确保 JSON 语法有效(没有尾随逗号,使用正确的引号)
- 更改配置后重启 MCP 客户端
- 检查客户端日志中的具体错误消息
6. 连接超时
Error: Request timeout
解决方法:
- 检查网络连接
- 在配置中增加超时时间:
{ "env": { "REQUEST_TIMEOUT": "60000" } } - 确认可以访问 SendGrid API(未被防火墙/代理阻止)
获取帮助
- 内置帮助:使用 MCP 客户端中的帮助提示词(例如,询问 Claude:“help with sendgrid automations”)
- SendGrid API:官方 API 文档
- MCP 协议:Model Context Protocol 文档
- 问题反馈:在 GitHub 仓库报告错误
调试模式
设置 LOG_LEVEL 以启用详细日志记录:
{
"env": {
"SENDGRID_API_KEY": "SG.your_key",
"LOG_LEVEL": "debug"
}
}
这将提供有关 API 请求和响应的详细信息。
安全
发现漏洞?请私下报告,而不要创建公开问题 — 请参阅 SECURITY.md。
有意不支持的操作
除了 READ_ONLY 模式在运行时会阻止的操作外,此服务还刻意省略了少数 SendGrid API 功能。这些并非有待日后填补的缺口,而是因为允许大模型自主调用这些功能,会带来波及整个账户的风险,而仅靠 READ_ONLY 开关无法缓解(操作员为了合法的营销自动化写入而以 READ_ONLY=false 运行时,也不应仅因一次被提示词注入的工具调用,就面临失去账户访问权限或耗尽 API 配额的风险):
- 创建、轮换和删除 API 密钥——仅开放
list_api_keys/get_api_key。创建或删除 API 密钥是提示词注入的典型目标:Agent 处理的恶意网页或电子邮件可能试图诱骗它创建新密钥并将其泄露。 - 邀请队友、更改权限和移除队友——仅开放
list_teammates/get_teammate/list_pending_teammates。添加、移除或重新设置队友权限属于账户访问控制,存在与 API 密钥相同的注入风险。 - 购买专用 IP、控制预热以及更改访问允许列表——仅开放读取/列出工具。专用 IP 会产生实际费用,并影响整个账户的邮件送达基础设施;访问允许列表配置错误则可能完全阻断合法的 API 访问。
- SSO 和证书管理——完全不开放任何相关功能。SSO 配置错误可能导致整个组织无法登录,而且聊天助手基本没有任何正当理由需要管理这些功能。
如果特定自动化确实需要这些功能,请直接使用 SendGrid 控制面板或 API,而不是要求此服务添加这些功能——这是刻意设定的设计边界,并非疏忽。
许可证
本项目采用 ISC 许可证。
贡献
- Fork 此仓库
- 创建功能分支
- 进行更改
- 彻底测试
- 提交 pull request
支持
如遇到以下相关问题:
- SendGrid API:请查阅 SendGrid 文档
- MCP 协议:请查阅 Model Context Protocol
- 此服务:请在此仓库中提交 issue
反馈
我在 SendGrid 工作,并维护此项目。欢迎提交反馈、错误报告和功能请求——请 提交 issue 或在此仓库中发起讨论。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。