SendGrid MCP Server

SendGrid MCP Server

Manages SendGrid email workflows including design library, transactional templates, marketing contacts and lists, single sends, and direct email sends via the SendGrid v3 API.

Category
Visit Server

README

SendGrid MCP Server

CI

An MCP stdio server for managing SendGrid email workflows from Codex and other MCP clients.

It supports:

  • Design Library assets
  • Dynamic transactional templates and versions
  • Marketing contacts and contact lists
  • Single Sends
  • Direct email sends
  • Stats, email validation, verified senders, and suppression groups

The server uses SendGrid v3 APIs only. It never hardcodes API keys; provide SENDGRID_API_KEY through the environment.

Install

Requires Node.js 24 or newer.

git clone https://github.com/coopersully/sendgrid-mcp.git
cd sendgrid-mcp
npm install
npm run build

Codex Configuration

Add the server to ~/.codex/config.toml:

[mcp_servers.sendgrid]
command = "node"
args = ["/absolute/path/to/sendgrid-mcp/build/index.js"]
env = { SENDGRID_API_KEY = "SG.your-api-key" }

Prefer setting the key in your local environment or secret store instead of writing it into a shared file.

Recommended auto-approval policy: approve read-only tools only. Require review for tools that send email, mutate contacts, update templates/designs, or delete anything.

Read-only tools that are usually safe to auto-approve:

[
  "list_contacts",
  "list_contact_lists",
  "get_contacts_by_list",
  "get_contacts_by_emails",
  "get_contact_by_id",
  "get_total_contact_count",
  "get_contact_list",
  "get_list_contact_count",
  "list_custom_fields",
  "list_segments",
  "list_templates",
  "get_template",
  "get_template_version",
  "list_designs",
  "get_design",
  "list_pre_built_designs",
  "get_pre_built_design",
  "list_single_sends",
  "get_single_send",
  "search_single_sends",
  "get_single_send_schedule",
  "list_single_send_categories",
  "list_single_send_stats",
  "get_single_send_stats",
  "list_verified_senders",
  "list_suppression_groups",
  "list_group_suppressions",
  "list_global_suppressions",
  "list_bounces",
  "list_blocks",
  "list_invalid_emails",
  "list_spam_reports",
  "list_marketing_senders",
  "get_marketing_sender",
  "get_stats",
  "validate_email"
]

Tool Groups

Design Library

Tool Purpose Mutates
list_designs List account designs with optional page_size, page_token, and summary. Returns pagination metadata when SendGrid provides it. No
get_design Retrieve a design, including editable content fields returned by SendGrid. No
create_design Create a design from name, subject, HTML/plain content, editor, categories, and plain-text generation options. Yes
update_design Patch an existing design. Requires at least one editable field. Yes
duplicate_design Copy an existing account design. Yes
delete_design Permanently delete a design. Requires confirm_delete: true. Yes
list_pre_built_designs List SendGrid pre-built designs. No
get_pre_built_design Retrieve a pre-built design. No
duplicate_pre_built_design Copy a pre-built design into the account. Yes

Dynamic Templates

Tool Purpose Mutates
list_templates List dynamic transactional templates. No
get_template Retrieve a template and its versions. No
create_template Create a dynamic template and an initial active version. Yes
update_template_name Rename a template. Yes
duplicate_template Copy a template using SendGrid's native duplicate endpoint. Yes
delete_template Permanently delete a template. Requires confirm_delete: true. Yes
get_template_version Retrieve one version's content and active state. No
create_template_version Create a new version. Defaults to inactive with active: 0. Yes
activate_template_version Activate an existing version for future sends. Yes
update_template_version Directly patch a version. Prefer creating a new version for reviewable edits. Yes
delete_template_version Permanently delete a version. Requires confirm_delete: true. Yes

Safe editing workflow:

  1. Call get_template.
  2. Call get_template_version for the active version.
  3. Call create_template_version with edited content and leave active omitted or set to 0.
  4. Inspect the returned version.
  5. Call activate_template_version only after approval.

Contacts and Lists

Tool Purpose Mutates
list_contacts List marketing contacts. No
add_contact Upsert one contact. Yes
delete_contacts Permanently delete contacts by email. Requires confirm_delete: true. Yes
get_contacts_by_emails Retrieve contacts by email addresses. No
get_contact_by_id Retrieve one contact by SendGrid contact ID. No
get_total_contact_count Retrieve total marketing contact count. No
list_contact_lists List contact lists. No
get_contact_list Retrieve one contact list by ID. No
create_contact_list Create a list. Yes
update_contact_list Rename a contact list. Yes
delete_list Delete a list. Requires confirm_delete: true. Yes
get_list_contact_count Retrieve contact count for one list. No
get_contacts_by_list List contacts in a list. No
add_contacts_to_list Add emails to a list. Yes
remove_contacts_from_list Remove emails from a list without deleting contacts. Yes

