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.
- package/README.md +95 -39
- package/dist/agents/alertRouter.d.ts +38 -0
- package/dist/agents/alertRouter.js +151 -0
- package/dist/agents/alertRouter.js.map +1 -0
- package/dist/agents/entityMemory.d.ts +40 -0
- package/dist/agents/entityMemory.js +64 -0
- package/dist/agents/entityMemory.js.map +1 -0
- package/dist/agents/subAgents.d.ts +35 -0
- package/dist/agents/subAgents.js +62 -0
- package/dist/agents/subAgents.js.map +1 -0
- package/dist/benchmarks/benchmarkRunner.js +14 -0
- package/dist/benchmarks/benchmarkRunner.js.map +1 -1
- package/dist/benchmarks/chainEval.js +107 -0
- package/dist/benchmarks/chainEval.js.map +1 -1
- package/dist/benchmarks/llmJudgeEval.js +85 -0
- package/dist/benchmarks/llmJudgeEval.js.map +1 -1
- package/dist/benchmarks/searchQualityEval.js +118 -5
- package/dist/benchmarks/searchQualityEval.js.map +1 -1
- package/dist/cli/search.d.ts +13 -0
- package/dist/cli/search.js +130 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/db.d.ts +6 -2
- package/dist/db.js +470 -3
- package/dist/db.js.map +1 -1
- package/dist/index.js +349 -64
- package/dist/index.js.map +1 -1
- package/dist/profiler/behaviorStore.d.ts +97 -0
- package/dist/profiler/behaviorStore.js +276 -0
- package/dist/profiler/behaviorStore.js.map +1 -0
- package/dist/profiler/eventCollector.d.ts +119 -0
- package/dist/profiler/eventCollector.js +267 -0
- package/dist/profiler/eventCollector.js.map +1 -0
- package/dist/profiler/index.d.ts +15 -0
- package/dist/profiler/index.js +16 -0
- package/dist/profiler/index.js.map +1 -0
- package/dist/profiler/mcpProxy.d.ts +49 -0
- package/dist/profiler/mcpProxy.js +123 -0
- package/dist/profiler/mcpProxy.js.map +1 -0
- package/dist/profiler/modelRouter.d.ts +30 -0
- package/dist/profiler/modelRouter.js +99 -0
- package/dist/profiler/modelRouter.js.map +1 -0
- package/dist/profiler/otelReceiver.d.ts +17 -0
- package/dist/profiler/otelReceiver.js +62 -0
- package/dist/profiler/otelReceiver.js.map +1 -0
- package/dist/profiler/proofEngine.d.ts +41 -0
- package/dist/profiler/proofEngine.js +93 -0
- package/dist/profiler/proofEngine.js.map +1 -0
- package/dist/profiler/workflowTemplates.d.ts +41 -0
- package/dist/profiler/workflowTemplates.js +95 -0
- package/dist/profiler/workflowTemplates.js.map +1 -0
- package/dist/providers/localMemoryProvider.js +3 -2
- package/dist/providers/localMemoryProvider.js.map +1 -1
- package/dist/runtimeConfig.d.ts +11 -0
- package/dist/runtimeConfig.js +27 -0
- package/dist/runtimeConfig.js.map +1 -0
- package/dist/security/auditLog.js +8 -3
- package/dist/security/auditLog.js.map +1 -1
- package/dist/subconscious/blocks.d.ts +43 -0
- package/dist/subconscious/blocks.js +158 -0
- package/dist/subconscious/blocks.js.map +1 -0
- package/dist/subconscious/classifier.d.ts +22 -0
- package/dist/subconscious/classifier.js +118 -0
- package/dist/subconscious/classifier.js.map +1 -0
- package/dist/subconscious/graphEngine.d.ts +65 -0
- package/dist/subconscious/graphEngine.js +234 -0
- package/dist/subconscious/graphEngine.js.map +1 -0
- package/dist/subconscious/index.d.ts +19 -0
- package/dist/subconscious/index.js +20 -0
- package/dist/subconscious/index.js.map +1 -0
- package/dist/subconscious/tools.d.ts +5 -0
- package/dist/subconscious/tools.js +255 -0
- package/dist/subconscious/tools.js.map +1 -0
- package/dist/subconscious/whisperPolicy.d.ts +20 -0
- package/dist/subconscious/whisperPolicy.js +171 -0
- package/dist/subconscious/whisperPolicy.js.map +1 -0
- package/dist/sweep/engine.d.ts +27 -0
- package/dist/sweep/engine.js +244 -0
- package/dist/sweep/engine.js.map +1 -0
- package/dist/sweep/index.d.ts +9 -0
- package/dist/sweep/index.js +8 -0
- package/dist/sweep/index.js.map +1 -0
- package/dist/sweep/sources/github_trending.d.ts +6 -0
- package/dist/sweep/sources/github_trending.js +37 -0
- package/dist/sweep/sources/github_trending.js.map +1 -0
- package/dist/sweep/sources/hackernews.d.ts +7 -0
- package/dist/sweep/sources/hackernews.js +57 -0
- package/dist/sweep/sources/hackernews.js.map +1 -0
- package/dist/sweep/sources/openbb_finance.d.ts +9 -0
- package/dist/sweep/sources/openbb_finance.js +46 -0
- package/dist/sweep/sources/openbb_finance.js.map +1 -0
- package/dist/sweep/sources/producthunt.d.ts +6 -0
- package/dist/sweep/sources/producthunt.js +41 -0
- package/dist/sweep/sources/producthunt.js.map +1 -0
- package/dist/sweep/sources/web_signals.d.ts +7 -0
- package/dist/sweep/sources/web_signals.js +63 -0
- package/dist/sweep/sources/web_signals.js.map +1 -0
- package/dist/sweep/sources/yahoo_finance.d.ts +6 -0
- package/dist/sweep/sources/yahoo_finance.js +47 -0
- package/dist/sweep/sources/yahoo_finance.js.map +1 -0
- package/dist/sweep/types.d.ts +50 -0
- package/dist/sweep/types.js +9 -0
- package/dist/sweep/types.js.map +1 -0
- package/dist/sync/founderEpisodeStore.d.ts +98 -0
- package/dist/sync/founderEpisodeStore.js +230 -0
- package/dist/sync/founderEpisodeStore.js.map +1 -0
- package/dist/sync/hyperloopArchive.d.ts +51 -0
- package/dist/sync/hyperloopArchive.js +153 -0
- package/dist/sync/hyperloopArchive.js.map +1 -0
- package/dist/sync/hyperloopEval.d.ts +123 -0
- package/dist/sync/hyperloopEval.js +389 -0
- package/dist/sync/hyperloopEval.js.map +1 -0
- package/dist/sync/hyperloopEval.test.d.ts +4 -0
- package/dist/sync/hyperloopEval.test.js +60 -0
- package/dist/sync/hyperloopEval.test.js.map +1 -0
- package/dist/sync/protocol.d.ts +172 -0
- package/dist/sync/protocol.js +9 -0
- package/dist/sync/protocol.js.map +1 -0
- package/dist/sync/sessionMemory.d.ts +47 -0
- package/dist/sync/sessionMemory.js +138 -0
- package/dist/sync/sessionMemory.js.map +1 -0
- package/dist/sync/store.d.ts +384 -0
- package/dist/sync/store.js +1435 -0
- package/dist/sync/store.js.map +1 -0
- package/dist/sync/store.test.d.ts +4 -0
- package/dist/sync/store.test.js +43 -0
- package/dist/sync/store.test.js.map +1 -0
- package/dist/sync/syncBridgeClient.d.ts +30 -0
- package/dist/sync/syncBridgeClient.js +172 -0
- package/dist/sync/syncBridgeClient.js.map +1 -0
- package/dist/tools/autonomousDeliveryTools.d.ts +2 -0
- package/dist/tools/autonomousDeliveryTools.js +1104 -0
- package/dist/tools/autonomousDeliveryTools.js.map +1 -0
- package/dist/tools/claudeCodeIngestTools.d.ts +10 -0
- package/dist/tools/claudeCodeIngestTools.js +347 -0
- package/dist/tools/claudeCodeIngestTools.js.map +1 -0
- package/dist/tools/coreWorkflowTools.d.ts +2 -0
- package/dist/tools/coreWorkflowTools.js +488 -0
- package/dist/tools/coreWorkflowTools.js.map +1 -0
- package/dist/tools/deltaTools.d.ts +15 -0
- package/dist/tools/deltaTools.js +1522 -0
- package/dist/tools/deltaTools.js.map +1 -0
- package/dist/tools/entityLookupTools.d.ts +14 -0
- package/dist/tools/entityLookupTools.js +159 -0
- package/dist/tools/entityLookupTools.js.map +1 -0
- package/dist/tools/entityTemporalTools.d.ts +12 -0
- package/dist/tools/entityTemporalTools.js +330 -0
- package/dist/tools/entityTemporalTools.js.map +1 -0
- package/dist/tools/founderLocalPipeline.d.ts +215 -0
- package/dist/tools/founderLocalPipeline.js +1516 -2
- package/dist/tools/founderLocalPipeline.js.map +1 -1
- package/dist/tools/founderOperatingModel.d.ts +120 -0
- package/dist/tools/founderOperatingModel.js +469 -0
- package/dist/tools/founderOperatingModel.js.map +1 -0
- package/dist/tools/founderOperatingModelTools.d.ts +2 -0
- package/dist/tools/founderOperatingModelTools.js +169 -0
- package/dist/tools/founderOperatingModelTools.js.map +1 -0
- package/dist/tools/founderStrategicOpsTools.d.ts +2 -0
- package/dist/tools/founderStrategicOpsTools.js +1310 -0
- package/dist/tools/founderStrategicOpsTools.js.map +1 -0
- package/dist/tools/graphifyTools.d.ts +19 -0
- package/dist/tools/graphifyTools.js +375 -0
- package/dist/tools/graphifyTools.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/monteCarloTools.d.ts +16 -0
- package/dist/tools/monteCarloTools.js +225 -0
- package/dist/tools/monteCarloTools.js.map +1 -0
- package/dist/tools/packetCompilerTools.d.ts +12 -0
- package/dist/tools/packetCompilerTools.js +322 -0
- package/dist/tools/packetCompilerTools.js.map +1 -0
- package/dist/tools/planSynthesisTools.d.ts +15 -0
- package/dist/tools/planSynthesisTools.js +455 -0
- package/dist/tools/planSynthesisTools.js.map +1 -0
- package/dist/tools/profilerTools.d.ts +20 -0
- package/dist/tools/profilerTools.js +364 -0
- package/dist/tools/profilerTools.js.map +1 -0
- package/dist/tools/savingsTools.d.ts +11 -0
- package/dist/tools/savingsTools.js +155 -0
- package/dist/tools/savingsTools.js.map +1 -0
- package/dist/tools/scenarioCompilerTools.d.ts +14 -0
- package/dist/tools/scenarioCompilerTools.js +290 -0
- package/dist/tools/scenarioCompilerTools.js.map +1 -0
- package/dist/tools/sharedContextTools.d.ts +2 -0
- package/dist/tools/sharedContextTools.js +423 -0
- package/dist/tools/sharedContextTools.js.map +1 -0
- package/dist/tools/sitemapTools.d.ts +15 -0
- package/dist/tools/sitemapTools.js +560 -0
- package/dist/tools/sitemapTools.js.map +1 -0
- package/dist/tools/sweepTools.d.ts +9 -0
- package/dist/tools/sweepTools.js +112 -0
- package/dist/tools/sweepTools.js.map +1 -0
- package/dist/tools/syncBridgeTools.d.ts +2 -0
- package/dist/tools/syncBridgeTools.js +258 -0
- package/dist/tools/syncBridgeTools.js.map +1 -0
- package/dist/tools/toolRegistry.js +1216 -49
- package/dist/tools/toolRegistry.js.map +1 -1
- package/dist/tools/workspaceTools.d.ts +19 -0
- package/dist/tools/workspaceTools.js +762 -0
- package/dist/tools/workspaceTools.js.map +1 -0
- package/dist/toolsetRegistry.js +88 -2
- package/dist/toolsetRegistry.js.map +1 -1
- package/package.json +36 -36
- package/rules/nodebench-agentic-reliability.md +32 -0
- package/rules/nodebench-analyst-diagnostic.md +25 -0
- package/rules/nodebench-auto-qa.md +31 -0
- package/rules/nodebench-completion-traceability.md +22 -0
- package/rules/nodebench-flywheel-continuous.md +25 -0
- package/rules/nodebench-pre-release-review.md +24 -0
- package/rules/nodebench-qa-dogfood.md +26 -0
- package/rules/nodebench-scenario-testing.md +30 -0
- package/rules/nodebench-self-direction.md +23 -0
- package/rules/nodebench-self-judge-loop.md +24 -0
- 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 ""
|