Skip to main content
Glama
freshservice-mcp

freshservice-mcp

by forterro

Freshservice MCP Server

Overview

A powerful MCP (Model Context Protocol) server that integrates with Freshservice, enabling AI models to perform IT service management operations. This integration bridge empowers your AI assistants to manage tickets, changes, problems, releases, assets, projects, and more.

Related MCP server: Freshservice MCP Server

Key Features

  • 36 tools organized into 13 independently loadable scopes

  • Dual authentication: per-user OAuth2 (via MCP gateway) with API key fallback

  • Multiple transports: stdio (local), SSE, and streamable-http

  • Dynamic form discovery: auto-discover custom fields for any entity type

  • Scope-based loading: load only the tool modules you need

  • Docker & Helm: ready for Kubernetes deployment

Architecture

Scope

Tools

Description

tickets

manage_ticket, manage_ticket_conversation, manage_service_catalog

Ticket CRUD, conversations, service catalog

changes

manage_change, manage_change_note, manage_change_task, manage_change_time_entry, manage_change_approval

Change requests with full sub-resource support

problems

manage_problem, manage_problem_note, manage_problem_task, manage_problem_time_entry

Problem management

releases

manage_release, manage_release_note, manage_release_task, manage_release_time_entry

Release management

assets

manage_asset, manage_asset_details, manage_asset_relationship

Assets/CMDB

status_page

manage_status_page, manage_maintenance_window

Status pages, maintenance, incidents

departments

manage_department, manage_location

Departments & locations

agents

get_me, manage_agent, manage_agent_group

Identity, agents & groups

requesters

manage_requester, manage_requester_group

Requesters & groups

solutions

manage_solution

Knowledge base

projects

manage_project, manage_project_task

Project management (NewGen)

products

manage_product

Product catalog

misc

manage_canned_response, manage_workspace

Canned responses, workspaces

Plus 2 discovery tools always loaded: discover_form_fields and clear_field_cache.

Quick Start

Local Development (API key + stdio)

FRESHSERVICE_APIKEY=<key> FRESHSERVICE_DOMAIN=yourcompany.freshservice.com freshservice-mcp

Kubernetes / Gateway (OAuth2 + SSE)

helm install freshservice-mcp oci://ghcr.io/forterro/charts/freshservice-mcp \
  --version 0.2.0 \
  --set config.FRESHSERVICE_DOMAIN=yourcompany.freshservice.com

No API key needed — the MCP gateway forwards per-user OAuth2 tokens.

Documentation

Document

Description

Authentication

API key setup, OAuth2 via gateway, creating a Freshservice OAuth app, JWT token structure

Deployment

Local, Docker, Helm chart, client configs (Claude Desktop, VS Code), transports, scopes, troubleshooting

Tools Reference

Complete reference for all 36 tools with actions and parameters

Examples

Example prompts for common operations

License

MIT License. See the LICENSE file for details.

Additional Resources


Available Tools

36 tools
clear_field_cacheB

Clear the cached form-field definitions.

    Args:
        entity_type: Specific entity to clear ('ticket', 'change', …) or omit to clear all.
    

Inputs: entity_type. Returns: result

discover_form_fieldsA

Discover the form-field definitions for an entity type in your Freshservice organisation.

    Returns the list of fields (name, label, type, required, choices…) that
    your org has configured.  Results are cached locally for 1 hour.

    Args:
        entity_type: One of 'ticket', 'change', 'agent', 'requester', 'asset_type'
        force_refresh: Set to true to bypass the cache and re-fetch from Freshservice
    

Inputs: entity_type (required), force_refresh. Returns: result

get_meA

Return the identity of the currently authenticated user.

When an OAuth token is present (forwarded by ContextForge), the tool decodes the JWT payload to extract the user's email, then queries the Freshservice agents API to return the full agent profile. Falls back to GET /api/v2/agents/me when using API key authentication (local dev / stdio).

Inputs: no named parameters. Returns: result

manage_agentC

Unified agent operations.

    Args:
        action: 'create', 'update', 'get', 'list', 'filter', 'get_fields'
        agent_id: Required for get, update
        first_name: MANDATORY for create
        email: Agent email (create)
        query: Filter query string (filter)
        page/per_page: Pagination (list)
    

Inputs: action (required), page, email, query, +18 more. Returns: result

manage_agent_groupC

