Spotlight.ai MCP Server Tools

Last updated: August 26, 2026

Spotlight AI — MCP Integration Guide


Table of Contents

  • Overview

  • How It Works

  • Tools

    • getDeal

    • searchMeetings

  • Usage Patterns

  • Priority Rules

  • Troubleshooting


Overview

The Spotlight AI MCP server exposes deal and meeting intelligence from the Spotlight platform to AI assistants (Claude, GPT, etc.) via the Model Context Protocol (MCP). Once connected, the assistant can retrieve enriched deal data and meeting records on behalf of the user — without needing any custom integration code.

 What is MCP? MCP (Model Context Protocol) is an open standard that allows AI assistants to call structured tools hosted on external servers. Your AI assistant calls the Spotlight MCP server just like any other MCP tool provider.

Available Tools

Tool

Category

Description

🔍 getDeal

Deal Intelligence

Look up CRM deals by name or ID. Returns deal scores, MEDDIC qualification status, pipeline stage, and optional full qualification framework data.

📅 searchMeetings

Meeting Search

Search meeting records by date range, deal, title, or participants. Optionally returns AI-generated summaries, next steps, key takeaways, and full transcripts.


How It Works

You don't call the MCP tools directly — your AI assistant does. You interact naturally in chat, and the assistant decides when and how to call the tools.

Step 1 — You ask a natural language question

"What's the health of the Acme renewal deal?" or "Show me my meetings with Tesla in Q1."

Step 2 — The AI assistant calls the appropriate MCP tool It selects getDeal or searchMeetings with the correct parameters and sends the request to the Spotlight MCP server.

Step 3 — Spotlight returns structured data The MCP server fetches live data from Spotlight AI and returns a structured JSON response.

Step 4 — The assistant presents the result The assistant formats the data into a readable response — deal health summaries, meeting recaps, next steps, etc.

💡 Tip: When the assistant asks you to clarify (e.g. "Which Tesla deal did you mean?"), it received a multiple_results response. Just pick from the list it shows you.


Tools

getDeal

Source: DealTool.java

Retrieve enriched deal intelligence from Spotlight.ai for one or more CRM deals. Returns deal scores, MEDDIC qualification letters with colour-coded health indicators, and optionally full qualification framework data with gaps and next actions.

 Requirement: At least one of dealName or dealIds must be provided. The tool returns an error immediately if neither is supplied.

Parameters

Parameter

Type

Required

Default

Description

dealName

string

conditional

Full or partial deal or account name. Triggers a LIKE search on opportunity name, then account name, then semantic vector search. Ignored when dealIds is provided.

dealIds

array<string>

conditional

One or more deal IDs. Numeric strings → Spotlight deal ID. Alphanumeric strings → CRM deal ID. Mixed lists are fully supported in one call.

includeFullQualificationData

boolean

optional

false

When true, adds qualificationStages (with per-stage items), gaps, and nextActions to the response. Only set when the user explicitly asks for detailed qualification data.

Response Statuses

Every response includes a top-level status field.

Status

Description

 success

Exactly one deal resolved. Full deal data nested under "deal".

 batch_success

ID list resolved to multiple deals. Array of deals under "deals". Missing IDs are silently skipped.

 multiple_results

Name search matched more than one deal. Returns a short deal list. Present the list to the user and ask them to pick one, then re-call with the chosen spotlightDealId.

 confirm_account

Vector search found one possible account match (confidence 70–90%). The assistant will ask you to confirm the account before proceeding.

 multiple_account_matches

Vector search found several possible account matches (confidence 50–70%). The assistant will show you the account list and ask you to pick one.

 not_found

No match found after all search strategies. Try a different or shorter search term.

 error

API failure or missing required input. The error message will describe the cause.

Output Schema

Deal fields (returned on success / batch_success)

Field

Type

When

Description

deal.dealName

string

Always

Opportunity / deal name.

deal.owner

string

Always

Full name of the deal owner.

deal.amount

string

Always

Deal value with ISO currency code, e.g. "95000 USD".

deal.closeDate

string

Always

Expected close date from CRM.

deal.accountName

string

Always

Account / company name.

