freshservice-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@freshservice-mcp show me all open tickets with high priority"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
|
| Ticket CRUD, conversations, service catalog |
|
| Change requests with full sub-resource support |
|
| Problem management |
|
| Release management |
|
| Assets/CMDB |
|
| Status pages, maintenance, incidents |
|
| Departments & locations |
|
| Identity, agents & groups |
|
| Requesters & groups |
|
| Knowledge base |
|
| Project management (NewGen) |
|
| Product catalog |
|
| 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-mcpKubernetes / Gateway (OAuth2 + SSE)
helm install freshservice-mcp oci://ghcr.io/forterro/charts/freshservice-mcp \
--version 0.2.0 \
--set config.FRESHSERVICE_DOMAIN=yourcompany.freshservice.comNo API key needed — the MCP gateway forwards per-user OAuth2 tokens.
Documentation
Document | Description |
API key setup, OAuth2 via gateway, creating a Freshservice OAuth app, JWT token structure | |
Local, Docker, Helm chart, client configs (Claude Desktop, VS Code), transports, scopes, troubleshooting | |
Complete reference for all 36 tools with actions and parameters | |
Example prompts for common operations |
License
MIT License. See the LICENSE file for details.
Additional Resources
Available Tools
36 toolsclear_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
Scored across 36 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseBqualityDmaintenanceEnables 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.53293 npm1MIT
- FlicenseNot gradedqualityNot gradedmaintenanceA 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.-
- AlicenseAqualityBmaintenanceEnables AI agents to interact with ServiceNow through MCP, providing schema inspection, record CRUD, attachments, audit, Flow Designer, and platform investigations with policy-guarded access.153,106 PyPI4MIT