Garba MCP Server — Tools
The read-only tools this server exposes to connected MCP clients.
get_company
Gets detailed firmographic information about a single company. Use list_companies to find company IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
companyId | integer | yes | The company ID. |
get_company_summary
Gets the stored AI-generated summary of a company, when it is newer than the company's latest interaction. Returns null when the company doesn't exist, is not visible, or has no fresh summary.
| Parameter | Type | Required | Description |
|---|---|---|---|
companyId | integer | yes | The company ID. |
get_deal
Gets one deal the way the deal page in the app shows it: the list_deals fields plus estimatedAmount and estimatedStage with the AI's reasoning for the amount, close date and stage; health with its reasoning, the narrative, blockers, next best actions and suggested questions; the qualification framework's criteria (status Identified, Partial or NotDiscussed; sentiment Favours, Neutral or Against; summary); people and competitors; the deal's meetings and emails, its upcoming external meetings, and its notes. On won or lost deals it adds the win/loss analysis: in full once completed, only its status while in progress or when there was nothing to analyse, and nothing when the analysis failed. Health is not a close probability. The narrative, reasoning, next moves, criterion summaries and win/loss text are AI-written paraphrases of the deal's sources, never quotes. closeDate is the CRM close date; estimatedCloseDate is the AI's estimate. Every AI-written field except the win/loss analysis — the estimates and their reasoning, health, summary, narrative, blockers, next best actions, suggested questions and the criteria — appears only while the account has an active scoring framework, and so do people and competitors. Each meeting and email carries canOpen, which says whether get_meeting/get_email will return it; items the caller can't open carry only id, title or subject, and date. This tool has a stricter rate limit (60 requests/minute). Returns null when deals are switched off for the account, the deal doesn't exist, or the caller can't read it.
| Parameter | Type | Required | Description |
|---|---|---|---|
dealId | integer | yes | The deal ID. |
get_email
Gets the full detail of a single email, including its body. This tool has a stricter rate limit (60 requests/minute). Returns null when the email doesn't exist, the caller can't access it, or the account's email sync is switched off. Bodies over 50,000 characters are truncated with a marker.
| Parameter | Type | Required | Description |
|---|---|---|---|
emailId | integer | yes | The email ID. Use list_emails to find email IDs. |
get_email_thread
Gets the full thread around a single email, oldest first, including bodies. This tool has a stricter rate limit (60 requests/minute). Returns null when the email doesn't exist, the caller can't access it, or the account's email sync is switched off. Bodies over 50,000 characters are truncated with a marker. A long thread returns only its most recent emails, at most 100 and at most 100,000 characters of bodies, subjects and snippets together; 'olderEmailsOmitted' is true when earlier emails were left out.
| Parameter | Type | Required | Description |
|---|---|---|---|
emailId | integer | yes | The email ID. Use list_emails to find email IDs. |
get_me
Describes the calling user: user ID, name, email and team. This is where the ids for "my …" questions come from: the user ID goes into userIds on list_deals, ownerUserId on list_meetings and assigneeUserId on list_tasks; team.id goes into teamIds on list_deals and teamId on list_pipelines. list_tasks already defaults to the caller's own tasks; list_deals and list_meetings default to everything the caller can see.
No parameters.
get_meeting
Gets detailed information about a single meeting including its summary, participants, meeting type, language, and whether it is private. Use this after list_meetings to get the full details for a specific meeting. Returns null when the meeting doesn't exist or the caller can't access it.
| Parameter | Type | Required | Description |
|---|---|---|---|
meetingId | string | yes | The meeting ID (GUID format). |
get_task
Gets a single task by ID. Any task on a meeting the caller can read is returned, regardless of assignee. Returns null if it doesn't exist or the caller can't access its meeting.
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | integer | yes | The task ID. |
get_task_counts
Returns how many of the caller's own tasks sit in each of the app's Task states: Open, Today, Upcoming, Completed. A search shorter than two characters is ignored, as in the app.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | no | Restrict counts to tasks whose title or description contains this text (matched literally). |
get_transcript
Gets the full transcript for a meeting as timestamped, speaker-attributed paragraphs, along with whether the meeting is private. This tool has a stricter rate limit (60 requests/minute). Returns null when the meeting doesn't exist, the caller can't access it, or no transcript is available.
| Parameter | Type | Required | Description |
|---|---|---|---|
meetingId | string | yes | The meeting ID (GUID format). |
list_companies
Lists companies visible in the account that have at least one non-private interaction — a completed, external meeting or a non-private email — optionally filtered by a name or domain search term.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | no | Filter by company name or domain (case-insensitive substring match). |
page | integer | no | Page number, starting at 1. Defaults to 1. Default: 1. |
pageSize | integer | no | Number of companies per page. Defaults to 50, maximum is 100. Default: 50. |
list_deals
Lists the deals the caller can read, one row per deal like the Deals table in the app: companies, owner, pipeline, stage, outcome, amount and currency, convertedAmount in the account's reportingCurrency (rounded to whole units), the CRM closeDate and the AI's estimatedCloseDate, health (score and band), a one-line summary, stale, lastActivityAt, nextMeetingAt, and on won or lost deals with a completed win/loss analysis a short wonLost summary. Ordered by most recently updated, with outcomeCounts (open/won/lost) and stageCounts for the whole filtered set. Returns up to 'pageSize' deals (default 50, max 100); use 'page' for more. Filters: outcome, pipelineId and stageId (ids from list_pipelines), companyId, closeDateFrom/closeDateTo, userIds/teamIds, search. The close-date filters use the CRM close date, not estimatedCloseDate; there is no closed-at timestamp, and CRMs usually, but not always, set the close date when a deal is won or lost. Health is not a close probability. summary and wonLost are AI-written paraphrases of the deal's sources, never quotes. health, summary and estimatedCloseDate appear only while the account has an active scoring framework; wonLost does not depend on one. Renewals are not a Garba concept: they exist only as a CRM pipeline with that name, otherwise search deal names. Returns nothing when the account has deals switched off.
| Parameter | Type | Required | Description |
|---|---|---|---|
outcome | string | no | Filter by outcome: Open, Won, or Lost. |
pipelineId | integer | no | Filter by pipeline ID. Use list_pipelines to find pipeline IDs. |
stageId | integer | no | Filter by stage ID. Use list_pipelines to find stage IDs. |
companyId | integer | no | Filter by company ID. Use list_companies to find company IDs. |
closeDateFrom | string | no | Only include deals whose CRM close date is on or after this date (ISO 8601, e.g. '2025-01-01'). |
closeDateTo | string | no | Only include deals whose CRM close date is on or before this date (ISO 8601, e.g. '2025-03-31'). |
userIds | array | no | Restrict to deals owned by these user IDs. Wins over teamIds when both are set. |
teamIds | array | no | Restrict to deals owned by members of these team IDs. Ignored when userIds is set. Use list_teams to find team IDs. |
search | string | no | Search deal names containing this text. |
page | integer | no | Page number, starting at 1. Default: 1. |
pageSize | integer | no | Deals per page. Defaults to 50, maximum is 100. Default: 50. |
list_emails
Lists emails the caller can access, most recent first, with the companies and deals each email is linked to. Returns a short snippet per email, not the full body -- use get_email for that. Returns up to 'pageSize' emails (default 50, max 100). Use 'page' to page through larger result sets, or 'from'/'to' to narrow by received date. Filters: companyId, dealId, search. When the account's email sync is switched off, returns an empty list.
| Parameter | Type | Required | Description |
|---|---|---|---|
companyId | integer | no | Restrict to emails associated with this company. Use list_companies to find company IDs. |
dealId | integer | no | Restrict to emails associated with this deal. Use list_deals to find deal IDs. |
search | string | no | Search email subjects containing this text. |
from | string | no | Only include emails received on or after this date (ISO 8601 format, e.g. '2025-01-01'). |
to | string | no | Only include emails received on or before this date (ISO 8601 format, e.g. '2025-03-31'). A plain date includes the whole day. |
page | integer | no | Page number, starting at 1. Default: 1. |
pageSize | integer | no | Emails per page. Defaults to 50, maximum is 100. Default: 50. |
list_meetings
Lists meetings ordered by date descending, with the companies and deals each meeting is linked to. Returns up to 'pageSize' meetings (default 50, max 100) plus the total count; paginate with 'page'. Filter by companyId, dealId, ownerUserId, or the from/to date range. Each meeting carries 'isPrivate'; that flag is the only signal of privacy, never the title, participants or summary.
| Parameter | Type | Required | Description |
|---|---|---|---|
ownerUserId | integer | no | Filter by owner user ID. Use list_users to find user IDs. |
companyId | integer | no | Filter by company ID. Use list_companies to find company IDs. |
dealId | integer | no | Filter by deal ID. Use list_deals to find deal IDs. |
from | string | no | Only include meetings created on or after this date (ISO 8601 format, e.g. '2025-01-01'). |
to | string | no | Only include meetings created on or before this date (ISO 8601 format, e.g. '2025-03-31'). A plain date includes the whole day. |
page | integer | no | Page number, 1-based. Defaults to 1. Default: 1. |
pageSize | integer | no | Meetings per page. Defaults to 50, maximum is 100. Default: 50. |
list_pipelines
Lists the account's deal pipelines in display order, each with its active stages. Every stage carries its outcome (Open, Won or Lost, when the CRM marks one), dealCount, and value: the total amount of those deals converted to the account's reportingCurrency and rounded to whole units, summed for won and lost stages as well as open ones. Counts and values cover only deals the caller can read; teamId or userId narrows them to deals owned by that team's members or that user (userId wins when both are set). Non-admins see only pipelines holding at least one deal they can read. Use the pipeline and stage IDs with list_deals' pipelineId and stageId filters. Renewals are not a Garba concept: they exist only as a CRM pipeline with that name. Returns no pipelines when the account has deals switched off.
| Parameter | Type | Required | Description |
|---|---|---|---|
teamId | integer | no | Narrow deal counts and values to deals owned by members of this team. Use list_teams to find team IDs. |
userId | integer | no | Narrow deal counts and values to deals owned by this user. Wins over teamId when both are set. Use list_users to find user IDs. |
list_tasks
Lists tasks on meetings the caller can access, in the same states as the Tasks list in the app — Open, Today, Upcoming, or Completed (defaults to Open) — ordered by due date. With neither meetingId nor companyId set, lists items assigned to the caller; meetingId or companyId widens the listing to every item in that scope regardless of assignee — passing both, or a malformed meetingId, returns an error. assigneeUserId narrows to one assignee in any scope; dealId narrows to items on meetings linked to a deal; dueFrom/dueTo narrow by due date; search matches titles and descriptions; page/pageSize paginate (pageSize max 100). Search terms are matched literally, never as wildcards. A search shorter than two characters is ignored, as in the app. Each task carries 'isPrivate' from its meeting; that flag is the only signal of privacy, never the title or description.
| Parameter | Type | Required | Description |
|---|---|---|---|
meetingId | string | no | Restrict to tasks on this meeting (GUID format). Mutually exclusive with companyId. |
companyId | integer | no | Restrict to tasks on meetings associated with this company. Mutually exclusive with meetingId. Use list_companies to find company IDs. |
assigneeUserId | integer | no | Restrict to items assigned to this user ID, overriding the caller-only default. Use list_users to find user IDs. |
dealId | integer | no | Restrict to items on meetings associated with this deal. Use list_deals to find deal IDs. |
filter | string | no | Filter by status: Open, Today, Upcoming, or Completed. Defaults to Open. Default: Open. |
dueFrom | string | no | Only include items with a due date on or after this date (ISO 8601 format, e.g. '2025-01-01'). |
dueTo | string | no | Only include items with a due date on or before this date (ISO 8601 format, e.g. '2025-03-31'). A plain date includes the whole day. |
search | string | no | Search task titles and descriptions. |
page | integer | no | Page number, 1-based. Defaults to 1. Default: 1. |
pageSize | integer | no | Items per page. Defaults to 50, maximum 100. Default: 50. |
list_teams
Lists the teams the caller has access to, with id, name and member count, ordered by name. Admins see every team in the account; everyone else sees the teams their own team's meeting and email access covers, which may be more than one. Use the ids for the teamIds filter on list_deals and the teamId filter on list_pipelines.
No parameters.
list_users
Lists all users in the account with their name, email, and team assignment, ordered by name descending. Use this to look up user IDs for filtering in other tools like list_meetings. Returns up to 'pageSize' users (default 50, max 100); paginate with 'page'.
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | Page number, 1-based. Defaults to 1. Default: 1. |
pageSize | integer | no | Users per page. Defaults to 50, maximum is 100. Default: 50. |