Skip to main content
Glama
kiwi-tcms-mcp
by belovdm

kiwi-tcms-mcp

MCP-сервер (Model Context Protocol) для полного доступа к API Kiwi TCMS на Node.js + TypeScript.

Работает поверх официального JSON-RPC endpoint'а Kiwi TCMS (/json-rpc/) с аутентификацией логин/пароль (Auth.login, как в tcms-api). Подключается к любому MCP-клиенту (Claude Desktop, VS Code, Cline, Cursor, MCP Inspector) по stdio.

Возможности

  • 68 инструментов: планы, кейсы, раны, исполнения, справочники (версии, теги, статусы, пользователи), вложения, properties + сквозной kiwi_rpc.

  • Именованные аргументы: приоритеты, категории, статусы, сборки, типы планов и пользователи принимаются по имени — сервер сам резолвит их в id.

  • Проект по умолчанию: KIWI_PROJECT (Product в терминах Kiwi) автоматически подставляется в фильтры и создание объектов.

  • Ресурс kiwi://status и промпт run-summary (сводка по тест-рану).

  • Понятные ошибки: HTTP-коды, JSON-RPC-ошибки, таймауты (KIWI_TIMEOUT), подсказки что проверить.

  • Безопасность: пароль не логируется, весь диагностический вывод — только в stderr.

Related MCP server: @g-tiwari/mcp-testrail

Установка

npm install -g @kiwi-tcms-ai/kiwi-tcms-mcp
kiwi-tcms-mcp --help

Или без глобальной установки: npx -y @kiwi-tcms-ai/kiwi-tcms-mcp --help.

Клиент API — @kiwi-tcms-ai/kiwi-tcms-client (ставится автоматически).

Локальная сборка из исходников:

cd kiwi-tcms-mcp
npm install
npm run build        # tsc -> dist/
node dist/index.js --help

Требования: Node.js ≥ 18 (используется глобальный fetch).

Конфигурация

Параметры задаются переменными окружения или CLI-флагами (флаги приоритетнее).

Env

Флаг

Обязат.

Описание

KIWI_URL

--url

да

Базовый URL инстанса, например https://tcms.example.com

KIWI_USERNAME

--username

да

Логин Kiwi TCMS (Auth.login)

KIWI_PASSWORD

--password

да

Пароль Kiwi TCMS

KIWI_PROJECT

--project

нет

Проект/Product по умолчанию (имя или id)

KIWI_TIMEOUT

--timeout

нет

Таймаут JSON-RPC запроса, мс (по умолчанию 30000)

KIWI_DEFAULT_LIMIT

--limit

нет

Лимит строк в list/filter-инструментах (по умолчанию 20)

KIWI_INSECURE=1

--insecure

нет

Не проверять TLS-сертификат (только self-signed в закрытом контуре)

Пример прямого запуска:

npx -y @kiwi-tcms-ai/kiwi-tcms-mcp \
  --url https://tcms.example.com \
  --username api-bot \
  --password keep-me-secret \
  --project "Payments"

Подключение к MCP-клиентам

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "kiwi-tcms": {
      "command": "npx",
      "args": ["-y", "@kiwi-tcms-ai/kiwi-tcms-mcp"],
      "env": {
        "KIWI_URL": "https://tcms.example.com",
        "KIWI_USERNAME": "api-bot",
        "KIWI_PASSWORD": "keep-me-secret",
        "KIWI_PROJECT": "Payments"
      }
    }
  }
}

После npm install -g @kiwi-tcms-ai/kiwi-tcms-mcp можно писать "command": "kiwi-tcms-mcp" без args.

VS Code (.vscode/mcp.json):

{
  "servers": {
    "kiwi-tcms": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@kiwi-tcms-ai/kiwi-tcms-mcp"],
      "env": {
        "KIWI_URL": "https://tcms.example.com",
        "KIWI_USERNAME": "api-bot",
        "KIWI_PASSWORD": "keep-me-secret",
        "KIWI_PROJECT": "Payments"
      }
    }
  }
}

Cline / Cursor (mcp_settings.json) — как Claude Desktop (mcpServers).

