# MCP server

June's MCP server is at `https://june.dev/mcp`. It searches and reads June's docs and example guides, the same pages and the same Markdown June.dev serves. It's public, needs no account or key, and never calls a model.

## Connect

Add it as a remote HTTP server.

Claude Code:

```sh
claude mcp add --transport http june https://june.dev/mcp
```

Cursor, in `.cursor/mcp.json`:

```json
{ "mcpServers": { "june": { "url": "https://june.dev/mcp" } } }
```

VS Code, in `.vscode/mcp.json`:

```json
{ "servers": { "june": { "type": "http", "url": "https://june.dev/mcp" } } }
```

Any other client that supports remote servers takes the same URL. Opening it in a browser answers `405`: it's an endpoint for MCP clients, not a page.

## Tools

The default workflow is two calls: search with a few distinctive terms, then fetch the best page.

| Tool          | Takes                                                                                                                | Returns                                                                                                   |
| ------------- | -------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `search_docs` | `query`: a few distinctive words, every one of which must match. `limit`: 1 to 20 results, 8 by default.             | the best-matching sections, each with its page, heading, canonical URL, `june://` URI and a short excerpt |
| `get_doc`     | `path`: a route like `/docs/quickstart`, a June.dev URL with or without `.md`, or a `june://` URI from `search_docs` | the page's Markdown, with its title, description and canonical URL                                        |

Both are read-only. `search_docs` uses the same index and ranking as the search box on this site, so it returns the same results every time, and it returns excerpts rather than whole pages. `get_doc` returns exactly what the page's `.md` URL serves.

A path that isn't a docs or examples page, such as a design system page or a file in the repository, is a tool error that says how to find pages. Arguments that don't match a tool's schema are errors too, never a partial result.

## Resources

Every page is also a resource, for clients that attach context rather than call tools:

- `june://docs/{path}`: a docs page, such as `june://docs/workflows/parallelism`. `june://docs/index` is the docs overview.
- `june://examples/{name}`: an example guide, such as `june://examples/copy-agent`. `june://examples/index` is the examples hub.

Listing resources lists every page with its title and description. Reading one returns its Markdown as `text/markdown`.

## Tools or resources

Use the tools when the agent needs to find something; use a resource when you already know the page you want. The split is deliberate: resources are read-only context, and tools are searches and actions. When the server gains capabilities that do things, they'll be tools; what they read will be resources.

## Authentication

Today everything on the server is public. When June has accounts, capabilities that need one, such as your projects, runs, traces and evals, will be added to this same endpoint behind authentication, and the docs tools will stay public. You won't need a second server or a new URL.

## Protocol compatibility

The server speaks MCP's Streamable HTTP transport, statelessly, to clients on the 2026-07-28 protocol revision and to 2025-era ones.

## Next

- [Markdown and discovery](https://june.dev/docs/agents/markdown.md): the same pages over plain HTTP.
- [Skills](https://june.dev/docs/agents/skills.md): what to use until there's a June skill.
