EAG v3 — MCP demo with Prefab UI
A FastMCP server with three tools that exercise (1) the internet, (2) local-file CRUD, and (3) generative UI via Prefab. Designed to run inside Claude Desktop.
Tools
| Tool | Type | Purpose |
|---|---|---|
web_search(query) |
internet | DuckDuckGo Instant Answer API — returns abstract + related topics |
notes_file(action, key, content) |
local CRUD | one tool, action-dispatched (create / read / update / delete / list) over ./notes.json |
show_dashboard() |
UI | renders saved notes as a Prefab card grid (uses @mcp.tool(app=True)) |
Setup
Requires uv (brew install uv) and Claude Desktop.
cd /Users/nitingangwar/Documents/Code/eagv3/mcp
uv sync
Wire into Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json and add (or merge) the mcpServers block:
{
"mcpServers": {
"eag-mcp-demo": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--directory",
"/Users/nitingangwar/Documents/Code/eagv3/mcp",
"python",
"server.py"
]
}
}
}
Restart Claude Desktop. The MCP indicator should show eag-mcp-demo with three tools.
plain-Python fallback (no uv)
python3 -m venv .venv
.venv/bin/pip install -e .
Then in Claude Desktop config use:
"command": "/Users/nitingangwar/Documents/Code/eagv3/mcp/.venv/bin/python",
"args": ["/Users/nitingangwar/Documents/Code/eagv3/mcp/server.py"]
Demo prompt
Paste this in Claude Desktop after the server is wired up:
Find the ownership details of Tata Sons via web search, save a 2–3 sentence summary into my notes file under the key
tata_sons, then open the dashboard so I can see it.
Expected behavior:
web_search("Tata Sons ownership")→ DDG abstract.notes_file("create", "tata_sons", "<summary>")→ writes tonotes.json.show_dashboard()→ renders a Prefab card grid inline with one card.
Re-run with another company (e.g. "Reliance Industries") and the dashboard now shows two cards.
Smoke test
# Server starts and blocks on stdin (correct):
uv run python server.py
# Or interactive inspector:
npx @modelcontextprotocol/inspector uv run python server.py
In the inspector: list tools, call web_search("Tata Sons"), then call notes_file("create", "x", "y") and confirm notes.json updates on disk.
Fallbacks
- Prefab renderer doesn't engage (Claude Desktop returns JSON instead of UI): change the
show_dashboarddecorator from@mcp.tool(app=True)to plain@mcp.tooland have it return a Markdown table built fromnotes.json. - DuckDuckGo returns empty for the query: DDG only has Instant Answers for well-known entities. Use famous companies / people / places for the demo.
Files
server.py # FastMCP server with the 3 tools
notes.json # backing store for notes_file (starts as {})
pyproject.toml # deps: fastmcp[apps], prefab-ui==0.19.1, httpx