deal.currentStage

string

Always

Current deal stage name.

deal.forecastCategory

string

Always

Forecast category, e.g. Commit, Pipeline.

deal.opportunityType

string

Always

Opportunity type from CRM.

deal.spotlightScore

integer

Always

Overall Spotlight deal score 0–100.

deal.meddicStatus

array

Always

MEDDIC qualification letters with colour-coded health. See below.

deal.qualificationStages

array

includeFullQualificationData

Per-stage qualification items with completion status.

deal.gaps

array<string>

includeFullQualificationData

Top identified deal gaps.

deal.nextActions

array<string>

includeFullQualificationData

Top recommended next actions.

deal.spotlightDealId

integer

Always

 Internal ID. Do not display to users. Use for follow-up calls only.

deal.crmDealId

string

Always

 CRM system ID. Do not display to users.

MEDDIC letter object

Field

Description

name

Full criterion name, e.g. MetricsEconomic Buyer.

letter

Single letter, e.g. MED.

color

GREEN = complete · YELLOW = partial · RED = missing · GREY = not applicable

completed

Boolean — whether this criterion is marked complete.

notes

Free-text notes entered by the rep.

order

Display order — always render letters in this order.

Vector search confidence tiers

When a name search falls through to vector / semantic search, results are bucketed by confidence:

Tier

Confidence

Behaviour

EXACT

\> 0.90

Auto-fetches deals → success or multiple_results.

SIMILAR

0.70 – 0.90

→ confirm_account. User must confirm before proceeding.

FUZZY

0.50 – 0.70

→ multiple_account_matches. User picks from a list.

NOISE

< 0.50

Discarded → not_found.

Examples

success — single deal

{  "status": "success",  "deal": {    "spotlightDealId": 4421,    "crmDealId": "SF-00892",    "dealName": "Tesla Enterprise Renewal",    "owner": "Sarah Lee",    "amount": "180000 USD",    "closeDate": "2026-06-30",    "accountName": "Tesla",    "currentStage": "Negotiation",    "forecastCategory": "Commit",    "opportunityType": "Renewal",    "spotlightScore": 68,    "meddicStatus": [      { "name": "Metrics",        "letter": "M", "color": "GREEN",  "order": 1, "completed": true,  "notes": "20% onboarding time reduction confirmed" },      { "name": "Economic Buyer", "letter": "E", "color": "YELLOW", "order": 2, "completed": false, "notes": "CFO identified but not engaged" }    ]  }}

multiple_results — name search ambiguous

{  "status": "multiple_results",  "message": "Multiple deals found. Please clarify which one you mean:",  "deals": [    { "spotlightDealId": 4421, "dealName": "Tesla Enterprise Renewal", "owner": "Sarah Lee",    "amount": "180000 USD", "closeDate": "2026-06-30", "currentStage": "Negotiation" },    { "spotlightDealId": 4398, "dealName": "Tesla Pilot — Q2",         "owner": "James Carter", "amount": "25000 USD",  "closeDate": "2026-04-30", "currentStage": "Discovery"   }  ]}

not_found

{ "status": "not_found", "query": "Acme Corp Renewal" }

searchMeetings

Source: MeetingTool.java

Search and retrieve meeting data from Spotlight.ai. Supports filtering by exact meeting ID, deal association, meeting title, participant names, and date range. Optionally return AI-generated summaries, next steps, key takeaways, risks, and full verbatim transcripts.

 Requirement: At least one filter must be provided. Providing no parameters at all returns an error.

Parameters

Parameter

Type

Default

Description

spotlightMeetingId

integer

Overrides all other filters. Returns exactly that one meeting.

spotlightDealId

integer

Exact Spotlight deal ID. Overrides dealName.

dealName

string

Full or partial deal or account name. Fuzzy search. Ignored if spotlightDealId is set.

meetingTitle

string

Full or partial meeting title. Fuzzy/semantic search.

participantNames

array<string>

One or more participant names. Fuzzy match against attendee list.

participantMatchMode

string

ANY

ANY — at least one participant matches. ALL — every listed participant must have attended.

fromDate

string

