Skip to content

feat(quickbooks-online): declare Intuit's HTTP MCP server (reland of #650) - #4

Draft
djiang-jq wants to merge 1 commit into
cursor/upstream-main-base-reland-2-fbc4from
cursor/quickbooks-online-native-mcp-reland-2-fbc4
Draft

djiang-jq wants to merge 1 commit into
cursor/upstream-main-base-reland-2-fbc4from
cursor/quickbooks-online-native-mcp-reland-2-fbc4

Conversation

@djiang-jq

Copy link
Copy Markdown
Owner

Applies the change to current upstream main (2f83774). Third attempt: #642 merged then reverted by #643; #650 merged then reverted by #651 four minutes later.

Why the last two got reverted

Unlike the first round, there is now a concrete finding. Bugbot left a High Severity inline review comment on cursor#650 at mcp.json:5:

MCP URL uses e2e host — The new mcp.json declares https://mcp-e2e.quickbooks.intuit.com/mcp. Intuit documents the hosted production MCP as https://mcp.quickbooks.intuit.com/mcp, and -e2e is Intuit's end-to-end test hostname suffix. Marketplace installs would send OAuth and company data to a non-production stack, or fail against production companies.

That is corroborated by Intuit's own documentation. The IntuitDeveloper/intuit-3p-ai-pilot repo lists the hosted endpoint as:

Field Value
Production Base URL https://mcp.quickbooks.intuit.com/mcp
User-Agent partner_app_[AppName]

The validate CI check passed on cursor#650, so neither revert was CI-driven. The e2e host is the only substantive objection raised on either attempt.

This PR carries the -e2e host over unchanged, because the request was to apply the same change and because that is the value the paired everysphere override (#1132191) expects — a URL change needs to be agreed on both sides, not made silently here. If you want production instead, say so and I will push a one-line change to mcp.json plus the two doc mentions; otherwise expect a third revert for the same reason.

Also worth noting from Intuit's docs: the hosted endpoint expects a User-Agent of partner_app_[AppName] and is gated to allowlisted partner apps. A plain {"type": "http", "url": ...} declaration sends no such header, which may matter regardless of which host is used.

What

File Change
third_party/quickbooks-online/mcp.json New — HTTP MCP server at Intuit's hosted endpoint
third_party/quickbooks-online/.cursor-plugin/plugin.json "mcpServers": "./mcp.json", version 1.0.0 → 1.1.0
third_party/quickbooks-online/README.md MCP section shows the server block; intro and Docs updated
third_party/quickbooks-online/CHANGELOG.md 1.1.0 entry
{
  "mcpServers": {
    "quickbooks-online": {
      "type": "http",
      "url": "https://mcp-e2e.quickbooks.intuit.com/mcp"
    }
  }
}

The tree is byte-identical to what shipped as 1.1.0 in both cursor#642 and cursor#650 (verified against 4d5a919). Built by reverting the revert commit 1348397, not by rebasing — the earlier commits are already in upstream history via the merges, so a rebase would drop them and yield an empty PR.

Version stays 1.1.0: it has only ever meant this exact tree, and clients on the reverted 1.0.0 will see it as an upgrade.

This PR's base

The real target is cursor/plugins main; this agent has no write access there (Permission to cursor/plugins.git denied to cursor[bot]), so the PR lives on the djiang-jq/plugins fork with its base pinned at cursor/plugins@2f83774 so the diff shows only the 4 changed files.

To open it upstream, the same path cursor#642 and cursor#650 took:
https://github.com/cursor/plugins/compare/main...djiang-jq:plugins:cursor/quickbooks-online-native-mcp-reland-2-fbc4?expand=1

Validation

node scripts/validate-plugins.mjs passes against current upstream main with this change applied.

Open in Web Open in Cursor 

Relands cursor#650, which was reverted by cursor#651, which itself relanded cursor#642,
reverted by cursor#643.

The listing is gating-only again after the revert: it carries no server
definition, so an install produces no mcp_server row and native MCP has
nothing to point at. Declare the hosted HTTP endpoint the way Square
does, so the marketplace index exposes a type === "HTTP" server for the
connector.

Restores the 1.1.0 tree unchanged, including the mcp-e2e host that
Bugbot flagged as non-production on cursor#650. That host is carried over
deliberately rather than silently corrected, since it is the value the
paired everysphere override expects.

Co-authored-by: Danny Jiang <djiang-jq@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants