freshsales_list_ contact_ statusesList contact statuses — resolve contact_status_id.
Move deals between pipeline stages, update contacts from a saved view, log calls, book appointments, and read the full activity timeline on a contact.
PopMCPFreshsales
Every contact, deal, account, task, appointment, note and selector lookup the connector exposes, plus the changes it can watch for.
freshsales_list_ contact_ statusesList contact statuses — resolve contact_status_id.
freshsales_list_ deal_ pipelinesList deal pipelines — resolve deal_pipeline_id.
freshsales_list_ deal_ stagesList deal stages of the default pipeline — resolve deal_stage_id.
freshsales_list_ lead_ sourcesList lead sources — resolve lead_source_id.
freshsales_list_ ownersList all users (owners) — resolve owner_id / shared_owners values.
freshsales_create_ contactCreate a contact.
freshsales_delete_ contactSoft-delete a contact (moves to recycle bin).
freshsales_get_ contactView a single contact by id.
freshsales_get_ contact_ fieldsList every contact field definition (system + custom), including picklist choices — use to learn valid field names/values before writing.
freshsales_list_ contact_ activitiesList a contact's activity timeline (notes, tasks, appointments, emails, etc.).
freshsales_list_ contact_ viewsList the available contact VIEWS (filters) and their ids.
freshsales_list_ contacts_ by_ viewList contacts in a view (paginated).
freshsales_update_ contactUpdate a contact.
freshsales_create_ dealCreate a deal.
freshsales_get_ dealView a single deal by id.
freshsales_get_ deal_ fieldsList every deal field definition (system + custom) with picklist choices.
freshsales_list_ deal_ viewsList the available deal VIEWS (filters) and their ids.
freshsales_list_ deals_ by_ viewList deals in a view (paginated).
freshsales_update_ dealUpdate a deal (e.g.
freshsales_create_ accountCreate a sales account (company).
freshsales_get_ accountView a single sales account (company) by id.
freshsales_list_ account_ viewsList the available sales-account VIEWS (filters) and their ids.
freshsales_list_ accounts_ by_ viewList sales accounts in a view (paginated).
freshsales_update_ accountUpdate a sales account.
freshsales_create_ sales_ activityLog a sales activity.
freshsales_list_ sales_ activitiesList sales activities (logged interactions).
freshsales_create_ appointmentCreate an appointment.
freshsales_create_ taskCreate a task.
freshsales_list_ appointmentsList appointments.
freshsales_list_ tasksList tasks.
freshsales_update_ taskUpdate a task.
freshsales_create_ noteCreate a note attached to a record.
freshsales_lookupField-scoped lookup — find records where a specific field equals a value (e.g.
freshsales_searchGlobal full-text search across entities.
freshsales_get_ job_ statusPoll the status/progress of an async job.
freshsales_list_ activity_ type_ outcomesList the outcomes available for a specific sales activity type.
freshsales_list_ business_ typesList business types — resolve business_type_id.
freshsales_list_ campaignsList campaigns — resolve campaign_id.
freshsales_list_ currenciesList currencies — resolve currency_id.
freshsales_list_ deal_ payment_ statusesList deal payment statuses — resolve deal_payment_status_id.
freshsales_list_ deal_ productsList deal products — resolve deal_product_id.
freshsales_list_ deal_ reasonsList deal lost/won reasons — resolve deal_reason_id.
freshsales_list_ deal_ typesList deal types — resolve deal_type_id.
freshsales_list_ designationsList team designations.
freshsales_list_ industry_ typesList industry types — resolve industry_type_id.
freshsales_list_ lifecycle_ stagesList lifecycle stages — resolve lifecycle_stage_id.
freshsales_list_ pipeline_ deal_ stagesList the stages of a specific pipeline — resolve deal_stage_id for a non-default pipeline.
freshsales_list_ sales_ activity_ entity_ typesList sales activity entity types.
freshsales_list_ sales_ activity_ outcomesList all sales activity outcomes — resolve sales_activity_outcome_id.
freshsales_list_ sales_ activity_ typesList sales activity types — resolve sales_activity_type_id.
freshsales_list_ territoriesList territories — resolve territory_id.
freshsales_bulk_ assign_ owner_ contactsAssign an owner to many contacts at once (async job).
freshsales_bulk_ delete_ contactsSoft-delete many contacts (async job).
freshsales_bulk_ upsert_ contactsBulk create/update up to 1000 contacts.
freshsales_clone_ contactClone a contact.
freshsales_forget_ contactPermanently delete (GDPR forget) a contact — irreversible.
freshsales_list_ contact_ document_ associationsList the files and links attached to a contact.
freshsales_manage_ contact_ team_ membersAdd/remove shared owners (team members) on a contact.
freshsales_upsert_ contactCreate or update a contact, matched on an unique identifier.
freshsales_bulk_ delete_ dealsSoft-delete many deals (async).
freshsales_bulk_ upsert_ dealsBulk create/update deals.
freshsales_clone_ dealClone a deal.
freshsales_delete_ dealSoft-delete a deal.
freshsales_forget_ dealPermanently delete (forget) a deal — irreversible.
freshsales_manage_ deal_ team_ membersSet the shared owners (team members) on a deal.
freshsales_update_ deal_ productsAdd/replace the line-item products on a deal.
freshsales_upsert_ dealCreate or update a deal matched on an unique identifier.
freshsales_bulk_ delete_ accountsSoft-delete many sales accounts (async).
freshsales_bulk_ upsert_ accountsBulk create/update sales accounts.
freshsales_clone_ accountClone a sales account.
freshsales_delete_ accountSoft-delete a sales account.
freshsales_forget_ accountPermanently delete (forget) a sales account — irreversible.
freshsales_get_ account_ fieldsList every sales-account field definition (system + custom) with picklist choices.
freshsales_manage_ account_ team_ membersSet the shared owners (team members) on a sales account.
freshsales_upsert_ accountCreate or update a sales account matched on an unique identifier.
freshsales_bulk_ assign_ cpq_ documentsBulk-assign an owner to CPQ documents.
freshsales_bulk_ delete_ cpq_ documentsBulk-delete CPQ documents.
freshsales_bulk_ delete_ custom_ module_ recordsBulk soft-delete custom module records.
freshsales_bulk_ restore_ cpq_ documentsBulk-restore CPQ documents.
freshsales_bulk_ update_ cpq_ documentsBulk-update CPQ documents.
freshsales_clone_ custom_ module_ recordClone a custom module record.
freshsales_create_ cpq_ documentCreate a CPQ document (quote).
freshsales_create_ custom_ module_ recordCreate a record in a custom module.
freshsales_create_ module_ customizationCreate a custom module definition (admin).
freshsales_delete_ cpq_ documentSoft-delete a CPQ document.
freshsales_delete_ custom_ module_ recordSoft-delete a custom module record.
freshsales_delete_ module_ customizationDelete a custom module definition (admin).
freshsales_forget_ cpq_ documentPermanently delete (forget) a CPQ document — irreversible.
freshsales_forget_ custom_ module_ recordPermanently delete (forget) a custom module record — irreversible.
freshsales_get_ cpq_ documentView a CPQ document by id.
freshsales_get_ cpq_ document_ related_ productsGet the products related to a CPQ document.
freshsales_get_ custom_ module_ records_ by_ viewFetch records from a specific view in a custom module.
freshsales_get_ module_ customizationGet a custom module definition.
freshsales_restore_ cpq_ documentRestore a deleted CPQ document.
freshsales_update_ cpq_ documentUpdate a CPQ document.
freshsales_update_ custom_ module_ recordUpdate a custom module record.
freshsales_update_ module_ customizationUpdate a custom module definition (admin).
freshsales_bulk_ assign_ productsBulk-assign an owner to products.
freshsales_bulk_ delete_ productsBulk-delete products.
freshsales_bulk_ restore_ productsBulk-restore deleted products.
freshsales_bulk_ update_ productsBulk-update products (async).
freshsales_create_ productCreate a product.
freshsales_delete_ productDelete a product.
freshsales_get_ productView a product by id.
freshsales_restore_ productRestore a deleted product.
freshsales_update_ productUpdate a product (wrapped under "product").
freshsales_add_ contacts_ to_ listAdd/copy contacts into a list.
freshsales_create_ listCreate a marketing list (wrapped under "list").
freshsales_get_ list_ contactsFetch all contacts in a marketing list.
freshsales_list_ listsFetch all marketing lists.
freshsales_move_ contacts_ between_ listsMove contacts from one list to another.
freshsales_remove_ contacts_ from_ listRemove contacts from a list.
freshsales_update_ listRename/update a marketing list (wrapped under "list").
freshsales_delete_ sales_ activityDelete a sales activity.
freshsales_get_ sales_ activityView a single sales activity by id.
freshsales_get_ sales_ activity_ fieldsList sales-activity field definitions (system + custom).
freshsales_update_ sales_ activityUpdate a sales activity (e.g.
freshsales_delete_ appointmentDelete an appointment.
freshsales_delete_ taskDelete a task.
freshsales_get_ appointmentView a single appointment by id.
freshsales_get_ taskView a single task by id.
freshsales_update_ appointmentUpdate an appointment.
freshsales_delete_ noteDelete a note.
freshsales_update_ noteUpdate a note's text (wrapped under "note").
freshsales_create_ document_ linkAttach a URL link to a record.
freshsales_create_ phone_ callLog a manual phone call.
freshsales_get_ module_ form_ fieldsList all fields in a module's form (use for custom modules).
Credentials off one Freshsales screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
Paste your Freshsales domain and API key into the connect form. Authentication runs server-side over HTTPS, with no OAuth popup and no re-auth later. The key is scoped to one account, so the server is too.
your-company.myfreshworks.com••••••••••••3f7aPick read-only for reporting or full access for writes, and turn on the full catalog when you need the long tail. Require approval so soft-deleting a contact or reassigning a deal owner waits for a person.
Drop the PopMCP URL into Claude, ChatGPT, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Freshsales credential never leaves the server.
app.popmcp.com/mcp/…Ask for something harmless before you turn writes on. Once it comes back clean, widen the tool set or switch the connection to full access.
Show me every deal in the Committed view and who owns each one
freshsales_list_deal_viewsok
Then just ask for the work
“Show me every deal in the Committed view and who owns each one”
“Move all deals in my Q3 Renewals view to the Negotiation stage”
“Log yesterday's discovery call on Acme and book a follow-up for Friday”
“Which open deals have no task or appointment scheduled against them”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Freshsales behind an AI client.
Two things: your Freshsales domain and an API key. You paste both into the connect form, and authentication happens server-side over HTTPS, so there is no OAuth popup and nothing to re-authorize later. The connection works the moment it is saved.
Yes. The same API key connects Freshsales, Freshsales Suite and Freshworks CRM accounts. Coverage spans contacts, sales accounts, deals and products, tasks, appointments, notes, sales activities and call logs, CPQ products and documents, marketing lists, and global search.
Two ways. `search` runs a global full-text search across entities, which is what you want for a vague "find the Acme contact" request, while `lookup` is field-scoped and matches a specific field against an exact value, such as an email address. Once it has an id, `get_contact`, `get_deal` or `get_account` pull the full record.
Because the Freshsales API writes by id, not by label. The selector tools exist to resolve those ids first: `list_deal_stages` and `list_deal_pipelines` for stage moves, `list_owners` for assignment, `list_lead_sources`, `list_contact_statuses` and `list_currencies` for the rest. Expect an extra read call before a write that references one of those fields.
Yes. `get_contact_fields` and `get_deal_fields` return every field definition, system and custom, including the valid picklist choices, so the agent can check a value before it writes it. Custom modules have their own set of operations alongside the standard objects.
Deletes are soft: `delete_contact` moves the record to the recycle bin rather than removing it outright. Views come back paginated, so `list_contacts_by_view`, `list_deals_by_view` and `list_accounts_by_view` page through large result sets instead of pulling everything at once, and longer-running work runs as an async job the agent polls with `get_job_status`.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server — Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Loading 127 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 35-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. You can switch a connection to the full catalog at any time.
A tool is something your AI calls — there are 127 here. A trigger is something PopMCP watches for you: 12 Freshsales events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Freshsales.
Launch a hosted MCP endpoint for Freshsales, keep tool access under control, and start testing real workflow prompts right away.