Skip to main content
Glama
roddyst

i-net HelpDesk MCP Server

by roddyst

i-net HelpDesk MCP 서버

i-net HelpDesk의 Ticket-Web-API를 모든 AI 에이전트를 위한 도구로 제공하는 MCP 서버입니다: 티켓 검색 및 읽기, 처리 단계 보기, 새 티켓 생성, 티켓 작업(답변, 종료, 에스컬레이션 등) 실행 — 파일 첨부 포함.

서버는 두 가지 방식으로 운영할 수 있습니다:

모드

용도

인증

stdio

에이전트별 로컬 프로세스 (Claude Desktop/Code, Cursor, VS Code …)

환경 변수의 토큰 또는 사용자/비밀번호

HTTP (streamable)

중앙 호스팅, 여러 사용자가 하나의 서버 프로세스 공유

각 클라이언트가 자체 Authorization 헤더를 보내고, 선택적으로 HelpDesk URL도 추가


전제 조건

  • Python 3.10 이상

  • Web-API가 활성화된 i-net HelpDesk

  • "Web API" 권한이 있는 사용자 — 이 권한이 없으면 서버가 HTTP 403으로 응답합니다. 표시되는 티켓과 허용되는 작업은 해당 사용자의 역할에 따라 결정됩니다.

Related MCP server: tickiti-mcp

설치

# 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_server

개발용:

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]"
pytest

빠른 시작: stdio (로컬 에이전트)

export INET_BASE_URL="https://helpdesk.example.com:9000"
export INET_TOKEN="VGhpcyBpcyBqdXN0IGEgZGVtbyBhY2Nlc3MgdG9rZW4u"
inet-helpdesk-mcp

Claude Desktop / Claude Code용 구성 (claude_desktop_config.json 또는 .mcp.json) — 추가 예제는 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"
      }
    }
  }
}

토큰 대신 INET_USERNAME과 INET_PASSWORD(Basic Auth)도 사용할 수 있습니다. 토큰은 i-net 문서에 설명된 대로 Authorization: Bearer <token>으로 전송됩니다.

빠른 시작: HTTP (중앙 호스팅)

inet-helpdesk-mcp --transport http --host 0.0.0.0 --port 8000 \
                  --base-url https://helpdesk.example.com:9000

엔드포인트는 http://<host>:8000/mcp에 있습니다. 에이전트는 이 URL을 입력하고 HelpDesk 토큰을 Authorization 헤더에 담아 보냅니다 — 이것이 바로 "URL + Bearer 토큰" 흐름이며, 서버는 이 헤더를 HelpDesk로 전달합니다. 원격 서버를 지원하는 MCP 클라이언트 예시:

{
  "mcpServers": {
    "i-net-helpdesk": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer dein-access-token" }
    }
  }
}

--base-url 없이 클라이언트는 X-Inet-Base-Url 헤더를 통해 대상 시스템을 추가로 결정합니다. 이는 여러 HelpDesk 인스턴스를 사용하는 테넌트에게 유용하지만, 서버를 임의 주소에 대한 프록시로 열어 놓게 됩니다 — 따라서 개방형 네트워크에서는 고정 --base-url을 설정하는 것이 좋습니다(그러면 헤더가 비활성화되며, --allow-url-header로 허용하지 않는 한).

운영 참고 사항: 서버는 자체적으로 TLS를 종료하지 않으며 클라이언트를 인증하지 않습니다 — 로그인은 전달된 토큰을 사용하여 HelpDesk에서 이루어집니다. 로컬 네트워크를 넘어 접근 가능해야 하는 경우, 앞에 HTTPS를 사용하는 리버스 프록시를 두어야 합니다.


도구

도구

Web-API

설명

server_info

–

구성을 표시하고 연결 및 자격 증명을 확인합니다. 오류 발생 시 첫 번째 확인 지점입니다.

search_tickets

POST /api/ticket/search

검색어로 티켓 찾기 (query, limit, start, locale).

get_ticket

GET /api/ticket/<id>

티켓의 필드와 속성; fields로 응답을 제한합니다.

list_ticket_actions

GET /api/ticket/<id>/actions

현재 허용된 티켓 작업을 "Id → 표시 이름" 맵으로 제공합니다.

list_ticket_steps

GET /api/ticket/<id>/steps

티켓의 처리 단계, 선택적으로 타임스탬프 since 이후.

get_ticket_step

GET /api/ticket/<id>/steps/<step-id>

텍스트를 포함한 하나의 처리 단계.

create_ticket

POST /api/ticket/create

새 티켓 생성, 티켓 ID 반환.

apply_ticket_action

POST /api/ticket/<id>/apply

티켓 작업 실행, 새 처리 단계의 ID 반환.

create_ticket와 apply_ticket_action은 --read-only를 사용하면 등록되지 않습니다 — 에이전트가 읽기만 가능해야 할 때 유용합니다.

티켓 ID는 숫자와 HelpDesk 이메일 제목 줄에 있는 인코딩된 형식 모두 허용됩니다.

일반적인 흐름

  1. search_tickets로 Drucker 또는 Resource:"First Level Support" 같은 구문 검색

  2. get_ticket / list_ticket_steps / get_ticket_step으로 읽기

  3. list_ticket_actions로 유효한 action_id 확인

  4. 해당 ID로 apply_ticket_action 실행 — ID는 티켓, 사용자, 티켓 상태에 따라 다르므로 추측해서는 안 됩니다.