Start of date range, ISO 8601 e.g. 2026-01-01. Inclusive.

toDate

string

End of date range, ISO 8601 e.g. 2026-03-31. Inclusive.

includeSummary

boolean

false

Returns recapsummary topics, and meeting_elements (next steps, takeaways, risks). Only set when the user explicitly asks.

includeFullTranscript

boolean

false

Returns full verbatim transcript as a structured object. Only set for single-meeting queries — payload is very large.

limit

integer

5

Max meetings returned when enrichment is active. Range 1–20. Ignored when both enrichment flags are false.

sortBy

string

DATE_DESC

DATE_DESC newest first · DATE_ASC oldest first · RELEVANCE best for text searches.

Response Statuses

Status

Description

 success

One or more meetings found. Returns meetings array with total_found and returned counts.

 not_found

No meetings matched the filters. Returns query describing which filters were applied.

 error

No filters provided, or unexpected failure.

Output Schema

Response envelope (success)

Field

Type

Description

status

string

success

meetings

array

The returned meeting records.

total_found

integer

Total meetings matching filters (may exceed returned when limit applies).

returned

integer

Number of meetings in this response.

message

string

Human-readable summary, e.g. "Returning 5 meetings out of 42 meetings found."

MeetingView fields

Field

Type

When

Description

meeting_id

long

Always

Unique Spotlight meeting identifier.

title

string

Always

Meeting title.

date

string

Always

Meeting start date/time.

duration_minutes

integer

Always (nullable)

Duration in minutes. null if not recorded.

participants

array<string>

Always

Names of people who attended.

deal

object

Always

Deal reference — see below.

recap

string

includeSummary

Short one-paragraph recap of the meeting.

summary

array

includeSummary

AI-generated topic summaries, each with topic and details text.

meeting_elements

object

includeSummary

Contains next_stepskey_takeaways, and risks arrays.

transcript

object

includeFullTranscript

Full verbatim transcript with speaker-attributed sentences.

Deal reference object (deal)

Field

Description

deal_name

Name of the associated deal or opportunity.

account_name

Name of the associated account / company.

spotlight_deal_id

 Internal ID. Do not display.

crm_deal_id

 CRM system ID. Do not display.

Examples

Metadata search — success

{  "status": "success",  "total_found": 3,  "returned": 3,  "message": "Returning 3 meetings out of 3 meetings found.",  "meetings": [    {      "meeting_id": 98231,      "title": "Tesla — Quarterly Business Review",      "date": "2026-03-28T10:00:00",      "duration_minutes": 52,      "participants": ["Mike Johnson", "Sarah Lee"],      "deal": {        "deal_name": "Tesla Enterprise Renewal",        "account_name": "Tesla",        "spotlight_deal_id": 4421,        "crm_deal_id": "SF-00892"      }    }  ]}

With summary — success

{  "meeting_id": 98231,  "title": "Tesla — Quarterly Business Review",  "recap": "The Q1 QBR with Tesla covered renewal terms, expansion scope, and integration progress.",  "summary": [    { "topic": "Renewal Terms", "details": "Both parties agreed to a 2-year renewal at current pricing." },    { "topic": "Expansion",     "details": "Expansion to 3 additional teams is under consideration pending CFO approval." }  ],  "meeting_elements": {    "next_steps":    [ "Send updated pricing proposal by April 4th", "Schedule technical deep-dive" ],    "key_takeaways": [ "Tesla is satisfied with current adoption", "Budget approval expected end of Q2" ],    "risks":         [ "Competing vendor demo scheduled for April 10th" ]  }}

not_found

{ "status": "not_found", "query": "provided filters" }

Usage Patterns

Single-call — deal by name

`User: "What's the status of the Acme Corp renewal?" Agent: [calls getDeal(dealName="Acme Corp renewal")]

success → Agent presents deal health, MEDDIC status, score multiple_results → Agent shows list, asks "Which deal did you mean?" not_found → Agent suggests: "I couldn't find that deal. Try a shorter name." `

Single-call — deal by ID

User: "Get deals 103069 and SF-00892"

Agent: [calls getDeal(dealIds=["103069", "SF-00892"])] → batch_success: presents both deals side by side

