intuit/quickbooks-online-mcp-server

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Not tested

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/intuit--quickbooks-online-mcp-server.svg).

mcp-server

Not tested

The saved checks do not establish a current product result.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxnot testednot tested

Linux / Haiku 5.5: not tested · Oct 24, 2026 · 31a1dd5c3e17 · claude-code / 2.1.300 (Claude Code)
Recorded operation: limited checks

Does what it says
1 of 1 claims checked out, 1 not tested (blocked)
  • 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

MCP
Documented only
Local or hosted
local
Local: runs on your machine
Maintained
Maintained
actively maintained: last commit 38 days ago; 26 commits and 11 merged PRs in 90 days; 18 open issues, 24 open PRs; 10 of 44 recent threads got a maintainer reply, median first reply 1237.6h; no releases

Last commit Sep 15, 2026

Issue
not tested
Examples
1 of 1 ran as expected, 1 not tested (blocked)
  • 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).

Evidence
some README behavior checked
Agent interfaces
CLI, MCP (documented only)
CLI, MCP (documented only)

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.300 (Claude Code) · not tested · Oct 24, 2026 on 31a1dd5c3e17

Each entry describes its recorded operation and source revision. Other agent clients were not tested.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety. 43 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

OSV reports a known vulnerability in this dependency version. 12 distinct locations. 43 findings.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Not tested

Operation / 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
Whose fault: prerequisite · diagnosed

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-.

Recorded blocker / warning

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.

Full safety evidence →

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]}"