nodebench-mcp 2.69.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +95 -39
  2. package/dist/agents/alertRouter.d.ts +38 -0
  3. package/dist/agents/alertRouter.js +151 -0
  4. package/dist/agents/alertRouter.js.map +1 -0
  5. package/dist/agents/entityMemory.d.ts +40 -0
  6. package/dist/agents/entityMemory.js +64 -0
  7. package/dist/agents/entityMemory.js.map +1 -0
  8. package/dist/agents/subAgents.d.ts +35 -0
  9. package/dist/agents/subAgents.js +62 -0
  10. package/dist/agents/subAgents.js.map +1 -0
  11. package/dist/benchmarks/benchmarkRunner.js +14 -0
  12. package/dist/benchmarks/benchmarkRunner.js.map +1 -1
  13. package/dist/benchmarks/chainEval.js +107 -0
  14. package/dist/benchmarks/chainEval.js.map +1 -1
  15. package/dist/benchmarks/llmJudgeEval.js +85 -0
  16. package/dist/benchmarks/llmJudgeEval.js.map +1 -1
  17. package/dist/benchmarks/searchQualityEval.js +118 -5
  18. package/dist/benchmarks/searchQualityEval.js.map +1 -1
  19. package/dist/cli/search.d.ts +13 -0
  20. package/dist/cli/search.js +130 -0
  21. package/dist/cli/search.js.map +1 -0
  22. package/dist/db.d.ts +6 -2
  23. package/dist/db.js +470 -3
  24. package/dist/db.js.map +1 -1
  25. package/dist/index.js +349 -64
  26. package/dist/index.js.map +1 -1
  27. package/dist/profiler/behaviorStore.d.ts +97 -0
  28. package/dist/profiler/behaviorStore.js +276 -0
  29. package/dist/profiler/behaviorStore.js.map +1 -0
  30. package/dist/profiler/eventCollector.d.ts +119 -0
  31. package/dist/profiler/eventCollector.js +267 -0
  32. package/dist/profiler/eventCollector.js.map +1 -0
  33. package/dist/profiler/index.d.ts +15 -0
  34. package/dist/profiler/index.js +16 -0
  35. package/dist/profiler/index.js.map +1 -0
  36. package/dist/profiler/mcpProxy.d.ts +49 -0
  37. package/dist/profiler/mcpProxy.js +123 -0
  38. package/dist/profiler/mcpProxy.js.map +1 -0
  39. package/dist/profiler/modelRouter.d.ts +30 -0
  40. package/dist/profiler/modelRouter.js +99 -0
  41. package/dist/profiler/modelRouter.js.map +1 -0
  42. package/dist/profiler/otelReceiver.d.ts +17 -0
  43. package/dist/profiler/otelReceiver.js +62 -0
  44. package/dist/profiler/otelReceiver.js.map +1 -0
  45. package/dist/profiler/proofEngine.d.ts +41 -0
  46. package/dist/profiler/proofEngine.js +93 -0
  47. package/dist/profiler/proofEngine.js.map +1 -0
  48. package/dist/profiler/workflowTemplates.d.ts +41 -0
  49. package/dist/profiler/workflowTemplates.js +95 -0
  50. package/dist/profiler/workflowTemplates.js.map +1 -0
  51. package/dist/providers/localMemoryProvider.js +3 -2
  52. package/dist/providers/localMemoryProvider.js.map +1 -1
  53. package/dist/runtimeConfig.d.ts +11 -0
  54. package/dist/runtimeConfig.js +27 -0
  55. package/dist/runtimeConfig.js.map +1 -0
  56. package/dist/security/auditLog.js +8 -3
  57. package/dist/security/auditLog.js.map +1 -1
  58. package/dist/subconscious/blocks.d.ts +43 -0
  59. package/dist/subconscious/blocks.js +158 -0
  60. package/dist/subconscious/blocks.js.map +1 -0
  61. package/dist/subconscious/classifier.d.ts +22 -0
  62. package/dist/subconscious/classifier.js +118 -0
  63. package/dist/subconscious/classifier.js.map +1 -0
  64. package/dist/subconscious/graphEngine.d.ts +65 -0
  65. package/dist/subconscious/graphEngine.js +234 -0
  66. package/dist/subconscious/graphEngine.js.map +1 -0
  67. package/dist/subconscious/index.d.ts +19 -0
  68. package/dist/subconscious/index.js +20 -0
  69. package/dist/subconscious/index.js.map +1 -0
  70. package/dist/subconscious/tools.d.ts +5 -0
  71. package/dist/subconscious/tools.js +255 -0
  72. package/dist/subconscious/tools.js.map +1 -0
  73. package/dist/subconscious/whisperPolicy.d.ts +20 -0
  74. package/dist/subconscious/whisperPolicy.js +171 -0
  75. package/dist/subconscious/whisperPolicy.js.map +1 -0
  76. package/dist/sweep/engine.d.ts +27 -0
  77. package/dist/sweep/engine.js +244 -0
  78. package/dist/sweep/engine.js.map +1 -0
  79. package/dist/sweep/index.d.ts +9 -0
  80. package/dist/sweep/index.js +8 -0
  81. package/dist/sweep/index.js.map +1 -0
  82. package/dist/sweep/sources/github_trending.d.ts +6 -0
  83. package/dist/sweep/sources/github_trending.js +37 -0
  84. package/dist/sweep/sources/github_trending.js.map +1 -0
  85. package/dist/sweep/sources/hackernews.d.ts +7 -0
  86. package/dist/sweep/sources/hackernews.js +57 -0
  87. package/dist/sweep/sources/hackernews.js.map +1 -0
  88. package/dist/sweep/sources/openbb_finance.d.ts +9 -0
  89. package/dist/sweep/sources/openbb_finance.js +46 -0
  90. package/dist/sweep/sources/openbb_finance.js.map +1 -0
  91. package/dist/sweep/sources/producthunt.d.ts +6 -0
  92. package/dist/sweep/sources/producthunt.js +41 -0
  93. package/dist/sweep/sources/producthunt.js.map +1 -0
  94. package/dist/sweep/sources/web_signals.d.ts +7 -0
  95. package/dist/sweep/sources/web_signals.js +63 -0
  96. package/dist/sweep/sources/web_signals.js.map +1 -0
  97. package/dist/sweep/sources/yahoo_finance.d.ts +6 -0
  98. package/dist/sweep/sources/yahoo_finance.js +47 -0
  99. package/dist/sweep/sources/yahoo_finance.js.map +1 -0
  100. package/dist/sweep/types.d.ts +50 -0
  101. package/dist/sweep/types.js +9 -0
  102. package/dist/sweep/types.js.map +1 -0
  103. package/dist/sync/founderEpisodeStore.d.ts +98 -0
  104. package/dist/sync/founderEpisodeStore.js +230 -0
  105. package/dist/sync/founderEpisodeStore.js.map +1 -0
  106. package/dist/sync/hyperloopArchive.d.ts +51 -0
  107. package/dist/sync/hyperloopArchive.js +153 -0
  108. package/dist/sync/hyperloopArchive.js.map +1 -0
  109. package/dist/sync/hyperloopEval.d.ts +123 -0
  110. package/dist/sync/hyperloopEval.js +389 -0
  111. package/dist/sync/hyperloopEval.js.map +1 -0
  112. package/dist/sync/hyperloopEval.test.d.ts +4 -0
  113. package/dist/sync/hyperloopEval.test.js +60 -0
  114. package/dist/sync/hyperloopEval.test.js.map +1 -0
  115. package/dist/sync/protocol.d.ts +172 -0
  116. package/dist/sync/protocol.js +9 -0
  117. package/dist/sync/protocol.js.map +1 -0
  118. package/dist/sync/sessionMemory.d.ts +47 -0
  119. package/dist/sync/sessionMemory.js +138 -0
  120. package/dist/sync/sessionMemory.js.map +1 -0
  121. package/dist/sync/store.d.ts +384 -0
  122. package/dist/sync/store.js +1435 -0
  123. package/dist/sync/store.js.map +1 -0
  124. package/dist/sync/store.test.d.ts +4 -0
  125. package/dist/sync/store.test.js +43 -0
  126. package/dist/sync/store.test.js.map +1 -0
  127. package/dist/sync/syncBridgeClient.d.ts +30 -0
  128. package/dist/sync/syncBridgeClient.js +172 -0
  129. package/dist/sync/syncBridgeClient.js.map +1 -0
  130. package/dist/tools/autonomousDeliveryTools.d.ts +2 -0
  131. package/dist/tools/autonomousDeliveryTools.js +1104 -0
  132. package/dist/tools/autonomousDeliveryTools.js.map +1 -0
  133. package/dist/tools/claudeCodeIngestTools.d.ts +10 -0
  134. package/dist/tools/claudeCodeIngestTools.js +347 -0
  135. package/dist/tools/claudeCodeIngestTools.js.map +1 -0
  136. package/dist/tools/coreWorkflowTools.d.ts +2 -0
  137. package/dist/tools/coreWorkflowTools.js +488 -0
  138. package/dist/tools/coreWorkflowTools.js.map +1 -0
  139. package/dist/tools/deltaTools.d.ts +15 -0
  140. package/dist/tools/deltaTools.js +1522 -0
  141. package/dist/tools/deltaTools.js.map +1 -0
  142. package/dist/tools/entityLookupTools.d.ts +14 -0
  143. package/dist/tools/entityLookupTools.js +159 -0
  144. package/dist/tools/entityLookupTools.js.map +1 -0
  145. package/dist/tools/entityTemporalTools.d.ts +12 -0
  146. package/dist/tools/entityTemporalTools.js +330 -0
  147. package/dist/tools/entityTemporalTools.js.map +1 -0
  148. package/dist/tools/founderLocalPipeline.d.ts +215 -0
  149. package/dist/tools/founderLocalPipeline.js +1516 -2
  150. package/dist/tools/founderLocalPipeline.js.map +1 -1
  151. package/dist/tools/founderOperatingModel.d.ts +120 -0
  152. package/dist/tools/founderOperatingModel.js +469 -0
  153. package/dist/tools/founderOperatingModel.js.map +1 -0
  154. package/dist/tools/founderOperatingModelTools.d.ts +2 -0
  155. package/dist/tools/founderOperatingModelTools.js +169 -0
  156. package/dist/tools/founderOperatingModelTools.js.map +1 -0
  157. package/dist/tools/founderStrategicOpsTools.d.ts +2 -0
  158. package/dist/tools/founderStrategicOpsTools.js +1310 -0
  159. package/dist/tools/founderStrategicOpsTools.js.map +1 -0
  160. package/dist/tools/graphifyTools.d.ts +19 -0
  161. package/dist/tools/graphifyTools.js +375 -0
  162. package/dist/tools/graphifyTools.js.map +1 -0
  163. package/dist/tools/index.d.ts +3 -0
  164. package/dist/tools/index.js +4 -0
  165. package/dist/tools/index.js.map +1 -1
  166. package/dist/tools/monteCarloTools.d.ts +16 -0
  167. package/dist/tools/monteCarloTools.js +225 -0
  168. package/dist/tools/monteCarloTools.js.map +1 -0
  169. package/dist/tools/packetCompilerTools.d.ts +12 -0
  170. package/dist/tools/packetCompilerTools.js +322 -0
  171. package/dist/tools/packetCompilerTools.js.map +1 -0
  172. package/dist/tools/planSynthesisTools.d.ts +15 -0
  173. package/dist/tools/planSynthesisTools.js +455 -0
  174. package/dist/tools/planSynthesisTools.js.map +1 -0
  175. package/dist/tools/profilerTools.d.ts +20 -0
  176. package/dist/tools/profilerTools.js +364 -0
  177. package/dist/tools/profilerTools.js.map +1 -0
  178. package/dist/tools/savingsTools.d.ts +11 -0
  179. package/dist/tools/savingsTools.js +155 -0
  180. package/dist/tools/savingsTools.js.map +1 -0
  181. package/dist/tools/scenarioCompilerTools.d.ts +14 -0
  182. package/dist/tools/scenarioCompilerTools.js +290 -0
  183. package/dist/tools/scenarioCompilerTools.js.map +1 -0
  184. package/dist/tools/sharedContextTools.d.ts +2 -0
  185. package/dist/tools/sharedContextTools.js +423 -0
  186. package/dist/tools/sharedContextTools.js.map +1 -0
  187. package/dist/tools/sitemapTools.d.ts +15 -0
  188. package/dist/tools/sitemapTools.js +560 -0
  189. package/dist/tools/sitemapTools.js.map +1 -0
  190. package/dist/tools/sweepTools.d.ts +9 -0
  191. package/dist/tools/sweepTools.js +112 -0
  192. package/dist/tools/sweepTools.js.map +1 -0
  193. package/dist/tools/syncBridgeTools.d.ts +2 -0
  194. package/dist/tools/syncBridgeTools.js +258 -0
  195. package/dist/tools/syncBridgeTools.js.map +1 -0
  196. package/dist/tools/toolRegistry.js +1216 -49
  197. package/dist/tools/toolRegistry.js.map +1 -1
  198. package/dist/tools/workspaceTools.d.ts +19 -0
  199. package/dist/tools/workspaceTools.js +762 -0
  200. package/dist/tools/workspaceTools.js.map +1 -0
  201. package/dist/toolsetRegistry.js +88 -2
  202. package/dist/toolsetRegistry.js.map +1 -1
  203. package/package.json +36 -36
  204. package/rules/nodebench-agentic-reliability.md +32 -0
  205. package/rules/nodebench-analyst-diagnostic.md +25 -0
  206. package/rules/nodebench-auto-qa.md +31 -0
  207. package/rules/nodebench-completion-traceability.md +22 -0
  208. package/rules/nodebench-flywheel-continuous.md +25 -0
  209. package/rules/nodebench-pre-release-review.md +24 -0
  210. package/rules/nodebench-qa-dogfood.md +26 -0
  211. package/rules/nodebench-scenario-testing.md +30 -0
  212. package/rules/nodebench-self-direction.md +23 -0
  213. package/rules/nodebench-self-judge-loop.md +24 -0
  214. package/scripts/install.sh +215 -0
