ticketsystem-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., "@ticketsystem-mcpWeise TCK-48213 an Adrian Osei zu"
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.
Ticketsystem-MCP
MCP server for the ticket system of a fictional German health insurer. Built for demos: it serves a small, self-consistent case load and lets an agent look up tickets and hand them over — without any real data being involved.
The code is English, everything the server delivers is German: titles, statuses, history entries and error messages read the way a case worker would see them.
What the server can do
Six tickets across two case workers, Nadine Krohn and Adrian Osei. Each ticket is one claim with its own history.
A case load that stays current. History entries are dated relative to today and pulled back onto working days, so nothing looks stale in a demo half a year from now.
Real reassignment.
ticket_zuweisenmoves a ticket, appends a handover entry and is visible in every latertickets_auflistencall.
TCK-48213 is the centrepiece: the only open ticket of Nadine Krohn, waiting on
an insured person's reply that came in yesterday and has not been read.
Related MCP server: Freshdesk MCP Server
Tools
Tool | Purpose |
| Tickets of one case worker, most recently updated first, without history |
| One ticket including its full history |
| Hand a ticket over to someone else |
bearbeiter and neuer_bearbeiter accept either the full name (Nadine Krohn)
or the email address (nadine.krohn@musterkasse.de). nur_offene defaults to
true, so closed tickets stay out of the way unless asked for.
Tool names, parameters and the field names of every response are German on
purpose: MCP clients render an identifier by splitting it on underscores and
capitalising it, so tickets_auflisten shows up as "Tickets Auflisten". English
identifiers would be visible to the audience of a German demo.
Quickstart
The justfile bundles the common flows; just without arguments lists
every recipe.
Local
just setup # uv sync
TICKETSYSTEM_API_KEY=demo-schluessel just runThe endpoint is then at http://localhost:8001/mcp.
Docker
cp .env.example .env # and adjust the key
just up # docker compose up -d --build
just health # query the health endpoint
just tools # list the tools of the running server
just downConnecting an MCP client
.mcp.json in the project directory:
{
"mcpServers": {
"ticketsystem": {
"type": "http",
"url": "http://localhost:8001/mcp",
"headers": { "X-API-KEY": "demo-schluessel" }
}
}
}Port 8001 is the default so this server and speiseplan-mcp can run side by
side.
Authentication
Every call needs the header X-API-KEY with one of the keys configured in
TICKETSYSTEM_API_KEY; otherwise the server answers HTTP 401. Only /health is
exempt, for the container health check.
Without TICKETSYSTEM_API_KEY the server does not start.
Configuration
All values come from environment variables, see .env.example:
Variable | Default | Meaning |
| — (mandatory) | valid keys, several separated by commas |
|
| bind address |
|
| port |
|
| path of the MCP endpoint |
|
| basis for "today" |
Storage
Reassignments live in the memory of the process only. There is no database and no volume — a restart returns the case load to its initial state, which is exactly what you want between two demo runs.
Example: the demo run
tickets_auflisten(bearbeiter="Nadine Krohn")
TCK-48213 Rückfrage an Versicherte ungelesene Antwort
ticket_abrufen(ticket_nummer="TCK-48213")
...
gestern Antwort der Versicherten mit Klinik-Bescheinigung eingegangen (ungelesen)
ticket_zuweisen(ticket_nummer="TCK-48213", neuer_bearbeiter="adrian.osei@musterkasse.de")
Ticket TCK-48213 ist jetzt Adrian Osei zugewiesen, zuvor Nadine Krohn.
tickets_auflisten(bearbeiter="Nadine Krohn") -> leer
tickets_auflisten(bearbeiter="Adrian Osei") -> enthält TCK-48213Development
just check # linter, formatting, mypy and tests
just tests # tests only; arguments are passed through
just fix # format and fix what can be fixedWithout just the tools work directly:
.venv/bin/pytest # tests, no external services needed
.venv/bin/ruff check src tests # linter
.venv/bin/ruff format src tests # formatting
.venv/bin/mypy # type check in strict modePublishing
The image goes to the registry registry.florian-sattler-apps.de:
just login # once: docker login
just publish-preview # shows the target tags without pushing
just publish # checks, builds and pushes after a promptMore on the architecture and the decisions behind it is in CLAUDE.md.
This server cannot be deployed
Maintenance
Related MCP Connectors
AI-native helpdesk hosted in Germany: tickets, replies, KPIs and knowledge base over MCP.
Helpdesk tickets from your AI: find, reply, take, hold, complete — within your own role. OAuth.
Read tickets, users, orgs, macros and satisfaction ratings; create, update and comment on tickets.
Search and read Zammad tickets, customers and organizations; add notes, replies and ticket updates.
191
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.7123Apache 2.0
- AlicenseAqualityDmaintenanceEnables fetching and searching Freshdesk tickets, including details like conversations, attachments, and custom fields, via natural language queries.3504 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to list, inspect, triage, and update support tickets via MCP tools, with a mocked dataset designed for swapping in real ticket sources later.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Zendesk admins to audit business rules, monitor backlog and SLAs, review security, and manage user offboarding through natural language.MIT