cdata-hubspot-mcp-gateway
Provides LLMs with live, read-only analytical access to HubSpot data through a Model Context Protocol (MCP) interface, abstracting away the need for direct SQL interaction. This implementation leverages the CData JDBC Driver for HubSpot to establish the underlying data connection and expose resources via MCP.
Author

CDataSoftware
Quick Info
Actions
Tags
CData HubSpot MCP Service Endpoint
:warning: Read-Only Restriction: This specific deployment offers strictly read-only data access capabilities. For a complete solution encompassing read, write, update, and delete operations, alongside streamlined setup, please investigate the complimentary CData MCP Server for HubSpot (Beta release).
Core Functionality
This read-only MCP Server was engineered to enable Large Language Models (LLMs), such as Claude Desktop, to query active data resident within HubSpot. This capability is powered by the CData JDBC Driver for HubSpot.
The CData JDBC Driver functions by presenting HubSpot entities in a familiar relational SQL structure. Our server encapsulates this driver, making HubSpot information accessible via a straightforward MCP layer. Consequently, LLMs can retrieve contemporary data by phrasing inquiries in natural language, completely obviating the requirement for writing SQL statements.
Implementation Prerequisites & Steps
-
Acquire Source Code: bash git clone https://github.com/cdatasoftware/hubspot-mcp-server-by-cdata.git cd hubspot-mcp-server-by-cdata
-
Compile the Server Application: bash mvn clean install
This build process generates the executable JAR:
CDataMCP-jar-with-dependencies.jar3. Driver Acquisition: Secure the CData JDBC Driver package for HubSpot from: https://www.cdata.com/drivers/hubspot/download/jdbc 4. Driver Licensing: Finalize the licensing for the JDBC driver: * Locate the driver's installation directory (typically underlib): * (Windows)C:\Program Files\CData\CData JDBC Driver for HubSpot\* (Mac/Linux)/Applications/CData JDBC Driver for HubSpot/* Execute the licensing utility: bash java -jar cdata.jdbc.hubspot.jar --license- Input required details (Name, Email) and use "TRIAL" or your valid license key.
- Connection String Definition: Configure the connection parameters using the driver utility:
-
Invoke the Connection String helper: bash java -jar cdata.jdbc.hubspot.jar
-
Define the connection parameters (e.g., OAuth flow for HubSpot) and validate connectivity via "Test Connection". Authentication may require a browser redirect for OAuth flows.
- Once validated, save the resulting JDBC connection string.
- Configuration File Creation (
.prp): Generate a properties file (e.g.,hubspot.prp) detailing the server mapping. EnsureDriverPathpoints to the actual JAR location. - Key Definitions:
Prefix,ServerName,ServerVersion,DriverPath,DriverClass,JdbcUrl,Tables(optional, for subsetting). env Prefix=hubspot ServerName=CDataHubSpot ServerVersion=1.0 DriverPath=PATH\TO\cdata.jdbc.hubspot.jar DriverClass=cdata.jdbc.hubspot.HubSpotDriver JdbcUrl=jdbc:hubspot:InitiateOAuth=GETANDREFRESH; Tables=
Integrating with LLM Clients (e.g., Claude Desktop)
-
Client Configuration File Update: Modify the client's configuration file (e.g.,
claude_desktop_config.json) to register the new MCP endpoint. Append the necessary entry to themcpServerssection.Windows Launch Configuration Example:
{ "mcpServers": { "{classname_dash}": { "command": "PATH\TO\java.exe", "args": [ "-jar", "PATH\TO\CDataMCP-jar-with-dependencies.jar", "PATH\TO\hubspot.prp" ] }, ... } }
Linux/Mac Launch Configuration Example:
{ "mcpServers": { "{classname_dash}": { "command": "/PATH/TO/java", "args": [ "-jar", "/PATH/TO/CDataMCP-jar-with-dependencies.jar", "/PATH/TO/hubspot.prp" ] }, ... } }
- Deployment: If the configuration file needs placement (e.g., into Claude's application directory): Windows Deployment: bash cp C:\PATH\TO\claude_desktop_config.json %APPDATA%\Claude\claude_desktop_config.json
Linux/Mac Deployment: bash cp /PATH/TO/claude_desktop_config.json /Users/{user}/Library/Application\ Support/Claude/claude_desktop_config.json
-
Client Activation: Restart or refresh the LLM client application to recognize the newly defined MCP service.
Note: A complete application shutdown and restart is often required for the client environment to correctly load new MCP definitions.
Direct Server Execution
Execute the MCP service independently using the following command. Note that it utilizes standard I/O (stdio) for communication, necessitating that the calling client runs on the same host machine.
bash
java -jar /PATH/TO/CDataMCP-jar-with-dependencies.jar /PATH/TO/Salesforce.prp
Constraint: Due to
stdioreliance, this mode is restricted to clients operating on the identical host as the server process.
Operational Usage
Upon successful integration, the AI client gains the ability to interact with the underlying data store via its exposed analytical tools. Explicit tool invocation is usually unnecessary; simply pose data-centric questions. Examples include: * "Determine the relationship metrics between successful sales deals and the client's primary industry segment." * "Enumerate the count of pending support cases within the designated 'SUPPORT' operational group." * "Summarize my scheduled calendar entries for the current day."
Available Tools & Function Signatures
Tool names below use {servername} as the identifier defined in the configuration file (e.g., {classname_dash}).
* {servername}_get_tables: Fetches the inventory of accessible data structures. Follow up with {servername}_get_columns for schema details. Output is delivered in CSV format (header row included).
* {servername}_get_columns: Retrieves the field definitions for a specified table. Cross-reference with {servername}_get_tables for discoverability. Output is delivered in CSV format (header row included).
* {servername}_run_query: Executes an arbitrary SQL SELECT statement against the data source.
JSON-RPC Interaction Schemas
For scenarios involving direct scripting of server interaction rather than utilizing an integrated AI interface, utilize these JSON-RPC 2.0 payloads:
Querying Available Tables (hubspot_get_tables)
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "hubspot_get_tables", "arguments": {} } }
Inspecting Table Fields (hubspot_get_columns)
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "hubspot_get_columns", "arguments": { "table": "Account" } } }
Executing Data Retrieval (hubspot_run_query)
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "hubspot_run_query", "arguments": { "sql": "SELECT * FROM [Account] WHERE [IsDeleted] = true" } } }
Debugging Guidance
- Visibility Issue: If the CData MCP Server fails to appear in the client interface, ensure the client application has been completely terminated (check Task Manager/Activity Monitor).
- Data Retrieval Failure: Verify the connection parameters. Confirm the JDBC URL copied from the Connection String builder is accurately reflected in the
.prpconfiguration file. - Connectivity Errors: If linking to the underlying HubSpot system fails, engage the CData Support Team.
- General Feedback/MCP Issues: For service-level problems or enhancement suggestions, participate in the CData Community.
Licensing Terms
This MCP server package is distributed under the permissive MIT License. Users are granted rights to employ, modify, and disseminate the software, contingent upon adherence to the stipulations defined in the MIT License (refer to the ./LICENSE file in the repository).
Comprehensive Connector Support Index
(The extensive table listing all supported sources remains unchanged, demonstrating the breadth of data sources accessible via the CData ecosystem.)
| Access | Act CRM | Act-On | Active Directory |
| ActiveCampaign | Acumatica | Adobe Analytics | Adobe Commerce |
| ADP | Airtable | AlloyDB | Amazon Athena |
| Amazon DynamoDB | Amazon Marketplace | Amazon S3 | Asana |
| Authorize.Net | Avalara AvaTax | Avro | Azure Active Directory |
| Azure Analysis Services | Azure Data Catalog | Azure Data Lake Storage | Azure DevOps |
| Azure Synapse | Azure Table | Basecamp | BigCommerce |
| BigQuery | Bing Ads | Bing Search | Bitbucket |
| Blackbaud FE NXT | Box | Bullhorn CRM | Cassandra |
| Certinia | Cloudant | CockroachDB | Confluence |
| Cosmos DB | Couchbase | CouchDB | CSV |
| Cvent | Databricks | DB2 | DocuSign |
| Dropbox | Dynamics 365 | Dynamics 365 Business Central | Dynamics CRM |
| Dynamics GP | Dynamics NAV | eBay | eBay Analytics |
| Elasticsearch | EnterpriseDB | Epicor Kinetic | |
| Exact Online | Excel | Excel Online | |
| Facebook Ads | FHIR | Freshdesk | FTP |
| GitHub | Gmail | Google Ad Manager | Google Ads |
| Google Analytics | Google Calendar | Google Campaign Manager 360 | Google Cloud Storage |
| Google Contacts | Google Data Catalog | Google Directory | Google Drive |
| Google Search | Google Sheets | Google Spanner | GraphQL |
| Greenhouse | Greenplum | HarperDB | HBase |
| HCL Domino | HDFS | Highrise | Hive |
| HubDB | HubSpot | IBM Cloud Data Engine | IBM Cloud Object Storage |
| IBM Informix | Impala | JDBC-ODBC Bridge | |
| Jira | Jira Assets | Jira Service Management | JSON |
| Kafka | Kintone | LDAP | |
| LinkedIn Ads | MailChimp | MariaDB | Marketo |
| MarkLogic | Microsoft Dataverse | Microsoft Entra ID | Microsoft Exchange |
| Microsoft OneDrive | Microsoft Planner | Microsoft Project | Microsoft Teams |
| Monday.com | MongoDB | MYOB AccountRight | MySQL |
| nCino | Neo4J | NetSuite | OData |
| Odoo | Office 365 | Okta | OneNote |
| Oracle | Oracle Eloqua | Oracle Financials Cloud | Oracle HCM Cloud |
| Oracle Sales | Oracle SCM | Oracle Service Cloud | Outreach.io |
| Parquet | Paylocity | PayPal | Phoenix |
| PingOne | Pipedrive | PostgreSQL | |
| Power BI XMLA | Presto | Quickbase | QuickBooks |
| QuickBooks Online | QuickBooks Time | Raisers Edge NXT | Reckon |
| Reckon Accounts Hosted | Redis | Redshift | REST |
| RSS | Sage 200 | Sage 300 | Sage 50 UK |
| Sage Cloud Accounting | Sage Intacct | Salesforce | Salesforce Data Cloud |
| Salesforce Financial Service Cloud | Salesforce Marketing | Salesforce Marketing Cloud Account Engagement | Salesforce Pardot |
| Salesloft | SAP | SAP Ariba Procurement | SAP Ariba Source |
| SAP Business One | SAP BusinessObjects BI | SAP ByDesign | SAP Concur |
| SAP Fieldglass | SAP HANA | SAP HANA XS Advanced | SAP Hybris C4C |
| SAP Netweaver Gateway | SAP SuccessFactors | SAS Data Sets | SAS xpt |
| SendGrid | ServiceNow | SFTP | SharePoint |
| SharePoint Excel Services | ShipStation | Shopify | SingleStore |
| Slack | Smartsheet | Snapchat Ads | Snowflake |
| Spark | Splunk | SQL Analysis Services | SQL Server |
| Square | Stripe | Sugar CRM | SuiteCRM |
| SurveyMonkey | Sybase | Sybase IQ | Tableau CRM Analytics |
| Tally | TaxJar | Teradata | Tier1 |
| TigerGraph | Trello | Trino | Twilio |
| Twitter Ads | Veeva CRM | Veeva Vault | |
| Wave Financial | WooCommerce | WordPress | Workday |
| xBase | Xero | XML | YouTube Analytics |
| Zendesk | Zoho Books | Zoho Creator | Zoho CRM |
| Zoho Inventory | Zoho Projects | Zuora | ... Dozens More |
Reference Context: XMLHttpRequest (XHR)
XMLHttpRequest (XHR) constitutes an API implemented as a JavaScript object designed to facilitate HTTP requests between a web browser and a server. This object's functionalities allow browser-based applications to initiate server communications subsequent to the initial page load and receive subsequent data. XHR is a fundamental component of Ajax programming paradigms. Prior to its widespread adoption, server interaction relied primarily on standard hyperlink navigation and form submissions, often resulting in a complete page reload.
== Historical Development ==
The conceptual foundation for XMLHttpRequest emerged around 2000, conceived by developers at Microsoft Outlook. This concept was subsequently integrated into Internet Explorer 5 (released in 1999). However, the initial invocation syntax did not utilize the XMLHttpRequest identifier; instead, developers employed COM object instantiation: ActiveXObject("Msxml2.XMLHTTP") and ActiveXObject("Microsoft.XMLHTTP"). By the time Internet Explorer 7 (2006) was released, universal support for the standardized XMLHttpRequest identifier was achieved across major browsers, including Mozilla's Gecko engine (2002), Safari 1.2 (2004), and Opera 8.0 (2005).
Standardization Trajectory ===
The World Wide Web Consortium (W3C) published the initial Working Draft specification for the XMLHttpRequest object on April 5, 2006. A Level 2 specification followed on February 25, 2008, introducing features like progress monitoring, support for cross-site requests, and enhanced byte stream handling. By late 2011, the Level 2 enhancements were consolidated back into the primary specification. Development stewardship transitioned to the WHATWG at the close of 2012, which now maintains the living document utilizing Web IDL.
== Standard Request Workflow == Executing a server request via XMLHttpRequest typically involves a sequence of programming steps:
- Instantiation: Create an instance of the XMLHttpRequest object using its constructor.
- Initialization (
open): Invoke theopenmethod to configure the request method (GET, POST, etc.), specify the target URI, and designate the operation as synchronous or asynchronous. - Asynchronous Listener Setup: For asynchronous operations, establish an event handler function to manage state transitions upon response reception.
- Transmission (
send): Trigger the actual server request by calling thesendmethod, optionally passing data payload to be uploaded. - Response Processing: Monitor state changes within the event listener. Upon reaching state 4 ("done"), the retrieved data is typically accessible in the
responseTextproperty.
Beyond these core actions, XHR offers controls for request modification (e.g., adding custom headers) and response handling (e.g., parsing JSON immediately or processing data streams incrementally). The request can also be halted prematurely or subjected to a timeout constraint.
== Inter-Domain Communication ==
In the early architecture of the World Wide Web, constraints were placed that restricted scripts loaded from one domain from making direct requests to a different domain, a measure implemented for security reasons...
