MCP server
Let an AI assistant read your boards: what broke this week, which errors are new, whether a site is up, and the prompt to fix it. One remote server, your API key, nothing to install.
Connect a client
The server is at https://pagehum.com/api/mcp over streamable HTTP. Clients that support MCP sign-in only need that URL; see Sign in, or use a key. Otherwise create an API key (a read key is enough; tick write only if the assistant should create sites) and add it as a Bearer header, as below.
Claude Code
claude mcp add --transport http pagehum https://pagehum.com/api/mcp \ --header "Authorization: Bearer phk_your_key"
Cursor
In ~/.cursor/mcp.json, or .cursor/mcp.json in a project:
{
"mcpServers": {
"pagehum": {
"url": "https://pagehum.com/api/mcp",
"headers": { "Authorization": "Bearer phk_your_key" }
}
}
}Claude Desktop
Through mcp-remote, in claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"pagehum": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://pagehum.com/api/mcp", "--header", "Authorization:${PAGEHUM_AUTH}"],
"env": { "PAGEHUM_AUTH": "Bearer phk_your_key" }
}
}
}Windsurf
In ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"pagehum": {
"serverUrl": "https://pagehum.com/api/mcp",
"headers": { "Authorization": "Bearer phk_your_key" }
}
}
}VS Code
In .vscode/mcp.json:
{
"servers": {
"pagehum": {
"type": "http",
"url": "https://pagehum.com/api/mcp",
"headers": { "Authorization": "Bearer phk_your_key" }
}
}
}MCP Inspector
npx @modelcontextprotocol/inspector --cli https://pagehum.com/api/mcp --transport http \ --header "Authorization: Bearer phk_your_key" --method tools/list
Tools
| Tool | Arguments | Does | Ask |
|---|---|---|---|
list_sites | sort?, dir? | Every site with its last 7 days and the one problem, and the site keys the other tools take. | “Which of my sites had the most visitors this week?” |
get_board | site, range? | The board for 7 to 365 days: usage, performance with INP and speed per device and page, the funnel, the signals, week over week, top pages, sources and countries, failing requests, rage clicks, CSP blocks, outside origins and page weight, pages checked. | “How did harbor.example do over the last 30 days?” |
get_page | site, path, range? | One page: views, speed against the site, its errors, broken links on it or to it, failing calls it made, rage clicks, its page check, and a prompt scoped to it. | “What's wrong with /checkout? Fix what you can.” |
list_issues | site | Every reading in watch or problem this week, the Problem first, with its rows, status, and 14 days of history. | “What's worth a look on harbor.example besides the main problem?” |
get_speed_trend | site, range?, metric? | p75 load, LCP, INP, and TTFB by day, overall and per device, against the good and poor lines, and where a reading got slower and stayed slower. | “When did my site get slower on phones?” |
get_status | site | Reachability, uptime, recent incidents, and the last check, as the status page shows them. | “Is pagehum.com up, and when was its last incident?” |
list_client_errors | site, range?, limit?, offset? | Client errors, most frequent first, marked new, back, ongoing, one-off, or quiet, with first and last seen. Pages with offset. | “Which errors on my store are new or came back?” |
get_client_error | site, range?, rank?, path?, message? | One error's history, other pages with it, a known-pattern note, and a ready-made prompt to fix it. | “Get the fix prompt for the top error and fix it in this repo.” |
list_broken_links | site, range?, limit? | 404s and failed same-site assets visitors hit, with first and last seen and the pages that linked there. | “Which dead links do visitors keep hitting? Fix the links on the pages they came from.” |
list_failing_requests | site, range?, limit? | The site's own API calls (fetch and XHR) that got a 5xx or no response, with method, path, status, and first and last seen. | “Which API endpoints are failing for visitors? Find the handler and fix it.” |
list_page_checks | site | Pages checked besides the homepage, with each one's last result and uptime. | “Is /api/health passing?” |
get_landingboost | site | LandingBoost scores and the First Edit, if the account linked LandingBoost. | “What should I change first on my landing page?” |
get_setup_prompt | site | The script tag, whether beacons arrive yet, and the AI prompt that installs it. | “Is PageHum installed on this project? If not, set it up.” |
list_markers | site, range? | Deploys and notes on the site's charts, with when and where they came from. | “What did we ship the week errors went up?” |
add_marker | site, text, kind?, at? | Marks a deploy or note on the charts. Needs a write key; clients ask before calling it. | “Mark today's deploy of v2.3 on harbor.example.” |
create_site | name | Creates a site, with a write key and room in the plan. Clients ask before calling it. | “Add a PageHum site for docs.harbor.example.” |
Arguments ending in ? are optional. site is a key from list_sites; range is 7, 14, 30, 90, or 365 days, held to your plan. Each answer is a short summary for the assistant to read, with the full data alongside as structured content.
Things to ask
- “What broke on my sites this week?”
- “Which client errors on harbor.example are new or came back, and which can I ignore?”
- “Get the fix prompt for the top error and fix it in this repo.”
- “Is pagehum.com up, and when was its last incident?”
- “Are there broken links visitors keep hitting? Add redirects for them.”
- “Is PageHum installed on this project? If not, set it up.”
Sign in, or use a key
Clients that support MCP sign-in need only the URL: they open PageHum in your browser, you approve the app, and it gets a token that refreshes itself. In Claude.ai and Claude Desktop, add a custom connector (Settings → Connectors) with https://pagehum.com/api/mcp; in Claude Code, claude mcp add --transport http pagehum https://pagehum.com/api/mcp and then /mcp to sign in. The app asks for read access, or read and write if it wants to create sites.
Approved apps are listed on your account page under Connected apps, where you can disconnect each. For scripts, CI, or clients without sign-in, use an API key as above. Both count against the same hourly limit.
Safety, limits, and privacy
- Every tool is read-only except
create_siteandadd_marker, which need a write key and are marked as changes, so clients ask you before calling them. No tool can delete anything. A read key keeps an assistant read-only for sure. - Each tool call is one API call against the key’s hourly limit, shared with the REST API. Connecting and listing tools don’t count.
- A key sees only its own account’s sites, and revoking it on the account page cuts the assistant off at once.
- PageHum keeps counts and histograms, not events: no visitor IDs, IP addresses, session replays, or stack traces. The server tells assistants so, and they can’t ask for what isn’t there.