agents-docs
agents-docs
Documentación RAG de markdown local, ultrarrápida y sin inflado, para agentes de IA mediante MCP.
Búsqueda BM25 instantánea sobre documentación oficial de frameworks y registros de modelos de IA en vivo. Compartida entre Cursor, Claude Code, Antigravity y Zed.
¿Por qué .agents/docs?
Los agentes de codificación alucinan con frecuencia con APIs obsoletas (Svelte 4 vs 5 Runes, Tailwind v3 vs v4, React 19 Actions) o hacen referencia a modelos de LLM y precios de tokens desactualizados.
Las soluciones tradicionales de RAG con vectores de incrustación son infladas: requieren contenedores Docker, cientos de megabytes de dependencias de Python (Chroma, LangChain) y llamadas de API de incrustación lentas que dividen los bloques de código por la mitad.
agents-docs aplica la filosofía Lolaplex:
Cero bases de datos vectoriales: Fragmentación de markdown consciente de encabezados + clasificación léxica BM25 pura en Python con coincidencia de encabezado (+6.0) y frase completa (+10.0).
Búsqueda en menos de 10 ms: Recuperación instantánea directamente desde archivos markdown en disco (
~/.agents/docs/).Registro de modelos de IA en vivo: Ventanas de contexto, puntos de referencia y precios de token ($/M) en tiempo real para modelos Frontier y de pesos abiertos (Claude 5/4, GPT-5/o3/o4, Gemini 3.x, DeepSeek V4/R1, Qwen 2.5 Coder).
Catálogo seleccionado de 21+ frameworks: Sincronización con 1 clic para
llms.txtoficial (TypeScript Handbook, Svelte 5, FastAPI, Tailwind v3/v4, Tauri 2, Next.js, Supabase, Hono, WXT, Netlify, Coolify, Cloudflare, Resend, React, Vite, Zod, Pydantic, shadcn/ui).Poda de ruido determinista: Elimina automáticamente envoltorios HTML, ruido de enlaces y pancartas de cookies sin alterar bloques de código ni tablas.
Servidor MCP universal: Interfaz FastMCP stdio con sincronización automática e inspección de manifiestos de dependencias.
Related MCP server: Speakeasy Docs MCP
Arquitectura y flujo
┌─────────────────────────────────────────────────────────────┐
│ DOCS & MODEL REGISTRIES │
│ Official llms.txt · TypeScript Handbook · OpenRouter │
└──────────────────────────────┬──────────────────────────────┘
│ agents-docs sync <name>
▼
┌─────────────────────────────────────────────────────────────┐
│ DETERMINISTIC NOISE PRUNER │
│ Strips HTML boilerplate while preserving 100% of code │
└──────────────────────────────┬──────────────────────────────┘
│ Header-aware chunking
▼
┌─────────────────────────────────────────────────────────────┐
│ LOCAL DOCUMENTATION STORE │
│ ~/.agents/docs/ai-models/ ~/.agents/docs/svelte-5/ │
│ ~/.agents/docs/typescript/ ~/.agents/docs/fastapi/ │
└──────────────┬───────────────────────────────┬──────────────┘
│ │
▼ ▼
┌─────────────────────────────┐ ┌─────────────────────────────┐
│ LEXICAL BM25 │ │ MCP SERVER & CLERK │
│ Header Match Boost (+6.0) │ │ search_docs · list_docsets │
│ Sub-10ms Exact Retrieval │ │ sync_project_docs │
└─────────────────────────────┘ └─────────────────────────────┘Inicio rápido
Configuración en 1 paso
pip install agents-docs && agents-docs initCrea ~/.agents/docs/, siembra el registro de ai-models en vivo, conecta automáticamente las configuraciones de MCP en tus IDE instalados y registra habilidades de asistente.
[!SUGERENCIA] 🤖 Configuración impulsada por agentes (Cero fricción):
Simplemente dile a tu agente de codificación: "Instala y configura agents-docs para mí."
El agente instala el paquete, ejecutaagents-docs inity recupera automáticamente la documentación fresca siempre que hagas preguntas sobre el stack técnico o los precios de los modelos.
Referencia de la CLI
Comando | Propósito |
| Configuración plug & play: configura automáticamente MCP en todos los IDE y siembra la documentación de modelos |
| Lista los 21+ marcos y catálogos de modelos preconfigurados |
| Descarga/actualización con 1 clic de la documentación oficial del marco |
| Ingiere cualquier |
| Búsqueda BM25 rápida en todos los conjuntos de documentación instalados |
| Búsqueda con ámbito en un conjunto de documentación específico |
| Limpieza de ruido y plantillas en toda la documentación instalada |
| Lista todos los conjuntos de documentación en disco con recuentos de archivos y bytes |
| Ejecuta el servidor FastMCP stdio (predeterminado) |
Referencia de herramientas MCP
Herramienta | Parámetros | Descripción |
| Ninguno | Lista todos los conjuntos de documentación en |
|
| Devuelve las secciones de markdown con encabezados y bloques de código más relevantes en milisegundos. Sincroniza automáticamente los conjuntos de documentación faltantes bajo demanda. |
|
| Devuelve el contenido en bruto de un archivo específico. |
| Ninguno | Lista los 21+ marcos y catálogos de modelos preconfigurados disponibles para sincronización con 1 clic. |
|
| Descarga/actualiza la documentación oficial del catálogo o de una URL de |
|
| Inspecciona |
| Ninguno | Escanea |
Ecosistema compatible
Claude Code: Vinculado mediante el servidor MCP y
.agents/skills/docs-search.Google Antigravity: Integrado mediante
.gemini/configy el MCP deagents-docs.Cursor: Configura automáticamente
.cursor/mcp.jsony las reglas del agente.Zed: Configura
context_serversy refleja las habilidades del asistente.VS Code / Windsurf: Cableado automático de la configuración de Cline / Roo-Code MCP.
Especificación abierta
Las especificaciones arquitectónicas detalladas viven en abi/:
abi/WHY.md— Justificación arquitectónica y BM25 frente a vectores de incrustación.abi/LAYOUT.md— Taxonomía de almacenamiento en~/.agents/docs/.abi/MCP.md— Definiciones y esquemas de la superficie de herramientas.abi/CATALOG.md— Esquema del catálogo seleccionado y tipos admitidos.abi/LLMSTXT.md— Soporte para el estándarllms.txt.
Pruebas y verificación
Ejecuta la suite de pruebas en todos los motores:
python tests/run_all_tests.pyLicencia
Licencia MIT. Consulta LICENCIA para más detalles.
Available Tools
8 toolsdelete_docA
Delete a technical fact sheet that is wrong, duplicate, or yanked.
Do not delete because a fact is old. Old-but-still-true model/API notes stay.
Args: name: Document identifier to delete category: Category where the doc resides ('stacks', 'models', 'apis', 'platforms', 'custom')
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| category | No | custom |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full behavioral burden. It usefully defines what qualifies for deletion, but for a destructive tool it never states whether the deletion is permanent or reversible, what permissions are needed, or what happens to linked references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key exclusion rule are front-loaded in two short sentences, followed by a compact args list. No filler, though the args list largely restates the schema's properties.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and both parameters are covered. For a destructive operation with no annotations, the omission of reversibility/permission context is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: 'name' is documented as a document identifier, and 'category' is given as the location of the doc with the full enumerated set ('stacks', 'models', 'apis', 'platforms', 'custom') plus the 'custom' default. It only lacks guidance on name format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (delete) plus resource (technical fact sheet) with qualifying criteria (wrong, duplicate, or yanked). An agent can distinguish this from write_doc/get_doc without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit negative rule: 'Do not delete because a fact is old. Old-but-still-true model/API notes stay.' This is a real when-not constraint. It stops short of naming the alternative tool (e.g., write_doc to correct a stale-but-true note), so it is 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_docA
Fetch the complete raw markdown of a technical fact sheet, spec, or playbook.
Args: name: Name or relative path of the doc (e.g. 'tailwind-v3', 'stacks/fastapi.md', 'coolify-db', 'ai-models/pricing_and_specs.md') category: Optional category filter ('stacks', 'models', 'apis', 'platforms', 'custom', or 'all').
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| category | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that output is raw markdown and complete rather than summarized or truncated, but it says nothing about read-only nature, permissions, or behavior when the doc is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is a single front-loaded sentence, and the Args block is compact. The docstring-style formatting is slightly mechanical but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and both inputs are documented with examples. What is missing is routing guidance relative to the six sibling tools and any failure behavior for unknown names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it documents both parameters with concrete path examples and enumerates the accepted category values ('stacks', 'models', 'apis', 'platforms', 'custom', 'all') that the schema does not constrain via enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (doc) plus the return form ('complete raw markdown'), which implicitly separates it from search_docs' snippet-style results. It never names a sibling or explicitly contrasts scope, so it falls short of the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetching 'complete raw' content suggests a lookup-by-known-name flow, but nothing says when to prefer this over search_docs or list_docs, nor that search should come first when the name is unknown. The category filter hints at narrowing, but no when/when-not rule is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_playbookA
Get self-awareness operational playbooks, strengths, traps, and best practices for AI models. Enables models to understand their own capabilities and optimize tool execution patterns.
Args: model: Model name or family (e.g. 'gemini-3.7-flash', 'claude-3.7-sonnet', 'gpt-4o', 'deepseek-r1', 'qwen', or 'auto').
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Get' implies a read-only retrieval, and it discloses that the payload covers strengths/traps/best practices, but it says nothing about permissions, caching, freshness, or whether the playbook is static. Adequate but thin for an annotation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences plus a short args block; no filler. The 'Args:' formatting is slightly heavier than needed for a single optional parameter, but nothing is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the single optional parameter is covered with examples. The remaining gap is the undisclosed behavior of 'auto' and the lack of any freshness/scope caveat, which are minor for a read-style lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that `model` accepts a model name or family and provides five concrete examples plus the 'auto' sentinel. It still doesn't explain what 'auto' resolves to, but this is substantially better than the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('self-awareness operational playbooks, strengths, traps, and best practices for AI models'), which is clearly distinct from the doc-oriented siblings. The purpose is understandable, though the phrase 'self-awareness operational playbooks' is somewhat abstract and never concretely described.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence ('Enables models to understand their own capabilities and optimize tool execution patterns') implies a usage context but gives no explicit when-to-use trigger, no prerequisites, and no comparison to alternatives. The 'auto' option hints at a default path but doesn't say when to pick a specific model instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalogA
List curated pre-configured framework docsets available for 1-click sync. Includes Svelte 5, FastAPI, Next.js, Supabase, Tailwind v3/v4, Tauri 2, Hono, MCP, WXT.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'List' and the example frameworks give a reasonable sense of expected content, and the tool has no parameters, making it likely read-only. With no annotations, the description carries the transparency burden, but it does not explicitly state that this is a non-mutating operation or how results are ordered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and concrete examples. Every word earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema, the description fully covers what is being listed, why it matters for one-click sync, and what the catalog contains. There are no critical gaps for this level of complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds meaningful context about curated pre-configured docsets and the sync availability that the empty schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists curated pre-configured framework docsets and gives concrete examples, so the verb and resource are specific. It does not explicitly differentiate itself from the similarly named sibling list_docsets, preventing a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_docsets, search_docs, or sync_docset. The wording implies it is for discovering pre-configured docsets, but no alternatives or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_docsB
List all indexed technical documents, fact sheets, API specs, and playbooks with category and size.
Args: category: Filter by category ('stacks', 'models', 'apis', 'platforms', 'custom', or 'all')
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. Beyond the implied read-only nature of 'List', it says nothing about pagination, result limits, ordering, or auth requirements, which matters for a catalog-listing tool. 'with category and size' is the only return-behavior hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One summary sentence plus a compact argument block; nothing is wasted. The front-loaded sentence carries the purpose, though the 'Args:' formatting adds minor structural noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the single optional parameter is documented. Only pagination/scope limits are unaddressed; otherwise complete for a simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% – the schema only declares a string with default 'all' and no enum. The description compensates by enumerating the valid values ('stacks', 'models', 'apis', 'platforms', 'custom', 'all'), adding meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('indexed technical documents, fact sheets, API specs, and playbooks'), so the agent knows exactly what it returns. It does not, however, distinguish itself from the sibling search_docs or list_catalog, leaving the enumeration-vs-search boundary to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'List all indexed...' implies enumerating the full catalog, which hints at when to prefer it over search_docs. There is no explicit when-to-use/when-not statement or named alternative, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsA
Search hard technical facts, API specs, stack rules, model capabilities, and playbooks using header-aware BM25 ranking.
Args: query: Keywords, function signatures, syntax, or technical questions (e.g. 'runes $state', 'HTTPException', 'coolify postgres port', 'cdp tab focus') category: Target category ('stacks', 'models', 'apis', 'platforms', 'custom', or specific docset name, or 'all' to search everything). top_k: Number of relevant sections to return (default 4).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| category | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the ranking algorithm and that results are ranked sections, which is useful, but says nothing about permissions, result ordering guarantees, or failure behavior; the existence of an output schema removes the need to describe return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded opening sentence followed by a compact Args block. The parenthetical query examples add real value rather than filler, and nothing is redundant, though the examples are slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three parameters are documented in the description, which is essential given 0% schema coverage, and the output schema covers return values. Guidance on selecting this tool over siblings is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it enumerates the accepted category values ('stacks', 'models', 'apis', 'platforms', 'custom', docset name, 'all'), explains top_k as 'number of relevant sections to return (default 4)', and gives concrete query examples. Format details like query syntax are left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and the resource/content type (hard technical facts, API specs, stack rules, model capabilities, playbooks), and adds the ranking mechanism (header-aware BM25). It clearly reads as a retrieval tool distinct from write/list/delete siblings, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content scope ('hard technical facts, API specs...') and by the query examples, but there is no explicit guidance on when to prefer this over get_doc or get_model_playbook, nor any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_external_docB
Fetch/synchronize an external documentation set from curated catalog or custom llms.txt URL.
Args: name: Name of the catalog item (e.g. 'svelte-5', 'fastapi', 'tailwind-v3') or custom identifier. url: Optional custom URL (pointing to llms.txt, llms-full.txt, or raw markdown).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Synchronize' implies a write/persist operation that could overwrite or duplicate previously synced docs, but the description says nothing about idempotency, overwrite semantics, network/auth requirements, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the argument notes are compact with no filler. The Args block is slightly redundant with the schema but earns its place by supplying formats and examples the schema lacks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and both params are covered. The gap is behavioral: for a synchronizing tool with no annotations, an agent still cannot tell what gets written, whether an existing doc set is replaced, or how this differs operationally from list_catalog plus get_doc.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents both parameters meaningfully: 'name' as a catalog item or custom identifier with examples ('svelte-5', 'fastapi', 'tailwind-v3'), and 'url' as an optional custom source accepting llms.txt, llms-full.txt, or raw markdown. This adds real meaning beyond the bare string schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (fetch/synchronize) and a specific resource (external documentation set), with concrete source types (curated catalog or custom llms.txt URL). It is distinguishable from the read-only siblings like get_doc and search_docs, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the trigger (you want docs from a catalog item or an external llms.txt source) and explains that 'name' may be either a catalog item or a custom identifier. However it gives no explicit when-not guidance and does not contrast itself with list_catalog, which is the closest sibling for discovering catalog items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_docA
Append a durable technical fact (API spec, stack rule, model capability, platform note).
Default appends a dated section. Does not clobber. Use overwrite=True only to replace a wrong sheet. Hard tech facts belong here. User prefs and project fluid facts belong in agents-memory, not docs. delete_doc is for wrong/duplicate/yanked sheets — not for an old model that is still true.
Args: name: Short document identifier (e.g. 'powershell-gotchas', 'stripe-api', 'coolify-db-ports') content: Markdown fact to append (or full replacement when overwrite=True) category: One of 'stacks' (frameworks/libs), 'models' (LLM specs), 'apis' (protocol/APIs), 'platforms' (OS/Infra/DB), 'custom' overwrite: False (default) appends. True replaces the entire file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| content | Yes | ||
| category | No | custom | |
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses non-clobbering default behavior, that appends are dated sections, and that overwrite=True replaces the entire file. It stops short of stating permissions, failure modes, or write durability guarantees, but the mutation semantics are unusually clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then routing rules, then args. Every sentence carries information, though 'Hard tech facts belong here' slightly restates the opening line and the args block repeats details that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a 4-parameter write tool with no annotations and zero schema description coverage, the description supplies the action, the routing rules, the mutation semantics, and all four parameter meanings — nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully and does: name is explained with three concrete slug examples, content notes markdown and full-replacement behavior under overwrite, category enumerates all five allowed values, and overwrite states its default and effect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Append a durable technical fact') and immediately scopes it with concrete examples (API spec, stack rule, model capability, platform note). It is clearly distinguishable from siblings like search_docs, get_doc, and delete_doc, which are either named or implied by the read/delete framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes content: hard tech facts here, user prefs and project fluid facts to agents-memory, and wrong/duplicate/yanked sheets to delete_doc. It even handles the subtle case of an old-but-still-true model, which is exactly the kind of when-not guidance that prevents misrouting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.44.1- Added
delete_doc - Added
get_doc - Removed
get_doc_page - Added
get_model_playbook - Added
list_docs - Removed
list_docsets - Changed
search_docs2 fields changed- added
Input schema / properties / categoryAdded value: +{ + "default": "all", + "title": "Category", + "type": "string" +} - removed
Input schema / properties / docsetRemoved value: -{ - "default": "all", - "title": "Docset", - "type": "string" -}
- Removed
sync_docset - Added
sync_external_doc - Removed
sync_memory_docs - Removed
sync_project_docs - Added
write_doc
7 tool updates
v0.42.0- First observed
get_doc_page - First observed
list_catalog - First observed
list_docsets - First observed
search_docs - First observed
sync_docset - First observed
sync_memory_docs - First observed
sync_project_docs
TDQS
Scored across 8 tools
Each tool targets a clearly distinct operation: search vs. full fetch, write vs. delete vs. list, external sync vs. catalog listing, and a specialized model playbook. The descriptions explicitly delineate boundaries (e.g., write_doc for facts vs. agents-memory for prefs). No two tools can be easily confused.
All tool names follow a consistent snake_case verb_noun pattern (search_docs, get_doc, write_doc, delete_doc, list_docs, sync_external_doc, get_model_playbook, list_catalog). There are no deviations in casing or verb style.
Eight tools is well-scoped for a documentation management server. Each tool serves a unique purpose—retrieval, mutation, listing, external sync, and playbooks—with no redundancy or bloat.
The surface covers full CRUD (write with overwrite for update, get/search/list, delete) plus external synchronization, catalog browsing, and specialized model playbooks. No obvious gaps in the documentation lifecycle are apparent.
Maintenance
Related MCP Connectors
Cloud or self-hosted knowledge for AI agents: hybrid search, reranking, GraphRAG, scoped MCP tools.
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server that gives AI coding agents on-demand access to private project docs via BM25 ranked search. One setup for Claude Code, Cursor, Codex, Gemini CLI, and more. Docs stay private, never in public repos.1516Apache 2.0

Speakeasy Docs MCPofficial
AlicenseNot gradedqualityCmaintenanceA lightweight, domain-agnostic hybrid search engine for markdown corpora, exposed via the Model Context Protocol (MCP), optimized for serving SDK documentation to AI coding agents.8AGPL 3.0- AlicenseAqualityDmaintenanceLocal-first context retrieval engine that serves precise documentation chunks to coding agents via MCP, ensuring high-confidence context for code generation.3MIT
- FlicenseNot gradedqualityDmaintenanceMCP server + RAG chatbot that makes your MDX documentation searchable by AI assistants. Built on BM25 + metadata filtering.-