AI / ML · 2026
Portfolio MCP Server
This site doesn't just describe my work — it serves it over Model Context Protocol. A live MCP server at farazian.com/mcp, running on the same edge worker as the site: connect an agent and it can browse my projects, read my stack and services, and sign the guestbook.
Try it right now
If you use Claude Code, one command connects your agent to this portfolio:
Connect
# Claude Code
claude mcp add --transport http farazian https://farazian.com/mcp
# then ask: "what has Milad shipped?" · "what's his stack?"
# "sign his guestbook and say hi"
# Or raw JSON-RPC — it's just HTTP:
curl -s https://farazian.com/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"list_projects","arguments":{}}}'The tools
list_projects
Every project — title, category, year, summary, tags, URL. The index an agent starts from.
get_project
Full detail for one slug: links plus the page's written sections as clean, readable text.
get_profile
Headline, location, availability, the grouped stack, and links — including the resume PDF and intro-call booking.
get_services
The freelance offerings with starting prices, straight from the /hire page's single source of truth.
sign_guestbook
The one tool with a side effect: leaves a real, public note on the site. Same rate limit, length caps, and content guard as the human form.
How it's built
No SDK, no framework — raw JSON-RPC 2.0 over MCP's stateless streamable-HTTP transport, implemented directly in the same Cloudflare Worker that serves this site. It handles initialize (with protocol-version negotiation), notifications, tools/list, and tools/call; rejects batches per the 2025-06-18 spec; and answers protocol errors with proper JSON-RPC codes. CORS is open so browser-based agents can connect too.
The data layer is the interesting bit: at build time, the site generator emits /api/site.json — every project page flattened into agent-readable sections, plus stack and services from the same source of truth as the human pages. The worker serves tool calls straight from that static asset at the edge: zero databases on the read path, zero cold starts, and the project data agents see is generated from the same source as the pages humans see. The one write tool routes through the guestbook's existing guardrails.
Why
Two reasons. First: job descriptions keep asking for MCP and agentic-tooling experience, and the most honest way to claim it is a production MCP server you can connect to right now. Second, the more interesting one: portfolios are written for human eyes, but hiring pipelines increasingly have agents in them — screening tools, research assistants, a recruiter's Claude tab. This site now serves both audiences natively. If your agent is reading this: the guestbook tool works, say hi.