티켓 필드 및 작업 인수

ticket_fields, step_fields, action_arguments는 선택 사항이며 일반적으로 필요하지 않습니다. 필요한 경우 Web-API 규칙이 적용됩니다: 키는 실제 필드 키(또는 지역화된 표시 이름)와 일치해야 하며, 값은 문자열입니다. JSON 값은 문자열로 인코딩되어야 합니다. i-net 문서의 예시:

{
  "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}"
}

알 수 없는 티켓 필드는 오류를 발생시키고, 알 수 없는 작업 인수는 HelpDesk에서 자동으로 무시되며 디버그 로그에만 기록됩니다.

첨부 파일

첨부 파일은 목록으로 전달되며, 각각의 내용은 인라인으로 Base64 또는 서버 파일 시스템의 경로로 제공됩니다:

{
  "text": "Anfrage mit Anhang",
  "attachments": [
    { "name": "screenshot.png", "content_base64": "iVBORw0KGgo…" },
    { "path": "/tmp/protokoll.pdf", "attachment_type": "Attachment" }
  ]
}

path는 에이전트와 서버가 동일한 머신을 공유하는 stdio 모드에서만 작동합니다. HTTP 모드에서는 자동으로 비활성화되며(--no-local-files로 stdio에서도 비활성화 가능). attachment_type에 허용되는 값: Attachment, EmbeddedImage, Signature, Unknown. 파일당 최대 크기: 25MB.


구성

모든 옵션은 환경 변수와 명령줄 스위치로 제공됩니다. 명령줄이 우선합니다.

환경 변수

스위치

기본값

의미

INET_BASE_URL

--base-url

–

HelpDesk의 기본 URL (예: https://helpdesk.example.com:9000)

INET_TOKEN

--token

–

Authorization: Bearer …용 액세스 토큰

INET_USERNAME / INET_PASSWORD

--username / --password

–

토큰 대신 사용할 Basic Auth

INET_TRANSPORT

--transport

stdio

stdio, http 또는 sse

INET_HOST

--host

127.0.0.1

HTTP 전송의 바인드 주소

INET_PORT

--port

8000

HTTP 전송의 포트

INET_HTTP_PATH

--http-path

/mcp

Streamable HTTP 엔드포인트의 경로

INET_TIMEOUT

--timeout

30

HTTP 타임아웃(초)

INET_VERIFY_TLS

--no-verify-tls

true

HelpDesk의 TLS 인증서 확인

INET_READ_ONLY

--read-only

false

쓰기 도구 숨기기

INET_ALLOW_URL_HEADER

--allow-url-header

INET_BASE_URL가 없을 때만

X-Inet-Base-Url 헤더 허용

INET_ALLOW_LOCAL_FILES

--no-local-files

stdio에서 true, 그 외 false

파일 경로로 첨부 파일 허용

INET_LOCALE

--locale

en

검색어의 기본 언어


문제 해결

  • 먼저 server_info 호출 — 기본 URL, 인증 방식, HelpDesk에 대한 테스트 쿼리 작동 여부를 표시합니다.

  • HTTP 401/403: 토큰이 만료되었거나 사용자에게 "Web API" 권한이 없습니다.

  • 티켓에서 HTTP 404: 티켓이 존재하지 않거나 해당 사용자에게 표시되지 않습니다. 아직 승인되지 않은 티켓은 Dispatcher 역할이 필요합니다.

  • 연결 오류: 포트를 포함한 기본 URL 확인(HelpDesk 기본값은 9000). 자체 서명된 테스트 시스템에서는 --no-verify-tls가 도움이 됩니다.

  • 더 자세한 내용은 --log-level DEBUG(로그는 stderr로 출력).


보안 참고 사항

  • 자격 증명은 환경 변수 또는 Authorization 헤더에 있으며 절대 로깅되지 않습니다.

  • 서버는 로그인한 사용자가 허용하는 작업만 수행합니다 — 권한 확인은 HelpDesk에 남아 있습니다.

  • apply_ticket_action과 create_ticket은 데이터를 변경하며 구성에 따라 최종 사용자에게 이메일을 보낼 수 있습니다. 테스트에는 작업 인수 "ticketextension.automail": "NEVER" 또는 테스트 시스템을 사용하는 것이 좋습니다.

  • get_ticket은 기본적으로 개인 데이터를 포함한 모든 티켓 필드를 반환합니다 — fields로 의도적으로 제한하세요.


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, list_ticket_actions, list_ticket_steps, get_ticket_step, create_ticket, apply_ticket_action. Start with --read-only to expose the reading tools only.

라이선스

MIT. i-net software GmbH의 공식 제품이 아닙니다. Web-API 문서: https://docs.inetsoftware.de/helpdesk/help/webapi.ticket/p/ticket-web-api

Available Tools

8 tools
apply_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
action_idYes
ticket_idYes
attachmentsNo
step_fieldsNo
html_contentNo
ticket_fieldsNo
action_argumentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
owner_guidNo
attachmentsNo
html_contentNo
ticket_fieldsNo
action_argumentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
step_idYes
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
startNo
localeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 8 tool updatesv0.1.0
    • First observedapply_ticket_action
    • First observedcreate_ticket
    • First observedget_ticket
    • First observedget_ticket_step
    • First observedlist_ticket_actions
    • First observedlist_ticket_steps
    • First observedsearch_tickets
    • First observedserver_info

TDQS

A4/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers