Skip to content

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.

Deletes · 7

19 tools: 7 can delete or cancel things and 12 only read.

Scanned Oct 22, 2026

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/mcp

Tools

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.
deny to break every path
{
  "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/mcp

Run 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.

.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