---
title: "Docs MCP functions"
description: "Three MCP functions — docs_list, docs_search, docs_read — for agents to browse and read the Aeontel documentation."
section: "MCP"
order: 20
---

# Docs MCP functions

The Aeontel MCP server ships three read-only functions (exposed as MCP tools via
`server.tool(...)`) that let agents browse and read the docs at
`docs.aeontel.com`. They are part of the regular MCP surface at `POST /mcp` — no
separate server, no extra auth beyond the one you already use for Aeontel.

## `docs_list`

Browse the docs table of contents. Call this first to discover what pages exist
before reading.

**Parameters**

- `section?: "general" | "platform" | "api" | "cli" | "mcp" | "libraries"` —
  restrict to one top-level area.

**Response**: `{ title, path, section, summary }[]`. No IDs, no raw URLs — just
the data an agent needs to plan the next call.

```json
{
  "title": "Agents",
  "path": "/concepts/agents",
  "section": "General",
  "summary": "AI agents with instructions, a model, and bound functions."
}
```

## `docs_search`

Keyword search across every page. Returns the top matches ranked by a simple
term-frequency score. Title matches are weighted heavily.

**Parameters**

- `query: string` — the keyword or phrase (minimum 2 chars).
- `section?: DocSection` — same values as `docs_list`.
- `response_format?: "concise" | "detailed"` — `concise` (default) returns 5
  hits with ≤300-char excerpts; `detailed` returns 10 hits with ≤800-char
  excerpts.

**Response**: `{ title, path, section, excerpt }[]`.

:::tip[Search backend]
The in-process search scores pages by term frequency over the bundled
`llms-full.txt`. It's intentionally simple — fast, cacheable on the edge, no
external index to keep in sync. Swap in embeddings later if usage warrants
it.
:::

## `docs_read`

Fetch the full markdown for a specific doc page.

**Parameters**

- `path: string` — from `docs_list`. Trailing `.md` is accepted.
- `response_format?: "full" | "summary"` — `full` (default) returns the entire
  markdown. `summary` returns only the frontmatter plus the first ~400 chars —
  handy for quick skim before committing to a read.

**Errors**: unknown paths return an actionable message —
`Unknown doc path "xxx". Call docs_list to see available paths, or docs_search to find by keyword.` — so agents know how to recover.

## Design notes

These functions are designed per Anthropic's
[tool-writing guide](https://www.anthropic.com/engineering/writing-tools-for-agents)
(MCP calls them tools on the wire; Aeontel-side they're functions):

- **Unambiguous parameters** — typed enums, never free-form strings for known
  domains (`DocSection`, `response_format`).
- **Response shapes stripped of low-signal data** — no raw URLs when a path
  suffices, no internal IDs.
- **Actionable errors** — every error message names the remediation function.
- **Response-format enums** — callers opt into verbosity instead of the server
  guessing.
- **Namespaced names** — `docs_*` groups these functions together the way the
  guide endorses (`asana_search`, `asana_projects_search`).
