Server has 32 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention well (list_*, get_*, create_*, update_*, delete_*, search_*). Descriptions are present and contextual (avg ~150 chars), exceeding the 10-char minimum. However, several critical gaps: (1) route_tools and call_routed_tool are meta-tools that add indirection and complexity rather than direct domain access; (2) raw_api_request is a dangerous escape hatch with minimal guardrails; (3) parameter descriptions lack constraint details (enums, ranges, formats); (4) output schemas are not documented in tool definitions; (5) error handling is minimal, no recovery guidance or actionable error messages visible in code. Most domain tools (tickets, contacts, companies, solutions) are well-structured, but the routing layer and raw API tool significantly reduce overall quality.
Add a reply or note to a Freshdesk ticket. Use when responding to customer inquiries or adding internal notes. To update ticket metadata (status, priority, etc.), use update_ticket instead.
Invoke a tool returned by route_tools.
Create a new Freshdesk company account. Use when registering a new company account. To update an existing company, use update_company instead.
Create a new Freshdesk contact. Use when registering a new customer contact. To update an existing contact, use update_contact instead.
Create a new Freshdesk ticket. Use when creating new support tickets. To update an existing ticket, use update_ticket instead.
Log a new time entry on a ticket. Use when recording time spent on customer support work. To update existing logged time, use update_time_entry instead.
STDIO transport only, not remotely accessible. Cannot be used by hosted MCP clients or cloud-based agents. Limits deployment to local/containerized environments.
route_tools and call_routed_tool add indirection and complexity. LLMs must first call route_tools, parse results, then call call_routed_tool, two round-trips instead of direct tool invocation. This pattern is anti-idiomatic for MCP and increases latency and error surface.
raw_api_request is a dangerous escape hatch with minimal validation. Accepts arbitrary HTTP methods, endpoints, and payloads. No input sanitization visible against SQL injection, command injection, or path traversal. Marked DESTRUCTIVE but no confirmation/dry-run pattern.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Delete (soft-delete) a Freshdesk company by ID. Use to delete obsolete company records. To clear individual fields without deleting, use update_company.
Delete (soft-delete) a Freshdesk contact by ID. Moves contact to deleted state. Use to remove obsolete contacts. To clear specific fields without deleting, use update_contact.
Delete a time entry by ID. Use to remove incorrectly logged time entries. To adjust logged duration, use update_time_entry instead.
Get details of a single Freshdesk company by ID. Use when inspecting a known company account by ID. To browse all companies, use list_companies.
Get full details of a single Freshdesk contact by ID. Use when looking up specific details for a known contact ID. To search contacts by name or email, use search_contacts or list_contacts.
Get full details of a solution knowledge base article by ID. Use to read the full body content of an article. To search across articles, use search_solution_articles.
Get full details of a single ticket by ID. Use when inspecting a specific ticket by ID. To browse multiple tickets, use list_tickets or search_tickets instead.
List Freshdesk agents (support staff). Use to inspect available support agent staff IDs when assigning tickets or notes.
List Freshdesk customer companies sequentially. Use when browsing company accounts. To search companies by keyword or name, use search_companies. To fetch details for a single company ID, use get_company.
List or look up Freshdesk contacts (customers). Use when browsing contacts sequentially or filtering by exact email. To search contacts by query syntax (e.g. name or domain), use search_contacts. To fetch full details for a single contact ID, use get_contact.
List Freshdesk groups (teams tickets can be assigned to). Use to inspect valid group team IDs before creating or re-assigning tickets.
List solution articles within a specific folder. Use to list articles in a knowledge base folder. To get the content of a specific article, use get_solution_article.
List knowledge base solution categories. Use to browse top-level solution hierarchy. To list folders within a category, use list_solution_folders.
List solution folders within a specific category. Use to navigate folders in a category. To list articles in a folder, use list_solution_articles.
List Freshdesk tickets sequentially with optional filters. Use when browsing or listing tickets. To search by specific criteria or keywords, use search_tickets instead. To inspect full details of a specific ticket, use get_ticket.
List time entries logged on a specific Freshdesk ticket. Use when inspecting time tracking history for a ticket. To log new time, use create_time_entry.
Execute a raw HTTP request directly against the Freshdesk REST API v2. Use when executing custom operations, advanced queries, or interacting with endpoints (such as custom objects, ticket fields, or admin APIs) not covered by specialized MCP tools.
Find tools relevant to your task. Call this FIRST, then use call_routed_tool to invoke them. Returns a list of matching tool names with their parameters. Pass the exact tool name and a JSON arguments object to call_routed_tool.
Search companies using Freshdesk search query syntax. Use when querying companies by keyword or name filter. To browse all companies sequentially, use list_companies.
Search contacts using Freshdesk search query syntax. Use when searching for contacts by partial name, domain, or custom field criteria. To browse all contacts sequentially, use list_contacts instead.
Search solution knowledge base articles using a keyword query. Use when looking for help articles matching specific keywords. To browse category structure, use list_solution_categories.
Search tickets using Freshdesk's query syntax. Use when querying tickets by specific conditional rules (e.g. priority, status, type, tag). Note: Freshdesk search API ONLY supports filtering by specific fields: agent_id, group_id, priority, status, type, created_at, updated_at, due_by, company_id, and tag. Searching by 'subject', 'description', or free-text is NOT supported by Freshdesk's search API (use list_tickets to browse tickets and filter by subject client-side instead).
Update an existing Freshdesk company. Only provided fields are changed. Use when modifying company details. To register a new company, use create_company.
Update an existing Freshdesk contact. Only provided fields are changed. Use when modifying existing contact information. To add a new contact, use create_contact instead.
Update fields on an existing ticket. Only provided fields are changed. Use when updating fields of an existing ticket. To create a new ticket, use create_ticket.
Update an existing time entry. Only provided fields are updated. Use when adjusting logged time or notes. To log new work, use create_time_entry instead.
Parameter descriptions lack constraint details. E.g., 'page' and 'per_page' have no min/max bounds stated; 'priority' and 'status' have no enum values listed in descriptions (only in tool docs). LLMs cannot infer valid ranges and will pass invalid values.
Output schemas not documented in tool definitions. Tool descriptions do not specify what fields are returned, their types, or structure. LLMs cannot plan downstream tool calls or extract required IDs (e.g., company_id from list_companies response).