createDocsServer

expérimentaldepuis 0.1.0@legba-core/mcp-docs

createDocsServer

Ce que ça fait

Construit un serveur MCP exposant les 5 outils de documentation (list_packages, get_symbol, search_docs, get_recipe, get_error), sans encore l’attacher à un transport.

Signature

function createDocsServer(docsRootOrRepository: string | DocsRepository): McpServer

Paramètres

NomTypeRequisDéfautDescription
docsRootOrRepositorystring | DocsRepositoryouiChemin vers docs/ (lu sur disque à chaque appel d’outil) ou un DocsRepository déjà construit (ex. un double en test)

Retour

Un McpServer (du SDK @modelcontextprotocol/sdk) avec les 5 outils déjà enregistrés — reste à appeler server.connect(transport) avec le transport choisi (voir docs/recipes/).

Erreurs

N/A à la construction — les erreurs de lecture de docs/ sont capturées outil par outil et rendues en texte (« non trouvé »), jamais levées.

Exemple minimal

import { createDocsServer } from "@legba-core/mcp-docs";

const server = createDocsServer(process.cwd());

Exemple complet

import { createDocsServer, type DocsRepository } from "@legba-core/mcp-docs";

// Un DocsRepository peut être fourni directement (utile en test, ou pour
// servir une documentation qui ne vient pas du disque local).
const repo: DocsRepository = {
  readIndex: () => "# Carte du framework",
  listPackageDocs: () => [],
  listApiDocs: () => [{ path: "api/exemple.md", content: "contenu de démonstration" }],
  listRecipeDocs: () => [],
  listDecisionDocs: () => [],
  listAllDocs: () => [{ path: "api/exemple.md", content: "contenu de démonstration" }],
};

const server = createDocsServer(repo);
// server.connect(transport) une fois le transport choisi (stdio, en mémoire, etc.).

Pièges

  • Passer un chemin (string) ne lit rien immédiatement : chaque outil relit docs/ à son propre appel, jamais une copie figée au moment de createDocsServer.
  • Le chemin passé doit être docs/ elle-même, pas la racine du monorepo — utiliser resolveDocsRoot pour le retrouver depuis n’importe quel fichier du paquet.
  • Aucun transport n’est ouvert par cette fonction : sans server.connect(...), le serveur n’écoute rien.

Voir aussi