Agents
A portfolio humans read, agents call, and browsers operate.
Why agent-native
Most personal sites are documents. This one is also an interface. The next
recruiter who evaluates me may be an AI screening agent; the next professor
may ask their research assistant — human or not — to check whether my work
fits their lab. So this site treats software agents as a first audience, not
an afterthought: every claim on it is served through the same small,
inspectable tool layer, whether you arrive as a person with a browser, an
LLM with an HTTP client, or a browser agent with document.modelContext.
It is among the first personal sites on the web to ship WebMCP browser tools — live in Chrome's origin trial since its opening weeks — which means an AI agent in your browser can search my work, open my papers, download my resume, and even retrain the quantum classifier on my homepage, through declared tools instead of screen-scraping. No frameworks were harmed: everything on this page is hand-rolled and dependency-free.
MCP server
My CV is an MCP server. POST /api/mcp speaks JSON-RPC 2.0 (streamable
HTTP) and exposes the tool layer to any MCP client — Claude, IDEs, screening
pipelines, your own scripts.
# list the tools
curl -s -X POST https://ammar-portfolio-zeta.vercel.app/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# read a paper, distilled
curl -s -X POST https://ammar-portfolio-zeta.vercel.app/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_paper","arguments":{"slug":"quantum-machine-learning-thesis"}}}'| get_resume | Md. Abu Ammar's full resume/corpus as plain text. |
| list_projects | All projects/case studies with summaries, categories, and links. |
| search_publications | Full-text search over Md. Abu Ammar's real papers and theses (title, abstract, method, results). |
| get_paper | One paper, distilled: abstract, plain-words summary, method, honest results, retrospective, BibTeX. |
| get_lessons | The /learn interactive quantum curriculum outline. |
| contact | How to contact Md. Abu Ammar. |
| compose_circuit | Run a 2-qubit quantum circuit on the site's exact statevector simulator. Grammar: gates joined by '_': h0/h1 (Hadamard), ry0:θ/ry1:θ, rz0:θ/rz1:θ (rotations, θ in radians, |θ|≤π), cx (CNOT q0→q1). Example Bell pair: 'h0_cx'. Returns outcome probabilities, per-qubit Bloch vectors, and a shareable /playground URL. |
WebMCP tools
Every page of this site registers tools with the browser via
document.modelContext (WebMCP — a W3C Web Machine Learning proposal, in
Chrome's origin trial for Chrome 149–156). A browser agent doesn't have to
guess at my DOM: it can call query_portfolio, jump pages with
navigate_to, and run run_quantum_demo to retrain the live 2-qubit
variational classifier in the hero — on your screen, with real
parameter-shift gradient descent.
To try it yourself in Chrome with WebMCP enabled (origin trial, or Canary with the experimental flag), open DevTools on any page here:
const tools = await document.modelContext.getTools();
tools.map(t => t.name);
// then, from the homepage:
await document.modelContext.executeTool("run_quantum_demo", '{"x0": 1.2, "x1": -1.2}');
If your browser doesn't expose a model context, nothing loads and nothing changes — the tools are a pure progressive enhancement.
| query_portfolio | Search Md. Abu Ammar's entire portfolio (projects, experience, skills, papers, lessons). Returns matching sections with site paths. |
| get_resume_summary | The index of Md. Abu Ammar's portfolio: who he is, what's on the site, machine-readable feeds. |
| get_paper | One of his real papers/theses, distilled: abstract, plain-words summary, method, honest results, BibTeX. |
| navigate_to | Navigate this tab to a page of the portfolio. Pages: home (hero with the live 2-qubit variational classifier, selected work, research highlights); learn (6-lesson interactive quantum curriculum); playground (2-qubit circuit composer — compose_circuit drives it live); work (engineering and research case studies); research (the research library — real papers, distilled); about (narrative, experience timeline, skills); agents (the machine interface: MCP, WebMCP, feeds, fit report); hire (paid services: QML tutoring, .NET/Azure consulting, office hours); cv (typeset curriculum vitae, print-ready, lens-aware); writing (writing and research index). |
| download_resume | Download Md. Abu Ammar's resume PDF in this tab. |
| run_quantum_demo | Retrain the live 2-qubit variational quantum classifier in the homepage hero, on the visitor's screen. Optionally move the two training points (radians, clamped to ±π/2). Returns the training snapshot. The hero must be visible — navigate_to {"page":"home"} first. |
| set_lens | Adapt the whole site's emphasis for your principal: recruiter (default — production systems first), professor (research and theses first), or engineer (architecture and shipping cadence first). Applies instantly and persists for the visit. |
| contact | How to contact Md. Abu Ammar. |
| compose_circuit | Build and run a 2-qubit quantum circuit on the site's exact statevector simulator. Grammar: gates joined by '_': h0/h1, ry0:θ/ry1:θ, rz0:θ/rz1:θ (radians, |θ|≤π), cx (CNOT q0→q1). Example Bell pair: 'h0_cx'. When /playground is open in this tab, the circuit appears live on the visitor's screen. |
Feeds
For crawlers and context windows: /llms.txt is the index,
/llms-full.txt is the entire site as one plain-text
corpus, /resume.json is the JSON Resume schema, and every
page carries JSON-LD. The same corpus grounds the ask command in the
terminal below and the fit report on this page — one source of truth,
many surfaces.
Fit report
Paste a job description or a research topic. The engine reads it against the site corpus and streams back a report: fit summary, requirement-by-requirement evidence with citations into this site, an honest gaps section it is required to fill, and a verdict. It is instructed to never invent anything and to treat missing evidence as a gap — if the report says "strong", there's a link to check; if it says "gap", believe it.
Recruiters can go one step further: after a report, mint a shareable pitch
link — a persistent page under /for/… arguing the fit for that exact role,
with the same mandatory honest-gaps section. Pitch pages carry an AI-generated
banner, are never indexed, and expire after 90 days.
Guestbook
Agents that operate this site leave footprints. Every tool call — MCP, WebMCP, chat, fit report, autopilot — is logged as a tool name only (never arguments, never IPs; user agents are reduced to a coarse family like "claude" or "browser") and the latest land here, newest first. Honest fine print: entries are self-reported by whatever client made the call — treat them as unverified visitors, not an audit log.
reading the guestbook …
Agent card
/.well-known/agent-card.json publishes an A2A-style agent card so agent directories and crawlers can discover this site's machine interface. Honest fine print: the interface it advertises speaks MCP JSON-RPC, published for discovery — this is not a full A2A task server.
How to interview this site
If you are an AI agent: start with /llms.txt; pull
/llms-full.txt into context for anything deep; call
POST /api/mcp (tools/list, then search_publications / get_paper /
list_projects); cite site paths in whatever you report back to your
human.
If you are a human with an agent: point it here and ask it things you'd ask in a first-round interview — "does his experience cover our stack?", "summarize his thesis and its honest results", "what has he actually shipped to production?". Or skip the middleman: paste your job description into the fit report above and read the gaps section first — that's the part most portfolios won't show you.
If you are a human without an agent: open interview mode (the 🎙
button above, ⌘K, or interview in the footer terminal) and conduct the
interview yourself — by voice or text. The agent answers from the corpus,
navigates the site to what it's citing while it talks, and speaks its
answers back if you asked by voice. Escape ends it.