# How to integrate Freshdesk MCP with OpenAI Agents SDK

```json
{
  "title": "How to integrate Freshdesk MCP with OpenAI Agents SDK",
  "toolkit": "Freshdesk",
  "toolkit_slug": "freshdesk",
  "framework": "OpenAI Agents SDK",
  "framework_slug": "open-ai-agents-sdk",
  "url": "https://composio.dev/toolkits/freshdesk/framework/open-ai-agents-sdk",
  "markdown_url": "https://composio.dev/toolkits/freshdesk/framework/open-ai-agents-sdk.md",
  "updated_at": "2026-05-12T10:12:22.256Z"
}
```

## Introduction

This guide walks you through connecting Freshdesk to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Freshdesk agent that can create a new ticket for a customer issue, list all open tickets assigned to me, update ticket status to resolved for ticket 12345 through natural language commands.
This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Freshdesk account through Composio's Freshdesk MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Freshdesk with

- [ChatGPT](https://composio.dev/toolkits/freshdesk/framework/chatgpt)
- [Claude Agent SDK](https://composio.dev/toolkits/freshdesk/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/freshdesk/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/freshdesk/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/freshdesk/framework/codex)
- [Cursor](https://composio.dev/toolkits/freshdesk/framework/cursor)
- [VS Code](https://composio.dev/toolkits/freshdesk/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/freshdesk/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/freshdesk/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/freshdesk/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/freshdesk/framework/cli)
- [Google ADK](https://composio.dev/toolkits/freshdesk/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/freshdesk/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/freshdesk/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/freshdesk/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/freshdesk/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/freshdesk/framework/crew-ai)

## TL;DR

Here's what you'll learn:
- Get and set up your OpenAI and Composio API keys
- Install the necessary dependencies
- Initialize Composio and create a Tool Router session for Freshdesk
- Configure an AI agent that can use Freshdesk as a tool
- Run a live chat session where you can ask the agent to perform Freshdesk operations

## What is OpenAI Agents SDK?

The OpenAI Agents SDK is a lightweight framework for building AI agents that can use tools and maintain conversation state. It provides a simple interface for creating agents with hosted MCP tool support.
Key features include:
- Hosted MCP Tools: Connect to external services through hosted MCP endpoints
- SQLite Sessions: Persist conversation history across interactions
- Simple API: Clean interface with Agent, Runner, and tool configuration
- Streaming Support: Real-time response streaming for interactive applications

## What is the Freshdesk MCP server, and what's possible with it?

The Freshdesk MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Freshdesk account. It provides structured and secure access to your support desk, so your agent can create tickets, fetch or update customer issues, reply to conversations, and automate ticket management on your behalf.
- Automated ticket creation and triage: Instantly generate new support tickets for incoming customer queries, ensuring nothing gets lost in the shuffle.
- Ticket lookup and status updates: Ask your agent to find, view, or update any ticket, including changing status, priority, or details based on evolving customer needs.
- Streamlined customer replies: Have your agent draft or send replies directly to customers, keeping conversations moving and improving response times.
- Effortless ticket list retrieval: Quickly pull lists of all tickets—filtered by status, priority, or other criteria—to get a real-time overview of the support pipeline.
- Ticket deletion and cleanup: Direct your agent to close or remove outdated or resolved tickets, keeping your Freshdesk workspace tidy and efficient.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `FRESHDESK_ADD_NOTE_TO_TICKET` | Add Note to Ticket | Tool to add a private or public note to an existing ticket in Freshdesk. Use when you need to add internal comments or public notes to a ticket. Notes can be private (agent-only) or public, and can include HTML content. |
| `FRESHDESK_ADD_TICKET_USER_ACCESS` | Add Ticket User Access | Tool to add agent access to a specific ticket in Freshdesk. Use when you need to grant agent(s) permission to view or interact with a ticket. The endpoint accepts agent IDs (not contact IDs) and returns the list of agent IDs that have access to the ticket. |
| `FRESHDESK_ADD_WATCHER` | Add Watcher to Ticket | Tool to add the authenticated user as a watcher to a Freshdesk ticket. Use when you need to follow a ticket's progress and receive email notifications for updates like replies or status changes. The API automatically uses the authenticated user's credentials and does not require additional parameters. |
| `FRESHDESK_BULK_UNWATCH_TICKETS` | Bulk Unwatch Tickets | Tool to remove the authenticated user as a watcher from multiple Freshdesk tickets in bulk. Use when you need to stop following multiple tickets at once and stop receiving email notifications for their updates. The API automatically uses the authenticated user's credentials. |
| `FRESHDESK_BULK_UPDATE_TICKETS` | Bulk Update Tickets | Tool to update multiple tickets simultaneously in bulk. The bulk update operation runs asynchronously in the background, and returns a job_id to track progress. Use when you need to modify the same properties across multiple tickets efficiently. |
| `FRESHDESK_CANCEL_CONTACT_IMPORT` | Cancel Contact Import | Tool to cancel an ongoing contact import operation in Freshdesk. Use when you need to halt a contact import process that is currently running. |
| `FRESHDESK_CREATE_ADMIN` | Create Admin Group | Tool to create a new admin group in Freshdesk. Use when you need to create a new admin group with specific agents, escalation settings, and automatic assignment configuration. |
| `FRESHDESK_CREATE_ADMIN_GROUP` | Create Admin Group | Tool to create a new admin-level support agent group in Freshdesk. Use when you need to create groups for organizing support agents and managing ticket routing at the admin level. |
| `FRESHDESK_CREATE_ADMIN_TICKET_FIELD` | Create Admin Ticket Field | Tool to create a new custom ticket field in Freshdesk. Use when you need to add a new field definition for capturing additional ticket information (e.g., priority level, customer type, issue category). The field type can be text, number, dropdown, checkbox, date, or paragraph. |
| `FRESHDESK_CREATE_ADMIN_TICKET_FIELD_SECTION` | Create Admin Ticket Field Section | Tool to create a new section within a ticket field in Freshdesk. Use when you need to add conditional field sections that appear based on selected dropdown choices. |
| `FRESHDESK_CREATE_AGENTS` | Create Multiple Agents | Tool to create multiple agents in Freshdesk in a single bulk operation. Use when you need to add multiple agents at once. This is an asynchronous operation that returns a job_id for tracking the creation status. |
| `FRESHDESK_CREATE_CANNED_RESPONSE` | Create Canned Response | Tool to create a new canned response in Freshdesk. Use when you need to create a reusable message template that agents can quickly insert into tickets. |
| `FRESHDESK_CREATE_CANNED_RESPONSE_BULK` | Bulk Create Canned Responses | Tool to create multiple canned responses in bulk via asynchronous operation. Use when you need to add multiple canned responses at once to your Freshdesk account. Returns a job_id that can be used to track the operation status. |
| `FRESHDESK_CREATE_CANNED_RESPONSE_FOLDER` | Create Canned Response Folder | Tool to create a new canned response folder in Freshdesk. Use when you need to organize canned response templates into folders. |
| `FRESHDESK_CREATE_COMPANIES` | Create Company | Tool to create a new company in Freshdesk. Use when you need to add a customer organization to your Freshdesk account. Companies can hold multiple contacts and are automatically associated with contacts based on email domain matching. |
| `FRESHDESK_CREATE_CONTACT` | Create Contact | Tool to create a new contact in Freshdesk. Use when you need to add a customer or user to your Freshdesk account. IMPORTANT: The 'employee_id' custom field is mandatory for this Freshdesk instance. |
| `FRESHDESK_CREATE_CONTACT_FIELDS` | Create Contact Field | Tool to create a new custom contact field in Freshdesk. Use when you need to add a new field definition for storing custom contact information (e.g., job title, department, customer type). The field type can be text, number, dropdown, checkbox, date, or paragraph. |
| `FRESHDESK_CREATE_DISCUSSION_CATEGORY` | Create Discussion Category | Tool to create a new discussion category in Freshdesk forums. |
| `FRESHDESK_CREATE_DISCUSSION_FORUM_TOPIC` | Create Discussion Forum Topic | Tool to create a new topic in a Freshdesk discussion forum. Use when you need to post a new discussion topic or thread in a specific forum. |
| `FRESHDESK_CREATE_DISCUSSION_TOPIC_COMMENT` | Create Discussion Topic Comment | Tool to create a new comment on a discussion forum topic. Use when you need to add a comment to an existing topic in Freshdesk discussions. |
| `FRESHDESK_CREATE_EMAIL` | Create Email Mailbox | Tool to create a new email mailbox in Freshdesk. Use when you need to add a support email address that automatically creates tickets from incoming emails. Requires valid product_id and group_id. |
| `FRESHDESK_CREATE_FORUM` | Create Forum | Tool to create a new forum within a category in Freshdesk discussions. Use when you need to add a new forum to organize discussions within a specific category. |
| `FRESHDESK_CREATE_SLA_POLICIES` | Create SLA Policy | Tool to create a new SLA (Service Level Agreement) policy in Freshdesk. Use when you need to establish service level targets for ticket response and resolution times based on priority levels. |
| `FRESHDESK_CREATE_SOLUTION_ARTICLE` | Create Solution Article | Tool to create a new solution article in a Freshdesk knowledge base folder. Use when you need to add documentation, FAQs, or help content to your knowledge base. |
| `FRESHDESK_CREATE_SOLUTION_CATEGORY` | Create Solution Category | Tool to create a new solution category in Freshdesk's knowledge base. Use when you need to organize solution articles and folders under a new category. |
| `FRESHDESK_CREATE_TICKET` | Create Ticket | Creates a new ticket in Freshdesk. REQUIRED FIELDS: - subject and description are always required - At least ONE requester identifier is REQUIRED: requester_id, email, phone, facebook_id, twitter_id, or unique_external_id CONDITIONAL REQUIREMENTS: - If phone is provided without email, name becomes MANDATORY NOTE ON ATTACHMENTS: - attachments field expects multipart/form-data format, not file paths |
| `FRESHDESK_CREATE_TICKET_FORMS` | Create Ticket Form | Tool to create a new ticket form in Freshdesk. Use when you need to create a custom ticket form for organizing support requests. |
| `FRESHDESK_CREATE_TICKET_OUTBOUND_EMAIL` | Create Ticket via Outbound Email | Tool to create a ticket by sending an outbound email to external recipients. Use when you need to initiate a support conversation via email. The ticket is automatically created with 'Closed' status and assigned to the sending agent to avoid unnecessary SLA timers. |
| `FRESHDESK_CREATE_TICKET_TIME_ENTRY` | Create Ticket Time Entry | Tool to create a time entry for a specific ticket in Freshdesk. Use when you need to log time spent working on a ticket. Time entries track work duration and can be marked as billable or non-billable for billing and reporting purposes. |
| `FRESHDESK_CREATE_TRANSLATED_SOLUTION_CATEGORY` | Create Translated Solution Category | Tool to create a translated version of an existing solution category. Use when you need to add multilingual support to your knowledge base by creating category translations in different languages. |
| `FRESHDESK_CURRENTLY_AUTHENTICATED_AGENT` | Currently Authenticated Agent | Tool to retrieve profile information for the currently authenticated agent. Use when you need to get details about the agent whose API credentials are being used for authentication. |
| `FRESHDESK_DELETE_ADMIN_GROUP` | Delete Admin Group | Tool to delete an admin group from Freshdesk. Use when you need to disband an admin group from your Freshdesk account. Note: Deleting a group only disbands it and does not delete the members of the group. |
| `FRESHDESK_DELETE_AGENT` | Delete Agent | Tool to permanently delete an agent from Freshdesk. Use when you need to remove an agent from your Freshdesk account. Note: You cannot delete yourself. The API prevents self-deletion as a security measure. When an agent is deleted, they are downgraded to a contact in the Freshdesk system. |
| `FRESHDESK_DELETE_AUTOMATION_RULE` | Delete Automation Rule | Permanently deletes an automation rule from Freshdesk by its type and rule ID. Use this action to remove workflow automation rules that are no longer needed. This action is idempotent - deleting an already-deleted rule will succeed without error. WARNING: This action is irreversible. The automation rule will be permanently deleted and cannot be recovered. Ensure you have the correct rule_id before proceeding. |
| `FRESHDESK_DELETE_COMPANY` | Delete Company | Tool to permanently disband a company from Freshdesk. Use when you need to delete a company from your Freshdesk account. Note: Deleting a company only disbands it and does not delete the customers inside it. Once disbanded, the company cannot be restored. |
| `FRESHDESK_DELETE_COMPANY_FIELD` | Delete Company Field | Tool to permanently delete a custom company field from Freshdesk. Use when you need to remove a company field that is no longer needed. Note: This action is irreversible and will delete all data stored in that field across all companies. Only custom fields can be deleted, not default fields. |
| `FRESHDESK_DELETE_CONTACT` | Delete Contact | Tool to soft delete a contact from Freshdesk. Use when you need to move a contact from All Contacts to Deleted Contacts view. Future communications from the contact will be directed to SPAM. The contact can be restored later - for permanent deletion, use hard_delete_contact instead. |
| `FRESHDESK_DELETE_CONTACT_FIELD` | Delete Contact Field | Permanently delete a custom contact field from Freshdesk. Use this action when you need to remove a custom contact field that is no longer needed. Important notes: - This action is IRREVERSIBLE - all data stored in this field across all contacts will be permanently deleted - Only custom fields can be deleted - system/default fields (name, email, phone, etc.) cannot be deleted - If you attempt to delete a default field, the API will return an error |
| `FRESHDESK_DELETE_CONVERSATION` | Delete Conversation | Tool to permanently delete a conversation from a ticket in Freshdesk. Use when you need to remove a specific conversation from a ticket. Note: Once deleted, the conversation cannot be restored. |
| `FRESHDESK_DELETE_DISCUSSION_CATEGORY` | Delete Discussion Category | Permanently deletes a forum discussion category from Freshdesk. Use this action to remove an entire discussion category. This is a destructive operation and cannot be undone. Make sure you have the correct category_id before executing. Prerequisites: - The category_id must correspond to an existing discussion category - Use FRESHDESK_LIST_DISCUSSIONS to find available category IDs Common error scenarios: - 404: Category not found (invalid category_id or already deleted) - 401: Authentication failed (invalid API key) - 403: Insufficient permissions |
| `FRESHDESK_DELETE_DISCUSSION_COMMENT` | Delete Discussion Comment | Tool to permanently delete a comment from a discussion in Freshdesk. Use when you need to remove a specific comment from a discussion thread. Note: Once deleted, the comment cannot be restored. |
| `FRESHDESK_DELETE_DISCUSSION_FORUM` | Delete Discussion Forum | Tool to permanently delete a discussion forum in Freshdesk. Use when you need to remove a specific forum. Note: Once deleted, the forum cannot be restored. |
| `FRESHDESK_DELETE_DISCUSSIONS_FORUMS_FOLLOW` | Unmonitor Forum | Tool to unfollow/unmonitor a discussion forum in Freshdesk. Use when you need to stop monitoring a specific forum. The operation removes the following status for the specified user from the forum. This is an idempotent operation - calling it multiple times or on an already-unfollowed forum will succeed without error. Note: Following forums is typically done through the Freshdesk web UI by end users. This action allows programmatic unfollowing via API. |
| `FRESHDESK_DELETE_DISCUSSIONS_TOPICS_FOLLOW` | Unmonitor Topic | Tool to unfollow/unmonitor a discussion topic in Freshdesk. Use when you need to stop monitoring a specific topic. The operation removes the following status for the specified user from the topic. |
| `FRESHDESK_DELETE_DISCUSSION_TOPIC` | Delete Discussion Topic | Tool to permanently delete a discussion topic in Freshdesk. Use when you need to remove a specific topic from forums. Note: Once deleted, the topic cannot be restored. |
| `FRESHDESK_DELETE_EMAIL_MAILBOXES` | Delete Email Mailbox | Tool to permanently delete an email mailbox from Freshdesk. Use when you need to remove an email mailbox configuration. Note: This action is irreversible. Once deleted, emails sent to the mailbox's address will not generate tickets. Requires admin-level permissions to access the email/mailboxes endpoint. |
| `FRESHDESK_DELETE_GROUP` | Delete Group | Tool to permanently disband a group from Freshdesk. Use when you need to delete a group from your Freshdesk account. Note: Deleting a group only disbands it and does not delete the members of the group. Once disbanded, the group cannot be restored. |
| `FRESHDESK_DELETE_MULTIPLE_TICKETS` | Delete Multiple Tickets | Asynchronously deletes multiple tickets in bulk. Returns a job_id to track deletion progress. Deleted tickets are moved to Trash and can be restored within 30 days. |
| `FRESHDESK_DELETE_SECTION` | Delete Section | Tool to permanently delete a section from a ticket field in Freshdesk. Use when you need to remove a section that is no longer needed. Note: The section must be empty before deletion. This action is irreversible. |
| `FRESHDESK_DELETE_SKILL` | Delete Skill | Tool to permanently delete a skill from Freshdesk. Use when you need to remove a skill from your Freshdesk account. This operation is permanent and cannot be undone. |
| `FRESHDESK_DELETE_SOLUTION_ARTICLE` | Delete Solution Article | Tool to permanently delete a solution article and its translated versions in Freshdesk. Use when you need to remove a solution article that is no longer needed. Note: This operation is irreversible and cannot be undone. |
| `FRESHDESK_DELETE_SOLUTION_CATEGORY` | Delete Solution Category | Permanently delete a solution category from Freshdesk's knowledge base. Use this tool when you need to remove a solution category that is no longer needed. This operation is irreversible and will also delete all translated versions of the category. Note: Categories containing folders may need to have their folders removed first. |
| `FRESHDESK_DELETE_SOLUTION_FOLDER` | Delete Solution Folder | Tool to permanently delete a solution folder and its translated versions in Freshdesk. Use when you need to remove a solution folder that is no longer needed. Note: This operation is irreversible and cannot be undone. |
| `FRESHDESK_DELETE_TICKET` | Delete Ticket | Tool to permanently delete a ticket from Freshdesk. Use when you need to remove a ticket from your Freshdesk account. Note: Once deleted, the ticket cannot be restored. |
| `FRESHDESK_DELETE_TICKET_FIELD` | Delete Ticket Field | Permanently delete a custom ticket field from Freshdesk. Use this tool when you need to remove a custom ticket field that is no longer needed. This action is irreversible and will delete all data stored in that field across all tickets. Important: Only custom fields (those with 'cf_' prefix) can be deleted. Default system fields like 'subject', 'status', 'priority', etc. cannot be deleted and will return an error. |
| `FRESHDESK_DELETE_TICKET_FORM` | Delete Ticket Form | Tool to permanently delete a ticket form from Freshdesk. Use when you need to remove a ticket form that is no longer needed. Note: This action is irreversible and once deleted, the ticket form cannot be restored through standard API operations. |
| `FRESHDESK_DELETE_TICKET_FORMS` | Delete Ticket Form Field | Tool to permanently delete a specific field from a ticket form in Freshdesk. Use when you need to remove a custom field that is no longer needed from a ticket form. Note: This action is irreversible and only custom fields can be deleted, not default fields which are interlinked with system functionalities. |
| `FRESHDESK_DELETE_TICKET_SUMMARY` | Delete Ticket Summary | Tool to delete the AI-generated summary of a ticket in Freshdesk. Use when you need to remove a ticket's summary. Note: Once deleted, the summary cannot be restored. |
| `FRESHDESK_DELETE_TICKET_USER_ACCESS` | Delete Ticket User Access | Tool to remove all agent access from a specific ticket in Freshdesk. Use when you need to revoke all agent permissions from a ticket. This removes all user accesses that were previously granted via the Add Ticket User Access endpoint. |
| `FRESHDESK_DELETE_TIME_ENTRY` | Delete Time Entry | Tool to permanently delete a time entry from Freshdesk. Use when you need to remove a specific time entry. Note: Once deleted, the time entry cannot be restored. |
| `FRESHDESK_EXPORT_CONTACTS` | Export Contacts | Tool to initiate an asynchronous export of contacts from Freshdesk to CSV file. Use when you need to export contact data for backup, sync with external databases, or data analysis. The API returns an export job ID which can be used to retrieve the download URL once processing completes. |
| `FRESHDESK_GET_ACCOUNT` | Get Account | Tool to view Freshdesk account information. Use when you need to retrieve comprehensive account details including organization information, agent counts, timezone, data center location, plan tier, address, and primary contact information. |
| `FRESHDESK_GET_AGENT` | Get Agent | Tool to retrieve detailed information about a specific agent by ID. Use when you need to view a particular agent's profile, contact information, availability status, and role assignments. |
| `FRESHDESK_GET_AGENT_AVAILABILITY` | Get Agent Availability | Tool to retrieve availability information for a specific agent. Use when you need to check an agent's availability across different channels, their assignment limits, and current workload. |
| `FRESHDESK_GET_AGENTS` | Search Agents Autocomplete | Tool to search for agents using autocomplete functionality in Freshdesk. Use when you need to quickly find agents by name or email keyword for autocomplete suggestions. |
| `FRESHDESK_GET_BUSINESS_HOURS` | Get Business Hours | Retrieves all business hours configurations from Freshdesk. Use this tool to get a complete list of all business hour configurations including working hours schedules, time zones, and whether each configuration is set as the default for the account. No input parameters are required. Returns an array of all business hour configurations with their schedules for each day of the week. |
| `FRESHDESK_GET_CANNED_RESPONSE_FOLDERS` | Get Canned Response Folders | Tool to retrieve all canned response folders from Freshdesk. Use when you need to list available folders for organizing canned responses. Note: Empty folders (folders without canned responses) are not listed in the API response. |
| `FRESHDESK_GET_COMPANIES` | Get Companies | Tool to retrieve all companies from a Freshdesk account with pagination support. Use when you need to list companies representing customer organizations. |
| `FRESHDESK_GET_COMPANY` | Get Company | Tool to retrieve detailed information about a specific company by ID. Use when you need to view a particular company's details, domains, and custom fields. |
| `FRESHDESK_GET_COMPANY_FIELDS` | Get Company Fields | Tool to retrieve all company fields configured in Freshdesk. Use when you need to get the complete list of company field definitions including default fields (name, description, domains, etc.) and custom fields with their metadata. |
| `FRESHDESK_GET_CONTACT` | Get Contact | Tool to retrieve detailed information about a specific contact by ID. Use when you need to view a particular contact's profile, contact information, and custom fields. |
| `FRESHDESK_GET_CONTACT_FIELDS` | Get Contact Fields | Tool to retrieve all contact fields configured in Freshdesk. Use when you need to get the complete list of contact field definitions including default fields (name, email, phone, etc.) and custom fields with their metadata. |
| `FRESHDESK_GET_CONTACTS` | Get Contacts | Tool to retrieve all contacts from a Freshdesk account. Use when you need to list contacts, optionally filtered by email, phone, mobile, company, state, or modification date. Results are paginated; iterate through pages using `page` and `per_page` (max 100) to retrieve the full dataset. |
| `FRESHDESK_GET_DISCUSSION_CATEGORY` | Get Discussion Category | Tool to view details of a specific forum category in Freshdesk. Use when you need to retrieve information about a discussion category including its name, description, and timestamps. |
| `FRESHDESK_GET_DISCUSSION_TOPIC` | View Discussion Topic | Tool to retrieve detailed information about a specific discussion topic by ID. Use when you need to view a topic's details, status, and metadata. |
| `FRESHDESK_GET_EMAIL_MAILBOX` | Get Email Mailbox | Tool to retrieve detailed information about a specific email mailbox by ID. Use when you need to view configuration details, status, and settings of a particular email mailbox. |
| `FRESHDESK_GET_FOLDER_RESPONSES` | Get Folder Responses | Tool to retrieve all canned responses within a specific folder in Freshdesk. Use when you need to list all response templates stored in a particular folder. |
| `FRESHDESK_GET_IMPORTED_CONTACTS` | Get Imported Contacts | Tool to retrieve details of all contact import operations in Freshdesk. Use when you need to view import history, check import status, or get information about failed imports. |
| `FRESHDESK_GET_JOB` | Get Job | Tool to view the status of a bulk job operation. Use when you need to check the status of bulk ticket updates or bulk ticket deletions. |
| `FRESHDESK_GET_SCENARIO_AUTOMATIONS_JSON` | List All Scenario Automations | Tool to list all scenario-based automations in Freshdesk. Use when you need to retrieve the complete list of scenario automations with their configurations. |
| `FRESHDESK_GET_SEARCH` | Filter Tickets | Tool to search and filter tickets in Freshdesk using flexible query syntax. Use when you need to find tickets based on status, priority, tags, custom fields, dates, or other ticket attributes with complex filtering logic. |
| `FRESHDESK_GET_TICKETS` | Get Tickets | Retrieves a list of tickets from Freshdesk. Tickets are returned under `response_data` in the response object. |
| `FRESHDESK_GET_TICKET_TIME_ENTRIES` | Get Ticket Time Entries | Tool to retrieve all time entries for a specific ticket in Freshdesk. Use when you need to view time logs associated with a particular ticket. |
| `FRESHDESK_GET_TICKET_USER_ACCESS` | Get Ticket User Access | Tool to retrieve agent access information for a specific ticket in Freshdesk. Use when you need to check which agents have permission to view or interact with a ticket. Returns a list of agent IDs that have access to the specified ticket. |
| `FRESHDESK_GET_TRANSLATED_SOLUTION_CATEGORY` | Get Translated Solution Category | Tool to view a translated solution category in Freshdesk. Use when you need to retrieve a solution category in a specific language other than the default language. |
| `FRESHDESK_HARD_DELETE_CONTACT` | Hard Delete Contact | Tool to permanently delete a contact from Freshdesk. Use when you need to completely remove a contact's profile, tickets, calls, forum topics, ratings, and notes (useful for GDPR compliance). By default, the contact must be soft-deleted first unless force=true is used. This deletion is irreversible. |
| `FRESHDESK_IMPORT_CONTACT` | Import Contact | Tool to import contacts in bulk from a CSV file to Freshdesk. Use when you need to create multiple contacts at once from a CSV file with field mappings. |
| `FRESHDESK_LIST_ADMIN_GROUPS` | List Admin Groups | Tool to list all admin groups in Freshdesk. Use when you need to retrieve all groups configured in the account with their members, escalation settings, and configuration details. |
| `FRESHDESK_LIST_ALL_AGENTS_IN_A_GROUP` | List All Agents in a Group | Tool to retrieve all agents associated with a specific group in Freshdesk. Use when you need to get the list of agents assigned to a particular group. |
| `FRESHDESK_LIST_ALL_SECTIONS_FOR_TICKET_FIELD` | List All Sections for a Ticket Field | Tool to retrieve all dynamic sections for a specific ticket field in Freshdesk. Use when you need to view all sections associated with a dropdown field that controls dynamic field visibility. |
| `FRESHDESK_LIST_ALL_SKILLS` | List All Skills | Tool to retrieve all skills configured in Freshdesk account. Use when you need to get the complete list of skills available for ticket routing and agent assignment. |
| `FRESHDESK_LIST_ALL_TICKET_CONVERSATIONS` | List All Ticket Conversations | Tool to retrieve all conversations of a specific ticket in Freshdesk. Use when you need to view all messages, notes, and replies associated with a ticket. |
| `FRESHDESK_LIST_AUTOMATION_RULES` | List Automation Rules | Tool to list all automation rules for a specific automation type in Freshdesk. Use when you need to retrieve all automation rules for ticket creation, time-based triggers, or ticket updates. |
| `FRESHDESK_LIST_DISCUSSIONS` | List All Forum Categories | Tool to retrieve all forum categories (discussions) from Freshdesk. Use when you need to list all discussion categories available in the account. Supports pagination via page parameter. |
| `FRESHDESK_LIST_DISCUSSIONS_TOPICS` | List All Topics in a Forum | Tool to retrieve all discussion topics within a specified forum in Freshdesk. Use when you need to list topics in a specific forum. Supports pagination and filtering by user participation. |
| `FRESHDESK_LIST_EMAIL` | List Email Mailboxes | Tool to retrieve all email mailbox configurations from Freshdesk account. Use when you need to view support email addresses, mailbox settings, or filter mailboxes by product, group, or status. |
| `FRESHDESK_LIST_EMAIL_CONFIGS` | List All Email Configs | Retrieve all email configurations from a Freshdesk account. Returns a list of email configs including support email addresses, associated products, groups, and active status. Useful for viewing mailbox configurations or finding email config IDs needed for other operations. |
| `FRESHDESK_LIST_FORUMS_IN_CATEGORY` | List Forums in Category | Tool to retrieve all forums within a specified category in Freshdesk. Use when you need to list all forums that exist within a specific forum category. Supports pagination via page and per_page parameters. |
| `FRESHDESK_LIST_MONITORED_TOPICS` | List Monitored Topics | Tool to retrieve all discussion topics that are monitored/followed by a specific user in Freshdesk. Use when you need to list topics a user is following. |
| `FRESHDESK_LIST_PARTICIPATED_TOPICS` | List Participated Topics | Tool to retrieve discussion topics that a user has participated in by creating or commenting. Use when you need to list topics where a specific user has been active. Only admins can fetch topics for other users; without user_id, returns authenticated user's topics. |
| `FRESHDESK_LIST_PRODUCTS` | List All Products | Tool to retrieve all products configured in Freshdesk account. Use when you need to get the complete list of products available for support and ticket categorization. |
| `FRESHDESK_LIST_ROLES` | List All Roles | Tool to retrieve all roles available in the Freshdesk system with their permissions and details. Use when you need to get the complete list of roles for agents and collaborators. |
| `FRESHDESK_LIST_SATISFACTION_RATINGS` | List Satisfaction Ratings | Tool to retrieve all customer satisfaction survey ratings from Freshdesk. Use when you need to view satisfaction ratings, optionally filtered by creation date. By default, only returns results from the previous month unless created_since parameter is specified. |
| `FRESHDESK_LIST_SLA_POLICIES` | List All SLA Policies | Tool to retrieve all SLA (Service Level Agreement) policies in Freshdesk. Use when you need to get the complete list of SLA policies with their configurations, targets, and applicability conditions. |
| `FRESHDESK_LIST_SOLUTION_ARTICLES` | List Solution Articles | Tool to retrieve all solution articles within a specified folder in Freshdesk. Use when you need to list all articles that exist within a specific solution folder. |
| `FRESHDESK_LIST_SOLUTION_CATEGORIES` | List Solution Categories | Tool to retrieve all solution categories in Freshdesk. Use when you need to list all available solution categories in the knowledge base. |
| `FRESHDESK_LIST_SOLUTION_FOLDERS` | List Solution Folders | Tool to retrieve all folders within a specified solution category in Freshdesk. Use when you need to list all folders that exist within a specific solution category. |
| `FRESHDESK_LIST_SOLUTIONS_CATEGORY_FOLDERS_TRANSLATED` | List Translated Category Folders | Tool to retrieve all translated solution folders in a category. Use when you need to list all folders in a specific language for a given solution category. |
| `FRESHDESK_LIST_SOLUTION_SUBFOLDERS` | List Solution Subfolders | Tool to list all subfolders within a specific solution folder in Freshdesk. Use when you need to retrieve the child folders of a parent folder in the knowledge base hierarchy. |
| `FRESHDESK_LIST_SPECIFIC_SECTION_DETAILS` | List a Specific Section Details | Tool to retrieve details of a specific section within a ticket field in Freshdesk. Use when you need to view information about a particular dynamic section including its label, associated choices, and contained fields. |
| `FRESHDESK_LIST_SURVEYS` | List All Surveys | Tool to retrieve all surveys from a Freshdesk account. Use when you need to view the list of surveys, optionally filtered by state (active or inactive). Note that only one survey can be active at any given time. |
| `FRESHDESK_LIST_TICKET_FIELDS` | List All Ticket Fields | Tool to list all ticket fields configured in Freshdesk. Use when you need to retrieve metadata about all ticket field definitions including both default and custom fields. |
| `FRESHDESK_LIST_TICKET_FORMS` | List Ticket Forms | Tool to retrieve all ticket forms from Freshdesk. Use when you need to view the list of available ticket forms, optionally with pagination or portal associations. |
| `FRESHDESK_LIST_TICKET_SATISFACTION_RATINGS` | List Ticket Satisfaction Ratings | Tool to list all satisfaction ratings of a ticket. Use when you need to retrieve customer feedback and survey responses for a specific ticket. |
| `FRESHDESK_LIST_TICKETS_WATCHERS` | List Ticket Watchers | Tool to list all watchers subscribed to a specific Freshdesk ticket. Use when you need to see who is following a ticket and receiving notifications for updates. |
| `FRESHDESK_LIST_TIME_ENTRIES` | List Time Entries | Tool to retrieve all time entries from Freshdesk with optional filtering by company, agent, execution time range, and billable status. Use when you need to view time logs across tickets with support for pagination. |
| `FRESHDESK_LIST_TOPIC_COMMENTS2` | List Topic Comments (Paginated) | Tool to list all comments on a specific discussion topic with pagination support. Use when you need to retrieve comments from a topic with control over page size and pagination. |
| `FRESHDESK_LIST_TRANSLATED_SOLUTION_ARTICLES` | List Translated Solution Articles | Tool to view all translated solution articles in a folder for a specific language. Use when you need to retrieve all articles from a folder in a particular language translation. |
| `FRESHDESK_LIST_TRANSLATED_SUBFOLDERS` | List Translated Subfolders | Tool to list all translated subfolders within a parent folder in Freshdesk. Use when you need to retrieve subfolders in a specific language for a given folder. |
| `FRESHDESK_PATCH_ADMIN_GROUPS_AGENTS` | Update Group Agents | Tool to add or remove agents in a Freshdesk group. Use when you need to modify the list of agents assigned to a specific group by providing an array of agent IDs. |
| `FRESHDESK_REMOVE_WATCHER` | Remove Watcher from Ticket | Tool to remove the authenticated user as a watcher from a Freshdesk ticket. Use when you need to stop receiving email notifications for ticket updates like replies or status changes. The API automatically uses the authenticated user's credentials and does not require additional parameters. |
| `FRESHDESK_REPLY_TO_FORWARD_TICKET` | Reply to Forward Ticket | Tool to reply to or forward a ticket to external email addresses. Use when you need to send a ticket reply to specific email recipients outside the normal ticket flow. |
| `FRESHDESK_REPLY_TO_TICKET` | Reply to Ticket | Tool to create a public reply to an existing support ticket in Freshdesk. Use when an agent needs to respond to a ticket. The reply is sent to the ticket requester and any CC'd recipients. Supports both plain text and HTML content, file attachments, and email distribution control. |
| `FRESHDESK_SEARCH_AGENTS` | Search Agents | Tool to search and filter agents in Freshdesk. Use when you need to find agents by email, phone, mobile, or state (fulltime/occasional). |
| `FRESHDESK_SEARCH_COMPANIES` | Search Companies | Tool to search and filter companies in Freshdesk using query strings with custom fields. Use when you need to find companies based on searchable fields like created_at, updated_at, or custom company fields. Note: Standard fields like 'name' are NOT searchable and will cause validation errors. |
| `FRESHDESK_SEARCH_COMPANY` | Search Companies Autocomplete | Tool to search for companies using autocomplete functionality in Freshdesk. Use when you need to quickly find companies by name or partial name keyword for autocomplete suggestions. |
| `FRESHDESK_SEARCH_CONTACTS` | Search Contacts | Tool to search and filter contacts in Freshdesk using query-based search. Use when you need to find contacts based on fields like email, phone, mobile, company_id, or other searchable contact attributes. |
| `FRESHDESK_SEARCH_CONTACTS_AUTOCOMPLETE` | Search Contacts Autocomplete | Tool to search for contacts using autocomplete functionality in Freshdesk. Use when you need to quickly find contacts by name, email, or other contact attributes for autocomplete suggestions. |
| `FRESHDESK_SEARCH_SOLUTION_ARTICLES` | Search Solution Articles | Tool to search solution articles in Freshdesk knowledge base by keyword. Use when you need to find articles by searching titles and content. |
| `FRESHDESK_TOGGLE_TIMER` | Toggle Timer | Tool to toggle the timer on a time entry to start or stop time tracking. Use when you need to start tracking time on a stopped timer or stop a currently running timer. |
| `FRESHDESK_UPDATE_ADMIN_GROUP` | Update Admin Group | Tool to update an existing admin-level support agent group in Freshdesk. Use when you need to modify group details such as name, description, assigned agents, or escalation settings at the admin level. |
| `FRESHDESK_UPDATE_ADMIN_TICKET_FIELD` | Update Admin Ticket Field | Tool to update an existing ticket field configuration in Freshdesk. Use when you need to modify field properties such as labels, visibility settings, or requirement flags. |
| `FRESHDESK_UPDATE_ADMIN_TICKET_FIELD_SECTION` | Update Admin Ticket Field Section | Tool to update a section within a ticket field in Freshdesk. Use when you need to modify section properties like label, associated choices, or contained fields. |
| `FRESHDESK_UPDATE_AGENT` | Update Agent | Tool to update an existing agent's information in Freshdesk. Use when you need to modify agent details such as email, permissions, signature, skills, groups, roles, or focus mode. |
| `FRESHDESK_UPDATE_AGENT_AVAILABILITY` | Update Agent Availability | Tool to update agent availability settings in Freshdesk. Use when you need to modify an agent's load settings by changing assignment limits for different channels. |
| `FRESHDESK_UPDATE_AUTOMATIONS` | Update Automation Rule | Tool to update an existing automation rule in Freshdesk. Use when you need to modify automation rule properties like name, description, active status, conditions, or actions. Supports ticket creation rules (type 1), time-based triggers (type 3), and ticket update rules (type 4). |
| `FRESHDESK_UPDATE_CANNED_RESPONSE` | Update Canned Response | Tool to update an existing canned response in Freshdesk. Use when you need to modify the title, content, folder location, visibility, or group access of a canned response template. |
| `FRESHDESK_UPDATE_CANNED_RESPONSE_FOLDER` | Update Canned Response Folder | Updates the name of an existing canned response folder in Freshdesk. Use this to rename folders that organize canned response templates. |
| `FRESHDESK_UPDATE_COMPANIES` | Update Company | Tool to update an existing company's information in Freshdesk. Use when you need to modify company details, domains, or custom fields. |
| `FRESHDESK_UPDATE_CONTACT` | Update Contact | Tool to update an existing contact's information in Freshdesk. Use when you need to modify contact details such as name, email, phone, job title, or custom fields. |
| `FRESHDESK_UPDATE_CONTACT_FIELD` | Update Contact Field | Tool to update a contact field's configuration in Freshdesk. Use when you need to modify field properties like labels, requirements, or visibility settings for agents and customers. |
| `FRESHDESK_UPDATE_CONTACT_MAKE_AGENT` | Make Agent | Tool to convert a contact into an agent in Freshdesk. Use when you need to grant a contact access to the helpdesk as an agent with specific permissions and roles. |
| `FRESHDESK_UPDATE_CONVERSATIONS` | Update Conversation | Tool to update the content of a conversation note in Freshdesk. Use when you need to modify existing public or private notes. Note: Only public and private notes can be edited, not incoming replies. The 'private' parameter cannot be modified. |
| `FRESHDESK_UPDATE_DISCUSSION_CATEGORY` | Update Discussion Category | Tool to update an existing discussion category in Freshdesk forums. Use when you need to modify the name or description of a forum category. |
| `FRESHDESK_UPDATE_DISCUSSION_COMMENT` | Update Discussion Comment | Tool to update an existing comment in a discussion forum. Use when you need to edit the content of a comment in Freshdesk discussions. |
| `FRESHDESK_UPDATE_DISCUSSION_FORUM` | Update Discussion Forum | Tool to update an existing discussion forum in Freshdesk. Use when you need to modify forum details such as name, description, category, type, or visibility settings. |
| `FRESHDESK_UPDATE_DISCUSSION_TOPIC` | Update Discussion Topic | Tool to update an existing discussion topic in Freshdesk. Use when you need to modify a topic's title, message, lock status, or other properties. |
| `FRESHDESK_UPDATE_EMAIL_SETTINGS` | Update Email Settings | Tool to update mailbox settings for email handling in Freshdesk. Use when you need to configure email behavior such as personalized replies, ticket threading, auto-response detection, or agent conversation settings. |
| `FRESHDESK_UPDATE_NOTIFICATION_EMAIL_BCC` | Update Automatic BCC Emails | Tool to update automatic BCC email addresses for all ticket communications in Freshdesk. Use when you need to configure which email addresses should automatically receive BCC copies of all outgoing emails. |
| `FRESHDESK_UPDATE_SLA_POLICIES` | Update SLA Policy | Tool to update an existing SLA (Service Level Agreement) policy in Freshdesk. Use when you need to modify service level targets, policy settings, or applicability conditions for an SLA policy. |
| `FRESHDESK_UPDATE_SOLUTION_CATEGORY` | Update Solution Category | Tool to update an existing solution category in Freshdesk. Use when you need to modify the name or description of a solution category. |
| `FRESHDESK_UPDATE_SOLUTION_FOLDER` | Update Solution Folder | Tool to update an existing solution folder in Freshdesk knowledge base. Use when you need to modify folder properties such as name, description, visibility settings, or folder hierarchy. |
| `FRESHDESK_UPDATE_SOLUTIONS` | Update Solution Article | Tool to update an existing solution article in Freshdesk. Use when you need to modify the title, description, status, tags, or SEO metadata of a solution article. All parameters are optional; only include fields you want to update. |
| `FRESHDESK_UPDATE_TICKET` | Update Ticket | Tool to update an existing ticket in Freshdesk. Use when you need to modify ticket attributes like subject, priority, status, description, or custom fields. |
| `FRESHDESK_UPDATE_TICKET_BULK_WATCH` | Bulk Add Watcher to Tickets | Tool to add the authenticated user as a watcher to multiple tickets in a single bulk operation. Use when you need to follow multiple tickets and receive email notifications for their updates. Returns lists of succeeded and failed ticket IDs. |
| `FRESHDESK_UPDATE_TICKET_FORMS` | Update Ticket Form | Tool to update an existing ticket form in Freshdesk. Use when you need to modify ticket form properties like title, description, default status, or field configurations. |
| `FRESHDESK_UPDATE_TICKET_SUMMARY` | Update Ticket Summary | Tool to update the AI-generated summary of a ticket in Freshdesk. Use when you need to modify or set the summary content for a ticket. The summary provides a concise overview of the ticket's content and history. |
| `FRESHDESK_UPDATE_TICKET_USER_ACCESS` | Update Ticket User Access | Tool to update agent access to a specific ticket in Freshdesk by adding or removing agents. Use when you need to grant or revoke agent permission to view or interact with a ticket. Returns the list of agent IDs that have access after the update. |
| `FRESHDESK_UPDATE_TIME_ENTRY` | Update Time Entry | Tool to update an existing time entry in Freshdesk. Use when you need to modify time entry details such as duration, notes, billable status, or agent assignment. Note: start_time cannot be updated if the timer is running, and timer_running cannot be set to its current value. |
| `FRESHDESK_VIEW_A_CANNED_RESPONSE` | View a Canned Response | Tool to view details of a specific canned response in Freshdesk. Use when you need to retrieve information about a canned response including its title, content, folder location, and attachments. |
| `FRESHDESK_VIEW_AUTOMATIONS` | View Automation Rule | Tool to view details of a specific automation rule in Freshdesk. Use when you need to retrieve comprehensive information about an automation rule including its triggers, conditions, and actions. |
| `FRESHDESK_VIEW_BUSINESS_HOUR` | View a Business Hour | Tool to retrieve a specific business hour configuration from Freshdesk. Use when you need to view detailed information about business hours including working schedule, time zone, and holiday list. |
| `FRESHDESK_VIEW_COMPANY_FIELD` | View a Company Field | Tool to retrieve details of a specific company field by ID. Use when you need to view configuration and metadata for a single company field including its type, position, and choices for dropdown fields. |
| `FRESHDESK_VIEW_CONTACT_FIELD` | View a Contact Field | Tool to retrieve details of a specific contact field by ID. Use when you need to view configuration and metadata for a single contact field including its type, position, and customer/agent requirements. |
| `FRESHDESK_VIEW_EMAIL` | View Email Mailbox Settings | Tool to retrieve mailbox settings for the Freshdesk account. Use when you need to view email configuration settings such as threading options, requester creation settings, and agent conversation permissions. |
| `FRESHDESK_VIEW_EMAIL_CONFIGS` | View Email Config | Tool to view details of a specific email configuration in Freshdesk. Use when you need to retrieve information about an email config including its associated product, group, and email addresses. |
| `FRESHDESK_VIEW_GROUP` | View Group | Tool to view details of a specific admin group in Freshdesk. Use when you need to retrieve information about a group including its members, escalation settings, and automatic assignment configuration. |
| `FRESHDESK_VIEW_NOTIFICATIONS` | View Automatic BCC Emails | Tool to view automatic BCC email addresses configured in Freshdesk. Use when you need to retrieve the list of email addresses that are automatically added as BCC to outgoing emails from the helpdesk. |
| `FRESHDESK_VIEW_PRODUCTS` | View Product | Tool to retrieve detailed information about a specific product by ID. Use when you need to view a particular product's details including name, description, primary email, and default status. |
| `FRESHDESK_VIEW_ROLES` | View a Role | Tool to view detailed information about a specific role by ID. Use when you need to retrieve a particular role's name, description, default status, and agent type. |
| `FRESHDESK_VIEW_SETTINGS` | View Helpdesk Settings | Tool to retrieve helpdesk settings from Freshdesk. Use when you need to view language configuration including primary language, supported languages, portal languages, and help widget languages. |
| `FRESHDESK_VIEW_SKILL` | View a Skill | Tool to retrieve a specific skill from Freshdesk by ID. Use when you need to view detailed information about a particular skill including its name, rank, associated agents, and routing conditions. |
| `FRESHDESK_VIEW_SOLUTION_CATEGORY` | View Solution Category | Tool to view a specific solution category by ID in Freshdesk. Use when you need to retrieve detailed information about a single solution category including its name, description, and visibility settings. |
| `FRESHDESK_VIEW_SOLUTION_FOLDER` | View Solution Folder | Tool to view a specific solution folder by ID in Freshdesk. Use when you need to retrieve detailed information about a solution folder including its name, description, hierarchy, and visibility settings. |
| `FRESHDESK_VIEW_SOLUTIONS` | View Solution Article | Tool to view a specific solution article by ID in Freshdesk. Use when you need to retrieve detailed information about a single article including its content, metadata, SEO data, and engagement metrics. |
| `FRESHDESK_VIEW_TICKET` | View Ticket | Views an existing ticket in Freshdesk. Ticket details are returned nested under `response_data` in the tool response. |
| `FRESHDESK_VIEW_TICKET_FIELD` | View a Ticket Field | Tool to retrieve a single ticket field configuration from Freshdesk. Use when you need to view detailed information about a specific ticket field including its type, position, visibility settings, and validation requirements. |
| `FRESHDESK_VIEW_TICKET_FORM_FIELD` | View a Ticket Form's Field | Tool to retrieve a specific field from a ticket form in Freshdesk. Use when you need to view detailed configuration of a field including its type, position, visibility, and requirement settings. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Freshdesk MCP server is an implementation of the Model Context Protocol that connects your AI agent to Freshdesk. It provides structured and secure access so your agent can perform Freshdesk operations on your behalf through a secure, permission-based interface.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Composio API Key and OpenAI API Key
- Primary know-how of OpenAI Agents SDK
- A live Freshdesk project
- Some knowledge of Python or Typescript

### 1. Getting API Keys for OpenAI and Composio

OpenAI API Key
- Go to the [OpenAI dashboard](https://platform.openai.com/settings/organization/api-keys) and create an API key. You'll need credits to use the models, or you can connect to another model provider.
- Keep the API key safe.
Composio API Key
- Log in to the [Composio dashboard](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Go to Settings and copy your API key.

### 2. Install dependencies

Install the Composio SDK and the OpenAI Agents SDK.
```python
pip install composio_openai_agents openai-agents python-dotenv
```

```typescript
npm install @composio/openai-agents @openai/agents dotenv
```

### 3. Set up environment variables

Create a .env file and add your OpenAI and Composio API keys.
```bash
OPENAI_API_KEY=sk-...your-api-key
COMPOSIO_API_KEY=your-api-key
USER_ID=composio_user@gmail.com
```

### 4. Import dependencies

What's happening:
- You're importing all necessary libraries.
- The Composio and OpenAIAgentsProvider classes are imported to connect your OpenAI agent to Composio tools like Freshdesk.
```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';
```

### 5. Set up the Composio instance

No description provided.
```python
load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())
```

```typescript
dotenv.config();

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});
```

### 6. Create a Tool Router session

What is happening:
- You give the Tool Router the user id and the toolkits you want available. Here, it is only freshdesk.
- The router checks the user's Freshdesk connection and prepares the MCP endpoint.
- The returned session.mcp.url is the MCP URL that your agent will use to access Freshdesk.
- This approach keeps things lightweight and lets the agent request Freshdesk tools only when needed during the conversation.
```python
# Create a Freshdesk Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["freshdesk"]
)

mcp_url = session.mcp.url
```

```typescript
// Create Tool Router session for Freshdesk
const session = await composio.create(userId as string, {
  toolkits: ['freshdesk'],
});
const mcpUrl = session.mcp.url;
```

### 7. Configure the agent

No description provided.
```python
# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Freshdesk. "
        "Help users perform Freshdesk operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)
```

```typescript
// Configure agent with MCP tool
const agent = new Agent({
  name: 'Assistant',
  model: 'gpt-5',
  instructions:
    'You are a helpful assistant that can access Freshdesk. Help users perform Freshdesk operations through natural language.',
  tools: [
    hostedMcpTool({
      serverLabel: 'tool_router',
      serverUrl: mcpUrl,
      headers: { 'x-api-key': composioApiKey },
      requireApproval: 'never',
    }),
  ],
});
```

### 8. Start chat loop and handle conversation

No description provided.
```python
print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
// Keep conversation state across turns
const conversationSession = new OpenAIConversationsSession();

// Simple CLI
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: 'You: ',
});

console.log('\nComposio Tool Router session created.');
console.log('\nChat started. Type your requests below.');
console.log("Commands: 'exit', 'quit', or 'q' to end\n");

try {
  const first = await run(agent, 'What can you help me with?', { session: conversationSession });
  console.log(`Assistant: ${first.finalOutput}\n`);
} catch (e) {
  console.error('Error:', e instanceof Error ? e.message : e, '\n');
}

rl.prompt();

rl.on('line', async (userInput) => {
  const text = userInput.trim();

  if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
    console.log('Goodbye!');
    rl.close();
    process.exit(0);
  }

  if (!text) {
    rl.prompt();
    return;
  }

  try {
    const result = await run(agent, text, { session: conversationSession });
    console.log(`\nAssistant: ${result.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();
});

rl.on('close', () => {
  console.log('\n👋 Session ended.');
  process.exit(0);
});
```

## Complete Code

```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession

load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())

# Create Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["freshdesk"]
)
mcp_url = session.mcp.url

# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Freshdesk. "
        "Help users perform Freshdesk operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)

print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});

async function main() {
  // Create Tool Router session
  const session = await composio.create(userId as string, {
    toolkits: ['freshdesk'],
  });
  const mcpUrl = session.mcp.url;

  // Configure agent with MCP tool
  const agent = new Agent({
    name: 'Assistant',
    model: 'gpt-5',
    instructions:
      'You are a helpful assistant that can access Freshdesk. Help users perform Freshdesk operations through natural language.',
    tools: [
      hostedMcpTool({
        serverLabel: 'tool_router',
        serverUrl: mcpUrl,
        headers: { 'x-api-key': composioApiKey },
        requireApproval: 'never',
      }),
    ],
  });

  // Keep conversation state across turns
  const conversationSession = new OpenAIConversationsSession();

  // Simple CLI
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'You: ',
  });

  console.log('\nComposio Tool Router session created.');
  console.log('\nChat started. Type your requests below.');
  console.log("Commands: 'exit', 'quit', or 'q' to end\n");

  try {
    const first = await run(agent, 'What can you help me with?', { session: conversationSession });
    console.log(`Assistant: ${first.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();

  rl.on('line', async (userInput) => {
    const text = userInput.trim();

    if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
      console.log('Goodbye!');
      rl.close();
      process.exit(0);
    }

    if (!text) {
      rl.prompt();
      return;
    }

    try {
      const result = await run(agent, text, { session: conversationSession });
      console.log(`\nAssistant: ${result.finalOutput}\n`);
    } catch (e) {
      console.error('Error:', e instanceof Error ? e.message : e, '\n');
    }

    rl.prompt();
  });

  rl.on('close', () => {
    console.log('\nSession ended.');
    process.exit(0);
  });
}

main().catch((err) => {
  console.error('Fatal error:', err);
  process.exit(1);
});
```

## Conclusion

This was a starter code for integrating Freshdesk MCP with OpenAI Agents SDK to build a functional AI agent that can interact with Freshdesk.
Key features:
- Hosted MCP tool integration through Composio's Tool Router
- SQLite session persistence for conversation history
- Simple async chat loop for interactive testing
You can extend this by adding more toolkits, implementing custom business logic, or building a web interface around the agent.

## How to build Freshdesk MCP Agent with another framework

- [ChatGPT](https://composio.dev/toolkits/freshdesk/framework/chatgpt)
- [Claude Agent SDK](https://composio.dev/toolkits/freshdesk/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/freshdesk/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/freshdesk/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/freshdesk/framework/codex)
- [Cursor](https://composio.dev/toolkits/freshdesk/framework/cursor)
- [VS Code](https://composio.dev/toolkits/freshdesk/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/freshdesk/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/freshdesk/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/freshdesk/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/freshdesk/framework/cli)
- [Google ADK](https://composio.dev/toolkits/freshdesk/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/freshdesk/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/freshdesk/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/freshdesk/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/freshdesk/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/freshdesk/framework/crew-ai)

## Related Toolkits

- [Google Sheets](https://composio.dev/toolkits/googlesheets) - Google Sheets is a cloud-based spreadsheet tool for real-time collaboration and data analysis. It lets teams work together from anywhere, updating information instantly.
- [Notion](https://composio.dev/toolkits/notion) - Notion is a collaborative workspace for notes, docs, wikis, and tasks. It streamlines team knowledge, project tracking, and workflow customization in one place.
- [Airtable](https://composio.dev/toolkits/airtable) - Airtable combines the flexibility of spreadsheets with the power of a database for easy project and data management. Teams use Airtable to organize, track, and collaborate with custom views and automations.
- [Asana](https://composio.dev/toolkits/asana) - Asana is a collaborative work management platform for teams to organize and track projects. It streamlines teamwork, boosts productivity, and keeps everyone aligned on goals.
- [Google Tasks](https://composio.dev/toolkits/googletasks) - Google Tasks is a to-do list and task management tool integrated into Gmail and Google Calendar. It helps you organize, track, and complete tasks across your Google ecosystem.
- [Linear](https://composio.dev/toolkits/linear) - Linear is a modern issue tracking and project planning tool for fast-moving teams. It helps streamline workflows, organize projects, and boost productivity.
- [Jira](https://composio.dev/toolkits/jira) - Jira is Atlassian’s platform for bug tracking, issue tracking, and agile project management. It helps teams organize work, prioritize tasks, and deliver projects efficiently.
- [Clickup](https://composio.dev/toolkits/clickup) - ClickUp is an all-in-one productivity platform for managing tasks, docs, goals, and team collaboration. It streamlines project workflows so teams can work smarter and stay organized in one place.
- [Monday](https://composio.dev/toolkits/monday) - Monday.com is a customizable work management platform for project planning and collaboration. It helps teams organize tasks, automate workflows, and track progress in real time.
- [Addressfinder](https://composio.dev/toolkits/addressfinder) - Addressfinder is a data quality platform for verifying addresses, emails, and phone numbers. It helps you ensure accurate customer and contact data every time.
- [Aeroleads](https://composio.dev/toolkits/aeroleads) - Aeroleads is a B2B lead generation platform for finding business emails and phone numbers. Grow your sales pipeline faster with powerful prospecting tools.
- [Agiled](https://composio.dev/toolkits/agiled) - Agiled is an all-in-one business management platform for CRM, projects, and finance. It helps you streamline workflows, consolidate client data, and manage business processes in one place.
- [Ascora](https://composio.dev/toolkits/ascora) - Ascora is a cloud-based field service management platform for service businesses. It streamlines scheduling, invoicing, and customer operations in one place.
- [Autobound](https://composio.dev/toolkits/autobound) - Autobound is an AI-powered sales engagement platform that crafts hyper-personalized outreach and insights. It helps sales teams boost response rates and close more deals through tailored content and recommendations.
- [Basecamp](https://composio.dev/toolkits/basecamp) - Basecamp is a project management and team collaboration tool by 37signals. It helps teams organize tasks, share files, and communicate efficiently in one place.
- [Beeminder](https://composio.dev/toolkits/beeminder) - Beeminder is an online goal-tracking platform that uses monetary pledges to keep you motivated. Stay accountable and hit your targets with real financial incentives.
- [Better proposals](https://composio.dev/toolkits/better_proposals) - Better Proposals is a web-based tool for crafting and sending professional proposals. It helps teams impress clients and close deals faster with slick, easy-to-use templates.
- [Bidsketch](https://composio.dev/toolkits/bidsketch) - Bidsketch is a proposal software that helps businesses create professional proposals quickly and efficiently. It streamlines the proposal process, saving time while boosting client win rates.
- [Bolna](https://composio.dev/toolkits/bolna) - Bolna is an AI platform for building conversational voice agents. It helps businesses automate support and streamline interactions through natural, voice-powered conversations.
- [Botsonic](https://composio.dev/toolkits/botsonic) - Botsonic is a no-code AI chatbot builder for easily creating and deploying chatbots to your website. It empowers businesses to offer conversational experiences without writing code.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Freshdesk MCP?

With a standalone Freshdesk MCP server, the agents and LLMs can only access a fixed set of Freshdesk tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Freshdesk and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with OpenAI Agents SDK?

Yes, you can. OpenAI Agents SDK fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Freshdesk tools.

### Can I manage the permissions and scopes for Freshdesk while using Tool Router?

Yes, absolutely. You can configure which Freshdesk scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Freshdesk data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
