Public API
Find a package and read its stored loading results. These requests need no account or API key and never start scans.
OpenAPI specification · API catalog · Agent reading guide
Find existing evidence
- Search with
GET /api/v1/search?q=express. - Read
GET /api/v1/packages?name=expressto resolve the latest version, or supply an exactversion. Tags such aslatestand version ranges are not accepted in that parameter. - If
reportIdis present, fetchGET /api/v1/reports/{id}. If onlyscanIdis present, checkGET /api/v1/scans/{id}for progress. A missing report is not a failure verdict. - Check
availableReportfor retained evidence whenreportIdis null. WhenmatchesCurrentMatrixis false, that report uses another approved execution environment. Cite its recorded runtime pins and observation date; it does not describe the current environment. An active scan and an existing report can both be present.
URL-encode query parameters for scoped names. Version lists contain at most 200 entries; versionsTruncated tells you when there are more. An exact older version can still be requested.
Exact-version evidence also has readable pages such as /npm/express/5.2.1 and /npm/@scope/name/1.0.0. These pages read retained catalog evidence without contacting npm. They can select a different observation after a rescan; cite the linked /reports/{id} URL for the result you used. No eligible report means HTTP 404, not a failure verdict.
For compact JSON, use GET /api/v1/reports/{id}/summary. It keeps status, exact artifact and runtime pins, preparation, per-runtime outcomes, per-group coverage and representative failures. reportPath is the observation link relative to this site. Optional peer requirements are deduplicated and limited to 16; missingOptionalPeersTruncated identifies a longer list. Planner omission counts and up to 64 samples are included as omissions; older responses may omit that field. Individual observations, raw logs and named assertions remain in the full report. A group’s first failure does not describe every failure in that group.
Keep outcome, coverage and status separate
Read status.current before citing evidence. Historical reports remain readable and may link to a replacement. Include the package version, observation time, runtime pins and report URL in your answer.
Here, status.current means the report is not invalidated, replaced or blocked by service policy. It does not mean the package version is latest or the report uses the current execution environment. Package lookup exposes that distinction through availableReport.matchesCurrentMatrix.
Each cell has an outcome and separate passed, failed, interrupted and untested counts. A cell’s complete coverage means its planned checks ran; it does not mean they all passed. The report can still have incomplete coverage when wildcard exports were not enumerated. Omitted exports are untested, not failed imports. Loading success does not prove functional correctness or safety. Read the methodology and limitations.
Request a Markdown summary
Send Accept: text/markdown when requesting the homepage or a report page. HTML remains the default for browsers. Explicit alternatives are /index.md and /reports/{id}/markdown.
Report summaries include status, loading results, coverage and provenance. Use the linked JSON or full report for individual entries, named assertions, logs and reproduction inputs. Markdown is currently available for the homepage and report pages.
Connect an MCP client
New to this connection? Follow the MCP setup and AI agent usage guide for Claude Code, Cursor and Codex, with real package examples and reusable prompts.
Add https://compatlab.me/mcp as a remote MCP server using Streamable HTTP. No account, API key or local package installation is required. The endpoint supports the 2026-07-28 protocol and stateless 2025 clients.
check_packageaccepts an exact npmnameand optional exactversion. Omitting the version resolves the current npm latest tag. It returns existing evidence, including an eligible earlier environment when available.get_reportaccepts a report UUID asidand returns its compact evidence and current eligibility.
Both tools return reportUrl, matchesCurrentMatrix and the same compact report contract described above. Missing evidence has kind: missing; it is not a failed compatibility test. Tools cannot submit scans, install packages or access maintainer accounts. Selected-package lookups contribute to the disclosed aggregate counts in our privacy policy.
Calls have bounded concurrency and a 12-second read deadline. Retry temporary tool errors with backoff. Use native remote-server support in your client; cross-origin browser calls and persistent subscription streams are not enabled. Client setup and validation commands are in the MCP guide.
Access and limits
The public read API and MCP tools are anonymous. CompatLab does not provide agent registration, OAuth, A2A or payment endpoints. Maintainer tools are coming later.
Respect Retry-After when supplied and use bounded retries with backoff for HTTP 429 or 503. Revalidate stored report status before presenting it as current. Report and scan reads also support HEAD and conditional requests with ETags.
To request new work, use the package page and its explicit scan action. Admission checks, capacity limits and worker availability still apply. Do not automatically submit scans while browsing or indexing reports.
Our content signals allow search indexing and use in answers, while declining model training. They express preferences, not access controls. Request a correction or removal.