Skip to content

Commit aaaa3be

Browse files
committed
Add methods to retrieve all resources and prompts in Bundler and managers
1 parent c149a48 commit aaaa3be

File tree

4 files changed

+46
-17
lines changed

4 files changed

+46
-17
lines changed

src/mcp/server/fastmcp/prompts/manager.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ def __init__(self, warn_on_duplicate_prompts: bool = True):
1818
def get_prompt(self, name: str) -> Prompt | None:
1919
"""Get prompt by name."""
2020
return self._prompts.get(name)
21+
22+
def get_all_prompts(self) -> dict[str, Prompt]:
23+
return self._prompts
2124

2225
def list_prompts(self) -> list[Prompt]:
2326
"""List all registered prompts."""

src/mcp/server/fastmcp/resources/resource_manager.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ def __init__(self, warn_on_duplicate_resources: bool = True):
2020
self._templates: dict[str, ResourceTemplate] = {}
2121
self.warn_on_duplicate_resources = warn_on_duplicate_resources
2222

23+
def get_all_resources(self) -> tuple[dict[str, Resource], dict[str, ResourceTemplate]]:
24+
return self._resources, self._templates
25+
2326
def add_resource(self, resource: Resource) -> Resource:
2427
"""Add a resource to the manager.
2528

src/mcp/server/fastmcp/server.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -587,13 +587,28 @@ def decorator(
587587
return func
588588

589589
return decorator
590-
590+
591591
def include_bundler(self, bundler: Bundler) -> None:
592592
"""Add bundler of resources, tools and prompts to the server."""
593593
bundler_tools = bundler.get_tools()
594-
for name, tool in bundler_tools.items():
595-
self.add_tool(tool.fn, name, tool.description, tool.annotations)
596-
# TODO finish code for resources and prompts
594+
for tool_name, tool in bundler_tools.items():
595+
self.add_tool(tool.fn, tool_name, tool.description, tool.annotations)
596+
597+
bundler_resources, bundler_templates = bundler.get_resources()
598+
for resource in bundler_resources.values():
599+
self.add_resource(resource)
600+
for template_name, template in bundler_templates.items():
601+
self._resource_manager.add_template(
602+
template.fn,
603+
template.uri_template,
604+
template_name,
605+
template.description,
606+
template.mime_type,
607+
)
608+
609+
bundler_prompts = bundler.get_prompts()
610+
for prompt in bundler_prompts.values():
611+
self.add_prompt(prompt)
597612

598613
async def run_stdio_async(self) -> None:
599614
"""Run the server using stdio transport."""

src/mcp/server/fastmcp/utilities/bundler.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
from collections.abc import Callable
44

55
from mcp.server.fastmcp.prompts import Prompt, PromptManager
6-
from mcp.server.fastmcp.resources import FunctionResource, Resource, ResourceManager
6+
from mcp.server.fastmcp.resources import (
7+
FunctionResource,
8+
Resource,
9+
ResourceManager,
10+
ResourceTemplate,
11+
)
712
from mcp.server.fastmcp.tools import Tool, ToolManager
813
from mcp.types import (
914
AnyFunction,
@@ -12,16 +17,13 @@
1217

1318

1419
class Bundler:
15-
def __init__(self, tools: list[Tool] | None = None,):
16-
self._tool_manager = ToolManager(
17-
tools=tools, warn_on_duplicate_tools=True
18-
)
19-
self._resource_manager = ResourceManager(
20-
warn_on_duplicate_resources=True
21-
)
22-
self._prompt_manager = PromptManager(
23-
warn_on_duplicate_prompts=True
24-
)
20+
def __init__(
21+
self,
22+
tools: list[Tool] | None = None,
23+
):
24+
self._tool_manager = ToolManager(tools=tools, warn_on_duplicate_tools=True)
25+
self._resource_manager = ResourceManager(warn_on_duplicate_resources=True)
26+
self._prompt_manager = PromptManager(warn_on_duplicate_prompts=True)
2527

2628
def add_tool(
2729
self,
@@ -91,10 +93,10 @@ def decorator(fn: AnyFunction) -> AnyFunction:
9193
return fn
9294

9395
return decorator
94-
96+
9597
def get_tools(self) -> dict[str, Tool]:
9698
return self._tool_manager.get_all_tools()
97-
99+
98100
def add_resource(self, resource: Resource) -> None:
99101
"""Add a resource to the server.
100102
@@ -192,6 +194,9 @@ def decorator(fn: AnyFunction) -> AnyFunction:
192194

193195
return decorator
194196

197+
def get_resources(self) -> tuple[dict[str, Resource], dict[str, ResourceTemplate]]:
198+
return self._resource_manager.get_all_resources()
199+
195200
def add_prompt(self, prompt: Prompt) -> None:
196201
"""Add a prompt to the server.
197202
@@ -249,3 +254,6 @@ def decorator(func: AnyFunction) -> AnyFunction:
249254
return func
250255

251256
return decorator
257+
258+
def get_prompts(self) -> dict[str, Prompt]:
259+
return self._prompt_manager.get_all_prompts()

0 commit comments

Comments
 (0)