Repository navigation
v1.9.0
Release v1.9.0
Release type: stable
Release line: 1.9.x
Branch: release/1.9.x
Installation
npm install @frontmcp/sdk@1.9.0What's New
CHANGELOG
Features
-
Approval Workflow Enhancements: Introduced a new
alwaysPromptfeature for server setups requiring explicit approval for each call. This ensures enhanced security by prompting for approval on every execution, thereby preventing unauthorized operations. -
New Tools for Key Management: Added
approve-rotate-keysandrotate-keystools. These tools facilitate secure key rotation processes, requiring explicit approval to execute, which enhances operational security. -
Flaky Operation Tool: Introduced
flaky-operationtool that simulates operations with intermittent failures. This tool is useful for testing resilience and error-handling capabilities in applications. -
Enhanced Feature Flag Tool: The
check-flagtool now supports adefaultValueparameter, allowing developers to specify a fallback value for feature flags, improving flexibility in feature management.
Improvements
-
Dependency Management: Updated project configurations to ensure that tests depend on the latest builds of necessary components. This change improves the reliability and consistency of test results across different environments.
-
Channel Notification Enhancements: Improved the
send-channel-notificationtool to support asynchronous operations, enhancing the efficiency and reliability of channel communications. -
Resource and Tool Management: Enhanced the local test server with additional resources and tools, such as
ItemResourceandConnectionInfoTool, to support more comprehensive testing scenarios.
What's Changed
- Cherry-pick: test(sdk): fail when a security control is wired to nothing by @github-actions[bot] in #552
- Cherry-pick: refactor(codecall): delete two security services that were never wired by @github-actions[bot] in #555
- Cherry-pick: docs: record that PRs target the active release branch, not main by @github-actions[bot] in #557
- Cherry-pick: feat(codecall): emit the audit events the docs already promised by @github-actions[bot] in #558
- Cherry-pick: fix(skills): install inline/URL skill instructions, and make --from-entry resolve project deps by @github-actions[bot] in #563
- Cherry-pick: fix(sdk): point initialize instructions at skill URIs the server serves by @github-actions[bot] in #564
- Cherry-pick: fix(cli): name reserved-expansion template flags properly, and expand them per RFC 6570 by @github-actions[bot] in #565
- Cherry-pick: test(sdk): add an in-process MCP 2026-07-28 client for specs by @github-actions[bot] in #571
- Cherry-pick: fix(sdk): keep the caller's token in-house, and give every request its own context by @github-actions[bot] in #572
- Cherry-pick: fix(auth): read signed-in callers as signed in, and keep anonymous callers out of 'authenticated' by @github-actions[bot] in #575
- Cherry-pick: fix(guard): enforce declared limits and throttle defaults, stop timed-out work, and key sessionless callers stably by @frontegg-david in #583
- Cherry-pick: fix(sdk): keep entry error codes and messages, mask internal ones in production, and log each failure with its error id by @frontegg-david in #582
- Cherry-pick: fix(sdk): log a failed DirectMcpServer call once, since no request handler reports it by @frontegg-david in #584
- Cherry-pick: fix(sdk): validate tool results strictly, list input schemas by input type, keep repeated references, and base template content URIs on the read URI by @github-actions[bot] in #585
- Cherry-pick: fix(sdk): validate 2026-07-28 elicitation answers, keep anonymous callers' requestState, hide the fallback tool from 2026-07-28 clients, and stop treating browser workers as edge runtimes by @github-actions[bot] in #586
- Cherry-pick: fix(sdk): make Around hooks wrap their stage, run hooks declared on entry classes and app providers, and scope app plugin hooks to their app by @github-actions[bot] in #587
- Cherry-pick: fix(sdk): publish declarations that type-check in a consumer: typed
@Tooland@Agent, optional prompt arguments, documented prompt returns, and no monorepo paths by @github-actions[bot] in #588 - Cherry-pick: fix(testing): record server notifications and progress, send progress tokens, and match tool error codes in toBeError by @github-actions[bot] in #589
- Cherry-pick: docs: match tool results, output types, errors, providers, URI templates, elicitation, log levels, the default port and the testing wrappers to the SDK by @frontegg-david in #591
- Cherry-pick: test(e2e): serve the OpenAPI perf spec from a local mock instead of the hosted mock by @github-actions[bot] in #604
- Cherry-pick: fix(guard): enforce ipFilter on every HTTP flow and give edge runtimes a client IP by @github-actions[bot] in #608
- Cherry-pick: fix(plugins): enforce CodeCall, approval, cache, remember and feature-flag policies on every path by @github-actions[bot] in #609
- Cherry-pick: fix: harden outbound address checks, redirect handling and widget rendering by @frontegg-david in #610
- Cherry-pick: fix: resolve open issues: per-app plugin providers, skill gating, hook-owner lookups, stateless approvals, trusted UI markup by @github-actions[bot] in #612
- Cherry-pick: fix(security): close OAuth and token gaps in local and remote auth by @github-actions[bot] in #617
- Cherry-pick: fix(security): enforce authorities on agents, templates and skills HTTP; reject rules that check nothing; keep CONTEXT providers per caller by @github-actions[bot] in #618
- Cherry-pick: fix(security): plugins and adapters: stop token passthrough, route CodeCall namespaces through the sandbox limits, enforce approval, feature-flag, skilled-openapi and dashboard settings by @github-actions[bot] in #619
- Cherry-pick: fix(security): follow-ups to #613, #614 and #615 (1/2): bind sign-ins to the browser, refuse unenforced plugin settings, serve the primary scope by @github-actions[bot] in #621
- Cherry-pick: fix(security): follow-ups to #613, #614 and #615 (2/2): bind Remember and elicitation to the verified caller, gate agents and surfaces by @frontegg-david in #623
- Cherry-pick: fix(security): close the gaps found in 1.8.3: verified sessions, surfaces, token addresses, fetch-handler startup, OpenAPI credentials, CodeCall by @github-actions[bot] in #626
- Cherry-pick: fix(sdk): judge entries by the plugins that reach them in the static startup check by @github-actions[bot] in #628
- Cherry-pick: fix: close the gaps found re-checking 1.8.4 (#629) (#630) by @frontegg-david in #632
- Cherry-pick: fix: review follow-ups to #630 (#629) (#633) by @frontegg-david in #636
- Cherry-pick: fix: post-merge review follow-ups to #633 (#629) (#635) by @frontegg-david in #638
- Cherry-pick: fix: provider sync follow-ups to #635 (#629) by @github-actions[bot] in #640
- Cherry-pick: fix(ui): widget sizing, .tsx bundling and host theme from #649 by @frontegg-david in #656
- Cherry-pick: fix: several instances, the Vercel build and list paging from #648 by @github-actions[bot] in #654
- Cherry-pick: fix(plugins): built-in plugin bugs from #647 (cache, approval, remember, CodeCall) by @github-actions[bot] in #653
- Cherry-pick: fix: Remember LLM tools startup crash and standard widget size notification (#647, #649) by @github-actions[bot] in #658
- Cherry-pick: fix(sdk): report agent outputSchema mismatches as INVALID_OUTPUT (#641) by @github-actions[bot] in #666
- Cherry-pick: fix(cli): build, dev, pm, install and eject fixes (#642) by @github-actions[bot] in #667
- Cherry-pick: fix(testing): fixture scoping, authenticate, ports, token lifetime, plain-Node import (#644) by @github-actions[bot] in #668
- Cherry-pick: fix(react,ui): browser start-up, shared provider context, Tool UI output/CSP/URIs (#645) by @github-actions[bot] in #669
- Cherry-pick: ci: shard sdk unit tests to balance the unit-test chunks by @github-actions[bot] in #671
- Cherry-pick: fix(nx-plugin): generators, executors and workspaces build and test out of the box (#643) by @github-actions[bot] in #672
- Cherry-pick: fix: deployment issues from #646 (Redis HA, Vercel KV, Workers, HTTP hardening, SQLite) by @github-actions[bot] in #673
- Cherry-pick: fix: 1.8.6 leftovers from #660 (plugin init and refusals, Redis loss at runtime, Jest 30 scaffold, widget spinner) by @github-actions[bot] in #675
- docs: README landing page and social preview image by @frontegg-david in #677
- fix(sdk): create() crashes at start-up in a browser bundle by @frontegg-david in #682
- feat(sdk): runtime tools, 'webmcp' call surface and scope dispose hook by @frontegg-david in #683
- feat(react): dynamic tools are real server tools by @frontegg-david in #684
- feat(plugin-webmcp): expose in-page tools to browser agents through WebMCP by @frontegg-david in #685
- fix: plugin options, adapter and plugin factories, direct list paging, workerEnv (#678) by @frontegg-david in #686
- fix(sdk):
@Agentoptions that were accepted and ignored,@Skilltool classes and strict validation (#678) by @frontegg-david in #687 - fix(nx-plugin): generated projects build, type-check and test out of the box (#679) by @frontegg-david in #688
- fix(cli): dev --stdio, SEA binaries, install, init, signals and subfolder builds (#679) by @frontegg-david in #689
- fix: OpenAPI generateOptions filters and Skilled OpenAPI JSON bodies, token passthrough, internal tools, dev mode (#678) by @frontegg-david in #690
- fix(ui,react): ESM widgets and auth.ui, Vite builds, render loops, CSP origins, platform detection (#681) by @frontegg-david in #692
- fix(sdk): plugin provider isolation, authorities pipes, provider and entry hooks, channels flows, server adapters (#678) by @frontegg-david in #693
- fix(plugins): cache TTL and bypass header, remember update TTL, approval alwaysPrompt and double gates, flag defaults, CodeCall direct calls (#678) by @frontegg-david in #694
- fix: SQLite busy timeout, Vercel KV on Workers, NODE_ENV under wrangler, Lambda and node bundles, machine id, /metrics, redis url (#680) by @frontegg-david in #695
- fix(sdk): serve a session's requests on any node of a distributed deployment (#680) by @frontegg-david in #696
- fix: App.remote protocol version and duplicate templates, frontmcp.config keys, @frontmcp/testing hooks, SSE and bare projects (#680) by @frontegg-david in #697
Full Changelog: v1.8.7...v1.9.0