ScaleStation RevOps Engine — Team Guide
A shared MCP server that gives Claude direct access to HubSpot. Use it to read, analyse, and safely modify any portal you have a seat in — without touching the HubSpot UI.
The engine now requires Google sign-in. Your existing connection will stop working; set it up again (see Setup) and sign in with your @scalestation.io account. One time, then roughly every 90 days.
Three other things are different: you can only select portals you hold a HubSpot seat in; portals are connected via a link from Claude rather than a public URL; and every change you make is recorded against your name.
What is it?
The ScaleStation RevOps Engine is a Model Context Protocol (MCP) server hosted on Railway. It acts as a bridge between Claude and HubSpot — giving Claude the ability to read portal configuration, search CRM records, run audits, and (with permission) make changes.
It's shared infrastructure. One server, multiple portals. Each team member authenticates their own HubSpot portal(s) via OAuth — the server stores those tokens securely and uses them on your behalf inside Claude conversations.
Think of it as giving Claude a "HubSpot tab" that stays open across your work.
You don't need to run anything locally. The server is already deployed. You just point Claude Code at it and authenticate your portal.
Prerequisites
-
1Your ScaleStation Google account
You sign in to the engine with your
@scalestation.ioGoogle account. Personal Gmail accounts are rejected. Make sure you can sign into that account in your browser. -
2Claude Code installed (Desktop app or CLI)
Download the Desktop app from
claude.ai/code— Mac and Windows. Or install the CLI withnpm install -g @anthropic-ai/claude-code. Either works; see Setup below. -
3A HubSpot seat in the portals you need
Access follows HubSpot: you can work with a portal if you're a user in it. See Who Can See Which Portals.
-
4The server URL (already live)
hubspot-engine-production.up.railway.app— nothing to install or run locally.
Setup — Add the MCP Server
Choose the method that matches how you use Claude. The end result is identical — pick whichever is easier for you.
One-time setup through the Settings UI. No Terminal, no commands — works identically on Mac and Windows.
-
1Open Settings → Connectors
In Claude Code Desktop, click your profile or the settings icon and navigate to Connectors.
-
2Click the + button to add a custom connector
You'll see an "Add custom connector" dialog with two fields.
-
3Fill in the two fields
Enter exactly as shown (the name can be anything you like):
Name: ScaleStation RevOps Engine Remote MCP server URL: https://hubspot-engine-production.up.railway.app/mcp -
4Click Add — then approve the browser auth prompt
Claude Code will open a browser window to authenticate with the MCP server. Click Allow. The connector then appears in your list.
-
5Set tool permissions to Allow all
Click the connector in your list. Under Tool permissions → Other tools, click the Custom dropdown and change it to Allow all. Without this, Claude will ask for permission before every single tool call.
-
6Verify — type
list portalsin any conversationIf you've already authenticated a portal, it will appear. If the list is empty, move on to the Connect section.
If you previously connected the server through the Claude web app, it's already in your connectors list — skip this step. You'll see "A server with this URL already exists" if you try to add it again.
The connector persists across sessions and app restarts on both Mac and Windows. You never need to do this again.
One command in Terminal. The server is then available in both Claude Code CLI and the Desktop app.
-
1Open Terminal
Open Terminal.app (or iTerm2, or any terminal emulator).
-
2Run the add command
claude mcp add --transport http revops-engine \ https://hubspot-engine-production.up.railway.app/mcp -
3Approve the browser auth prompt
Claude Code will open a browser window to authenticate with the MCP server. Click Allow to complete the connection.
-
4Verify — start Claude and type
list portalsIn a Claude conversation (CLI: run
claude, Desktop: open a new chat), asklist portals. If the list is empty, move to the Connect section.
The CLI command saves the server to ~/.claude/claude_mcp_settings.json. Claude Code Desktop reads the same config — so the server will also appear in your Desktop app connectors automatically. You may need to restart the Desktop app once.
In a Claude Code Desktop conversation, prefix any shell command with ! to run it in the current session. For example: ! claude mcp list shows all registered servers without leaving the chat.
One command in PowerShell or Command Prompt. The Claude Code CLI uses the same syntax on Windows.
-
1Open PowerShell or Command Prompt
Search for PowerShell or cmd in the Start menu. Either works.
-
2Run the add command
claude mcp add --transport http revops-engine https://hubspot-engine-production.up.railway.app/mcpThe command is the same as Mac — no changes needed for Windows.
-
3Approve the browser auth prompt
Claude Code will open a browser window to authenticate with the MCP server. Click Allow.
-
4Verify — start Claude and type
list portalsIn a Claude conversation, ask
list portals. If the list is empty, move to the Connect section.
The CLI saves the server config to %APPDATA%\Claude\claude_mcp_settings.json on Windows. Claude Code Desktop reads the same file — the server will appear in your Desktop app connectors automatically after a restart.
Run npm install -g @anthropic-ai/claude-code in PowerShell before running the claude mcp add command. Requires Node.js — download from nodejs.org if needed.
Connect a HubSpot Portal
Portals are connected from inside Claude. You ask for a link, then whoever has HubSpot admin rights on that portal opens it and approves — that might be you, or the client's own admin.
-
1Ask Claude for a connect link
Say:
connect a new portal with read write access(or read-only, if that's all that's needed). Claude runsconnect_portaland returns a link. -
2Open the link, or send it to whoever approves
The link is valid for 30 minutes. If the client's HubSpot admin is doing the approving, send it to them — they don't need a ScaleStation account or Claude access.
-
3Authorise in HubSpot — including the risk warning
HubSpot's standard OAuth screen appears. Log in and click Connect app. HubSpot may warn that the app is "unreviewed" or "not published in the marketplace" — that's expected for a private internal app.
-
4Back in Claude:
list portalsThe portal should now appear. Then
select portal [name]to start working with it.
You don't need to go through Kieran. The link is useless without HubSpot admin rights on the target portal, and creating one doesn't give you access to that portal — that still depends on holding a HubSpot seat there.
/connect URL no longer works
It used to be a public page anyone could open. It now only accepts a signed link from connect_portal. If you have the old URL bookmarked, delete it.
Portal tokens are stored on a persistent volume. Server updates don't disconnect portals — restart Claude Code and carry on.
Who Can See Which Portals
You can work with a portal if you hold a HubSpot seat in it. That's the whole rule. There's no separate permissions list to request or maintain.
Get added as a user in a client's HubSpot, and that portal becomes available to you immediately. Lose the seat, and access goes with it.
If you try to select a portal you don't have a seat in, you'll get a clear message naming your email and the portal — not a silent failure.
list portals shows every connected portal
It doesn't hide the ones you can't use — that would look like a portal had gone missing. It shows all of them; the check happens when you select one.
The check compares the account you signed in with against the HubSpot user list. If your HubSpot seat uses a different email from your @scalestation.io Google account, you'll be refused — tell Kieran, it's a quick fix.
Daily Use
Portal selection resets each conversation. Claude doesn't remember which portal you were using last time. This is the first thing to do in any new chat.
Read mode vs Write mode
When you select a portal you choose the access mode for that session:
To select a portal in read-only mode just say select portal [name]. To enable write mode, say select portal [name] in read write mode.
Example prompts to try first
- Give me an overview of this portal — properties, workflows, pipelines
- Search for all deals in the New Home Construction pipeline that are in the Proposal stage
- Which contact properties exist on this portal that are never populated?
- Run a full audit of this portal and flag any data quality issues
- List all active workflows and tell me what each one does
- Find all duplicate contacts by email address
Tool Categories
The server exposes 105 tools across these categories. You don't need to call them directly — just describe what you want and Claude will use the right tools.
Portal overview
Start here on any portal you don't knowA single call that summarises the whole portal — how many properties per object, how many workflows and which are active, pipeline structure, custom objects, forms and lists. Pair it with a config validation pass to surface naming inconsistencies and structural problems.
Try: Give me an overview of this portal, then validate the config and flag anything odd
get_portal_overviewsearch_configvalidate_configrefresh_cacheRecords & search
Find and read anything in the CRMSearch contacts, companies, deals, tickets and custom objects with filters, then read individual records, their associations and their full activity history. Reads are unlimited and safe — this is most of the day-to-day work.
Try: Find all deals in the New Home Construction pipeline in Proposal stage, with their associated companies
search_crmsearch_recordsget_recordbatch_read_recordsget_associationsget_record_associationssearch_engagementsget_contact_activityget_ownersProperties
Inspect, build and clean up the data modelSee every property with its type, group and options; check where a property is actually used across workflows, lists, forms and emails before touching it; view value history; and create, edit or archive properties and groups. Archiving refuses if something depends on the property — and names what.
Try: Which contact properties are never populated, and is anything using them?
get_propertiesget_propertysearch_propertiesget_field_usageget_property_historyget_property_groupscreate_propertyupdate_propertyarchive_propertycreate_property_groupupdate_property_grouparchive_property_groupWorkflows & automation
Understand what's running before you change itList every workflow, read its full trigger logic and actions, inspect custom code steps and custom events. You can create, update and archive workflows too — but read the existing ones first, because workflow updates are full replacements.
Try: List all active workflows and explain what each one triggers on
get_workflowsget_workflowcreate_workflowupdate_workflowarchive_workflowget_custom_code_actionsget_custom_eventsPipelines & forecasting
Deal and ticket structure, plus the numbersInspect pipelines, their stages and win probabilities, and pull forecast figures by category or owner. Useful for diagnosing why a forecast looks wrong — usually stage probabilities that were never tuned.
Try: Show me the deal pipeline stages with probabilities, then forecast by owner
get_pipelinescreate_pipelineget_deal_forecastLists, forms & marketing
Everything on the acquisition sideBrowse lists and sample their membership, read form definitions and submissions, and inspect marketing emails, campaigns, sequences and subscription types. Email content can be created, cloned and edited block by block where the portal has the content scope.
Try: Show me form submissions from the last 30 days and which list they landed in
get_listsget_list_members_samplecreate_listget_formsget_form_submissionscreate_formget_marketing_emailsget_marketing_emailemail_createemail_cloneemail_updateget_email_statisticsget_campaignsget_sequencesget_subscription_typesWebsite & CMS
Pages and modules, for portals with Content HubList site and landing pages, read and edit custom modules, validate module markup before publishing, and push content changes live. Module edits are validated for HubL balance and field-ID uniqueness first.
Try: List the CMS modules on this portal and validate the one used on the pricing page
cms_list_pagescms_list_modulescms_get_modulecms_create_modulecms_update_modulecms_validate_modulecreate_landing_pageupdate_page_contentpublish_pageImport, export & bulk edits
Moving data in and out at volumeStart CSV imports and watch their progress, pull error reports when rows fail, export data out, and update up to 100 records in a single call. Bulk updates preview by default — the first call shows you what would change and writes nothing.
Try: Import this CSV of contacts and tell me which rows failed and why
start_importget_import_statusget_import_errorslist_importscancel_importstart_exportget_export_statusupload_fileupdate_recordbatch_update_recordsAudit & data quality
What's wrong with this portal, and who changed whatRun a full portal audit, score data quality, and review the write audit log — which now records the person behind every change, the portal, and when. This is the first thing to run on a new client and the first thing to check when something looks off.
Try: Run a full audit of this portal and flag the data quality issues worth fixing first
run_auditget_data_quality_scoreget_write_audit_logget_breeze_ai_usageUsers, teams & portals
Access and portal managementSee who has a seat in a portal and on which teams, invite or remove users, and manage the portals connected to the engine itself. Portal access for you is derived from these HubSpot seats — see Who Can See Which Portals above.
Try: Who has super admin access in this portal?
get_usersget_teamsinvite_userupdate_userremove_usercreate_teamupdate_teamdelete_teamlist_portalsselect_portalconnect_portalrename_portalRevOps pipeline
Multi-step changes, with review and undoThe plan → approve → build → review → rollback flow described in Write Safety. Use it whenever you're building more than one or two things, because it's the only path that gives you a single-step undo.
Try: Plan a lead scoring setup with fit, engagement and total score properties
revops_planrevops_approverevops_buildrevops_reviewrevops_statusrevops_rollbackrevops_deleteFive tools are currently unavailable regardless of portal: get_workflow_enrollments, get_journey_list, find_duplicates, get_integrations, and get_traffic_analytics. These hit HubSpot endpoints that are either deprecated, require a special reports scope not available in OAuth, or return 404 on all portals. All other tools are fully functional.
Write Safety, Undo & the RevOps Pipeline
Write operations are logged with your email address. Ask Claude to show the write audit log to see what changed, in which portal, when — and by whom.
Undoing a mistake
Created a property with a typo, or in the wrong place? You can remove it without leaving Claude:
- Archive the property
lead_scoeron contacts
Archiving hides, it doesn't delete. HubSpot keeps archived properties and their data recoverable for 90 days.
If the property is used by a live workflow, list, form, email or sequence, the engine refuses and tells you what depends on it. That's deliberate — archiving a property an automation relies on breaks the automation. You can override with confirmation once you've checked.
Building several things at once? Use the pipeline
For multi-step work — a set of related properties, a new object, a pipeline with workflows — ask Claude to plan it rather than creating things one at a time. You get a plan to review before anything is written, and everything it created can be undone in one step:
- Plan a lead scoring setup: fit score, engagement score, total score, and a workflow that updates the total
Why it matters: properties created one at a time can only be archived one at a time. A plan can be rolled back as a unit — which is the difference between a five-second undo and half an hour of cleanup.
Troubleshooting
| Problem | Fix |
|---|---|
| "Sign in with your @scalestation.io account" | You picked a personal Google account at the sign-in screen. Sign out of that account, or use the account chooser to pick your ScaleStation one. |
| "[your email] is not a user in [portal]" | You don't hold a HubSpot seat in that portal. Access follows HubSpot — ask to be added as a user there. If your HubSpot login uses a different email from your Google account, that will also cause this: tell Kieran, since it's the most likely cause. |
| "Portal selection is ambiguous" | You have several chats open on different portals and your session was reset. Just run select portal [name] to confirm which one this conversation is for. This is a safety feature — it prevents the server guessing wrong. |
| "Session expired. Please sign in with Google again." | Sessions last 90 days. Re-run the sign-in (Desktop: reconnect the connector; Terminal: claude mcp login hubspot-engine in a real terminal window). |
| Sign-in can't be completed in the terminal | If you see "stdin isn't a terminal", you're running the login inside a Claude session. It needs a real Terminal window — open Terminal.app or iTerm and run it there. |
| MCP server doesn't appear after setup | Go to Settings → Connectors and confirm the server is listed. If not, add it again (Desktop) or re-run claude mcp add (Terminal). Restart Claude Code after adding. |
| Claude asks for permission before every tool call | Settings → Connectors → your HubSpot connector → Tool permissions → Other tools → change Custom to Allow all. |
list portals returns an empty list |
Check the response for signed_in_as. If it's missing you aren't signed in — reconnect. If it's there but the list is empty, no portals are connected yet: run connect_portal. |
Opening /connect in a browser shows "This link is not valid" |
Correct — that page is no longer public. Ask Claude to run connect_portal and use the link it gives you. Links expire after 30 minutes. |
| HubSpot shows an "unreviewed app" warning during OAuth | Expected. The RevOps Engine is a private internal app, not a marketplace listing. Click Connect app. Contact Kieran if unsure. |
| Write tools aren't showing up | Select the portal in write mode: select portal [name] in read write mode. The portal must also have been connected with write access. |
| Connection drops mid-conversation | The server may have redeployed. Restart Claude Code and re-run select portal. Connected portals survive redeploys; your sign-in usually does too. |
| Wrong portal is active | Run list portals, then select portal [correct name]. Every response carries a _portal block showing which portal answered — check it if in doubt. |
| A specific tool returns an error or "not found" | Five tools have known HubSpot API limitations and always fail: get_workflow_enrollments, get_journey_list, find_duplicates, get_integrations, get_traffic_analytics. Contact Kieran if something else errors. |
Ping Kieran on Slack or email kieran@scalestation.io. Include a screenshot of any error message — the new errors name the exact email and portal being checked, which usually identifies the problem immediately.