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 + Microsoft Copilot
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 Microsoft Copilot
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.
Microsoft Copilot uses MCP servers through agents built in Copilot Studio: you add AnythingMCP to an agent as a tool, then publish the agent to Microsoft 365 Copilot and Teams. Copilot Studio connects from Microsoft's cloud over Streamable HTTP, which AnythingMCP supports.
- In Copilot Studio, open your agent (or create one), go to Tools and choose Add a tool → New tool → Model Context Protocol.
- Enter a Server name (for example
AnythingMCP), a Server description that says what the connector does, and the Server URLhttps://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID. Copilot Studio uses the description to decide when to call the server. - Under authentication, choose API key, set Type to Header and the header name to
X-API-Key, then select Create. - In Add tool, choose Create a new connection, paste an MCP API key from AnythingMCP (MCP Servers → your server → API keys) and select Add to agent.
- Try it in the agent's Test pane: ask for something that needs the
Freshsalestools. - Select Publish, then Channels → Microsoft 365 and Microsoft Teams, keep Make agent available in Microsoft Copilot selected and choose Add channel. See agent in Teams installs it for you; in Microsoft 365 Copilot, type @ and pick the agent.
Prefer per-user sign-in? Choose OAuth 2.0 → Dynamic discovery instead of an API key: each user then signs in to AnythingMCP the first time the agent calls it.
Self-hosting? Use your instance's public HTTPS address instead of https://cloud.anythingmcp.com. Copilot Studio connects from Microsoft's cloud, so localhost does not work.
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
Which Copilot is this for? Microsoft 365 Copilot at work, through agents built in Copilot Studio. The Microsoft Copilot app for personal accounts has no option to add your own MCP server.
What do I need? A work account with access to Copilot Studio (a license or a trial) to build the agent. People who use it in Microsoft 365 Copilot or Teams need access to the agent: share it with them, or ask an admin to publish it to the organization. If your organization applies data policies to Power Platform connectors, they cover MCP servers too.
The agent doesn't call the tools. Check that the header name is exactly X-API-Key and that the key belongs to the same MCP server as the URL, and make the server description specific: Copilot Studio uses it to decide when to call the server. Publish the agent again after each change; in an open chat, type "start over" to get the new version.
Next steps
- Connector landing page
- Connect to Claude
- Connect to ChatGPT
- Connect to Cursor
- Connect to Gemini
- Connect to Meta Muse
Was this guide helpful?