Free plan

MCP server for AI assistants

Connect Claude, Cursor or any MCP client to EveryPage so it can share PDFs as tracked links and report who read them.

The EveryPage MCP server lets an AI assistant use your EveryPage account: upload a PDF and hand back a tracked share link, then answer questions about who read it and how far they got.

It speaks the Model Context Protocol, so it works with any MCP client — Claude Code, the Claude apps, Cursor, VS Code, and others. It is open source (MIT) and published to npm as everypage-mcp.

Setup

Create an API key in your account settings — it starts with ep_live_ and is shown once — then point your client at the server.

Claude Code

claude mcp add everypage --env EVERYPAGE_API_KEY=ep_live_... -- npx -y everypage-mcp

Everything that reads a JSON config (Claude Desktop, Cursor, VS Code, …)

{
  "mcpServers": {
    "everypage": {
      "command": "npx",
      "args": ["-y", "everypage-mcp"],
      "env": { "EVERYPAGE_API_KEY": "ep_live_..." }
    }
  }
}

The server runs locally, launched by your client — there is nothing to host. It needs Node 20 or newer. Because it runs on your machine, it can read a PDF straight off your disk when you ask it to share one.

Configuration

VariableRequiredDefaultMeaning
EVERYPAGE_API_KEYyesAn API key (ep_live_…), or an OAuth access token (ep_at_…) limited to its granted scopes
EVERYPAGE_BASE_URLnohttps://everypage.coAPI origin override, for development instances
EVERYPAGE_READ_ONLYnofalsetrue exposes only the read-only tools — nothing can upload, change or delete

Tools

Fifteen tools, grouped by what you would actually ask for.

Documentseverypage_share_pdf (upload from a path or URL and return the share link, embed code and QR URL, applying share settings in the same call), everypage_list_files, everypage_get_file, everypage_update_file_settings, everypage_delete_file, everypage_replace_content (Pro).

Readershipeverypage_get_readership (a summary: readers, read time, completion, countries, drop-off page, most re-read page) and everypage_list_events (recent reads, downloads or captured leads, with a polling cursor).

Per-recipient links (Pro) — everypage_create_variants, everypage_list_variants, everypage_update_variant, everypage_delete_variant.

Account and deliveryeverypage_list_webhooks, everypage_manage_webhook, everypage_account.

Two prompts ship as slash commands: readership_digest and send_tracked_copies.

Behaviour worth knowing

Any way of naming a document works. Every tool taking a document accepts a UUID, a short link id, or a share URL pasted from the browser — including /embed/ links and ones with ?via= on the end.

Your key stays local. It lives in your MCP client's config and is sent only to everypage.co. When you ask the server to share a PDF from a third-party URL, that download is made with no EveryPage credentials attached.

Uploads stream and are checked first. A local file is read off disk rather than into memory, and is verified as a PDF and checked against your plan's size cap before anything is sent.

Deleting is reversible by default. everypage_delete_file trashes the document; permanent destruction needs an explicit purge. Irreversible tools are marked with the protocol's destructiveHint, so clients that support confirmation prompts ask first. Set EVERYPAGE_READ_ONLY=true if you want write tools withheld entirely.

Event cursors are per stream. everypage_list_events returns a nextCursor valid only for the same type — the view, download and gate streams have independent id sequences. See Events feed.

Plan gating

The server works on every plan; what it can do follows the account. Sharing documents and reading readership work on free. Passcodes, view limits, read notifications and page-level statistics need Basic. Per-recipient links, the email-capture gate, content replacement, watermarks and page ranges need Pro. A refusal always names the plan required, so the assistant can tell you rather than retrying.