Salespeak MCP Server

Model Context Protocol server for AI-powered sales intelligence, analytics, and knowledge base management.

Use Cases

Connect your MCP client (Claude Desktop, ChatGPT, Cursor, or any MCP-compatible app) and use natural language to access your sales data.

Sales Knowledge
"How should I respond to a data privacy objection?"
Get sales-ready answers grounded in your approved knowledge base, tailored by tone, persona, and deal stage.
Chat Analytics
"What are the most common questions visitors ask?"
Analyze chat sessions, question themes, intent distribution, and demo correlations.
AI Traffic
"Which pages get the most ChatGPT traffic?"
Understand how AI search engines like ChatGPT, Perplexity, and Claude discover and cite your content.
Traffic Performance
"What traffic sources convert best in chat?"
Discover which landing pages and UTM sources drive the highest-intent conversations and demo bookings.
Content Discovery
"Which sources are most cited by the AI?"
Analyze citation coverage to understand which knowledge base content the AI references most.
KB Management
"Add our refund policy to the knowledge base"
Add Q&A pairs, submit URLs for crawling, or push freeform text into the knowledge base.

Getting Started

Add this server to any MCP-compatible client. The server uses OAuth 2.1 for authentication—your client will handle the login flow automatically.

MCP Client Configuration

Add the following to your MCP client config (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "salespeak": {
      "url": "https://platform.salespeak.ai/mcp",
      "transport": "streamable-http"
    }
  }
}
The server supports OAuth 2.1 with Dynamic Client Registration. Most MCP clients (Claude Desktop, ChatGPT) will handle the OAuth flow automatically—you'll simply be prompted to log in on first use.

How Authentication Works

The /mcp endpoint requires a valid Bearer token. When your MCP client connects, it will:

  1. Discover OAuth metadata via /.well-known/oauth-authorization-server
  2. Register itself as a client via /oauth/register (Dynamic Client Registration)
  3. Redirect you to the Salespeak login page
  4. Exchange the authorization code for tokens
  5. Attach the Bearer token to all subsequent MCP requests

OAuth Setup

If you are building a custom MCP client or integration, follow these steps to authenticate.

Register Your Client

Send a POST request to register your application and obtain credentials.

POST /oauth/register
Content-Type: application/json

