Skip to the content
Agent Tools

Email Engagement Report in Pi

Events to recipient report. The MCP server is https://emailpld.openkrill.app/mcp. No key. The steps below are only for Pi. A call to engagement_report was checked against that server on 2026-10-08.

Connection
Streamable HTTP
API key
None needed
Free limit
200 calls a day
Protocol
MCP 2024-11-05

Questions it answers

Email Engagement Report turns a raw email event export into a per-recipient engagement report. Paste a Customer.io reporting webhook file as NDJSON or JSON. SendGrid and Mailgun event objects are accepted when their field names are present.

Add an optional recipient CSV with recipient_id, email and an external id such as npi. Add an optional campaign CSV with deployment_key, deployment_code, campaign_name, client and deploy_date.

It counts each event id once, joins events to recipients by id, delivery id or email, and applies editable rules. Machine opens from Apple privacy proxies and link-scanner clicks stay apart from human opens. Unique open and unique click are one per recipient per send. A bounce clears delivered. Opens and clicks outside the time window stay out of the file.

The answer has a per-send summary, a per-recipient table, a CSV, and an exceptions list of events with no recipient. The page at the tool host runs the same report on pasted text.

There is no account and nothing is stored. The report is computed for the call and is not kept or cached. The only lasting record is a daily count of calls per tool.

What it can do

  • Removes repeated events by event id
  • Joins events to recipients by id, delivery id or email
  • Keeps machine opens and link-scanner clicks apart from human opens
  • Counts unique open and unique click once per recipient per send
  • Clears delivered when a bounce arrives, inside an editable time window
  • Returns a summary, a recipient table, a CSV and unmatched events

Tools

  • engagement_report, Build an email engagement report. Use this when the user pastes a Customer.io reporting webhook export, or a SendGrid or Mailgun event file, and wants a per-recipient engagement report or CSV. Pass events as NDJSON or a JSON array. Optional recipients_csv uses recipient_id, email and npi or external_id. Optional campaigns_csv uses deployment_key and deployment_code. Returns a per-send summary, up to 500 recipient rows, a CSV of every row, and events with no recipient. Nothing is stored. Do not use it to send mail or to call a mail platform API.

Add Email Engagement Report in Pi

Pi does not speak MCP on its own. The pi-mcp-adapter extension (these steps match version 2.34.0) loads remote servers and keeps their schemas out of the prompt until you ask. Install it once, then restart Pi:

pi install npm:pi-mcp-adapter

Add the server to a shared MCP file. Use .mcp.json in the project if only that project needs Email Engagement Report, or ~/.config/mcp/mcp.json if you want it in every project. Pi also reads ~/.agents/mcp.json. A Pi-only override lives in ~/.pi/agent/mcp.json or .pi/mcp.json and wins over the shared file.

{
  "mcpServers": {
    "emailpld": {
      "url": "https://emailpld.openkrill.app/mcp",
      "lifecycle": "eager"
    }
  }
}

The url is enough. Do not set command: that field is for a local process. No API key header. lifecycle is eager so Pi connects at startup and can search tool names before the first call. A config that omits it still works: the first call connects. After restart, run /mcp and confirm the server is listed. Ask: Turn this Customer.io webhook export into a per-recipient engagement report. The adapter should offer engagement_report.

Leave directTools off unless you want those schemas in every turn. With a handful of tools the cost is small. The default proxy is the better fit: search for the tool, then call it. /mcp disable emailpld writes a project override in .pi/mcp.json without editing the shared file. Run /reload after that change.

Pi will not find this server by scanning Cursor or Claude config unless you run /mcp setup and import it. Putting the url in .mcp.json is the direct path and the one this page tests against. The server is the same public endpoint the other clients use, with the same limits and the same privacy rules.

A call checked on 2026-10-08

The events are made-up sample rows with one repeated event id, one machine open and one click. No real person is in the file. The request below was posted to https://emailpld.openkrill.app/mcp as tools/call. HTTP 200. Source: the Email Engagement Report server, read 2026-10-08.

{
  "method": "tools/call",
  "params": {
    "name": "engagement_report",
    "arguments": {
      "events": "{\"event_id\":\"e1\",\"object_type\":\"email\",\"metric\":\"sent\",\"timestamp\":1789480800,\"data\":{\"newsletter_id\":41,\"delivery_id\":\"D1\",\"identifiers\":{\"id\":\"R-1\",\"email\":\"ada@example.com\"}}}\n{\"event_id\":\"e1\",\"object_type\":\"email\",\"metric\":\"sent\",\"timestamp\":1789480801,\"data\":{\"newsletter_id\":41,\"delivery_id\":\"D1\",\"identifiers\":{\"id\":\"R-1\",\"email\":\"ada@example.com\"}}}\n{\"event_id\":\"e2\",\"object_type\":\"email\",\"metric\":\"opened\",\"timestamp\":1789480900,\"data\":{\"newsletter_id\":41,\"delivery_id\":\"D1\",\"identifiers\":{\"id\":\"R-1\"},\"prefetched\":true}}\n{\"event_id\":\"e3\",\"object_type\":\"email\",\"metric\":\"clicked\",\"timestamp\":1789481000,\"data\":{\"newsletter_id\":41,\"delivery_id\":\"D1\",\"identifiers\":{\"id\":\"R-1\"}}}",
      "recipients_csv": "recipient_id,email,npi\nR-1,ada@example.com,9999000001\n"
    }
  }
}
  • duplicates removed. 1
  • recipients. 1 returned
  • unique open. 1
  • unique click. 1
  • notice. Computed for this call only. Nothing is stored.

Repeat the call yourself if you need a newer reading. Cached answers expire. A rate limit is not a result: wait and try again. Nothing in the call is a ranking, a filing, or advice.

Use it in other apps

Frequently asked questions

How do I install the Email Engagement Report MCP server in Pi?

Add the server configuration pointing to https://emailpld.openkrill.app/mcp using streamable HTTP in Pi. Follow the client configuration steps and restart Pi.

Do I need an API key to run Email Engagement Report in Pi?

No API key is needed to connect and run calls. The server provides an unpaid network allowance. An optional key can be supplied for higher limits.

What should I do if Email Engagement Report does not connect in Pi?

Check that your client config uses the streamable HTTP endpoint https://emailpld.openkrill.app/mcp without local command wrappers, and restart your client.

Words on this page

Source: plugin listing for emailpld in this repository, and a live tools/call on 2026-10-08. As of 2026-10-08.