# registry_mcp Servidor MCP que expone `registry.db` a Claude (Code, Desktop, otros clientes MCP). ## Tools | Tool | Args | Returns | |---|---|---| | `fn_search` | `query, kind?, lang?, domain?, purity?, limit?` | `{ results: [{id,name,kind,lang,domain,purity,signature,description}] }` | | `fn_show` | `id` | `{ id, markdown }` | | `fn_code` | `id` | `{ id, lang, code }` | | `fn_list_domains` | — | `{ domains: [{domain,functions,types,pure,impure,by_lang}] }` | | `fn_uses` | `id` | `{ uses_functions, uses_types, consumed_by }` | | `fn_doctor` | `subcommand?` | `{ report }` | | `fn_run` | `id, args?` | `{ stdout, stderr, exit_code }` (require `--enable-run`) | | `fn_create_function` | `name, lang, domain, signature, description, purity, code, md_body?` | `{ id, file_paths }` (require `--enable-write`) | ## Build ```bash CGO_ENABLED=1 go build -tags fts5 -o registry_mcp . ``` ## Run ```bash # stdio (default) ./registry_mcp # stdio + write tools enabled ./registry_mcp --enable-run --enable-write # HTTP loopback ./registry_mcp --http :7733 REGISTRY_API_TOKEN=xxx ./registry_mcp --http :7733 --bind 0.0.0.0 ``` ## Instalar en Claude Code Crear `.mcp.json` en la raiz del proyecto donde se invoque `claude`: ```json { "mcpServers": { "registry": { "command": "/abs/path/fn_registry/apps/registry_mcp/registry_mcp", "args": ["--enable-run", "--enable-write"], "env": { "FN_REGISTRY_ROOT": "/abs/path/fn_registry" } } } } ``` O usar `make install-claude-code` que escribe la entrada al `.mcp.json` del cwd. ## Instalar en Claude Desktop Editar `~/.config/Claude/claude_desktop_config.json` (Linux) o `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS): ```json { "mcpServers": { "registry": { "command": "/abs/path/registry_mcp", "env": { "FN_REGISTRY_ROOT": "/abs/path/fn_registry" } } } } ``` ## Ejemplos de queries Sesion Claude: - "busca funciones puras de finance" → `fn_search({query: "finance", purity: "pure"})` - "muestra el codigo de filter_slice_go_core" → `fn_show({id: "filter_slice_go_core"})` - "que funciones usan sqlite_open_go_infra" → `fn_uses({id: "sqlite_open_go_infra"})` - "diagnostico" → `fn_doctor({})` - "ejecuta backup_all_bash_pipelines a /tmp" → `fn_run({id: "backup_all_bash_pipelines", args: ["/tmp"]})` ## Variables de entorno | Var | Default | Para que | |---|---|---| | `FN_REGISTRY_ROOT` | autodetect via `go.mod` upward | Raiz del repo (donde vive `registry.db`) | | `REGISTRY_API_TOKEN` | (vacio) | Obligatorio para HTTP en interfaces no-loopback | | `FN_BIN` | `fn` (PATH) | Binario `fn` para subprocess `fn_run`/`fn_doctor` |