i-net HelpDesk MCP Server
i-net HelpDesk MCP Server
Ein MCP-Server, der die Ticket-Web-API des i-net HelpDesk als Werkzeuge für beliebige KI-Agenten bereitstellt: Tickets suchen und lesen, Bearbeitungsschritte ansehen, neue Tickets anlegen und Ticketaktionen (antworten, schließen, eskalieren …) ausführen — inklusive Dateianhängen.
Der Server kann auf zwei Arten betrieben werden:
Modus | Wofür | Authentifizierung |
stdio | lokaler Prozess je Agent (Claude Desktop/Code, Cursor, VS Code …) | Token bzw. Benutzer/Passwort aus Umgebungsvariablen |
HTTP (streamable) | zentral gehostet, mehrere Nutzer teilen sich einen Serverprozess | jeder Client schickt seinen eigenen |
Voraussetzungen
Python 3.10 oder neuer
Ein i-net HelpDesk mit aktivierter Web-API
Ein Benutzer mit dem Recht „Web API" — ohne dieses Recht antwortet der Server mit HTTP 403. Welche Tickets sichtbar sind und welche Aktionen erlaubt sind, richtet sich nach den Rollen dieses Benutzers.
Related MCP server: tickiti-mcp
Installation
# direkt aus dem Repository ausführen (empfohlen für den Einstieg)
uvx --from git+https://github.com/roddyst/i-net_mcp_server inet-helpdesk-mcp --help
# oder klassisch installieren
pip install git+https://github.com/roddyst/i-net_mcp_serverFür die Entwicklung:
git clone https://github.com/roddyst/i-net_mcp_server
cd i-net_mcp_server
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytestSchnellstart: stdio (lokaler Agent)
export INET_BASE_URL="https://helpdesk.example.com:9000"
export INET_TOKEN="VGhpcyBpcyBqdXN0IGEgZGVtbyBhY2Nlc3MgdG9rZW4u"
inet-helpdesk-mcpKonfiguration für Claude Desktop / Claude Code (claude_desktop_config.json
bzw. .mcp.json) — weitere Beispiele liegen unter examples/:
{
"mcpServers": {
"i-net-helpdesk": {
"command": "uvx",
"args": ["--from", "git+https://github.com/roddyst/i-net_mcp_server", "inet-helpdesk-mcp"],
"env": {
"INET_BASE_URL": "https://helpdesk.example.com:9000",
"INET_TOKEN": "dein-access-token"
}
}
}
}Statt eines Tokens gehen auch INET_USERNAME und INET_PASSWORD (Basic Auth).
Der Token wird als Authorization: Bearer <token> gesendet, genau wie in der
i-net-Dokumentation beschrieben.
Schnellstart: HTTP (zentral gehostet)
inet-helpdesk-mcp --transport http --host 0.0.0.0 --port 8000 \
--base-url https://helpdesk.example.com:9000Der Endpunkt liegt dann unter http://<host>:8000/mcp. Der Agent trägt diese
URL ein und schickt seinen HelpDesk-Token im Authorization-Header mit — genau
das ist der Ablauf „URL + Bearer-Token", der Server reicht den Header an den
HelpDesk weiter. Beispiel für einen MCP-Client, der Remote-Server unterstützt:
{
"mcpServers": {
"i-net-helpdesk": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer dein-access-token" }
}
}
}Ohne --base-url bestimmt der Client zusätzlich das Zielsystem über den
Header X-Inet-Base-Url. Das ist praktisch für Mandanten mit mehreren
HelpDesk-Instanzen, öffnet den Server aber als Proxy für beliebige Adressen —
in einem offenen Netz deshalb besser eine feste --base-url setzen (dann ist
der Header abgeschaltet, außer er wird mit --allow-url-header erlaubt).
Hinweis zum Betrieb: Der Server terminiert selbst kein TLS und authentifiziert Clients nicht eigenständig — die Anmeldung passiert am HelpDesk mit dem durchgereichten Token. Wenn er über das lokale Netz hinaus erreichbar sein soll, gehört ein Reverse Proxy mit HTTPS davor.
Variante: fester Service-Account statt Token pro Nutzer
Läuft der Server auf derselben Maschine wie der Agent, ist oft ein einziger
technischer Benutzer gewollt. Dann liegt der Token auf dem Server und
--ignore-client-auth sorgt dafür, dass ein Authorization-Header des Agenten
ihn nicht überschreibt (Agenten schicken solche Header gelegentlich für
eigene Zwecke mit — ohne den Schalter landet der beim HelpDesk und jeder Aufruf
scheitert mit 401):
INET_BASE_URL=https://helpdesk.example.com:9000 INET_TOKEN=… \
inet-helpdesk-mcp --transport http --host 127.0.0.1 --port 8765 --ignore-client-authFertige systemd-Unit, Env-File und Schritt-für-Schritt-Anleitung dafür:
deploy/.
Werkzeuge
Tool | Web-API | Beschreibung |
| – | Zeigt die Konfiguration und prüft Verbindung + Zugangsdaten. Erste Anlaufstelle bei Fehlern. |
|
| Tickets über eine Suchphrase finden ( |
|
| Felder und Attribute eines Tickets; |
| mehrere | Ticket und Bearbeitungsschritte inklusive Texte in einem Aufruf — der schnellste Weg, ein Ticket zu verstehen. |
|
| Aktuell erlaubte Ticketaktionen als Map „Id → Anzeigename". |
|
| Bearbeitungsschritte eines Tickets ohne Texte, optional ab Zeitstempel |
|
| Ein Bearbeitungsschritt inklusive Text. |
|
| Neues Ticket anlegen, liefert die Ticket-Id. |
|
| Ticketaktion ausführen, liefert die Id des neuen Bearbeitungsschritts. |
create_ticket und apply_ticket_action werden mit --read-only gar nicht
erst registriert — sinnvoll, wenn ein Agent nur lesen können soll.
Ticket-Ids werden sowohl als Zahl als auch in der kodierten Form akzeptiert, die in den Betreffzeilen der HelpDesk-E-Mails steht.
Typischer Ablauf
search_ticketsmit einer Phrase wieDruckeroderResource:"First Level Support"get_ticket_conversationzum Lesen — Ticket und Verlauf in einem Aufruf;get_ticket,list_ticket_stepsundget_ticket_stepsind die feinkörnigen Variantenlist_ticket_actions, um die gültigeaction_idzu ermittelnapply_ticket_actionmit dieser Id — die Ids unterscheiden sich je Ticket, Benutzer und Ticketstatus, sie dürfen also nicht geraten werden.
Aufbereitete Antworten
Die Web-API antwortet so, wie ihre eigene Oberfläche es braucht: Kennzahlen statt Beschriftungen, Zeitstempel in Millisekunden, Schritttexte als rohes HTML. Für ein Sprachmodell kostet das Tokens und Genauigkeit, deshalb werden die Antworten aufbereitet:
statusid: 400plusstatusid_display: "Geschlossen"wird zustatusid: { "value": 400, "display": "Geschlossen" }neben einem Zeitstempel steht sein ISO-Zwilling, z. B.
closeddate_iso: "2020-09-28T12:05:09Z"— der Originalwert bleibt erhaltenSchritttexte mit
htmlContent: truekommen als lesbarer Text an (textWasHtml: true);max_text_charskürzt sehr lange Texte mit einem sichtbaren Hinweis
Wer die Rohantwort braucht, setzt am einzelnen Aufruf raw: true oder startet den
Server mit --no-normalize.
Leitplanken für schreibende Tools
--read-only ist ganz oder gar nicht. Dazwischen liegen drei Schalter:
# Der Agent darf antworten (-9), aber nicht reaktivieren (-2), und nie Mails auslösen
inet-helpdesk-mcp --allowed-actions=-9 --default-automail NEVER
# Alles prüfen, nichts senden: liefert die Anfrage zurück, die gestellt worden wäre
inet-helpdesk-mcp --dry-run--allowed-actions/--denied-actionsbrauchen das Gleichheitszeichen (--allowed-actions=-9,-12), weil Aktions-Ids negativ sind und getrennt geschrieben als Option gelesen würden. Sie werden vor dem Aufruf geprüft; gesperrte Aktionen erscheinen auch inlist_ticket_actionsnicht mehr (vermerkt alshiddenByPolicy).--default-automailergänztticketextension.automail, wenn der Aufruf selbst keinen Wert setzt. Ein Tippfehler beendet den Serverstart, statt beim HelpDesk stillschweigend verworfen zu werden — und damit die Mails auszulösen, die er verhindern sollte.--dry-runvalidiert Aktionspolitik, Anhänge und Payload und antwortet mit{"dryRun": true, "method", "path", "payload", "attachments"}.
Ticketfelder und Aktionsargumente
ticket_fields, step_fields und action_arguments sind optional und werden
im Normalfall nicht gebraucht. Wenn doch, gelten die Regeln der Web-API:
Schlüssel müssen echten Feldschlüsseln (oder deren lokalisiertem Anzeigenamen)
entsprechen, Werte sind Strings; JSON-Werte müssen als String kodiert werden.
Beispiele aus der i-net-Dokumentation:
{
"ticketextension.dispatchNow": "ALWAYS", // Ticket sofort disponieren
"ticketextension.automail": "NO_MAILS_TO_ENDUSER", // keine Auto-Mails an Endanwender
"processingtimeextension.appointment": "1733875200000", // Wiedervorlage/Termin
"ticketactionextension.escalate": "{'targetResID':'<GUID>','changeTicketStatus':true}"
}Unbekannte Ticketfelder führen zu einem Fehler, unbekannte Aktionsargumente werden vom HelpDesk stillschweigend verworfen und nur ins Debug-Log geschrieben.
Anhänge
Anhänge werden als Liste übergeben, jeweils mit Inhalt entweder inline als Base64 oder als Pfad auf dem Dateisystem des Servers:
{
"text": "Anfrage mit Anhang",
"attachments": [
{ "name": "screenshot.png", "content_base64": "iVBORw0KGgo…" },
{ "path": "/tmp/protokoll.pdf", "attachment_type": "Attachment" }
]
}path funktioniert nur im stdio-Modus, in dem Agent und Server dieselbe
Maschine teilen; in den HTTP-Modi ist es automatisch abgeschaltet (und lässt
sich mit --no-local-files auch für stdio deaktivieren). Erlaubte Werte für
attachment_type: Attachment, EmbeddedImage, Signature, Unknown.
Obergrenze pro Datei: 25 MB.
Konfiguration
Jede Option gibt es als Umgebungsvariable und als Kommandozeilenschalter; die Kommandozeile gewinnt.
Umgebungsvariable | Schalter | Standard | Bedeutung |
|
| – | Basis-URL des HelpDesk, z. B. |
|
| – | Access-Token für |
|
| – | Basic Auth als Alternative zum Token |
|
|
|
|
|
|
| Bind-Adresse der HTTP-Transporte |
|
|
| Port der HTTP-Transporte |
|
|
| Pfad des Streamable-HTTP-Endpunkts |
|
|
| HTTP-Timeout in Sekunden |
|
|
| TLS-Zertifikat des HelpDesk prüfen |
|
| – | PEM-Datei mit den CA-Zertifikaten, denen vertraut wird (interne Firmen-CA) |
|
|
| Schreibende Tools ausblenden |
|
| nur ohne |
|
|
|
|
|
|
|
| Anhänge per Dateipfad erlauben |
|
|
| Standardsprache der Suchphrase |
|
|
| Antworten aufbereiten (Anzeigewerte, ISO-Zeitstempel, HTML zu Text) |
|
|
| Wiederholungen eines fehlgeschlagenen |
|
|
| Gleichzeitig offen gehaltene HelpDesk-Verbindungen |
|
|
| Schreibende Aufrufe prüfen und zurückmelden, aber nicht senden |
|
| – | Erlaubte Ticketaktions-Ids, kommasepariert |
|
| – | Gesperrte Ticketaktions-Ids, kommasepariert |
|
| – | Standardwert für |
HelpDesk hinter einer internen CA
Läuft der HelpDesk mit einem Zertifikat der eigenen Unternehmens-CA (etwa den
Active-Directory-Zertifikatsdiensten), kennt der Server dessen Aussteller
zunächst nicht: geprüft wird gegen das mitgelieferte
certifi-Bundle mit den öffentlichen CAs,
nicht gegen den System-Truststore. Der Aufruf scheitert dann mit einem
CERTIFICATE_VERIFY_FAILED im Verbindungsfehler.
Der direkte Weg ist --ca-bundle mit der PEM-Datei der ausstellenden CA:
inet-helpdesk-mcp --base-url https://helpdesk.intern.example.com:9000 \
--ca-bundle /usr/local/share/ca-certificates/firmen-ca.crtGenauso als Umgebungsvariable, z. B. im Env-File der systemd-Unit:
INET_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crtOhne die Option werden zusätzlich die Standardvariablen SSL_CERT_FILE und
REQUESTS_CA_BUNDLE berücksichtigt (in dieser Reihenfolge); erst wenn auch die
fehlen, bleibt es beim certifi-Bundle. Ein gesetztes --ca-bundle gewinnt
immer, und die angegebene Datei ist dann der einzige vertraute Truststore —
öffentliche CAs werden nicht zusätzlich akzeptiert. Zeigt der Pfad ins Leere,
bricht der Server sofort beim Start mit einer Konfigurationsmeldung ab.
Alternative: die CA einmal im System hinterlegen, dann genügt der Verweis
auf den System-Truststore (oder es reicht SSL_CERT_FILE):
sudo cp firmen-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates # Debian/Ubuntu
# RHEL/Fedora: /etc/pki/ca-trust/source/anchors/ + update-ca-trust
inet-helpdesk-mcp --ca-bundle /etc/ssl/certs/ca-certificates.crt …--ca-bundle und --no-verify-tls schließen einander aus — der Server beendet
sich mit einem Konfigurationsfehler, statt stillschweigend die Prüfung
abzuschalten. Welcher Truststore am Ende verwendet wird, zeigen der Startlog und
das Feld tls von server_info.
Fehlersuche
server_infozuerst aufrufen — es zeigt Basis-URL, Auth-Verfahren und ob eine Testabfrage gegen den HelpDesk funktioniert.HTTP 401/403: Token abgelaufen oder dem Benutzer fehlt das Recht „Web API".
HTTP 404 bei einem Ticket: Ticket existiert nicht oder ist für diesen Benutzer nicht sichtbar; noch nicht autorisierte Tickets brauchen die Dispatcher-Rolle.
Verbindungsfehler: Basis-URL inklusive Port prüfen (Standard des HelpDesk ist
9000). Bei selbstsignierten Testsystemen hilft--no-verify-tls.CERTIFICATE_VERIFY_FAILED/ „unable to get local issuer certificate": Das HelpDesk-Zertifikat stammt aus einer internen CA — siehe HelpDesk hinter einer internen CA.Mehr Details liefert
--log-level DEBUG(Logs gehen auf stderr).
Sicherheitshinweise
Zugangsdaten stehen in Umgebungsvariablen bzw. im
Authorization-Header und werden nie geloggt.Der Server macht genau das, was der angemeldete Benutzer darf — die Rechteprüfung bleibt beim HelpDesk.
apply_ticket_actionundcreate_ticketverändern Daten und können je nach Konfiguration E-Mails an Endanwender auslösen. Serverseitig verhindert das--default-automail NEVER, im einzelnen Aufruf das Aktionsargument"ticketextension.automail": "NEVER". Zum Einfahren eines Agenten gegen ein Produktivsystem gibt es--dry-run.Jeder schreibende Aufruf wird mit Ticket-Id und Aktions-Id auf INFO protokolliert — ohne Token und ohne Passwort.
get_ticketliefert standardmäßig alle Felder eines Tickets, inklusive personenbezogener Daten — mitfieldsgezielt einschränken.
English summary
MCP server exposing the i-net HelpDesk Ticket Web-API: search, read, create and
act on tickets, with attachment support. Run it over stdio (credentials from
INET_BASE_URL + INET_TOKEN) or over streamable HTTP, where each client
authenticates by sending its own Authorization: Bearer <token> header — and,
when no base URL is configured, selects the HelpDesk instance with an
X-Inet-Base-Url header. Tools: server_info, search_tickets, get_ticket,
get_ticket_conversation, list_ticket_actions, list_ticket_steps,
get_ticket_step, create_ticket, apply_ticket_action. Answers are reshaped for
the agent (display values merged, ISO timestamps added, HTML step texts converted;
raw: true or --no-normalize opts out). Guard rails for the writing side:
--read-only, --dry-run, --allowed-actions / --denied-actions and
--default-automail.
Lizenz
MIT. Kein offizielles Produkt der i-net software GmbH. Web-API-Dokumentation: https://docs.inetsoftware.de/helpdesk/help/webapi.ticket/p/ticket-web-api
Available Tools
8 toolsapply_ticket_actionApply ticket actionA
Apply a ticket action to an existing ticket - answering, closing, escalating and so on - and return the id of the new editing step. Call list_ticket_actions first: only the ids listed there are valid, and they differ per ticket, user and state. This changes the ticket, so confirm the action with the user when the intent is ambiguous.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| action_id | Yes | ||
| ticket_id | Yes | ||
| attachments | No | ||
| step_fields | No | ||
| html_content | No | ||
| ticket_fields | No | ||
| action_arguments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states that this tool changes the ticket, which is a behavioral disclosure. It also mentions that actions vary per ticket/user/state, implying context-dependence. However, it does not detail side effects like whether steps are immutable or if there are irreversible actions, but given the existence of an output schema, this is acceptable.
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 three sentences, each with a purpose. It front-loads the main purpose, then adds a crucial prerequisite warning, and concludes with a safety note. No wasted words. The structure is ideal for an MCP 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?
Given the tool's complexity (8 parameters, no schema descriptions, no annotations), the description provides essential usage guidance. The presence of an output schema helps with return value understanding. The main gap is the lack of parameter explanations, but the tool's purpose and behavior are sufficiently outlined for an agent to understand when and how to use it, particularly with the hint to list actions first.
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 description coverage is 0%, so the description must compensate. It mentions 'text', 'attachments', 'step_fields', etc. only indirectly by saying 'answering, closing, escalating', but does not explain specific parameters like 'action_arguments' or 'ticket_fields'. The description adds context for action_id and ticket_id (validity and prerequisite), but for other parameters it relies on the schema which has no descriptions. Since 8 parameters that are mostly undocumented, the description could do more to explain how to use them.
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's purpose: 'Apply a ticket action to an existing ticket - answering, closing, escalating and so on - and return the id of the new editing step.' It uses specific verbs (apply, return) and names the resource (ticket). It also distinguishes from siblings by focusing on actions, while siblings like list_ticket_actions and get_ticket handle listing and retrieval.
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 explicit guidance: 'Call list_ticket_actions first: only the ids listed there are valid, and they differ per ticket, user and state.' This tells the agent the prerequisite step and warns about validity constraints. It also says to confirm with the user when intent is ambiguous, which is excellent for ambiguous situations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ticketCreate ticketA
Create a new ticket and return its id. text is the request text of the ticket. ticket_fields and action_arguments are optional and only needed for advanced cases - unknown ticket fields are rejected, unknown action arguments are ignored by the server.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| owner_guid | No | ||
| attachments | No | ||
| html_content | No | ||
| ticket_fields | No | ||
| action_arguments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden. It states the return value (id) and warns about rejection of unknown ticket_fields versus silent ignoring of action_arguments, which is useful. However, it does not disclose whether the operation is destructive, if it requires authentication, or if there are rate limits, leaving gaps.
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 concise at two sentences, immediately stating the core purpose. It front-loads the primary behavior and return value, then adds parameter notes. One minor improvement could be to structure the parameter notes more clearly, but overall it is efficient.
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 the tool has 6 parameters, 0% schema coverage, and no annotations, the description covers only a subset of parameters (text, ticket_fields, action_arguments) and lacks details on attachments, owner_guid, and html_content. The presence of an output schema helps but does not fully compensate for missing parameter explanations.
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 description coverage is 0%, so the description must compensate. It explains the critical `text` parameter and adds meaning to `ticket_fields` and `action_arguments` by noting their optionality and server behavior. However, `owner_guid`, `attachments`, and `html_content` are not described, leaving some parameters without context.
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 creates a new ticket and returns its ID. It distinguishes itself from sibling tools like search_tickets, get_ticket, and apply_ticket_action by focusing on creation, not retrieval or modification.
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 mentions that `ticket_fields` and `action_arguments` are optional and only for advanced cases, and notes that unknown fields are rejected while unknown arguments are ignored. However, it does not provide guidance on when to use this tool versus alternatives like apply_ticket_action, or when attachments or html_content should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ticketGet ticketA
Read one ticket with its fields and attributes. Pass fields to limit the response to the entries you need - the full record can be large and may contain personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explicitly states the tool is read-only ('Read one ticket') and warns that the full record can be large and may contain personal data. This adds behavioral context beyond what structured data provides. It does not mention authentication, error handling, or idempotency, but the core safety trait is transparent.
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 two sentences with no wasted words. The first sentence front-loads the core purpose, and the second adds a practical usage tip. Every sentence earns its place.
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 the tool's simplicity (2 parameters, output schema present), the description covers the core action, a key parameter hint, and a data sensitivity warning. It does not discuss error behavior or edge cases, but the output schema fills return value details. The description is sufficient for an agent to use the tool correctly in most scenarios.
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 description coverage is 0%, so the description must compensate. It explains the `fields` parameter's purpose (limit response, avoid large/personal data) and why it is useful. The `ticket_id` parameter is not explained in text, but its purpose is obvious from name and context. The description adds meaningful value beyond the bare schema.
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 verb 'Read' and the resource 'one ticket with its fields and attributes'. It distinguishes itself from sibling tools like 'search_tickets' (multiple results) and 'create_ticket' (write) by specifying a single ticket retrieval. The purpose is specific and unambiguous.
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 a usage hint to pass the `fields` parameter to limit response size and avoid personal data, which is helpful. However, it does not explicitly state when to use this tool versus alternatives (e.g., 'search_tickets' for filtering, 'list_ticket_actions' for operations). The guidance is implied but lacks exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ticket_stepGet ticket stepA
Read one editing step of a ticket, including its text and the applied ticket action. Pass fields to reduce the returned fields and attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| step_id | Yes | ||
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it's a read operation ('Read'), but does not mention idempotency, rate limits, or whether the step is returned in a specific format. It hints at field filtering but lacks detail on what 'applied ticket action' means or if the action is mutable.
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 two sentences long with no wasted words. It front-loads the purpose ('Read one editing step...') and adds a helpful optimization hint ('Pass fields to reduce...'). Every sentence earns its place.
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 tool has a rich output schema (mentioned in context), so the description does not need to detail return values. It covers the key behavior (reading a step, including text and action) and parameter usage. No mention of error states or prerequisites, which is a minor gap for a complex tool with many siblings.
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 the description must compensate. It explains the 'fields' parameter by saying 'Pass fields to reduce the returned fields and attributes', giving context not in the schema. However, it does not describe ticket_id and step_id beyond their names, which are clear from context.
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 'Read one editing step of a ticket', specifying the verb 'read' and the resource 'editing step' with the scope 'of a ticket'. This distinguishes it from siblings like list_ticket_steps (list) and get_ticket (different resource).
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 this is for reading a single step, but does not explicitly say when to use it over siblings (e.g., get_ticket for ticket-level info, list_ticket_steps for multiple steps). No alternatives or exclusions are mentioned, so it's adequate but lacking guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ticket_actionsList ticket actionsA
List the ticket actions the authenticated user may currently apply to a ticket, as a map of action id to display name. The ids are the input for apply_ticket_action.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions the action list is scoped to the authenticated user and returns a map, but omits details about permissions requirements, error conditions (e.g., invalid ticket_id), or whether the list could be empty.
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?
Two sentences, no filler. The first sentence states the core purpose, the second links to a related sibling. Every word earns its place.
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?
For a simple list tool with one parameter and an output schema, the description covers the output format and workflow integration. It is nearly complete but lacks parameter documentation, which is a minor gap given the tool's simplicity.
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 input schema has a required ticket_id with no description (0% schema coverage). The description does not elaborate on ticket_id format, source, or constraints, leaving the agent with no additional guidance beyond the schema.
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 lists ticket actions the authenticated user may apply, returning a map of id to display name. It distinguishes from sibling apply_ticket_action by noting the ids are its input.
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 usage as a precursor to apply_ticket_action, providing a natural workflow. However, it does not explicitly state when to use this tool over siblings like list_ticket_steps or get_ticket, nor does it mention exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ticket_stepsList ticket stepsA
List the editing steps (history) of a ticket. For a primary ticket in a bundle the steps of its secondary tickets are merged in. Use get_ticket_step for the text of a single step.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ||
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses that for primary tickets in a bundle, steps from secondary tickets are merged, which is a key behavioral trait. However, it does not mention other important traits such as pagination, rate limits, data freshness, or what happens on error, which would be valuable for a history endpoint.
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 two sentences long and front-loads the main purpose. It includes a behavioral detail (merged steps) and a sibling reference. Every sentence adds value, and there is no fluff. It could be slightly more structured (e.g., separate section for parameters) but is already efficient.
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 that the tool has an output schema (which explains return values) and only 2 simple parameters, the description does not need to cover return structure. It explains the bundle merging behavior and the sibling context. It might be slightly incomplete for agents needing to know about pagination or limits, but for a list endpoint with an output schema, it's largely sufficient.
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 description coverage is 0%, so the description must compensate. However, the description does not explain either parameter (since or ticket_id). The since parameter especially benefits from explanation (e.g., format or semantics). The ticket_id is somewhat self-explanatory but formal guidance is missing. Baseline for 0% coverage would be lower, but with only 2 params and one being clear from the property name, a 3 is appropriate.
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 lists 'editing steps (history) of a ticket' which is a specific verb+resource. It further distinguishes from siblings by mentioning behavior for bundle tickets and explicitly referencing the sibling `get_ticket_step` for single step retrieval, making it easy for an agent to differentiate.
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 clear context on when to use this tool (to list the entire step history) and when to use an alternative ('Use get_ticket_step for the text of a single step'). It doesn't explicitly say when not to use it or mention prerequisites, but the guidance on bundle tickets and the sibling reference is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ticketsSearch ticketsA
Search tickets with the same phrase syntax as the Tickets application, for example printer or Resource:"First Level Support". Returns the matching ticket ids plus suggestions for fields and values that can narrow the query further.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| start | No | ||
| locale | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns matching ticket IDs plus suggestions and that it uses a specific syntax. However, it does not mention behavioral traits like pagination, rate limits, or whether the operation is read-only, though the search nature implies safety.
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 consists of two concise sentences. The first explains functionality and syntax, the second explains the return value. No unnecessary words are present.
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 main functionality and return value, and an output schema exists. However, it lacks explanation of the pagination parameters (limit, start) which are important for a search tool. Overall, it is reasonably complete but has a notable gap.
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?
With 0% schema description coverage, the description must compensate. It adds meaning for the query parameter by explaining the syntax and providing examples, but it does not describe the limit, start, or locale parameters at all. This is insufficient for a 4-parameter tool.
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 that the tool searches tickets using a specific phrase syntax, with examples like 'printer' or 'Resource:"First Level Support"'. It distinguishes the search action from sibling tools such as create_ticket or get_ticket by its purpose and return value.
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 usage guidance by referencing the Tickets application's syntax, but it does not explicitly state when to use this tool versus alternatives or when not to use it. The context is implied but not formalized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_infoServer infoA
Report how this MCP server is configured and verify that the i-net HelpDesk can be reached with the current credentials. Use this first when a call fails with an authentication or connection error.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It clearly discloses the tool is read-only (reports/verifies) and connects it to server config and credential validation. It could be slightly improved by explicitly stating it has no side effects (like creating or modifying data), but the intent is clear enough from context.
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 two sentences, front-loaded with the core purpose, and contains no extraneous information. Every sentence earns its place.
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 that the tool has zero parameters, an output schema exists (so return values are documented elsewhere), and the sibling tools all focus on tickets, this description is complete. It explains what the tool does, when to use it, and implies what it does not do (mutations).
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 input schema has zero parameters and schema description coverage is 100% (trivially). The description adds meaning by explaining what the tool does with those zero parameters: it reports configuration and verifies connectivity. This is a case where the parameter semantics is inherently simple, and the description captures the purpose well.
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 uses a specific verb and resource: 'Report how this MCP server is configured and verify that the i-net HelpDesk can be reached with the current credentials.' It clearly distinguishes from sibling tools: all siblings deal with ticket operations, while this tool is about server and authentication status.
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 explicitly states when to use this tool: 'Use this first when a call fails with an authentication or connection error.' This gives clear guidance on the context and problem type that should trigger its invocation, and by omission implies it is not needed for normal ticket operations.
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.
8 tool updates
v0.1.0- First observed
apply_ticket_action - First observed
create_ticket - First observed
get_ticket - First observed
get_ticket_step - First observed
list_ticket_actions - First observed
list_ticket_steps - First observed
search_tickets - First observed
server_info
TDQS
Scored across 8 tools
Each tool targets a distinct operation in the ticket lifecycle: creation, retrieval, search, action listing, action application, step listing, and step reading. No two tools have overlapping purposes, making it easy for an agent to select the correct tool.
Six of eight tools follow a clear verb_noun pattern (e.g., create_ticket, search_tickets, get_ticket). However, server_info is a noun_noun format that breaks the pattern, preventing a perfect score.
With 8 tools, the server covers core ticket operations without being bloated. The number is well-scoped for a focused HelpDesk MCP server, fitting the recommended range comfortably.
The server provides create, read, search, and action application, but lacks a general update tool for modifying ticket fields (e.g., priority, assignee). There is also no delete tool. This is a notable gap, though the action application covers workflow state changes.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server exposing the Backtest360 engine API as tools for AI agents.
AI-native helpdesk hosted in Germany: tickets, replies, KPIs and knowledge base over MCP.
Related MCP Servers
AlicenseAqualityDmaintenanceAn MCP server that lets AI assistants search and read support tickets from Jitbit Helpdesk. Works with both SaaS and on-premise installations.333 npm3MIT
tickiti-mcpofficial
AlicenseBqualityBmaintenanceAn MCP server that exposes the Tickiti helpdesk API to AI assistants, enabling ticket management and helpdesk operations via natural language.11MIT- AlicenseAqualityDmaintenanceMCP server for Otobo ITSM enabling AI assistants to search, create, update, and manage tickets via the Generic Interface REST API.108 npm1MIT
- AlicenseAqualityDmaintenanceMCP server to manage GestSup tickets via an LLM, with tools for creating, reading, commenting, and searching tickets.13MIT