Koskamo

MisarMail MCP

An MCP server for the MisarMail AI email marketing platform that enables agents to send transactional emails, run marketing campaigns, manage contacts, and audit deliverability metrics.

Endpoint and access

OAuth sign-in: the first time you connect, your client opens the vendor's own authorization prompt in a browser.

MisarMail MCP logo, by Misar.AICommunity listingStreamable HTTPOAuth sign-inEndpoint checked 2026-11-06Published by Misar.AI
MCP endpoint (Streamable HTTP)
https://api.misar.io/mail/mcp
Vendor documentation

What its tools do

55 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

55 of 55 have a description · 55 of 55 declare behavior hints · 49 of 49 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Send transactional emails
  • Run marketing campaigns
  • Manage contact lists
  • Audit email deliverability

Source and maintenance

Community listingRegistry 5.1.2
Maintenance checked

Protocol and capabilities

Server
misarmail 5.1.5
MCP protocol negotiated in check
2025-06-18
Tools
55 advertised
Resources
4 advertised
Resource templates
Sign-in required
Prompts
8 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Tools

55 advertised

send_email
Advertised by the server during the last successful anonymous check.
Open-world

Send a transactional email from a verified MisarMail account. `from.email` must match an email account you have already verified — use list_domains to check which sender domains are available. Returns the message ID and queue status.