{
  "client_name": "My MCP Client",
  "redirect_uris": ["https://myapp.example.com/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "token_endpoint_auth_method": "client_secret_basic"
}

Response includes client_id and client_secret.

Start Authorization

Redirect the user to the authorization endpoint with PKCE.

GET /oauth/authorize?
  client_id=YOUR_CLIENT_ID&
  redirect_uri=https://myapp.example.com/callback&
  state=RANDOM_STATE&
  code_challenge=BASE64URL_SHA256_CHALLENGE&
  code_challenge_method=S256&
  scope=openid profile email

The user will be redirected to the Salespeak login page.

Exchange Code for Tokens

After the user logs in, exchange the authorization code for access and refresh tokens.

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=AUTHORIZATION_CODE&
code_verifier=ORIGINAL_CODE_VERIFIER&
client_id=YOUR_CLIENT_ID

Response:

{
  "access_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "eyJ..."
}

Use the Token

Include the access token in all MCP requests via the Authorization header.

Authorization: Bearer eyJ...

When the token expires, use the refresh token with grant_type=refresh_token at the token endpoint.

Company Context MCP

A second, read-only endpoint for agents that need to get your company right: your own assistants, a customer-facing bot, a workflow. It has one tool, ask_semantic_layer, and answers only from your knowledge bank.

https://platform.salespeak.ai/gtm-context/mcp

Connect with a signed-in user (OAuth)

Add the URL to an MCP client such as Claude or ChatGPT. The client discovers OAuth from the endpoint, and you sign in with your Salespeak account. Answers come from the organization you belong to.

claude mcp add --transport http salespeak https://platform.salespeak.ai/gtm-context/mcp

Connect an agent with an API key

For an agent that runs with no one signed in, create a key in the Salespeak app (Publish → API keys) and send it as a Bearer token. A key belongs to one organization, can only read, and works on this endpoint only. It is shown once when you create it. Revoking it takes effect within 30 seconds.

claude mcp add --transport http salespeak https://platform.salespeak.ai/gtm-context/mcp   --header "Authorization: Bearer spk_..."

ask_semantic_layer

Ask any question about the company. The answer is structured so the calling agent can check it.

ParameterTypeRequiredDescription
querystringRequiredThe question, claim or text to check.
personastringOptionalThe audience to tailor the answer for, e.g. "RevOps leader".
focusstringOptionalThe angle to emphasize, e.g. "pricing".
answer_formatstringOptional"text" (default) or "html".
session_idstringOptionalReuse one id across calls to group a conversation.

The result:

FieldMeaning
statusanswered, partial (see gaps) or not_in_kb. On not_in_kb, do not fill the gap from elsewhere.
answerThe answer text.
recordsThe knowledge bank records associated with the answer: id, question, excerpt, source URLs, authority, last_updated. They show where the answer came from. They are not proof that it follows from them: each carries verification: "unverified".
authorityHow a record entered the knowledge bank, strongest first: approved (someone at the company approved it), customer_provided, discovered (found on a page), generated.
authority_summaryThe weakest authority among the records the answer used.
freshnessThe oldest and newest last_updated among those records.
gapsParts of the question the knowledge bank does not cover.
conflictsRecords that disagree with each other, by id.
request_idQuote this when reporting a problem.

Limits: 30 requests per minute per caller, 120 per minute and 5,000 per day per organization. A request over a limit returns a tool error that says which limit and when to retry.

Tools Reference

The authenticated /mcp endpoint exposes 10 tools. All tools automatically resolve the caller's organization from the OAuth token.

answer_prospect_question

Get sales-ready answers about products, pricing, objection handling, and competitive positioning from your knowledge base.

ParameterTypeRequiredDescription
querystringRequiredThe sales question or objection to address.
session_idstringOptionalSession identifier for conversation continuity.
tonestringOptionalResponse style: "concise", "detailed", "executive".
lengthstringOptionalResponse length: "short", "long".
personastringOptionalSeller persona: "SDR", "AE", "VP Sales".
deal_stagestringOptionalDeal stage context: "discovery", "demo", "negotiation".
include_follow_upsbooleanOptionalInclude suggested follow-up questions. Default: false.

analyze_conversations

Analyze what visitors are asking in chat conversations. Returns session counts, top questions, intent breakdown, and geography.

ParameterTypeRequiredDescription
querystringRequiredAnalytics question in natural language.
time_rangestringOptionalTime period: "1d", "7d", "30d", or "90d". Default: "7d".
pagestringOptionalFilter by landing page URL substring (e.g. "pricing").
intentstringOptionalFilter by intent classification (e.g. "high", "medium").
output_formatstringOptional"structured" (JSON + summary) or "prose". Default: "structured".

analyze_llm_traffic

Analyze LLM bot traffic and AI search engine performance. Understand how ChatGPT, Perplexity, Claude, and others discover your content.

ParameterTypeRequiredDescription
querystringRequiredAnalytics question in natural language.
time_rangestringOptionalTime period: "7d", "30d", or "90d". Default: "30d".

analyze_website_chat_session_performance

Analyze which pages and traffic sources drive high-intent conversations and demo bookings.

ParameterTypeRequiredDescription
querystringRequiredAnalytics question in natural language.
time_rangestringOptionalTime period: "7d", "30d", or "90d". Default: "30d".
sourcestringOptionalFilter by UTM source (e.g. "google", "linkedin").
pagestringOptionalFilter by landing page URL substring.
output_formatstringOptional"structured" (JSON + summary) or "prose". Default: "structured".

analyze_llm_citations

Analyze which knowledge base sources the AI cites most in conversations. Understand citation coverage and content gaps.

ParameterTypeRequiredDescription
querystringRequiredAnalytics question in natural language.
time_rangestringOptionalTime period: "7d", "30d", or "90d". Default: "30d".
topicstringOptionalFilter citations by topic (e.g. "pricing", "security").
output_formatstringOptional"structured" (JSON + summary) or "prose". Default: "structured".

detect_knowledge_gaps

Detect where the AI gets confused or lacks knowledge base citations. Find content gaps and areas needing improvement.

ParameterTypeRequiredDescription
querystringOptionalAnalytics question. Default: general gap analysis.
time_rangestringOptionalTime period: "7d", "30d", or "90d". Default: "30d".
output_formatstringOptional"structured" (JSON + summary) or "prose". Default: "structured".

get_session_details

Get details of specific chat sessions. Retrieve full conversation history by session ID or search query.

ParameterTypeRequiredDescription
session_idstringOptionalSpecific session ID to retrieve.
search_querystringOptionalSearch term to find in conversations.
limitintegerOptionalMaximum sessions to return. Default: 5.

create_training_content

Add a question/answer pair to the knowledge base. Capture approved answers, objection handling, or FAQ entries.

ParameterTypeRequiredDescription
questionstringRequiredThe question or objection to address.
answerstringRequiredThe approved answer/response.
categorystringOptionalCategory: "pricing", "objections", "features", etc.

submit_url_for_training

Submit a URL to be crawled and added to the knowledge base. Add documentation, blog posts, or product pages.

ParameterTypeRequiredDescription
urlstringRequiredThe URL to crawl and add.

add_information_to_the_knowledge_bank

Add freeform text to the knowledge base. Content is processed by an LLM to extract Q&A pairs and automatically categorize information.

ParameterTypeRequiredDescription
contentstringRequiredThe information/text to process and add.
titlestringOptionalTitle describing the content (helps organize extracted Q&As).
custom_instructionsstringOptionalInstructions for the extraction LLM.

Support

Need help?

Contact us at support@salespeak.ai or visit salespeak.ai.