Project Scoping¶
Projects are Crux's core abstraction for per-directory MCP management. Each project declares exactly which MCPs and skills it needs.
Creating a Project¶
Or initialize in the current directory:
This creates a crux.json:
Commit crux.json to git. It's your project's MCP manifest.
Installing MCPs¶
This:
- Adds the names to
crux.json - Runs
crux project syncto generate.mcp.json - Creates launcher scripts for MCPs that need authentication
Uninstalling MCPs¶
Removes from crux.json and re-syncs.
Syncing¶
If you edit crux.json manually, regenerate the Claude Code config:
Sync all tracked projects at once:
What crux project sync Generates¶
Given this crux.json:
Crux generates:
.mcp.json — the file Claude Code reads:
{
"mcpServers": {
"wikijs": {
"command": "/Users/you/.crux/launchers/wikijs.sh",
"args": []
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem"]
}
}
}
~/.crux/launchers/wikijs.sh — fetches secrets at runtime:
#!/bin/bash
export WIKIJS_API_KEY=$(security find-generic-password -s crux.wikijs -a WIKIJS_API_KEY -w)
exec node /Users/you/.crux/mcps/wikijs/build/index.js
Reproducibility¶
When a teammate clones your repo:
git clone https://github.com/you/homelab.git
cd homelab
crux project install # reads crux.json, syncs everything
crux mcp auth wikijs WIKIJS_API_KEY # enter their own key
crux project status # verify everything works
The crux.json is the source of truth. The generated .mcp.json and launcher scripts are local artifacts.
Project Tracking¶
Crux tracks all initialized projects in ~/.crux/projects.json. This enables crux project sync --all and crux project status --all.
Stale projects (deleted directories) are detected and cleaned up automatically.