Freshservice MCP server for AI agents

Live

API KEY

IT SERVICE MANAGEMENT

Customer Support

Freshservice gives your agent IT service management for your service desk: create, update, and reply to tickets, track assets and contracts, plan changes, problems, and releases, place service catalog requests, and search the knowledge base.

  • Per-user credentials: each call uses the actual user's API key, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Freshservice
agent · Acme Q3
Run
Which urgent tickets are open in the Network team's queue?
S
freshservice_tickets_filter
121ms
IT service agent
4 urgent tickets are open for the Network group. 2 report VPN drops at the Austin office, and 1 is close to breaching its SLA.
Sources: Freshservice tickets, 4 results
freshservice
4 tickets
18:29
Message Claude...

Tools your IT service agent reaches for on Freshservice, scoped per user.

CALL ANY TOOL
119 tools for IT service management in Freshservice: create, update, and reply to tickets, log time, track assets, contracts, and software, manage changes, problems, releases, and projects, place service requests, and write knowledge base articles.
freshservice_agent_fields_list
List agent fields
List the fields on Freshservice agent profiles, including custom fields. Returns each field's name, label, type, required flags and choices. Use this to learn field names before filtering agents.
Parameters
Name
Type
Required
Description
—
No parameters required
freshservice_agent_get
Get agent
freshservice_agents_filter
Agents filter
freshservice_announcements_list
List announcements
freshservice_asset_create
Create asset
freshservice_asset_requests_list
List asset requests
freshservice_asset_type_get
Get asset type
freshservice_asset_update
Update asset
freshservice_assets_search
Search assets
freshservice_business_hours_list
List business hours
freshservice_change_notes_list
List change notes
freshservice_conversation_update
Update conversation
freshservice_departments_list
List departments
freshservice_itam_asset_get
Get itam asset
freshservice_problem_create
Create problem
freshservice_problem_notes_list
List problem notes
freshservice_project_task_create
Create project task
freshservice_project_task_get
Get project task
freshservice_project_tasks_list
List project tasks
freshservice_project_update
Update project
freshservice_release_tasks_list
List release tasks
freshservice_requester_create
Create requester
freshservice_requester_groups_list
List requester groups
freshservice_service_catalog_item_get
Get service catalog item
freshservice_service_catalog_items_list
List service catalog items
freshservice_solution_article_update
Update solution article
freshservice_solution_categories_list
List solution categories
freshservice_ticket_conversations_list
List ticket conversations
freshservice_ticket_create
Create ticket
freshservice_ticket_time_entries_list
List ticket time entries

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Freshservice tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["freshservice"], toolNames: [
    "freshservice_tickets_filter",
    "freshservice_ticket_get",
    "freshservice_ticket_note_create"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Triage urgent open tickets in the Network group and add a note to each" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["freshservice"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Triage urgent open tickets in the Network group and add a note to each" }],
  tools,
});

// Execute the tool call with the user's vaulted Freshservice API key
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["freshservice"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Triage urgent open tickets in the Network group and add a note to each" }],
  tools,
});

// Tool call runs with the user's vaulted Freshservice API key
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["freshservice"] }, pageSize: 100,
});

const agent = new Agent({
  name: "it_service_agent",
  model: "gemini-2.5-pro",
  instruction: "Freshservice tools scoped to this user",
  tools,
});

await agent.run("Triage urgent open tickets in the Network group and add a note to each");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Freshservice tool. Click to copy, paste into your agent, done.
Tickets
Copy the prompt
Copied
List urgent open tickets assigned to the Network group.
Copy the prompt
Copied
Reply to ticket 4821 saying the VPN fix is rolling out tonight.
Copy the prompt
Copied
Log 45 minutes on ticket 4821 for troubleshooting.
Assets and catalog
Copy the prompt
Copied
Find the asset with tag LAP-0192 and show who it is assigned to.
Copy the prompt
Copied
Reassign laptop LAP-0192 to priya@acme.com.
Copy the prompt
Copied
Place a service request for a new monitor for Alex Kim.
Changes and knowledge
Copy the prompt
Copied
Create a change request to upgrade the core switches this Saturday.
Copy the prompt
Copied
List problems opened this month with their status.
Copy the prompt
Copied
Search the knowledge base for VPN setup on macOS.
SEE HOW AUTH WORKS
Each user connects their own Freshservice API key once, and Scalekit sends it with every call. API keys stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Freshservice
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Freshservice
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Freshservice
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Freshservice
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other customer support and service desk connectors.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Engineering Teams
DevOps assistant agent
Polls GitHub for failing checks and stale PRs, opens Linear issues for the ones that need work, and posts a daily digest to Slack. It acts as the engineer, not a shared service account.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Test other agents
See the same per-user auth pattern across other customer support and service desk connectors.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
ENGINEERING
DevOps assistant agent
Poll GitHub for failing checks and stale pull requests, open Linear issues for the ones that need work, and digest to Slack.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Freshservice API key looks fine in a demo. In production every ticket update and reply looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Freshservice today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Freshservice as the user or through a shared API key?
As the user. Each user connects their own Freshservice API key once, and Scalekit sends it with every call. Audit logs attribute every ticket, reply, and asset change to that user, not a shared service account.
Where is the Freshservice API key stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new API key. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Freshservice?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the ticket and asset read tools without freshservice_ticket_reply_create, which sends a public reply to the requester. None of the 119 tools delete data. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Freshservice access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Does the connector cover changes, problems, and releases, or only tickets?
All of them. Beyond tickets, the tools create and update changes, problems, releases, and projects, add notes and tasks to each, and read approvals, SLA policies, the service catalog, and IT asset management records.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""freshservice"": {
""url"": ""https://mcp.scalekit.com/freshservice"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.freshservice]
url = ""https://mcp.scalekit.com/freshservice""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""freshservice"": {
""url"": ""https://mcp.scalekit.com/freshservice"",
""type"": ""http""
}
}
}