Skip to main content
Glama
nikhilchintawar

Freshdesk MCP Server

Freshdesk MCP Server

A Model Context Protocol (MCP) server that fetches Freshdesk ticket details and provides them as context for LLM interactions.

Features

  • get_ticket - Fetch complete ticket details from a Freshdesk URL or ticket ID

    • Ticket metadata (subject, status, priority, type, tags)

    • Requester and assignee information

    • All conversations (replies and private notes)

    • Attachments list

    • Time entries

    • Satisfaction ratings

    • Custom fields

  • search_tickets - Search tickets by text query

    • Filter by status (open, pending, resolved, closed)

    • Filter by priority (low, medium, high, urgent)

    • Configurable result limit

  • get_agent_tickets - Get tickets assigned to a specific agent

    • Search by agent name (supports partial matching)

    • Filter by status

    • Configurable result limit

Related MCP server: Freshservice MCP Server

Installation

No installation required. Add directly to your config:

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "freshdesk": {
      "command": "npx",
      "args": ["-y", "github:nikhilchintawar/freshdesk-mcp"],
      "env": {
        "FRESHDESK_API_KEY": "your-api-key",
        "FRESHDESK_DOMAIN": "yourcompany"
      }
    }
  }
}

Claude Code (~/.claude/settings.json):

{
  "mcpServers": {
    "freshdesk": {
      "command": "npx",
      "args": ["-y", "github:nikhilchintawar/freshdesk-mcp"],
      "env": {
        "FRESHDESK_API_KEY": "your-api-key",
        "FRESHDESK_DOMAIN": "yourcompany"
      }
    }
  }
}

Manual Installation

# Clone the repository
git clone https://github.com/nikhilchintawar/freshdesk-mcp.git
cd freshdesk-mcp

# Install dependencies
npm install

Then add to your config:

{
  "mcpServers": {
    "freshdesk": {
      "command": "node",
      "args": ["/absolute/path/to/freshdesk-mcp/build/index.js"],
      "env": {
        "FRESHDESK_API_KEY": "your-api-key",
        "FRESHDESK_DOMAIN": "yourcompany"
      }
    }
  }
}

Configuration

Config File Locations

  • Claude Desktop (macOS): ~/Library/Application Support/Claude/claude_desktop_config.json

  • Claude Desktop (Windows): %APPDATA%\Claude\claude_desktop_config.json

  • Claude Code: ~/.claude/settings.json

Environment Variables

Variable

Description

Required

FRESHDESK_API_KEY

Your Freshdesk API key

Yes

FRESHDESK_DOMAIN

Your Freshdesk subdomain (e.g., mycompany for mycompany.freshdesk.com)

Yes

Usage Examples

Once configured, you can use natural language to interact with Freshdesk:

Getting Your Freshdesk API Key

  1. Log in to your Freshdesk account

  2. Click on your profile icon → Profile Settings

  3. Your API key is displayed on the right side of the page

Development

# Watch mode for development
npm run dev

# Build for production
npm run build

# Test with MCP Inspector
FRESHDESK_API_KEY=your-key FRESHDESK_DOMAIN=your-domain \
  npx @modelcontextprotocol/inspector node build/index.js

License

MIT

Available Tools

3 tools
get_agent_ticketsB

Get tickets assigned to a specific Freshdesk agent by name. Supports partial name matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 30, max: 100)
statusNoFilter by ticket status (optional)
agent_nameYesName of the agent to find tickets for. Supports partial matching (e.g., 'John' will match 'John Doe').

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses partial name matching, but does not mention error handling, pagination, ordering, or permissions. For a listing tool, more context on results behavior would help.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no unnecessary words. It is front-loaded with the action and resource. However, it could be slightly more structured with separate sections for usage notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no output schema, and no annotations, the description covers the basic purpose but lacks details on return format, sorting, error cases, and pagination. It is sufficient for simple usage but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description adds no additional parameter details beyond what the schema provides. It reinforces partial matching for agent_name but does not enhance understanding of limit or status.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get tickets' and the resource 'assigned to a specific Freshdesk agent by name'. It also mentions partial name matching. This distinguishes it from sibling tools like get_ticket (single ticket) and search_tickets (general search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly provide guidance on when to use this tool versus alternatives. It implies usage when filtering by agent name, but lacks explicit when-not-to-use criteria. Sibling tools are listed but not referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ticketA

Fetch complete ticket details from Freshdesk including conversations, attachments, time entries, and satisfaction ratings. Accepts a ticket URL or ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticketYesFreshdesk ticket URL or ticket ID. Examples: 'https://company.freshdesk.com/a/tickets/12345' or '12345'

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Lists included data (conversations, attachments, etc.) implying a comprehensive fetch. No annotations, but no contradictions; a simple read operation without side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words, front-loading the action and including key details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, input, and included data adequately for a simple fetch tool. Lacks mention of error handling or pagination, but acceptable given simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already provides 100% coverage with examples. Description adds minimal extra value beyond stating input format (URL or ID).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly specifies the tool's action (fetch complete ticket details) and distinguishes it from siblings like get_agent_tickets and search_tickets by focusing on a single ticket by URL or ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly indicates use when a ticket identifier is known and full details are needed. Sibling names provide context for alternatives, but no explicit when-not-to conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ticketsB

Search Freshdesk tickets by text query. Can filter by status and priority.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 30, max: 100)
queryYesSearch text to find in ticket subject or description
statusNoFilter by ticket status (optional)
priorityNoFilter by ticket priority (optional)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It does not disclose behavioral traits like pagination, rate limits, authentication requirements, or response format. Only a basic search/filter action is described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no unnecessary words. Essential information is front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should hint at return values (e.g., ticket summaries or IDs). It does not, leaving the agent uncertain about the result format. For a search tool with 4 parameters, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described. The description adds 'by text query' and mentions filters, but does not significantly augment schema information. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches Freshdesk tickets by text query with optional filters, distinguishing it from siblings like get_ticket (single ticket) and get_agent_tickets (agent-specific).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly suggests use for searching tickets but does not explicitly state when to use this tool versus alternatives, nor when not to use it. No exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv1.0.0
    • First observedget_agent_tickets
    • First observedget_ticket
    • First observedsearch_tickets

TDQS

A3.7/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct operation: fetching by agent, fetching by ID/URL, and searching by text query. There is no overlap in purpose.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (get_agent_tickets, get_ticket, search_tickets).

Tool Count4/5

Three tools is on the low side but still within the typical 3-15 range and each tool serves a clear read-focused purpose for the domain.

Completeness2/5

Only read operations are covered; missing create, update, and delete functionalities that are essential for managing tickets in a CRM system.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Zendesk ticket data for customer support analysis and insights. It supports searching tickets by tags or keywords, retrieving ticket details, and analyzing agent performance and service trends.
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to connect with Freshservice ITSM for managing tickets, assets, agents, and organizational data through natural language. It provides a comprehensive set of tools for performing CRUD operations on service desk records and searching across the Freshservice platform.
    53
    29 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides AI assistants with structured access to the Freshdesk customer support platform, including tickets, contacts, companies, agents, groups, knowledge base, and SLA configuration. Features decision-tree navigation and destructive-action guardrails.
    244 npm
    MIT