protogrid

Search / sale.bullpen/bullpen

Bullpen

R0· no sign-in

AI sales team that works the phone: gets a real person on the line. Agents sign up by paying (MPP).

v1.0.2 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality75good
Trust96of 100
Uptime, 30 days100%
Latency p501293 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "bullpen": {
      "type": "http",
      "url": "https://bullpen.sale/mcp"
    }
  }
}
claude mcp add --transport http bullpen https://bullpen.sale/mcp
[mcp_servers.bullpen]
url = "https://bullpen.sale/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "bullpen": {
      "type": "remote",
      "url": "https://bullpen.sale/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "bullpen": {
      "type": "http",
      "url": "https://bullpen.sale/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=bullpen&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYnVsbHBlbi5zYWxlL21jcCJ9"
}
{
  "servers": {
    "bullpen": {
      "type": "http",
      "url": "https://bullpen.sale/mcp"
    }
  }
}
{
  "mcpServers": {
    "bullpen": {
      "httpUrl": "https://bullpen.sale/mcp"
    }
  }
}
extensions:
  "bullpen":
    enabled: true
    name: "bullpen"
    type: streamable_http
    uri: "https://bullpen.sale/mcp"
    timeout: 300

Quality 75 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene88 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations42 of 42 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: connect_google (idempotentHint); whoami (destructiveHint, idempotentHint); list_team (destructiveHint, idempotentHint); …
  • pass
    tools.token_costabout 4,831 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stability50 · weight 15
  • warn
    stability.changes31 tool changes in 30 days
  • fail
    stability.rug_pull5 tools kept their name but changed most of their description in 30 days; review before trusting them
  • pass
    stability.new_linksno tool change named a new site
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

42 tools, about 4,831 tokens to load them all · tool set db42bf7ce262 · tools last changed 2026-11-13 · checked 2026-11-14 06:30 UTC

