AI sales team that works the phone: gets a real person on the line. Agents sign up by paying (MPP).
Maintained by@GreatPyreneseDad(verified)Also a maintainer?
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Answer a question from the workspace's own knowledge (calls, notes, docs), with sources, limited by the key's role.
The question.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http bullpen https://bullpen.sale/mcp
Answer a question from the workspace's own knowledge (calls, notes, docs), with sources, limited by the key's role.
| Argument | Type | Description |
|---|---|---|
| question* | string | The question. |
{
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"description": "The question."
}
}
}Talk to Herman, the manager agent who runs the whole bullpen in plain language: status, finding companies, running campaigns, sending the crew to call. Anything that reaches the outside world comes back as a pending action with an id — nothing goes out until confirm_herman_action.
| Argument | Type | Description |
|---|---|---|
| message* | string | What you want, in plain words. |
{
"type": "object",
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"description": "What you want, in plain words."
}
}
}What Bullpen does, what it costs, and how an agent gets a workspace and API key. Call this first if you have no key. (No API key needed.)
No arguments.
{
"type": "object",
"properties": {}
}Start creating a Bullpen workspace for your principal by paying with the Machine Payments Protocol (MPP, Stripe). Returns the 402 payment challenge and the exact URL to retry with your MPP client (e.g. `npx @stripe/link-cli mpp pay <url>`). The paid retry returns an api_key; pass it to this MCP server as `Authorization: Bearer bp_live_…`. $25–$500, all of it becomes credits, plus $10 free. (No API key needed.)
| Argument | Type | Description |
|---|---|---|
| amount | number | USD to load as credits, 25–500. Default 25. |
| company* | string | Company name for the workspace. |
| agent_name | string | Your name, shown in the workspace log. |
| owner_name | string | Owner's name, optional. |
| owner_email* | string | Email of the person who will own the workspace. They get an invite. |
{
"type": "object",
"required": [
"owner_email",
"company"
],
"properties": {
"amount": {
"type": "number",
"description": "USD to load as credits, 25–500. Default 25."
},
"company": {
"type": "string",
"description": "Company name for the workspace."
},
"agent_name": {
"type": "string",
"description": "Your name, shown in the workspace log."
},
"owner_name": {
"type": "string",
"description": "Owner's name, optional."
},
"owner_email": {
"type": "string",
"description": "Email of the person who will own the workspace. They get an invite."
}
}
}Run or drop a pending action Herman proposed (a call, text or Salesforce update). Only confirm what your principal actually wants.
| Argument | Type | Description |
|---|---|---|
| id* | string | Pending action id from ask_herman. |
| decision* | string |
{
"type": "object",
"required": [
"id",
"decision"
],
"properties": {
"id": {
"type": "string",
"description": "Pending action id from ask_herman."
},
"decision": {
"enum": [
"confirm",
"cancel"
],
"type": "string"
}
}
}Start a calling campaign. Add contacts with import_campaign_contacts, then work_campaign.
| Argument | Type | Description |
|---|---|---|
| goal | string | What a win looks like, e.g. 'book a 20-minute demo'. |
| name* | string | Campaign name. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"goal": {
"type": "string",
"description": "What a win looks like, e.g. 'book a 20-minute demo'."
},
"name": {
"type": "string",
"description": "Campaign name."
}
}
}Prepaid credit balance and recent usage. Spending tools return a 402 error at zero.
No arguments.
{
"type": "object",
"properties": {}
}Search for companies to sell to (e.g. 'HVAC companies in Salt Lake City'). Returns names, main phone lines and websites.
| Argument | Type | Description |
|---|---|---|
| max | number | Max results, default 20. |
| query* | string | Who you're looking for, with place. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"max": {
"type": "number",
"description": "Max results, default 20."
},
"query": {
"type": "string",
"description": "Who you're looking for, with place."
}
}
}Live and recent crew calls.
No arguments.
{
"type": "object",
"properties": {}
}A crew member dials the number, works the phone menu, hold and AI receptionist until a real person answers, then connects the key's owner into the live call. Spends credits ($5 per human reached). Company lines only unless the callee gave written consent.
| Argument | Type | Description |
|---|---|---|
| to* | string | E.164 phone number, e.g. +18015551234. |
| why | string | One line on why we're calling. |
| target | string | Who to ask for. |
{
"type": "object",
"required": [
"to"
],
"properties": {
"to": {
"type": "string",
"description": "E.164 phone number, e.g. +18015551234."
},
"why": {
"type": "string",
"description": "One line on why we're calling."
},
"target": {
"type": "string",
"description": "Who to ask for."
}
}
}Add contacts to a campaign from CSV text (header row: company, phone, name, title, email).
| Argument | Type | Description |
|---|---|---|
| id* | string | Campaign id. |
| csv* | string | CSV text. |
{
"type": "object",
"required": [
"id",
"csv"
],
"properties": {
"id": {
"type": "string",
"description": "Campaign id."
},
"csv": {
"type": "string",
"description": "CSV text."
}
}
}Reach a human at a company's main line and leave a short hello pointing to your principal. Business hours, once a week per company. Spends credits.
| Argument | Type | Description |
|---|---|---|
| to* | string | Company main line, E.164. |
| note | string | What to leave. |
| target | string | Who to ask for. |
| company* | string | Company name. |
{
"type": "object",
"required": [
"to",
"company"
],
"properties": {
"to": {
"type": "string",
"description": "Company main line, E.164."
},
"note": {
"type": "string",
"description": "What to leave."
},
"target": {
"type": "string",
"description": "Who to ask for."
},
"company": {
"type": "string",
"description": "Company name."
}
}
}Who to ask for at a company returned by find_companies.
| Argument | Type | Description |
|---|---|---|
| id* | string | Company id from find_companies. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Company id from find_companies."
}
}
}Email from the workspace's agent inbox.
| Argument | Type | Description |
|---|---|---|
| cc | string | Optional cc. |
| to* | string | Recipient. |
| text* | string | Plain-text body. |
| subject* | string | Subject. |
{
"type": "object",
"required": [
"to",
"subject",
"text"
],
"properties": {
"cc": {
"type": "string",
"description": "Optional cc."
},
"to": {
"type": "string",
"description": "Recipient."
},
"text": {
"type": "string",
"description": "Plain-text body."
},
"subject": {
"type": "string",
"description": "Subject."
}
}
}Text from the workspace's line. Opt-outs are honored. Spends credits.
| Argument | Type | Description |
|---|---|---|
| to* | string | E.164 number. |
| body* | string | Message. |
{
"type": "object",
"required": [
"to",
"body"
],
"properties": {
"to": {
"type": "string",
"description": "E.164 number."
},
"body": {
"type": "string",
"description": "Message."
}
}
}Start an MPP credit top-up ($5–$500). Returns the 402 challenge and the URL to pay and retry with your MPP client, sending your key as X-Bullpen-Key.
| Argument | Type | Description |
|---|---|---|
| amount* | number | USD, 5–500. |
{
"type": "object",
"required": [
"amount"
],
"properties": {
"amount": {
"type": "number",
"description": "USD, 5–500."
}
}
}Add companies to Social Intel, which scans them for buying and risk signals.
| Argument | Type | Description |
|---|---|---|
| names* | string | Company names, comma or newline separated. |
{
"type": "object",
"required": [
"names"
],
"properties": {
"names": {
"type": "string",
"description": "Company names, comma or newline separated."
}
}
}The workspace, member and role this API key acts as.
No arguments.
{
"type": "object",
"properties": {}
}Send the crew to work a campaign's contacts now. Spends credits.
| Argument | Type | Description |
|---|---|---|
| id* | string | Campaign id. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Campaign id."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 5, 2026.