Files
robonen edcccf16d8
Publish to NPM / Check version changes and publish (push) Has been cancelled
feat(docs): stop hiding half the component API — typed emits, exposes, flow guide
The per-part regex only saw defineEmits<{ inline literal }>(), so a named
interface — how Flow, Popover, Dialog, Menu and Drawer all declare their
events — extracted as zero emits, and defineExpose was not extracted at
all: 36 components' template-ref surfaces were invisible. Consumers
rebuilt what existed (nodeDragStop from @nodes-change, a renderless
child to reach fitView).

- extractor: one type-checking project per components package with a
  virtual <file>.vue.ts mirror per SFC, so cross-file emits interfaces
  (extends included) and expose spreads resolve through the checker —
  ...api expands into the composable's full return with its JSDoc
- parts gain exposes; emits/exposes members carry their JSDoc text;
  update:* model emits get a stock description
- UI: Description column on emits, an Exposes (template ref) table; MCP
  get_doc renders the same
- FlowRoot: JSDoc on every emit and exposed member
- new primitives guide page: building flow graphs — sizing, custom
  nodes, .nodrag, click family, instance API, edge labels

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 03:37:23 +07:00
..

Docs MCP server

An MCP server that exposes the @robonen/tools documentation to any MCP client (Claude Code, Claude Desktop, Cursor, …).

It is served by the Nuxt/Nitro docs server itself — there is no separate process. The documentation metadata is the same data that renders the docs site (produced by ../extractor at build time and injected into Nitro as the #docs/server-metadata virtual), so what an agent reads is always in sync with the site.

Run

Start the docs server, and the MCP endpoint comes up with it:

pnpm docs:dev      # → http://localhost:3000, MCP at http://localhost:3000/mcp

POST /mcp speaks the MCP Streamable HTTP transport (stateless, JSON responses). The route lives at ../../server/routes/mcp.post.ts.

Register with a client

A project-scoped .mcp.json at the repo root already points Claude Code at the endpoint — start the docs server, then approve the robonen-docs server:

{
  "mcpServers": {
    "robonen-docs": { "type": "http", "url": "http://localhost:3000/mcp" }
  }
}

Tools

Tool Arguments Returns
list_packages Every documented package grouped by core / vue / configs / infra.
search_docs query, limit? Ranked package/slug matches across items, components and guides.
get_package slug A package's table of contents (categories, components or sections).
get_doc package, name Full reference for one item: signatures, params, examples, props/emits.

name accepts either the URL slug (use-clipboard) or the exported name (useClipboard). Slugs are unique within a package; case-only collisions (e.g. the useProjection function vs the UseProjection type) are disambiguated with a kind suffix (use-projection-type).

Resources

  • robonen-docs://index — the documentation index.
  • robonen-docs://{package}/{slug} — full Markdown for a single documented item (listable, one entry per leaf).

Layout

File Responsibility
../../server/routes/mcp.post.ts Nitro HTTP route — bridges the request to the MCP transport.
create-server.ts Builds the configured McpServer (tools + resources) from metadata.
docs-index.ts Pure query layer — flatten, unique-slug, search, resolve.
format.ts Markdown renderers for tool/resource payloads.
*.test.ts Unit tests for the query layer.