Overview

Changelog

All notable changes to @qverisai/mcp are documented here.

The format follows Keep a Changelog, and versions follow Semantic Versioning.

Unreleased#

0.12.0 - 2026-07-23#

Added#

  • Added optional view / lang inputs to discover and respond_with to call, with typed routing/summary response support. Defaults remain full; an explicit legacy 422 extra_forbidden response triggers one retry without only the rejected optional field. (#256)
  • Added the canonical probe tool with typed zero-cost schema/quote results and an MCP outputSchema. (#259)

0.11.0 - 2026-07-18#

Added#

  • Server Card auth metadata for hosted deployments (#236): ServerCardRemote supports the schema's headers/variables inputs, ServerCardInfo.remoteHeaders threads them through startHttpServer, and bearerAuthHeaderInput() builds an Authorization: Bearer {api_key} template whose variable is required + secret. buildServerCard rejects literal secret material in the card. Generated cards are validated in CI against the upstream Server Card schema vendored at a pinned commit (schemas/README.md); a separate non-blocking step probes the public $schema URL so "card invalid" and "upstream URL unavailable" never mix.
  • The deprecated alias tools (search_tools, get_tools_by_ids, execute_tool) now declare the same outputSchema as their canonical counterparts, so MCP SDK clients validate alias results instead of silently skipping validation. Correction to the 0.9.0 notes: through 0.10.0 only the five canonical tools declared outputSchema, although alias calls always returned structuredContent. (#237)

0.10.0 - 2026-07-14#

Changed#

  • Replaced legacy region and API-key-prefix routing with deterministic endpoint selection: QVERIS_BASE_URL overrides the built-in default, and endpoint overrides are validated before use. The official MCP Registry manifest now declares only QVERIS_API_KEY and the optional QVERIS_BASE_URL. (#204)
  • Upgraded the Vitest and coverage toolchain to audited Node.js 18-compatible releases and pinned the Vite 6 security floor used by tests. Published runtime dependencies are unchanged. (#211)

0.9.0 - 2026-07-13#

Added#

  • An embedding API for independently operated Streamable HTTP services: asynchronous per-session server factories can require a caller bearer, receive it only during session construction, and rely on fingerprint binding to reject later credential changes. Credential validation and client policy stay outside the toolkit. (#201)
  • Fuller MCP spec surface (#158):
    • Output schemas + structured content — every tool declares outputSchema (loose, additive-friendly) and returns structuredContent alongside the JSON text, so clients consume typed results instead of re-parsing strings.
    • Elicitation billing consent — with QVERIS_MCP_CONFIRM_CALLS=true and an elicitation-capable client, a charged call asks the user to confirm first; declining cancels the call before any credits are spent. Off by default (headless agents unaffected); clients without elicitation proceed as before.
    • Resourcesqveris://server-card (SEP-2127 card, also without a remote in stdio mode) and the qveris://capability/{tool_id} template serving full capability metadata, so users can browse/attach capability docs without a tool call.

Changed#

  • Tool results and resource reads serialize as compact JSON instead of pretty-printed — indentation was ~35% of a qveris_discover payload in tokens, with no information loss. Matches the HTTP discovery endpoints, which were already compact. (#120)

0.8.0 - 2026-07-09#

Added#

  • Streamable HTTP transport for remote MCP alongside the stdio default: per-session servers keyed by Mcp-Session-Id, optional inbound bearer auth (fail-closed on non-loopback binds), DNS-rebinding protection, request-body cap, and idle-session eviction. (#139)
  • Server Card (GET {path}/server-card) and MCP Catalog (GET /.well-known/mcp/catalog.json) discovery documents, so registries and crawlers can learn about the server without connecting. (#140)
  • Rate-limited (429) and transient (503) API responses are retried automatically: honors Retry-After, otherwise exponential backoff with jitter, bounded by config.maxRetries / QVERIS_MAX_RETRIES (default 3; 0 disables); rateLimitRetryCount exposes the backoff. (#145)

Changed#

  • Requires Node.js >= 18.2 (was >= 18.0): prompt HTTP-server shutdown uses closeAllConnections, added in 18.2. (#139)

0.7.5 - 2026-07-07#

Fixed#

  • The server starts without QVERIS_API_KEY: MCP clients and registry scanners can list tools before credentials are configured; tool calls return an actionable error until a key is set. (#126)

0.7.4 - 2026-07-07#

Fixed#

  • mcpName casing (io.github.QVerisAI/mcp) required by the official MCP Registry ownership validation. (#122)

0.7.3 - 2026-07-06#

Added#

  • ToolInfo declares capabilities, expected_cost, why_recommended, and provider_id, matching current Discover/Inspect responses. (#102)
  • mcpName and MCP registry metadata (server.json, Smithery, Glama) for directory listings. (#117)

Removed#

  • provider_logo_url from type declarations (dropped from the public spec). (#105)

0.7.2 - 2026-07-06#

Fixed#

  • Accept object-shaped tool categories in discover/inspect results (legacy string tags still supported). (#97)
  • Hardened MCP probe and call params/observability paths. (#85)

0.7.1 - 2026-06-13#

Fixed#

  • Hardened process-entrypoint detection, including npm bin symlinks.

0.7.0 - 2026-05-21#

Added#

  • Generated OpenAPI contract types with drift CI. (#48)
  • Canonical qveris tool names standardized across surfaces. (#31)

0.6.0 - 2026-05-06#

Added#

  • Context-safe usage_history and credits_ledger audit tools. (#18)

0.5.0 - 2026-04-09#

Changed#

  • Tools renamed to discover / inspect / call; the previous names remain as deprecated aliases. (#14)
  • Multi-region (global/China) support improvements. (#13)

0.4.0 - 2026-04-04#

Added#

  • China region (qveris.cn) support. (#9)

Changed#

  • Monorepo restructure. (#8)

0.3.0 / 0.2.0 - 2026-04-04#

  • Version bumps / republish; no functional changes.

0.1.2 - 2026-04-04#

Fixed#

  • Handle empty/non-JSON success responses gracefully; params_to_tool documented as an object.