Отладка через MCP Inspector:

KIWI_URL=https://tcms.example.com KIWI_USERNAME=api-bot KIWI_PASSWORD=... KIWI_PROJECT=Payments \
  npx @modelcontextprotocol/inspector npx -y @kiwi-tcms-ai/kiwi-tcms-mcp

Инструменты

Инструмент

Метод Kiwi TCMS

Назначение

kiwi_ping

Product.filter

Проверка соединения и логина

kiwi_list_projects

Product.filter

Список проектов

kiwi_list_builds

Build.filter

Сборки продукта

kiwi_list_components

Component.filter

Компоненты продукта

kiwi_list_priorities

Priority.filter

Приоритеты

kiwi_list_categories

Category.filter

Категории кейсов

kiwi_list_plans

TestPlan.filter

Поиск тест-планов

kiwi_create_plan

TestPlan.create

Создание плана

kiwi_plan_add_case

TestPlan.add_case

Привязка кейса к плану

kiwi_search_cases

TestCase.filter

Гибкий поиск кейсов

kiwi_get_case

TestCase.filter

Карточка кейса; text возвращается как есть

kiwi_create_case

TestCase.create + add_tag

Создание кейса; тело кейса — в text

kiwi_update_case

TestCase.update

Обновление полей; text заменяется целиком

kiwi_case_add_comment

TestCase.add_comment

Комментарий к кейсу

kiwi_case_history

TestCase.history

История изменений кейса

kiwi_list_runs

TestRun.filter

Поиск тест-ранов

kiwi_create_run

TestRun.create

Создание рана

kiwi_run_add_case

TestRun.add_case

Добавление кейсов в ран

kiwi_run_status

TestRun.filter + TestExecution.filter

Сводка по рану, упавшие кейсы

kiwi_list_executions

TestExecution.filter

Поиск исполнений

kiwi_update_execution

TestExecution.update + add_comment

Смена статуса/сборки/исполнителя

kiwi_create_project

Product.create

Создать продукт

kiwi_create_build

Build.create

Создать сборку (через Version)

kiwi_list_versions / kiwi_create_version

Version.*

Версии продукта

kiwi_list_plan_types / kiwi_create_plan_type

PlanType.*

Типы планов

kiwi_list_case_statuses

TestCaseStatus.filter

Статусы кейсов

kiwi_list_execution_statuses

TestExecutionStatus.filter

Статусы исполнений

kiwi_list_users / kiwi_me

User.filter

Пользователи / текущий логин

kiwi_list_tags / kiwi_create_tag

Tag.*

Теги

kiwi_list_classifications

Classification.filter

Классификации продуктов

kiwi_update_plan

TestPlan.update

Обновить план

kiwi_plan_remove_case

TestPlan.remove_case

Убрать кейс из плана

kiwi_plan_tree

TestPlan.tree

Дерево плана

kiwi_plan_add_tag / kiwi_plan_remove_tag

TestPlan.*_tag

Теги плана

kiwi_update_run

TestRun.update

Обновить/закрыть ран

kiwi_run_get_cases

TestRun.get_cases

Кейсы рана + execution_id

kiwi_case_add_tag / kiwi_case_remove_tag

TestCase.*_tag

Теги кейса

kiwi_case_add_component / kiwi_case_remove_component

TestCase.*_component

Компоненты кейса

kiwi_execution_add_link / get_links / remove_link

TestExecution.*_link

Ссылки/баги на исполнение

kiwi_*_list_attachments / kiwi_*_add_attachment

*.list_attachments / add_attachment

Вложения кейса/плана/рана/исполнения

kiwi_remove_attachment

Attachment.remove_attachment

Удалить вложение

kiwi_*_properties / kiwi_*_add_property

*.properties / add_property

Properties кейса/рана/исполнения

kiwi_rpc

любой

Сквозной вызов оставшихся методов

Плюс ресурс kiwi://status (конфиг + live-проверка) и промпт run-summary.

Структура

