Skip to main content
Glama
mailxem

XEM Email MCP Server

by mailxem

XEM Email MCP Server

A Model Context Protocol (MCP) server that provides tools for interacting with the XEM Email API. This server enables sending emails, managing campaigns, creating contact lists, and managing contacts.

Features

  • Send Email: Send individual emails with HTML content, templates, scheduling, and more

  • Create Campaign: Create email campaigns for mailing lists

  • Create Contact List: Create and manage contact lists

  • Add Contacts: Add individual contacts to mailing lists

  • Import Contacts: Import contacts from CSV files

  • Get Contact Lists: Retrieve all contact lists with pagination

  • Get Contacts: Retrieve contacts from a specific list with pagination

Related MCP server: SMTP MCP Server

Installation

npm install
npm run build

Configuration

Environment Variables

You can configure the API token and Team ID using environment variables:

  • XEM_API_TOKEN: Your XEM Email API token (required)

  • XEM_TEAM_ID: Your Team ID (optional, if applicable to your account)

Command Line Arguments

Alternatively, pass credentials as command line arguments:

  • --token <token>: XEM Email API token

  • --team-id <team-id>: Team ID

Usage

As an MCP Server

Option 1: Using Environment Variables

Add to your MCP client configuration (e.g., Claude Desktop):

{
  "mcpServers": {
    "xem-email": {
      "command": "node",
      "args": ["/path/to/mcp/build/index.js"],
      "env": {
        "XEM_API_TOKEN": "your-api-token-here",
        "XEM_TEAM_ID": "your-team-id-here"
      }
    }
  }
}

Option 2: Using Command Line Arguments

{
  "mcpServers": {
    "xem-email": {
      "command": "node",
      "args": [
        "/path/to/mcp/build/index.js",
        "--token", "your-api-token-here",
        "--team-id", "your-team-id-here"
      ]
    }
  }
}

Note: When token and teamId are configured via environment variables or CLI args, you don't need to provide them in each tool call. If both are set, the tool argument takes precedence.

Available Tools

1. send_email

Send an email using the XEM Email API.

Required Parameters:

  • to (string): Recipient email address

  • subject (string): Email subject line

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • html (string): HTML content of the email

  • cc (string): CC email addresses (comma-separated)

  • bcc (string): BCC email addresses (comma-separated)

  • replyTo (string): Reply-to email address

  • templateId (string): Template ID to use for the email

  • scheduleAt (string): ISO 8601 timestamp to schedule the email

  • provider (string): Email provider (default: "CUSTOM")

  • test (boolean): Whether this is a test email (default: false)

  • data (array): Additional data array

Example (assuming token is set via environment):

{
  "to": "user@example.com",
  "subject": "Welcome!",
  "html": "<h1>Hello World</h1>",
  "test": true
}

2. create_campaign

Create an email campaign that can be sent to a contact list.

Required Parameters:

  • name (string): Campaign name

  • subject (string): Email subject line

  • listId (string): Mailing list ID to send the campaign to

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • teamId (string): Team ID (only if not set via environment/args)

  • html (string): HTML content of the campaign email

  • templateId (string): Template ID to use for the campaign

  • scheduleAt (string): ISO 8601 timestamp to schedule the campaign

3. create_contact_list

Create a new contact list for organizing email recipients.

Required Parameters:

  • name (string): Name of the contact list

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • teamId (string): Team ID (only if not set via environment/args)

  • description (string): Description of the contact list

4. add_contacts

Add contacts to a mailing list.

Required Parameters:

  • listId (string): ID of the mailing list to add contacts to

  • contacts (array): Array of contact objects

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • teamId (string): Team ID (only if not set via environment/args)

Contact Object:

  • email (string, required): Contact email address

  • name (string, optional): Contact name

  • phone (string, optional): Contact phone number

Example (assuming token/teamId set via environment):

{
  "listId": "list-123",
  "contacts": [
    {
      "email": "john@example.com",
      "name": "John Doe",
      "phone": "+1234567890"
    },
    {
      "email": "jane@example.com",
      "name": "Jane Smith"
    }
  ]
}

5. import_contacts

Import contacts from a CSV file to a mailing list using file upload.

Required Parameters:

  • listId (string): ID of the mailing list to import contacts to

  • fileId (string): File ID from a previous file upload

  • mappings (object): Field mappings for CSV columns

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • teamId (string): Team ID (only if not set via environment/args)

