From 757678bc7e4d76edcbd46d0abb2694f16c922b9f Mon Sep 17 00:00:00 2001 From: Bill Easton Date: Tue, 14 Apr 2026 11:10:19 -0500 Subject: [PATCH] fix: reject self-mount to prevent infinite recursion (#3925) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: server safety guards for self-mount, duplicate middleware, mount arg order 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 4.6 (1M context) * Remove duplicate middleware and mount arg order checks These are runtime type checking, not bugs — a type checker catches them. Keep only the self-mount guard which is a semantic check. 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) --- src/fastmcp/server/server.py | 3 +++ tests/server/test_server_safety.py | 10 ++++++++++ 2 files changed, 13 insertions(+) create mode 100644 tests/server/test_server_safety.py diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py index 967ef1ceb..1950d7a3b 100644 --- a/src/fastmcp/server/server.py +++ b/src/fastmcp/server/server.py @@ -2047,6 +2047,9 @@ class FastMCP( from fastmcp.server.providers.fastmcp_provider import FastMCPProvider + if server is self: + raise ValueError("Cannot mount a server onto itself") + # Handle deprecated prefix parameter if prefix is not None: warnings.warn( diff --git a/tests/server/test_server_safety.py b/tests/server/test_server_safety.py new file mode 100644 index 000000000..2d85b098a --- /dev/null +++ b/tests/server/test_server_safety.py @@ -0,0 +1,10 @@ +import pytest + +from fastmcp import FastMCP + + +class TestMountSafety: + def test_self_mount_raises(self): + mcp = FastMCP("test") + with pytest.raises(ValueError, match="Cannot mount a server onto itself"): + mcp.mount(mcp)