Manage agent groups.

    Args:
        action: 'create', 'update', 'get', 'list'
        group_id: Required for get, update
        name: Group name (create — MANDATORY)
        description: Group description
        agent_ids: List of agent IDs in the group
        auto_ticket_assign: Auto-assign tickets
        escalate_to: Agent ID for escalation
        unassigned_for: Duration before escalation (e.g. '30m', '1h')
        group_fields: Generic fields dict (update — alternative to explicit params)
    

Inputs: action (required), name, group_id, agent_ids, +5 more. Returns: result

manage_assetC

Unified asset operations.

    Args:
        action: One of 'create', 'update', 'delete', 'delete_permanently',
                'restore', 'get', 'list', 'search', 'filter', 'move',
                'get_types', 'get_type'
        display_id: Asset display ID (get, update, delete, restore, move, details)
        asset_type_id: Asset type ID (create — MANDATORY, get_type)
        name: Asset name (create — MANDATORY)
        asset_tag: Asset tag (e.g. 'ASSET-9')
        impact: 'low', 'medium', or 'high' (default: 'low')
        usage_type: 'permanent' or 'loaner' (default: 'permanent')
        description: Asset description
        user_id: User ID (Used By)
        location_id: Location ID
        department_id: Department ID
        agent_id: Agent ID (Managed By)
        group_id: Group ID (Managed By Group)
        assigned_on: ISO date when assigned
        workspace_id: Workspace ID (create, list, move)
        type_fields: Asset-type-specific fields dict
        asset_fields: Generic update fields dict (update — alternative to explicit params)
        search_query: Search by name/tag/serial (search)
        filter_query: Filter expression (filter)
        include: Include extra data, e.g. 'type_fields' (list, get)
        order_by: Sort field (list)
        order_type: 'asc' or 'desc' (list)
        trashed: Include trashed assets (list, search)
        page: Page number
        per_page: Items per page
    

Inputs: action (required), name, page, impact, +21 more. Returns: result

manage_asset_detailsB

Retrieve asset sub-resources.

    Args:
        action: 'components', 'assignment_history', 'requests', 'contracts'
        display_id: The asset display ID
    

Inputs: action (required), display_id (required). Returns: result

manage_asset_relationshipB

Manage asset relationships.

    Args:
        action: 'list_for_asset', 'list_all', 'get', 'create', 'delete',
                'get_types', 'job_status'
        display_id: Asset display ID (list_for_asset)
        relationship_id: Relationship ID (get)
        relationship_ids: List of rel IDs to delete (delete)
        relationships: List of relationship dicts for bulk create (create).
            Each dict: {relationship_type_id, primary_id, primary_type,
                        secondary_id, secondary_type}
        job_id: Job ID returned by async operations (job_status)
        page: Page number (list_all)
        per_page: Items per page (list_all)
    

Inputs: action (required), page, job_id, per_page, +4 more. Returns: result

manage_canned_responseB

Manage canned responses.

    Args:
        action: 'list', 'get', 'list_folders', 'get_folder'
        response_id: Required for get
        folder_id: Required for get_folder
    

Inputs: action (required), folder_id, response_id. Returns: result

manage_changeA

Unified change operations.

    Args:
        action: One of 'create', 'update', 'delete', 'get', 'list', 'filter',
                'close', 'move', 'get_fields'
        change_id: Required for get, update, delete, close, move
        requester_id: Initiator ID (create — MANDATORY)
        subject: Change subject (create — MANDATORY)
        description: HTML description (create — MANDATORY)
        priority: 1=Low, 2=Medium, 3=High, 4=Urgent
        impact: 1=Low, 2=Medium, 3=High
        status: 1=Open, 2=Planning, 3=Awaiting Approval, 4=Pending Release,
                5=Pending Review, 6=Closed
        risk: 1=Low, 2=Medium, 3=High, 4=Very High
        change_type: 1=Minor, 2=Standard, 3=Major, 4=Emergency
        group_id: Agent group ID
        agent_id: Agent ID
        department_id: Department ID
        category: Category string
        sub_category: Sub-category string
        item_category: Item category string
        planned_start_date: ISO datetime
        planned_end_date: ISO datetime
        reason_for_change: Planning field — reason (text/HTML)
        change_impact: Planning field — impact analysis (text/HTML)
        rollout_plan: Planning field — rollout plan (text/HTML)
        backout_plan: Planning field — backout plan (text/HTML)
        custom_fields: Custom fields dict
        assets: Assets list (associated CIs), e.g. [{"display_id": 1}]
        impacted_services: Impacted services list, e.g. [{"display_id": 167456}]
            NOTE: This is different from 'assets'. Assets = associated CIs,
            impacted_services = business services affected by the change.
        maintenance_window_id: Maintenance Window ID to associate with
            this Change. On create, applied via follow-up PUT. On update,
            sent as {"maintenance_window": {"id": <value>}}.
            Use this to link a Change to an existing Maintenance Window.
        change_result_explanation: Result explanation (close)
        workspace_id: Target workspace (move / list / filter)
        query: Filter query string (list/filter)
        view: View name or ID (list)
        sort: Sort field (list)
        order_by: 'asc' or 'desc' (list)
        updated_since: ISO datetime (list)
        page: Page number
        per_page: Items per page 1-100
    

