XEM Email MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@XEM Email MCP ServerSend an email to hello@example.com with the subject 'Meeting Invitation'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildConfiguration
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 addresssubject(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 emailcc(string): CC email addresses (comma-separated)bcc(string): BCC email addresses (comma-separated)replyTo(string): Reply-to email addresstemplateId(string): Template ID to use for the emailscheduleAt(string): ISO 8601 timestamp to schedule the emailprovider(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 namesubject(string): Email subject linelistId(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 emailtemplateId(string): Template ID to use for the campaignscheduleAt(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 tocontacts(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 addressname(string, optional): Contact namephone(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 tofileId(string): File ID from a previous file uploadmappings(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 buildWatch mode
npm run watchProject Structure
mcp/
├── src/
│ └── index.ts # Main MCP server implementation
├── build/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.mdDependencies
@modelcontextprotocol/sdk: MCP SDK for building MCP serverstypescript: TypeScript compiler@types/node: Node.js type definitions
License
MIT
Available Tools
7 toolsadd_contactsC
Add contacts to a mailing list.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| listId | Yes | ID of the mailing list to add contacts to | |
| contacts | Yes | Array of contact objects to add | |
| teamId | No | Team ID (optional if set via environment variable) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| name | Yes | Campaign name | |
| subject | Yes | Email subject line | |
| html | No | HTML content of the campaign email | |
| templateId | No | Template ID to use for the campaign | |
| listId | Yes | Mailing list ID to send the campaign to | |
| scheduleAt | No | ISO 8601 timestamp to schedule the campaign | |
| teamId | No | Team ID (optional if set via environment variable) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| name | Yes | Name of the contact list | |
| description | No | Description of the contact list | |
| teamId | No | Team ID (optional if set via environment variable) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| teamId | No | Team ID (optional if set via environment variable) | |
| page | No | Page number for pagination | |
| limit | No | Number of items per page |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| listId | Yes | ID of the mailing list | |
| teamId | No | Team ID (optional if set via environment variable) | |
| page | No | Page number for pagination | |
| limit | No | Number of items per page |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| listId | Yes | ID of the mailing list to import contacts to | |
| fileId | Yes | File ID from a previous file upload | |
| mappings | Yes | Field mappings for CSV columns (e.g., {"name": "name", "email": "email"}) | |
| teamId | No | Team ID (optional if set via environment variable) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | XEM Email API authentication token (optional if set via environment variable) | |
| to | Yes | Recipient email address | |
| subject | Yes | Email subject line | |
| html | No | HTML content of the email (optional if using templateId) | |
| cc | No | CC email addresses (comma-separated) | |
| bcc | No | BCC email addresses (comma-separated) | |
| replyTo | No | Reply-to email address | |
| templateId | No | Template ID to use for the email | |
| scheduleAt | No | ISO 8601 timestamp to schedule the email | |
| provider | No | Email provider (default: CUSTOM) | CUSTOM |
| test | No | Whether this is a test email | |
| data | No | Additional data array |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v1.0.0- First observed
add_contacts - First observed
create_campaign - First observed
create_contact_list - First observed
get_contact_lists - First observed
get_contacts - First observed
import_contacts - First observed
send_email
TDQS
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.
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.
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.
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
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
Send email and read templates, marketing contacts, lists, stats, bounces and unsubscribes.
Send transactional email, run campaigns, manage contacts and automations, audit deliverability.
Send, track, and manage transactional and bulk email delivery
Email for AI agents: send mail, manage contacts, automations & webhooks. Zero-DNS first send.
Related MCP Servers
- AlicenseBqualityFmaintenanceProvides an interface to manage email marketing, contact lists, dynamic templates, and email analytics via SendGrid's API.211,38429ISC
- AlicenseAqualityAmaintenanceEnables sending emails via SMTP with template management, supporting multiple SMTP configurations, template creation with variable substitution, and bulk email sending with rate limiting.623419MIT
- AlicenseBqualityAmaintenanceEnables 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.581,3843ISC
- AlicenseNot gradedqualityCmaintenanceEnables sending and receiving emails through SMTP, IMAP, and POP3 protocols with support for attachments, HTML content, and email validation.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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