helper to specifially rewrite proxied tool answer

This commit is contained in:
lda
2026-05-14 20:58:20 +07:00 Verified
parent 7887e4750e
commit 511075f8a3
7 changed files with 134 additions and 6 deletions
+11
View File
@@ -0,0 +1,11 @@
from .resource_links import (
ResourceUriRewriter,
rewrite_call_tool_result_resource_links,
rewrite_resource_link_content,
)
__all__ = [
"ResourceUriRewriter",
"rewrite_call_tool_result_resource_links",
"rewrite_resource_link_content",
]
@@ -0,0 +1,37 @@
from __future__ import annotations
from collections.abc import Callable
import mcp.types as mcp_types
ResourceUriRewriter = Callable[[str], str]
def rewrite_resource_link_content(
content: mcp_types.ContentBlock,
rewrite_uri: ResourceUriRewriter,
) -> mcp_types.ContentBlock:
"""Return content with ResourceLink URI rewritten through a proxy mapper.
FastMCP's Namespace transform rewrites listed resource URIs, but tool-call
results can also contain typed ResourceLink content. This helper is pure and
uses the official MCP models so it can be reused by a future proxy hook.
"""
if not isinstance(content, mcp_types.ResourceLink):
return content
return content.model_copy(update={"uri": rewrite_uri(str(content.uri))})
def rewrite_call_tool_result_resource_links(
result: mcp_types.CallToolResult,
rewrite_uri: ResourceUriRewriter,
) -> mcp_types.CallToolResult:
"""Return a copy of a tool result with ResourceLink content URIs rewritten."""
return result.model_copy(
update={
"content": [
rewrite_resource_link_content(content, rewrite_uri)
for content in result.content
]
}
)
-1
View File
@@ -145,4 +145,3 @@ async def _send_reload_notifications(ctx: Context, result: ProxyReloadResult) ->
sink = FastMcpContextNotificationSink(ctx)
for event in reload_change_events(result):
await sink.send_event(event)