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
42 lines
956 B
Python
42 lines
956 B
Python
"""
|
|
FastMCP Echo Server with Metadata
|
|
|
|
Demonstrates how to return metadata alongside content and structured data.
|
|
The meta field can include execution details, versioning, or other information
|
|
that clients may find useful.
|
|
"""
|
|
|
|
import time
|
|
from dataclasses import dataclass
|
|
|
|
from fastmcp import FastMCP
|
|
from fastmcp.tools.tool import ToolResult
|
|
|
|
mcp = FastMCP("Echo Server")
|
|
|
|
|
|
@dataclass
|
|
class EchoData:
|
|
data: str
|
|
length: int
|
|
|
|
|
|
@mcp.tool
|
|
def echo(text: str) -> ToolResult:
|
|
"""Echo text back with metadata about the operation."""
|
|
start = time.perf_counter()
|
|
|
|
result = EchoData(data=text, length=len(text))
|
|
|
|
execution_time = (time.perf_counter() - start) * 1000
|
|
|
|
return ToolResult(
|
|
content=f"Echoed: {text}",
|
|
structured_content=result,
|
|
meta={
|
|
"execution_time_ms": round(execution_time, 2),
|
|
"character_count": len(text),
|
|
"word_count": len(text.split()),
|
|
},
|
|
)
|