Skip to content

chore(deps): bump fastmcp from 2.14.5 to 3.2.0#16

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/fastmcp-3.2.0
Closed

chore(deps): bump fastmcp from 2.14.5 to 3.2.0#16
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/fastmcp-3.2.0

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github Apr 30, 2026

Bumps fastmcp from 2.14.5 to 3.2.0.

Release notes

Sourced from fastmcp's releases.

v3.2.0: Show Don't Tool

FastMCP 3.2 is the Apps release. The 3.0 architecture gave you providers and transforms; 3.1 shipped Code Mode for tool discovery. 3.2 puts a face on it: your tools can now return interactive UIs — charts, dashboards, forms, maps — rendered right inside the conversation.

FastMCPApp

FastMCPApp is a new provider class for building interactive applications inside MCP. It separates the tools the LLM sees (@app.ui()) from the backend tools the UI calls (@app.tool()), manages visibility automatically, and gives tool references stable identifiers that survive namespace transforms and server composition — without requiring host cooperation.

from fastmcp import FastMCP, FastMCPApp
from prefab_ui.actions.mcp import CallTool
from prefab_ui.components import Column, Form, Input, Button, ForEach, Text
app = FastMCPApp("Contacts")
@​app.tool()
def save_contact(name: str, email: str) -> list[dict]:
db.append({"name": name, "email": email})
return list(db)
@​app.ui()
def contact_manager() -> PrefabApp:
with PrefabApp(state={"contacts": list(db)}) as view:
with Column(gap=4):
ForEach("contacts", lambda c: Text(c.name))
with Form(on_submit=CallTool("save_contact")):
Input(name="name", required=True)
Input(name="email", required=True)
Button("Save")
return view
mcp = FastMCP("Server", providers=[app])

The UI is built with Prefab, a Python component library that compiles to interactive UIs. You write Python; the user sees charts, tables, forms, and dashboards. FastMCP handles the MCP Apps protocol machinery — renderer resources, CSP configuration, structured content serialization — so you don't have to.

For simpler cases where you just want to visualize data without server interaction, set app=True on any tool and return Prefab components directly:

@mcp.tool(app=True)
def revenue_chart(year: int) -> PrefabApp:
    with PrefabApp() as app:
        BarChart(data=revenue_data, series=[ChartSeries(data_key="revenue")])
    return app

Built-in Providers

Five ready-made providers you add with a single add_provider() call:

  • FileUpload — drag-and-drop file upload with session-scoped storage

... (truncated)

Changelog

Sourced from fastmcp's changelog.


title: "Changelog" icon: "list-check" rss: true tag: NEW

v3.1.1: 'Tis But a Patch

Pins pydantic-monty below 0.0.8 to fix a breaking change in Monty that affects code mode. Monty 0.0.8 removed the external_functions constructor parameter, causing MontySandboxProvider to fail. This patch caps the version so existing installs work correctly.

Fixes 🐞

Full Changelog: v3.1.0...v3.1.1

v3.1.0: Code to Joy

FastMCP 3.1 is the Code Mode release. The 3.0 architecture introduced providers and transforms as the extensibility layer — 3.1 puts that architecture to work, shipping the most requested capability since launch: servers that can find and execute code on behalf of agents, without requiring clients to know what tools exist.

New Features 🎉

Enhancements 🔧

... (truncated)