Tool changes

  • set_mobilechangeddescription
    before

    Set the mobile that rings when the crew reaches a person (get_a_human). Yours by default; managers can set a teammate's with user_id (from list_team).

    after · 56% of words in common

    Set the mobile that rings when the crew reaches a person (get_a_human). This is your number for every call in the workspace; to send one campaign's live handoffs to someone else, set handoff_number with set_campaign_customs instead. Yours by default; managers can set a teammate's with user_id (from list_team).

  • set_campaign_customschangeddescriptionmeaning changed
    before

    Override customs for one campaign (admin only): tone, opening, closing, say, never_say, customs, knock_line. For a campaign that should sound different from the team default — another market, region or offer. Null returns a key to the team default.

    after · 35% of words in common

    Override how one campaign sounds and who it is (admin only). Customs: tone, opening (said as the first line; {name} and {team} fill in), closing, say, never_say, customs, knock_line. Identity, for a campaign that calls as a different company: spoken_name, pronunciation, about, website, caller_name. Handoff: closer_name and handoff_number, the person and phone that ring when a live prospect wants a human on this campaign's calls (instead of the workspace's human line). Null returns a key to the team default.

  • work_campaignchangeddescription, input schemameaning changed
    before

    Send the crew to work a campaign's contacts now. Spends credits.

    after · 27% of words in common

    Send the crew to work a campaign now. With only the campaign id it takes the reachable contacts not yet in a play (company lines, not excluded), easiest first, up to limit (default 10, max 25), and switches a paused campaign on. Pass contact_ids to choose. Spends credits.

  • list_campaign_contactsadded

    Every contact in a campaign with its status (new, researched, excluded), phone, line type and whether it is already in a play.

  • create_campaignchangeddescriptionmeaning changed
    before

    Start a calling campaign. Add contacts with import_campaign_contacts, then work_campaign.

    after · 39% of words in common

    Create a calling campaign. It starts paused: add contacts (import_campaign_contacts, or find_companies with campaign_id), set its customs, then work_campaign switches it on.

  • find_companieschangeddescription, input schemameaning changed
    before

    Search for companies to sell to (e.g. 'HVAC companies in Salt Lake City'). Returns names, main phone lines and websites.

    after · 43% of words in common

    Search for companies to sell to (e.g. 'HVAC companies in Salt Lake City'). Returns each company's id, name, main phone line, website, city and state. Pass campaign_id to add them to that campaign's contact list in the same call.

  • delete_calladded

    Delete the transcript, summary and recording of one call, for good (a deletion request from the person called, or your team's retention policy). The call row, its outcome and its cost remain. Reps can delete their own calls; managers and admins any.

  • rename_crew_memberadded

    Rename a crew member for the team's culture or region, optionally with a new voice, persona or greeting. Admin only; paid workspaces (402 otherwise — buy_credits first). Keys from list_team's crew or onboarding_status.

  • set_campaign_customsadded

    Override customs for one campaign (admin only): tone, opening, closing, say, never_say, customs, knock_line. For a campaign that should sound different from the team default — another market, region or offer. Null returns a key to the team default.

  • set_team_profileadded

    Save the team profile (admin only). Pass only fields your person approved: spoken_name, pronunciation, about, website, trademarks [{name, say_as}], tone, opening, closing, say [], never_say [], customs (house rules, prose), knock_line ({name} = crew member's first name, {team} = company), caller_name (≤15 chars). It shapes how the crew sounds; it cannot change the rules (the crew says it's an AI when asked, keeps to calling hours, honours do-not-call, invents nothing).

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 96 / 100

provenance85
liveness100
freshness100
hygiene100

+repository +dns-namespace +website +reachable +uptime-100% +updated-9d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://bullpen.sale/mcp streamable-httpnoneyes100%1293 ms2025-11-252026-11-14

Tools (42)

accept_outbound_agreementAccept the agreement on your person's behalf ONLY after they have read it and told you they agree. Requires their full name as they typed it; recorded with this connection. Admin or manager only.
ask_brainread-onlyAnswer a question from the workspace's own knowledge (calls, notes, docs), with sources, limited by the key's role.
ask_hermanTalk 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.
bullpen_aboutread-onlyWhat Bullpen does, what it costs, and how to get a workspace: free with $10 of credits (no card) when your person signs in, or by paying over MPP. Call this first if you have no key. (No API key needed.)
bullpen_signupStart 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.)
buy_creditsA Stripe Checkout link your person opens to add credits by card ($20–$10,000). Agents with a wallet can use top_up_credits instead.
buy_numberBuy a number: $3/month from prepaid credits (first month charged now). Default is a crew line, and a crew member is put on it right away; for:"me" makes it your person's own caller ID instead. Admin or manager only. Confirm with your person before buying.
confirm_herman_actionRun or drop a pending action Herman proposed (a call, text or Salesforce update). Only confirm what your principal actually wants.
connect_googleA link your person opens to approve Google Calendar and Gmail, for booking meetings and sending mail.
connect_salesforceA link your person opens to approve Bullpen in Salesforce, so every call writes there. Admin or manager only.
create_campaignCreate a calling campaign. It starts paused: add contacts (import_campaign_contacts, or find_companies with campaign_id), set its customs, then work_campaign switches it on.
credits_statusread-onlyPrepaid credit balance and recent usage. Spending tools return a 402 error at zero.
delete_calldestructiveDelete the transcript, summary and recording of one call, for good (a deletion request from the person called, or your team's retention policy). The call row, its outcome and its cost remain. Reps can delete their own calls; managers and admins any.
draft_team_profileDraft a team profile from the company's website and any notes from your person. Returns a draft and its sources; nothing is saved. Walk your person through it — name as spoken, product names, tone, words to use and avoid, house rules, the knock line — and save what they approve with set_team_profile.
find_companiesSearch for companies to sell to (e.g. 'HVAC companies in Salt Lake City'). Returns each company's id, name, main phone line, website, city and state. Pass campaign_id to add them to that campaign's contact list in the same call.
floor_stateread-onlyLive and recent crew calls.
get_a_humanA 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 ($0.30 per crew minute; no extra charge when a person is reached). Company lines only unless the callee gave written consent.
get_call_transcriptread-onlyOne call in full: the transcript as text and as timed lines with speakers (crew, the person reached, and your person after a handoff), the summary, outcome, and a signed recording link (MP3, valid one hour). Pass an id or call SID from list_calls.
get_outbound_agreementread-onlyThe full Outbound Compliance Agreement and its version. Show it to your person before accept_outbound_agreement; calls and texts stay locked until it's accepted.
get_team_profileread-onlyThe team profile the crew works from: company name as spoken, what the team sells, trademarks and how to say them, tone, how calls open and close, words to use and never use, house rules, the knock line, caller-ID name, and per-campaign overrides. Read it first; if is_set is false, offer to build it with draft_team_profile.
hire_crewPut an AI crew member (name, voice, role) on every free phone line so the crew can dial. Run after a number is bought.
import_campaign_contactsAdd contacts to a campaign from CSV text (header row: company, phone, name, title, email).
invite_teammateInvite someone to the workspace by email; they get a sign-in link that lands on the join page. Roles: rep, manager, admin (only admins invite admins).
knockReach 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.
list_callsread-onlyRecent calls, newest first: id, call SID, when, number, crew member, whether it was handed to your person, outcome, summary, and whether a transcript and recording exist. Reps see their own calls; managers and admins see all.
list_campaign_contactsread-onlyEvery contact in a campaign with its status (new, researched, excluded), phone, line type and whether it is already in a play.
list_teamread-onlyMembers (role, whether their mobile is set, Herman on) and pending invites with their links.
onboarding_statusread-onlyChecklist of what this workspace still needs before every feature works (Herman, compliance agreement, phone number, crew, your mobile, credits, Salesforce, Google, texting, team), in the order to do them, with the tool or link for each. Start here after signing up.
open_pageread-onlyA link your person can open: floor (the live floor: who's on a call right now, and recent calls); human_line (Human line: your mobile and live bridge calls); herman (the app home, with Herman in the corner); campaigns (campaigns); companies (companies found and researched); integrations (phone numbers, texting registration, Salesforce and Google); billing (credits, billing and the Outbound Compliance Agreement); team (members and invites); api_keys (API keys and agent connections (revoke here)). "floor" is the live floor to watch calls. (No API key needed.)
rename_crew_memberRename a crew member for the team's culture or region, optionally with a new voice, persona or greeting. Admin only; paid workspaces (402 otherwise — buy_credits first). Keys from list_team's crew or onboarding_status.
research_companyWho to ask for at a company returned by find_companies.
search_numbersread-onlyAvailable US numbers by area code, for the crew's lines.
send_emailEmail from the workspace's agent inbox.
send_textText from the workspace's line. Opt-outs are honored. Spends credits.
set_campaign_customsOverride how one campaign sounds and who it is (admin only). Customs: tone, opening (said as the first line; {name} and {team} fill in), closing, say, never_say, customs, knock_line. Identity, for a campaign that calls as a different company: spoken_name, pronunciation, about, website, caller_name. Handoff: closer_name and handoff_number, the person and phone that ring when a live prospect wants a human on this campaign's calls (instead of the workspace's human line). Null returns a key to the team default.
set_mobileSet the mobile that rings when the crew reaches a person (get_a_human). This is your number for every call in the workspace; to send one campaign's live handoffs to someone else, set handoff_number with set_campaign_customs instead. Yours by default; managers can set a teammate's with user_id (from list_team).
set_team_profileSave the team profile (admin only). Pass only fields your person approved: spoken_name, pronunciation, about, website, trademarks [{name, say_as}], tone, opening, closing, say [], never_say [], customs (house rules, prose), knock_line ({name} = crew member's first name, {team} = company), caller_name (≤15 chars). It shapes how the crew sounds; it cannot change the rules (the crew says it's an AI when asked, keeps to calling hours, honours do-not-call, invents nothing).
top_up_creditsStart 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.
turn_on_hermanSwitch Herman on for this member so ask_herman works.
watch_companiesAdd companies to Social Intel, which scans them for buying and risk signals.
whoamiread-onlyThe workspace, member and role this API key acts as.
work_campaignSend the crew to work a campaign now. With only the campaign id it takes the reachable contacts not yet in a play (company lines, not excluded), easiest first, up to limit (default 10, max 25), and switches a paused campaign on. Pass contact_ids to choose. Spends credits.

Schemas: list_tools.

Also listed as

1 other active names share this repository: io.ringler/ringler

Similar MCP servers

Official server.json
{
  "name": "sale.bullpen/bullpen",
  "icons": [
    {
      "src": "https://bullpen.sale/icon-512.png",
      "sizes": [
        "512x512"
      ],
      "mimeType": "image/png"
    },
    {
      "src": "https://bullpen.sale/icon.svg",
      "sizes": [
        "any"
      ],
      "mimeType": "image/svg+xml"
    }
  ],
  "title": "Bullpen",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://bullpen.sale/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.2",
  "repository": {
    "url": "https://github.com/GreatPyreneseDad/bullpen-mcp",
    "source": "github"
  },
  "websiteUrl": "https://bullpen.sale",
  "description": "AI sales team that works the phone: gets a real person on the line. Agents sign up by paying (MPP)."
}