From 24cf45bb6461a7cda1e07b115a46d80fd4645c9a Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Sat, 17 Jan 2026 14:42:06 -0500 Subject: [PATCH] refactor: reverse visibility for list_prompts/_list_prompts methods --- src/fastmcp/server/providers/aggregate.py | 4 ++-- src/fastmcp/server/providers/base.py | 10 +++++----- src/fastmcp/server/providers/fastmcp_provider.py | 2 +- src/fastmcp/server/providers/filesystem.py | 4 ++-- src/fastmcp/server/providers/local_provider.py | 2 +- src/fastmcp/server/providers/openapi/provider.py | 2 +- src/fastmcp/server/providers/proxy.py | 2 +- src/fastmcp/server/server.py | 6 +++--- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/fastmcp/server/providers/aggregate.py b/src/fastmcp/server/providers/aggregate.py index 585affaf1..bec980b14 100644 --- a/src/fastmcp/server/providers/aggregate.py +++ b/src/fastmcp/server/providers/aggregate.py @@ -209,10 +209,10 @@ class AggregateProvider(Provider): # Prompts # ------------------------------------------------------------------------- - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """List all prompts from all providers (with transforms applied).""" results = await gather( - *[p._list_prompts() for p in self._providers], + *[p.list_prompts() for p in self._providers], return_exceptions=True, ) return self._collect_list_results(results, "list_prompts") diff --git a/src/fastmcp/server/providers/base.py b/src/fastmcp/server/providers/base.py index fb5240b32..a06194f51 100644 --- a/src/fastmcp/server/providers/base.py +++ b/src/fastmcp/server/providers/base.py @@ -205,11 +205,11 @@ class Provider: return await chain(uri, version=version) - async def _list_prompts(self) -> Sequence[Prompt]: + async def list_prompts(self) -> Sequence[Prompt]: """List prompts with all transforms applied.""" async def base() -> Sequence[Prompt]: - return await self.list_prompts() + return await self._list_prompts() chain = base for transform in self.transforms: @@ -334,7 +334,7 @@ class Provider: return None return max(matching, key=version_sort_key) # type: ignore[type-var] - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """Return all available prompts. Override to provide prompts dynamically. Returns ALL versions of all prompts. @@ -357,7 +357,7 @@ class Provider: Returns: The Prompt if found, or None to continue searching other providers. """ - prompts = await self.list_prompts() + prompts = await self._list_prompts() matching = [p for p in prompts if p.name == name] if version: matching = [p for p in matching if version.matches(p.version)] @@ -383,7 +383,7 @@ class Provider: self._list_tools(), self._list_resources(), self._list_resource_templates(), - self.list_prompts(), + self._list_prompts(), ) tools = cast(Sequence[Tool], results[0]) resources = cast(Sequence[Resource], results[1]) diff --git a/src/fastmcp/server/providers/fastmcp_provider.py b/src/fastmcp/server/providers/fastmcp_provider.py index 94854b065..ed8c8c380 100644 --- a/src/fastmcp/server/providers/fastmcp_provider.py +++ b/src/fastmcp/server/providers/fastmcp_provider.py @@ -568,7 +568,7 @@ class FastMCPProvider(Provider): # Prompt methods # ------------------------------------------------------------------------- - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """List all prompts from the mounted server as FastMCPProviderPrompts. Runs the mounted server's middleware so filtering/transformation applies. diff --git a/src/fastmcp/server/providers/filesystem.py b/src/fastmcp/server/providers/filesystem.py index ffecc17c7..0b9037822 100644 --- a/src/fastmcp/server/providers/filesystem.py +++ b/src/fastmcp/server/providers/filesystem.py @@ -210,10 +210,10 @@ class FileSystemProvider(LocalProvider): await self._ensure_loaded() return await super()._get_resource_template(uri, version) - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """Return all prompts, reloading if in reload mode.""" await self._ensure_loaded() - return await super().list_prompts() + return await super()._list_prompts() async def get_prompt( self, name: str, version: VersionSpec | None = None diff --git a/src/fastmcp/server/providers/local_provider.py b/src/fastmcp/server/providers/local_provider.py index ed96f26a6..8ba155719 100644 --- a/src/fastmcp/server/providers/local_provider.py +++ b/src/fastmcp/server/providers/local_provider.py @@ -583,7 +583,7 @@ class LocalProvider(Provider): return None return max(matching, key=version_sort_key) # type: ignore[type-var] - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """Return all visible prompts.""" return [ v diff --git a/src/fastmcp/server/providers/openapi/provider.py b/src/fastmcp/server/providers/openapi/provider.py index 7be979bf1..7f13fb4da 100644 --- a/src/fastmcp/server/providers/openapi/provider.py +++ b/src/fastmcp/server/providers/openapi/provider.py @@ -396,7 +396,7 @@ class OpenAPIProvider(Provider): return None return max(matching, key=version_sort_key) # type: ignore[type-var] - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """Return empty list - OpenAPI doesn't create prompts.""" return [] diff --git a/src/fastmcp/server/providers/proxy.py b/src/fastmcp/server/providers/proxy.py index 7f1feff56..d06337396 100644 --- a/src/fastmcp/server/providers/proxy.py +++ b/src/fastmcp/server/providers/proxy.py @@ -573,7 +573,7 @@ class ProxyProvider(Provider): # Prompt methods # ------------------------------------------------------------------------- - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """List all prompts from the remote server.""" try: client = await self._get_client() diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py index 259244d80..8c889f82a 100644 --- a/src/fastmcp/server/server.py +++ b/src/fastmcp/server/server.py @@ -895,10 +895,10 @@ class FastMCP(Provider, Generic[LifespanResultT]): ) return self._collect_list_results(results, "list_resource_templates") - async def list_prompts(self) -> Sequence[Prompt]: + async def _list_prompts(self) -> Sequence[Prompt]: """Aggregate prompts from all sub-providers.""" results = await gather( - *[p._list_prompts() for p in self._providers], + *[p.list_prompts() for p in self._providers], return_exceptions=True, ) return self._collect_list_results(results, "list_prompts") @@ -1402,7 +1402,7 @@ class FastMCP(Provider, Generic[LifespanResultT]): ) # Query through full transform chain (provider transforms + server transforms + visibility) - prompts = await self._list_prompts() + prompts = await self.list_prompts() # Get auth context (skip_auth=True for STDIO which has no auth concept) skip_auth, token = _get_auth_context()