kiwi-tcms-mcp/
├── package.json           # зависит от @kiwi-tcms-ai/kiwi-tcms-client из npm
├── tsconfig.json
└── src/
    ├── index.ts           # входная точка: stdio-транспорт, сборка сервера
    ├── config.ts          # env + CLI-флаги, валидация
    └── tools.ts           # MCP-схемы; логика — в kiwi-tcms-client

Лицензия

MIT

Available Tools

68 tools
kiwi_case_add_attachmentAdd case attachmentC

TestCase.add_attachment: filename plus base64 content.

Inputs: case_id (required), filename (required), b64content (required).

kiwi_case_add_commentAdd comment to test caseC

TestCase.add_comment as the logged-in user.

Inputs: id (required), comment (required).

kiwi_case_add_componentAdd component to caseC

TestCase.add_component: component name.

Inputs: case_id (required), component (required).

kiwi_case_add_propertyAdd case propertyC

TestCase.add_property: arbitrary name/value pair.

Inputs: name (required), value (required), case_id (required).

kiwi_case_add_tagAdd tag to caseB

TestCase.add_tag. Attaches a tag to the test case.

Inputs: tag (required), case_id (required).

kiwi_case_historyTest case historyB
Read-only

TestCase.history: full change history (KiwiHistoricalRecords).

Inputs: id (required), limit.

kiwi_case_list_attachmentsList case attachmentsA
Read-only

TestCase.list_attachments. Returns attachment metadata and download URLs.

Inputs: case_id (required).

kiwi_case_propertiesList case propertiesB
Read-only

TestCase.properties. Returns name/value properties; omit case_id to list more broadly.

Inputs: case_id.

kiwi_case_remove_componentRemove component from caseA

TestCase.remove_component. Unlinks a component from the test case.

Inputs: case_id (required), component_id (required).

kiwi_case_remove_propertyRemove case propertyC

TestCase.remove_property. Filter by case_id and/or name.

Inputs: name, case_id, property_id.

kiwi_case_remove_tagRemove tag from caseB

TestCase.remove_tag. Detaches a tag from the test case.

Inputs: tag (required), case_id (required).

kiwi_create_buildCreate buildA

Build.create: name plus version (name or id). Defaults to the first product version.

Inputs: name (required), product, version, is_active.

kiwi_create_caseCreate test caseA

TestCase.create in the product (defaults to KIWI_PROJECT). Category and priority accept names and are resolved to ids. If plan is set, the case is attached via TestPlan.add_case. Tags are added one by one. text is stored verbatim in Kiwi's text field (Markdown; Kiwi 12+) — no section parsing.

Inputs: summary (required), plan, tags, text, +9 more.

kiwi_create_planCreate test planA

TestPlan.create in the given product (defaults to KIWI_PROJECT) with the given type.

Inputs: name (required), text, type, parent, +1 more.

kiwi_create_plan_typeCreate plan typeA

PlanType.create. Adds a new TestPlan type such as Functional or Acceptance.

Inputs: name (required), description.

kiwi_create_projectCreate project (Product)C

Product.create. classification is a name or id; defaults to the first classification.

Inputs: name (required), description, classification.

kiwi_create_runCreate test runB

TestRun.create for a plan and build. Build accepts a name (looked up on the product / KIWI_PROJECT); manager accepts a username.

Inputs: plan (required), build (required), summary (required), notes, +2 more.

kiwi_create_tagCreate tagA

Tag.create. Creates a tag that can later be attached to cases, plans, or runs.

Inputs: name (required).

kiwi_create_versionCreate product versionB

Version.create: value plus product (defaults to KIWI_PROJECT).

Inputs: value (required), product.

kiwi_execution_add_attachmentAdd execution attachmentC

TestExecution.add_attachment: logs, screenshots (base64).

Inputs: filename (required), b64content (required), execution_id (required).

kiwi_execution_add_propertyAdd execution propertyB

TestExecution.add_property. Adds a name/value property to the execution.

Inputs: name (required), value (required), execution_id (required).

kiwi_execution_list_attachmentsList execution attachmentsB
Read-only

TestExecution.list_attachments. Returns attachment metadata and download URLs.

Inputs: execution_id (required).

kiwi_execution_propertiesList execution propertiesB
Read-only

TestExecution.properties. Returns name/value properties for the execution.

Inputs: execution_id.

kiwi_get_caseGet test case by idA
Read-only

Full test-case card (TestCase.filter by id), text returned as-is (Markdown). Optionally include related executions.

Inputs: id (required), include_executions.

kiwi_list_buildsList buildsA
Read-only

Builds for a product. Defaults to KIWI_PROJECT when product is omitted.

Inputs: limit, query, product.

kiwi_list_case_statusesList test case statusesC
Read-only

TestCaseStatus.filter: CONFIRMED, PROPOSED, DISABLED…

Inputs: limit, query.

kiwi_list_categoriesList categoriesA
Read-only

Test-case categories for a product. Defaults to KIWI_PROJECT when product is omitted.

Inputs: limit, product.

kiwi_list_classificationsList classificationsC
Read-only

Classification.filter: catalog required by Product.create.

Inputs: limit, query.

kiwi_list_componentsList componentsC
Read-only

Components for a product. Defaults to KIWI_PROJECT when product is omitted.

Inputs: limit, product.

kiwi_list_executionsSearch executionsB
Read-only

TestExecution.filter by run, case, status, and assignee.

Inputs: run, case, limit, status, +1 more.

kiwi_list_execution_statusesList execution statusesC
Read-only

TestExecutionStatus.filter: IDLE, PASSED, FAILED, BLOCKED…

Inputs: limit, query.

kiwi_list_plansSearch test plansA
Read-only

TestPlan.filter by name, product, type, and active flag. Uses KIWI_PROJECT when product is omitted.

Inputs: type, limit, query, active, +1 more.

kiwi_list_plan_typesList plan typesC
Read-only

PlanType.filter: Functional, Acceptance, etc.

Inputs: limit, query.

kiwi_list_prioritiesList prioritiesA
Read-only

All test-case priorities (Priority.filter): id and value (P1..P5 / Critical..).

Inputs: no named parameters.

kiwi_list_projectsList projects (Products)A
Read-only

List Kiwi TCMS products/projects. Optional substring filter on name.

Inputs: limit, query.

kiwi_list_runsSearch test runsA
Read-only

TestRun.filter by summary, plan, build, product, and whether still open.

Inputs: plan, build, limit, query, +2 more.

kiwi_list_tagsList tagsA
Read-only

Tag.filter. Search tags by name substring.

Inputs: limit, query.

kiwi_list_usersList usersC
Read-only

User.filter by username.

Inputs: limit, query.

kiwi_list_versionsList product versionsB
Read-only

Version.filter. Required for TestPlan.create (product_version) and Build.create.

Inputs: limit, query, product.

kiwi_meCurrent userA
Read-only

User.filter with no query — the logged-in user.

Inputs: no named parameters.

kiwi_pingCheck Kiwi TCMS connectionA
Read-only

Checks connectivity and credentials. Returns URL, configured Product, and product count. Use for diagnostics.

Inputs: no named parameters.

kiwi_plan_add_attachmentAdd plan attachmentB

TestPlan.add_attachment. Uploads a file (filename + base64 content) to the plan.

Inputs: plan_id (required), filename (required), b64content (required).

kiwi_plan_add_caseAdd case to planB

TestPlan.add_case: attach a test case to a test plan.

Inputs: case_id (required), plan_id (required).

kiwi_plan_add_tagAdd tag to planB

TestPlan.add_tag. Attaches a tag to the test plan.

Inputs: tag (required), plan_id (required).

kiwi_plan_list_attachmentsList plan attachmentsA
Read-only

TestPlan.list_attachments. Returns attachment metadata and download URLs.

Inputs: plan_id (required).

kiwi_plan_remove_caseRemove case from planA

TestPlan.remove_case. Unlinks a test case from the given plan.

Inputs: case_id (required), plan_id (required).

kiwi_plan_remove_tagRemove tag from planA

TestPlan.remove_tag. Detaches a tag from the test plan.

Inputs: tag (required), plan_id (required).

kiwi_plan_treeTest plan treeB
Read-only

TestPlan.tree: ancestry in DFS order from the root.

Inputs: plan_id (required).

kiwi_plan_update_case_orderUpdate case order in planC

