Developers · Model Context Protocol

Ask your AI assistant about your clients' sites

Our MCP server gives Claude, Cursor and other MCP clients read access to your portfolio, and lets them add sites on paid plans.

01 — What you need

What you need

An API key from Integrations → API keys (the same keys as the REST API), and the server URL:

https://expiryowl.com/api/mcp

Transport: Streamable HTTP, stateless, JSON responses. Auth: Authorization: Bearer eo_live_…. Same limits as the API: 120 requests a minute per key, and the Free plan is read-only.

02 — Claude Code

Claude Code

terminal
claude mcp add --transport http expiryowl https://expiryowl.com/api/mcp \
  --header "Authorization: Bearer eo_live_…"

Then ask: “Which of my client certificates expire in the next 30 days?” or “Add shop.northwind.example for Northwind Bakery.”

03 — Claude Desktop

Claude Desktop

Claude Desktop talks to remote servers through the mcp-remote bridge. Add this to claude_desktop_config.json (Settings → Developer → Edit config) and restart Claude:

claude_desktop_config.json
{
  "mcpServers": {
    "expiryowl": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://expiryowl.com/api/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer eo_live_…"
      }
    }
  }
}

The header value sits in env because some systems split arguments on spaces. Cursor and other clients that accept a remote URL with headers can use the URL and header directly.

04 — Tools

Tools

ToolArgumentsReturns
portfolio_summarynoneCounts by status, what expires within 30 days, overdue renewals, 47-day readiness, open incidents.
list_monitorsstatus?, client?Every site with certificate days left, domain days left and uptime.
get_monitoridOne site in full: certificate chain details, registration, DNS snapshot, open incidents.
list_expiringdays (1 to 365, default 30)Certificates and domains expiring within the window, soonest first.
list_incidentsstatus: open | resolved | allIncidents, newest first.
add_monitorhostname, client?Start watching a site. Not on the Free plan (read-only).

05 — Testing with curl

Testing with curl

list the tools
curl -s -X POST https://expiryowl.com/api/mcp \
  -H "Authorization: Bearer $EXPIRYOWL_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
call a tool
curl -s -X POST https://expiryowl.com/api/mcp \
  -H "Authorization: Bearer $EXPIRYOWL_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_expiring","arguments":{"days":30}}}'