Haiku 5.5
Native agent · Not testedOperation / attempted scope limited checks
Agent-reported scope: Build and run the QuickBooks Online MCP server (stdio) and call a QuickBooks tool from the README Quick Start
Run details
- run
- intuit--quickbooks-online-mcp-server-claude-haiku-5-5-1792813682836338174
- date
- Oct 24, 2026
- time to working
- not recorded
- product hosting / execution
- Not recorded
- recorded operation scope
- limited checks
- model
- claude-haiku-5-5
- agent / version
- claude-code / 2.1.300 (Claude Code)
- platform
- linux
- reported cost
- $0.032658
- Recorded source
- https://github.com/intuit/quickbooks-online-mcp-server
- Backend
- hyperv
- Tool transport
- mcp-assigned-vm
- Requested source pin (not an observed revision)
- {"commit": "31a1dd5c3e170e368dbff651abbaf61aabde6ed9", "url": "https://github.com/intuit/quickbooks-online-mcp-server"}
- Test version
- readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
- revision
- 31a1dd5c3e170e368dbff651abbaf61aabde6ed9
Missing QuickBooks OAuth credentials. The server refuses to start without them, and the README says they come from an Intuit developer app and a one-time browser sign-.
Step: Calling any QuickBooks MCP tool, because the server cannot start without QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID.
Missing QuickBooks OAuth credentials. The server refuses to start without them, and the README says they come from an Intuit developer app and a one-time browser sign-in.
Safety: Review signals: 43 known vulnerability.
Review signals: 43 known vulnerability.
OSV reports a known vulnerability in this dependency version. 12 distinct locations. 43 findings.
OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.
A short run cannot establish that code is safe.
Connections show IP addresses; proxies can hide the final hostname.
Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.
Install / setup / connection checks
[
{
"status": "PASS",
"details": {
"working": false,
"argv": [
"npm",
"install"
],
"kind": "cli",
"returncode": 0,
"stdout": "\n> @qboapi/[email protected] prepare\n> npm run build\n\n\n> @qboapi/[email protected] build\n> tsc && shx chmod +x dist/*.js\n\n\nup to date, audited 630 packages in 7s\n\n147 packages are looking for funding\n[excerpt truncated]",
"stderr": "npm WARN EBADENGINE Unsupported engine {\nnpm WARN EBADENGINE package: '@hono/[email protected]',\nnpm WARN EBADENGINE required: { node: '>=20' },\nnpm WARN EBADENGINE current: { node: 'v18.19.1', npm: '9.2.0' }\nnpm WARN EBADENGINE }",
"needs_credentials": false,
"needs_browser": false,
"scope": "partial: install"
},
"check": "install",
"optional": false
},
{
"status": "PASS",
"details": {
"working": false,
"argv": [
"node",
"dist/index.js"
],
"kind": "cli",
"returncode": 0,
"stdout": "",
"stderr": "[auth-server] uncaughtException: Error: Client ID, Client Secret and Redirect URI must be set in environment variables\n at file://<guest-path> (node:internal/modules/esm/module_job:195:25)\n at async ModuleLoader.import (node:internal/modules/esm/loader:336:24)\n at async loadESM (node:internal/process/esm_loader:34:7)\n at async handleMainPromise (node:internal/modules/run_main:106:12)",
"needs_credentials": false,
"needs_browser": false,
"scope": "partial: start"
},
"check": "start",
"optional": false
}
]Answers recorded for this run
- Build the project: Real input produced the expected result: tsc && shx chmod +x dist/*.js
Source: # Build the project
Input: npm run build
Expected: TypeScript build completes
Command: npm run build
Observed: tsc && shx chmod +x dist/*.js
- Server needs QuickBooks authentication: Calling QuickBooks tools needs QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID from an Intuit developer app and a browser OAuth handshake, which are not available in this guest
Source: this is a local MCP server. It runs as a stdio subprocess
Observed: Calling QuickBooks tools needs QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID from an Intuit developer app and a browser OAuth handshake, which are not available in this guest
Examples
- Run the documented test suite: command completed successfully
Source: README.md Testing section
Input: npm test
Expected: Jest reports all tests passing
Command: npm test
Observed: st.ts:85:5) PASS tests/unit/handlers/invoice-pdf.handler.test.ts PASS tests/unit/handlers/invoice-template-fields.handlers.test.ts PASS tests/unit/handlers/budget.handlers.test.ts PASS tests/unit/handlers/account-reparent.handlers.test.ts PASS tests/unit/handlers/create-account.handlers.test.ts PASS tests/unit/handlers/invoice-linked-txn.handlers.test.ts PASS tests/unit/helpers/build-quickbooks-search-criteria.test.ts PASS tests/unit/helpers/format-error.test.ts Test Suites: 35 passed, 35 total Tests: 639 passed, 639 total Snapshots: 0 total Time: 10.881 s Ran all test suites.
- Run the MCP server from Claude Code configuration: Needs QuickBooks OAuth credentials (QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID); not obtainable in this guest. Without them the server exits at startup with 'Client ID, Client Secret and Redirect URI must be set in environment variables' (observed).
Source: README.md Claude Code Integration
Expected: documented command completes successfully
Observed: Needs QuickBooks OAuth credentials (QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID); not obtainable in this guest. Without them the server exits at startup with 'Client ID, Client Secret and Redirect URI must be set in environment variables' (observed).
Local or hosted: local
Suggested next step (agent-reported): Provide a QuickBooks sandbox app's client ID, client secret, refresh token and realm ID (set in the MCP server's env block or in .env), then rerun the tool-call probe. Also update the README to name the Node version it needs (npm warns for node >=20) and correct the test count from 396 to the current number.
What the agent did
Build and run the QuickBooks Online MCP server (stdio) and call a QuickBooks tool from the README Quick Start
cd <guest-path> && ls -la && cat README.md | head -200 && python3 --version && id -u && cat /etc/os-release | head -3
cd <guest-path> && sed -n 200,600p README.md | grep -v '^$' | head -300; echo ---; ls -la .coldpass; echo ---; node --version; npm --version; grep -n '"engines"' -A3 package.json; grep -n '"scripts"' -A20 package.json
cd <guest-path> && cat package.json | head -12; grep -n '"node_modules/@modelcontextprotocol/sdk"' -A8 package-lock.json | head -12; sudo -n true && echo SUDO_OK; (sudo apt-get update -qq && sudo apt-get install -y -qq nodejs npm) 2>&1 | tail -5; node --version; npm --version
cd <guest-path> && export NODE_USE_ENV_PROXY=1 && npm install 2>&1 | tail -25; echo "EXIT=$?"; npm run build 2>&1 | tail -15; echo BUILD_DONE; ls dist | head -30
cd <guest-path> && npm test 2>&1 | tail -25; echo "TEST_EXIT=${PIPESTATUS[0]}"
cd <guest-path> && cat src/index.ts | head -150; echo ----; ls src/tools | head -20; ls src/server 2>/dev/null
cd <guest-path> && sed -n 150,260p src/index.ts | grep -v '^\s*$' | head -80; echo ----; grep -rn "QUICKBOOKS_\|process.env" src --include=*.ts | grep -v test | head -30; echo ----; cat .env.example
cd <guest-path> && ( printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_company_info","arguments":{"company_id":"123"}}}' ; sleep 4 ) | timeout 20 node dist/index.js 2>/tmp/qbo_err.txt | head -c 3000; echo; echo "STDERR:"; head -c 1500 /tmp/qbo_err.txt
cd <guest-path> && env -u QUICKBOOKS_CLIENT_ID node dist/index.js < /dev/null > /tmp/qbo_out.txt 2>/tmp/qbo_err2.txt; echo "EXIT=$?"; head -2 /tmp/qbo_err2.txt; ls -la .env 2>/dev/null || echo "no .env (expected, no credentials)"
ls -la <guest-path> 2>&1; f=<guest-path>; [ -f "$f" ] && wc -l "$f" && grep -n "credentials_error\|def \|checks\|expected_returncode\|stderr" "$f" | head -120
f=<guest-path>; sed -n 350,362p $f; echo ...; sed -n 653,656p $f; sed -n 674,745p $f; echo ...; sed -n 788,856p $f
f=<guest-path>; grep -n "^CREDENTIALS\|^PREREQUISITE\|^SECRET_NAME\|^BROWSER" $f; cd <guest-path>; echo ---cron; grep -rniE "cron|setInterval|schedule|webhook|--once|--now|setTimeout" src README.md | grep -v test | head; echo ---; ls -la /inputs/ 2>&1 | head; grep -c "" README.md; grep -n "Testing\|npm test" README.md | head
cd <guest-path> && sed -n 352,362p src/clients/quickbooks-client.ts; mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'
{"checks":[
{"check":"install","kind":"cli","argv":["npm","install"],"cwd":"<guest-path>","expected_text":"audited 630 packages"},
{"check":"credentials_error","kind":"mcp","argv":["node","dist/index.js"],"cwd":"<guest-path>","tool":"get_company_info","arguments":{"company_id":"123"},"expected_text":"Client ID, Client Secret and Redirect URI must be set"}
]}
EOF
cat > .coldpass/claims.json <<'EOF'
[
{"kind":"claim","claim":"Build the project","source":"# Build the project","input":"npm run build","expected":"TypeScript build completes","probe_kind":"cli","argv":["npm","run","build"],"cwd":"<guest-path>","expected_text":"tsc && shx chmod +x dist/*.js"},
{"kind":"claim","claim":"Jest test suite runs and passes","source":"Jest test suite with ESM support","input":"npm test","expected":"all suites pass","probe_kind":"cli","argv":["npm","test"],"cwd":"<guest-path>","expected_text":"Test Suites: 35 passed, 35 total"},
{"kind":"claim","claim":"Server needs QuickBooks authentication","source":"this is a local MCP server. It runs as a stdio subprocess","testable":false,"reason":"Calling QuickBooks tools needs QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID from an Intuit developer app and a browser OAuth handshake, which are not available in this guest"}
]
EOF
cat > .coldpass/examples.json <<'EOF'
[
{"kind":"example","claim":"Run the documented test suite","source":"README.md Testing section","input":"npm test","expected":"Jest reports all tests passing","argv":["npm","test"],"cwd":"<guest-path>","env":{},"expected_text":"639 passed, 639 total"},
{"kind":"example","claim":"Run the MCP server from Claude Code configuration","source":"README.md Claude Code Integration","reason":"Needs QuickBooks OAuth credentials (QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID); not obtainable in this guest. Without them the server exits at startup with 'Client ID, Client Secret and Redirect URI must be set in environment variables' (observed)."}
]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README.md and src/ entry points (src/index.ts stdio MCP server, src/auth-server.ts OAuth helper). No cron, scheduler, loop, webhook, --once or --now trigger exists; the server only responds to MCP requests over stdio. The one setTimeout in src/clients/quickbooks-client.ts is internal timing, not a product cycle.","checks":[]}
EOF
python3 -I -c "import json;[json.load(open('.coldpass/'+f)) for f in ['probe.json','claims.json','examples.json','cycles.json']];print('json ok')"
cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -80; echo "EXIT=${PIPESTATUS[0]}"
cd <guest-path> && cat > .coldpass/probe.json <<'EOF'
{"checks":[
{"check":"install","kind":"cli","argv":["npm","install"],"cwd":"<guest-path>","expected_text":"audited 630 packages"},
{"check":"start","kind":"cli","argv":["node","dist/index.js"],"cwd":"<guest-path>","stdin":"","expected_text":"Client ID, Client Secret and Redirect URI must be set"}
]}
EOF
cat > .coldpass/claims.json <<'EOF'
[
{"kind":"claim","claim":"Build the project","source":"# Build the project","input":"npm run build","expected":"TypeScript build completes","probe_kind":"cli","argv":["npm","run","build"],"cwd":"<guest-path>","expected_text":"tsc && shx chmod +x dist/*.js"},
{"kind":"claim","claim":"Server needs QuickBooks authentication","source":"this is a local MCP server. It runs as a stdio subprocess","testable":false,"reason":"Calling QuickBooks tools needs QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID from an Intuit developer app and a browser OAuth handshake, which are not available in this guest"}
]
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | head -c 4000; echo; echo "EXIT=${PIPESTATUS[0]}"
cd <guest-path> && cat > .coldpass/report.json <<'EOF'
{"outcome":"needs_credentials",
"fault_owner":"prerequisite",
"operation":"Build and run the QuickBooks Online MCP server (stdio) and call a QuickBooks tool from the README Quick Start",
"operation_scope":"Guest VM with Ubuntu 24.04, Python 3.12.3, Node 18.19.1 and npm 9.2.0 (installed via apt). Setup, build and the Jest suite ran fully. The live QuickBooks tool call could not run because no QuickBooks OAuth credentials (client ID, client secret, refresh token, realm ID) are available in this guest; obtaining them requires an Intuit developer app and a browser OAuth handshake, which is out of scope here.",
"steps":["sudo apt-get install -y nodejs npm (Node 18.19.1 / npm 9.2.0; README names no Node version)",
"npm install (exit 0, 630 packages; EBADENGINE warning for @hono/[email protected] which wants node >=20)",
"npm run build (tsc succeeded, dist/ produced)",
"npm test (35 suites, 639 tests passed)",
"cp .env.example .env was NOT run: no credentials to put in it",
"node dist/index.js with no QUICKBOOKS_* variables: exits with 'Client ID, Client Secret and Redirect URI must be set in environment variables'"],
"deviations":["Node and npm were not preinstalled; installed Ubuntu apt nodejs 18.19.1 and npm 9.2.0 instead of a newer Node. npm install warned that a transitive dependency (@hono/[email protected]) requires node >=20; the build and tests still passed.",
"README says the test suite has 396 tests; the actual npm test run reported 639 passed tests across 35 suites. Recorded as observed; not used as a claim.",
"The probe for the MCP tool call is a credentials_error check in the task spec. The checker's credential pattern did not recognise the product's message ('Client ID, Client Secret and Redirect URI must be set'), so the observed startup failure was recorded as a 'start' partial check instead of a credentials_error check.",
"No live MCP tools/call was made: it needs QuickBooks credentials that were not available.",
"/inputs/coldpass-preflight.py does not exist in this guest; the validation was run with <guest-path> as given in the task preamble.",
"The workspace has no .git metadata. No command needed git, so the git init/fetch pin step was not performed."],
"stuck_step":"Calling any QuickBooks MCP tool, because the server cannot start without QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID.",
"main_blocker":"Missing QuickBooks OAuth credentials. The server refuses to start without them, and the README says they come from an Intuit developer app and a one-time browser sign-in.",
"plain_failure":"The QuickBooks server installs, builds and passes its 639 tests, but it cannot be used against a real QuickBooks company here. It needs company login details (client ID, client secret and a refresh token from a one-time browser sign-in), and this test machine does not have them. Without them, the server stops immediately at startup.",
"suggested_fix":"Provide a QuickBooks sandbox app's client ID, client secret, refresh token and realm ID (set in the MCP server's env block or in .env), then rerun the tool-call probe. Also update the README to name the Node version it needs (npm warns for node >=20) and correct the test count from 396 to the current number."}
EOF
python3 -I -c "import json;d=json.load(open('.coldpass/report.json'));print('report ok:',d['outcome'])"; ls -la <guest-path> 2>/dev/null || echo "no root report.json (correct)"; pgrep -af "dist/index.js|auth-server" || echo "no leftover servers"; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | head -c 300; echo; echo "FINAL_EXIT=${PIPESTATUS[0]}"run JSON · checker evidence · agent report + check · transcript excerpt unavailable · error excerpt unavailable