ai-rulez
Manage one project's AI coding rules, skills and agents, and generate configs for many coding tools
Inspect and tighten a local node9 agent-governance setup from inside an AI conversation
Official · Node9 AI JavaScript Local · stdio SecurityDeveloper tools
69 popularity score ★ 225 ↓ 3.5k/wk
Opens the app, which asks before it adds the server.
claude mcp add node9 -- npx -y node9-ai mcp-server{
"mcpServers": {
"node9": {
"command": "npx",
"args": [
"-y",
"node9-ai",
"mcp-server"
]
}
}
}{
"mcpServers": {
"node9": {
"command": "npx",
"args": [
"-y",
"node9-ai",
"mcp-server"
]
}
}
}{
"servers": {
"node9": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"node9-ai",
"mcp-server"
]
}
}
}[mcp_servers.node9]
command = "npx"
args = ["-y", "node9-ai", "mcp-server"]gemini mcp add --scope user node9 npx -- -y node9-ai mcp-servernode9 is mainly a command-line gate that sits in the hooks of coding agents such as Claude Code, Codex CLI, Gemini CLI and Cursor. It checks each tool call before it runs and either lets it through, holds it until a person approves, or blocks it. It ships with rules for things like reads of ~/.ssh, ~/.aws and .env files, destructive git, SQL without a WHERE clause and piped curl-to-shell, and it keeps an audit log of every call.
The same npm package also starts an MCP server over stdio with `mcp-server`. That server does not do the gating. It lets an assistant look at the local node9 setup: protection status, the merged configuration, active rules and shields, the audit log, past agent sessions, a posture score for the machine, and a dry-run of how a given command would be judged. The assistant can also add protection: turn on a shield, add a block or review rule, switch on egress control, or deny a host.
The source (src/mcp-server/index.ts at v2.30.1) defines 18 tools, each tagged read-only, add or weaken. The two weakening tools, `node9_shield_disable` and `node9_approver_set`, are refused over MCP unless `"mcpAllowWeakening": true` is set in ~/.node9/config.json. No tool loosens egress; that is CLI-only. On a machine joined to a node9 workspace, every tool that writes local policy is refused and the assistant is pointed to the web dashboard.
| Runtime | Node.js 22+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Also |
|
Node.js 22 or newer (npx runs the package). The server reports on and edits a local node9 installation, so node9 should be set up first (`npm install -g node9-ai` or Homebrew, then `node9` or `node9 setup`). Local use needs no account; joining a team dashboard with `node9 login` is optional.
The MCP server only reports on and adjusts node9; the gating itself happens in the agent hooks that node9 setup installs. `node9_shield_disable` and `node9_approver_set` return an error unless `mcpAllowWeakening` is true in ~/.node9/config.json, and egress can be tightened but never loosened over MCP. `node9_rule_add` takes only block or review verdicts and cannot remove rules. `node9_audit_get` returns 20 entries by default, at most 100. With egress control off (the default), a command that sends a file straight to the network (curl -d @file) is not treated as a read of it; egress control covers shell commands only. On a workspace-joined machine all policy-writing tools are refused.
Suits developers who already run node9 to govern coding agents and want the assistant to explain why a call was blocked, check the audit record, or tighten policy without leaving the chat. It is of little use on its own: without node9's hooks installed, there is little for it to report. It runs entirely on your machine and needs no API key. Teams that want central policy and approvals use the node9 dashboard (via `node9 login`), where local policy writes from this server are refused by design.
12 only read, 6 change things. A ? marks an optional parameter.
node9_statusnode9_config_getnode9_shield_listnode9_shield_enable changesservice: stringnode9_shield_disable changesservice: stringnode9_approver_listnode9_approver_set changeschannel: enumenabled: booleannode9_audit_getlimit?: numberfilter?: enumnode9_policy_getnode9_scandrill_down?: booleannode9_reportperiod?: enumno_tests?: booleannode9_sessiondetail?: stringnode9_postureagent?: stringnode9_explaintool?: stringargs?: stringnode9_rule_add changesname: stringtool: stringfield: stringpattern: stringverdict: enumreason: stringnode9_egress_statusnode9_egress_protect changesmode?: enumnode9_egress_deny changeshost: string