60e0ffc959
Upgrade checks / Notify on failure (push) Has been cancelled
Upgrade checks / Close issue on success (push) Has been cancelled
Schema Crash Test / Real-world schema crash test (232K schemas) (push) Has been cancelled
Run static analysis / static_analysis (push) Has been cancelled
Tests / Tests: Python 3.10 on ubuntu-latest (push) Has been cancelled
Tests / Tests: Python 3.13 on ubuntu-latest (push) Has been cancelled
Tests / Tests: Python 3.10 on windows-latest (push) Has been cancelled
Tests / Tests with lowest-direct dependencies (push) Has been cancelled
Tests / MCP conformance tests (push) Has been cancelled
Tests / Integration tests (push) Has been cancelled
Tests / Package install smoke (push) Has been cancelled
Upgrade checks / Static analysis (push) Has been cancelled
Upgrade checks / Tests: Python 3.10 on ubuntu-latest (push) Has been cancelled
Upgrade checks / Tests: Python 3.13 on ubuntu-latest (push) Has been cancelled
Upgrade checks / Tests: Python 3.10 on windows-latest (push) Has been cancelled
Upgrade checks / Integration tests (push) Has been cancelled
Update MCPServerConfig Schema / update-config-schema (push) Has been cancelled
Update SDK Documentation / update-sdk-docs (push) Has been cancelled
83 lines
3.0 KiB
Python
83 lines
3.0 KiB
Python
"""
|
|
This example demonstrates how to set up and use an in-memory FastMCP proxy.
|
|
|
|
It illustrates the pattern:
|
|
1. Create an original FastMCP server with some tools.
|
|
2. Create a proxy FastMCP server using ``create_proxy(original_server)``.
|
|
3. Use another Client to connect to the proxy server (in-memory) and interact with the original server's tools through the proxy.
|
|
"""
|
|
|
|
import asyncio
|
|
|
|
from fastmcp import FastMCP
|
|
from fastmcp.client import Client
|
|
from fastmcp.server import create_proxy
|
|
from fastmcp.types import TextContent
|
|
|
|
|
|
class EchoService:
|
|
"""A simple service to demonstrate with"""
|
|
|
|
def echo(self, message: str) -> str:
|
|
return f"Original server echoes: {message}"
|
|
|
|
|
|
async def main():
|
|
print("--- In-Memory FastMCP Proxy Example ---")
|
|
print("This example will walk through setting up an in-memory proxy.")
|
|
print("-----------------------------------------")
|
|
|
|
# 1. Original Server Setup
|
|
print(
|
|
"\nStep 1: Setting up the Original Server (OriginalEchoServer) with an 'echo' tool..."
|
|
)
|
|
original_server = FastMCP("OriginalEchoServer")
|
|
original_server.add_tool(EchoService().echo)
|
|
print(f" -> Original Server '{original_server.name}' created.")
|
|
|
|
# 2. Proxy Server Creation
|
|
print("\nStep 2: Creating the Proxy Server (InMemoryProxy)...")
|
|
print(f" (Using create_proxy to wrap '{original_server.name}' directly)")
|
|
proxy_server = create_proxy(original_server, name="InMemoryProxy")
|
|
print(
|
|
f" -> Proxy Server '{proxy_server.name}' created, proxying '{original_server.name}'."
|
|
)
|
|
|
|
# 3. Interacting via Proxy
|
|
print("\nStep 3: Using a new Client to connect to the Proxy Server and interact...")
|
|
async with Client(proxy_server) as final_client:
|
|
print(f" -> Successfully connected to proxy '{proxy_server.name}'.")
|
|
|
|
print("\n Listing tools available via proxy...")
|
|
tools = await final_client.list_tools()
|
|
if tools:
|
|
print(" Available Tools:")
|
|
for tool in tools:
|
|
print(
|
|
f" - {tool.name} (Description: {tool.description or 'N/A'})"
|
|
)
|
|
else:
|
|
print(" No tools found via proxy.")
|
|
|
|
message_to_echo = "Hello, simplified proxied world!"
|
|
print(f"\n Calling 'echo' tool via proxy with message: '{message_to_echo}'")
|
|
try:
|
|
result = await final_client.call_tool("echo", {"message": message_to_echo})
|
|
if result.content and isinstance(result.content[0], TextContent):
|
|
print(
|
|
f" Result from proxied 'echo' call: '{result.content[0].text}'"
|
|
)
|
|
else:
|
|
print(
|
|
f" Error: Unexpected result format from proxied 'echo' call: {result}"
|
|
)
|
|
except Exception as e:
|
|
print(f" Error calling 'echo' tool via proxy: {e}")
|
|
|
|
print("\n-----------------------------------------")
|
|
print("--- In-Memory Proxy Example Finished ---")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|