diff --git a/docs/clients/notifications.mdx b/docs/clients/notifications.mdx
index 1864dd23b..b771c903e 100644
--- a/docs/clients/notifications.mdx
+++ b/docs/clients/notifications.mdx
@@ -47,23 +47,23 @@ For fine-grained targeting, subclass `MessageHandler` to use specific hooks:
```python
from fastmcp import Client
from fastmcp.client.messages import MessageHandler
-import mcp.types as mcp_types
+import mcp.types
class MyMessageHandler(MessageHandler):
async def on_tool_list_changed(
- self, notification: mcp_types.ToolListChangedNotification
+ self, notification: mcp.types.ToolListChangedNotification
) -> None:
"""Handle tool list changes."""
print("Tool list changed - refreshing available tools")
async def on_resource_list_changed(
- self, notification: mcp_types.ResourceListChangedNotification
+ self, notification: mcp.types.ResourceListChangedNotification
) -> None:
"""Handle resource list changes."""
print("Resource list changed")
async def on_prompt_list_changed(
- self, notification: mcp_types.PromptListChangedNotification
+ self, notification: mcp.types.PromptListChangedNotification
) -> None:
"""Handle prompt list changes."""
print("Prompt list changed")
@@ -78,7 +78,7 @@ client = Client(
```python
from fastmcp.client.messages import MessageHandler
-import mcp.types as mcp_types
+import mcp.types
class MyMessageHandler(MessageHandler):
async def on_message(self, message) -> None:
@@ -86,49 +86,49 @@ class MyMessageHandler(MessageHandler):
pass
async def on_notification(
- self, notification: mcp_types.ServerNotification
+ self, notification: mcp.types.ServerNotification
) -> None:
"""Called for notifications (fire-and-forget)."""
pass
async def on_tool_list_changed(
- self, notification: mcp_types.ToolListChangedNotification
+ self, notification: mcp.types.ToolListChangedNotification
) -> None:
"""Called when the server's tool list changes."""
pass
async def on_resource_list_changed(
- self, notification: mcp_types.ResourceListChangedNotification
+ self, notification: mcp.types.ResourceListChangedNotification
) -> None:
"""Called when the server's resource list changes."""
pass
async def on_prompt_list_changed(
- self, notification: mcp_types.PromptListChangedNotification
+ self, notification: mcp.types.PromptListChangedNotification
) -> None:
"""Called when the server's prompt list changes."""
pass
async def on_progress(
- self, notification: mcp_types.ProgressNotification
+ self, notification: mcp.types.ProgressNotification
) -> None:
"""Called for progress updates during long-running operations."""
pass
async def on_resource_updated(
- self, notification: mcp_types.ResourceUpdatedNotification
+ self, notification: mcp.types.ResourceUpdatedNotification
) -> None:
"""Called when a specific resource changes."""
pass
async def on_cancelled(
- self, notification: mcp_types.CancelledNotification
+ self, notification: mcp.types.CancelledNotification
) -> None:
"""Called when a request is cancelled."""
pass
async def on_logging_message(
- self, notification: mcp_types.LoggingMessageNotification
+ self, notification: mcp.types.LoggingMessageNotification
) -> None:
"""Called for log messages from the server."""
pass
@@ -141,14 +141,14 @@ A practical example of maintaining a tool cache that refreshes when tools change
```python
from fastmcp import Client
from fastmcp.client.messages import MessageHandler
-import mcp.types as mcp_types
+import mcp.types
class ToolCacheHandler(MessageHandler):
def __init__(self):
self.cached_tools = []
async def on_tool_list_changed(
- self, notification: mcp_types.ToolListChangedNotification
+ self, notification: mcp.types.ToolListChangedNotification
) -> None:
"""Clear tool cache when tools change."""
print("Tools changed - clearing cache")
diff --git a/docs/servers/context.mdx b/docs/servers/context.mdx
index 01a5372d3..667ce9764 100644
--- a/docs/servers/context.mdx
+++ b/docs/servers/context.mdx
@@ -179,7 +179,7 @@ content = resource_result.contents[0].content
```
**Method signatures:**
-- **`ctx.list_resources() -> list[mcp_types.Resource]`**: Returns list of all available resources
+- **`ctx.list_resources() -> list[mcp.types.Resource]`**: Returns list of all available resources
- **`ctx.read_resource(uri: str | AnyUrl) -> ResourceResult`**: Returns a `ResourceResult` whose `.contents` list contains the resource content parts
### Prompt Access
@@ -271,14 +271,18 @@ Tools can customize which components are visible to their current session using
FastMCP automatically sends list change notifications when components (such as tools, resources, or prompts) are added, removed, enabled, or disabled. In rare cases where you need to manually trigger these notifications, you can use the context's notification methods:
```python
-import mcp.types as mcp_types
+from mcp.types import (
+ PromptListChangedNotification,
+ ResourceListChangedNotification,
+ ToolListChangedNotification,
+)
@mcp.tool
async def custom_tool_management(ctx: Context) -> str:
"""Example of manual notification after custom tool changes."""
- await ctx.send_notification(mcp_types.ToolListChangedNotification())
- await ctx.send_notification(mcp_types.ResourceListChangedNotification())
- await ctx.send_notification(mcp_types.PromptListChangedNotification())
+ await ctx.send_notification(ToolListChangedNotification())
+ await ctx.send_notification(ResourceListChangedNotification())
+ await ctx.send_notification(PromptListChangedNotification())
return "Notifications sent"
```
diff --git a/docs/servers/tasks.mdx b/docs/servers/tasks.mdx
index 2b07bd440..b22a7b91d 100644
--- a/docs/servers/tasks.mdx
+++ b/docs/servers/tasks.mdx
@@ -225,30 +225,35 @@ A tool can ask the client a question partway through — the same [guard pattern
```python
from fastmcp import Context, FastMCP
from fastmcp_tasks import TasksExtension
-import mcp.types as mcp_types
+from mcp.types import (
+ ElicitRequest,
+ ElicitRequestFormParams,
+ ElicitResult,
+ InputRequiredResult,
+)
mcp = FastMCP("MyServer")
mcp.add_extension(TasksExtension())
@mcp.tool(task=True)
-async def plan_dinner(ctx: Context) -> str | mcp_types.InputRequiredResult:
+async def plan_dinner(ctx: Context) -> str | InputRequiredResult:
responses = ctx.input_responses
if responses is None:
# First leg: ask a question and end here.
- request = mcp_types.ElicitRequest(
- params=mcp_types.ElicitRequestFormParams(
+ request = ElicitRequest(
+ params=ElicitRequestFormParams(
message="What are you in the mood for?",
requested_schema={"type": "object", "properties": {"cuisine": {"type": "string"}}},
)
)
- return mcp_types.InputRequiredResult(
+ return InputRequiredResult(
result_type="input_required",
input_requests={"prefs": request},
)
# Re-entered leg: the client's answer is on ctx.input_responses.
answer = responses["prefs"]
- assert isinstance(answer, mcp_types.ElicitResult)
+ assert isinstance(answer, ElicitResult)
return f"Tonight: {answer.content['cuisine']}!"
```