Fix: fix-4898e74fe51716398a95.
What the agent did
Start the local stdio MCP server via the README's documented command and call tools/list (initialize, then tools/list).
cd <host-path> && ls -la && cat README.md 2>/dev/null | head -300
cd <host-path> && git log -1 --oneline 2>/dev/null; ls <host-path> 2>/dev/null; echo "CDP=$CDP_URL"; which node npm python3 uv pip3 2>&1; cat /etc/os-release | head -2
cd <host-path> && cat package.json && cat server.json && ls src && (sudo apt-get update -qq && sudo apt-get install -y -qq nodejs npm >/tmp/apt.log 2>&1; echo apt=$?; node -v; npm -v)
cd <host-path> && export NODE_USE_ENV_PROXY=1 && (curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - >/tmp/ns.log 2>&1; sudo apt-get install -y -qq nodejs >>/tmp/ns.log 2>&1; echo ns=$?) ; node -v && npm ci 2>&1 | tail -5; npm run build 2>&1 | tail -5; ls dist; sed -n 1,60p src/index.ts
cd <host-path> && echo "--- no key:"; env -u AMT_API_KEY timeout 10 node dist/index.js </dev/null; echo "rc=$?"; echo "--- placeholder key, tools/list only (no API call):"; printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | AMT_API_KEY=placeholder-smoke-only timeout 15 node dist/index.js | python3 -c 'import sys,json;[print(json.loads(l)["result"]["tools"] and [t["name"] for t in json.loads(l)["result"]["tools"]]) for l in sys.stdin if "tools" in l]'; echo rc=$?
cd <host-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | AMT_API_KEY=placeholder-smoke-only timeout 15 node dist/index.js > /tmp/mcp_out.txt 2>/tmp/mcp_err.txt; echo rc=$?; cat /tmp/mcp_err.txt; python3 -I -c 'import json;[print(json.loads(l)["result"]["tools"] and len(json.loads(l)["result"]["tools"]), [t["name"] for t in json.loads(l)["result"]["tools"]]) for l in open("/tmp/mcp_out.txt") if json.loads(l).get("id")==2]'
cd /tmp && export NODE_USE_ENV_PROXY=1 && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | AMT_API_KEY=placeholder-smoke-only timeout 120 /usr/bin/npx -y @aimentiontracker/mcp > /tmp/npx_out.txt 2>/tmp/npx_err.txt; echo rc=$?; tail -3 /tmp/npx_err.txt; python3 -I -c 'import json;[print(len(json.loads(l)["result"]["tools"])) for l in open("/tmp/npx_out.txt") if json.loads(l).get("id")==2]'
cd <host-path> && python3 -I -c 'import json
a={json.loads(l)["id"]:json.loads(l) for l in open("/tmp/mcp_out.txt")}[2]["result"]["tools"]
b={json.loads(l)["id"]:json.loads(l) for l in open("/tmp/npx_out.txt")}[2]["result"]["tools"]
A={t["name"] for t in a};B={t["name"] for t in b}
print("source-only:",sorted(A-B));print("npm-only:",sorted(B-A))'; mkdir -p .coldpass && ls -la .coldpass; cat .gitignore
cd <host-path> && python3 -I - <<'EOF'
import json
probe={"kind":"mcp","argv":["/usr/bin/npx","-y","@aimentiontracker/mcp"],"cwd":"<host-path>","env":{"AMT_API_KEY":"placeholder-smoke-only","NODE_USE_ENV_PROXY":"1"}}
report={
"outcome":"working",
"operation":"Start the local stdio MCP server via the README's documented command and call tools/list (initialize, then tools/list).",
"operation_scope":"Covers server start and tool listing only. Tool calls (get_me, list_brands, get_visibility, etc.) hit the hosted API and need a real AMT_API_KEY from app.aimentiontracker.ai/api-keys; none was available or obtained, so no data call was made. The key used for the smoke run was a placeholder, which the server accepts at startup because no request is made during tools/list.",
"steps":[
"Installed Node.js 20 via NodeSource setup_20.x (guest had Node 18, package requires >=20) and apt nodejs.",
"npm ci in <host-path> (pinned source).",
"npm run build (tsc -p tsconfig.json) -> dist/index.js, dist/http.js, dist/client.js, dist/tools.js.",
"Verified missing-key behaviour: node dist/index.js without AMT_API_KEY exits 1 with the documented 'AMT_API_KEY is not set' message.",
"README 'Local (stdio)' command: /usr/bin/npx -y @aimentiontracker/mcp with AMT_API_KEY set; initialize + tools/list returned 10 tools (exit 0). This is the probe."
],
"deviations":[
"README 'Local (stdio)' needs AMT_API_KEY; no real key was available, so a placeholder value was used for start/tools-list only. No API call was made.",
"Node 18 in the guest was below the package's engines (>=20); upgraded via NodeSource before npm ci.",
"Version mismatch: the published npm @aimentiontracker/[email protected] (used by the README command) exposes 10 tools. The pinned source at 5d14262 registers 12, adding list_questions and list_recommendations. The README's 'Tools' table lists 12, so the npm release lags the repo.",
"The README has no build step; npm ci and npm run build were run from package.json scripts to verify the pinned source compiles. Build is separate from the probe, which uses the npm package via npx."
],
"stuck_step":None,
"main_blocker":None,
"suggested_fix":"For full read-only operation, supply a real AMT_API_KEY (app.aimentiontracker.ai/api-keys) and run a tool call such as get_me. To expose all 12 documented tools from the npm command, publish a release that includes the pinned source's tool registrations, or point users at the source build."
}
json.dump(probe,open(".coldpass/probe.json","w"),indent=2)
json.dump(report,open(".coldpass/report.json","w"),indent=2)
print("written")
EOF
<env-var>=<host-path> python3 -I <host-path> --validate; echo rc=$?