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/mcpTransport: 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
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:
{
"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
| Tool | Arguments | Returns |
|---|---|---|
| portfolio_summary | none | Counts by status, what expires within 30 days, overdue renewals, 47-day readiness, open incidents. |
| list_monitors | status?, client? | Every site with certificate days left, domain days left and uptime. |
| get_monitor | id | One site in full: certificate chain details, registration, DNS snapshot, open incidents. |
| list_expiring | days (1 to 365, default 30) | Certificates and domains expiring within the window, soonest first. |
| list_incidents | status: open | resolved | all | Incidents, newest first. |
| add_monitor | hostname, client? | Start watching a site. Not on the Free plan (read-only). |
05 — Testing with curl
Testing with curl
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"}'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}}}'