Documentation
MCP server
Connect an AI agent to JAMP so it can read your site's errors, uptime, vitals and traffic. Ask it what is broken in production and it can pull the stack trace, see which deploy it started in, and go fix it.
JAMP exposes its monitoring through the Model Context Protocol, supported by Claude, Cursor, Claude Code and other MCP clients. An agent can read your data, and with write access it can also set JAMP up on a project and mark errors fixed. Write access stops there: an agent cannot delete sites, change billing or touch your account.
Connect with OAuth (easiest)
For clients that support OAuth, add the hosted server URL and the client sends you to JAMP to sign in and authorize. There is nothing to install and no token to paste.
https://mcp.jamp.io/mcpJAMP is an OAuth 2.1 server with dynamic client registration and PKCE, so the client registers itself. You will see a consent screen spelling out what the agent can do, then the connection completes. No JAMP account yet? The same flow lets you create one on the way through.
Let the agent set JAMP up for you
Once connected, you can hand the whole install to the agent. Tell it "add analytics and error tracking to this site with JAMP" and it will call jamp_create_site to register the site, put the returned snippet in your layout, deploy, then poll jamp_verify_install until data arrives. You approve the connection once in the browser; the agent does the rest.
Connect with a token
For clients without OAuth, create a token under Settings → API & MCP access and pass it in an Authorization header. With Claude Code:
claude mcp add --transport http jamp \
https://mcp.jamp.io/mcp \
--header "Authorization: Bearer jamp_..."For Cursor, Claude Desktop, Windsurf and similar, add the server to the MCP config:
{
"mcpServers": {
"jamp": {
"url": "https://mcp.jamp.io/mcp",
"headers": { "Authorization": "Bearer jamp_..." }
}
}
}Run it locally (stdio)
If you would rather run the server yourself, the jamp-mcp package on npm is a small stdio server that wraps the same API.
claude mcp add jamp --env JAMP_API_TOKEN=jamp_... -- npx -y jamp-mcpTools
Most tools take a site id (from jamp_list_sites) and an optional window of 24h, 7d (default), 30d or 90d.
jamp_create_siteCreate a site and get its install snippet, so an agent can set JAMP up on a project end to end. Needs write access.
jamp_verify_installWhether the snippet is sending data yet. The agent polls this after deploying to confirm the install worked.
jamp_install_doctorDiagnose an install that is not sending data: fetches the served HTML and checks each tag, with a fix for anything wrong.
jamp_setup_sourcemapsThe source-map upload key and contract, so an agent can wire readable stack traces into CI. Needs write access.
jamp_enable_uptimeTurn on uptime monitoring (homepage by default). Needs write access; plans cap monitor count.
jamp_setup_proxyFirst-party proxy config + proxied snippet so analytics survive ad blockers. Recovers lost traffic; per-framework.
jamp_resolve_errorMark an error fixed after shipping a fix. If it comes back it shows as regressed, not silently active. Needs write access.
jamp_list_sitesYour sites and their ids (needed by the other tools).
jamp_list_errorsGrouped JavaScript errors for a site, busiest first.
jamp_get_errorOne error in full: scrubbed stack trace, the release it appeared in, file and line, and breakdowns.
jamp_uptimeUp or down, uptime percentage, average response time and recent incidents.
jamp_vitalsp75 Core Web Vitals (LCP, CLS, INP, FCP, TTFB) from real users.
jamp_trafficPageviews, unique visitors and top pages, sources and countries.
jamp_page_auditLatest PageSpeed audit per page: performance + accessibility + SEO + best-practices scores, the LCP element, and what to fix (opportunities + savings + resources).
jamp_run_auditRun a fresh one-page audit right now (mobile or desktop) and return the same diagnosis. Use it to re-check a page after a fix.
jamp_site_auditLatest whole-site crawl: broken links, on-page SEO problems and third-party trackers, with the pages affected.
The fix-it flow
Ask your agent something like "what is the top error on my site?" It calls jamp_list_errors, picks a fingerprint, then calls jamp_get_error to get the scrubbed stack trace and the release SHA the error last appeared in, so it can open the right file at the right commit. When the fix ships, jamp_resolve_error closes it out, and a recurrence shows up as regressed.
Alerts that wake your agent
Every alert JAMP sends (downtime, a new error, an SSL expiry, a performance regression) can also POST JSON to a webhook you set under Alerts. The payload carries a machine-readable kind and the identifiers needed to act, so you can point it at anything that starts an agent: a CI workflow, a queue worker, or a trigger that launches your coding agent with the context already filled in.
{
"severity": "warning",
"kind": "new_error",
"title": "New error on my-site",
"message": "TypeError: Cannot read properties of undefined...",
"site": { "id": "cm...", "name": "my-site", "domain": "example.com" },
"url": "https://jamp.io/dashboard/errors",
"context": { "events": [{ "kind": "new_error", "key": "error:a1b2c3" }] },
"timestamp": "2026-07-23T09:00:00.000Z"
}The loop this enables: JAMP detects the problem, the webhook starts your agent, the agent reads the detail over MCP (jamp_get_error, jamp_uptime), fixes the code, ships, and calls jamp_resolve_error. Kinds: uptime_down, uptime_recovered, heartbeat_missed, ssl_expiring, new_error, error_spike, vitals_regression, traffic_drop, site_audit, test.
REST API
The MCP server is a thin wrapper over a read-only REST API you can also call directly with the same token. All responses are JSON and take an optional ?window= query parameter.
curl -H "Authorization: Bearer jamp_..." \
https://jamp.io/api/v1/sitesGET /api/v1/sitesList the sites this token can read.
POST /api/v1/sitesCreate a site ({ domain, name? }). Returns the id and install snippet. Write scope.
GET /api/v1/sites/:id/install-statusWhether each pillar’s snippet is sending data yet.
GET /api/v1/sites/:id/install-doctorActive diagnosis of the snippet install (tags in the served HTML).
GET /api/v1/sites/:id/sourcemap-keyThe CI upload key + contract for source maps. Write scope.
GET /api/v1/sites/:id/proxy-setupFirst-party proxy rewrite + proxied snippet (?framework=).
POST /api/v1/sites/:id/uptimeEnable uptime monitoring ({ url? }). Write scope.
POST /api/v1/sites/:id/errors/:fingerprint/resolveMark an error fixed (DELETE to undo). Write scope.
GET /api/v1/sites/:id/errorsGrouped errors, busiest first.
GET /api/v1/sites/:id/errors/:fingerprintFull detail for one error group.
GET /api/v1/sites/:id/uptimeStatus, uptime percentage and incidents.
GET /api/v1/sites/:id/vitalsp75 Core Web Vitals.
GET /api/v1/sites/:id/trafficTraffic summary.
GET /api/v1/sites/:id/auditLatest PageSpeed audit per page (what to fix).
POST /api/v1/sites/:id/auditRun a fresh one-page audit now ({ path }).
GET /api/v1/sites/:id/site-auditLatest whole-site crawl: broken links, SEO problems, trackers.
Security
- Tokens are scoped: read covers your monitoring data, write adds creating sites and resolving errors and nothing else. Personal tokens are read-only unless you tick write at creation.
- We store only a hash of each token, so the secret is shown once at creation. Revoke any token from Settings → API & MCP access.
- Error messages and stack traces are scrubbed of emails, tokens and long numbers before storage, so the agent never sees that data.
- Requests are rate limited per account (120 per minute); over that you get a 429, so a runaway client can't hammer the API.