Skip to main content
Glama
bhargavlukka

TicketDesk MCP

by bhargavlukka

TicketDesk MCP — MCP-сервер и клиент производственного уровня

Сервер на базе Model Context Protocol (MCP), предоставляющий доступ к внутренней очереди заявок службы поддержки, в паре с клиентом, который обнаруживает и вызывает его инструменты, ресурсы и промпты. Создан для лабораторной работы «Build a Production MCP Server & Client» (Module 4, Model Context Protocol).

Содержание

Related MCP server: Ticket Queue MCP Server

Архитектура

flowchart TD
    HOST["Host application\n(e.g. an AI assistant / chatbot)"] --> CLIENT

    subgraph Client["client.py — fastmcp.Client"]
        CLIENT["Discovery: list_tools / list_resources /\nlist_resource_templates / list_prompts"]
        ELICIT["elicitation_handler\n(client-side safety gate for\nhigh-impact actions)"]
        CLIENT <--> ELICIT
    end

    CLIENT <-->|"Streamable HTTP\nAuthorization: Bearer <token>"| SERVER

    subgraph Server["server.py — FastMCP('TicketDesk')"]
        AUTH["StaticTokenVerifier\n(read:tickets / write:tickets scopes)"]
        TOOLS["Tools: search_tickets, get_ticket,\nadd_ticket_note, close_ticket"]
        RES["Resources: ticket://{ticket_id},\npolicy://sla"]
        PROMPT["Prompt: triage_ticket"]
        AUTH --> TOOLS
        AUTH --> RES
        AUTH --> PROMPT
    end

    SERVER --> DATA[("data/tickets.json,\ndata/sla_policy.md")]

Транспорт: Streamable HTTP — обоснование приведено в docs/architecture.md (если коротко: это общий внутренний сервис, к которому подключаются ИИ-приложения нескольких команд, а не одна пара локальных процессов, для которой подходит stdio).

Что предоставляет сервер

  • 4 инструмента: search_tickets, get_ticket, add_ticket_note, close_ticket (последний — действие с высоким уровнем влияния, защищённое запросом подтверждения на стороне клиента)

  • 2 ресурса: ticket://{ticket_id} (шаблонный) и policy://sla (статический)

  • 1 промпт: triage_ticket

Полная документация по каждому элементу: docs/tools-resources-prompts.md.

Настройка и запуск демонстрации

pip install -r requirements.txt

# Terminal 1
python server.py

# Terminal 2
python client.py                # interactive: real confirmation prompts via input()
python client.py --auto-confirm # non-interactive demo mode (used to produce demo/session_log.txt)

client.py подключается с токеном dev-agent-token (права на чтение и запись), выполняет обнаружение, вызывает по одному представителю каждого инструмента/ресурса/промпта, демонстрирует оба режима обработки ошибок (Требование 8), выполняет действие с высоким влиянием close_ticket через запрос подтверждения на стороне клиента (Требование 6) и завершается демонстрацией наименьших привилегий: dev-readonly-token корректно получает отказ в инструменте с правом на запись.

Безопасность

Полное описание: docs/security-summary.md. Если коротко: аутентификация по bearer-токену через StaticTokenVerifier, явные проверки прав (scope) для каждого инструмента (реальный пробел — требований к scope на уровне соединения сами по себе не ограничивают вызовы отдельных инструментов — был обнаружен и исправлен в процессе разработки; честное изложение — в документе по безопасности), а также ToolError + mask_error_details=True, чтобы отделять ошибки, на которые пользователь может отреагировать, от внутренних сбоев, которые никогда не должны доходить до клиента в исходном виде.

Соответствие требованиям

Требование

Где выполняется

≥3 инструментов

search_tickets, get_ticket, add_ticket_note, close_ticket (server.py)

≥2 ресурсов, каждый является URI

ticket://{ticket_id}, policy://sla (server.py)

≥1 переиспользуемый промпт

triage_ticket (server.py)

Клиент обнаруживает и вызывает каждый элемент

client.py run_discovery_and_demo()

Выбор транспорта обоснован

docs/architecture.md

Функция безопасности на стороне клиента

Запрос подтверждения для close_ticket (client.py elicitation_handler)

Итоговый дизайн безопасности

docs/security-summary.md

Обработка ошибок для реалистичного сбоя

Неверный идентификатор заявки (ToolError) + имитация сбоя хранилища (mask_error_details) — оба в server.py, демонстрация в client.py

Демонстрационные журналы

demo/session_log.txt (реальный записанный запуск)

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to perform helpdesk tasks over MCP, including ticket management, knowledge base search, and reply drafting, with optional pay-per-action USDC settlement and human approval workflows.
    23
    2
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI clients to access and manage an internal support ticket queue through MCP tools, resources, and prompts, including searching and viewing tickets, adding comments, closing tickets with confirmation, reading knowledge base articles, and viewing queue summaries over OAuth-secured Streamable HTTP.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to query and operate a help desk and service desk through MCP over HTTP, including tickets, requester communications, internal notes, attachments, stage and SLA history, time entries, clients, requesters, desks, knowledge base, contracts, and billing/satisfaction reports.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to find and read customer conversations, look up profiles, send replies, manage workspace metadata, and handle daily support workflows. It also supports triage, drafting, escalation, and handover tasks through MCP tools, prompts, and resources.
    35 npm
    1
    MIT