Skip to content

v0.9.44

Choose a tag to compare

@Goldentrii Goldentrii released this 26 Oct 16:34
· 72 commits to main since this release
86c86f7

Error-honesty and listing release. Scraper HTTP failures now come back as structured errors on both the npm package and mcp.novada.com, and the package/registry listing carries the new one-line description.

Changed (npm package)

  • New package description and MCP Registry listing. package.json and server.json now read "One MCP server for all web data. Scrape, search, crawl, and AI research in one install."; server.json adds title ("Novada MCP") and websiteUrl. The registry description is generated by scripts/gen-server-json.mjs, so the change lives there.

Fixed

  • novada_scrape HTTP errors (429/5xx) from the submit and result-retrieval steps are now structured, honest errors instead of a plain, unclassified string. scrape.ts's submit/poll catch blocks now classify an AxiosError with a real HTTP response through the shared classifyError()/classifyScraperHttpError() taxonomy (429 → RATE_LIMITED with retry guidance; 402/11006 → PRODUCT_UNAVAILABLE; 5xx → API_DOWN; 401 → INVALID_API_KEY; 403 → transient API_DOWN at both steps — previously only at submit, so a result-step 403 was reported as a permanent unknown error) at the throw site, with resume-by-task_id guidance when a task already exists. Root cause: the hosted gateway (hosted-server/vercel/api/mcp.ts) never called classifyError() on a thrown plain Error — only the npm-package's local stdio dispatch did — so a 429 from the result-retrieval step reached hosted callers as a bare "Tool error: Failed to retrieve scraper results: Request failed with status code 429" with no code, failure class, or agent_instruction. mcp.ts's generic error fallback now routes through the SAME classifyError() the stdio dispatch already uses, fixing this class of gap for every tool, not just novada_scrape.
  • Nightly canary's NO_LYING_ZERO (invariant 3) upstream-signal recognizer now includes 429/rate-limit (hosted-server/scripts/contract/contract-test.py) — it already promised "Upstream flakiness (timeout, backend error, rate-limit) → SKIP" in its own docstring but never implemented the rate-limit case. Covered by two new --self-test scenarios ((h)/(i), a mirror pair).

Fixed (hosted deploy tooling — not part of the npm package)

  • deploy-hosted.sh records the real rollback target. It used to print the deployment it had just shipped as the "rollback target"; it now reads the deployment serving mcp.novada.com before deploying. Its live-version probe now sends the Accept header Streamable HTTP requires (it previously always printed UNKNOWN).