Inputs: action (required), page, risk, sort, +31 more. Returns: result

manage_change_approvalA

Manage approvals and approval groups for a change.

    Args:
        action: 'list_groups', 'create_group', 'update_group', 'cancel_group',
                'list', 'view', 'remind', 'cancel', 'set_chain_rule'
        change_id: The change ID
        approval_id: Approval ID (view, remind, cancel)
        approval_group_id: Approval group ID (update_group, cancel_group)
        name: Group name (create_group, update_group)
        approver_ids: List of agent IDs (create_group, update_group)
        approval_type: 'everyone' or 'any' (create_group, update_group)
        approval_chain_type: 'parallel' or 'sequential' (set_chain_rule)
    

Inputs: action (required), change_id (required), name, approval_id, +4 more. Returns: result

manage_change_noteA

Manage notes on a change.

    Args:
        action: 'create', 'view', 'list', 'update', 'delete'
        change_id: The change ID
        note_id: Required for view, update, delete
        body: Note body HTML (create, update)
    

Inputs: action (required), change_id (required), body, note_id. Returns: result

manage_change_taskA

Manage tasks on a change.

    Args:
        action: 'create', 'view', 'list', 'update', 'delete'
        change_id: The change ID
        task_id: Required for view, update, delete
        title: Task title (create)
        description: Task description (create)
        task_status: Task status int (create/update)
        task_priority: Task priority int (create/update)
        assigned_to_id: Agent ID to assign (create/update)
        task_group_id: Group ID (create/update)
        due_date: ISO date (create/update)
        task_fields: Dict of fields (update — alternative to individual params)
    

Inputs: action (required), change_id (required), title, task_id, +7 more. Returns: result

manage_change_time_entryA

Manage time entries on a change.

    Args:
        action: 'create', 'view', 'list', 'update', 'delete'
        change_id: The change ID
        time_entry_id: Required for view, update, delete
        time_spent: Format "hh:mm" (create/update)
        note: Work description (create/update)
        te_agent_id: Agent ID who did the work (create)
        executed_at: ISO datetime (create)
    

Inputs: action (required), change_id (required), note, time_spent, +3 more. Returns: result

manage_departmentB

Manage Freshservice departments.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete',
                'filter', 'get_fields'.
        department_id: Department ID (required for get/update/delete).
        name: Department name (required for create).
        description: Description text.
        head_user_id: User ID of department head.
        prime_user_id: User ID of department prime contact.
        domains: List of email domains for the department.
        custom_fields: Custom field values dict.
        query: Filter query string for 'filter' action
               (e.g. "name:'Engineering'").
        page/per_page: Pagination.
    

Inputs: action (required), name, page, query, +7 more. Returns: result

manage_locationB

Manage Freshservice locations.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete', 'filter'.
        location_id: Location ID (required for get/update/delete).
        name: Location name (required for create).
        line1/line2/city/state/country/zipcode: Address fields.
        contact_name: Contact person name.
        email: Contact email.
        phone: Contact phone.
        parent_location_id: Parent location ID for hierarchical locations.
        query: Filter query for 'filter' action (e.g. "name:'New York'").
        page/per_page: Pagination.
    

Inputs: action (required), city, name, page, +12 more. Returns: result

manage_maintenance_windowA

