Query HubSpot and Stripe from Cursor with Combined MCP
Add business data to Cursor with a ready-to-edit MCP configuration. Discover your HubSpot and Stripe datasets, ask a cross-source question and inspect the SQL.
Use Combined to bring synced HubSpot, Stripe and other business datasets into Cursor. Connect the sources once, grant the data needed by the task, and add Combined's remote MCP server. Cursor can then discover schemas and run read-only SQL with freshness and query evidence. Start with the downloadable configuration below, then verify one small query before asking for a revenue analysis.
1. Prepare the data Cursor will query
This walkthrough uses Cursor as the agent client and Combined as the business-data layer. You need a Combined account, authorized sources with a successful initial sync, and an agent or human identity permitted to query the selected datasets. Adding an MCP URL does not perform the source sync.
- Connect the HubSpot and Stripe accounts you want to analyze in Combined.
- Select the required datasets and fields, sync them and check the available rows in Explore.
- Use Access to grant the identity Cursor will use: your signed-in human identity for OAuth, or the agent attached to the provisioned credential. Obtain the account-specific connection details there.
For a first query, one source and one small result are enough. Add the second source when discovery and access work. For a joint calculation, keep your customer-ID mapping available as described in the HubSpot–Stripe tutorial.
2. Add the remote server to Cursor
Put the following entry in your project's .cursor/mcp.json, or use ~/.cursor/mcp.json for your personal global configuration. Merge it with existing server entries. Replace ACCOUNT_UUID with the account ID from Combined.
{
"mcpServers": {
"combined-context": {
"url": "https://platform.trycombined.com/mcp?account_id=ACCOUNT_UUID"
}
}
}Download the Cursor OAuth configuration
Cursor supports remote Streamable HTTP and OAuth. Enable the server in Cursor's MCP settings and complete the sign-in flow. Combined supplies the authorization discovery metadata; use the account-specific MCP URL instead of the marketing homepage. The account ID is not a password or token.
For an environment using a provisioned agent credential, the alternative configuration below reads values from environment variables available to Cursor. The remote-server configuration does not use Cursor's envFile option.
{
"mcpServers": {
"combined-context": {
"url": "https://platform.trycombined.com/mcp?account_id=${env:COMBINED_ACCOUNT_ID}",
"headers": {
"Authorization": "Bearer ${env:COMBINED_TOKEN}"
}
}
}
}Download the environment-token configuration
Use one authentication route for this server. Store the credential through your normal runtime secret setup. Never replace the placeholder with a token committed to the project. If Cursor was launched before the environment was configured, restart it from the intended environment before reconnecting.
3. Discover the schema and verify five rows
Open an agent conversation and give it a bounded first task:
Use combined-context. List my permitted sources, then let me choose one.
List that source's datasets and describe the dataset I choose.
Use the discovered logical relation and fields for a read-only query.
Return at most 5 rows and only the columns needed for the check.
Include the query receipt, source freshness and any truncation.
Do not guess a table name or request broader access.The Combined tools are list_sources, list_datasets, describe_dataset, query_sql, get_freshness and search_context. For this check, discovery comes before SQL. Follow returned discovery cursors when there are more pages of results.
Compare the small result with the corresponding permitted records in Combined. Check that the selected account and fields match the task. A successful tool call with a receipt is useful evidence; merely seeing the server name in settings does not verify data access.
4. Ask a question across CRM and billing
Using my permitted HubSpot and Stripe data in Combined, compare
current open pipeline with paid invoices for the UTC period I give you.
Group by mapped company and currency.
Discover fields, inspect my customer mapping and report its gaps.
Aggregate each source to company and currency before joining.
Keep unmatched records and unknown coverage visible.
Return the SQL, query receipt, reporting period and source freshness.
Do not estimate a total from a truncated sample.The recurring challenge is calculation grain. A company can have several deals and several invoices, so joining raw rows can inflate both totals. The interactive join exercise lets you change that pattern and inspect the corrected approach. The downloadable SQL fixture runs without a Combined account and includes its expected sample rows.
Adapt the fixture using your discovered relations, maintained mapping and reporting policy. Its invoice amount paid is not automatically net revenue, MRR or ARR. Keep the question and the metric definition together when reusing the prompt.
5. Diagnose the stage that failed
| What you see | What to check next |
|---|---|
| The server never appears | JSON syntax, configuration location and whether the server is enabled |
| Sign-in does not finish | Exact endpoint, OAuth discovery and the credential's current status |
| Connected, but no source is visible | Account ID, active identity and source grants in Combined |
| A query reports a missing field | Refresh discovery and use the returned logical names |
| The answer omits recent records | Source selection, successful sync time and result coverage |
Use the authentication decision tree for the detailed recovery path. Once connected, the answer-verification lab covers incorrect totals, stale evidence and missing scope using public sample records.
Sources and further reading
Explore the documentation behind this guide. Product details checked on September 14, 2026.