@@ -0,0 +1,24 @@
1
+ # NodeBench: Self-Judge Loop
2
+
3
+ Never declare work complete without running it through a structured judge pipeline.
4
+
5
+ ## Protocol
6
+
7
+ 1. **Find the methods yourself** — Search for analytical frameworks used by top practitioners
8
+ 2. **Produce multiple versions** — At least 3 competing approaches with tradeoffs
9
+ 3. **Deconstruct best in class** — Why did the best products in adjacent spaces succeed?
10
+ 4. **Build structured judge pipelines** — Boolean-scored evaluation, loop until all pass
11
+ 5. **Audit the product, not just the artifact** — Time to dopamine, feedback loop speed, shareability
12
+
13
+ ## NodeBench tools for self-judging
14
+
15
+ - `run_quality_gate()` — automated boolean checks
16
+ - `run_visual_qa_suite()` — Gemini vision scoring
17
+ - `compare_savings()` — measure improvement over time
18
+ - `suggest_tests()` — generate test cases from crawl findings
19
+
20
+ ## Anti-patterns
21
+
22
+ - Producing one version and asking "is this good?"
23
+ - Evaluating with made-up criteria instead of industry frameworks
24
+ - Waiting for the user to say "also check X"
@@ -0,0 +1,215 @@
1
+ #!/usr/bin/env bash
2
+ # NodeBench MCP — One-liner installer
3
+ # Usage: curl -sL https://nodebenchai.com/install.sh | bash
4
+ # or: bash packages/mcp-local/scripts/install.sh
5
+
6
+ set -euo pipefail
7
+
8
+ # ── Colors ──────────────────────────────────────────────────────────────
9
+ if [ -t 1 ]; then
10
+ B="\033[1m"
11
+ G="\033[32m"
12
+ Y="\033[33m"
13
+ C="\033[36m"
14
+ R="\033[31m"
15
+ X="\033[0m"
16
+ else
17
+ B="" G="" Y="" C="" R="" X=""
18
+ fi
19
+
20
+ echo -e "${B}NodeBench MCP — Installer${X}"
21
+ echo ""
22
+
23
+ # ── Prerequisites ───────────────────────────────────────────────────────
24
+ # Check Node.js
25
+ if ! command -v node &>/dev/null; then
26
+ echo -e "${R}ERROR${X}: Node.js not found. Install Node.js >= 18: https://nodejs.org"
27
+ exit 1
28
+ fi
29
+
30
+ NODE_VERSION=$(node -v | sed 's/v//' | cut -d. -f1)
31
+ if [ "$NODE_VERSION" -lt 18 ]; then
32
+ echo -e "${R}ERROR${X}: Node.js >= 18 required (found v$(node -v))"
33
+ exit 1
34
+ fi
35
+ echo -e " ${G}OK${X} Node.js $(node -v)"
36
+
37
+ # Check npm
38
+ if ! command -v npm &>/dev/null; then
39
+ echo -e "${R}ERROR${X}: npm not found"
40
+ exit 1
41
+ fi
42
+ echo -e " ${G}OK${X} npm $(npm -v)"
43
+
44
+ # ── Detect user info ────────────────────────────────────────────────────
45
+ USER_EMAIL=$(git config user.email 2>/dev/null || echo "")
46
+ if [ -n "$USER_EMAIL" ]; then
47
+ echo -e " ${G}OK${X} Git email: ${C}${USER_EMAIL}${X}"
48
+ fi
49
+
50
+ # ── Install nodebench-mcp globally ──────────────────────────────────────
51
+ echo ""
52
+ echo -e "${B}Installing nodebench-mcp...${X}"
53
+ npm install -g nodebench-mcp@latest 2>/dev/null || {
54
+ echo -e "${Y}WARN${X}: Global install failed, will use npx instead"
55
+ }
56
+
57
+ # ── Determine nodebench-mcp location ────────────────────────────────────
58
+ NODEBENCH_PATH=""
59
+ if command -v nodebench-mcp &>/dev/null; then
60
+ NODEBENCH_PATH=$(which nodebench-mcp)
61
+ echo -e " ${G}OK${X} Installed: ${NODEBENCH_PATH}"
62
+ else
63
+ echo -e " ${G}OK${X} Will use: npx -y nodebench-mcp"
64
+ fi
65
+
66
+ # ── Find rules directory ────────────────────────────────────────────────
67
+ RULES_SOURCE=""
68
+ if [ -n "$NODEBENCH_PATH" ]; then
69
+ # Global install — rules are in the package
70
+ PKG_DIR=$(dirname "$(dirname "$NODEBENCH_PATH")")/lib/node_modules/nodebench-mcp
71
+ if [ -d "$PKG_DIR/rules" ]; then
72
+ RULES_SOURCE="$PKG_DIR/rules"
73
+ fi
74
+ fi
75
+
76
+ # Fallback: try npm root
77
+ if [ -z "$RULES_SOURCE" ]; then
78
+ NPM_ROOT=$(npm root -g 2>/dev/null || echo "")
79
+ if [ -d "$NPM_ROOT/nodebench-mcp/rules" ]; then
80
+ RULES_SOURCE="$NPM_ROOT/nodebench-mcp/rules"
81
+ fi
82
+ fi
83
+
84
+ # Fallback: npx cache
85
+ if [ -z "$RULES_SOURCE" ]; then
86
+ # Run npx once to ensure package is cached, then find it
87
+ npx -y nodebench-mcp --help >/dev/null 2>&1 || true
88
+ NPX_CACHE=$(find "$HOME/.npm/_npx" -name "nodebench-mcp" -type d 2>/dev/null | head -1)
89
+ if [ -n "$NPX_CACHE" ] && [ -d "$NPX_CACHE/rules" ]; then
90
+ RULES_SOURCE="$NPX_CACHE/rules"
91
+ fi
92
+ fi
93
+
94
+ # ── Install rules to ~/.claude/rules/ ───────────────────────────────────
95
+ echo ""
96
+ CLAUDE_RULES_DIR="$HOME/.claude/rules"
97
+ mkdir -p "$CLAUDE_RULES_DIR"
98
+
99
+ RULES_INSTALLED=0
100
+ if [ -n "$RULES_SOURCE" ] && [ -d "$RULES_SOURCE" ]; then
101
+ echo -e "${B}Installing rules to ${CLAUDE_RULES_DIR}/${X}"
102
+ for rule in "$RULES_SOURCE"/nodebench-*.md; do
103
+ [ -f "$rule" ] || continue
104
+ BASENAME=$(basename "$rule")
105
+ TARGET="$CLAUDE_RULES_DIR/$BASENAME"
106
+ # Don't overwrite if user's version is newer
107
+ if [ -f "$TARGET" ] && [ "$TARGET" -nt "$rule" ]; then
108
+ echo -e " ${Y}SKIP${X} $BASENAME (user version is newer)"
109
+ else
110
+ cp "$rule" "$TARGET"
111
+ echo -e " ${G}OK${X} $BASENAME"
112
+ RULES_INSTALLED=$((RULES_INSTALLED + 1))
113
+ fi
114
+ done
115
+ echo -e " Installed ${G}${RULES_INSTALLED}${X} rules"
116
+ else
117
+ echo -e "${Y}WARN${X}: Could not find rules directory. Run ${C}nodebench-mcp --sync-configs${X} after install to copy rules."
118
+ fi
119
+
120
+ # ── Write .mcp.json ─────────────────────────────────────────────────────
121
+ echo ""
122
+ MCP_CONFIG=".mcp.json"
123
+
124
+ # Collect preset preference
125
+ PRESET="starter"
126
+ echo -e "${B}Select a preset:${X}"
127
+ echo " 1) starter — 15 tools (decision intelligence core)"
128
+ echo " 2) founder — 40 tools (weekly resets, delegation, entities)"
129
+ echo " 3) researcher — 32 tools (web search, LLM, RSS, email)"
130
+ echo " 4) web_dev — 150 tools (vision, SEO, git, UI/UX)"
131
+ echo " 5) full — 338 tools (everything)"
132
+ echo ""
133
+ read -r -p "Choose [1-5, default=1]: " CHOICE </dev/tty 2>/dev/null || CHOICE="1"
134
+ case "${CHOICE:-1}" in
135
+ 2) PRESET="founder" ;;
136
+ 3) PRESET="researcher" ;;
137
+ 4) PRESET="web_dev" ;;
138
+ 5) PRESET="full" ;;
139
+ *) PRESET="starter" ;;
140
+ esac
141
+
142
+ # Build MCP config
143
+ if [ -n "$NODEBENCH_PATH" ]; then
144
+ MCP_CMD="nodebench-mcp"
145
+ MCP_ARGS="[\"--preset\", \"$PRESET\"]"
146
+ else
147
+ MCP_CMD="npx"
148
+ MCP_ARGS="[\"-y\", \"nodebench-mcp\", \"--preset\", \"$PRESET\"]"
149
+ fi
150
+
151
+ # Collect env vars
152
+ ENV_BLOCK=""
153
+ if [ -n "${GEMINI_API_KEY:-}" ]; then
154
+ ENV_BLOCK="\"GEMINI_API_KEY\": \"$GEMINI_API_KEY\""
155
+ fi
156
+ if [ -n "${OPENAI_API_KEY:-}" ]; then
157
+ [ -n "$ENV_BLOCK" ] && ENV_BLOCK="$ENV_BLOCK, "
158
+ ENV_BLOCK="${ENV_BLOCK}\"OPENAI_API_KEY\": \"$OPENAI_API_KEY\""
159
+ fi
160
+ if [ -n "${GITHUB_TOKEN:-}" ]; then
161
+ [ -n "$ENV_BLOCK" ] && ENV_BLOCK="$ENV_BLOCK, "
162
+ ENV_BLOCK="${ENV_BLOCK}\"GITHUB_TOKEN\": \"$GITHUB_TOKEN\""
163
+ fi
164
+
165
+ ENV_JSON="{}"
166
+ if [ -n "$ENV_BLOCK" ]; then
167
+ ENV_JSON="{$ENV_BLOCK}"
168
+ fi
169
+
170
+ # Write or merge .mcp.json
171
+ if [ -f "$MCP_CONFIG" ]; then
172
+ echo -e "${Y}NOTE${X}: $MCP_CONFIG already exists. Adding nodebench entry."
173
+ fi
174
+
175
+ cat > "$MCP_CONFIG" <<MCPEOF
176
+ {
177
+ "mcpServers": {
178
+ "nodebench": {
179
+ "command": "$MCP_CMD",
180
+ "args": $MCP_ARGS,
181
+ "env": $ENV_JSON
182
+ }
183
+ }
184
+ }
185
+ MCPEOF
186
+ echo -e " ${G}OK${X} Written: ${C}${MCP_CONFIG}${X} (preset: $PRESET)"
187
+
188
+ # ── Add .mcp.json to .gitignore ─────────────────────────────────────────
189
+ if [ -f ".gitignore" ]; then
190
+ if ! grep -qF ".mcp.json" .gitignore; then
191
+ echo "" >> .gitignore
192
+ echo "# NodeBench MCP config (contains API keys)" >> .gitignore
193
+ echo ".mcp.json" >> .gitignore
194
+ echo -e " ${G}OK${X} Added .mcp.json to .gitignore"
195
+ fi
196
+ fi
197
+
198
+ # ── Run health check ────────────────────────────────────────────────────
199
+ echo ""
200
+ echo -e "${B}Running health check...${X}"
201
+ npx -y nodebench-mcp --health 2>/dev/null || echo -e "${Y}WARN${X}: Health check skipped (will run on first use)"
202
+
203
+ # ── Summary ─────────────────────────────────────────────────────────────
204
+ echo ""
205
+ echo -e "${B}${G}NodeBench MCP installed successfully!${X}"
206
+ echo ""
207
+ echo -e "${B}Try these first:${X}"
208
+ echo -e " ${C}discover_tools('analyze a company')${X} — find relevant tools"
209
+ echo -e " ${C}load_toolset('founder')${X} — activate founder tools"
210
+ echo -e " ${C}get_workflow_chain('weekly_reset')${X} — get guided workflow"
211
+ echo -e " ${C}site_map({ url: 'https://yoursite.com' })${X} — crawl & inspect"
212
+ echo ""
213
+ echo -e " Run ${C}nodebench-mcp --health${X} anytime to check system status."
214
+ echo -e " Run ${C}nodebench-mcp --sync-configs${X} to write configs to Claude/Cursor/Windsurf."
215
+ echo ""