Manage Freshservice Maintenance Windows.

    Maintenance Windows are time-based windows used to schedule planned
    maintenance. They can be associated with Changes and are REQUIRED
    to publish a maintenance on a Status Page.

    ONE-STOP WORKFLOW — Create MW + associate Change + publish on Status Page:
        Call action='create' with:
          - name, description, start_time, end_time (MW fields)
          - change_id (auto-associates MW with the Change)
          - impacted_services (triggers auto-publish on Status Page)

        This single call will:
          a) Create the Maintenance Window
          b) Associate it with the Change (if change_id provided)
          c) Publish it on the Status Page (if impacted_services provided)
          d) Return MW details, association status, and Status Page maintenance

        impacted_services format: [{"id": <service_component_id>, "status": N}]
          Status: 1=Operational, 5=Under maintenance, 10=Degraded,
                  20=Partial outage, 30=Major outage
        To find service_component IDs, use manage_status_page
          action='list_components'.

        ALTERNATIVE: You can also do each step separately:
          - manage_maintenance_window create (without impacted_services)
          - manage_change update with maintenance_window_id
          - manage_status_page create_maintenance with maintenance_window_id

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        maintenance_window_id: MW ID (required for get/update/delete).
        change_id: Change ID — if provided on 'create', the new MW
            is automatically associated with this Change.
        name: MW name (required for create).
        description: MW description.
        start_time: ISO datetime — window start (required for create).
        end_time: ISO datetime — window end (required for create).
        workspace_id: Workspace ID (required for create; auto-discovered
            if omitted).
        alert_suppression: Suppress alerts during window (default false).
        impacted_services: If provided on 'create', auto-publishes a
            maintenance on the Status Page after creating the MW.
            Format: [{"id": <service_component_id>, "status": <int>}]
            Status: 1=Operational, 5=Under maintenance, 10=Degraded,
                    20=Partial outage, 30=Major outage.
        notifications: Status Page notification triggers (optional).
            Format: [{"trigger": N, "options": {"value": V}}]
            Trigger: 1=On start, 2=Before start, 3=On complete.
        is_private: Mark the Status Page maintenance as private.
        page/per_page: Pagination (list).
    

Inputs: action (required), name, page, end_time, +10 more. Returns: result

manage_problemB

Manage Freshservice problems.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete',
                'filter', 'close', 'restore', 'get_fields',
                'associate_tickets', 'dissociate_ticket', 'list_tickets'.
        problem_id: Problem ID (required for get/update/delete/close/restore
                    and ticket association actions).
        requester_id: Requester user ID (required for create).
        subject: Problem subject (required for create).
        description: HTML description (required for create).
        priority: 1=Low, 2=Medium, 3=High, 4=Urgent (required for create).
        status: 1=Open, 2=Change Requested, 3=Closed (required for create).
        impact: 1=Low, 2=Medium, 3=High (required for create).
        due_by: ISO datetime due date (required for create).
        agent_id: Assigned agent ID.
        group_id: Assigned group ID.
        department_id: Department ID.
        known_error: Mark as known error (boolean).
        category/sub_category/item_category: Problem categorization.
        assets: List of associated assets [{"display_id": N}].
        analysis_fields: Analysis fields dict (problem_cause, symptom, impact).
        custom_fields: Custom fields dict.
        ticket_ids: List of ticket IDs to associate (for 'associate_tickets').
        ticket_id: Single ticket ID (for 'dissociate_ticket').
        query: Filter query for 'filter' action
               (e.g. "priority:3 AND status:1").
        page/per_page: Pagination.
    

Inputs: action (required), page, query, assets, +20 more. Returns: result

manage_problem_noteA

Manage notes on a Freshservice problem.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        problem_id: Problem ID (always required).
        note_id: Note ID (required for get/update/delete).
        body: Note body HTML (required for create/update).
    

Inputs: action (required), problem_id (required), body, note_id. Returns: result

manage_problem_taskA

Manage tasks on a Freshservice problem.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        problem_id: Problem ID (always required).
        task_id: Task ID (required for get/update/delete).
        agent_id: Assigned agent ID.
        title: Task title (required for create).
        description: Task description.
        status: 1=Open, 2=In Progress, 3=Completed.
        due_date: ISO datetime due date.
        notify_before: Hours to notify before due date.
        group_id: Assigned group ID.
    

Inputs: action (required), problem_id (required), title, status, +6 more. Returns: result

manage_problem_time_entryA

