Skip to main content
Glama

SendLayer MCP Server

This MCP server exposes tools for sending email and managing SendLayer webhooks/events using the SendLayer Node.js SDK.

Tools

  • send-email: Send a message (plain text or HTML), with CC/BCC, reply-to, tags, headers, and attachments.

  • get-events: Query events with optional filters.

  • list-webhooks: List registered webhooks.

  • create-webhook: Create a webhook.

  • delete-webhook: Delete a webhook by ID.

As an example, you could use this to run local scripts, chat with Claude, or process data and send the results to yourself or your team.

Built with:

Features

  • Send plain text and HTML emails

  • Send emails with attachment

  • Add CC and BCC recipients

  • Customizable sender email (requires verification)

  • Creating and managing webhooks

  • Viewing email events

Demo

Add video demo

Setup

Currently, you must build the project locally to use this MCP server. Then add the server in Cursor or Claude Desktop to use it in any Cursor or Claude Desktop chat.

  1. Clone this project locally.

git clone https://github.com/sendlayer/mcp-send-email.git
  1. Build the project

npm install
npm run build
  1. Setup SendLayer

Create a free SendLayer account and Create an API Key. Before sending emails, you'll also need to verify your sending domain.

Connecting the MCP Server to Your LLM

Here's how to connect the MCP server to a client.

Cursor

  1. Open Cursor Settings.

Open the command palette (cmd+shift+p on macOS or ctrl+shift+p on Windows) and choose "Cursor Settings".

  1. Add the MCP server

Select Tools & MCP from the left sidebar and click New MCP server.

Add the following config:

{
  "mcpServers": {
    "sendlayer": {
      "type": "command",
      "command": "node",
      "args": ["ABSOLUTE_PATH_TO_SENDLAYER_MCP_PROJECT/build/index.js",
      "--key=YOUR_SENDLAYER_API_KEY"
      ]
    }
  }
}

You can get the absolute path to your build script by right-clicking on the /build/index.js file in your code editor and selecting Copy Path.

Supported Arguments

  • --key: Your SendLayer API key (required)

  • --sender: Your sender email address from a verified domain (optional)

Note: If you don't provide a sender email address, the MCP server will ask you to provide one each time you call the tool.

  1. Test the sending

Now you can test out sending emails using the command send an email to recipient@example.com.

  • You can specify the subject and email content or let the AI model generate one for you.

  • Tell cursor to "send this as an email" in the chat (make sure cursor is in Agent mode by selecting "Agent" on lower left side dropdown).

Note: We've created an example email template in the example.txt file. You can customize it for your specific usecase.

Claude Desktop

  1. Open Claude's Developer config file

Open Claude Desktop settings and navigate to the Developer tab. Click Edit Config and open the file in a code editor.

  1. Add the MCP server

Add the following config:

{
  "mcpServers": {
    "sendlayer": {
      "command": "node",
      "args": [
        "ABSOLUTE_PATH_TO_SENDLAYER_MCP_PROJECT/build/index.js"
      ],
      "env": {
        "SENDLAYER_API_KEY": "YOUR_SENDLAYER_API_KEY",
      }
    }
  }
}

Note: You can get the absolute path to your build script by right-clicking on the /build/index.js file in your IDE and selecting Copy Path.

Possible environment variables

  • SENDLAYER_API_KEY: Your SendLayer API key (required)

  • SENDER_EMAIL_ADDRESS: Your sender email address from a verified domain (optional)

If you don't provide a sender email address, the MCP server will ask you to provide one each time you call the tool.

  1. Test the sending

Restart Claude Desktop. Verify that the sendlayer-mcp tool is available in the Claude developer settings.

Chat with Claude and tell it to send you an email using the sendlayer-mcp tool.

Available Tools

5 tools
create-webhookD

Create a webhook

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
eventYesbounce|click|open|unsubscribe|complaint|delivery

TDQS

D1.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action ('create') without explaining what happens after creation (e.g., whether it returns an ID, how webhooks are triggered, authentication needs, rate limits, or error handling). This leaves critical behavioral traits undocumented for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence, 'Create a webhook', which is front-loaded and wastes no words. However, this conciseness comes at the cost of under-specification, but per the scoring rules, it earns full marks for brevity and structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a webhook creation tool (a mutation with no annotations, no output schema, and incomplete parameter documentation), the description is severely inadequate. It doesn't cover what the tool returns, how to handle the created webhook, or integration with sibling tools. The lack of behavioral and parameter details makes it incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (only the 'event' parameter has a description listing possible values). The description adds no parameter semantics beyond what's in the schema—it doesn't explain what 'url' is for (e.g., endpoint for notifications) or provide context for the 'event' enum values. With low schema coverage, the description fails to compensate, leaving half the parameters poorly documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a webhook' is a tautology that restates the tool name without adding meaningful context. It specifies the verb ('create') and resource ('webhook'), but lacks details about what a webhook is for in this system or what it does. It doesn't distinguish from siblings like 'delete-webhook' or 'list-webhooks' beyond the obvious action difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid URL or event type), when it's appropriate (e.g., for real-time notifications), or when not to use it (e.g., for one-time checks). There's no reference to sibling tools like 'list-webhooks' for viewing existing webhooks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-webhookC

