The fresh scan (77/B) leaves only two on-site-fixable gaps — both implemented here. Everything else is off-site (Wikipedia/citations, documented in #2287–#2289).
/api/search return problem+json, but a bare GET /api still returned an HTML 404 → orank concluded "no API detected". Added app/api/route.ts: a JSON API index at the root.GET /api → 200 application/json
{ "name":"OrchestKit API", "version":"v1",
"endpoints": { "search":..., "ask":..., "mcp":... } }
/api/mcp server (dependency-free): a ui://orchestkit/search-results HTML resource, resources/list + resources/read, resources capability, and _meta.ui.resourceUri on the search tool. Hosts (ChatGPT/Claude) render search hits as an interactive card inline.tools/list → orchestkit_docs_search carries
_meta: { ui: { resourceUri: "ui://orchestkit/search-results" },
"openai/outputTemplate": "ui://orchestkit/search-results" }
resources/list → [ "ui://orchestkit/search-results" ]
tools/call(search) → structuredContent: { results: [...] } ← the template draws this
Honest + real: the UI renders actual search results from the live tool. No fabricated capability, no SDK/native dependency. Verified via a full next build + MCP handshake smoke.