npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mailkite/mcp

v0.20.0

Published

Model Context Protocol server for MailKite — exposes the MailKite API to LLM agents as tools. A thin layer over the MailKite Node SDK and the shared sdks/spec contract.

Readme

Read-only mirror. This repo is a generated, release-time mirror of the MailKite monorepo (the private source of truth) — development doesn't happen here. Install from npm and open issues against the MailKite docs.

Install

{
  "mcpServers": {
    "mailkite": {
      "command": "npx",
      "args": ["-y", "@mailkite/mcp"],
      "env": { "MAILKITE_API_KEY": "mk_live_…" }
    }
  }
}

Tools

One tool per MailKite API method, generated from the shared contract. Full list + schemas: https://mailkite.dev/docs/libraries#mcp.

92 tools, generated from the shared API contract — the same spec the server registers at startup. * marks a required argument. Access: API key (mk_live_…), session (management token), or local (runs in-process, no network).

| Tool | Signature | Access | What it does | | --- | --- | --- | --- | | mailkite_send | from*: string, to*: any, subject: string, html: string, text: string, templateId: string, templateData: object, cc: any, bcc: any, replyTo: string, inReplyTo: string, headers: object, metadata: object, sequence: string, sequenceInput: object, attachments: array, scheduledAt: string,number, trackOpens: boolean, trackClicks: boolean | API key · write | Send a message over a verified domain. | | mailkite_send_batch | from*: string, recipients*: array, subject: string, html: string, text: string, templateId: string, templateData: object, headers: object, replyTo: string, inReplyTo: string, attachments: array, scheduledAt: string,number, trackOpens: boolean, trackClicks: boolean | API key · write | Send one personalized message per recipient (up to 50) in a single call. | | mailkite_send_event | name*: string, event: string, email: string, contactId: string, payload: object, dedupeKey: string | API key · write | Record one application-level fact about a user — user.created, trial.expiring, payment.failed. | | mailkite_list_events | — | API key · read | List recorded events, newest first — the surface for confirming a POST landed and for debugging a sequence that did not trigger. | | mailkite_list_event_names | — | API key · read | List the distinct event names this account works with, so an editor can offer them instead of asking you to remember one. | | mailkite_list_sequences | — | API key · read | List your sequences, newest first, each with live enrollment counts. | | mailkite_create_sequence | name*: string, status: string, from: string, input: object,null, triggers: array, steps*: array, reentry: string, exitOn: object,null | API key · write | Create a sequence: a declared input shape, the steps a contact walks over time, and zero or more triggers. | | mailkite_get_sequence | id* | API key · read | Get one sequence with its definition and live enrollment counts. | | mailkite_update_sequence | id*, name: string, status: string, from: string, input: object,null, triggers: array, steps: array, reentry: string, exitOn: object,null | API key · write | Edit a sequence. | | mailkite_delete_sequence | id* | API key · delete/replace | Delete a sequence and retire every contact still walking it. | | mailkite_list_triggers | id* | API key · read | List the triggers attached to a sequence — the doors into it. | | mailkite_create_trigger | id*, event*: string, filter: any, enabled: boolean | API key · write | Attach a trigger: when this event arrives, enroll the contact it is about. | | mailkite_update_trigger | id*, event: string, filter: any, enabled: boolean | API key · write | Edit a trigger, or toggle enabled to switch the door off without deleting it. | | mailkite_delete_trigger | id* | API key · delete/replace | Detach a trigger. | | mailkite_start_sequence | sequence*, email: string, contactId: string, from: string, input: object, cancelKey: string | API key · write | Start a sequence for one contact, directly — when your code already knows WHICH sequence it wants. | | mailkite_stop_sequence | cancelKey: string, sequence: string, email: string | API key · write | Stop whatever is chasing someone. | | mailkite_list_enrollments | id* | API key · read | List who is in a sequence and where each of them is. | | mailkite_get_enrollment | id* | API key · read | Get one enrollment — which sequence, which step, and what happens next. | | mailkite_list_enrollment_runs | id* | API key · read | Every step this enrollment has executed, with the outcome and the reason for it. | | mailkite_cancel_enrollment | id* | API key · delete/replace | Cancel one specific run by its enrollment id — the per-row action when you are looking at the enrollments table. | | mailkite_upload_attachment | filename: string, path: string, url: string, content: string, contentType: string, retentionDays: integer | API key · write | Upload a file to MailKite storage and get back a secure, time-limited URL. | | mailkite_list_templates | — | session · read | List your saved email templates (light metadata only — no body). | | mailkite_list_base_templates | — | session · read | List the premade base templates (light metadata). | | mailkite_get_template | id* | session · read | Get one template (full: subject, html, text, theme). | | mailkite_create_template | baseId: string, name: string, subject: string, html: string, text: string, json: string, theme: string | session · write | Create a template. | | mailkite_list_domains | — | session · read | List your domains, each with its webhook URL. | | mailkite_create_domain | domain*: string | session · write | Add a domain. | | mailkite_suggest_subdomain | — | session · read | Suggest a free, currently-unclaimed subdomain label to prefill the input with, plus the base zone it would live on. | | mailkite_check_subdomain | name* | session · read | Check whether a free subdomain label can be claimed. | | mailkite_claim_subdomain | subdomain*: string | session · write | Claim a free MailKite subdomain — a <label>.<base> host on a zone we run (call suggestSubdomain for the current base; the pool changes over time and more than one may be offered). | | mailkite_get_domain | id* | session · read | Get one domain with DNS records + webhook. | | mailkite_delete_domain | id* | session · delete/replace | Remove a domain. | | mailkite_verify_domain | id* | session · write | Check DNS and update status. | | mailkite_set_webhook | id*, url*: string | session · delete/replace | Set or replace the domain's catch-all webhook. | | mailkite_set_tracking_webhook | id*, url*: string | session · delete/replace | Set or replace the domain's dedicated tracking-event webhook: an HTTPS endpoint that receives signed email.* engagement events (email.sent / email.bounced / email.complained / email.opened / email.clicked, shaped per the tracking-event schema) SEPARATELY from inbound mail. | | mailkite_delete_tracking_webhook | id* | session · delete/replace | Remove the domain's tracking-event webhook (engagement events stop). | | mailkite_set_webhook_events | id*, events*: any | session · delete/replace | Opt the domain's inbound webhook into engagement events — one webhook, all events. | | mailkite_delete_webhook_events | id* | session · delete/replace | Opt the domain's inbound webhook back out of engagement events (inbound email.received only — the default). | | mailkite_delete_webhook | id* | session · delete/replace | Remove the domain's webhook. | | mailkite_test_webhook | id* | session · write | Send a signed test event to the domain's webhook. | | mailkite_check_domain_availability | domain* | session · read | Check whether a domain is available to register, and at what price. | | mailkite_register_domain | domain*: string, contact*: object, years: integer, dryRun: boolean | session · write | Register (buy) a domain on the customer's behalf; provisions mail DNS and adds it to the account in one call. | | mailkite_list_routes | — | session · read | List inbound routing rules. | | mailkite_create_route | match*: string, action: string, destination: string, agentPrompt: string, agentForwardTo: array, agentContext: string | session · write | Create a route (match, action, destination). | | mailkite_delete_route | id* | session · delete/replace | Delete an inbound routing rule by id. | | mailkite_agent | text*: string, subject: string, from: string, html: string, routeId: string, address: string, model: string | API key · write | Send a message to one of your inbox agents and get its reply. | | mailkite_route | routeId: string, address: string, from*: string, subject: string, text: string, html: string | API key · write | Route a message to one of your registered routes (by routeId or address), running that route's action — agent, webhook, or forward. | | mailkite_list_messages | — | session · read | List stored messages, newest first. | | mailkite_get_message | id* | session · read | Get a message with deliveries + attachments. | | mailkite_retry_delivery | id* | session · write | Re-deliver a stored message to its webhook. | | mailkite_retry_deliveries | deliveryIds: array, messageIds: array, threadIds: array | session · write | Replay a whole selection of webhook deliveries in one call — the bulk form of retryDelivery. | | mailkite_list_delivery_attempts | id* | session · read | Every captured attempt for one delivery, newest first: the request headers and payload we POSTed, and the status, headers, and body that came back. | | mailkite_deliver_to_route | id*, messageIds*: array | session · write | POST stored messages to one webhook route — including messages that arrived BEFORE the route existed, which no retry can reach (a retry replays an existing delivery row, and a new route has none). | | mailkite_list_route_candidates | id* | session · read | Stored inbound messages this route could be asked to deliver, newest first — the preview for replaying mail to a route defined after that mail arrived. | | mailkite_create_realtime_token | — | API key · write | Mint a short-lived, single-use token that authorises one Realtime API connection. | | mailkite_list_lists | — | session · read | List your contact lists (static, curated broadcast audiences), each with its member count. | | mailkite_create_list | name*: string | session · write | Create a contact list. | | mailkite_get_list | id* | session · read | Get one contact list with its member count. | | mailkite_update_list | id*, name*: string | session · write | Rename a contact list. | | mailkite_delete_list | id* | session · delete/replace | Delete a contact list. | | mailkite_list_list_contacts | id* | session · read | List the contacts that are members of a list, newest first. | | mailkite_add_list_contacts | id*, contactIds*: array | session · write | Add contacts (by id, ctr_…) to a list. | | mailkite_remove_list_contact | id*, contactId* | session · delete/replace | Remove one contact from a list (the contact itself is kept). | | mailkite_list_broadcasts | — | session · read | List your broadcasts (one-to-many sends) with status and send stats. | | mailkite_create_broadcast | name: string, from*: string, replyTo: string, subject: string, preview: string, audience: object, templateId: string, html: string, text: string, footerAddress: string | session · write | Create a broadcast draft. | | mailkite_get_broadcast | id* | session · read | Get one broadcast with its status and recipient summary. | | mailkite_update_broadcast | id*, name: string, from: string, replyTo: string, subject: string, preview: string, audience: object, templateId: string, html: string, text: string, footerAddress: string | session · write | Edit a draft broadcast (any of from/subject/audience/html/… ). | | mailkite_delete_broadcast | id* | session · delete/replace | Delete a broadcast draft. | | mailkite_send_broadcast | id*, scheduledAt: string | session · write | Send a broadcast now, or pass an ISO 8601 scheduledAt to schedule it. | | mailkite_verify_webhook | payload*: string, signature*: string, secret*: string, toleranceMs: integer | local · read | Verify the x-mailkite-signature header on an inbound webhook delivery. | | mailkite_semantic_search | query* | API key · read | Semantic search over the MailKite documentation — returns the most relevant doc sections for a natural-language query (hybrid vector + keyword search over https://mailkite.dev/docs). | | mailkite_register_oauth_client | redirect_uris*: array, client_name: string | session · write | Register an OAuth client for this installation (RFC 7591 dynamic client registration) — step 1 of linking an existing MailKite account to your app. | | mailkite_exchange_oauth_token | grant_type*: string, code: string, redirect_uri: string, client_id: string, code_verifier: string, refresh_token: string | session · write | Exchange an authorization code for an access token (or rotate a refresh token) — step 3 of linking. | | mailkite_get_api_key | — | session · read | Get the account's unrestricted API key (mk_live_…). | | mailkite_rotate_api_key | — | session · write | Rotate the account API key: the old key stops working immediately and a fresh one is returned. | | mailkite_list_scoped_keys | — | session · read | List the account's domain-scoped API keys. | | mailkite_create_scoped_key | domainId*: string, name: string | session · write | Create a key scoped to one domain. | | mailkite_delete_scoped_key | id* | session · delete/replace | Revoke a domain-scoped key. | | mailkite_list_app_passwords | — | session · read | List the account's app passwords. | | mailkite_create_app_password | domain*: string, domainId: string, address: string, protocols: array, label: string | session · write | Create an app password for one domain and address pattern. | | mailkite_update_app_password | id*, address: string, protocols: array, label: string | session · write | Change what an app password covers — its label, address pattern, or protocols. | | mailkite_rotate_app_password | id* | session · write | Replace an app password's secret, keeping its scope. | | mailkite_delete_app_password | id* | session · delete/replace | Revoke an app password. | | mailkite_list_mailbox_messages | address* | session · read | List a mailbox's messages, newest first. | | mailkite_get_mailbox_message_raw | uid*, address* | session · read | Fetch one message's raw RFC822 bytes from a mailbox. | | mailkite_set_mailbox_message_flags | uid*, address*, flags*: string | session · write | Replace a message's IMAP flags (e.g. | | mailkite_get_usage | — | session · read | Current billing-period usage: emails used vs the plan's included bucket (null = unlimited), AI actions, and the overage state that gates sending. | | mailkite_list_suppressions | — | session · read | List suppressed addresses (unsubscribes, hard bounces, spam complaints, manual). | | mailkite_add_suppression | email*: string, reason: string, note: string | session · write | Suppress an address so this account never sends to it again (reason defaults to manual). | | mailkite_remove_suppression | email* | session · delete/replace | Remove an address from the suppression list (URL-encode the email in the path). | | mailkite_register | email*: string, channel: string, ref: string, referrer: string | session · write | Create a MailKite account from just an email — no password. | | mailkite_me | — | API key · read | The account behind this credential: email, whether it is verified (sending is blocked until it is), and plan. |

Use it from an AI agent — MCP + Agent connectors

MailKite speaks the Model Context Protocol: every API method is a tool your AI assistant (Claude, Cursor, …) can call — send mail, manage domains, search the docs, and give an agent its own inbox. Full guide: https://mailkite.dev/docs/ai-agents.

Hosted (recommended) — one-click OAuth, no key to copy:

claude mcp add --transport http mailkite https://mcp.mailkite.dev/mcp

In Claude Code you can also install the plugin:

/plugin marketplace add mailkite/claude-code
/plugin install mailkite@mailkite

Any chat/UI agent: "Add the MCP server at https://mcp.mailkite.dev/mcp and authenticate in the browser when prompted."

Local (static key, offline / CI):

{ "mcpServers": { "mailkite": { "command": "npx", "args": ["-y", "@mailkite/mcp"], "env": { "MAILKITE_API_KEY": "mk_live_…" } } } }

Give an agent its own inbox. Route inbound mail to a built-in inbox agent (the agent route action) and it answers, files, or escalates on its own — see https://mailkite.dev/docs/ai-agents.

All MailKite libraries

Same contract, every language — pick the one for your stack (full list: https://mailkite.dev/docs/libraries):

| Library | Repo | Distribution | | --- | --- | --- | | MailKite for Node.js | mailkite-node | npm | | MailKite for Python | mailkite-python | PyPI | | MailKite for Ruby | mailkite-ruby | RubyGems | | MailKite for Java | mailkite-java | Maven Central | | MailKite for PHP | mailkite-php | Packagist | | MailKite for Go | mailkite-go | Go modules | | @mailkite/cli | mailkite-cli | npm | | @mailkite/mcp (this repo) | mailkite-mcp | npm | | @mailkite/client | mailkite-js | npm | | @mailkite/expo | mailkite-expo | npm | | MailKiteClient | mailkite-swift | Swift Package Manager | | dev.mailkite:mailkite-client | mailkite-kotlin | Maven Central | | mailkite_client | mailkite-flutter | pub.dev |

Docs & links

  • 📚 Documentation: https://mailkite.dev/docs
  • 📦 This library's guide: https://mailkite.dev/docs/libraries#mcp
  • 🤖 AI agents (MCP + inbox agents): https://mailkite.dev/docs/ai-agents
  • 🌐 Website: https://mailkite.dev
  • 🧭 All libraries: https://mailkite.dev/docs/libraries

Generated from the shared MailKite API contract. © MailKite.