Commits
  • 665514e Add forward_resource flag to OAuthProxy (#3711)
  • f189d1f Bump pydantic-monty to 0.0.9 (#3707)
  • 6faa2d6 Remove hardcoded prefab-ui version from pinning warnings (#3708)
  • dd8816c chore: Update SDK documentation (#3701)
  • d274959 docs: note that custom routes are unauthenticated (#3706)
  • 4a54be2 Add examples gallery page (#3705)
  • 961dd50 Add interactive map example with geocoding (#3702)
  • f01d0c5 Add quiz example app, fix dev server empty string args (#3700)
  • 85b7efd chore: Update SDK documentation (#3694)
  • 27abe3c Add sales dashboard and live system monitor examples, bump prefab-ui to 0.17 ...
  • Additional commits viewable in compare view

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels Apr 30, 2026
@oracle-contributor-agreement oracle-contributor-agreement Bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Apr 30, 2026
Bumps [fastmcp](https://github.com/PrefectHQ/fastmcp) from 2.14.5 to 3.2.0.
- [Release notes](https://github.com/PrefectHQ/fastmcp/releases)
- [Changelog](https://github.com/PrefectHQ/fastmcp/blob/main/docs/changelog.mdx)
- [Commits](PrefectHQ/fastmcp@v2.14.5...v3.2.0)

---
updated-dependencies:
- dependency-name: fastmcp
  dependency-version: 3.2.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title chore(deps-dev): bump fastmcp from 2.14.5 to 3.2.0 chore(deps): bump fastmcp from 2.14.5 to 3.2.0 May 1, 2026
@dependabot dependabot Bot force-pushed the dependabot/uv/fastmcp-3.2.0 branch from ca67d1c to 875b827 Compare May 1, 2026 01:30
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github May 1, 2026

Dependabot can't resolve your Python dependency files. Because of this, Dependabot cannot update this pull request.

@fede-kamel
Copy link
Copy Markdown
Contributor

@dependabot rebase

@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github May 1, 2026

Dependabot can't resolve your Python dependency files. Because of this, Dependabot cannot update this pull request.

@fede-kamel
Copy link
Copy Markdown
Contributor

Superseded by #26 (combined pytest + fastmcp bumps).

@fede-kamel fede-kamel closed this May 1, 2026
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github May 1, 2026

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot dependabot Bot deleted the dependabot/uv/fastmcp-3.2.0 branch May 1, 2026 16:01
fede-kamel added a commit that referenced this pull request May 5, 2026
…ot B

The 22 tutorials that print a per-call timing/token banner used a
hardcoded "[OCI call: ...]" label, which was misleading whenever the
workbench (or any CLI run) was pointed at OpenAI / Anthropic. The
banner is now provider-agnostic ("[model call: ...]").

#16 (agent_handoff) and #17 (orchestrator_pattern) demonstrate the
multi-model load-mixing pattern: triage/commentary roles read
get_model_b() (= the workbench's Model B slot when set, else A),
specialist/escalation roles stay on the primary model. With B
unset, behavior is unchanged from before.

#16 also drops a few redundant live receive_handoff calls — the
same pattern is exercised live in Parts 1, 4, and 7, so the demos
in 2/3/5/6/8 now print the data structures without a separate LLM
round-trip. Same pedagogical value, runtime cut from ~6 minutes to
under 2.
fede-kamel added a commit that referenced this pull request May 5, 2026
…ot B

The 22 tutorials that print a per-call timing/token banner used a
hardcoded "[OCI call: ...]" label, which was misleading whenever the
workbench (or any CLI run) was pointed at OpenAI / Anthropic. The
banner is now provider-agnostic ("[model call: ...]").

#16 (agent_handoff) and #17 (orchestrator_pattern) demonstrate the
multi-model load-mixing pattern: triage/commentary roles read
get_model_b() (= the workbench's Model B slot when set, else A),
specialist/escalation roles stay on the primary model. With B
unset, behavior is unchanged from before.

#16 also drops a few redundant live receive_handoff calls — the
same pattern is exercised live in Parts 1, 4, and 7, so the demos
in 2/3/5/6/8 now print the data structures without a separate LLM
round-trip. Same pedagogical value, runtime cut from ~6 minutes to
under 2.
fede-kamel added a commit that referenced this pull request May 5, 2026
…ot B

The 22 tutorials that print a per-call timing/token banner used a
hardcoded "[OCI call: ...]" label, which was misleading whenever the
workbench (or any CLI run) was pointed at OpenAI / Anthropic. The
banner is now provider-agnostic ("[model call: ...]").

#16 (agent_handoff) and #17 (orchestrator_pattern) demonstrate the
multi-model load-mixing pattern: triage/commentary roles read
get_model_b() (= the workbench's Model B slot when set, else A),
specialist/escalation roles stay on the primary model. With B
unset, behavior is unchanged from before.

#16 also drops a few redundant live receive_handoff calls — the
same pattern is exercised live in Parts 1, 4, and 7, so the demos
in 2/3/5/6/8 now print the data structures without a separate LLM
round-trip. Same pedagogical value, runtime cut from ~6 minutes to
under 2.

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>
fede-kamel added a commit that referenced this pull request May 5, 2026
* chore(workbench): rename sandbox/ → workbench/ end-to-end

Single name for the playground app: directory, npm package names,
docker COPY paths, devcontainer scripts, docs, localStorage key
(locus.sandbox.theme → locus.workbench.theme), env var
(LOCUS_SANDBOX_REFLEXION → LOCUS_WORKBENCH_REFLEXION), e2e spec
filename. Generic security-context "sandboxing" wording in
SECURITY.md and the security review doc, and the TestPyPI
"sandbox" reference in the release workflow, are intentionally
left alone (different meaning).

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* fix(sdk): robustness for async runs and parallel pipelines

- Drain httpx clients inside the run loop so consecutive run_sync()
  calls don't trip "RuntimeError: Event loop is closed" during the
  prior client's TLS teardown (agent.py + AnthropicModel.close).
- ParallelPipeline.run() now uses gather(return_exceptions=True) and
  surfaces per-agent failures in error/outputs instead of collapsing
  the whole result to outputs=[] with a generic message.
- Pin explicit timeout + max_retries on OCIOpenAIModel's AsyncOpenAI
  + httpx clients so a stuck request can no longer hang gather()
  for the openai SDK's ~10-min default.
- Bump default request_timeout 60s → 120s on Openai/AnthropicConfig
  to give reasoning + tool-heavy turns enough headroom.

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* feat(workbench): add Model A/B/C slots in Provider settings

Settings modal now shows three model dropdowns sharing the active
provider's API key. A is required; B and C are optional and fall
back to A when blank. The backend forwards LOCUS_MODEL_ID,
LOCUS_MODEL_ID_B, LOCUS_MODEL_ID_C to the subprocess.

examples/config.py grows two helpers — get_model_b() and
get_model_c() — that read the slot env vars and fall through to the
primary slot when unset, so tutorials that mix models still work in
plain CLI runs where only LOCUS_MODEL_ID is configured.

Lets multi-agent tutorials demonstrate realistic load mixing —
e.g. a fast model for triage/routing alongside a deep model for
specialist work — without bespoke wiring.

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* chore(tutorials): rename "OCI call" → "model call" + wire 16/17 to slot B

The 22 tutorials that print a per-call timing/token banner used a
hardcoded "[OCI call: ...]" label, which was misleading whenever the
workbench (or any CLI run) was pointed at OpenAI / Anthropic. The
banner is now provider-agnostic ("[model call: ...]").

#16 (agent_handoff) and #17 (orchestrator_pattern) demonstrate the
multi-model load-mixing pattern: triage/commentary roles read
get_model_b() (= the workbench's Model B slot when set, else A),
specialist/escalation roles stay on the primary model. With B
unset, behavior is unchanged from before.

#16 also drops a few redundant live receive_handoff calls — the
same pattern is exercised live in Parts 1, 4, and 7, so the demos
in 2/3/5/6/8 now print the data structures without a separate LLM
round-trip. Same pedagogical value, runtime cut from ~6 minutes to
under 2.

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* test(workbench/e2e): add per-tutorial sweep specs for each provider

Three sister Playwright specs that fan a single test out per
tutorial in the workbench catalog (skipping needs_stdin and
OCI-only ones). Each test spawns its own browser context,
configures a provider via the Settings modal, then drives one
tutorial through the UI and asserts exit 0.

Catalog is fetched synchronously via curl at module load so test()
calls can be generated at the top level — avoids the top-level-
await dance under CommonJS.

All three honour Model A/B/C env vars (e.g. ANTHROPIC_MODEL_B,
OPENAI_MODEL_B, OCI_MODEL_B) so the slot-B speedup we wired into
tutorials 16/17 is exercised end-to-end.

  npx playwright test tests/all-openai.spec.ts --workers=3

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* feat(sdk): re-export multi-agent + composition primitives at top level

Surface Orchestrator, Specialist, StateGraph, Send, Handoff,
HandoffContext, HandoffReason, RoutingDecision, SequentialPipeline,
ParallelPipeline, and LoopAgent from ``locus`` directly so users
can do ``from locus import Orchestrator, Specialist`` instead of
hunting through ``locus.multiagent.*`` and ``locus.agent.composition``.

These are first-class features of the SDK and were previously only
discoverable via the implementation modules. Lazy-loaded so import
cost stays put.

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* chore(examples/17): trim AI commentary calls to fit per-tutorial budget

Tutorial 17's _llm_call() helper fired 6 separate "AI commentary"
sidebar prompts in addition to 4 specialist/orchestrator runs. Most
of those commentary calls just narrated what the surrounding
typed object (Orchestrator, RoutingDecision, etc.) already
demonstrates. Drops 5 of 6 — keeps Part 2's commentary call as the
helper's exemplar.

Net live LLM-firing operations: 5 (was ~10). Tutorial finishes
inside the workbench's per-tutorial budget under parallel sweep
load (was timing out at 10 min on OCI v1 with workers=2).

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

* chore(coverage): update baseline for AnthropicModel client lifecycle

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>

---------

Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file OCA Verified All contributors have signed the Oracle Contributor Agreement. python:uv Pull requests that update python:uv code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant