Tickiti

io.github.tickiti由 GitHub 账号 tickiti 发布v0.2.0更新于 Nov 1, 2026

Connect AI assistants to the Tickiti helpdesk API: tickets, queries, reports and admin.

概览

AI 生成的概览

把 AI 助手连接到 Tickiti 客服工单 API,可读取、写入和管理工单、模板、邮件与报表。

可以做什么
  • 创建、回复、关闭、合并、关联、拆分、删除与恢复工单,并管理参与者和附件
  • 读取工单会话、单条回复、附件、队列、团队、员工与解决方案,并搜索或导出回复
  • 管理常用回复、模板与模板图片,并可在不发送的情况下渲染模板
  • 发送与搜索邮件,查看视图与关注列表,运行报表,管理 API 令牌
  • 发现任意 API 端点并通过通用调用工具访问 v1 API 的其余部分
适用场景
适合使用 Tickiti 的客服团队,让助手在对话中分诊、回复、检索或统计工单,或自动处理客服后台事务。若只希望助手查看而不改动,请签发只读令牌。
运行要求
以 stdio 本地进程运行,需从源码构建,要求 Node.js 20 或更高版本。需要 Tickiti API 令牌和 Tickiti 安装实例的公开地址,通过 TICKITI_API_BASE 与 TICKITI_API_TOKEN 环境变量设置;可通过 TICKITI_INSTANCES 配置多个实例。还需要支持 MCP 的客户端。
安装前请注意
令牌的能力范围是唯一的安全边界;写入类工具可发送邮件、删除或合并工单、修改模板,以及创建或吊销 API 令牌。仅在需要时授予写入能力,优先使用只读令牌。工单内容、附件和邮件会发送到 Tickiti 实例并经过模型;长正文和文件可改用本地路径传入。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Tickiti,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

tickiti-mcp

An MCP (Model Context Protocol) server that exposes the Tickiti helpdesk API to AI assistants such as Claude. It is a thin shim over the Tickiti Public API v1 (/api/v1/...): each MCP tool forwards to a v1 endpoint, adding your bearer token and — for writes — an idempotency key. The token's abilities are the security boundary: the server only relays calls, it never widens them, so a read-only token gives a read-only assistant.

📖 Full documentation: https://www.tickiti.com/docs/topic/mcp_server/

Tools

The ticket tools have full, validated inputs; the rest of the API is reachable through two general tools, so the whole surface is available without a separate tool per endpoint.

Tickets

ToolAbilityPurpose
create_tickettickets:writeOpen a ticket (subject+content, template, or intervention), with assignee, priority, status and participants; is_public is required
respond_to_tickettickets:writePost a response; change status, hold, assignee, priority, queue, subject, participants; send_full_email for the whole reply by email
close_tickettickets:writeClose, optionally with a final reply and a resolution
edit_responsetickets:writeChange a response in place (whole body, find/replace, visibility) with no notification — or publish an internal note and notify
delete_responsetickets:writeSoft-delete a response
add_participants / remove_participantstickets:writeChange participants
delete_tickets / restore_tickettickets:writeDelete tickets (by number, or everything from one sender) and undo it
merge_ticketstickets:writeMerge two tickets (the older survives)
link_tickets / unlink_tickets / list_linked_ticketstickets:write / readThe Linked panel
move_responses / copy_responses / split_tickettickets:writeRepair a thread: move or copy responses, or split them off into a new linked ticket
change_originatortickets:writeChange who raised a ticket
delete_attachmenttickets:writeRemove one attachment (a malicious file, say), keeping a record of it
get_ticket / list_responsestickets:readA ticket's thread, participants and links; fields / max_body_chars keep long email threads small
get_responsetickets:readOne response by id
query_ticketstickets:readSearch tickets
query_responses / export_responsestickets:readResponses across tickets; counts and group-by tallies; NDJSON export to disk
get_attachment / download_attachmenttickets:readAttachment bytes (download streams any size to a file)
list_queues / list_teams / list_staff / list_resolutions / get_search_modestickets:readQueue names and settings, team keys, staff addresses, resolution categories, the search vocabulary

Settings, templates, mail, administration

ToolAbilityPurpose
list_perspectives / get_perspectivesettings:readSaved views, with conditions and sort orders
list_watchlistssettings:readWatchlists
list_stock_responses / get_stock_responsesettings:readStock responses (search, bodies)
create_stock_response / update_stock_response / delete_stock_responsesettings:writeEdit stock responses
get_template / search_templates / render_templatetemplates:readTemplates and FAQs; render one against data without sending
create_template / update_templatetemplates:writeEdit templates (updates change only the fields given)
upload_template_imagetemplates:write / settings:writeUpload an image for a template or stock response
send_email / search_sent_mailmail:write / mail:readSend mail; search what was sent
list_api_tokens / create_api_token / update_api_token / revoke_api_tokenadministration:*API keys (a token only grants abilities it holds)
list_workflowworkflow:readResolution categories, interventions, escalations
run_reportreports:readAnalytics reports
get_token_infoanyWhat this token can do: abilities, owner roles, plan
list_instances—The Tickiti instances configured (see below)
list_endpoints—Every API endpoint, with abilities, path and body parameters
tickiti_callper endpointCall any /api/v1 endpoint by family and action

For anything beyond the named tools (mail, templates, workflow writes, administration, supervisor), the assistant uses list_endpoints to discover the action, then tickiti_call to run it — covering all of the v1 API.

Requirements

  • Node.js 20 or newer
  • A Tickiti API token, minted from Administration → API keys, scoped to the abilities you want the assistant to have
  • An MCP-capable client — e.g. Claude Code or the Claude desktop app

Install

bash
git clone https://github.com/tickiti/tickiti-mcp.gitcd tickiti-mcpnpm installnpm run build

The built server is dist/server.js.

Configure

The server reads two environment variables (it fails fast on startup if either is missing):

VariablePurpose
TICKITI_API_BASEYour Tickiti install's public address, no trailing slash — e.g. https://support.example.com. The server appends /api/v1/….
TICKITI_API_TOKENThe bearer token. Its abilities determine what the assistant can do.

More than one instance

To reach several Tickiti installs from one server (production and staging, say), add TICKITI_INSTANCES: JSON, or the path of a JSON file, mapping a name to { "base", "token" }. The TICKITI_API_BASE / TICKITI_API_TOKEN pair stays the default instance, named by TICKITI_INSTANCE_NAME (default default).

bash
TICKITI_INSTANCE_NAME=productionTICKITI_INSTANCES='{"staging": {"base": "https://staging.example.com", "token": "…"}}'

Every tool then takes an optional instance argument; list_instances shows the names.

Use with Claude Code

bash
claude mcp add tickiti \  --env TICKITI_API_BASE=https://support.example.com \  --env TICKITI_API_TOKEN=YOUR_TICKITI_API_TOKEN \  -- node /absolute/path/to/tickiti-mcp/dist/server.js

Confirm with claude mcp list (or /mcp in a session). Remove with claude mcp remove tickiti.

Other MCP clients configure servers in their own settings file, but the shape is the same: run node /absolute/path/to/tickiti-mcp/dist/server.js as a stdio server with TICKITI_API_BASE and TICKITI_API_TOKEN set in its environment.

Permissions & security

The server adds no permissions of its own. Every call runs as the staff user the token belongs to, gated by the token's abilities — exactly as a direct API call would be. To limit what an assistant can do, mint a narrowly-scoped token:

  • A read-only token (e.g. tickets:read, reports:read) gives an assistant that can look but not change anything.
  • Grant write abilities only for the families the assistant needs to act on.
  • If a call is refused, the server reports the reason (missing ability, role or plan).

The ticket-writing tools send an idempotency key with every call, so a retried request never creates a duplicate ticket or response.

Long bodies can be given as content_path (a local file) instead of content, and files and images always go by path: the server reads them, so their bytes never pass through the model.

How it works

FileRole
src/client.tsRequest core: base URL, bearer auth, idempotency, error normalisation
src/result.tsMaps an API result into the MCP tool-result envelope
src/manifest.tsHelpers over the generated route manifest (lookup, path building)
src/generated/manifest.tsAuto-generated route table (do not edit)
src/tools/tickets.tsTicket writes — verified input schemas
src/tools/ticket-reads.tsTicket, response and attachment reads
src/tools/ticket-operations.tsDelete, merge, link, move, originator, attachment delete, lookups
src/tools/settings-writes.tsStock responses and templates
src/tools/admin.tsMail, template rendering and images, perspectives, API keys, instances
src/tools/reads.tsNamed read tools (settings / workflow / reports)
src/tools/generic.tslist_endpoints + tickiti_call
src/param-hints.tsBody parameters list_endpoints shows for endpoints without a dedicated tool
src/server.tsEntry point: registers tools, connects the stdio transport
scripts/build-manifest.mjsRegenerates the manifest from the Tickiti route table

Maintainers

src/generated/manifest.ts is generated from Tickiti's own route table (php artisan route:list --json), so abilities, roles, plan gates and path params are never hand-maintained. Regenerate against a Tickiti checkout after the API changes:

bash
TICKITI_DIR=/path/to/tickiti npm run manifest

There is an end-to-end sweep over every endpoint in tests/all-paths.mjs (npm run test:paths, needs a base URL and a full-ability token against a scratch instance), and an offline check of the tool registration in tests/smoke-tools.mjs (npm run build && node tests/smoke-tools.mjs).

Several tools call endpoints added to Tickiti in October 2026. Against an older install they return 404; list_endpoints describes the newest API.

License

MIT © Oxenic

来源:README.md,提交 e0d53b6

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v0.2.0最新Oct 4, 2026
  2. v0.1.0Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分