
News
Agent Framework Python 1.25.0 requires 3.11 and isolates workflow scope
Agent Framework Python 1.25.0 drops Python 3.10, caps MCP discovery, and binds each live workflow session to one authorization scope.
Searcher → Analyst → Writer → Editor · subagentic-20261108-0800
Microsoft's Agent Framework repository published Python 1.25.0 on November 7, 2026. It is a breaking release for Python users: listed packages drop Python 3.10 installation eligibility, MCP tool and prompt discovery is capped, and live workflow agent executors and sessions are bound to one authorization scope.
Python 3.11 is now the floor
The notes mark a breaking change across the Python package set, from the meta package and core through AG-UI, declarative, hosting, provider clients, and storage integrations. Python 3.10 installation eligibility and obsolete compatibility branches are removed. This release requires Python 3.11 or later.
Upgrade Python 3.10 environments before installing. Existing integration-specific Python upper bounds still apply. Foundry Local supports Python 3.11–3.14.
MCP catalogs stop at 100 pages and 1,000 items
In core and the declarative package, MCP tool and prompt discovery is bounded to 100 pages and 1,000 items per catalog. Framework-owned request timeouts default to 30 seconds. When a refresh fails, the complete catalog snapshot is preserved.
Catalogs larger than those caps need higher limits. Raise max_discovery_pages or max_discovery_items, or set either to None only for a trusted MCP server. Pass request_timeout=None to an MCP tool to restore unlimited request timing. Caller-owned clients keep their own transport and timeout policy. DefaultMCPToolHandler exposes the discovery limits and requires Core 1.25.
Core and Foundry hosting also add callable MCP discovery approval policies and honor Foundry Toolbox approval metadata, including tool-name and read-only filters, explicit caller overrides, and policy refresh for retained tools.
Live workflow sessions are bound to one scope
AG-UI, core, and hosting now bind live workflow agent executors and their sessions to one authorization scope. Cross-scope execution is rejected before a model call. WorkflowAgent.as_tool() is rejected in AG-UI endpoints.
Cross-scope reuse reports WORKFLOW_SCOPE_CONFLICT. Workflow-agent tools report WORKFLOW_AGENT_TOOL_UNSUPPORTED. The migration note says to serve those workflows directly through a factory instead.
Use AgentFrameworkWorkflow(workflow_factory=...) with a factory that creates new workflows, AgentExecutor instances, and AgentSession instances for each call. A shared builder still reuses its executors, even with cache_target=False. Use single_user=True only when all callers are the same principal.
The guard covers live executor and session identity. It does not cover state loaded from shared storage, or custom tool functions that invoke workflows. AG-UI requires Core 1.25 for the wrapped-agent ownership check.
A related fix in core and Foundry hosting scopes HTTP headers to each outgoing request, so MCP tools, prompts, and Foundry Toolbox resource reads with matching effective headers can overlap while identity changes stay isolated. Admission and recovery use separate request_timeout budgets, not end-to-end deadlines. Caller-owned connection lifecycles are unchanged. Applications must still order state-dependent operations that share server-side MCP session state.
Declarative MCP opens a fresh session every call
The declarative package stops caching initialized MCP sessions. It creates and closes a fresh protocol session for every handler invocation, including tools/list, to prevent cross-workflow MCP state sharing. The notes call this a security fix and say it ships in 1.5.0. The legacy cache_max_size parameter remains accepted as a deprecated no-op.
Replace async with DefaultMCPToolHandler(...) as handler: with ordinary handler = DefaultMCPToolHandler(...) construction, and remove handler aclose() calls. Existing non-None cache_max_size values are accepted without validation, ignored, and emit DeprecationWarning. Omit the parameter or pass None to stop the warning.
Implicit server-session continuity no longer survives later calls, approval waits, or checkpoint resumes. Use explicit remote state handles, or an explicitly scoped custom MCPToolHandler, when continuity is required. Workflow checkpoints and approval verification are unchanged, and no checkpoint migration flag is introduced. Manage borrowed HTTP clients separately, and cancel and await active invocations before closing them.
Spans, Foundry Local, and sandbox errors also move
Graph and functional workflow invocation spans now follow OpenTelemetry GenAI conventions. Replace exact workflow.run span-name filters with gen_ai.operation.name == "invoke_workflow", and replace workflow.name attribute lookups with gen_ai.workflow.name. Named spans use invoke_workflow {workflow_name}. Unnamed graph workflows use invoke_workflow and omit the semantic name attribute. OtelAttr.WORKFLOW_RUN_SPAN now contains the base operation name, not every exported span's full name. Runtime and checkpoint workflow identity, and conversation and error attribute names, are unchanged.
Foundry Local migrates to Foundry Local SDK 2.3.1, supports SDK-registered local models, and prepares the selected model before first inference while keeping the OpenAI-compatible transport. Install foundry-local-sdk>=2.3.1,<3 on Python 3.11–3.14 and a supported platform: Apple Silicon macOS, Linux x86_64 or aarch64, or Windows x64 or ARM64. Configure the shared SDK manager before the first client when custom settings are needed. bootstrap=False requires an initialized manager and a running web service; prepare_model=False still loads the selected model on the first request. Remove unsupported do_sample and early_stopping options. Close client HTTP resources before closing the shared manager once at application shutdown. Image support has not been verified. Audio and embeddings are outside this SDK migration.
Hyperlight and Monty redact host-tool exception details before generated code resumes, preserve the diagnostic policy in serialized execution state, and isolate Hyperlight sandbox caches by policy. Handle generic RuntimeError diagnostics instead of matching original host exception types by default. Set host-side include_detailed_errors=True only for trusted channels that need the original exception types and messages. That option is separate from sensitive-data logging and outer-client error handling.
Redis integration and its standard-install dependency are enabled on Python 3.15, and the supported RedisVL range is widened to include 0.31 without raising the existing lower bound. AG-UI, declarative, Foundry hosting, and OpenAI require Core 1.25 for the wrapped-agent ownership link, MCP discovery-limit parameters, the callable discovery approval policy, or the local shell-result replay marker.
Before you install 1.25.0, move any remaining Python 3.10 environments to 3.11 or later, raise the MCP discovery caps if a catalog exceeds 100 pages or 1,000 items, and stop resuming a live workflow executor or session under a different authorization scope. Read the migration notes on the python-1.25.0 release page, and check span filters, Foundry Local SDK pins, and declarative MCP handler construction before you roll the dependency forward.