Example (assuming token/teamId set via environment):

{
  "listId": "list-123",
  "fileId": "file-456",
  "mappings": {
    "name": "name",
    "email": "email",
    "phone": "phone"
  }
}

6. get_contact_lists

Get all contact lists for a team.

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • teamId (string): Team ID (only if not set via environment/args)

  • page (number): Page number for pagination (default: 0)

  • limit (number): Number of items per page (default: 10)

7. get_contacts

Get contacts from a specific mailing list.

Required Parameters:

  • listId (string): ID of the mailing list

Optional Parameters:

  • token (string): XEM Email API token (only if not set via environment/args)

  • teamId (string): Team ID (only if not set via environment/args)

  • page (number): Page number for pagination (default: 0)

  • limit (number): Number of items per page (default: 10)

API Authentication

All tools require an API token from XEM Email. You can obtain this token from your XEM Email account dashboard.

Important: Keep your API token secure and never commit it to version control.

Development

Build

npm run build

Watch mode

npm run watch

Project Structure

mcp/
├── src/
│   └── index.ts          # Main MCP server implementation
├── build/                # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.md

Dependencies

  • @modelcontextprotocol/sdk: MCP SDK for building MCP servers

  • typescript: TypeScript compiler

  • @types/node: Node.js type definitions

License

MIT

Available Tools

7 tools
add_contactsC

Add contacts to a mailing list.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
listIdYesID of the mailing list to add contacts to
contactsYesArray of contact objects to add
teamIdNoTeam ID (optional if set via environment variable)

TDQS

