Skip to main content
Glama

mailmodo-mcp

This is a TypeScript project that implements a Message Control Protocol (MCP) server for Mailmodo integration with Claude Desktop and other MCP supported client.

Prerequisites

  • Node.js (v20 or higher recommended)

  • npm (comes with Node.js)

Related MCP server: MJML MCP Server

Installation

Installing via Smithery

To install Mailmodo Integration Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @mailmodo/mailmodo-mcp --client claude

Manual Installation

  1. Clone the repository:

git clone https://github.com/mailmodo/mailmodo-mcp.git
cd mailmodo-mcp
  1. Install dependencies:

npm install

Building the Project

To compile the TypeScript code to JavaScript, run:

npm run build

This will create a dist directory containing the compiled JavaScript files.

Running the Project

After building, you can run the project using:

node dist/index.js

Or use the npm script:

npm start

Claude Desktop Configuration

Local Run from Code

To configure this project with Claude Desktop, add the following configuration to your Claude Desktop settings:

{
  "mcpServers": {
    "mailmodo": {
      "command": "node",
      "args": [
        "/path/to/your/mailmodo-mcp/dist/index.js"
      ]
    }
  }
}

Run from docker image

{
  "mcpServers": {
    "mailmodo": {
      "command": "docker",
      "args": [
        "run",
        "--platform", 
        "linux/amd64",
        "-i",
        "--rm",
        "-e",
        "MAILMODO_API_KEY",
        "avneesh001/mailmodo-mcp"
      ],
      "env": {
        "MAILMODO_API_KEY": "<GET MAILMODO KEY from https://manage.mailmodo.com/app/settings/apikey and insert here>"
      }
    }
  }
}

Run from npx

{
  "mcpServers": {
    "mailmodo": {
      "command": "npx",
      "args": [
        "-y",
        "@mailmodo/mcp"
      ],
      "env": {
        "MAILMODO_API_KEY": "<GET MAILMODO KEY from https://manage.mailmodo.com/app/settings/apikey and insert here>"
      }
    }
  }
}

Connect via Remote Server

{
  "mcpServers": {
    "mailmodo": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.app.mailmodo.com/mcp",
        "--header",
        "mmApiKey:${MAILMODO_API_KEY}"
      ],
      "env": {
        "MAILMODO_API_KEY": "<GET MAILMODO KEY from https://manage.mailmodo.com/app/settings/apikey and insert here>"
      }
    }
  }
}

Make sure to adjust the file path in the args array to match your local project directory.

Development

To run the project in development mode with automatic recompilation:

  1. Install ts-node and nodemon as dev dependencies:

npm install --save-dev ts-node nodemon
  1. Add a dev script to your package.json:

{
  "scripts": {
    "dev": "nodemon src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js"
  }
}
  1. Run the development server:

npm run dev

Project Structure

mailmodo-mcp/
├── src/             # TypeScript source files
├── dist/            # Compiled JavaScript files
├── package.json     # Project dependencies and scripts
└── tsconfig.json    # TypeScript configuration

Tools and Resources

The Mailmodo MCP server provides several tools and resources for interacting with Mailmodo's functionality. Here's a comprehensive list:

