Skip to main content
Glama

SendGrid MCP Server

by deyikong
sendgrid.ts8.69 kB
import { makeRequest } from "../shared/api.js"; export const sendgridResources = { "sendgrid://automations": { config: { name: "Marketing Automations", description: "List and manage SendGrid marketing automations", mimeType: "application/json", }, handler: async () => { const automations = await makeRequest("https://api.sendgrid.com/v3/marketing/automations?offset=0&limit=50"); return { contents: [ { uri: "sendgrid://automations", mimeType: "application/json", text: JSON.stringify(automations, null, 2), }, ], }; }, }, "sendgrid://singlesends": { config: { name: "Single Sends", description: "List and manage SendGrid single send campaigns", mimeType: "application/json", }, handler: async () => { const singleSends = await makeRequest("https://api.sendgrid.com/v3/marketing/singlesends/search?page_size=50"); return { contents: [ { uri: "sendgrid://singlesends", mimeType: "application/json", text: JSON.stringify(singleSends, null, 2), }, ], }; }, }, "sendgrid://lists": { config: { name: "Email Lists", description: "Manage email lists and segments", mimeType: "application/json", }, handler: async () => { const lists = await makeRequest("https://api.sendgrid.com/v3/marketing/lists?page_size=1000"); return { contents: [ { uri: "sendgrid://lists", mimeType: "application/json", text: JSON.stringify(lists, null, 2), }, ], }; }, }, "sendgrid://contacts": { config: { name: "Contacts", description: "Manage marketing contacts", mimeType: "application/json", }, handler: async () => { const segments = await makeRequest("https://api.sendgrid.com/v3/marketing/segments"); return { contents: [ { uri: "sendgrid://contacts", mimeType: "application/json", text: JSON.stringify(segments, null, 2), }, ], }; }, }, "sendgrid://suppressions": { config: { name: "Suppressions", description: "View suppression lists (bounces, spam reports, unsubscribes)", mimeType: "application/json", }, handler: async () => { const [bounces, spamReports, blocks, invalidEmails, globalUnsubscribes] = await Promise.all([ makeRequest("https://api.sendgrid.com/v3/suppression/bounces?offset=0&limit=50"), makeRequest("https://api.sendgrid.com/v3/suppression/spam_reports?offset=0&limit=50"), makeRequest("https://api.sendgrid.com/v3/suppression/blocks?offset=0&limit=50"), makeRequest("https://api.sendgrid.com/v3/suppression/invalid_emails?offset=0&limit=50"), makeRequest("https://api.sendgrid.com/v3/suppression/unsubscribes?offset=0&limit=50"), ]); return { contents: [ { uri: "sendgrid://suppressions", mimeType: "application/json", text: JSON.stringify({ bounces, spamReports, blocks, invalidEmails, globalUnsubscribes }, null, 2), }, ], }; }, }, "sendgrid://account": { config: { name: "Account Settings", description: "Account profile and settings information", mimeType: "application/json", }, handler: async () => { const account = await makeRequest("https://api.sendgrid.com/v3/account/profile_v2"); return { contents: [ { uri: "sendgrid://account", mimeType: "application/json", text: JSON.stringify(account, null, 2), }, ], }; }, }, "sendgrid://stats": { config: { name: "Email Statistics", description: "Global email statistics and performance metrics", mimeType: "application/json", }, handler: async () => { const endDate = new Date().toISOString().split('T')[0]; const startDate = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; // 30 days ago const [globalStats, browserStats, geoStats, providerStats] = await Promise.all([ makeRequest(`https://api.sendgrid.com/v3/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`), makeRequest(`https://api.sendgrid.com/v3/browsers/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`), makeRequest(`https://api.sendgrid.com/v3/geo/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`), makeRequest(`https://api.sendgrid.com/v3/mailbox_providers/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`) ]); const statsOverview = { period: { start_date: startDate, end_date: endDate }, global_stats: globalStats, browser_stats: browserStats, geographic_stats: geoStats, mailbox_provider_stats: providerStats }; return { contents: [ { uri: "sendgrid://stats", mimeType: "application/json", text: JSON.stringify(statsOverview, null, 2), }, ], }; }, }, "sendgrid://stats/browsers": { config: { name: "Email Statistics by Browser", description: "Email performance metrics broken down by browser type", mimeType: "application/json", }, handler: async () => { const endDate = new Date().toISOString().split('T')[0]; const startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; // 7 days ago const browserStats = await makeRequest(`https://api.sendgrid.com/v3/browsers/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`); return { contents: [ { uri: "sendgrid://stats/browsers", mimeType: "application/json", text: JSON.stringify(browserStats, null, 2), }, ], }; }, }, "sendgrid://stats/devices": { config: { name: "Email Statistics by Device Type", description: "Email performance metrics broken down by device type (desktop, mobile, tablet)", mimeType: "application/json", }, handler: async () => { const endDate = new Date().toISOString().split('T')[0]; const startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; // 7 days ago const deviceStats = await makeRequest(`https://api.sendgrid.com/v3/clients/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`); return { contents: [ { uri: "sendgrid://stats/devices", mimeType: "application/json", text: JSON.stringify(deviceStats, null, 2), }, ], }; }, }, "sendgrid://stats/geography": { config: { name: "Email Statistics by Geography", description: "Email performance metrics broken down by country and region", mimeType: "application/json", }, handler: async () => { const endDate = new Date().toISOString().split('T')[0]; const startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; // 7 days ago const geoStats = await makeRequest(`https://api.sendgrid.com/v3/geo/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`); return { contents: [ { uri: "sendgrid://stats/geography", mimeType: "application/json", text: JSON.stringify(geoStats, null, 2), }, ], }; }, }, "sendgrid://stats/providers": { config: { name: "Email Statistics by Mailbox Provider", description: "Email performance metrics broken down by mailbox provider (Gmail, Outlook, Yahoo, etc.)", mimeType: "application/json", }, handler: async () => { const endDate = new Date().toISOString().split('T')[0]; const startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; // 7 days ago const providerStats = await makeRequest(`https://api.sendgrid.com/v3/mailbox_providers/stats?start_date=${startDate}&end_date=${endDate}&aggregated_by=day`); return { contents: [ { uri: "sendgrid://stats/providers", mimeType: "application/json", text: JSON.stringify(providerStats, null, 2), }, ], }; }, }, };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deyikong/sendgrid-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server