Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Freshsales in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Freshsales (Freshworks CRM) from any AI agent: search and filter contacts, accounts and deals, move deals through pipeline stages, add notes, plan tasks and appointments, log sales activities and manage marketing lists. Works with a per-user API key and the bundle URL of your account.
Try asking
Example prompts for Freshsales
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Freshsales, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Freshsales + Cursor
Freshsales (Freshworks CRM) from any AI agent: search and filter contacts, accounts and deals, move deals through pipeline stages, add notes, plan tasks and appointments, log sales activities and manage marketing lists. Works with a per-user API key and the bundle URL of your account.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
FRESHSALES_BUNDLE_URL, FRESHSALES_API_KEY
Step 1 — Get credentials
Setting up takes about 2 minutes. You need a Freshsales (Freshworks CRM) account.
- In Freshsales click your profile picture, then Profile Settings, and open the API Settings tab.
- Copy Your API key into
FRESHSALES_API_KEY. The connector sends it asAuthorization: Token token=<key>, so paste only the key. - On the same tab copy the bundle alias (the address of your account) into
FRESHSALES_BUNDLE_URL, for examplehttps://acme.myfreshworks.com/crm/sales. Accounts created before the Freshworks suite usehttps://acme.freshsales.io. Leave out/apiand any trailing slash. - Install the connector and run
freshsales_list_owners: it lists the users of the portal and confirms key and address.
Every call acts with the permissions of the user whose key is set: records outside that user's scope stay invisible. Use the key of a user who sees the data the team needs.
Start here: freshsales_list_owners gives the user ids used as owner_id. freshsales_list_selector reads a picklist (territories, pipelines and stages, currencies, deal types and reasons, lead sources, industry and business types, campaigns, contact statuses, lifecycle stages, sales activity types and outcomes) and returns the ids to use when writing. freshsales_list_pipeline_stages gives the stages of one pipeline. freshsales_list_fields lists the fields of contacts, accounts, deals or sales activities, including custom fields: their internal names start with cf_ and go in custom_field.
Finding records:
freshsales_search: text search by name or email across contacts, accounts, deals and users.includetakes the singular namescontact,sales_account,dealanduser; a plural returns nothing.freshsales_lookup: exact match on one field, for example contacts by email, or contacts, accounts and deals by name or a custom field value.freshsales_filtered_search: rules on fields (exact matches, ranges, lists), returning full records.- Lists always go through a saved view:
freshsales_list_viewsgives the view ids (for example "All Contacts" or "My Deals"), thenfreshsales_list_contacts,freshsales_list_accountsorfreshsales_list_dealsread the view with sorting.
Contacts, accounts and deals: freshsales_get_contact, freshsales_get_account and freshsales_get_deal read one record and embed related records with include (for example sales_accounts,deals,notes). freshsales_list_contact_activities shows the timeline of a contact (emails, calls, notes, field changes, web visits). To write, the AI uses freshsales_create_contact (at least an email or a last name), freshsales_update_contact, freshsales_upsert_contact (create or update by email or another unique field), freshsales_create_account (unique name), freshsales_update_account, freshsales_create_deal (name and amount are required) and freshsales_update_deal. A deal moves when deal_stage_id is set to a stage of its pipeline; won and lost are stages too, and a lost deal can carry a deal_reason_id. Updates change only the fields passed.
Notes, tasks, appointments and activities are attached to a record with targetable_type (Contact, SalesAccount or Deal) and targetable_id:
- Notes:
freshsales_create_note,freshsales_update_note. - Tasks:
freshsales_list_tasks(one filter per call:open,due_today,due_tomorrow,overdueorcompleted),freshsales_get_task,freshsales_create_task,freshsales_update_task,freshsales_complete_task. - Appointments:
freshsales_list_appointments(openfor upcoming,pastfor past ones; older portals useupcoming),freshsales_get_appointment,freshsales_create_appointment,freshsales_update_appointment. Attendees are users (FdMultitenant::User) or contacts (Contact). - Sales activities such as logged calls and visits:
freshsales_list_sales_activities,freshsales_get_sales_activity,freshsales_create_sales_activity.
Marketing lists: freshsales_list_marketing_lists, freshsales_list_marketing_list_contacts, freshsales_add_contacts_to_list and freshsales_remove_contacts_from_list (the contacts themselves are kept).
Leads: current Freshsales accounts keep prospects as contacts with a lifecycle stage; there is no separate leads module. The AI filters contacts by lifecycle stage through a view or freshsales_filtered_search.
Switched off at install: nothing. The connector has no delete tools, so it cannot remove contacts, accounts, deals, notes, tasks or appointments. Creating and updating records changes your live CRM, so ask the AI to show the fields before it saves.
Data formats: timestamps come back in UTC or with an offset (2026-02-13T23:27:49Z). Date inputs accept YYYY-MM-DD or ISO 8601; without a zone UTC is assumed. Amounts are in the currency of the deal; base_currency_amount is converted to the portal currency. Blank fields are null. Records embedded with include arrive in separate top-level arrays (users, sales_accounts, deals) next to the record, linked by id.
Paging: lists take page (from 1) and per_page (default 25, at most 100) and return meta.total_pages and meta.total. freshsales_search returns 10 results by default, at most 100.
Limits and common errors: 1000 requests per hour per account; above that Freshsales answers 429. 401 means a wrong or missing key, 403 that the user lacks the permission or the feature is not on the plan, 404 a wrong id or a wrong bundle URL. Validation errors return 400 with errors.message.
The connector does not delete records, does not send emails and does not change portal settings, fields or pipelines.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Cursor
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Cursor reads MCP servers from ~/.cursor/mcp.json. Add this entry:
{
"mcpServers": {
"anythingmcp": {
"url": "https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID",
"headers": { "X-API-Key": "YOUR_MCP_API_KEY" }
}
}
}
- Create an MCP API key in AnythingMCP under MCP Servers → your server → API keys, and paste it in place of
YOUR_MCP_API_KEY. - Save the file and restart Cursor.
- Open Cursor → Settings → MCP and check that
anythingmcpis listed and connected. - Start chatting: the agent can now call the
Freshsalestools.
Available tools
| Tool | What it does |
|---|---|
freshsales_list_owners | List the users of the Freshsales portal (id, name, email) |
freshsales_list_selector | List the values of a configuration picklist: territories, deal stages and pipelines, currencies, deal reasons and types, lead sources… |
freshsales_list_pipeline_stages | List the stages of one deal pipeline (id, name, position) |
freshsales_list_fields | List the fields of a module, including custom fields (internal name cf_..., label, type, choices) |
freshsales_list_views | List the saved views (filters) of contacts, accounts or deals, with their ids |
freshsales_list_contacts | List the contacts of a view, 25 per page by default, with sorting |
freshsales_get_contact | Get one contact with all fields, optionally embedding owner, accounts, deals, tasks, appointments, notes and sales activities |
freshsales_list_contact_activities | List the activity timeline of a contact: emails, calls, notes, field changes, web visits |
freshsales_create_contact | Create a contact |
freshsales_update_contact | Update a contact |
freshsales_upsert_contact | Create or update a contact matched by a unique field (usually the email): updates the existing contact, or creates it when none matches |
freshsales_list_accounts | List the accounts (companies) of a view, 25 per page by default |
freshsales_get_account | Get one account with all fields, optionally embedding owner, contacts, deals, tasks, appointments and notes |
freshsales_create_account | Create an account (company). name is required and must be unique |
freshsales_update_account | Update an account (company): name, address, owner, industry, custom fields |
freshsales_list_deals | List the deals of a view, 25 per page by default |
freshsales_get_deal | Get one deal with all fields, optionally embedding account, contacts, stage, pipeline, products, tasks and notes |
freshsales_create_deal | Create a deal. name and amount are required; link it to an account with sales_account_id and to contacts with contacts_added_list |
freshsales_update_deal | Update a deal: amount, stage (deal_stage_id moves it through the pipeline, including won and lost stages), close date, owner, linked… |
freshsales_create_note | Add a note to a contact, account or deal |
freshsales_update_note | Change the text of an existing note on a contact, account or deal |
freshsales_list_tasks | List tasks by status: open, due today, due tomorrow, overdue or completed |
freshsales_get_task | Get one task with its owner, collaborators and linked record |
freshsales_create_task | Create a task on a contact, account or deal. title, due_date, owner_id, targetable_type and targetable_id are required |
freshsales_update_task | Update a task: title, description, due date, owner, linked record or collaborators |
freshsales_complete_task | Mark a task as done (status completed) |
freshsales_list_appointments | List appointments (meetings), upcoming or past, with attendees and linked records |
freshsales_get_appointment | Get one appointment with its time, location, attendees and linked contact, account or deal |
freshsales_create_appointment | Schedule an appointment (meeting) with a contact, account or deal, with attendees. title, from_date and end_date are required |
freshsales_update_appointment | Reschedule or edit an appointment |
freshsales_list_sales_activities | List logged sales activities (calls, meetings, custom activity types), newest first |
freshsales_get_sales_activity | Get one logged sales activity with its type, outcome, times, notes and linked record |
freshsales_create_sales_activity | Log a sales activity (for example a call or visit) on a contact, account or deal. title, sales_activity_type_id, start_date, end_date… |
freshsales_search | Full-text search by name or email across contacts, accounts, deals and users |
freshsales_lookup | Exact-match lookup on one field: find contacts by email, or contacts, accounts or deals by name or a custom field value |
freshsales_filtered_search | Filter contacts, accounts or deals by field rules (exact matches, ranges, lists), e.g. contacts whose email is in a list |
freshsales_list_marketing_lists | List the marketing lists (static contact lists) with their ids |
freshsales_list_marketing_list_contacts | List the contacts of a marketing list, 25 per page by default |
freshsales_add_contacts_to_list | Add existing contacts to a marketing list by their contact ids |
freshsales_remove_contacts_from_list | Remove contacts from a marketing list |
Example prompts
- "Find the contact [email protected] and show me her open deals and the latest notes on her record."
- "List my open deals that are expected to close this month, with amount and stage."
- "Move the Acme renewal deal to the Negotiation stage and add a note that the quote was sent."
- "Which of my tasks are overdue? Group them by the linked account."
- "Log a 30-minute call with Tom Becker for today and create a follow-up task for next Tuesday at 10:00."
FAQ
Does Cursor support custom MCP servers on the free tier? Yes, MCP is available on Hobby, Pro and Business plans.
Next steps
- Connector landing page
- Connect to Claude
- Connect to ChatGPT
- Connect to Gemini
- Connect to Meta Muse
- Connect to Microsoft Copilot
Was this guide helpful?