TestPlan.update_case_order: sortkey, e.g. 10, 20, 30.

Inputs: case_id (required), plan_id (required), sortkey (required).

kiwi_remove_attachmentRemove attachmentB

Attachment.remove_attachment by id.

Inputs: attachment_id (required).

kiwi_rpcCall any Kiwi TCMS API methodA

Direct call to any Kiwi TCMS JSON-RPC method (https://kiwitcms.org/api/): TestPlan.remove_case, TestExecution.add_link, Bug.filter, Tag.filter, etc. Use when no specialized tool exists.

Inputs: method (required), params.

kiwi_run_add_attachmentAdd run attachmentA

TestRun.add_attachment. Uploads a file (filename + base64 content) to the run.

Inputs: run_id (required), filename (required), b64content (required).

kiwi_run_add_caseAdd cases to runA

TestRun.add_case: add one or more cases to the run (creates TestExecutions).

Inputs: run_id (required), case_ids (required).

kiwi_run_add_propertyAdd run propertyB

TestRun.add_property. Adds a name/value property to the test run.

Inputs: name (required), value (required), run_id (required).

kiwi_run_add_tagAdd tag to runA

TestRun.add_tag. Attaches a tag to the test run.

Inputs: tag (required), run_id (required).

kiwi_run_get_casesCases in test runB
Read-only

TestRun.get_cases: run cases with execution_id and status.

Inputs: run_id (required).

kiwi_run_list_attachmentsList run attachmentsB
Read-only

TestRun.list_attachments. Returns attachment metadata and download URLs.

Inputs: run_id (required).

kiwi_run_propertiesList run propertiesA
Read-only

TestRun.properties. Returns name/value properties for the run.

Inputs: run_id.

kiwi_run_remove_tagRemove tag from runA

TestRun.remove_tag. Detaches a tag from the test run.

Inputs: tag (required), run_id (required).

kiwi_run_statusTest run status summaryB
Read-only

Aggregated run stats: TestRun.filter plus TestExecution breakdown by status and failed executions.

Inputs: run_id (required).

kiwi_search_casesSearch test casesA
Read-only

TestCase.filter by text, plan, status, priority, category, tag, component, automation. Uses KIWI_PROJECT when plan/product are omitted. Returns total and a truncated list.

Inputs: ids, tag, plan, limit, +7 more.

kiwi_update_caseUpdate test caseA

TestCase.update. Priority and category accept names; status accepts a name (resolved to id) or status_id. text replaces Kiwi's text field verbatim (Markdown; Kiwi 12+) — no section parsing or merge with the current text.

Inputs: id (required), text, notes, script, +8 more.

kiwi_update_executionUpdate executionB

TestExecution.update: status (id or name resolved from the execution run), build, assignee, dates. Optionally adds a comment via TestExecution.add_comment.

Inputs: execution_id (required), status, comment, assignee, +4 more.

kiwi_update_planUpdate test planB

TestPlan.update: name, type, product, version, text, active flag.

Inputs: id (required), name, text, type, +4 more.

kiwi_update_runUpdate test runA

TestRun.update: summary, notes, build, manager, dates (set stop_date to close the run).

Inputs: id (required), build, notes, manager, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 68 tools

    Disambiguation5/5

    Each tool clearly targets a specific resource and action (e.g., creating runs, adding cases, listing executions, managing attachments). Even similar-sounding tools like kiwi_list_executions and kiwi_run_get_cases have distinct purposes (filtering vs. retrieving run cases).

    Naming Consistency4/5

    Tool names consistently use the kiwi_ prefix and snake_case, but the verb/noun order varies (kiwi_create_run vs. kiwi_run_add_case). This minor inconsistency is readable and does not cause confusion.

    Tool Count2/5

    68 tools is well beyond the recommended range and may overwhelm agents. The server covers a large domain, but many operations could be consolidated (e.g., generic attachment/property tools already exist).

    Completeness5/5

    The surface covers nearly every Kiwi TCMS workflow: full CRUD for cases/plans/runs, execution management, tags, attachments, properties, links, and a generic RPC fallback. No obvious dead ends remain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers