type + more codex docs
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
---
|
||||
title: Namespace transform does not rewrite ResourceLink URIs returned from proxied tools
|
||||
---
|
||||
|
||||
## summary
|
||||
|
||||
With a `Namespace` transform on a proxy, listed resources are namespaced
|
||||
correctly.
|
||||
However, `ResourceLink.uri` values returned from a proxied
|
||||
`tools/call` result keep the upstream URI instead of the proxied URI.
|
||||
|
||||
Tested on FastMCP `3.3.0`.
|
||||
|
||||
## minimal example
|
||||
|
||||
```python
|
||||
from fastmcp.server import create_proxy
|
||||
from fastmcp.server.transforms import Namespace
|
||||
|
||||
proxy = create_proxy(upstream_client, name="Proxy-everything")
|
||||
proxy.add_transform(Namespace("everything"))
|
||||
```
|
||||
|
||||
An upstream resource looking like this:
|
||||
|
||||
```text
|
||||
demo://resource/dynamic/text/2
|
||||
```
|
||||
|
||||
will be exposed correctly as:
|
||||
|
||||
```text
|
||||
demo://everything/resource/dynamic/text/2
|
||||
```
|
||||
|
||||
But if an upstream tool returns:
|
||||
|
||||
```python
|
||||
mcp.types.ResourceLink(
|
||||
type="resource_link",
|
||||
name="dynamic-text",
|
||||
uri="demo://resource/dynamic/text/2",
|
||||
)
|
||||
```
|
||||
|
||||
the proxied tool result still contains:
|
||||
|
||||
```text
|
||||
demo://resource/dynamic/text/2
|
||||
```
|
||||
|
||||
## Observed Behavior
|
||||
|
||||
```text
|
||||
resources/list:
|
||||
upstream: demo://resource/dynamic/text/2
|
||||
proxied: demo://everything/resource/dynamic/text/2
|
||||
|
||||
resources/read:
|
||||
demo://everything/resource/dynamic/text/2
|
||||
-> works
|
||||
|
||||
tools/call result content:
|
||||
ResourceLink.uri == demo://resource/dynamic/text/2
|
||||
-> raw upstream URI leaks through unchanged
|
||||
```
|
||||
|
||||
## expected behavior
|
||||
|
||||
`ResourceLink` content returned by proxied tools should expose the same proxied
|
||||
URI as `resources/list` and `resources/read`.
|
||||
|
||||
## scope of this issue
|
||||
|
||||
This is specifically about `mcp.types.ResourceLink` content inside `tools/call`
|
||||
results. Normal `resources/list`, `resource_templates/list`, and
|
||||
`resources/read` already behave correctly through the proxy.
|
||||
|
||||
Session-scoped resources returned by some tools may have additional lifecycle
|
||||
constraints beyond URI rewriting. This issue is about ordinary ResourceLink URI
|
||||
projection only.
|
||||
Reference in New Issue
Block a user