mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 23:29:10 +02:00
- Restructured confusing sections: 'Object-like Results' → 'Dictionaries and Objects', 'Non-object Results' → 'Primitives and Collections', 'Complex Type Example' → 'Typed Models' - Simplified CodeGroup examples to show Tool Definition + MCP Result instead of 3-4 confusing tabs - Split Primitives/Collections into separate CodeGroups for clarity - Renamed 'Full Control with ToolResult' → 'ToolResult and Metadata' for better TOC visibility - Flattened ToolResult documentation with inline field descriptions instead of nested headings - Added version badge for ToolResult meta field (2.13.1) - Added clarification that ToolResult meta is separate from @mcp.tool meta - Improved example server with realistic metadata (execution time, character/word counts) - Fixed code formatting (multi-line objects, trailing commas)
41 lines
956 B
Python
41 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()),
|
|
},
|
|
)
|