HubSpot runs on your own machine — the client starts it, so there is no endpoint to ping. 128 installs a week from npm. Last commit 2 Nov 2026.
HubSpot CRM: contacts, deals, tickets, line items, properties, marketing, files, workflows, threads
We read the source, 22 h ago · rules 995398eba69f
A value the model can set ends up inside a file or shell call. That is not a flaw by itself — for a terminal server it is the job — but it is where things go wrong when it is not.
fs.writeFileSync(outFd, pdfBuffer);
What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.
const fullPath = path.join(stagingDir, filename);
const child = spawn(process.execPath, [script], {
if (isUnder(resolvedAbs, sshDir)) return { hit: true, reason: '~/.ssh/** is sensitive' };
<script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js"></script>
const entries = fs.readdirSync(workspacePath, { withFileTypes: true });
Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.
That is not a flaw by itself — but it is where things go wrong when it is not the job. We re-read this code on every release. Watch it and you hear from us the day another one appears.
This server runs on your own machine — install it with the package manager and the client starts it for you. Package name taken from the official registry entry.
claude mcp add mcp-server-hubspot -e 'HUBSPOT_CONFIG_DIR=<HUBSPOT_CONFIG_DIR>' -e 'HUBSPOT_ACCOUNT_EMAIL=<HUBSPOT_ACCOUNT_EMAIL>' -e 'HUBSPOT_CLIENT_ID=<HUBSPOT_CLIENT_ID>' -e 'HUBSPOT_CLIENT_SECRET=<HUBSPOT_CLIENT_SECRET>' -- npx -y @mindstone/mcp-server-hubspot
{
"mcpServers": {
"mcp-server-hubspot": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-hubspot"
],
"env": {
"HUBSPOT_ACCOUNT_EMAIL": "<HUBSPOT_ACCOUNT_EMAIL>",
"HUBSPOT_CLIENT_ID": "<HUBSPOT_CLIENT_ID>",
"HUBSPOT_CLIENT_SECRET": "<HUBSPOT_CLIENT_SECRET>",
"HUBSPOT_CONFIG_DIR": "<HUBSPOT_CONFIG_DIR>"
}
}
}
}
[mcp_servers.mcp-server-hubspot]
command = "npx"
args = ["-y", "@mindstone/mcp-server-hubspot"]
env = { HUBSPOT_CONFIG_DIR = "<HUBSPOT_CONFIG_DIR>", HUBSPOT_ACCOUNT_EMAIL = "<HUBSPOT_ACCOUNT_EMAIL>", HUBSPOT_CLIENT_ID = "<HUBSPOT_CLIENT_ID>", HUBSPOT_CLIENT_SECRET = "<HUBSPOT_CLIENT_SECRET>" }
{
"mcpServers": {
"mcp-server-hubspot": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-hubspot"
],
"env": {
"HUBSPOT_ACCOUNT_EMAIL": "<HUBSPOT_ACCOUNT_EMAIL>",
"HUBSPOT_CLIENT_ID": "<HUBSPOT_CLIENT_ID>",
"HUBSPOT_CLIENT_SECRET": "<HUBSPOT_CLIENT_SECRET>",
"HUBSPOT_CONFIG_DIR": "<HUBSPOT_CONFIG_DIR>"
}
}
}
}
{
"servers": {
"mcp-server-hubspot": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-hubspot"
],
"env": {
"HUBSPOT_ACCOUNT_EMAIL": "<HUBSPOT_ACCOUNT_EMAIL>",
"HUBSPOT_CLIENT_ID": "<HUBSPOT_CLIENT_ID>",
"HUBSPOT_CLIENT_SECRET": "<HUBSPOT_CLIENT_SECRET>",
"HUBSPOT_CONFIG_DIR": "<HUBSPOT_CONFIG_DIR>"
}
}
}
}
Put your own values in place of
<HUBSPOT_CONFIG_DIR> (Directory containing accounts.json and credentials/*.token.json), <HUBSPOT_ACCOUNT_EMAIL> (Account selector — one MCP process per HubSpot account), <HUBSPOT_CLIENT_ID> (HubSpot OAuth client ID), <HUBSPOT_CLIENT_SECRET> (HubSpot OAuth client secret).
The author’s registry entry marks them as required.
Optional settings from the registry entry, left out of the block above:
MCP_WORKSPACE_PATH (Workspace root for local file tools (required only when invoking upload/attach tools)), HUBSPOT_SOURCE_LABEL (Source attribution label applied to new records), HUBSPOT_DISABLE_REFRESH (Set to 1 to disable token refresh on this surface (use on cloud so desktop remains the sole refresh authority)), HUBSPOT_ALLOW_CLOUD_REFRESH (Set to 1 to allow refresh on the cloud surface even when HUBSPOT_DISABLE_REFRESH=1 (escape hatch)), HUBSPOT_REQUEST_TIMEOUT_MS (Outbound HTTP request timeout in milliseconds (max 300000 = 5 min)), HUBSPOT_REFRESH_LOCK_STALE_MS (Stale-lock detection threshold for the credential refresh mutex (advanced)).
56+ AI tools for CRM, content, workflows, SkillForge & marketing automation.
AI-powered Attio CRM access. Manage contacts, companies, deals, tasks, notes and workflows.
Search CRM contacts, deals, tasks, appointments, calls and workflows with workspace-scoped OAuth.
Manage tasks, projects, roadmaps, files, meetings, and team workflows with AI tools.
Connected tables, relations, workflows and markdown documents in one SQLite file, over MCP.
246 tools to run sales, marketing & hiring: CRM, leads, AI calling, content, recruiting & SEO.
Track issues, manage projects, and streamline workflows in Jira.
Create, search, and manage issues, projects, and team workflows
Answers built from our own checks of this server.