Freshdesk MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.4 · published by io.usefulapi
Read tickets, contacts, companies, agents and groups; create, update and reply to tickets.
19 tools: 7 can delete or cancel things and 12 only read.
Scanned Oct 22, 2026
- Deletes or cancels7Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads12Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http freshdesk https://freshdesk.usefulapi.io/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
19 tools
Deletes or cancels 7Claude Code: deny
freshdesk_add_noteAdd a note to a ticket.No findings
Why it is in this group
- The name "freshdesk_add_note" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Add a note to a ticket. Notes are internal (private) by default; set `private: false` for a public note. Freshdesk REST: POST /tickets/{id}/notes.
Annotations the server declares
- title: Add note to ticket
- destructiveHint: true
freshdesk_create_companyCreate a company.No findings
Why it is in this group
- The name "freshdesk_create_company" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a company. `name` is required. Freshdesk REST: POST /companies.
Annotations the server declares
- title: Create company
- destructiveHint: true
freshdesk_create_contactCreate a contact.No findings
Why it is in this group
- The name "freshdesk_create_contact" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a contact. `name` is required. Freshdesk REST: POST /contacts.
Annotations the server declares
- title: Create contact
- destructiveHint: true
freshdesk_create_ticketCreate a ticket.No findings
Why it is in this group
- The name "freshdesk_create_ticket" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a ticket. `subject` and `description` (HTML) are required, plus a requester — provide at least one of `email`, `requester_id`, or `phone`. status: 2=Open, 3=Pending, 4=Resolved, 5=Closed. priority: 1=Low, 2=Medium, 3=High, 4=Urgent. source: 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedbackwidget, 10=Outbound email. Freshdesk REST: POST /tickets.
Annotations the server declares
- title: Create ticket
- destructiveHint: true
freshdesk_reply_ticketAdd a public reply to a ticket (sent to the requester).Can send data outNo findings
Why it is in this group
- The name "freshdesk_reply_ticket" says "reply": a word for sending, and what is sent cannot be taken back.
- The server marks it destructive (destructiveHint: true).
What it can reach
- outboundThe name "freshdesk_reply_ticket" says "reply": it sends or publishes something to other people.
Description, as the server wrote it Add a public reply to a ticket (sent to the requester). Freshdesk REST: POST /tickets/{id}/reply.
Annotations the server declares
- title: Reply to ticket
- destructiveHint: true
freshdesk_update_contactUpdate fields on an existing contact.No findings
Why it is in this group
- The name "freshdesk_update_contact" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Update fields on an existing contact. Only provided fields are changed. Freshdesk REST: PUT /contacts/{id}.
Annotations the server declares
- title: Update contact
- destructiveHint: true
freshdesk_update_ticketUpdate fields on an existing ticket.No findings
Why it is in this group
- The name "freshdesk_update_ticket" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Update fields on an existing ticket. Only provided fields are changed. status: 2=Open, 3=Pending, 4=Resolved, 5=Closed. priority: 1=Low, 2=Medium, 3=High, 4=Urgent. Freshdesk REST: PUT /tickets/{id}.
Annotations the server declares
- title: Update ticket
- destructiveHint: true
Only reads 12Claude Code: allow
freshdesk_get_agentGet a single agent by id.No findings
Why it is in this group
- The name "freshdesk_get_agent" says "get": a word for reading.
Description, as the server wrote it Get a single agent by id. Freshdesk REST: GET /agents/{id}.
Annotations the server declares
- title: Get agent
- readOnlyHint: true
freshdesk_get_companyGet a single company by id.No findings
Why it is in this group
- The name "freshdesk_get_company" says "get": a word for reading.
Description, as the server wrote it Get a single company by id. Freshdesk REST: GET /companies/{id}.
Annotations the server declares
- title: Get company
- readOnlyHint: true
freshdesk_get_contactGet a single contact by id.Reads private dataNo findings
Why it is in this group
- The name "freshdesk_get_contact" says "get": a word for reading.
What it can reach
- private-dataThe name "freshdesk_get_contact" says "get" and "contact": it reads contacts.
- private-dataThe description's first sentence says "get" and "contact": it reads contacts.
Description, as the server wrote it Get a single contact by id. Freshdesk REST: GET /contacts/{id}.
Annotations the server declares
- title: Get contact
- readOnlyHint: true
freshdesk_get_ticketGet a single ticket by id.Reads text others writeNo findings
Why it is in this group
- The name "freshdesk_get_ticket" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "freshdesk_get_ticket" says "get" and "ticket": it reads issues, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "ticket": it reads issues, which other people can write.
Description, as the server wrote it Get a single ticket by id. Freshdesk REST: GET /tickets/{id}.
Annotations the server declares
- title: Get ticket
- readOnlyHint: true
freshdesk_list_agentsList/filter agents.No findings
Why it is in this group
- The name "freshdesk_list_agents" says "list": a word for reading.
Description, as the server wrote it List/filter agents. Freshdesk REST: GET /agents.
Annotations the server declares
- title: List agents
- readOnlyHint: true
freshdesk_list_companiesList companies.No findings
Why it is in this group
- The name "freshdesk_list_companies" says "list": a word for reading.
Description, as the server wrote it List companies. Freshdesk REST: GET /companies.
Annotations the server declares
- title: List companies
- readOnlyHint: true
freshdesk_list_contactsList/filter contacts.Reads private dataNo findings
Why it is in this group
- The name "freshdesk_list_contacts" says "list": a word for reading.
What it can reach
- private-dataThe name "freshdesk_list_contacts" says "list" and "contact": it reads contacts.
- private-dataThe description's first sentence says "list" and "contact": it reads contacts.
Description, as the server wrote it List/filter contacts. Freshdesk REST: GET /contacts.
Annotations the server declares
- title: List contacts
- readOnlyHint: true
freshdesk_list_groupsList groups (agent groups tickets are routed to).Reads text others writeNo findings
Why it is in this group
- The name "freshdesk_list_groups" says "list": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "list" and "ticket": it reads issues, which other people can write.
Description, as the server wrote it List groups (agent groups tickets are routed to). Freshdesk REST: GET /groups.
Annotations the server declares
- title: List groups
- readOnlyHint: true
freshdesk_list_ticket_conversationsList the conversations (replies and notes) on a ticket.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "freshdesk_list_ticket_conversations" says "list": a word for reading.
What it can reach
- private-dataThe name "freshdesk_list_ticket_conversations" says "list" and "conversation": it reads messages.
- private-dataThe description's first sentence says "list" and "conversation": it reads messages.
- untrusted-inputThe name "freshdesk_list_ticket_conversations" says "list" and "ticket": it reads issues, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it List the conversations (replies and notes) on a ticket. Freshdesk REST: GET /tickets/{id}/conversations.
Annotations the server declares
- title: List ticket conversations
- readOnlyHint: true
freshdesk_list_ticketsList/filter tickets (max page 300).Reads text others writeNo findings
Why it is in this group
- The name "freshdesk_list_tickets" says "list": a word for reading.
What it can reach
- untrusted-inputThe name "freshdesk_list_tickets" says "list" and "ticket": it reads issues, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "ticket": it reads issues, which other people can write.
Description, as the server wrote it List/filter tickets (max page 300). Freshdesk REST: GET /tickets.
Annotations the server declares
- title: List tickets
- readOnlyHint: true
freshdesk_search_contactsSearch contacts with the Freshdesk query DSL.Reads private dataNo findings
Why it is in this group
- The name "freshdesk_search_contacts" says "search": a word for reading.
What it can reach
- private-dataThe name "freshdesk_search_contacts" says "search" and "contact": it reads contacts.
- private-dataThe description's first sentence says "search" and "contact": it reads contacts.
Description, as the server wrote it Search contacts with the Freshdesk query DSL. The query VALUE is wrapped in double quotes automatically. Examples: `name:'ada'`, `email:'ada@example.com'`, `company_id:123`. Freshdesk REST: GET /search/contacts.
Annotations the server declares
- title: Search contacts
- readOnlyHint: true
freshdesk_search_ticketsSearch tickets with the Freshdesk query DSL.Reads text others writeNo findings
Why it is in this group
- The name "freshdesk_search_tickets" says "search": a word for reading.
What it can reach
- untrusted-inputThe name "freshdesk_search_tickets" says "search" and "ticket": it reads issues, which other people can write.
- untrusted-inputThe description's first sentence says "search" and "ticket": it reads issues, which other people can write.
Description, as the server wrote it Search tickets with the Freshdesk query DSL. The query VALUE is wrapped in double quotes automatically. Examples: `status:2 AND priority:3`, `created_at:>'2026-01-01'`, `agent_id:123`, `group_id:45`, `tag:'urgent'`. Freshdesk REST: GET /search/tickets.
Annotations the server declares
- title: Search tickets
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
20 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data4
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write5
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__freshdesk__freshdesk_reply_ticket"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Install
Pinned to version 1.16.4. Values in angle brackets are yours to fill in.
claude mcp add --transport http freshdesk https://freshdesk.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__freshdesk__freshdesk_list_tickets",
"mcp__freshdesk__freshdesk_get_ticket",
"mcp__freshdesk__freshdesk_search_tickets",
"mcp__freshdesk__freshdesk_list_ticket_conversations",
"mcp__freshdesk__freshdesk_list_contacts",
"mcp__freshdesk__freshdesk_get_contact",
"mcp__freshdesk__freshdesk_search_contacts",
"mcp__freshdesk__freshdesk_list_companies",
"mcp__freshdesk__freshdesk_get_company",
"mcp__freshdesk__freshdesk_list_agents",
"mcp__freshdesk__freshdesk_get_agent",
"mcp__freshdesk__freshdesk_list_groups"
],
"ask": [],
"deny": [
"mcp__freshdesk__freshdesk_create_ticket",
"mcp__freshdesk__freshdesk_update_ticket",
"mcp__freshdesk__freshdesk_reply_ticket",
"mcp__freshdesk__freshdesk_add_note",
"mcp__freshdesk__freshdesk_create_contact",
"mcp__freshdesk__freshdesk_update_contact",
"mcp__freshdesk__freshdesk_create_company"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as freshdesk. Review it before you use it.
Capability tags behind 9 rules
- mcp__freshdesk__freshdesk_list_tickets untrusted-input
- mcp__freshdesk__freshdesk_get_ticket untrusted-input
- mcp__freshdesk__freshdesk_search_tickets untrusted-input
- mcp__freshdesk__freshdesk_list_ticket_conversations private-data, untrusted-input
- mcp__freshdesk__freshdesk_list_contacts private-data
- mcp__freshdesk__freshdesk_get_contact private-data
- mcp__freshdesk__freshdesk_search_contacts private-data
- mcp__freshdesk__freshdesk_list_groups untrusted-input
- mcp__freshdesk__freshdesk_reply_ticket outbound