Manage time entries on a Freshservice problem.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        problem_id: Problem ID (always required).
        time_entry_id: Time entry ID (required for get/update/delete).
        agent_id: Agent who performed the work.
        note: Description of work performed.
        time_spent: Time in "hh:mm" format (required for create).
        executed_at: ISO datetime when work was performed.
        task_id: Associated task ID.
        billable: Whether the time is billable.
    

Inputs: action (required), problem_id (required), note, task_id, +5 more. Returns: result

manage_productA

Unified product operations.

    Args:
        action: 'create', 'update', 'get', 'list'
        product_id: Required for get, update
        name: Product name (create — MANDATORY)
        asset_type_id: Asset type ID (create — MANDATORY)
        manufacturer: Manufacturer name
        status: Product status (str or int)
        mode_of_procurement: e.g. 'buy', 'lease'
        depreciation_type_id: Depreciation type ID
        description: HTML description
        description_text: Plain text description
        page/per_page: Pagination (list)
    

Inputs: action (required), name, page, status, +8 more. Returns: result

manage_projectA

Manage Freshservice Projects (NewGen).

    Projects let you plan, prioritize, manage, and track work within
    the service desk. You can associate tickets, changes, problems,
    and assets to projects.

    Args:
        action: One of 'create', 'update', 'get', 'list', 'delete',
                'archive', 'restore', 'get_fields', 'get_templates',
                'add_members', 'get_memberships',
                'create_association', 'get_associations', 'delete_association',
                'get_versions', 'get_sprints'.
        project_id: Project ID (required for most actions except create,
            list, get_fields, get_templates).
        name: Project name (create — MANDATORY, max 255 chars).
        description: Project description (HTML or plain text).
        key: Project key — starts with letter, letters+numbers, max 10 chars.
            Auto-generated from name if omitted on create.
        project_type: 0=Software, 1=Business (create — MANDATORY).
        status_id: 1=Yet to start, 2=In Progress, 3=Completed.
        priority_id: 1=Low, 2=Medium, 3=High, 4=Urgent.
        manager_id: User ID of the project manager.
        start_date: Start date (yyyy-mm-dd).
        end_date: End date (yyyy-mm-dd).
        visibility: 0=Private, 1=Public (default 1).
        sprint_duration: Sprint duration in days (default 14).
        custom_fields: Custom fields dict.
        project_template_id: Template ID (create only).
        members: List of members to add (add_members).
            Format: [{"email": "user@example.com", "role": 1}]
            role: 1 or 2 (project admin vs member).
        module_name: Association module — 'tickets', 'problems',
            'changes', or 'assets' (create/get/delete_association).
        ids: List of IDs to associate (create_association).
        association_id: Entity ID to dissociate (delete_association).
        filter: Filter for list — 'completed', 'incomplete', 'archived',
            'open', 'in_progress'. Default shows open + completed.
        page/per_page: Pagination (list, max 100 per page).
    

Inputs: action (required), ids, key, name, +18 more. Returns: result

manage_project_taskA

Manage Freshservice Project Tasks (NewGen).

    Tasks organize project work — epics, user stories, subtasks, etc.
    Each task has a type, status, priority, assignee, and can be linked
    to sprints, versions, and parent tasks.

    Args:
        action: One of 'create', 'update', 'get', 'list', 'filter',
                'delete', 'get_task_types', 'get_task_type_fields',
                'get_task_statuses', 'get_task_priorities',
                'create_note', 'list_notes', 'update_note', 'delete_note',
                'create_association', 'get_associations', 'delete_association'.
        project_id: Project ID (required for all actions).
        task_id: Task ID (required for get/update/delete and note/association ops).
        title: Task title (create — MANDATORY).
        description: Task description (HTML or plain text).
        type_id: Task type ID — obtain via get_task_types (create — MANDATORY).
        status_id: Task status ID — obtain via get_task_statuses.
        priority_id: Task priority ID — obtain via get_task_priorities.
        assignee_id: User ID to assign the task to.
        reporter_id: User ID of the reporter (defaults to creator).
        parent_id: Parent task/epic ID for subtasks.
        planned_start_date: ISO datetime (yyyy-mm-ddThh:mm:ssZ).
        planned_end_date: ISO datetime (yyyy-mm-ddThh:mm:ssZ).
        planned_effort: Effort string, e.g. '1w 2d 3h 4m'.
        story_points: Story points for the task.
        sprint_id: Sprint ID — obtain via manage_project get_sprints.
        version_id: Version ID — obtain via manage_project get_versions.
        custom_fields: Custom fields dict.
        note_id: Note ID (update_note / delete_note).
        content: Note content — HTML (create_note / update_note).
        module_name: Association module — 'tickets', 'problems',
            'changes', or 'assets' (association operations).
        ids: Entity IDs to associate (create_association).
        association_id: Entity ID to dissociate (delete_association).
        query: Filter query for 'filter' action. Format:
            "priority_id:3 AND created_at:>'2025-01-01'"
        filter: Predefined filter for 'list' — 'all', etc.
        page/per_page: Pagination.
    

Inputs: action (required), ids, page, query, +23 more. Returns: result

manage_releaseA

Manage Freshservice releases.

    NOTE: Like changes, planning_fields cannot be set on create.
    If you supply them, they will be applied via a follow-up PUT
    automatically.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete',
                'filter', 'restore', 'get_fields'.
        release_id: Release ID (required for get/update/delete/restore).
        subject: Release subject (required for create).
        description: HTML description (required for create).
        priority: 1=Low, 2=Medium, 3=High, 4=Urgent (required for create).
        status: 1=Open, 2=On hold, 3=In Progress, 4=Incomplete, 5=Completed
                (required for create).
        release_type: 1=Minor, 2=Standard, 3=Major, 4=Emergency
                      (required for create).
        planned_start_date: ISO datetime for planned start.
        planned_end_date: ISO datetime for planned end.
        work_start_date: ISO datetime for actual work start.
        work_end_date: ISO datetime for actual work end.
        agent_id: Assigned agent ID.
        group_id: Assigned group ID.
        department_id: Department ID.
        category/sub_category/item_category: Categorization.
        assets: Associated assets [{"display_id": N}].
        planning_fields: Planning fields dict (build_plan, test_plan).
        custom_fields: Custom fields dict.
        query: Filter query for 'filter' action.
        page/per_page: Pagination.
    

Inputs: action (required), page, query, assets, +19 more. Returns: result

manage_release_noteB

Manage notes on a Freshservice release.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        release_id: Release ID (always required).
        note_id: Note ID (required for get/update/delete).
        body: Note body HTML (required for create/update).
    

Inputs: action (required), release_id (required), body, note_id. Returns: result

manage_release_taskA

Manage tasks on a Freshservice release.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        release_id: Release ID (always required).
        task_id: Task ID (required for get/update/delete).
        title: Task title (required for create).
        description: Task description.
        status: 1=Open, 2=In Progress, 3=Completed.
        due_date: ISO datetime due date.
        notify_before: Hours to notify before due date.
        group_id: Assigned group ID.
    

Inputs: action (required), release_id (required), title, status, +5 more. Returns: result

manage_release_time_entryA

Manage time entries on a Freshservice release.

    Args:
        action: One of 'list', 'get', 'create', 'update', 'delete'.
        release_id: Release ID (always required).
        time_entry_id: Time entry ID (required for get/update/delete).
        agent_id: Agent who performed the work.
        note: Description of work performed.
        time_spent: Time in "hh:mm" format (required for create).
        executed_at: ISO datetime when work was performed.
        task_id: Associated task ID.
        billable: Whether the time is billable.
    

Inputs: action (required), release_id (required), note, task_id, +5 more. Returns: result

manage_requesterC

Unified requester operations.

    Args:
        action: 'create', 'update', 'get', 'list', 'filter', 'get_fields', 'add_to_group'
        requester_id: Required for get, update, add_to_group
        first_name: MANDATORY for create
        query: Filter query string (filter)
        include_agents: Include agents in filter results (filter)
        group_id: Group ID (add_to_group)
        page/per_page: Pagination (list)
    

Inputs: action (required), page, query, address, +20 more. Returns: result

manage_requester_groupA

Manage requester groups.

    Args:
        action: 'create', 'update', 'get', 'list', 'list_members'
        group_id: Required for get, update, list_members
        name: Group name (create — MANDATORY)
        description: Group description
        page/per_page: Pagination (list)
    

Inputs: action (required), name, page, group_id, +2 more. Returns: result

manage_service_catalogC

Service catalog operations.

    Args:
        action: 'list_items', 'get_requested_items', 'place_request'
        ticket_id: Ticket ID (get_requested_items)
        display_id: Service item display ID (place_request)
        email: Requester email (place_request)
        requested_for: Email of person for whom request is placed (place_request)
        quantity: Number of items (place_request, default 1)
        page: Page number (list_items)
        per_page: Items per page (list_items)
    