Custom Fields and Segments

Tool Purpose Mutates
list_custom_fields List marketing contact custom field definitions. No
create_custom_field Create a custom field definition. Yes
update_custom_field Rename a custom field definition. Yes
delete_custom_field Delete a custom field definition. Requires confirm_delete: true. Yes
list_segments List Segments v2 segments. No
create_segment Create a segment from name and query_dsl. Yes
get_segment Retrieve one segment. No
update_segment Update a segment name or query DSL. Yes
refresh_segment Refresh a segment. Yes
delete_segment Delete a segment. Requires confirm_delete: true. Yes

Sending

Tool Purpose Mutates
send_email Send one email through SendGrid Mail Send. Yes
send_to_list Create and immediately schedule a Single Send to lists or segments. Requires either suppression_group_id or custom_unsubscribe_url. Yes
create_single_send Create a Single Send draft without scheduling it. Yes
update_single_send Patch a Single Send draft. Yes
delete_single_send Delete a Single Send. Requires confirm_delete: true. Yes
duplicate_single_send Duplicate a Single Send. Yes
search_single_sends Search Single Sends with SendGrid query syntax. No
schedule_single_send Schedule an existing Single Send for now or a future timestamp. Yes
get_single_send_schedule Retrieve schedule information for a Single Send. No
cancel_single_send_schedule Cancel a Single Send schedule without deleting the draft. Yes
list_single_send_categories List Single Send categories. No
list_single_send_stats Retrieve Single Sends stats. No
get_single_send_stats Retrieve stats for one Single Send. No
list_single_sends List Single Sends. No
get_single_send Retrieve one Single Send. No

Suppressions, Senders, Stats, and Validation

Tool Purpose Mutates
list_verified_senders List verified sender identities. No
list_suppression_groups List unsubscribe groups. No
list_group_suppressions List suppressed addresses in a suppression group. No
add_group_suppressions Add addresses to a suppression group. Yes
delete_group_suppression Remove an address from a suppression group. Requires confirm_delete: true. Yes
list_global_suppressions List global suppressions. No
add_global_suppressions Add addresses to global suppressions. Yes
delete_global_suppression Remove an address from global suppressions. Requires confirm_delete: true. Yes
list_bounces List bounce suppressions. No
list_blocks List block suppressions. No
list_invalid_emails List invalid email suppressions. No
list_spam_reports List spam report suppressions. No
list_marketing_senders List Marketing sender identities. No
get_marketing_sender Retrieve one Marketing sender identity. No
create_marketing_sender Create a Marketing sender identity. Yes
update_marketing_sender Update a Marketing sender identity. Yes
delete_marketing_sender Delete a Marketing sender identity. Requires confirm_delete: true. Yes
resend_marketing_sender_verification Resend a sender verification email. Yes
get_stats Retrieve email stats for start_date, optional end_date, and optional aggregation. No
validate_email Validate one email address. No

Safety Behavior

  • Tool schemas are closed with additionalProperties: false.
  • Tool arguments are validated before SendGrid is called.
  • Empty strings, wrong primitive types, empty arrays, unexpected arguments, and missing required fields are rejected locally.
  • Destructive delete tools require confirm_delete: true.
  • Template content edits are safe by default through create_template_version, which creates inactive versions unless active: 1 is explicitly provided.
  • Server error logging avoids dumping raw error objects to stderr.

Development

npm ci
npm run check

npm run check runs formatting, ESLint, TypeScript type checks, Vitest coverage, build, and npm audit.

Tests use Vitest with mocked SendGrid clients. They do not make live API calls.

Useful commands:

npm run format
npm run lint
npm run typecheck
npm run test:coverage
npm run watch
npm run inspector

CI runs the same validation gates on Node.js 24 and 26.

Architecture and code standards live in docs/ARCHITECTURE.md.

Notes

  • The API key must have the SendGrid permissions required for the tools you use.
  • Sender addresses must be verified before sending.
  • Bulk sends must include either a suppression group or custom unsubscribe URL.
  • SendGrid Marketing API changes can be eventually consistent; recently changed contacts and lists may not appear immediately.
  • Use least-privilege API keys when possible, especially for agents that only need template/design management.

References

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured