MCP IT Help Desk
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., "@MCP IT Help DeskWiFi connection keeps dropping, please help."
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.
π€ MCP IT Help Desk
AI-powered IT support: understands issues (TR/EN), suggests fixes, and routes to the right experts. Experts are stored in Django DB.
β¨ Features
AI-Powered Classification (100% LLM): Turkish + English via Gemini; no heuristics
Auto-Solutions: Common hardware/software/network fixes for non-critical cases
Smart Expert Assignment: Availability + expertise + load consideration
Modern Web UI: Real-time chat via Flask + Socket.IO + Tailwind
MCP Tools: Add/process issues, AI try-solve, assign experts
Related MCP server: Freshservice MCP server
π§ Table of Contents
π§ MCP Tools
π Quick Start
π§± Architecture
ποΈ File Structure
π Comprehensive Documentation
βοΈ Advanced Configuration
π§ͺ Usage Examples
π§ Design Philosophy
π€ Contributing & Support
π§ MCP Tools
Tool | Purpose | Inputs | Output |
| Create a new ticket with normalized fields and timestamps |
|
|
| Attempt auto-resolution for common issues (non-critical) |
| Solution text or suggestion to assign expert |
| Classify description and pick best available expert |
|
|
| Batch normalize + auto-solve + assign/queue | none | Summary: closed_by_ai, assigned/queued, skipped |
π©βπ» Expert Data Format (Django DB)
Field | Type | Example | Notes |
| string (pk) |
| Human-friendly ID |
| string |
| Display name |
| JSON/list |
| Tags matched by classifier |
| string |
| Optional |
| boolean |
| Considered for assignment |
| integer |
| Incremented on assignment |
π Quick Start
Prerequisites
Python 3.11+
uv (recommended)
Gemini API key (required): set
GEMINI_API_KEYorGOOGLE_API_KEY
Install dependencies
uv syncπ₯ Most Important: Start Project (2 terminals)
Terminal 1 β start Django API (port 8000):
cd django_api_service
python3 manage.py runserver 8000Terminal 2 β start Web UI (Flask + Socket.IO):
cd .. # back to project root (mcp-it-helpdesk)
uv run python start_web_agent.pySet up Django (migrations + import experts)
cd django_api_service
uv run python manage.py makemigrations
uv run python manage.py migrate
uv run python import_experts.py # imports tech_experts.json into DBRun services
# MCP (via Fast Agent)
uv run fast-agent go --stdio "uv run python main.py"
# Django API (serves at http://localhost:8000; root "/" returns 404 by design)
uv run python django_api_service/manage.py runserver
# health check: http://localhost:8000/api/health/
# Web UI (Flask, serves at http://localhost:5001)
uv run python web_agent.py
# open http://localhost:5001Notes:
API routes live under
/api/(e.g.,/api/health/,/api/issues/). The root/returns 404 by design.The web frontend at
http://localhost:5001calls the API athttp://localhost:8000by default.
π§± Architecture
Web UI (Flask/Socket.IO) Django API (REST + ORM) MCP Server (main.py)
β β β
β create/assign issues (HTTP) β β
ββββββββββββββββΊ /api/issues/ ββββΌβββββββββββ β
β β β
βΌ β β
SQLite (Issues, Experts) β
β² β
βββ load experts βββββποΈ File Structure
mcp-it-helpdesk/
ββ main.py # MCP server with tools
ββ problems.txt # Legacy issue store (MCP-only)
ββ tech_experts.json # Legacy sample; data is stored in Django DB
ββ web_agent.py # Flask web chat
ββ templates/index.html # Web UI
ββ django_api_service/
β ββ api/settings.py # Django settings
β ββ manage.py
β ββ issues/
β ββ models.py # Issue, Expert models
β ββ serializers.py # Validation + Gemini integration
β ββ views.py # REST endpoints and actions
β ββ migrations/ # Django migrations
ββ docs/images/ # (add your screenshots/diagrams here)π Comprehensive Documentation
Detailed Features and Benefits
Bilingual understanding (TR/EN): Reduces back-and-forth with users
AI-first classification: Requires Gemini key; ensures consistent, accurate categorization
Human-in-the-loop: Assign experts for high/critical cases or when AI canβt resolve
Installation Guide (Step-by-Step)
Install dependencies with
uv syncRun Django migrations and import experts (see Quick Start)
Launch MCP, Django API, and the Web UI
Test with the usage examples below
Practical Usage Examples
Inside Fast Agent:
/tools
/call main-add_issue {"employee_id":"E001","description":"VPN baΔlantΔ± sorunu","category":"network","subcategory":"vpn","priority":"medium"}
/call main-ai_try_solve {"description":"VPN baΔlantΔ± sorunu","category":"network","subcategory":"vpn","priority":"medium"}
/call main-process_issuesβοΈ Advanced Configuration
Gemini model: Set
GEMINI_MODELenv (default:gemini-1.5-flash)API Keys (required): Provide
GEMINI_API_KEYorGOOGLE_API_KEY. The app mapsGEMINI_API_KEYtoGOOGLE_API_KEYautomatically.CORS:
settings.pyallowshttp://localhost:5001for the web UI; adjust for productionSecrets & DB:
.gitignoreexcludes local DBs and secrets; use.envfiles locally (donβt commit)
π§ Design Philosophy
LLM-first: Classification and validation are fully AI-driven
Single Source of Truth for Experts: Experts live in Django DB (no runtime JSON fallback)
π§ͺ Testing Ideas
Unit test serializers and classification (LLM prompts and outputs)
Integration test Django actions that shell into MCP (
assign_expert,ai_solve)E2E test via Web UI: create issue β assign expert β verify DB state
π³ Docker
Official Image
Pull and run:
docker pull minasenel/mcp-it-helpdesk:latest
docker run --rm --name mcp_api -p 8000:8000 \
-e GEMINI_API_KEY="<your_key>" \
minasenel/mcp-it-helpdesk:latest
# open http://localhost:8000/api/health/If port 8000 is busy on your host, map another host port:
docker run --rm --name mcp_api -p 8001:8000 \
-e GEMINI_API_KEY="<your_key>" \
minasenel/mcp-it-helpdesk:latest
# then use http://localhost:8001Notes:
API routes live under
/api/. The root/returns 404 by design.The frontend typically runs at
http://localhost:5001and talks to the API athttp://localhost:8000.
Environment Variables
GEMINI_API_KEYorGOOGLE_API_KEY(required)SECRET_KEY(recommended for production; generated if missing in dev)DJANGO_ALLOWED_HOSTS(set domains for production)
Examples:
docker run --rm -p 8000:8000 \
-e GEMINI_API_KEY="<your_key>" \
-e DJANGO_ALLOWED_HOSTS="localhost,127.0.0.1" \
-e SECRET_KEY="change-me" \
minasenel/mcp-it-helpdesk:latestData Persistence
The image uses SQLite by default inside the container. Data will be ephemeral unless you mount a volume:
# Persist the Django project folder (including db.sqlite3)
docker run --rm -p 8000:8000 \
-e GEMINI_API_KEY="<your_key>" \
-v "$PWD/django_data":/app/django_api_service \
minasenel/mcp-it-helpdesk:latestBuild locally (optional)
If you prefer to build from source:
# from repo root
docker build -t YOUR_USERNAME/mcp-it-helpdesk:latest .
docker run --rm -p 8000:8000 \
-e GEMINI_API_KEY="<your_key>" \
YOUR_USERNAME/mcp-it-helpdesk:latestLicensed under MIT.
Available Tools
4 toolsadd_issueD
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | ||
| priority | Yes | ||
| description | Yes | ||
| employee_id | Yes | ||
| subcategory | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_try_solveC
This tool is used to try to solve the issue with AI first @param description: The description of the issue @param category: The category of the issue @param subcategory: The subcategory of the issue @param priority: The priority of the issue @return: The solution for the issue if it is solved, otherwise "ΓΓΆzΓΌm ΓΆnerisi bulunamadΔ±: uzman atamasΔ± ΓΆnerilir."
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | ||
| priority | Yes | ||
| description | Yes | ||
| subcategory | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses the return value (solution or fallback message) but does not mention side effects (e.g., does it modify data?), required permissions, or what happens on failure beyond the message. The behavioral impact is unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus @param lines. The @param lines add little value and could be removed. It is not excessively long, but the Javadoc-style formatting is slightly verbose for the content provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and an output schema present, the description covers the return value but lacks detail on parameter formats or edge cases. With 4 required params, more guidance would improve completeness. The fallback message provides useful context for when the tool fails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. The @param comments only repeat parameter names (e.g., 'The description of the issue') without adding meaning, allowed values, or format. With no enums or further details, the semantics are weak.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's purpose: 'try to solve the issue with AI first'. It clearly identifies the verb-resource pair (try solve issue) and distinguishes from siblings like assign_expert which assigns experts. However, it does not explicitly differentiate from add_issue or process_issues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a workflow by stating 'try to solve with AI first' and the return message suggests assigning an expert if no solution is found. However, it lacks explicit guidance on when to use this tool versus alternatives, such as prerequisites or cases where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_expertC
Analyze the problem description, classify into standard categories, and choose the most suitable available expert.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes analysis and selection but does not disclose whether the tool performs an actual assignment (side effect) or is read-only. No information about required permissions, data persistence, or side effects is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is straightforward and free of unnecessary words. It could benefit from a more structured format (e.g., bullet points) but is not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality but lacks usage context and behavioral details. Given an output schema exists, return values are likely documented elsewhere, but the absence of when-to-use guidance and side-effect disclosure leaves gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'description' has 0% schema description, so the tool description's mention of 'problem description' clarifies its purpose. However, no additional constraints like expected length, format, or examples are given, meaning the description adds minimal value beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes a problem description, classifies it into categories, and chooses an expert. This gives a specific verb-resource pairing. However, it does not explicitly differentiate from sibling tools like 'add_issue' or 'ai_try_solve', missing context on how assignment differs from issue creation or AI solving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, scenarios where this tool is appropriate, or cases where another sibling tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_issuesC
This tool is used to process the issues @return: The summary of the issues
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose whether processing is destructive, requires permissions, or any side effects. The only hint is 'summary of the issues', suggesting it may be a read operation, but 'process' implies mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two sentences) but lacks substance. While concise, it is under-specified and does not effectively communicate the tool's purpose or behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and a vague description, the tool is incomplete for an agent. The output schema exists but is not shown; the description only mentions a summary. More context about what 'process' does is needed, especially without annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100% (vacuously). Baseline 3 applies. The description adds no param info because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'process the issues' but does not specify what processing entails. It is vague and does not distinguish from sibling tools like add_issue, ai_try_solve, and assign_expert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
add_issue - First observed
ai_try_solve - First observed
assign_expert - First observed
process_issues
TDQS
Scored across 4 tools
Tools appear distinct but 'add_issue' lacks description, causing ambiguity about its exact role relative to 'ai_try_solve' and 'assign_expert'.
Most tools use verb_noun pattern, but 'ai_try_solve' deviates with an awkward structure mixing AI and action verb.
Four tools are reasonable for a simple help desk server, covering core steps without being excessive.
Missing essential operations like listing, updating, or deleting issues, and lacks a tool for viewing a single issue's details.
Maintenance
Related MCP Connectors
Run AI customer support from your terminal: conversations, knowledge base, and chat widget.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
AI-native helpdesk hosted in Germany: tickets, replies, KPIs and knowledge base over MCP.
Related MCP Servers
- AlicenseAqualityBmaintenanceThis server provides a comprehensive integration with Zendesk. Retrieving and managing tickets and comments. Ticket analyzes and response drafting. Access to help center articles as knowledge base.7119Apache 2.0
- AlicenseBqualityDmaintenanceMCP server created for Freshservice, allowing AI models to interact with Freshservice modules5936MIT
- AlicenseNot gradedqualityDmaintenanceIntegration server that connects AI assistants to Atlassian products (Confluence & Jira), enabling natural language interactions for searching content, managing issues, creating documents, and updating project information.MIT
- FlicenseNot gradedqualityDmaintenanceAn AI-powered code consultation server that routes programming queries to specific AI models based on requested expertise levels. It enables users to receive structured feedback on debugging, architectural decisions, and code reviews from Gemini, Claude, or GPT.-