You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+165-2Lines changed: 165 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,74 @@ A personal collection of **MCP (Model Context Protocol) server configurations**,
8
8
9
9
The only meaningful validation is that each config is well-formed JSON/TOML/YAML and matches the schema its host expects, and that `reuse lint` stays clean.
10
10
11
+
## Common Development Tasks
12
+
13
+
### Validation and Testing
14
+
15
+
-**Validate config syntax**: Run the validation script to ensure all configs parse correctly:
16
+
```bash
17
+
python3 .github/validate-configs.py
18
+
```
19
+
This checks JSON/JSONC/TOML/YAML files and reports any syntax errors.
20
+
21
+
-**REUSE compliance check**: Ensure all files have proper licensing metadata:
22
+
```bash
23
+
reuse lint
24
+
```
25
+
This validates that REUSE.toml covers all files with GPL-3.0-or-later.
26
+
27
+
-**CI validation**: The GitHub Actions workflow runs both validation and REUSE lint on every push/PR.
28
+
29
+
### Key Filling and Deployment
30
+
31
+
-**Fill placeholders**: Use the fill-keys scripts to substitute API key placeholders with real values:
Copilot CLI, opencode, goose, and Kimi have no scriptable add command — hand-edit
120
+
Copilot CLI, opencode, mimo, goose, and Kimi have no scriptable add command — hand-edit
52
121
those files. Mind the traps: **Qwen uses `httpUrl`** while Gemini uses `url`+`type`;
53
122
**Codex uses `http_headers`** while Grok/Kimi use `headers`; Copilot CLI omits the
54
123
`mcpServers` wrapper; Gemini needs the separate enablement file and a trusted folder.
@@ -57,10 +126,11 @@ those files. Mind the traps: **Qwen uses `httpUrl`** while Gemini uses `url`+`ty
57
126
58
127
Every host template declares all nine. Two groups:
59
128
60
-
**The three "real" servers** (these run in the maintainer's live configs too):
129
+
**The four "real" servers** (these run in the maintainer's live configs):
61
130
-**nixos** — `mcp-nixos` (queries nixpkgs / NixOS options). Antigravity runs the `mcp-nixos` binary directly; everywhere else it's `nix run github:utensils/mcp-nixos --` over stdio.
62
131
-**context7** (Upstash) — HTTP, `https://mcp.context7.com/mcp`, needs a `CONTEXT7_API_KEY`. Stored inline under a header (`CONTEXT7_API_KEY` for most hosts; `Authorization: Bearer …` for VS Code, where it comes from a prompted `input`). Placeholder `YOUR_CONTEXT7_API_KEY`.
63
132
-**microsoft-learn** — HTTP, `https://learn.microsoft.com/api/mcp`, no auth.
133
+
-**crates** — stdio, `crates-mcp` ([crates-mcp](https://crates.io/crates/crates-mcp) via `cargo install`), queries Rust crates from crates.io and docs.rs.
64
134
65
135
**The six generic servers** (came in via the merged Copilot PRs; templates-only, placeholders):
@@ -77,3 +147,96 @@ Every host template declares all nine. Two groups:
77
147
## Tooling
78
148
79
149
`bin/fill-keys.{nu,sh,ion}` substitute the four placeholder tokens (`YOUR_CONTEXT7_API_KEY`, `YOUR_BRAVE_API_KEY`, `YOUR_GITHUB_PAT`, `/path/to/your/workspace`) with values from env vars (prompting for any unset ones when interactive) and write filled copies into a **gitignored `dist/` mirror** — they never edit the tracked templates, so the no-secrets rule holds. There are three parallel ports (Nushell, POSIX/Bash/Brush, Ion) with identical behavior — **change all three together**, plus their shared host-file list (the docs and VS Code's `${input:}`/`${workspaceFolder}` fields are deliberately left out). The `.sh`/`.ion` ports shell out to `sd` (literal `-s` mode); the `.nu` port uses native string ops. These are the only executables (`755`); everything else is `644` data. Shell-specific gotchas worth knowing if you edit them: Ion's `test -t` is unreliable (use `tty -s`), Ion eats `-h`/`--help`, and Ion's `test` needs the POSIX `x`-prefix guard for `--`-leading operands.
150
+
151
+
## Code Architecture and Structure
152
+
153
+
### High-Level Architecture
154
+
155
+
The repository follows a **multi-host template pattern** where:
156
+
157
+
1.**Each host directory** contains a single config file in that host's native format
158
+
2.**All configs declare the same nine servers** but in different dialects
159
+
3.**Templates use placeholders** for secrets that get filled at deployment time
160
+
4.**No real secrets are committed** - placeholders ensure safety
0 commit comments