Freshsales MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FRESHSALES_DOMAIN | Yes | The host and path in your CRM's browser URL, up to and including /crm/sales, without https://. Example: yourcompany.myfreshworks.com/crm/sales | |
| FRESHSALES_API_KEY | Yes | Your personal Freshsales API key from Settings > API Settings. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_viewsA | List the saved views (filters) available for a module. A view id is required by list_contacts/list_accounts/list_deals/list_leads — call this first to get one (e.g. "All Contacts", "Open Deals", "My Leads"). |
| list_field_choicesA | Look up a field's definition and valid dropdown choices (id -> label) for a module, including custom fields (cf_*). Use this before setting a dropdown/custom_field value you don't already know the id for — e.g. module="deals", field="deal_stage_id". IMPORTANT: for built-in fields (name has no cf_ prefix, e.g. deal_stage_id) pass the numeric id shown. For custom picklist fields (cf_* prefix) pass the label STRING (the "value" column) instead — the numeric id is silently ignored (200 response, no error, no change) for those. |
| list_ownersA | List all CRM users who can own leads/contacts/accounts/deals, with their owner_id. |
| searchC | Unified search across leads, contacts, accounts and deals by name/email/keyword. |
| list_contactsB | List contacts from a saved view. Call list_views(module="contacts") first to get a view_id. |
| view_contactA | View detailed information about a contact. |
| create_contactC | Create a new contact. |
| update_contactC | Update an existing contact. |
| search_contactsC | Search contacts by name/email/keyword. |
| list_accountsA | List accounts (companies) from a saved view. Call list_views(module="sales_accounts") first to get a view_id. |
| view_accountC | View detailed information about an account (company). |
| create_accountC | Create a new account (company). |
| update_accountC | Update an existing account (company). |
| search_accountsC | Search accounts (companies) by name/domain/keyword. |
| list_dealsA | List deals from a saved view. Call list_views(module="deals") first to get a view_id (e.g. "Open Deals", "Won Deals"). |
| view_dealC | View detailed information about a deal. |
| create_dealA | Create a new deal. NOTE: many Freshsales instances mark extra custom (cf_*) fields as required on deal creation, and the create is rejected without them. list_field_choices(module="deals", field=...) reports whether a field is required; pass any required custom fields via custom_field. |
| update_dealC | Update an existing deal (e.g. move to a new stage, change amount/owner). |
| search_dealsC | Search deals by name/keyword. |
| list_leadsA | List leads from a saved view. Call list_views(module="leads") first to get a view_id. |
| view_leadC | View detailed information about a lead. |
| create_leadD | Create a new lead. |
| update_leadC | Update an existing lead. |
| search_leadsC | Search leads by name/email/company/keyword. |
| list_tasksC | List tasks, optionally filtered. |
| create_taskC | Create a task, optionally linked to a contact/account/deal/lead. |
| update_taskB | Update a task, e.g. to reschedule, reassign, or mark it done. The exact accepted "status" value (e.g. "COMPLETED") hasn't been verified against this instance — check the result and adjust if rejected. |
| list_appointmentsC | List appointments/meetings. |
| create_appointmentC | Create an appointment/meeting, optionally linked to a contact/account/deal/lead. |
| create_noteC | Add a note to a contact, account, deal, or lead. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 30 tools
Most tools have clearly distinct purposes based on entity and action (e.g., create_lead, update_deal, search_contacts). However, the unified 'search' tool overlaps with the entity-specific search tools (search_leads, search_contacts, etc.), which could cause some confusion about which to use.
Tools predominantly follow a consistent verb_noun pattern (e.g., list_leads, create_contact, update_account). The only notable deviation is the standalone 'search' tool, which lacks a noun component, but otherwise the naming is predictable.
With 30 tools, the server is on the heavy side for its scope. While the tools are organized by entity, the sheer number (exceeding 25) may overwhelm an agent and increase selection complexity.
Core CRUD operations are covered for leads, contacts, accounts, and deals (create, read, update, list, search), but delete operations are entirely missing for all entities. This is a notable gap in the lifecycle, though agents can still manage most workflows.