The system of record, with the breadth to cover data operations rather than only reading a contact.
Sales desk
Researches the account, writes the sequence, keeps the CRM current, and books the meeting without four tabs.
Built for: The account executive whose pipeline is accurate only on the days they spend an hour updating it by hand.
The button opens the checkout, where the 8 servers and 4 skills are listed one by one. Every member is free, so the checkout lists them and asks for no card.
What your agent can do with this
The reason to buy a stack rather than five listings: each line below needs more than one member connected at the same time.
- 01
Read and update accounts, contacts and opportunities in Salesforce, and note what was said instead of remembering it.
- 02
Research a company before the call through search and Perplexity, and keep the finding on the record.
- 03
Draft the outreach sequence with the follow-up cadence and the compliance footer already in it.
- 04
Find the free slot and put the meeting in the calendar the invitation will come from.
The assembly, part by part
What each part contributes, and why it was picked over the obvious alternative. Prices and permissions are read from the listings, so nothing here can disagree with the catalogue.
The marketing side of the same account — forms, lifecycle, the app your team already builds against.
Scope-gated mail access with path jails on attachments, which is the version of an inbox connector worth giving a sales tool.
Finding the slot and putting the meeting in it, from the same conversation that agreed to it.
Where the account notes, the call summary and the internal answer to 'what happened last time' live.
Google web, news and places search for the pre-call research that decides how the first two minutes go.
The structured list the team actually works from — territories, target accounts, sequences — when the CRM view is too heavy.
The quick answer with sources about a company or a market, for the question that arrives ten minutes before the call.
Writes the outreach sequence with cadence, personalisation and deliverability treated as part of the copy rather than as an afterthought.
Geocoding, place search and routing for field sales: which accounts are near each other, and what a day of visits actually looks like.
The invoice or payment request at the end of a small deal, generated as a PDF from the record rather than typed into a template.
Drives a browser for the research a search API cannot reach — a portal, a pricing page behind a form, a directory with no API.
What it costs, and on what assumption
Every member is free, so the monthly figure is $0 whatever you do with the stack: nothing here is billed by the call, and only adding a paid member could change it.
| Part | What you are paying for | Monthly, as quoted |
|---|---|---|
| Salesforce | Free | — |
| Hubspot | Free | — |
| Gmail | Free | — |
| Google Calendar | Free | — |
| Notion | Free | — |
| Serper Search | Free | — |
| Airtable | Free | — |
| Perplexity Ai | Free | — |
| Skills | ||
| cold-email | Free · context cost only | — |
| Google Maps (gmaps) | Free · context cost only | — |
| Invoice Generator | Free · context cost only | — |
| agent-browser core | Free · context cost only | — |
| Everything above | $0 of servers plus $0 of skills, the same in a quiet month and a busy one | $0/mo |
Subscriptions at their monthly plan price; one-off licences spread over 12 months.
Install only these and the bill is nothing: 8 servers and 4 skills, and all 49 tools.
Nothing in this stack carries a call allowance, so nothing here can run out before the month does. The bill is decided when you install it, not when you use it.
The spend cap is one figure for the whole account, set in your dashboard and checked when an order is placed. On the call path what stops a retry loop is the plan's call allowance and its rate limit, and a refused call is never billed.
Setting it up, in order
The steps below come before the install lines: what to decide and scope before connecting anything, in the order it matters. The lines themselves follow, part by part, for the client you pick.
npx mcprush@latest stack add sales-desk writes all 8 servers into Claude Code’s config in one go — or run the lines below one by one. The 4 skills are not included — add them with lines 09–12.
- Hubspot
PRIVATE_APP_ACCESS_TOKEN— HubSpot private app access token- Google Calendar
GOOGLE_OAUTH_CREDENTIALS— Path to your OAuth client file gcp-oauth.keys.json (Google Cloud → Credentials → OAuth client, Desktop app)- Notion
NOTION_API_TOKEN— Notion integration token (notion.so/my-integrations)- Serper Search
SERPER_API_KEY— Your Serper API key (serper.dev)- Airtable
AIRTABLE_ACCESS_TOKEN— Your Airtable personal access token (airtable.com/create/tokens)- Perplexity Ai
PERPLEXITY_API_KEY— Your Perplexity API key
Set them where you start Claude Code — export PRIVATE_APP_ACCESS_TOKEN=… in your shell profile on macOS and Linux, setx PRIVATE_APP_ACCESS_TOKEN "…" on Windows, then open a new terminal. Claude Code reads them at start; the config keeps only the names.
Gmail needs one step before it answers — run this once, on its own:
npx -y @klodr/gmail-mcp auth# 01 · Salesforce
claude mcp add --scope user salesforce-mcp '--' npx -y @kirtijha/salesforce-mcp-server
# 02 · Hubspot
claude mcp add --scope user --env 'PRIVATE_APP_ACCESS_TOKEN=${PRIVATE_APP_ACCESS_TOKEN}' --transport stdio hubspot-mcp '--' npx -y @hubspot/mcp-server
# 03 · Gmail
claude mcp add --scope user gmail-mcp '--' npx -y @klodr/gmail-mcp
# 04 · Google Calendar
claude mcp add --scope user --env 'GOOGLE_OAUTH_CREDENTIALS=${GOOGLE_OAUTH_CREDENTIALS}' --transport stdio google-calendar-mcp '--' npx -y @cocal/google-calendar-mcp
# 05 · Notion
claude mcp add --scope user --env 'NOTION_API_TOKEN=${NOTION_API_TOKEN}' --transport stdio notion-mcp '--' npx -y @suekou/mcp-notion-server
# 06 · Serper Search
claude mcp add --scope user --env 'SERPER_API_KEY=${SERPER_API_KEY}' --transport stdio serper-search-mcp '--' npx -y serper-search-mcp
# 07 · Airtable
claude mcp add --scope user --env 'AIRTABLE_ACCESS_TOKEN=${AIRTABLE_ACCESS_TOKEN}' --transport stdio airtable-mcp '--' npx -y @west10tech/airtable-mcp
# 08 · Perplexity Ai
claude mcp add --scope user --env 'PERPLEXITY_API_KEY=${PERPLEXITY_API_KEY}' --transport stdio perplexity-ai-mcp '--' npx -y @perplexity-ai/mcp-server
# 09 · cold-email
npx mcprush@latest skill add borghei/cold-email
# 10 · Google Maps (gmaps)
npx mcprush@latest skill add deusyu/google-maps-gmaps
# 11 · Invoice Generator
npx mcprush@latest skill add sundial-org/invoice-generator
# 12 · agent-browser core
npx mcprush@latest skill add vercel-labs/agent-browser-coreRequirements and Windows tips
- Node.js — the current LTS (24) is the safe choice (for
npx). - Windows PowerShell says 'running scripts is disabled on this system'? Run
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedonce, or typenpx.cmdinstead ofnpx(codex.cmd,gemini.cmd,grok.cmdlikewise). PowerShell 7 needs neither.
Nothing is connected until you approve it in Claude Code. mcprush is not in the path and meters nothing here.
- 1 member authorises over OAuth — you are sent to their consent screen once each.
- 7 members have not declared what credential they need — check each one’s own page before you start.
- What this stack can write is not recorded — 4 members of 8 have no imported tool surface. Section 05 says what is known before you approve anything.
- 8 members are connected straight from their own package or address — nothing in them goes through mcprush.
What the whole stack can reach
Installed together, these tool surfaces add up. It is the first thing a security reviewer asks for, so what has been counted — and what nobody has counted yet — is on the page rather than in a PDF.
| Member | Tool surface | Write tools |
|---|---|---|
| Gmail | imported | 22 |
| Google Calendar | imported | 1 |
| Airtable | not imported | not recorded |
| Hubspot | not imported | not recorded |
| Notion | not imported | not recorded |
| Salesforce | not imported | not recorded |
A stack's blast radius is the union of its members, not the worst of them. That union cannot be taken here, because 4 members of 8 have no imported tool surface — so the figure a review asks for is missing rather than low, and a member marked not imported is one nobody has counted rather than one that cannot write.
Sensible swaps
A stack is a default, not a verdict. These are the substitutions the maintainer would make, and what each one costs or saves.
A small team that never bought Salesforce runs the same desk against Close, and loses the parts of the sequence that assumed enterprise objects.
If marketing automation is the only part of HubSpot you use, the narrower server does that job and takes the CRM overlap out of the stack.
Where this stack stops
Written by the maintainer, kept on the page rather than in a support thread.
It cannot send mail on your behalf without you. The drafting is the desk's; hitting send stays a person's action and should stay a person's permission.
It does not price anything. Discounts, terms and approvals live in your own process, not in a prompt.
The CRM is the record. Where the desk and Salesforce disagree, Salesforce is right and the desk is stale — nothing here is a second system of record.
Who keeps this current
A stack has an owner: whoever keeps it re-checks the combination when a member changes, and the members themselves are published by the people named on each row.
Stacks that share parts with this one
Personal desk
One place for the notes, the tasks, the calendar and the inbox, with a memory that survives the session.
Customer support desk
Reads the ticket, finds whether it is a bug or a billing question, and drafts the reply in your own voice.
Research desk
Finds the sources, keeps what it read, and answers with a citation that still opens next quarter.