# io.usefulapi/freshdesk (remote · freshdesk.usefulapi.io)

Read tickets, contacts, companies, agents and groups; create, update and reply to tickets.

- Trust score: 69/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `freshdesk.usefulapi.io`: 69/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-freshdesk/freshdesk.md), [page](https://verifymcp.io/servers/io-usefulapi-freshdesk/freshdesk)

## Channel facts

- Endpoint: `https://freshdesk.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 72/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2471 tokens (~130/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http io-usefulapi-freshdesk https://freshdesk.usefulapi.io/mcp
```

### Codex

```toml
[mcp_servers.io-usefulapi-freshdesk]
url = "https://freshdesk.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-freshdesk": {
      "type": "remote",
      "url": "https://freshdesk.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-freshdesk --url https://freshdesk.usefulapi.io/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-freshdesk:
    url: "https://freshdesk.usefulapi.io/mcp"
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-freshdesk": {
      "type": "http",
      "url": "https://freshdesk.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 69, +13)

- [security improvement] Authorization: unverified → pass
- [security] First check of Authorization: partial
- [functional improvement] Stability: unverified → 0.03

### 2026-08-02 (score 56, +38)

- [security improvement] Authorization: unverified → pass
- [security improvement] Transport: fail → pass
- [security] First check of Authorization: partial
- [security] Authorization: Authorisation not fully verified: this server exposes a tool marked destructive (freshdesk_create_ticket) and its handshake is open, but we could not confirm whether a tool call is gated, so we do not assert it is callable unauthenticated.
- [functional regression] MCP protocol: unverified → fail
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail

### 2026-08-01 (score 18)

First indexed and scored.

## MCP tools (19)

### `freshdesk_list_tickets` (~203 tokens)

List tickets

List/filter tickets (max page 300). Freshdesk REST: GET /tickets.

Input parameters:

- `company_id` (integer): Filter by company id.
- `email` (string): Filter by requester email.
- `filter` (string): Predefined filter: new_and_my_open, watching, spam, or deleted.
- `include` (string): Embed extra data, comma-separated, e.g. "requester,stats,description".
- `order_by` (string): Sort field: created_at, due_by, updated_at, or status.
- `order_type` (string): Sort direction: asc or desc.
- `page` (integer): Page number for pagination (1-based).
- `per_page` (integer): Results per page (1-100, max 100, default 30).
- `requester_id` (integer): Filter by requester (contact) id.
- `updated_since` (string): Only tickets updated after this ISO 8601 timestamp.

### `freshdesk_get_ticket` (~58 tokens)

Get ticket

Get a single ticket by id. Freshdesk REST: GET /tickets/{id}.

Input parameters:

- `id` (integer, required): The ticket id.
- `include` (string): Embed extra data, comma-separated: conversations, requester, company, stats.

### `freshdesk_search_tickets` (~145 tokens)

Search tickets

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.

Input parameters:

- `page` (integer): Page number (1-10; search endpoints return 30 results per page and ignore per_page).
- `query` (string, required): Freshdesk search query, e.g. "priority:3 AND status:2" (do NOT add surrounding quotes yourself — they are added for you).

### `freshdesk_list_ticket_conversations` (~85 tokens)

List ticket conversations

List the conversations (replies and notes) on a ticket. Freshdesk REST: GET /tickets/{id}/conversations.

Input parameters:

- `id` (integer, required): The ticket id.
- `page` (integer): Page number for pagination (1-based).
- `per_page` (integer): Results per page (1-100, max 100, default 30).

### `freshdesk_list_contacts` (~141 tokens)

List contacts

List/filter contacts. Freshdesk REST: GET /contacts.

Input parameters:

- `company_id` (integer): Filter by company id.
- `email` (string): Filter by email.
- `mobile` (string): Filter by mobile number.
- `page` (integer): Page number for pagination (1-based).
- `per_page` (integer): Results per page (1-100, max 100, default 30).
- `phone` (string): Filter by phone number.
- `state` (string): Filter by state: verified, unverified, blocked, or deleted.
- `updated_since` (string): Only contacts updated after this ISO 8601 timestamp.

### `freshdesk_get_contact` (~37 tokens)

Get contact

Get a single contact by id. Freshdesk REST: GET /contacts/{id}.

Input parameters:

- `id` (integer, required): The contact id.

### `freshdesk_search_contacts` (~121 tokens)

Search contacts

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.

Input parameters:

- `page` (integer): Page number (1-10; search endpoints return 30 results per page and ignore per_page).
- `query` (string, required): Freshdesk search query, e.g. "company_id:123" (do NOT add surrounding quotes yourself — they are added for you).

### `freshdesk_list_companies` (~59 tokens)

List companies

List companies. Freshdesk REST: GET /companies.

Input parameters:

- `page` (integer): Page number for pagination (1-based).
- `per_page` (integer): Results per page (1-100, max 100, default 30).

### `freshdesk_get_company` (~37 tokens)

Get company

Get a single company by id. Freshdesk REST: GET /companies/{id}.

Input parameters:

- `id` (integer, required): The company id.

### `freshdesk_list_agents` (~106 tokens)

List agents

List/filter agents. Freshdesk REST: GET /agents.

Input parameters:

- `email` (string): Filter by email.
- `mobile` (string): Filter by mobile number.
- `page` (integer): Page number for pagination (1-based).
- `per_page` (integer): Results per page (1-100, max 100, default 30).
- `phone` (string): Filter by phone number.
- `state` (string): Filter by state: fulltime or occasional.

### `freshdesk_get_agent` (~37 tokens)

Get agent

Get a single agent by id. Freshdesk REST: GET /agents/{id}.

Input parameters:

- `id` (integer, required): The agent id.

### `freshdesk_list_groups` (~65 tokens)

List groups

List groups (agent groups tickets are routed to). Freshdesk REST: GET /groups.

Input parameters:

- `page` (integer): Page number for pagination (1-based).
- `per_page` (integer): Results per page (1-100, max 100, default 30).

### `freshdesk_create_ticket` (~433 tokens)

Create ticket

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.

Input parameters:

- `cc_emails` (array): Emails to CC on the ticket.
- `company_id` (integer): Id of the company the ticket belongs to.
- `custom_fields` (object): Custom field values, keyed by field name.
- `description` (string, required): Ticket description, HTML content (required).
- `email` (string): Requester email (one of email/requester_id/phone required).
- `group_id` (integer): Id of the group to assign the ticket to.
- `phone` (string): Requester phone (one of email/requester_id/phone required).
- `priority` (integer): Ticket priority: 1=Low, 2=Medium, 3=High, 4=Urgent.
- `requester_id` (integer): Requester (contact) id (one of email/requester_id/phone required).
- `responder_id` (integer): Id of the agent the ticket is assigned to.
- `source` (integer): Ticket source: 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedbackwidget, 10=Outbound email.
- `status` (integer): Ticket status: 2=Open, 3=Pending, 4=Resolved, 5=Closed.
- `subject` (string, required): Ticket subject (required).
- `tags` (array): Tags (array of strings).
- `type` (string): Ticket type (e.g. Question, Incident).

### `freshdesk_update_ticket` (~312 tokens)

Update ticket

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

Input parameters:

- `company_id` (integer): Id of the company the ticket belongs to.
- `custom_fields` (object): Custom field values, keyed by field name.
- `description` (string): Ticket description, HTML content.
- `group_id` (integer): Id of the group to assign the ticket to.
- `id` (integer, required): The ticket id to update.
- `priority` (integer): Ticket priority: 1=Low, 2=Medium, 3=High, 4=Urgent.
- `requester_id` (integer): Requester (contact) id.
- `responder_id` (integer): Id of the agent the ticket is assigned to.
- `source` (integer): Ticket source: 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedbackwidget, 10=Outbound email.
- `status` (integer): Ticket status: 2=Open, 3=Pending, 4=Resolved, 5=Closed.
- `subject` (string): Ticket subject.
- `tags` (array): Tags (array of strings).
- `type` (string): Ticket type.

### `freshdesk_reply_ticket` (~94 tokens)

Reply to ticket

Add a public reply to a ticket (sent to the requester). Freshdesk REST: POST /tickets/{id}/reply.

Input parameters:

- `bcc_emails` (array): Emails to BCC on the reply.
- `body` (string, required): The reply content, HTML (required).
- `cc_emails` (array): Emails to CC on the reply.
- `id` (integer, required): The ticket id to reply to.

### `freshdesk_add_note` (~117 tokens)

Add note to ticket

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.

Input parameters:

- `body` (string, required): The note content, HTML (required).
- `id` (integer, required): The ticket id to add a note to.
- `notify_emails` (array): Agent emails to notify about this note.
- `private` (boolean): Whether the note is internal/private (default true). Set false for a public note.

### `freshdesk_create_contact` (~169 tokens)

Create contact

Create a contact. `name` is required. Freshdesk REST: POST /contacts.

Input parameters:

- `address` (string): Postal address.
- `company_id` (integer): Id of the company the contact belongs to.
- `custom_fields` (object): Custom field values, keyed by field name.
- `description` (string): Freeform description / notes.
- `email` (string): Email address.
- `job_title` (string): Job title.
- `mobile` (string): Mobile number.
- `name` (string, required): The contact's full name (required).
- `phone` (string): Phone number.
- `tags` (array): Tags (array of strings).
- `twitter_id` (string): Twitter handle.
- `unique_external_id` (string): External id from your own system.

### `freshdesk_update_contact` (~159 tokens)

Update contact

Update fields on an existing contact. Only provided fields are changed. Freshdesk REST: PUT /contacts/{id}.

Input parameters:

- `address` (string): Postal address.
- `company_id` (integer): Id of the company the contact belongs to.
- `custom_fields` (object): Custom field values, keyed by field name.
- `description` (string): Freeform description / notes.
- `email` (string): Email address.
- `id` (integer, required): The contact id to update.
- `job_title` (string): Job title.
- `mobile` (string): Mobile number.
- `name` (string): The contact's full name.
- `phone` (string): Phone number.
- `tags` (array): Tags (array of strings).

### `freshdesk_create_company` (~93 tokens)

Create company

Create a company. `name` is required. Freshdesk REST: POST /companies.

Input parameters:

- `custom_fields` (object): Custom field values, keyed by field name.
- `description` (string): Freeform description / notes.
- `domains` (array): Email domains associated with the company.
- `name` (string, required): The company name (required).
- `note` (string): A note about the company.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-freshdesk/freshdesk#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 56
- 2026-08-01: 18

## Links

- Remote endpoint: https://freshdesk.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-freshdesk/freshdesk/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-freshdesk/freshdesk/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-freshdesk/freshdesk