Inputs: action (required), page, email, per_page, +4 more. Returns: result

manage_solutionA

Unified solution operations for categories, folders, and articles.

    Args:
        action: One of:
            Categories: 'list_categories', 'get_category', 'create_category', 'update_category'
            Folders: 'list_folders', 'get_folder', 'create_folder', 'update_folder'
            Articles: 'list_articles', 'get_article', 'create_article',
                      'update_article', 'publish_article'
        category_id: Category ID (get/update category, list folders, create folder)
        folder_id: Folder ID (get/update folder, list/create articles)
        article_id: Article ID (get/update/publish article)
        name: Name (create/update category or folder)
        title: Article title (create/update article)
        description: Description text/HTML
        visibility: Folder visibility (1=all, 2=logged-in, 3=agents, 4=depts)
        default_category: Mark as default (update_category)
        workspace_id: Workspace ID (create/update category)
        department_ids: Department IDs (create folder)
        article_type: 1=permanent, 2=workaround (create/update article)
        status: 1=draft, 2=published (create/update article)
        tags: Article tags list
        keywords: SEO keywords list
        review_date: ISO date for article review
    

Inputs: action (required), name, tags, title, +12 more. Returns: result

manage_status_pageA

Unified Status Page operations: maintenance windows, incidents, components.

    IMPORTANT — Publishing a maintenance on the Status Page:
        To publish a maintenance, you MUST provide either change_id or
        maintenance_window_id. The rules are:

        1. If the Change already has a maintenance_window (check via
           manage_change action='get' → maintenance_window.id), use change_id.
        2. If the Change has NO maintenance_window (maintenance_window is
           empty {}), you MUST first create a Maintenance Window using
           manage_maintenance_window action='create' with name, description,
           start_time, end_time, AND change_id (to auto-associate the MW
           with the Change). Then use the returned maintenance_window_id here.
        3. You can also use maintenance_window_id directly if you already
           know the MW ID.

        Required fields for create_maintenance:
          - title, description, started_at, ended_at, impacted_services
          - impacted_services format: [{"id": <service_component_id>, "status": 5}]
            status values: 1=Operational, 5=Under maintenance, 10=Degraded,
            20=Partial outage, 30=Major outage
          - Get available service component IDs via action='list_components'

    Args:
        action: One of:
          Pages:        'list_pages'
          Components:   'list_components', 'get_component'
          Maintenance:  'list_maintenance', 'create_maintenance', 'update_maintenance',
                        'get_maintenance', 'delete_maintenance'
          Maintenance Updates: 'create_maintenance_update', 'list_maintenance_updates',
                        'update_maintenance_update', 'delete_maintenance_update'
          Incidents:    'list_incidents', 'create_incident', 'update_incident',
                        'get_incident', 'delete_incident'
          Incident Updates: 'create_incident_update', 'list_incident_updates',
                        'update_incident_update', 'delete_incident_update'
          Statuses:     'list_incident_statuses', 'list_maintenance_statuses'
          Subscribers:  'list_subscribers', 'get_subscriber', 'create_subscriber',
                        'update_subscriber', 'delete_subscriber'
        status_page_id: Status page ID (auto-discovered if omitted).
        change_id: Change ID — maintenance CRUD from a change. The change
            MUST have an associated maintenance_window or the API returns 404.
            Check via manage_change get → if maintenance_window is empty {},
            use manage_maintenance_window to create one first, then pass
            maintenance_window_id instead.
        maintenance_window_id: Maintenance Window ID — maintenance CRUD from a MW.
            Use this when the change has no built-in MW, or for standalone MW
            publishing. Create a MW first via manage_maintenance_window action='create'.
        ticket_id: Ticket ID — incident CRUD (required for create/update/get/delete,
            not needed for list_incidents).
        maintenance_id: Maintenance ID (get/update/delete maintenance, maintenance updates)
        incident_id: Incident ID (get/update/delete incident, incident updates)
        update_id: Update ID (update/delete maintenance/incident updates)
        component_id: Service component ID (get_component)
        subscriber_id: Subscriber ID (get/update/delete subscriber)
        title: Title (create maintenance/incident) — Mandatory
        description: HTML description
        started_at: ISO datetime — start time (maintenance/incident)
        ended_at: ISO datetime — end time (maintenance)
        impacted_services: [{id, status}] — 1=Operational, 5=Under maintenance,
            10=Degraded, 20=Partial outage, 30=Major outage — Mandatory for create_maintenance
        notifications: Array of notification dicts [{trigger, options: {value}}]
            trigger: 1=On start, 2=Before start, 3=On complete
        is_private: Private maintenance/incident (default false)
        body: Update body text (maintenance/incident updates)
        update_status: Status string for updates
        email: Subscriber email (create_subscriber — Mandatory)
        service_ids: List of service IDs the subscriber is subscribed to
        subscribe_all_services: true = notify for all services
        subscriber_type: 1=External, 2=Agent, 3=Requester
        timezone: Subscriber timezone (e.g. "UTC")
        page/per_page: Pagination
    

