Spaces:
Running
Running
Jeremiah Lowin commited on
Commit ·
6d18388
1
Parent(s): f6ded82
Prepare to list tempaltes
Browse files- src/fastmcp/resources/manager.py +5 -0
- src/fastmcp/server.py +17 -3
src/fastmcp/resources/manager.py
CHANGED
|
@@ -62,6 +62,11 @@ class ResourceManager:
|
|
| 62 |
logger.debug("Listing resources", extra={"count": len(self._resources)})
|
| 63 |
return list(self._resources.values())
|
| 64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
def add_resource(self, resource: Resource) -> Resource:
|
| 66 |
"""Add a resource to the manager.
|
| 67 |
|
|
|
|
| 62 |
logger.debug("Listing resources", extra={"count": len(self._resources)})
|
| 63 |
return list(self._resources.values())
|
| 64 |
|
| 65 |
+
def list_templates(self) -> list[ResourceTemplate]:
|
| 66 |
+
"""List all registered templates."""
|
| 67 |
+
logger.debug("Listing templates", extra={"count": len(self._templates)})
|
| 68 |
+
return list(self._templates.values())
|
| 69 |
+
|
| 70 |
def add_resource(self, resource: Resource) -> Resource:
|
| 71 |
"""Add a resource to the manager.
|
| 72 |
|
src/fastmcp/server.py
CHANGED
|
@@ -13,7 +13,8 @@ from mcp.server.stdio import stdio_server
|
|
| 13 |
from mcp.server.sse import SseServerTransport
|
| 14 |
from mcp.types import (
|
| 15 |
Resource as MCPResource,
|
| 16 |
-
Tool,
|
|
|
|
| 17 |
TextContent,
|
| 18 |
ImageContent,
|
| 19 |
)
|
|
@@ -95,12 +96,14 @@ class FastMCP:
|
|
| 95 |
self._mcp_server.call_tool()(self.call_tool)
|
| 96 |
self._mcp_server.list_resources()(self.list_resources)
|
| 97 |
self._mcp_server.read_resource()(self.read_resource)
|
|
|
|
|
|
|
| 98 |
|
| 99 |
-
async def list_tools(self) -> list[
|
| 100 |
"""List all available tools."""
|
| 101 |
tools = self._tool_manager.list_tools()
|
| 102 |
return [
|
| 103 |
-
|
| 104 |
name=info.name,
|
| 105 |
description=info.description,
|
| 106 |
inputSchema=info.parameters,
|
|
@@ -139,6 +142,17 @@ class FastMCP:
|
|
| 139 |
for resource in resources
|
| 140 |
]
|
| 141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
async def read_resource(self, uri: _BaseUrl) -> Union[str, bytes]:
|
| 143 |
"""Read a resource by URI."""
|
| 144 |
resource = await self._resource_manager.get_resource(uri)
|
|
|
|
| 13 |
from mcp.server.sse import SseServerTransport
|
| 14 |
from mcp.types import (
|
| 15 |
Resource as MCPResource,
|
| 16 |
+
Tool as MCPTool,
|
| 17 |
+
ResourceTemplate as MCPResourceTemplate,
|
| 18 |
TextContent,
|
| 19 |
ImageContent,
|
| 20 |
)
|
|
|
|
| 96 |
self._mcp_server.call_tool()(self.call_tool)
|
| 97 |
self._mcp_server.list_resources()(self.list_resources)
|
| 98 |
self._mcp_server.read_resource()(self.read_resource)
|
| 99 |
+
# TODO: This has not been added to MCP yet, see https://github.com/jlowin/fastmcp/issues/10
|
| 100 |
+
# self._mcp_server.list_resource_templates()(self.list_resource_templates)
|
| 101 |
|
| 102 |
+
async def list_tools(self) -> list[MCPTool]:
|
| 103 |
"""List all available tools."""
|
| 104 |
tools = self._tool_manager.list_tools()
|
| 105 |
return [
|
| 106 |
+
MCPTool(
|
| 107 |
name=info.name,
|
| 108 |
description=info.description,
|
| 109 |
inputSchema=info.parameters,
|
|
|
|
| 142 |
for resource in resources
|
| 143 |
]
|
| 144 |
|
| 145 |
+
async def list_resource_templates(self) -> list[MCPResourceTemplate]:
|
| 146 |
+
templates = self._resource_manager.list_templates()
|
| 147 |
+
return [
|
| 148 |
+
MCPResourceTemplate(
|
| 149 |
+
uriTemplate=template.uri_template,
|
| 150 |
+
name=template.name,
|
| 151 |
+
description=template.description,
|
| 152 |
+
)
|
| 153 |
+
for template in templates
|
| 154 |
+
]
|
| 155 |
+
|
| 156 |
async def read_resource(self, uri: _BaseUrl) -> Union[str, bytes]:
|
| 157 |
"""Read a resource by URI."""
|
| 158 |
resource = await self._resource_manager.get_resource(uri)
|