send_email input schema
{
  "type": "object",
  "required": [
    "from",
    "to",
    "subject"
  ],
  "properties": {
    "cc": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Recipient display name"
          },
          "email": {
            "type": "string",
            "description": "Recipient email address"
          }
        }
      },
      "description": "CC recipients (max 50)"
    },
    "to": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Recipient display name"
          },
          "email": {
            "type": "string",
            "description": "Recipient email address"
          }
        }
      },
      "description": "Recipient list (1–100 addresses)"
    },
    "bcc": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Recipient display name"
          },
          "email": {
            "type": "string",
            "description": "Recipient email address"
          }
        }
      },
      "description": "BCC recipients (max 50, hidden from other recipients)"
    },
    "from": {
      "type": "object",
      "required": [
        "email"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Sender display name shown to recipients"
        },
        "email": {
          "type": "string",
          "description": "Sender email address"
        }
      },
      "description": "Sender address (must match a verified MisarMail account)"
    },
    "html": {
      "type": "string",
      "description": "HTML body (max 500KB, recommended)"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tags for tracking (max 10, each max 64 chars)"
    },
    "text": {
      "type": "string",
      "description": "Plain text body (max 500KB, fallback for HTML)"
    },
    "subject": {
      "type": "string",
      "description": "Email subject (max 998 chars)"
    },
    "alias_id": {
      "type": "string",
      "description": "Route via a specific alias SMTP pool"
    },
    "metadata": {
      "type": "object",
      "description": "Custom metadata key-value pairs (max 20 pairs)"
    },
    "reply_to": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      },
      "description": "Reply-to address"
    },
    "idempotency_key": {
      "type": "string",
      "description": "Unique key to prevent duplicate sends (max 128 chars)"
    }
  }
}
send_email annotations
{
  "title": "Send email",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_emails
Advertised by the server during the last successful anonymous check.
Advertised read-only

List emails from a mailbox folder with optional full-text search across subject and body. Use this for reading the unified inbox; use list_campaigns for marketing sends.

list_emails input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Number of emails to return (default 20, max 50)"
    },
    "folder": {
      "enum": [
        "inbox",
        "sent",
        "drafts",
        "archive",
        "spam",
        "trash",
        "starred"
      ],
      "type": "string",
      "description": "Folder to list (default: inbox)"
    },
    "search": {
      "type": "string",
      "description": "Search query across subject and body"
    }
  }
}
list_emails annotations
{
  "title": "List emails",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_email
Advertised by the server during the last successful anonymous check.

Read the full content of a single email by ID, including headers, body, and attachments metadata. Side effect: marks the email as read.

get_email input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Email ID (UUID)"
    }
  }
}
get_email annotations
{
  "title": "Read email",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
reply_to_email
Advertised by the server during the last successful anonymous check.
Open-world

Reply to an existing email thread. The sender address and threading headers are derived from the original message, so only the body is required.

reply_to_email input schema
{
  "type": "object",
  "required": [
    "email_id"
  ],
  "properties": {
    "html": {
      "type": "string",
      "description": "HTML reply body"
    },
    "text": {
      "type": "string",
      "description": "Plain text reply body"
    },
    "email_id": {
      "type": "string",
      "description": "ID of the email to reply to"
    }
  }
}
reply_to_email annotations
{
  "title": "Reply to email",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
archive_email
Advertised by the server during the last successful anonymous check.

Move an email to the archive folder. Reversible — the message is not deleted.

archive_email input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Email ID to archive"
    }
  }
}
archive_email annotations
{
  "title": "Archive email",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
validate_email
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Validate an email address before sending: syntax, MX records, disposable-domain and role-account detection. Use this to protect sender reputation on imported lists.

validate_email input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to validate"
    }
  }
}
validate_email annotations
{
  "title": "Validate address",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_campaigns
Advertised by the server during the last successful anonymous check.
Advertised read-only

List email marketing campaigns with their status, audience size, and headline metrics. Filter by status to find drafts ready to send or campaigns still sending.

list_campaigns input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20, max 100)"
    },
    "status": {
      "enum": [
        "draft",
        "scheduled",
        "sending",
        "sent",
        "paused",
        "failed"
      ],
      "type": "string",
      "description": "Filter by campaign status"
    }
  }
}
list_campaigns annotations
{
  "title": "List campaigns",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_campaign
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get full details for one campaign: content, audience segment, schedule, and delivery statistics (sent, opened, clicked, bounced, complained).

get_campaign input schema
{
  "type": "object",
  "required": [
    "campaign_id"
  ],
  "properties": {
    "campaign_id": {
      "type": "string",
      "description": "Campaign ID (UUID)"
    }
  }
}
get_campaign annotations
{
  "title": "Get campaign",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_campaign
Advertised by the server during the last successful anonymous check.

Create a new email marketing campaign as a draft. Creating never sends or schedules anything — once the content and audience are confirmed, call send_campaign to send it now or schedule it for later.

create_campaign input schema
{
  "type": "object",
  "required": [
    "name",
    "subject",
    "from_email",
    "from_name"
  ],
  "properties": {
    "html": {
      "type": "string",
      "description": "HTML body content"
    },
    "name": {
      "type": "string",
      "description": "Internal campaign name (not shown to recipients)"
    },
    "text": {
      "type": "string",
      "description": "Plain text body content"
    },
    "subject": {
      "type": "string",
      "description": "Subject line recipients will see"
    },
    "reply_to": {
      "type": "string",
      "description": "Reply-to address"
    },
    "from_name": {
      "type": "string",
      "description": "Sender display name (required)"
    },
    "from_email": {
      "type": "string",
      "description": "Verified sender address"
    },
    "segment_id": {
      "type": "string",
      "description": "Audience segment to send to"
    },
    "template_id": {
      "type": "string",
      "description": "Use a saved template instead of inline HTML"
    }
  }
}
create_campaign annotations
{
  "title": "Create campaign",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
send_campaign
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Send a campaign now, or schedule it for a future time by passing scheduled_at. This delivers real email to real recipients and cannot be undone once sending starts — confirm the audience with get_campaign first.

send_campaign input schema
{
  "type": "object",
  "required": [
    "campaign_id"
  ],
  "properties": {
    "campaign_id": {
      "type": "string",
      "description": "Campaign ID (UUID)"
    },
    "scheduled_at": {
      "type": "string",
      "description": "ISO 8601 timestamp to schedule instead of sending immediately"
    }
  }
}
send_campaign annotations
{
  "title": "Send campaign",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
list_contacts
Advertised by the server during the last successful anonymous check.
Advertised read-only

List contacts with their subscription status and engagement metrics. Filter by status to find unsubscribed or bounced addresses that should be excluded from sends.

list_contacts input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20, max 100)"
    },
    "search": {
      "type": "string",
      "description": "Search across email, name, and company"
    },
    "status": {
      "enum": [
        "subscribed",
        "unsubscribed",
        "bounced",
        "complained"
      ],
      "type": "string",
      "description": "Filter by subscription status"
    }
  }
}
list_contacts annotations
{
  "title": "List contacts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_contact
Advertised by the server during the last successful anonymous check.

Add a single contact. Adding a contact records consent to email them — only add addresses that opted in, or the send will damage sender reputation and may breach CAN-SPAM/GDPR.

create_contact input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Segmentation tags"
    },
    "email": {
      "type": "string",
      "description": "Contact email address"
    },
    "source": {
      "type": "string",
      "description": "Where this contact came from (max 100 chars)"
    },
    "last_name": {
      "type": "string",
      "description": "Last name (max 100 chars)"
    },
    "first_name": {
      "type": "string",
      "description": "First name (max 100 chars)"
    },
    "custom_fields": {
      "type": "object",
      "description": "Custom key-value attributes"
    }
  }
}
create_contact annotations
{
  "title": "Create contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
update_contact
Advertised by the server during the last successful anonymous check.
Advertised destructive

Update an existing contact by email address, including changing subscription status. Setting status to unsubscribed immediately excludes them from every future campaign. Does not support tags, phone, company, or job title — the API has no fields for them.

update_contact input schema
{
  "type": "object",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address identifying the contact"
    },
    "status": {
      "enum": [
        "subscribed",
        "unsubscribed",
        "bounced",
        "complained"
      ],
      "type": "string",
      "description": "New subscription status"
    },
    "last_name": {
      "type": "string",
      "description": "Last name"
    },
    "first_name": {
      "type": "string",
      "description": "First name"
    },
    "custom_fields": {
      "type": "object",
      "description": "Custom key-value attributes to merge"
    }
  }
}
update_contact annotations
{
  "title": "Update contact",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
import_contacts
Advertised by the server during the last successful anonymous check.
Advertised destructive

Bulk-import up to 5,000 contacts in one call. By default, addresses that already exist are skipped rather than duplicated — pass update_existing: true to update them instead. Returns per-row results so you can see which rows were rejected and why.

import_contacts input schema
{
  "type": "object",
  "required": [
    "contacts"
  ],
  "properties": {
    "contacts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "email": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          }
        }
      },
      "description": "Contacts to import (max 5000)"
    },
    "update_existing": {
      "type": "boolean",
      "description": "Update contacts that already exist instead of skipping them (default false)"
    }
  }
}
import_contacts annotations
{
  "title": "Import contacts",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
get_contact_score
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get engagement score, engagement tier, and churn risk for one contact — or the lowest-engagement contacts across the list when contact_id is omitted. Use before a re-engagement campaign.

get_contact_score input schema
{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "description": "Contact ID to score (omit to return the lowest-engagement contacts)"
    }
  }
}
get_contact_score annotations
{
  "title": "Contact engagement score",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_templates
Advertised by the server during the last successful anonymous check.
Advertised read-only

List saved email templates with their variable placeholders, so you can pick one for a campaign or transactional send.

list_templates input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "type": {
      "enum": [
        "transactional",
        "marketing",
        "automation"
      ],
      "type": "string",
      "description": "Filter by template type"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    }
  }
}
list_templates annotations
{
  "title": "List templates",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_template
Advertised by the server during the last successful anonymous check.

Create a reusable email template. Use {{variable}} placeholders for personalisation — they are substituted at send time and previewable via render_template.

create_template input schema
{
  "type": "object",
  "required": [
    "name",
    "subject",
    "html"
  ],
  "properties": {
    "html": {
      "type": "string",
      "description": "HTML body (supports {{variables}})"
    },
    "name": {
      "type": "string",
      "description": "Template name"
    },
    "text": {
      "type": "string",
      "description": "Plain text fallback body"
    },
    "type": {
      "enum": [
        "transactional",
        "marketing",
        "automation"
      ],
      "type": "string",
      "description": "Template type (default: marketing)"
    },
    "subject": {
      "type": "string",
      "description": "Default subject line (supports {{variables}})"
    },
    "variables": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Declared variable names used in the template"
    }
  }
}
create_template annotations
{
  "title": "Create template",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
render_template
Advertised by the server during the last successful anonymous check.
Advertised read-only

Render a template with sample variables and return the resulting HTML and subject. Use this to preview personalisation before sending anything.

render_template input schema
{
  "type": "object",
  "required": [
    "template_id"
  ],
  "properties": {
    "variables": {
      "type": "object",
      "description": "Variable values to substitute, e.g. { \"first_name\": \"Ada\" }"
    },
    "template_id": {
      "type": "string",
      "description": "Template ID to render"
    }
  }
}
render_template annotations
{
  "title": "Render template",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_automations
Advertised by the server during the last successful anonymous check.
Advertised read-only

List automation workflows (welcome series, re-engagement, drip sequences) with their trigger type and active state.

list_automations input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    },
    "status": {
      "enum": [
        "active",
        "paused",
        "draft"
      ],
      "type": "string",
      "description": "Filter by automation status"
    }
  }
}
list_automations annotations
{
  "title": "List automations",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_automation
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one automation workflow in full: trigger, every step with its delay, and per-step completion stats.

get_automation input schema
{
  "type": "object",
  "required": [
    "automation_id"
  ],
  "properties": {
    "automation_id": {
      "type": "string",
      "description": "Automation ID (UUID)"
    }
  }
}
get_automation annotations
{
  "title": "Get automation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_automation
Advertised by the server during the last successful anonymous check.
Open-world

Create an automation workflow from a trigger, saved as a paused draft. The API's create endpoint only accepts a name and trigger — it has no fields for workflow steps or starting active; configure the step sequence in the MisarMail dashboard's visual builder, and use toggle_automation to activate once reviewed.

create_automation input schema
{
  "type": "object",
  "required": [
    "name",
    "trigger"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Automation name"
    },
    "trigger": {
      "enum": [
        "contact_created",
        "tag_added",
        "campaign_opened",
        "link_clicked",
        "date_based"
      ],
      "type": "string",
      "description": "Event that starts the workflow"
    },
    "trigger_config": {
      "type": "object",
      "description": "Trigger parameters, e.g. { \"tag\": \"trial\" } for tag_added"
    }
  }
}
create_automation annotations
{
  "title": "Create automation",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
toggle_automation
Advertised by the server during the last successful anonymous check.
Open-world

Activate or pause an automation. Activating starts enrolling contacts and sending on the configured schedule.

toggle_automation input schema
{
  "type": "object",
  "required": [
    "automation_id",
    "active"
  ],
  "properties": {
    "active": {
      "type": "boolean",
      "description": "true to activate, false to pause"
    },
    "automation_id": {
      "type": "string",
      "description": "Automation ID (UUID)"
    }
  }
}
toggle_automation annotations
{
  "title": "Toggle automation",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_ab_tests
Advertised by the server during the last successful anonymous check.
Advertised read-only

List A/B tests with per-variant results and whether a winner has been selected yet.

list_ab_tests input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "type": {
      "enum": [
        "campaign",
        "subject"
      ],
      "type": "string",
      "description": "Filter by test source: 'campaign' for campaign A/B tests (subject/content/send_time/from_name variants on a campaign), 'subject' for standalone subject-line tests"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    }
  }
}
list_ab_tests annotations
{
  "title": "List A/B tests",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_ab_test
Advertised by the server during the last successful anonymous check.
Open-world

Create one A/B test variant on a campaign. The real API stores a single variant per call, so build a test by calling this once per variant (e.g. twice for a plain A/B split) using the same campaign_id and distinct `variant` labels. Each variant gets send_percent of the audience; auto_select_winner (with winner_wait_hours) can pick and send the winner automatically, or use select_ab_test_winner to do it manually.

create_ab_test input schema
{
  "type": "object",
  "required": [
    "campaign_id",
    "variant"
  ],
  "properties": {
    "subject": {
      "type": "string",
      "description": "Subject line for subject tests"
    },
    "variant": {
      "type": "string",
      "description": "Variant label, e.g. 'A' or 'B' (max 5 chars)"
    },
    "body_html": {
      "type": "string",
      "description": "Body HTML for content tests"
    },
    "from_name": {
      "type": "string",
      "description": "Sender name for from_name tests"
    },
    "preheader": {
      "type": "string",
      "description": "Preheader text for preheader tests"
    },
    "test_type": {
      "enum": [
        "content",
        "subject",
        "send_time",
        "from_name",
        "preheader"
      ],
      "type": "string",
      "description": "What this variant differs on (default: content)"
    },
    "campaign_id": {
      "type": "string",
      "description": "Campaign to test (UUID)"
    },
    "send_time_a": {
      "type": "string",
      "description": "ISO timestamp for this variant's send_time slot A"
    },
    "send_time_b": {
      "type": "string",
      "description": "ISO timestamp for this variant's send_time slot B"
    },
    "send_percent": {
      "type": "number",
      "description": "Percent of the audience that receives this variant (1-99, default 50)"
    },
    "winner_wait_hours": {
      "type": "number",
      "description": "Hours to wait before auto-selecting a winner (1-168, default 4)"
    },
    "auto_select_winner": {
      "type": "boolean",
      "description": "Automatically select and send the winner after winner_wait_hours (default false)"
    }
  }
}
create_ab_test annotations
{
  "title": "Create A/B test",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
select_ab_test_winner
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Select the winning variant and send it to the remaining audience. This triggers a real send to everyone who was held back — it cannot be undone.

select_ab_test_winner input schema
{
  "type": "object",
  "required": [
    "test_id",
    "winner_variant"
  ],
  "properties": {
    "metric": {
      "enum": [
        "opens",
        "clicks",
        "revenue",
        "conversions"
      ],
      "type": "string",
      "description": "Metric the decision was based on (default opens)"
    },
    "test_id": {
      "type": "string",
      "description": "A/B test ID"
    },
    "winner_variant": {
      "type": "string",
      "description": "Label of the winning variant, e.g. B"
    }
  }
}
select_ab_test_winner annotations
{
  "title": "Select A/B winner",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
get_analytics
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get delivery and engagement analytics — sent, delivered, opened, clicked, bounced, and complained — for the account or one campaign, grouped by day/week/month.

get_analytics input schema
{
  "type": "object",
  "properties": {
    "period": {
      "enum": [
        "today",
        "7d",
        "30d",
        "90d"
      ],
      "type": "string",
      "description": "Shorthand window used when start_date is omitted (default 30d)"
    },
    "end_date": {
      "type": "string",
      "description": "End date, ISO 8601"
    },
    "group_by": {
      "enum": [
        "day",
        "week",
        "month"
      ],
      "type": "string",
      "description": "Time bucket for the series (default day)"
    },
    "start_date": {
      "type": "string",
      "description": "Start date, ISO 8601 (e.g. 2026-01-01)"
    },
    "campaign_id": {
      "type": "string",
      "description": "Limit to one campaign (omit for account-wide)"
    }
  }
}
get_analytics annotations
{
  "title": "Get analytics",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_analytics_timeline
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get a day/week/month breakdown of sent, delivered, opened, clicked, bounced, complained, replied, and unsubscribed — across every send medium (campaigns, inbox compose, API, MCP, SDKs, GraphQL, automations). The timeline counterpart to get_analytics's period totals.

get_analytics_timeline input schema
{
  "type": "object",
  "properties": {
    "period": {
      "enum": [
        "today",
        "7d",
        "30d",
        "90d"
      ],
      "type": "string",
      "description": "Shorthand window used when start_date is omitted (default 30d)"
    },
    "end_date": {
      "type": "string",
      "description": "End date, ISO 8601"
    },
    "group_by": {
      "enum": [
        "day",
        "week",
        "month"
      ],
      "type": "string",
      "description": "Time bucket for each row (default day)"
    },
    "start_date": {
      "type": "string",
      "description": "Start date, ISO 8601 (e.g. 2026-01-01)"
    }
  }
}
get_analytics_timeline annotations
{
  "title": "Get analytics timeline",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_report
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate a structured analytics report over a date range. Report types: campaign_performance, engagement_funnel, cohort_analysis, and send_time_heatmap (best hour/day to send).

generate_report input schema
{
  "type": "object",
  "required": [
    "report_type"
  ],
  "properties": {
    "date_to": {
      "type": "string",
      "description": "End date, ISO 8601 (default: today)"
    },
    "date_from": {
      "type": "string",
      "description": "Start date, ISO 8601 (default: 30 days ago)"
    },
    "report_type": {
      "enum": [
        "campaign_performance",
        "engagement_funnel",
        "cohort_analysis",
        "send_time_heatmap"
      ],
      "type": "string",
      "description": "Type of report to generate"
    }
  }
}
generate_report annotations
{
  "title": "Generate report",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_revenue_attribution
Advertised by the server during the last successful anonymous check.
Advertised read-only

Attribute ecommerce revenue to email — revenue per campaign, per contact, and average order value from tracked conversions.

get_revenue_attribution input schema
{
  "type": "object",
  "properties": {
    "period": {
      "enum": [
        "today",
        "7d",
        "30d",
        "90d"
      ],
      "type": "string",
      "description": "Time window (default 30d)"
    },
    "campaign_id": {
      "type": "string",
      "description": "Limit to one campaign"
    }
  }
}
get_revenue_attribution annotations
{
  "title": "Revenue attribution",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_monetization_stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get newsletter monetization stats: paid subscribers, MRR, churn, and sponsorship revenue for the period.

get_monetization_stats input schema
{
  "type": "object",
  "properties": {
    "period": {
      "enum": [
        "today",
        "7d",
        "30d",
        "90d"
      ],
      "type": "string",
      "description": "Time window (default 30d)"
    }
  }
}
get_monetization_stats annotations
{
  "title": "Monetization stats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_deliverability_score
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the account deliverability score (0–100) and letter grade (A–F) with the factors dragging it down. Start here when asked why emails are landing in spam.

get_deliverability_score input schema
{
  "type": "object",
  "properties": {}
}
get_deliverability_score annotations
{
  "title": "Deliverability score",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
run_deliverability_audit
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Run a full deliverability audit across authentication (SPF/DKIM/DMARC), domain reputation, list hygiene, content signals, and blocklist status. Returns prioritized findings.

run_deliverability_audit input schema
{
  "type": "object",
  "properties": {}
}
run_deliverability_audit annotations
{
  "title": "Deliverability audit",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_warmup_status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get IP/domain warm-up progress and today's remaining send capacity. Exceeding warm-up capacity on a new domain is the fastest way to get throttled or blocklisted.

get_warmup_status input schema
{
  "type": "object",
  "properties": {}
}
get_warmup_status annotations
{
  "title": "Warm-up status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_dmarc
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check live SPF, DKIM, and DMARC DNS records for a domain and report alignment problems with the exact record to publish. Works for any domain, not only your own.

check_dmarc input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to check, e.g. example.com"
    }
  }
}
check_dmarc annotations
{
  "title": "Check DMARC/SPF/DKIM",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_domains
Advertised by the server during the last successful anonymous check.
Advertised read-only

List sending domains with verification status and their DKIM/SPF/DMARC records. Check here first when a send fails with an unverified-sender error.

list_domains input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    }
  }
}
list_domains annotations
{
  "title": "List domains",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
add_domain
Advertised by the server during the last successful anonymous check.

Add a sending domain and return the DNS records to publish. The domain cannot send until those records are live and verify_domain succeeds.

add_domain input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to add, e.g. example.com"
    }
  }
}
add_domain annotations
{
  "title": "Add domain",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
verify_domain
Advertised by the server during the last successful anonymous check.
Open-world

Re-check a domain's DNS records and mark it verified if they resolve. Safe to retry — DNS propagation can take up to 48 hours.

verify_domain input schema
{
  "type": "object",
  "required": [
    "domain_id"
  ],
  "properties": {
    "domain_id": {
      "type": "string",
      "description": "Domain ID returned by add_domain"
    }
  }
}
verify_domain annotations
{
  "title": "Verify domain",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
configure_inbound_domain
Advertised by the server during the last successful anonymous check.
Open-world

Configure inbound email routing for a subdomain so replies land in the MisarMail unified inbox. Returns the MX record to publish.

configure_inbound_domain input schema
{
  "type": "object",
  "required": [
    "domain",
    "subdomain",
    "webhook_url"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Root domain, e.g. example.com"
    },
    "subdomain": {
      "type": "string",
      "description": "Inbound subdomain label, e.g. reply"
    },
    "webhook_url": {
      "type": "string",
      "description": "HTTPS URL to POST inbound messages to (required)"
    }
  }
}
configure_inbound_domain annotations
{
  "title": "Configure inbound",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_forms
Advertised by the server during the last successful anonymous check.
Advertised read-only

List signup forms with their embed status and conversion counts.

list_forms input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    },
    "status": {
      "enum": [
        "active",
        "inactive"
      ],
      "type": "string",
      "description": "Filter by form status"
    }
  }
}
list_forms annotations
{
  "title": "List forms",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_form
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one signup form including its fields, embed code, and redirect behaviour.

get_form input schema
{
  "type": "object",
  "required": [
    "form_id"
  ],
  "properties": {
    "form_id": {
      "type": "string",
      "description": "Form ID (UUID)"
    }
  }
}
get_form annotations
{
  "title": "Get form",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_form_submissions
Advertised by the server during the last successful anonymous check.
Advertised read-only

List submissions for a signup form, including the submitted field values and timestamps.

get_form_submissions input schema
{
  "type": "object",
  "required": [
    "form_id"
  ],
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    },
    "form_id": {
      "type": "string",
      "description": "Form ID (UUID)"
    }
  }
}
get_form_submissions annotations
{
  "title": "Form submissions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_landing_page
Advertised by the server during the last successful anonymous check.
Open-world

Create a hosted landing page with a single hero block (headline, subheadline, CTA). Returns the public URL. The real API stores pages as a page-builder block array with no dedicated headline/CTA fields, so this tool translates your inputs into one 'hero' block — for multi-block pages or a real CTA link, use the landing page editor in the MisarMail dashboard.

create_landing_page input schema
{
  "type": "object",
  "required": [
    "name",
    "headline"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Page title"
    },
    "slug": {
      "type": "string",
      "description": "URL slug (auto-generated from name when omitted)"
    },
    "cta_text": {
      "type": "string",
      "description": "Call-to-action button text"
    },
    "headline": {
      "type": "string",
      "description": "Headline shown to visitors"
    },
    "subheadline": {
      "type": "string",
      "description": "Supporting line under the headline"
    }
  }
}
create_landing_page annotations
{
  "title": "Create landing page",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_marketplace_items
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse the MisarMail template marketplace for ready-made email and automation templates.

list_marketplace_items input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    },
    "search": {
      "type": "string",
      "description": "Search marketplace listings"
    },
    "category": {
      "type": "string",
      "description": "Filter by category, e.g. newsletter, ecommerce"
    }
  }
}
list_marketplace_items annotations
{
  "title": "Browse marketplace",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_marketplace_item
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one marketplace listing with its full preview, author, and install count.

get_marketplace_item input schema
{
  "type": "object",
  "required": [
    "item_id"
  ],
  "properties": {
    "item_id": {
      "type": "string",
      "description": "Marketplace item ID"
    }
  }
}
get_marketplace_item annotations
{
  "title": "Get marketplace item",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_inbox_conversations
Advertised by the server during the last successful anonymous check.
Advertised read-only

List unified-inbox conversations (threads) with their status and detected intent. Use this for triage; use list_emails for individual messages in a folder.

list_inbox_conversations input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Free-text search across the thread"
    },
    "limit": {
      "type": "number",
      "description": "Results to return (default 20)"
    },
    "intent": {
      "type": "string",
      "description": "Filter by detected intent, e.g. interested, unsubscribe, question"
    },
    "offset": {
      "type": "number",
      "description": "Offset for pagination"
    },
    "status": {
      "enum": [
        "open",
        "pending",
        "closed"
      ],
      "type": "string",
      "description": "Filter by conversation status"
    },
    "channel": {
      "type": "string",
      "description": "Filter by channel, e.g. email"
    }
  }
}
list_inbox_conversations annotations
{
  "title": "List conversations",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_inbox_conversation_messages
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get every message in one inbox conversation, oldest first, with sender and timestamps.

get_inbox_conversation_messages input schema
{
  "type": "object",
  "required": [
    "conversation_id"
  ],
  "properties": {
    "conversation_id": {
      "type": "string",
      "description": "Conversation ID (UUID)"
    }
  }
}
get_inbox_conversation_messages annotations
{
  "title": "Conversation messages",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
categorize_inbox_emails
Advertised by the server during the last successful anonymous check.

Run AI categorisation over a batch of inbox emails to label intent and priority. Consumes AI credits — pass only the emails you actually need triaged.

categorize_inbox_emails input schema
{
  "type": "object",
  "required": [
    "email_ids"
  ],
  "properties": {
    "email_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Email IDs to categorise (max 50 per call)"
    }
  }
}
categorize_inbox_emails annotations
{
  "title": "Categorize inbox",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_api_keys
Advertised by the server during the last successful anonymous check.
Advertised read-only

List API keys on the account with their scopes and last-used time. Key secrets are never returned — only metadata.

list_api_keys input schema
{
  "type": "object",
  "properties": {}
}
list_api_keys annotations
{
  "title": "List API keys",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_subject_lines
Advertised by the server during the last successful anonymous check.
Open-world

Generate AI subject-line variants for a campaign topic, optionally tuned to a tone and audience. Good input for create_ab_test.

generate_subject_lines input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "tone": {
      "enum": [
        "professional",
        "casual",
        "urgent",
        "playful",
        "informative"
      ],
      "type": "string",
      "description": "Desired tone (default professional)"
    },
    "count": {
      "type": "number",
      "description": "How many variants to generate (default 5, max 10)"
    },
    "topic": {
      "type": "string",
      "description": "What the email is about"
    },
    "audience": {
      "type": "string",
      "description": "Who the email is for"
    }
  }
}
generate_subject_lines annotations
{
  "title": "Generate subject lines",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_integrations
Advertised by the server during the last successful anonymous check.
Advertised read-only

List connected third-party integrations and their sync status.

list_integrations input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "number",
      "description": "Page number (default 1)"
    },
    "limit": {
      "type": "number",
      "description": "Results per page (default 20)"
    }
  }
}
list_integrations annotations
{
  "title": "List integrations",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_integration
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one integration's configuration, scopes, and last sync result.

get_integration input schema
{
  "type": "object",
  "required": [
    "integration_id"
  ],
  "properties": {
    "integration_id": {
      "type": "string",
      "description": "Integration ID"
    }
  }
}
get_integration annotations
{
  "title": "Get integration",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
toggle_integration
Advertised by the server during the last successful anonymous check.
Open-world

Enable or disable an integration. Disabling stops all syncing but preserves the stored credentials.

toggle_integration input schema
{
  "type": "object",
  "required": [
    "integration_id",
    "enabled"
  ],
  "properties": {
    "enabled": {
      "type": "boolean",
      "description": "true to enable, false to disable"
    },
    "integration_id": {
      "type": "string",
      "description": "Integration ID"
    }
  }
}
toggle_integration annotations
{
  "title": "Toggle integration",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_sandbox_sends
Advertised by the server during the last successful anonymous check.
Advertised read-only

List emails captured by sandbox mode. Sandbox intercepts sends instead of delivering them — use it to verify templates and automations without emailing anyone.

list_sandbox_sends input schema
{
  "type": "object",
  "properties": {}
}
list_sandbox_sends annotations
{
  "title": "List sandbox sends",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
clear_sandbox
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete every captured sandbox email. Affects only intercepted test messages, never real sent mail.

clear_sandbox input schema
{
  "type": "object",
  "properties": {}
}
clear_sandbox annotations
{
  "title": "Clear sandbox",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
upgrade
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Show the current MisarMail plan, how much of each quota is left, and what upgrading unlocks, with the link to upgrade. Call it any time — not only after hitting a limit. Reads only: it never changes the plan or takes payment; the user upgrades by following the link. On a local install, open=true also opens that link in the user's browser.

upgrade input schema
{
  "type": "object",
  "properties": {
    "open": {
      "type": "boolean",
      "description": "Local installs only: also open the upgrade link in the user's browser. Ignored by the hosted server, which returns the link instead."
    },
    "plan": {
      "type": "string",
      "description": "Plan slug to open (e.g. 'pro', 'max'). Defaults to the recommended plan."
    }
  }
}
upgrade annotations
{
  "title": "Plan usage and upgrade",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

8 advertised

compose_email

Advertised by the server during the last successful anonymous check.

Draft a professional email and send it via MisarMail after confirmation.

purpose
Purpose (welcome, follow-up, announcement…) (required)
tone
professional | friendly | formal | playful
recipient_name
Name of the recipient
campaign_performance_report

Advertised by the server during the last successful anonymous check.

Analyse campaign performance and produce prioritized improvements.

period
today | 7d | 30d | 90d
contact_import_guide

Advertised by the server during the last successful anonymous check.

Import and organise contacts safely, with consent and hygiene checks.

source
CSV, CRM, spreadsheet…
automation_builder_guide

Advertised by the server during the last successful anonymous check.

Design and build an email automation workflow step by step.

goal
welcome series, re-engagement, onboarding…
deliverability_improvement_plan

Advertised by the server during the last successful anonymous check.

Diagnose deliverability and produce a prioritized weekly action plan.

No arguments advertised.

ab_test_plan

Advertised by the server during the last successful anonymous check.

Design a statistically meaningful A/B test for a campaign.

campaign_id
Campaign to test
hypothesis
What you believe will improve results
list_hygiene_audit

Advertised by the server during the last successful anonymous check.

Find and clean the contacts that are hurting sender reputation.

No arguments advertised.

weekly_email_report

Advertised by the server during the last successful anonymous check.

Produce a stakeholder-ready weekly email performance summary.

period
today | 7d | 30d | 90d

Resources

4 advertised

Verified sending domains

Advertised by the server during the last successful anonymous check.

Your sending domains with verification state and DNS records. Read this before composing any send — an unverified sender is the most common send failure.

Verified sending domains URI
misarmail://account/domains

MIME type: application/json

Deliverability score

Advertised by the server during the last successful anonymous check.

Current account deliverability score (0–100), grade, and contributing factors.

Deliverability score URI
misarmail://account/deliverability

MIME type: application/json

Warm-up capacity

Advertised by the server during the last successful anonymous check.

IP/domain warm-up stage and remaining send capacity for today — the ceiling a bulk send must stay under.

Warm-up capacity URI
misarmail://account/warmup

MIME type: application/json

Email templates

Advertised by the server during the last successful anonymous check.

Saved templates with their declared variables, for reuse in campaigns and sends.

Email templates URI
misarmail://templates

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2796 ms
95th percentile latency
2796 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2796 ms · metadata changed · refuses unauthenticated resources/templates/list (HTTP 401)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http misar-mcp https://api.misar.io/mail/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add misar-mcp --url https://api.misar.io/mail/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable misar-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "misar-mcp": {
      "url": "https://api.misar.io/mail/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "misar-mcp": {
      "type": "streamableHttp",
      "url": "https://api.misar.io/mail/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start misar-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "misar-mcp": {
      "type": "http",
      "url": "https://api.misar.io/mail/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http misar-mcp https://api.misar.io/mail/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.misar.io/mail/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "misar-mcp": {
      "serverUrl": "https://api.misar.io/mail/mcp"
    }
  }
}

Let your agent find its tools

Find servers like MisarMail MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.