Inputs: action (required), body, page, email, +22 more. Returns: result

manage_ticketB

Unified ticket operations.

    Args:
        action: One of 'create', 'update', 'delete', 'get', 'list', 'filter', 'get_fields'
        ticket_id: Required for get, update, delete
        subject: Ticket subject (create)
        description: Ticket body — HTML (create)
        source: Source enum (1=Email,2=Portal,3=Phone…) (create)
        priority: 1=Low,2=Medium,3=High,4=Urgent (create/update)
        status: 2=Open,3=Pending,4=Resolved,5=Closed (create/update)
        email: Requester email (create — required if no requester_id)
        requester_id: Requester ID (create — required if no email)
        custom_fields: Key-value custom field pairs
        ticket_fields: Dict of fields to update (update action)
        query: Filter query string, e.g. "priority:3 AND status:2" (filter)
        page: Page number (list/filter)
        per_page: Items per page 1-100 (list)
        workspace_id: Workspace filter (filter)
    

Inputs: action (required), page, email, query, +11 more. Returns: result

manage_ticket_conversationA

Manage ticket conversations — replies, notes, updates.

    Args:
        action: 'reply', 'add_note', 'update', 'list'
        ticket_id: Required for reply, add_note, list
        conversation_id: Required for update
        body: HTML body content (reply, add_note, update)
        from_email: Sender email (reply)
        user_id: Agent user ID (reply)
        cc_emails: CC email list (reply)
        bcc_emails: BCC email list (reply)
    

Inputs: action (required), body, user_id, cc_emails, +4 more. Returns: result

manage_workspaceA

Manage workspaces.

    Args:
        action: 'list', 'get'
        workspace_id: Required for get
    

Inputs: action (required), workspace_id. Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 36 tools

    Disambiguation4/5

    Most tools are clearly scoped to a single entity or sub-resource, but there is overlap between manage_status_page and manage_maintenance_window for publishing maintenance, and between discover_form_fields and get_fields actions on manage_ticket and manage_change. These overlaps could cause an agent to select the wrong tool for the same logical operation.

    Naming Consistency5/5

    Every tool follows the consistent 'manage_<entity>' or 'manage_<entity>_<subresource>' pattern, using snake_case throughout. No mixed conventions or verb variations, making the naming highly predictable.

    Tool Count4/5

    36 tools is on the high side, but the server covers a broad Freshservice domain including tickets, changes, problems, releases, assets, projects, status pages, and administrative entities. Each tool addresses a distinct resource cluster, so the count is reasonable despite being above the typical 15-tool threshold.

    Completeness3/5

    The tool surface is extensive, covering CRUD for most core entities, but notable gaps exist: solution articles have no delete action, canned responses are read-only only, and ticket tasks are not represented. These missing operations can force agents into workarounds or cause failures on complete workflow execution.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI models to interact with Freshservice IT service management platform, allowing automated ticket management, change requests, asset tracking, and solution article operations through natural language commands.
      MIT
    • 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
      293 npm
      1
      MIT
    • F
      license
      Not graded
      quality
      Not graded
      maintenance
      A comprehensive MCP server that provides 159 tools for interacting with the Freshservice ITSM platform, covering modules such as tickets, assets, and project management. It enables users to manage service desk operations and configuration through the Model Context Protocol.
      -
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to interact with ServiceNow through MCP, providing schema inspection, record CRUD, attachments, audit, Flow Designer, and platform investigations with policy-guarded access.
      15
      3,106 PyPI
      4
      MIT