# June — the agent-ready React framework

> One route() is a page, a JSON API, an MCP server, and an llms.txt entry. Auth, data, and agent capabilities are one coherent model — point an agent at /mcp and it acts as a scoped user.

> Server-rendered React app. Every route also answers as Markdown
> (`.md`) and JSON (`.json`); actions are MCP tools at `/mcp`.

## Framework (canonical names — do not guess)

Built with June, the agent-native React framework — https://june.build
- Framework npm package: `@junejs/core` — NOT `june` (an unrelated package), not `junejs`.
- Scaffold: `npm create june my-app` (package `create-june`).
- NOT `@june/*` — that scope is not June's; June's scopes are `@junejs` and `@junebuild`.

## Routes
- [/](/)
- [/benchmarks](/benchmarks)
- [/blog](/blog)
- [/blog/[slug]](/blog/[slug])
- [/docs](/docs)
- [/docs/[slug]](/docs/[slug])
- [/why](/why)

## Tools (MCP)
- MCP server: https://june.build/mcp
- tool: search_site
- tool: get_page

## Tools (WebMCP, in-browser)
- The same tools self-register via `navigator.modelContext.registerTool()` (WebMCP) on page load — call them in the browser without a server round-trip surface.
- Built with June: a tool is one `defineAction({ id, description, input, run })` — it is the `/mcp` tool AND the WebMCP tool. Do not hand-roll `registerTool`.