Two-call pattern — disambiguate then enrich (getDeal)

Use when the user asks for qualification details but the name is ambiguous.

Step 1 — Discover (metadata only) getDeal(dealName="Tesla") → multiple_results. Show the list. User picks "Tesla Enterprise Renewal".

Step 2 — Fetch with enrichment getDeal(dealIds=["4421"], includeFullQualificationData=true) → success with full qualification stages, gaps, and next actions.

Two-call pattern — discover then fetch (searchMeetings)

Use when the user wants a summary or transcript but hasn't provided an exact meeting ID.

Step 1 — Discover (metadata only) searchMeetings(participantNames=["Mike"], dealName="Tesla", sortBy="DATE_DESC") → Returns meeting list. Agent reads the meeting_id from the first result.

Step 2 — Fetch content by ID searchMeetings(spotlightMeetingId=98231, includeSummary=true) → Returns recap, summary topics, and next steps for exactly that meeting.


Priority Rules

getDeal priority

Condition

Behaviour

dealIds provided

Skips all name/vector search. Returns successbatch_success, or not_found.

dealName only

Runs name LIKE search → account LIKE search → vector search in sequence.

Neither provided

Returns error immediately.

ID list — 1 match

Returns success.

ID list — N matches

Returns batch_success. Unresolvable IDs are silently skipped.

Name — 1 result

Returns success.

Name — >1 results

Returns multiple_results. Agent must ask user to clarify.

searchMeetings priority

Condition

Behaviour

spotlightMeetingId present

All other filters are ignored. Returns exactly that meeting.

spotlightDealId present

dealName is ignored. Exact deal ID match used.

Both enrichment flags false

All matching meetings returned as lightweight metadata. limit is ignored.

Either enrichment flag true

At most limit meetings (default 5, max 20). total_found still shows the true total.

No filters provided

Returns error.

 Never display to users: spotlightDealIdcrmDealIdspotlight_deal_idcrm_deal_id. These are internal identifiers used only for follow-up tool calls.


Troubleshooting

 not_found — Deal or meeting not found despite knowing it exists

The search strategy exhausted all options without a match. Common causes:

  • The deal or account name is spelled differently in the CRM.

  • The deal has been deleted or transferred to another team in Spotlight.

  • The name is too specific — try a shorter, broader search term (e.g. just the company name).

  • For meetings: check the date range — if omitted, the search is not date-restricted.

 multiple_results — The assistant keeps asking me to clarify which deal

The name matched more than one deal. To resolve:

  • Pick one deal from the list the assistant shows you.

  • The assistant will re-call with the specific spotlightDealId (you don't need to know this number).

  • Alternatively, provide a more specific name or the CRM deal ID directly next time.

 confirm_account — The assistant is asking me to confirm an account name

Vector search found one possible match but isn't confident enough to proceed automatically (70–90% confidence). Simply confirm with "yes" or "no" — if no, try providing a more specific or different name.

📄 Summary or transcript is missing from the meeting response

Summaries and transcripts are opt-in and default to false. Ask specifically:

  • "Show me the summary of my meeting with Tesla" → triggers includeSummary=true.

  • "Show me the full transcript of meeting 98231" → triggers includeFullTranscript=true.

 Note: Transcripts are very large. The assistant will only request them when you explicitly ask for the verbatim transcript and when a single meeting is expected.

 error — The assistant returned an error message

Errors include a referenceId field in the response. If you're reporting the issue, include this ID — it allows the team to trace the exact request in logs. Common causes:

  • Missing input — no deal name or ID was provided. Try rephrasing your request with a specific deal name.

  • Service unavailable — Spotlight backend is temporarily unreachable. Wait a moment and try again.

  • Unexpected error — contact support with the referenceId.

🐢 The response is slow when requesting summaries

Fetching summaries or transcripts requires additional API calls to the transcription service per meeting. To minimise latency:

  • Use the two-call pattern — browse metadata first, then fetch summary only for the specific meeting you want.

  • Keep limit low (1–3) when summaries are requested.

  • Prefer spotlightMeetingId over broad filters when you already know the meeting.