C2.9/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. It states the tool adds contacts but doesn't mention important behavioral aspects like whether this is a write operation (implied but not explicit), what happens on duplicate contacts, permission requirements, rate limits, or error handling. The description is too minimal 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 a single, efficient sentence with zero wasted words. It's appropriately sized for the tool's complexity 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 mutation tool with 4 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after adding contacts, what the return value might be, or important behavioral constraints. The agent would need to guess about success/failure responses and operational details.

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 schema fully documents all 4 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3 for adequate 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 clearly states the action ('Add contacts') and the target resource ('to a mailing list'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'import_contacts' or 'create_contact_list', which appear to have related functionality for contact management.

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 'import_contacts' or 'create_contact_list'. There's no mention of prerequisites, constraints, or typical use cases, leaving the agent with minimal context for tool selection.

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

create_campaignC

Create an email campaign that can be sent to a contact list.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
nameYesCampaign name
subjectYesEmail subject line
htmlNoHTML content of the campaign email
templateIdNoTemplate ID to use for the campaign
listIdYesMailing list ID to send the campaign to
scheduleAtNoISO 8601 timestamp to schedule the campaign
teamIdNoTeam ID (optional if set via environment variable)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits like whether creation is immediate or draft-based, if it requires specific permissions, rate limits, or what happens after creation (e.g., campaign status). This leaves significant gaps 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 a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place by specifying the resource and target.

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 creation tool with 8 parameters, no annotations, and no output schema, the description is insufficient. It lacks details on behavioral context, return values, error conditions, or integration with sibling tools, leaving the agent with incomplete operational understanding.

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 schema fully documents all 8 parameters. The description adds no parameter-specific information beyond implying 'listId' is for targeting, which is already clear in the schema. Baseline 3 is appropriate as the schema handles parameter semantics adequately.

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 'create' and resource 'email campaign', specifying it can be sent to a contact list. It distinguishes from siblings like 'send_email' by focusing on campaign creation rather than immediate sending, though it doesn't explicitly contrast with all 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?

No guidance on when to use this tool versus alternatives is provided. It doesn't mention prerequisites, when not to use it, or how it differs from similar tools like 'send_email' or campaign-related operations that might exist elsewhere.

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

create_contact_listC

Create a new contact list for organizing email recipients.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
nameYesName of the contact list
descriptionNoDescription of the contact list
teamIdNoTeam ID (optional if set via environment variable)

TDQS

C2.9/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 mentions creation but doesn't cover important aspects like required permissions, whether the operation is idempotent, error handling, or what happens on success (e.g., returns a list ID). This leaves significant gaps for an agent to understand 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 that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an 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 creation operation with 4 parameters), lack of annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns, error conditions, or behavioral nuances, leaving the agent with incomplete context for proper 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?

The input schema has 100% description coverage, so parameters are well-documented in the schema. The description adds no additional parameter semantics beyond implying 'name' and 'description' fields, which are already covered. This meets the baseline for high 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 clearly states the action ('Create a new contact list') and purpose ('for organizing email recipients'), which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_contact_lists' or 'import_contacts', which would be needed for 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 like 'import_contacts' or 'add_contacts', nor does it mention prerequisites such as authentication or team context. It simply states what the tool does without contextual usage instructions.

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

get_contact_listsC

Get all contact lists for a team.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
teamIdNoTeam ID (optional if set via environment variable)
pageNoPage number for pagination
limitNoNumber of items per page

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 the full burden of behavioral disclosure. It mentions 'Get all contact lists' but does not specify if this is a read-only operation, how pagination works with the 'page' and 'limit' parameters, or any rate limits or authentication requirements beyond what the schema implies. 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 that directly states the tool's purpose without unnecessary words. It is front-loaded and appropriately sized, making it easy 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 complexity of a tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It does not address behavioral aspects like pagination behavior, authentication needs, or what the return values might be, leaving the agent with insufficient context for effective use.

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 schema fully documents all four parameters. The description adds no additional meaning beyond the schema, such as explaining how 'teamId' relates to the contact lists or the implications of pagination. Baseline 3 is appropriate as the schema handles the heavy lifting.

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 'Get' and the resource 'all contact lists for a team', which specifies what the tool does. However, it does not differentiate from sibling tools like 'get_contacts' or 'create_contact_list', which handle related but distinct operations, leaving room for improvement in distinguishing its specific scope.

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 such as 'get_contacts' or 'create_contact_list'. It lacks context on prerequisites, exclusions, or specific scenarios, offering minimal help for an agent to choose between sibling tools.

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

get_contactsC

Get contacts from a specific mailing list.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
listIdYesID of the mailing list
teamIdNoTeam ID (optional if set via environment variable)
pageNoPage number for pagination
limitNoNumber of items per page

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 but lacks behavioral details. It doesn't disclose that this is a read-only operation (implied by 'Get'), pagination behavior (though schema hints at it), authentication requirements (token/teamId optionality), rate limits, or error handling. For a tool with 5 parameters and no annotations, this is a significant gap in 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 a single, efficient sentence that front-loads the core action ('Get contacts') and resource ('from a specific mailing list'). There is no wasted verbiage, making it easy to parse quickly while conveying essential purpose.

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 (5 parameters, no output schema, no annotations), the description is incomplete. It doesn't address return values, error conditions, pagination details, or authentication context. For a data retrieval tool with multiple optional parameters, more guidance is needed to help the agent use it effectively.

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 schema fully documents all parameters. The description adds no additional meaning beyond implying 'listId' is required and that contacts are retrieved from it. It doesn't explain parameter interactions or usage nuances, so it meets the baseline for high schema coverage without compensating value.

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 'Get' and resource 'contacts from a specific mailing list', making the purpose understandable. It distinguishes from siblings like 'add_contacts' or 'get_contact_lists' by focusing on retrieving contacts from a particular list, though it doesn't explicitly contrast with 'import_contacts' or 'get_contact_lists' which handle different aspects of contact management.

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 like needing a mailing list ID, compare it to sibling tools like 'get_contact_lists' for listing lists instead of contacts, or specify use cases such as retrieving contacts for email campaigns. This leaves the agent without context for tool selection.

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

import_contactsC

Import contacts from a CSV file to a mailing list using file upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
listIdYesID of the mailing list to import contacts to
fileIdYesFile ID from a previous file upload
mappingsYesField mappings for CSV columns (e.g., {"name": "name", "email": "email"})
teamIdNoTeam ID (optional if set via environment variable)

TDQS

C2.9/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 action ('Import contacts') but lacks details on permissions required, whether it's idempotent, potential side effects (e.g., overwriting existing contacts), or error handling. This is a significant gap for a tool that performs data import operations.

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 that front-loads the core action and resources. Every word contributes directly to understanding the tool's purpose without any redundancy or 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?

Given the complexity of importing contacts (a mutation operation with 5 parameters, nested objects, and no output schema), the description is inadequate. It lacks details on behavioral traits, output expectations, and differentiation from siblings, making it incomplete for safe and effective use by 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?

The schema description coverage is 100%, so the input schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, such as explaining the CSV format or mapping nuances. This meets the baseline for high 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 clearly states the action ('Import contacts') and resources involved ('from a CSV file to a mailing list using file upload'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'add_contacts' or 'create_contact_list', which might have overlapping functionality.

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 like 'add_contacts' or 'create_contact_list'. The description mentions the method ('using file upload') but doesn't specify prerequisites, such as needing a pre-uploaded file, or when not to use it, leaving the agent to infer usage from context 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 the XEM Email API. Supports HTML content, templates, scheduling, and multiple recipients.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoXEM Email API authentication token (optional if set via environment variable)
toYesRecipient email address
subjectYesEmail subject line
htmlNoHTML content of the email (optional if using templateId)
ccNoCC email addresses (comma-separated)
bccNoBCC email addresses (comma-separated)
replyToNoReply-to email address
templateIdNoTemplate ID to use for the email
scheduleAtNoISO 8601 timestamp to schedule the email
providerNoEmail provider (default: CUSTOM)CUSTOM
testNoWhether this is a test email
dataNoAdditional data array

TDQS

C2.9/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. It mentions capabilities like scheduling and multiple recipients but lacks critical details: whether this is a mutation (likely yes, but not stated), authentication requirements beyond the token parameter, rate limits, error handling, or what happens on success/failure. For a 12-parameter tool with potential side effects, this is insufficient.

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, efficient sentence that lists key capabilities without redundancy. It's appropriately sized and front-loaded with the core purpose, though it could be slightly more structured (e.g., separating core function from features).

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 12-parameter tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like mutation effects, authentication, error cases, or return values, leaving significant gaps for an agent to understand tool usage fully.

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 schema fully documents all 12 parameters. The description adds minimal value beyond the schema by mentioning HTML content, templates, scheduling, and multiple recipients—which are already covered in parameter descriptions (e.g., html, templateId, scheduleAt, to/cc/bcc). Baseline 3 is appropriate as the schema does the heavy lifting.

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 ('send an email') and resource ('using the XEM Email API'), with specific capabilities listed (HTML content, templates, scheduling, multiple recipients). However, it doesn't explicitly differentiate this email-sending tool from sibling tools like create_campaign, which might also involve email functionality.

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 create_campaign or other email-related tools. It mentions capabilities but doesn't specify use cases, prerequisites, or exclusions, leaving the agent without contextual decision-making help.

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. 7 tool updatesv1.0.0
    • First observedadd_contacts
    • First observedcreate_campaign
    • First observedcreate_contact_list
    • First observedget_contact_lists
    • First observedget_contacts
    • First observedimport_contacts
    • First observedsend_email

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: add_contacts and import_contacts both add contacts but differ in method (manual vs. file upload), create_campaign and send_email handle campaign creation vs. direct sending, and contact list management tools are well-separated. An agent can easily distinguish between them based on their specific functions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as add_contacts, create_campaign, and get_contact_lists. This uniformity makes the tool set predictable and easy for an agent to parse, with no deviations in naming conventions.

Tool Count5/5

With 7 tools, the server is well-scoped for email marketing and contact management, covering core operations like contact handling, list management, campaign creation, and sending. Each tool serves a distinct and necessary function, avoiding bloat while providing comprehensive coverage for the domain.

Completeness4/5

The tool set covers most essential email marketing workflows, including contact management, list operations, campaign creation, and sending. However, minor gaps exist, such as the lack of tools for updating or deleting contacts, campaigns, or lists, which agents might need to work around for full lifecycle management.

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

  • A
    license
    B
    quality
    F
    maintenance
    Provides an interface to manage email marketing, contact lists, dynamic templates, and email analytics via SendGrid's API.
    21
    1,384
    29
    ISC
  • A
    license
    A
    quality
    A
    maintenance
    Enables sending emails via SMTP with template management, supporting multiple SMTP configurations, template creation with variable substitution, and bulk email sending with rate limiting.
    6
    234
    19
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables comprehensive email marketing and transactional email operations through SendGrid's API v3. Supports contact management, campaign creation, email automation, list management, and email sending with built-in read-only safety mode.
    58
    1,384
    3
    ISC

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

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