How to Build an AI SDR with Claude + MCP
Most "AI SDR" content is theory. This is a real setup guide for a real, open-source MCP server — exact commands, exact config, and a walkthrough of using actual tools to research an account, draft outreach, and handle an objection.
What MCP Is, and Why It Matters for Sales
Model Context Protocol (MCP) is an open standard that lets an AI model like Claude call out to external tools and data sources in the middle of a conversation, instead of only generating text from what it already knows. A program called an MCP server exposes a fixed list of tools — each with a name, a description, and an input schema — over a local connection. Claude Desktop or Claude Code connects to that server as a client, sees the tool list, and can call any of those tools when it decides one is useful for what you asked.
For sales teams this matters because it turns Claude from a chatbot that can talk about a research or drafting task into something that actually runs it. Ask a generic LLM to "research Acme Corp," and it either declines or guesses. Ask Claude connected to a sales-specific MCP server, and it calls a research_company tool built to structure exactly the fields an SDR needs — pain points, outreach angles, recent signals — every time, with a consistent output shape you can act on immediately.
This guide uses the GTM MCP Server, an open-source server shipped in this repo with 18 tools purpose-built for sales: 10 content-generation tools that work out of the box (research, email drafting, objection handling, discovery questions, competitive analysis) plus 8 tools with real HubSpot CRM API integration. See the full tool reference and interactive UI details for the complete picture — this guide focuses on getting it running and using it for a real prospecting task.
Prerequisites
Node.js and npm installed
The server is a Node/TypeScript project built with npm run build. A current Node LTS version is enough — it runs as native ESM.
Claude Desktop or Claude Code
Either works. Claude Desktop unlocks interactive UIs for six of the tools; Claude Code runs the same tools as text output from your terminal.
Comfort with a terminal
You'll run four commands and paste one JSON block. No programming knowledge required, but you do need to open a terminal.
A HubSpot private app key (optional)
Only needed if you want the 8 tools that write directly to HubSpot. Skip it and the other 10 tools work with no setup.
Step-by-Step Setup
These are the exact commands from the server's own README — nothing invented.
Clone the repository
The MCP server lives inside the gtm-skills monorepo, in the mcp-server/ directory.
git clone https://github.com/gtm-skills/gtm.git cd gtm-skills/mcp-server
Install dependencies
Installs the MCP SDK and Zod, the only two runtime dependencies the server needs.
npm install
Build the server
Compiles TypeScript to dist/index.js. This step is required — dist/ is gitignored, so it does not ship in the repo. Skip it and Claude will have nothing to run.
npm run build
(Optional) Connect HubSpot CRM
Set this environment variable to unlock 8 additional tools that make real HubSpot API calls (create/update contacts and deals, log activity). Skip this step and the 10 content-generation tools still work with zero config.
export HUBSPOT_API_KEY=pat-na1-xxxxxxxx
Add the server to Claude Desktop
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json. Replace /absolute/path/to/ with the real path where you cloned the repo — Claude Desktop does not run from your project folder, so relative paths silently fail here.
{
"mcpServers": {
"gtm": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"]
}
}
}Using Claude Code instead? Add this to your project's .claude/settings.json — a relative path works there because Claude Code runs from your repo root:
{
"mcpServers": {
"gtm": {
"command": "node",
"args": ["./mcp-server/dist/index.js"]
}
}
}Restart Claude and verify the connection
Fully quit Claude Desktop (not just close the window) and relaunch it, since the config is only read on startup. Then start a new conversation and try:
Use the research_company tool to research Stripe for potential outreach.
Using It for a Real Sales Task
Here's the actual AI SDR motion end to end: research an account, draft outreach personalized to that research, then prep for the objection you'll hear on the first call. Each step below is a real tool from the server, with its real required inputs.
Research the target account
research_companyRequired input: companyName. Optional: industry, focusAreas. In Claude Desktop this renders as an interactive Company Research Card with checklists; in Claude Code you get the same research as structured text.
Use the research_company tool to research Acme Corp for outreach. Focus areas: recent funding news, current tech stack, likely pain points.
Draft the outreach email
draft_cold_emailRequired input: recipientName, recipientTitle, company, painPoint, yourProduct. Optional: signal (a trigger event) and tone. Feed it what research_company just found.
Use draft_cold_email for: - Recipient: Sarah Chen, VP of Sales at Acme Corp - Pain point: manual CRM data entry slowing down the sales team - Product: AI-powered CRM automation - Signal: Acme just closed a Series B and is scaling the sales org - Tone: direct
Pre-empt the likely objection
handle_objectionRequired input: objection, context, yourProduct. Optional: competitorMentioned. Use it before the call, not just after — it returns a step-by-step response framework, not just a one-liner.
Use handle_objection for: - Objection: "We're happy with our current solution" - Context: Enterprise deal, they use Salesforce, first outbound touch - Product: AI-powered CRM automation
Closing the loop into your CRM
If you set HUBSPOT_API_KEY in setup step 4, you can extend this same conversation: use hubspot_create_contact to add Sarah Chen to HubSpot, then hubspot_log_activity to log the email you just sent — all without leaving Claude.
Troubleshooting
"No such tool" or the tools never show up
dist/ is in .gitignore — it does not come from git clone, it comes from npm run build. Confirm dist/index.js actually exists in mcp-server/ before touching your Claude config.
You edited the config but nothing changed
Claude Desktop reads claude_desktop_config.json on startup only. Fully quit the app (not just close the window) and relaunch it after every config edit.
Relative paths work in Claude Code but not Claude Desktop
Claude Desktop does not run from your project folder, so its config needs an absolute path to dist/index.js. Claude Code runs from your repo root, so the relative ./mcp-server/dist/index.js path in .claude/settings.json works there.
HubSpot tools are missing from the tool list
The 8 HubSpot tools only register once the server process can see a HUBSPOT_API_KEY environment variable at startup. No key, no HubSpot tools — the 10 content-generation tools are unaffected either way.
Module or syntax errors when the server starts
The server is a native ESM package ("type": "module" in package.json). Use a reasonably current Node.js LTS release if node dist/index.js throws ERR_MODULE_NOT_FOUND or similar.
FAQ
What is MCP (Model Context Protocol), in plain terms?
MCP is an open protocol that lets an AI model like Claude call out to external tools and data sources mid-conversation, instead of only generating text. A server process exposes a defined list of tools; Claude Desktop or Claude Code connects to that server locally and can invoke those tools as part of answering you.
Do I need to know how to code to set this up?
No. Every step here is a terminal command (git clone, npm install, npm run build) or a JSON config paste. You never write or edit TypeScript to get the server running — you only run the build step that compiles it.
Does this work with both Claude Desktop and Claude Code?
Yes, with the same server and dist/index.js build. Claude Desktop additionally renders interactive UIs (an email composer, a company research card, an objection framework, and three others) for six of the tools via MCP Apps. Claude Code gets the same underlying tools as structured text output.
Is the GTM MCP server actually free?
Yes. It is MIT-licensed and open source inside the gtm-skills repo, and it runs entirely on your own machine as a local process — there is no hosted service, account, or subscription involved in running it.
Do I need a HubSpot account to use it?
No. Ten of the eighteen tools — research, email and LinkedIn drafting, objection handling, discovery questions, competitive analysis — work with zero configuration. The eight HubSpot tools (create/update contacts and deals, log activity, read pipelines) only activate once you set HUBSPOT_API_KEY.
What is the difference between the individual tools and the agentic workflows?
Individual tools like research_company or draft_cold_email each handle one task per call. The server also ships six agentic workflows (account_strategy, full_sales_cycle, competitive_deal_workflow, reengagement_workflow, enterprise_expansion, objection_battlecard) that chain several tools together behind a single prompt for an entire motion, from cold research through a multi-touch outreach plan.