Freshdesk
Arcade.dev LLM tools for Freshdesk customer support
0.1.1Freshdesk is a customer support platform; this toolkit lets LLM agents read and write Freshdesk data — tickets, contacts, companies, agents, groups, and the knowledge base — without a human clicking through the UI.
Capabilities
- Ticket lifecycle — create, read, update, merge, reply publicly, and add private internal notes to tickets; search the queue by status, priority, requester, agent, group, tag, type, or recency.
- Contact & company management — create or update contacts and company accounts; search and retrieve individual records; handle stale or missing IDs gracefully via not-found envelopes rather than hard errors.
- Customer context assembly — retrieve a requester's contact record, company, and full ticket history in a single call (
GetCustomerOverview) instead of three separate lookups. - Routing support — list agents (filterable by email) and groups to assign or escalate tickets to the right team.
- Knowledge base — search published solution articles by term and read full article content by ID.
- Account verification — confirm the active API key and connected domain with
WhoAmI.
Secrets
This toolkit requires two secrets configured in Arcade:
-
FRESHDESK_API_KEY— A per-agent or per-account API key that authenticates all requests. Obtain it from your Freshdesk portal: go to Profile Settings → API Key (top-right avatar menu). The key is scoped to the permissions of the agent account it belongs to; use an admin account's key if the toolkit needs to manage agents, groups, or perform bulk operations. See Freshdesk API authentication docs for details. -
FRESHDESK_DOMAIN— Your Freshdesk subdomain (e.g.,yourcompanyif your helpdesk URL ishttps://yourcompany.freshdesk.com). This is not a credential but must be supplied so the toolkit knows which Freshdesk instance to target. Find it in the address bar when logged into your Freshdesk account.
Configure both secrets in the Arcade dashboard or via the Arcade secrets API. See the Arcade secrets guide and manage secrets at https://api.arcade.dev/dashboard/auth/secrets.
Available tools(19)
| Tool name | Description | Secrets | |
|---|---|---|---|
Add an internal private note to a ticket that the requester cannot see. | 2 | ||
Create a new company account or update an existing one. To create, omit company_id and
provide a name; link a contact to the result by passing its id as a contact's company. | 2 | ||
Create a new contact or update an existing one. To create, omit contact_id and
provide a name plus at least one of email, phone, or mobile. | 2 | ||
Open a ticket on a customer's behalf. Requires a subject, a description, and a
requester identified by email or id. | 2 | ||
Read a single knowledge base article's full content by id.
A missing id returns a not-found envelope (``found`` false) rather than raising, so a
stale or guessed id can be recovered from within the same turn. | 2 | ||
Read a single company's details by id.
A missing id returns a not-found envelope (``found`` false) rather than raising, so a
stale or guessed id can be recovered from within the same turn. | 2 | ||
Read a single contact's details by id.
A missing id returns a not-found envelope (``found`` false) rather than raising, so a
stale or guessed id can be recovered from within the same turn. | 2 | ||
Assemble one requester's full context — their contact record, their company, and their
tickets — in a single call instead of three separate lookups.
Identify the requester by contact_id or email; a missing requester returns a not-found
envelope rather than raising, so a stale id or wrong email can be recovered in the same turn. | 2 | ||
Read a ticket together with its full public-reply and private-note history.
A missing id returns a not-found envelope (``found`` false) rather than raising, so a
stale or guessed id can be recovered from within the same turn. | 2 | ||
List the helpdesk's agents, optionally filtered to one email, for routing tickets. | 2 | ||
List the helpdesk's groups for routing tickets to a team. | 2 | ||
Merge duplicate tickets into one. Use this to consolidate related tickets from the same
requester so the conversation lives in a single place; the secondary tickets are closed. | 2 | ||
Post a public reply on a ticket that the requester can see. | 2 | ||
Search the knowledge base for published solution articles matching a term. | 2 | ||
Find companies by name. Match is by name prefix; use the full name for an exact hit.
Returns lightweight summaries without the company note; read a single company by id for
its full detail. | 2 | ||
Find contacts by name, exact email, or company. With no filters, returns recent
contacts.
Combining a name with a company scans up to the company's first 1000 contacts and matches the
name among them; at a company with more contacts than that, a name match recorded beyond the
scan may not appear. | 2 | ||
Find tickets in the queue by status, priority, requester, agent, group, tag,
type, or recency. With no filters, returns the most recently updated tickets.
Pass requester_id (or requester_email) to pull one customer's full ticket history;
other filters then refine that requester's tickets. A just-created ticket may take a
moment to appear here while Freshdesk indexes it. | 2 | ||
Change a ticket's status, priority, assignee, or group. Fields left unset are
unchanged; at least one field must be provided. | 2 | ||
Return the authenticated Freshdesk agent's profile.
Use this to verify the configured API key and confirm which Freshdesk account
(domain) the tools are connected to; it is not a required preamble to the other tools. | 2 |
Selected tools
No tools selected.
Click "Show all tools" to add tools.
Requirements
Select tools to see requirements
Freshdesk.AddPrivateNote
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Add an internal private note to a ticket that the requester cannot see.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticket_id | integer | Required | The ticket to annotate. |
body | string | Required | The internal note text. Not visible to the requester. |
notify_agent_emails | array<string> | Optional | Agent emails to notify about the note. Defaults to notifying no one. |
Requirements
Output
json— Confirmation referencing the created private note.Freshdesk.CreateOrUpdateCompany
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Create a new company account or update an existing one. To create, omit company_id and provide a name; link a contact to the result by passing its id as a contact's company.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
company_id | integer | Optional | Id of the company to update. Omit to create a new company instead. |
name | string | Optional | Company name. When creating, this is required and must be unique. When updating, providing it renames the company and omitting it leaves the name unchanged. |
domains | array<string> | Optional | Email domains owned by the company, used to auto-associate new contacts. Providing this replaces the existing list; omitting it leaves the domains unchanged. |
note | string | Optional | Free-text account note. Providing it sets the note; omitting it leaves it unchanged. |
Requirements
Output
json— The created or updated company.Freshdesk.CreateOrUpdateContact
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Create a new contact or update an existing one. To create, omit contact_id and provide a name plus at least one of email, phone, or mobile.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
contact_id | integer | Optional | Id of the contact to update. Omit to create a new contact instead. |
name | string | Optional | Contact name. When creating, this is required. When updating, providing it changes the name and omitting it leaves the name unchanged. |
email | string | Optional | Contact email. Providing it sets the email; omitting it leaves it unchanged. |
phone | string | Optional | Contact phone. Providing it sets the phone; omitting it leaves it unchanged. |
mobile | string | Optional | Contact mobile. Providing it sets the mobile; omitting it leaves it unchanged. |
company_id | integer | Optional | Company to associate the contact with. Omitting it leaves it unchanged. |
job_title | string | Optional | Contact job title. Providing it sets the title; omitting it leaves it unchanged. |
Requirements
Output
json— The created or updated contact.Freshdesk.CreateTicket
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Open a ticket on a customer's behalf. Requires a subject, a description, and a requester identified by email or id.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
subject | string | Required | The ticket subject line. |
description | string | Required | The ticket's first-message body. Plain text or HTML. |
requester_email | string | Optional | Email of the contact the ticket is for. Provide this or requester_id. Leave empty when using requester_id. |
requester_id | integer | Optional | Id of an existing contact the ticket is for. Provide this or requester_email. |
status | string | Optional | Initial status. Defaults to OPEN.openpendingresolvedclosed |
priority | string | Optional | Initial priority. Defaults to MEDIUM.lowmediumhighurgent |
group_id | integer | Optional | Group to assign the new ticket to. Defaults to unassigned. |
agent_id | integer | Optional | Agent to assign as owner. Defaults to unassigned. |
Requirements
Output
json— The created ticket with its conversation.Freshdesk.GetArticle
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Read a single knowledge base article's full content by id. A missing id returns a not-found envelope (``found`` false) rather than raising, so a stale or guessed id can be recovered from within the same turn.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
article_id | integer | Required | The article's unique identifier. |
Requirements
Output
json— The article's full content, or a not-found envelope.Freshdesk.GetCompany
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Read a single company's details by id. A missing id returns a not-found envelope (``found`` false) rather than raising, so a stale or guessed id can be recovered from within the same turn.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
company_id | integer | Required | The company's unique identifier. |
Requirements
Output
json— The company's full detail, or a not-found envelope.Freshdesk.GetContact
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Read a single contact's details by id. A missing id returns a not-found envelope (``found`` false) rather than raising, so a stale or guessed id can be recovered from within the same turn.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
contact_id | integer | Required | The contact's unique identifier. |
Requirements
Output
json— The contact's full detail, or a not-found envelope.Freshdesk.GetCustomerOverview
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Assemble one requester's full context — their contact record, their company, and their tickets — in a single call instead of three separate lookups. Identify the requester by contact_id or email; a missing requester returns a not-found envelope rather than raising, so a stale id or wrong email can be recovered in the same turn.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
contact_id | integer | Optional | Id of the requester to profile. Takes precedence over email. Omit to look up by email. |
email | string | Optional | Exact email of the requester to profile. Used only when contact_id is omitted. |
include_closed | boolean | Optional | Include resolved and closed tickets too (true) or only open and pending ones (false). Defaults to false. |
ticket_limit | integer | Optional | Maximum tickets to return (1-100). Defaults to 20. |
Requirements
Output
json— The requester's contact, company, and tickets in one envelope.Freshdesk.GetTicket
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Read a ticket together with its full public-reply and private-note history. A missing id returns a not-found envelope (``found`` false) rather than raising, so a stale or guessed id can be recovered from within the same turn.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticket_id | integer | Required | The ticket's unique identifier. |
Requirements
Output
json— The ticket with its conversation, or a not-found envelope.Freshdesk.ListAgents
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
List the helpdesk's agents, optionally filtered to one email, for routing tickets.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
email | string | Optional | Exact email to find a single agent by. Leave empty to list all agents. |
limit | integer | Optional | Maximum agents to return (1-100). Defaults to 50. |
offset | integer | Optional | 0-indexed starting position. Defaults to 0. |
Requirements
Output
json— Helpdesk agents with pagination metadata.Freshdesk.ListGroups
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
List the helpdesk's groups for routing tickets to a team.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
limit | integer | Optional | Maximum groups to return (1-100). Defaults to 50. |
offset | integer | Optional | 0-indexed starting position. Defaults to 0. |
Requirements
Output
json— Helpdesk groups with pagination metadata.Freshdesk.MergeTickets
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Merge duplicate tickets into one. Use this to consolidate related tickets from the same requester so the conversation lives in a single place; the secondary tickets are closed.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
primary_ticket_id | integer | Required | The ticket that survives the merge and absorbs the others. |
secondary_ticket_ids | array<integer> | Required | Ids of the duplicate tickets to fold into the primary. Each is closed and its conversation linked into the primary ticket. |
note | string | Optional | Internal note added to the primary ticket recording the merge. Leave empty to add no note. |
Requirements
Output
json— Confirmation of the merge.Freshdesk.ReplyToTicket
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Post a public reply on a ticket that the requester can see.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticket_id | integer | Required | The ticket to reply to. |
body | string | Required | The public reply text the requester will see. Plain text or HTML. |
Requirements
Output
json— Confirmation referencing the created public reply.Freshdesk.SearchArticles
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Search the knowledge base for published solution articles matching a term.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
term | string | Required | The keyword or phrase to search published articles for. |
limit | integer | Optional | Maximum articles to return (1-100). Defaults to 20. |
offset | integer | Optional | 0-indexed starting position. Defaults to 0. |
Requirements
Output
json— Matching published articles with pagination metadata.Freshdesk.SearchCompanies
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Find companies by name. Match is by name prefix; use the full name for an exact hit. Returns lightweight summaries without the company note; read a single company by id for its full detail.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
query | string | Required | Name or name prefix to match companies by. The name autocomplete requires at least 2 characters; a single-character query returns no matches rather than an error. |
limit | integer | Optional | Maximum companies to return (1-100). Defaults to 20. |
offset | integer | Optional | 0-indexed starting position. Defaults to 0. |
Requirements
Output
json— Matching companies with pagination metadata.Freshdesk.SearchContacts
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Find contacts by name, exact email, or company. With no filters, returns recent contacts. Combining a name with a company scans up to the company's first 1000 contacts and matches the name among them; at a company with more contacts than that, a name match recorded beyond the scan may not appear.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
query | string | Optional | Name or name prefix to match contacts by. Leave empty to not filter by name. The name autocomplete requires at least 2 characters; a single-character query returns no matches rather than an error. |
email | string | Optional | Exact email to look up a contact by. Leave empty to not filter by email. |
company_id | integer | Optional | Only include contacts at this company. Defaults to no filter. |
limit | integer | Optional | Maximum contacts to return (1-100). Defaults to 20. |
offset | integer | Optional | 0-indexed starting position. Defaults to 0. |
Requirements
Output
json— Matching contacts with pagination metadata.Freshdesk.SearchTickets
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Find tickets in the queue by status, priority, requester, agent, group, tag, type, or recency. With no filters, returns the most recently updated tickets. Pass requester_id (or requester_email) to pull one customer's full ticket history; other filters then refine that requester's tickets. A just-created ticket may take a moment to appear here while Freshdesk indexes it.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
status | string | Optional | Only include tickets with this status. Defaults to no filter.openpendingresolvedclosed |
priority | string | Optional | Only include tickets with this priority. Defaults to no filter.lowmediumhighurgent |
requester_email | string | Optional | Only include tickets opened by the contact with this email. Leave empty for no filter. Ignored when requester_id is given. |
requester_id | integer | Optional | Only include tickets opened by the contact with this id. Takes precedence over requester_email. Defaults to no filter. |
agent_id | integer | Optional | Only include tickets assigned to this agent. Defaults to no filter. |
group_id | integer | Optional | Only include tickets in this group. Defaults to no filter. |
tag | string | Optional | Only include tickets carrying this tag. Leave empty for no filter. |
ticket_type | string | Optional | Only include tickets of this type. Leave empty for no filter. |
updated_since | string | Optional | Only include tickets updated on or after this date (YYYY-MM-DD). Leave empty for no lower bound. |
limit | integer | Optional | Maximum tickets to return (1-100). Defaults to 20. |
offset | integer | Optional | 0-indexed starting position. Defaults to 0. |
Requirements
Output
json— Matching tickets, newest first, with pagination metadata.Freshdesk.UpdateTicket
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Change a ticket's status, priority, assignee, or group. Fields left unset are unchanged; at least one field must be provided.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticket_id | integer | Required | The ticket to update. |
status | string | Optional | New status. Omit to leave the status unchanged.openpendingresolvedclosed |
priority | string | Optional | New priority. Omit to leave the priority unchanged.lowmediumhighurgent |
agent_id | integer | Optional | Agent to assign as owner. Omit to leave the assignee unchanged. |
group_id | integer | Optional | Group to move the ticket to. Omit to leave the group unchanged. |
Requirements
Output
json— The updated ticket with its conversation.Freshdesk.WhoAmI
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Return the authenticated Freshdesk agent's profile. Use this to verify the configured API key and confirm which Freshdesk account (domain) the tools are connected to; it is not a required preamble to the other tools.
Parameters
No parameters required.
Requirements
Output
json— The authenticated agent's identity and connected account.