Delete a webhook by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookIdYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool deletes a webhook, implying a destructive mutation, but lacks details on permissions required, whether deletion is reversible, error handling, or side effects. This is a significant gap for a mutation tool without annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—'Delete a webhook by ID'—front-loading the core action and resource. It's appropriately sized for a simple tool, making it easy for an AI agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a destructive operation with no annotations, 0% schema coverage, and no output schema), the description is inadequate. It lacks critical context such as behavioral traits, parameter details, and usage guidelines, making it incomplete for safe and effective tool invocation by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'by ID', which adds meaning to the 'webhookId' parameter, but doesn't explain what constitutes a valid ID (e.g., format, source from 'list-webhooks'), leaving the parameter semantics incomplete for the single required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and target resource ('a webhook by ID'), making the purpose unambiguous. It distinguishes from siblings like 'create-webhook' and 'list-webhooks' by specifying deletion. However, it doesn't explicitly contrast with all siblings (e.g., 'get-events' or 'send-email'), keeping it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing webhook ID), exclusions, or comparisons to sibling tools like 'list-webhooks' for finding IDs. Usage is implied but not explicitly stated, leaving gaps for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-eventsC

Retrieve events with optional filters

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateNoISO date, inclusive
endDateNoISO date, inclusive
eventNoEvent type filter
messageIdNo
retrieveCountNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions 'optional filters' but doesn't disclose behavioral traits like pagination (implied by retrieveCount), rate limits, authentication needs, or what happens with missing parameters. This is inadequate for a tool with 5 parameters and no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at 4 words, front-loaded with the core purpose. Every word earns its place, with no redundant information, making it efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, 60% schema coverage, no annotations, and no output schema, the description is incomplete. It doesn't compensate for the gaps in behavioral transparency or parameter understanding, leaving the agent with insufficient context for effective tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60%, with 3 of 5 parameters having descriptions. The description adds minimal value by mentioning 'optional filters' but doesn't explain parameter interactions, defaults, or semantics beyond what the schema provides. Baseline 3 is appropriate given moderate schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Retrieve events with optional filters' clearly states the verb ('retrieve') and resource ('events'), and mentions the optional filtering capability. However, it doesn't differentiate from sibling tools (which are webhook/email related), though this may not be necessary since they serve different domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, context for filtering, or relationships with sibling tools like list-webhooks, leaving the agent to infer usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-webhooksB

List registered webhooks

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'List registered webhooks' implies a read-only operation but doesn't specify whether it requires authentication, returns paginated results, includes error handling, or has rate limits. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple list operation with no parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with no annotations and no output schema, the description is minimally adequate. It states what the tool does but lacks details on return format, error conditions, or behavioral constraints. Given the simplicity, it meets basic requirements but leaves room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, which aligns with the schema. A baseline of 4 is applied since no parameters exist and the description doesn't introduce unnecessary complexity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List registered webhooks' clearly states the verb ('List') and resource ('registered webhooks'), making the tool's purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get-events' which might also retrieve webhook-related data, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get-events' or 'create-webhook'. It lacks explicit instructions on context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send-emailC

Send an email using SendLayer

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYesSender email or { email, name }. If omitted, uses configured default sender if available.
toYesRecipient(s) email or objects
subjectYes
textNo
htmlNo
ccNo
bccNo
replyToNo
tagsNo
headersNo
attachmentsNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but offers none. It doesn't mention whether this is a read-only or destructive operation, authentication requirements, rate limits, error conditions, or what happens upon success. For a tool that sends emails (a clear side effect), this is a significant gap in behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is maximally concise at just 5 words, with no wasted language. It's front-loaded with the core function and gets straight to the point without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex email-sending tool with 11 parameters, no annotations, no output schema, and low schema coverage, the description is completely inadequate. It provides only the most basic functional statement without any of the contextual information needed to use the tool effectively or understand its behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 18% schema description coverage and 11 parameters, the description provides zero information about parameters. It doesn't mention any of the key parameters (from, to, subject, attachments, etc.) or their semantics. The description fails to compensate for the low schema coverage, leaving most parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Send') and resource ('email') with the specific service ('using SendLayer'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling email-sending tools (though none are listed among the actual siblings).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, prerequisites, or constraints. It's a bare statement of function without any contextual usage information that would help an agent decide when this is the appropriate tool to invoke.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: create-webhook, delete-webhook, and list-webhooks handle webhook lifecycle management, get-events retrieves event data, and send-email performs email sending. An agent can easily distinguish between these functions without confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with kebab-case (e.g., create-webhook, delete-webhook, get-events, list-webhooks, send-email). This uniformity makes the tool set predictable and easy to understand.

Tool Count5/5

With 5 tools, this server is well-scoped for its purpose of handling SendLayer webhooks, events, and email sending. Each tool earns its place, providing essential operations without being overly sparse or bloated.

Completeness4/5

The tool set covers core operations for webhooks (create, delete, list) and email sending, with get-events for monitoring. A minor gap exists in webhook management (e.g., no update-webhook tool), but agents can work around this by deleting and recreating webhooks as needed.

Related MCP Connectors

Appeared in Searches

Latest Blog Posts

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/gyrationtechs/mcp-server'

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