Skip to content

Releases: PrefectHQ/fastmcp-ts

v1.8.1

Choose a tag to compare

@github-actions github-actions released this 20 Oct 23:21
1baebca

Patch Changes

  • 79fdac9: Security update: require @modelcontextprotocol/server, @modelcontextprotocol/server-legacy, and @modelcontextprotocol/client 2.3.1 or later. The previous range (^2.0.0) allowed versions with these advisories:

    • GHSA-jm63-cq47-j5jp (high, server): shared transport or server instances delivered one HTTP client's messages to another.
    • GHSA-46jr-4wx8-v453 (high, server): one HTTP request within the default size limit could exhaust server memory during validation.
    • GHSA-rvq5-wwqv-78pq (medium, server and server-legacy): server bearer authentication accepted tokens issued for another service.
    • GHSA-6prh-2h8m-c8cw (medium, client): HTTP client transports and OAuth requests followed cross-origin redirects and re-sent custom headers and request bodies.

    The published CLI inlines its dependency tree, so it now ships the patched SDK: server and server-legacy 2.0.0 -> 2.3.1 (#126, #128), client 2.2.0 -> 2.3.1.

    Also bumps launch-editor 2.14.1 -> 2.14.2 (#124), vite 8.3.0 -> 8.3.4 (#125), and markdown-it 14.3.2 -> 14.3.3 (#127) for security fixes. These are dev-only and do not affect the published package.

v1.8.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 19:22
bc9b688

Minor Changes

  • e2cb1d1: Servers that verify tokens from an external authorization server can now publish RFC 9728 protected resource metadata (#114). Wrap a token or request verifier with remoteAuth({ verifier, authorizationServers, baseUrl }) and pass it to auth: the HTTP server serves the document at the path-scoped well-known URL (/.well-known/oauth-protected-resource/mcp for /mcp) and every 401 challenge names it in resource_metadata. The built-in oauth mode now serves its protected resource metadata at the same path-scoped URL and names it in its 401 challenges. The root URL /.well-known/oauth-protected-resource no longer serves it. oauthProvider() now answers an unknown or expired token with 401 invalid_token instead of 500.

Patch Changes

  • d5cb7a5: Fix MCP Apps on the stateless 2025-era HTTP path (#113). fetch() and run({ transport: 'http', stateless: true }) serve each request on a fresh server instance, so only initialize sees the client's capabilities. FastMCP treated every later request as coming from a client without UI support: it removed _meta.ui from tools/list, resources/list and resources/read, and replaced UI tool results with a placeholder. When the client's capabilities are unknown, FastMCP now serves the UI metadata and the real tool result. Clients known to lack UI support still get no UI metadata. For those clients a UI tool now keeps its text content and drops only structuredContent, instead of returning [UI not available in this client]. A UI tool that declares an output schema keeps its structuredContent.

v1.7.3

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:34
2ca5b99

Patch Changes

  • 1c26cc3: Update bundled dependencies. The published CLI inlines its dependency tree, so these bumps change the shipped artifact:

    • @hono/node-server 1.19.14 -> 1.19.17 (#108)
    • ip-address 10.4.0 -> 10.7.2 (#106)

    Also bumps undici 7.29.0 -> 7.30.0 (#109), markdown-it 14.2.0 -> 14.3.2 (#107), and brace-expansion 5.0.7 -> 5.0.12 (#110), which are dev-only and do not affect the published package.

v1.7.2

Choose a tag to compare

@github-actions github-actions released this 11 Sep 17:19
695f490

Patch Changes

  • ca462e8: Update bundled dependencies. The published CLI inlines its dependency tree, so these bumps change the shipped artifact:

    • hono 4.13.0 -> 4.13.7 (#102)
    • qs 6.15.2 -> 6.16.0 (#99)

    Also bumps vitest 4.1.8 -> 4.1.11 (#103), which is dev-only and does not affect the published package.

v1.7.1

Choose a tag to compare

@github-actions github-actions released this 31 Aug 18:43
8282b5d

Patch Changes

  • 0d9c5c7: Validate URL string transport inputs against http/https schemes. A string passed to Client (or a url entry in an mcpServers config) that is not a valid http: or https: URL now fails fast with a clear error that points at StdioTransport for local scripts, instead of a bare Invalid URL TypeError or a doomed fetch against a non-HTTP scheme. Hardens the client against the transport-inference pitfall found in upstream python fastmcp, where a script path string could be silently executed; fastmcp-ts never executed strings, and now rejects them explicitly.

v1.7.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 14:25
9e40fa0

Minor Changes

  • 6342119: Add configurable CORS for the HTTP listener via http.cors — restrict origins (string, list, or predicate), enable credentialed requests, extend the allowed/exposed header lists, replace the methods list, set a preflight max-age, or disable CORS entirely with cors: false. The OAuth serve path now applies the same CORS handling as the plain path (it previously had none), and responses now expose Mcp-Session-Id by default so cross-origin browser clients can read their session id. Defaults are otherwise unchanged (Access-Control-Allow-Origin: *). Non-preflight responses no longer include Access-Control-Allow-Methods/Access-Control-Allow-Headers; browsers read those only from preflight answers.
  • 1b458b9: Framework logs are now configurable. FastMCPOptions.logger accepts any object with debug/info/warn/error methods (console and Winston work directly; Pino needs a four-line adapter, see the logging docs), and FastMCPOptions.logLevel (or FASTMCP_LOG_LEVEL, default info, silent to disable) gates what reaches it. The built-in default logger writes styled output with a startup banner when stderr is a TTY and plain [fastmcp] LEVEL message lines otherwise, always to stderr. Server lifecycle events (start, listening URL, session open and close) are now logged, previously swallowed failures (proxied-server capability probes, schema-generation strategy failures) are now visible at warn or debug, and LoggingMiddleware constructed without an emit function now writes through the framework logger to stderr instead of console.log; that last change moves its output off stdout, which previously corrupted the JSON-RPC stream on the stdio transport. Anything parsing LoggingMiddleware output from stdout must read stderr instead. createProxy and buildProxyFromClient also accept logger and logLevel options, forwarded to the internal FastMCP instance that backs the proxy. The run CLI command now shows a startup spinner while it waits for the server to report listening, on a TTY; the --quiet flag also suppresses the "Server started" confirmation line that follows it.

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 19:21
a969c55

Minor Changes

  • 7e37ebc: Allow embedded applications to customize the MCP client identity with ClientOptions.clientInfo and MultiServerOptions.clientInfo. The default identity now reports the installed FastMCP package version instead of a hard-coded version.

v1.5.2

Choose a tag to compare

@github-actions github-actions released this 19 Aug 16:58
b4f0850

Patch Changes

  • ba8ed39: Fix modern-era (2026-07-28) resource subscriptions (#88). FastMCP servers now advertise the resources.subscribe capability on modern connections, so subscriptions/listen resourceSubscriptions filters are honored instead of being silently pruned, and notifyResourceUpdated() reaches modern subscribers on both HTTP and stdio (stdio delivery is routed through the SDK's listen router). Stateless legacy HTTP still withdraws the capability. Client.subscribeResource() on a modern connection now rejects with a clear error when the server does not honor the subscription, instead of registering a handler that can never fire.

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 11 Aug 20:28
88c594e

Minor Changes

  • 6edacfe: run() can now serve a configurable health endpoint on the HTTP transport (health: true or health: { path, status, body }, default GET /healthz returning 200 ok), and the new customRoute() method registers arbitrary HTTP routes (for example Kubernetes probe or metrics endpoints) on the listener run() starts. Route handlers receive a web-standard Request, return a Response, and own the whole exchange: no MCP auth, no DNS-rebinding guards, and no CORS headers run in front of them.
  • 344dcf6: createOpenAPIServer now omits readOnly properties from tool input schemas and writeOnly properties from tool output schemas, following OpenAPI access-mode semantics. Removed names are also pruned from the corresponding required lists.
  • 50d6111: ToolConfig now accepts an optional annotations field (ToolAnnotations: title, readOnlyHint, destructiveHint, idempotentHint, openWorldHint, MCP 2025-03-26). Annotations are forwarded verbatim in tools/list, mirroring how resource annotations are already handled. Closes #76.

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 15:21
4826099

Minor Changes

  • 7e3f88d: Add a fetch-native FastMCP.fetch() HTTP entrypoint for stateless legacy and modern MCP requests.