arcade-mcp/libs/arcade-mcp-server/docs/examples/02_building_apps.py
Eric Gustin a11f79b32d
Update arcade-mcp-server docs (#597)
1. Updates docs to prefer `uv run server.py` instead of `arcade mcp` or
`python -m arcade_mcp_server`
2. Found a bug with running stdio servers while updating the docs, so i
snuck that in this PR
2025-10-02 17:16:38 -07:00

66 lines
1.6 KiB
Python

#!/usr/bin/env python
"""
02_building_apps.py - Build an MCP server using MCPApp
This example shows how to build and run an MCP server programmatically
using `MCPApp` instead of relying on the arcade_mcp_server CLI.
To run (HTTP transport by default):
python 02_building_apps.py
To run with stdio transport (for Claude Desktop):
python 02_building_apps.py stdio
"""
import sys
from typing import Annotated
from arcade_mcp_server import Context, MCPApp
# Create the MCP application
app = MCPApp(
name="my_mcp_server", version="0.1.0", instructions="Example MCP server built with MCPApp"
)
@app.tool
def greet(
name: Annotated[str, "Name of the person to greet"],
) -> Annotated[str, "Greeting message"]:
"""Return a friendly greeting.
Parameters:
name: Person's name
Returns:
Greeting message.
"""
return f"Hello, {name}!"
@app.tool
async def whoami(context: Context) -> Annotated[dict, "Basic server and user information"]:
"""Return basic information from the tool context.
Returns:
Dictionary with `user_id` and whether MCP features are available.
"""
user_id = context.user_id or "anonymous"
if context:
await context.log.info(f"whoami called by: {user_id}")
secret_keys = [secret.key for secret in context.secrets] if context.secrets else []
return {
"user_id": user_id,
"secret_keys": secret_keys,
}
if __name__ == "__main__":
# Check if stdio transport was requested
if len(sys.argv) > 1 and sys.argv[1] == "stdio":
app.run(transport="stdio")
else:
# Default to HTTP transport
app.run(host="127.0.0.1", port=8000)