diff --git a/.mcp.json b/.mcp.json index 3d89edc..4705ce8 100644 --- a/.mcp.json +++ b/.mcp.json @@ -1,15 +1,29 @@ { "mcpServers": { - "nixos-options": { + "nixpkgs-options": { "command": "nix", "args": [ "run", - ".", + ".#nixpkgs-search", "--", + "options", "serve" ], "env": { - "NIXOS_OPTIONS_DATABASE": "sqlite://:memory:" + "NIXPKGS_SEARCH_DATABASE": "sqlite://:memory:" + } + }, + "nixpkgs-packages": { + "command": "nix", + "args": [ + "run", + ".#nixpkgs-search", + "--", + "packages", + "serve" + ], + "env": { + "NIXPKGS_SEARCH_DATABASE": "sqlite://:memory:" } } } diff --git a/CLAUDE.md b/CLAUDE.md index 425f590..8b66d40 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,15 +8,21 @@ This file provides context for Claude when working on this project. ## MCP Servers -### NixOS Options (`nixos-options`) +### Nixpkgs Search (`nixpkgs-search`) - **Primary** +Combined search for NixOS options and Nix packages from nixpkgs. Provides two separate MCP servers: +- **Options server**: Search NixOS configuration options (`nixpkgs-search options serve`) +- **Packages server**: Search Nix packages (`nixpkgs-search packages serve`) + +### NixOS Options (`nixos-options`) - Legacy Search and query NixOS configuration options. Uses nixpkgs as source. +*Note: Prefer using `nixpkgs-search options` instead.* ### Home Manager Options (`hm-options`) Search and query Home Manager configuration options. Uses home-manager repository as source. -Both servers share the same architecture: -- Full-text search across option names and descriptions -- Query specific options with type, default, example, and declarations +All servers share the same architecture: +- Full-text search across option/package names and descriptions +- Query specific options/packages with full metadata - Index multiple revisions (by git hash or channel name) - Fetch module source files - PostgreSQL and SQLite backends @@ -43,20 +49,22 @@ Both servers share the same architecture: ``` labmcp/ ├── cmd/ +│ ├── nixpkgs-search/ +│ │ └── main.go # Combined options+packages CLI (primary) │ ├── nixos-options/ -│ │ └── main.go # NixOS options CLI +│ │ └── main.go # NixOS options CLI (legacy) │ └── hm-options/ │ └── main.go # Home Manager options CLI ├── internal/ │ ├── database/ -│ │ ├── interface.go # Store interface +│ │ ├── interface.go # Store interface (options + packages) │ │ ├── schema.go # Schema versioning │ │ ├── postgres.go # PostgreSQL implementation │ │ ├── sqlite.go # SQLite implementation │ │ └── *_test.go # Database tests │ ├── mcp/ -│ │ ├── server.go # MCP server core + ServerConfig -│ │ ├── handlers.go # Tool implementations +│ │ ├── server.go # MCP server core + ServerConfig + modes +│ │ ├── handlers.go # Tool implementations (options + packages) │ │ ├── types.go # Protocol types │ │ ├── transport.go # Transport interface │ │ ├── transport_stdio.go # STDIO transport @@ -66,14 +74,19 @@ labmcp/ │ ├── options/ │ │ └── indexer.go # Shared Indexer interface │ ├── nixos/ -│ │ ├── indexer.go # Nixpkgs indexing -│ │ ├── parser.go # options.json parsing (shared) +│ │ ├── indexer.go # NixOS options indexing +│ │ ├── parser.go # options.json parsing │ │ ├── types.go # Channel aliases, extensions │ │ └── *_test.go # Indexer tests -│ └── homemanager/ -│ ├── indexer.go # Home Manager indexing -│ ├── types.go # Channel aliases, extensions -│ └── *_test.go # Indexer tests +│ ├── homemanager/ +│ │ ├── indexer.go # Home Manager indexing +│ │ ├── types.go # Channel aliases, extensions +│ │ └── *_test.go # Indexer tests +│ └── packages/ +│ ├── indexer.go # Nix packages indexing +│ ├── parser.go # nix-env JSON parsing +│ ├── types.go # Package types, channel aliases +│ └── *_test.go # Parser tests ├── nix/ │ ├── module.nix # NixOS module for nixos-options │ ├── hm-options-module.nix # NixOS module for hm-options @@ -90,7 +103,7 @@ labmcp/ ## MCP Tools -Both servers provide the same 6 tools: +### Options Servers (nixpkgs-search options, nixos-options, hm-options) | Tool | Description | |------|-------------| @@ -101,6 +114,16 @@ Both servers provide the same 6 tools: | `list_revisions` | List all indexed revisions | | `delete_revision` | Delete an indexed revision | +### Packages Server (nixpkgs-search packages) + +| Tool | Description | +|------|-------------| +| `search_packages` | Full-text search across package names and descriptions | +| `get_package` | Get full details for a specific package by attr path | +| `get_file` | Fetch source file contents from nixpkgs | +| `list_revisions` | List all indexed revisions | +| `delete_revision` | Delete an indexed revision | + ## Key Implementation Details ### Database @@ -136,7 +159,32 @@ Both servers provide the same 6 tools: ## CLI Commands -### nixos-options +### nixpkgs-search (Primary) +```bash +# Options MCP Server +nixpkgs-search options serve # Run options MCP server on STDIO +nixpkgs-search options search # Search options +nixpkgs-search options get