Resources

  1. Mailmodo Templates (mailmodo://templates)

    • Returns a list of all available email templates in JSON format

    • MIME Type: application/json

  2. Mailmodo Campaigns (mailmodo://campaigns)

    • Returns a list of all campaigns in JSON format

    • MIME Type: application/json

  3. Mailmodo Contact Lists (mailmodo://contact-lists)

    • Returns all contact lists in JSON format

    • MIME Type: application/json

Tools

  1. User Details

    • Name: userDetails

    • Description: Get all details of a contact

    • Parameters:

      • email (string): Email address of the contact

  2. Campaign Report Tool

    • Name: MailmodoCampainReportTool

    • Description: Get campaign reports including open, click, and submission counts

    • Parameters:

      • campaignId (UUID): ID of the campaign

      • fromDate (YYYY-MM-DD): Start date for the report

      • toDate (YYYY-MM-DD): End date for the report

  3. Current DateTime

    • Name: currentDateTime

    • Description: Get current date and time

    • Parameters: None

  4. Send Event

    • Name: sendEvent

    • Description: Send custom events with email and event properties

    • Parameters:

      • email (string): Contact's email address

      • event_name (string): Name of the event

      • ts (number, optional): Timestamp

      • event_properties (object, optional): Additional event properties

  5. Contact List Management

    • Add Contact to List

      • Name: addContactToList

      • Description: Add a single contact to a list

      • Parameters:

        • email (string): Contact's email

        • listName (string): Name of the list

        • data (object, optional): Contact properties

        • Various optional fields for contact metadata

    • Bulk Add Contacts

      • Name: addBulkContactToList

      • Description: Add multiple contacts to a list in a single operation

      • Parameters:

        • listName (string): Name of the list

        • values (array): Array of contact objects

    • Remove Contact from List

      • Name: removeContactFromList

      • Description: Remove a contact from a specific list

      • Parameters:

        • email (string): Contact's email

        • listName (string): Name of the list

  6. Contact Status Management

    • Unsubscribe Contact

      • Name: unsubscribeContact

      • Description: Unsubscribe or suppress a contact

      • Parameters:

        • email (string): Contact's email

    • Resubscribe Contact

      • Name: resubscribeContact

      • Description: Resubscribe a previously unsubscribed contact

      • Parameters:

        • email (string): Contact's email

    • Archive Contact

      • Name: archiveContact

      • Description: Permanently archive a contact

      • Parameters:

        • email (string): Contact's email

  7. Campaign Management

    • Send Email Campaign

      • Name: sendEmailToCampaign

      • Description: Trigger an email campaign with personalization

      • Parameters:

        • campaignId (string): Campaign ID

        • email (string): Recipient's email

        • Various optional parameters for customization

    • Broadcast Campaign

      • Name: broadcastCampaignToList

      • Description: Trigger campaigns to an entire contact list

      • Parameters:

        • campaignId (string): Campaign ID

        • listId (string): Target list ID

        • Optional parameters for campaign customization

License

MIT License

Available Tools

12 tools
addBulkContactToListC

Add Many Contact to a list in single API

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYes
valuesYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations exist. Description only says 'Add Many Contact' with no details on behavior such as error handling, idempotency, response format, or prerequisites (e.g., list existence). Lacks essential context beyond the action.

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

Conciseness3/5

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

One sentence is concise but omits critical details. The description is not well-structured to aid agent understanding; it lacks any structured breakdown of behavior or parameters.

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 complex nested input schema, lack of annotations, and no output schema, the description fails to provide adequate context. It does not cover return values, error scenarios, or constraints, making it insufficient for correct tool selection and invocation.

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

Parameters1/5

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

Schema description coverage is 0% for top-level parameters. Description adds no information about 'listName' or 'values'. The nested schema has field descriptions, but the tool description does not clarify parameter purpose or usage.

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?

Description states 'Add Many Contact to a list in single API', clearly indicating bulk addition. The name and brief description imply bulk operation, but does not explicitly differentiate from the sibling 'addContactToList' which likely handles single contacts.

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?

No usage guidelines provided. Does not specify when to use this tool versus alternatives like 'addContactToList'. Sibling names hint at single vs bulk, but no explicit guidance.

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

addContactToListD

Add Contact to list

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
listNameYes
dataNo
created_atNo
last_clickNo
last_openNo
timezoneNo

TDQS

D1.1/5.0
Behavior1/5

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

With no annotations and no description of side effects, permission requirements, or behavior when a contact already exists, the tool is completely opaque. The agent cannot infer mutation or idempotency.

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

Conciseness2/5

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

The description is extremely short, but at the cost of necessary information. It fails to be concise in a meaningful way; it is under-specified and does not earn its place.

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 no annotations, no output schema, and an incomplete parameter set, the description is wholly inadequate. It fails to explain return values, error conditions, or when the operation succeeds.

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

Parameters1/5

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

The description adds no meaning to the parameters. Although the input schema has descriptions for nested data fields, the top-level parameters (email, listName, created_at, etc.) remain undocumented. With 0% schema description coverage and 7 parameters, the lack of param information is a critical gap.

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

Purpose1/5

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

The description 'Add Contact to list' is a tautology that merely restates the tool name without adding specificity or clarifying what kind of list or what scope. It offers no distinction from sibling tools like addBulkContactToList.

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 such as addBulkContactToList or other contact management tools. The description omits any context about prerequisites, typical use cases, or exclusions.

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

archiveContactC

permanently archive contact in mailmodo

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations provided, so the description must disclose behavior. It states 'permanently archive' but does not clarify whether the action is reversible, what effects it has on the contact's data, or if it triggers any side effects.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure. It is minimally acceptable for a one-parameter tool, but not well-fomatted.

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 simplicity (one parameter, no output schema), the description should explain the semantics of 'archive' (e.g., whether it deletes, suppresses, or hides the contact). The presence of sibling tools makes this gap more significant.

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?

The only parameter 'email' has no additional meaning beyond the schema type (string). The description does not provide format expectations, examples, or constraints, leaving the agent to guess.

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 (permanently archive contact) and the resource (contact in mailmodo). It distinguishes from siblings like removeContactFromList and unsubscribeContact, though the term 'permanently' could imply deletion, which may cause confusion.

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?

No guidance on when to use this tool over alternatives such as removeContactFromList or unsubscribeContact. The description does not specify context or conditions for archiving.

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

broadcastCampaignToListC

The broadcast campaign API allows the user to trigger campaigns to the entire contact list using a single API request.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesCampaign id of the campaign to be triggered
listIdYesId of the contact list or segment for which the campaign should be triggered.
subjectNoOptional subject line of the campaign. This will appear as the subject of the email sent to recipients.
idempotencyKeyNoOptional unique key to allow retries of the same campaign within 24 hours. Allows safe resending. For example: "2024-09-05T17:00:00Z".
campaign_dataNoOptional set of personalization parameters for the campaign. Each key represents a variable (e.g., "first_name") to be used in the email template. If a key is missing, the backend will fetch values from contact properties or default to an empty string.

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It describes the action as triggering campaigns but fails to mention mutation, rate limits, idempotency details (despite the idempotencyKey parameter), or the behavior of personalization parameters. The description is insufficient for an agent to understand all side effects.

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

Conciseness3/5

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

The description is a single sentence but includes redundant phrasing ('using a single API request' is implied by 'broadcast'). It is not optimally concise and lacks a title. It could be restructured to front-load key information.

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 has 5 parameters, a nested object, no output schema, and no annotations, the description is too minimal. It does not cover return values, errors, prerequisites (e.g., campaign must exist), or the full scope of behavior. The schema covers parameters well, but the description fails to provide broader context.

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 100%, so the baseline is 3. The description adds no additional meaning beyond the schema; it only provides a high-level overview. The schema already explains each parameter, including the idempotencyKey and campaign_data object.

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 that the tool triggers campaigns to the entire contact list using a single API request. This distinguishes it from sibling tools like sendEmailToCampaign, though the mention of 'entire contact list' slightly conflicts with the possibility of using a segment via listId.

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 does not provide guidance on when to use this tool versus alternatives. It mentions 'single API request' but offers no explicit when-to-use or when-not-to-use instructions, nor does it reference sibling tools or contexts.

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

currentDateTimeA

Get Current Date and time for timezone. if timezone is not passed default to UTC

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoThe timezone should be a valid IANA timezone name like "America/New_York" or "Asia/Kolkata"

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description fully carries burden. It clearly indicates a read operation returning date/time for a given timezone, with default behavior. However, it omits response format details.

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?

Two concise sentences, front-loaded with purpose, no extraneous words. Every sentence adds value.

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

Completeness4/5

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

Given the tool's simplicity (one optional param, no output schema), description covers core usage. Minor gap: no indication of response format, but agent can infer a datetime string.

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?

Input schema has 100% coverage with description for 'timezone'. Description adds value by stating default behavior not found in schema, providing meaningful context beyond the schema.

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

Purpose5/5

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

Description clearly states the verb 'Get', the resource 'Current Date and time', and the scope 'for timezone'. No sibling tools perform similar function, making it easily distinguishable.

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

Usage Guidelines3/5

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

Description explains default behavior when timezone is omitted ('default to UTC'), but does not provide explicit when-to-use or when-not-to-use guidance compared to sibling tools.

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

MailmodoCampainReportToolC

Tool to get the campaign reports for a particular campaign like open, click submission count etc

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes
fromDateYes
toDateYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states 'get' implying read-only, but does not specify authentication needs, rate limits, or whether the operation is destructive. The description is insufficient for 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.

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure. It would benefit from being broken into separate statements for clarity.

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 has three required parameters and no output schema, the description is incomplete. It does not explain what the tool returns, how the date range is applied, or any constraints. Missing essential context.

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

Parameters1/5

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

Input schema has no descriptions for parameters and schema coverage is 0%. The description does not explain campaignId, fromDate, or toDate, despite mentioning campaign reports. It adds no meaning beyond the schema.

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 tool retrieves campaign reports for a specific campaign, giving examples like open, click, submission count. This distinguishes it from sibling tools that send emails or manage contacts. However, it could be more precise about the exact metrics included.

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?

No guidance on when to use this tool versus alternatives, such as when to use broadcastCampaignToList or userDetails. The description lacks explicit context for usage.

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

removeContactFromListC

Remove a particular contact from the contact list

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
listNameYes

TDQS

C2.8/5.0
Behavior2/5

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

The description merely states 'remove', implying mutation, but with no annotations provided, it fails to disclose details such as side effects, irreversibility, or error handling (e.g., contact not found).

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

Conciseness4/5

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

The description is a single, concise sentence with no extraneous information. However, it could be expanded slightly to cover parameters without losing conciseness.

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 simple removal tool with two required parameters and no output schema, the description provides the core purpose but omits details like expected parameter formats or return behavior. Adequate but not thorough.

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 0% schema description coverage, the description must add meaning. It implicitly maps 'contact' to the email parameter and 'contact list' to listName, but does not explicitly link to the schema fields, reducing clarity.

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 states the action ('Remove') and the resource ('a particular contact from the contact list'), clearly distinguishing from sibling add tools. However, it does not explicitly reference the 'listName' parameter, leaving room for ambiguity about which list.

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?

No guidance is provided on when to use this tool versus alternatives (e.g., addContactToList, unsubscribeContact). The context of sibling tools is not leveraged to clarify appropriate use cases.

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

resubscribeContactC

Resubscribe contact in mailmodo

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, and the description merely states the action without explaining behavioral traits—such as whether it overwrites subscription status or requires a prior unsubscribed state. This is insufficient for an agent to understand side effects.

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

Conciseness3/5

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

The description is extremely short (two words plus context), which is concise but lacks structure. It could be more informative without sacrificing brevity.

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 simple input schema and no output schema, the description should explain the action's effect, prerequisites, and possible return values. It only states 'Resubscribe contact in mailmodo', leaving many gaps.

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?

The schema defines one parameter 'email' (required, string) with 0% documentation coverage in the schema description. The tool description adds no extra meaning—no format, example, or constraint beyond the schema field name.

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 states 'Resubscribe contact in mailmodo', clearly indicating the action (resubscribe) and the resource (contact). However, it does not differentiate from sibling tools like 'unsubscribeContact' or 'addContactToList'.

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?

No guidance is provided on when to use resubscribeContact versus alternatives such as unsubscribeContact or addBulkContactToList. The description lacks context for appropriate usage.

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

sendEmailToCampaignC

Trigger and email for email campaign trigger with personalization parameter added to the email template.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesCamapign id of the campaign to be triggered
emailYesEmail address of the contact to whom you want to send the email. This is required.
subjectNoOptional: Overrides the default subject line provided when creating the campaign.
replyToNoOptional: Overrides the default reply-to email address for the campaign.
fromNameNoOptional: Overrides the sender name for the campaign.
campaign_dataNoOptional: Transient personalization parameters, not stored in the contact profile.
dataNoOptional: Personalization parameters saved to the contact's profile.
addToListNoOptional: List ID to which the contact should be added as part of triggering the campaign.

TDQS

C2.9/5.0
Behavior3/5

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

The description mentions personalization parameters but does not specify behavioral traits such as whether the email is sent immediately, if data is saved permanently, or if there are rate limits. Without annotations, more detail would be helpful, but the description provides some context.

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

Conciseness3/5

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

The description is a single sentence, but it is redundant and awkwardly phrased ('Trigger and email for email campaign trigger'). It could be more concise and clear without losing information.

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?

With 8 parameters, nested objects, and no output schema, the description is too short. It lacks information on return values, side effects, or how personalization and list addition work, leaving gaps for an AI agent.

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?

All parameters have schema descriptions, so the description adds minimal extra meaning. The phrase 'personalization parameter added' is already covered by the schema's campaign_data and data fields, yielding a baseline score of 3.

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 states that the tool triggers an email campaign with personalization for a single contact, which distinguishes it from sibling tools like broadcastCampaignToList. However, the phrasing is awkward and could be clearer, earning a 4.

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?

No guidance is provided on when to use this tool versus alternatives. It does not mention that this is for individual triggering, nor does it explain when not to use it or how it relates to broadcasting or list management tools.

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

sendEventC

Send custom events with email, event name and event properties

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
event_nameYes
tsNo
event_propertiesNo

TDQS

C2.5/5.0
Behavior2/5

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

No annotations exist, but the description provides minimal behavior details. It does not disclose authentication needs, rate limits, idempotency, or error handling. The action 'send' implies a mutation, but no confirmation or side effects are described.

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

Conciseness3/5

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

The description is a single sentence, which is concise but omits important details. It front-loads the purpose but lacks structure and fails to elaborate on parameters, usage, or behavior.

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?

For a tool with 4 parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain return values, error conditions, or the effect of sending an event, leaving the agent underinformed.

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%. The description only lists email, event name, and event properties, omitting the 'ts' parameter. It adds no detail on types, constraints, or the complex structure of event_properties beyond the schema itself.

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 tool sends custom events with email, event name, and event properties. It distinguishes from sibling tools (e.g., sendEmailToCampaign) by focusing on events rather than email sending.

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?

No guidance on when to use this tool versus alternatives. The description lacks context on when it is appropriate to send events, and no comparisons to sibling tools are made.

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

unsubscribeContactC

Unsubscribe or supress contact in mailmodo

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

TDQS

C2.4/5.0
Behavior2/5

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

Without annotations, the description must carry behavioral disclosure. It only indicates a mutation (unsubscribe/suppress) but omits details like consequences, reversibility, or required permissions. This is insufficient for an agent to understand the tool's full impact.

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

Conciseness3/5

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

The description is a single sentence, which is concise, but it sacrifices necessary detail. It earns its place as a minimal statement but does not fully leverage the space.

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 simplicity (one param, no output schema), the description should at least explain the outcome of unsubscribing. It fails to provide enough context to distinguish from sibling tools or to set correct expectations.

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

Parameters1/5

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

The sole parameter 'email' is described only by its type in the schema (0% schema description coverage). The description adds no explanation about format, validation, or role, forcing the agent to infer its meaning.

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 (unsubscribe or suppress) and the resource (contact in Mailmodo). The misspelling 'supress' is minor, but the purpose is unambiguous and distinguishes it from siblings like resubscribeContact.

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?

No guidance is provided on when to use this tool versus related siblings (e.g., archiveContact, removeContactFromList). The agent receives no context for decision-making among similar operations.

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

userDetailsC

Tool to get all details of a contact

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description should disclose side-effects, permissions, error handling, or output format. It only says 'get all details', omitting critical behavioral context like what happens if email is invalid or not found.

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

Conciseness4/5

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

The description is a single, concise sentence with the verb first. It is efficient but could be slightly more descriptive without losing conciseness.

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 simple tool with one parameter and no output schema, the description is lacking: no mention of return format, error states, or conditions. It fails to provide sufficient context for an agent to use it reliably.

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%, yet the description adds no extra meaning to the 'email' parameter beyond its existence. No format, validation rules, or examples are provided.

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 tool retrieves all details of a contact, with the input being an email from the schema. It is distinct from sibling tools which are mainly mutation operations, but lacks specificity about what 'details' include.

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?

No guidance on when to use this tool versus alternatives, no mention of prerequisites (e.g., email must exist), and no indication of context like read-only nature or when to prefer other tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv1.0.0
    • First observedaddBulkContactToList
    • First observedaddContactToList
    • First observedarchiveContact
    • First observedbroadcastCampaignToList
    • First observedcurrentDateTime
    • First observedMailmodoCampainReportTool
    • First observedremoveContactFromList
    • First observedresubscribeContact
    • First observedsendEmailToCampaign
    • First observedsendEvent
    • First observedunsubscribeContact
    • First observeduserDetails

TDQS

C2.5/5.0
Disambiguation3/5

Most tools have distinct purposes, but there is some overlap between 'addContactToList' and 'addBulkContactToList', which could cause confusion for an agent deciding between single vs. bulk operations. Additionally, 'broadcastCampaignToList' and 'sendEmailToCampaign' both involve sending campaigns, though their descriptions differentiate one as broadcast and the other as personalized.

Naming Consistency2/5

The naming is inconsistent with mixed conventions: some tools use camelCase (e.g., 'addBulkContactToList'), others use PascalCase (e.g., 'MailmodoCampainReportTool'), and some use snake_case (e.g., 'currentDateTime'). There is no uniform verb_noun pattern, making the set less predictable.

Tool Count4/5

With 12 tools, the count is reasonable for an email marketing server, covering core operations like contact management and campaign handling. It's slightly on the higher side but well within an appropriate range for the domain.

Completeness4/5

The tool set covers key aspects of email marketing: contact CRUD (add, remove, archive, unsubscribe, resubscribe), campaign operations (send, broadcast, report), and event tracking. A minor gap is the lack of tools for creating or managing lists or campaigns directly, but agents can work around this with the provided tools.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    C
    quality
    C
    maintenance
    Gives on-the-fly inboxes to AI agents. Agents / LLM's can send, receive, and take action in isolated inboxes. Built for AI unlike Gmail. Check us out at agentmail.to
    10
    98
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Email for AI agents. Create inboxes, send and receive emails without phone or CAPTCHA.
    22
    MIT

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/mailmodo/mailmodo-mcp'

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