mcpField
Z
zephyr-scale-mcp

zephyr-scale-mcp

ローカル
github.com/vilaabo開発ツール013 週間前に更新

zephyr-scale-mcp について

zephyr-scale-mcpは、セルフホストのJira ServerまたはData CenterでZephyr Scaleを使うチーム向けのMCPサーバーです。REST API v1を通じてテスト資産を管理し、API制約や旧バージョン向けの操作とフォールバックを備えています。

主な機能

  1. 01テストケース、フォルダー、計画の管理
  2. 02テストサイクルの作成と実行結果の記録
  3. 03Jira課題との関連付けとカバレッジ確認
  4. 04添付ファイルと自動化レポートの取り扱い
  5. 05読み取り専用モードと任意の内部APIツール

活用シーン

  1. 01Jiraプロジェクトのテストケース作成と保守
  2. 02スプリントのテストサイクル結果の記録
  3. 03課題のカバレッジと最新実行の確認
  4. 04Cucumber JSONテストレポートのインポート

MCP 対応

Zephyr Scale REST API v1を介して、MCPクライアントに54個のテスト管理ツールを提供します。内部APIを使う12個のツールは明示的な有効化が必要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"vilaabo-zephyr-scale": {
"command": "npx",
"args": [
"-y",
"zephyr-scale-mcp"
],
"env": {
"JIRA_BASE_URL": "<JIRA_BASE_URL>",
"JIRA_PAT": "<JIRA_PAT>",
"JIRA_AUTH": "<JIRA_AUTH>",
"JIRA_USERNAME": "<JIRA_USERNAME>",
"JIRA_PASSWORD": "<JIRA_PASSWORD>",
"ZEPHYR_DEFAULT_PROJECT_KEY": "<ZEPHYR_DEFAULT_PROJECT_KEY>",
"ZEPHYR_ALLOW_INTERNAL_API": "<ZEPHYR_ALLOW_INTERNAL_API>",
"ZEPHYR_READONLY": "<ZEPHYR_READONLY>",
"JIRA_TLS_REJECT_UNAUTHORIZED": "<JIRA_TLS_REJECT_UNAUTHORIZED>",
"JIRA_TIMEOUT_MS": "<JIRA_TIMEOUT_MS>",
"JIRA_MAX_RETRIES": "<JIRA_MAX_RETRIES>",
"ZEPHYR_LOG_LEVEL": "<ZEPHYR_LOG_LEVEL>"
}
}
}
}
起動コマンドnpx -y zephyr-scale-mcp
設定が必要な環境変数
JIRA_BASE_URLJira base URL without a trailing slash, e.g. https://jira.example.com
JIRA_PATシークレットJira Data Center Personal Access Token (used when JIRA_AUTH=pat, the default)
JIRA_AUTHシークレットAuthentication mode: pat (default) or basic
JIRA_USERNAMEUsername for JIRA_AUTH=basic
JIRA_PASSWORDシークレットPassword for JIRA_AUTH=basic
ZEPHYR_DEFAULT_PROJECT_KEYシークレットProject key used when a tool is called without projectKey
ZEPHYR_ALLOW_INTERNAL_APItrue registers 11 UNOFFICIAL tools backed by the internal /rest/tests/1.0 API the vendor does not support: editing a test cycle in place (rename/move, add/remove/reorder its cases), editing or DELETING individual executions, linking a cycle to a test plan, the folder tree, folder deletion, exact status names and custom field definitions
ZEPHYR_READONLYtrue disables all write tools
JIRA_TLS_REJECT_UNAUTHORIZEDシークレットfalse allows self-signed certificates (disables TLS verification)
JIRA_TIMEOUT_MSTimeout of a single HTTP request in milliseconds (default 30000)
JIRA_MAX_RETRIESRetries for GET requests and for 429/503 responses, honoring Retry-After (default 2)
ZEPHYR_LOG_LEVELLog verbosity: debug | info | warn | error (default info; all logs go to stderr)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmzephyr-scale-mcp1.0.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

zephyr-scale-mcp

セルフホスト型 Jira Server/Data Center 上の Zephyr Scale 用 MCP サーバー(旧称 TM4J)。Claude Code、Claude Desktop、Cursor などの任意の MCP クライアントに、Zephyr Scale REST API v1 の {JIRA_BASE_URL}/rest/atm/1.0 を通じて、テストケース、フォルダー、テストサイクル、実行、テスト計画、添付ファイル、自動化インポートなどのテスト管理を操作する 54 個のツールを提供します。

Node TypeScript Tests License API

npm: zephyr-scale-mcp · MCP Registry: io.github.vilaabo/zephyr-scale-mcp · ロシア語版 →

⚠️ 対象範囲:Server/Data Center のみ。 Zephyr Scale Cloud(API v2)と Zephyr Squad は異なる API のため、対象外です。このサーバーはこれらに対して動作しません。

このプロジェクトの目的

ほとんどの Zephyr MCP サーバーは Cloud API を対象としています。Jira をオンプレミスで運用している場合は、代わりに v1 API を使用します。v1 にはいくつもの制約があります。テスト実行は作成後に変更できず、フォルダーの一覧取得はできず、ステータスは大文字と小文字を区別する内部名で指定する必要があり、BDD スクリプトでは Feature: ヘッダーが拒否され、古いプラグインビルドではエンドポイント全体が欠けていることもあります。このサーバーは、エージェントが 400 エラーを一つずつ受けて調べなくても済むよう、そうした知見を組み込んでいます。

  • 54 個のツール(公開 42 個+オプトイン式の内部 API ツール 12 個)。それぞれの説明には、エンドポイント、呼び出し側が推測できない制約、正確なレスポンス形式が記載されています。
  • API の盲点を補う複合ツール — add_test_steps は ID に基づいてステップをマージするため(読み取り → マージ → 書き込み)、内容が黙って削除されることはありません。recreate_test_run_with_items は実行の変更不可という制約を回避し、直前の結果を引き継ぐこともできます。ほかに get_issue_test_coverage、get_test_run_summary、clone_test_case、move_test_cases_to_folder があります。
  • 古いビルドでの機能低下への対応 — ページネーション対応の結果エンドポイントがない場合は自動的にフォールバックし、複数項目の作成エンドポイントが壊れている場合は項目ごとにフォールバックします。どちらも変更履歴ではなく、実際のレガシー環境で確認されたものです。
  • 問題を明確に報告する基盤 — 厳格な zod 入力検証、Retry-After に対応した指数バックオフ付きリトライ、実用的なヒントを含むエラーメッセージ、読み取り専用モード、ログやツール出力へのシークレットの非記録。
  • 1181 件のユニットテストとコントラクトテスト(vitest + msw、ネットワーク不使用)に加え、実環境に対する、条件付きで実行するエンドツーエンドシナリオを備えています。

クイックスタート

必要条件:Node.js >= 20、Zephyr Scale プラグインを備えた Jira Server/DC、および個人用アクセストークン(Jira 8.14 以降)またはユーザー名とパスワードの組み合わせ。

クローンは不要です。パッケージは npm にあります。Claude Code:

claude mcp add zephyr-scale \
  --env JIRA_BASE_URL=https://jira.example.com \
  --env JIRA_PAT=<personal access token> \
  --env ZEPHYR_DEFAULT_PROJECT_KEY=PROJ \
  --env ZEPHYR_ALLOW_INTERNAL_API=true \
  -- npx -y zephyr-scale-mcp

Claude Desktop/任意の MCP クライアント(claude_desktop_config.json、.mcp.json):

{
  "mcpServers": {
    "zephyr-scale": {
      "command": "npx",
      "args": ["-y", "zephyr-scale-mcp"],
      "env": {
        "JIRA_BASE_URL": "https://jira.example.com",
        "JIRA_PAT": "<personal access token>",
        "ZEPHYR_DEFAULT_PROJECT_KEY": "PROJ",
        "ZEPHYR_ALLOW_INTERNAL_API": "true"
      }
    }
  }
}
ソースから実行する場合
git clone https://github.com/vilaabo/zephyr-scale-mcp.git
cd zephyr-scale-mcp
npm install
npm run build        # -> dist/index.js

次に、クライアントでビルドを指定します:"command": "node", "args": ["/path/to/zephyr-scale-mcp/dist/index.js"]。

ZEPHYR_ALLOW_INTERNAL_API=true は任意ですが、推奨されます。 公開 API ではまったく実行できない操作に対応する追加の 12 個のツールを登録します。テスト実行をその場で編集する(名前の変更や移動(update_test_run)、キーを変更せずにケースを追加または削除する(add_test_cases_to_run、remove_test_cases_from_run))操作に加え、フォルダー階層の一覧表示(get_folder_tree)、フォルダーの削除(delete_folder)、過去の実行結果の編集(update_test_result_by_id)、API が暗黙に要求する正確なステータス名の取得(get_status_options)ができます。これらは Jira UI 自体が使用する、ドキュメント化されていない同じ /rest/tests/1.0 エンドポイントを呼び出します。ベンダーのサポート対象外であり、別の Zephyr Scale バージョンでは動作が異なる場合や、利用できない場合があります。このトレードオフを受け入れられない場合は、このフラグをオフにしてください。ほかの 42 個のツールには影響しません。

次に、エージェントに health_check を実行するよう依頼します。GET /rest/api/2/myself を使用して接続と認証情報を確認し、ZEPHYR_DEFAULT_PROJECT_KEY が設定されている場合は、/rest/atm/1.0 で Zephyr プラグインが応答することも確認します。

エージェントに依頼できること

  • 「フォルダー /Regression/Payments を作成し、このドキュメントで説明されているチェックアウトフローのテストケースを手順ごとに追加してください。」
  • 「/Regression にある Draft ケースをすべて見つけて確認し、準備ができているものを Approved にしてください。」
  • 「スプリント 42 のサイクルをすべてのスモークケースとともに作成し、このレポートの結果を記録してください。スクリプトにステップがある場合は、ステップごとに記録してください。」
  • 「PROJ-123 を対象とするテストケースと、それぞれが最後に合格した日時を教えてください。」 — 課題からそのケースおよび最新の実行結果へのトレーサビリティ。
  • 「この Cucumber JSON レポートの ZIP を新しいサイクルとして PROJ に公開してください。」 — 自動化からのインポート。シナリオは @TestCaseKey=PROJ-T1 タグによって BDD ケースと照合されます。
  • 「PROJ-T55 にステップ 3 の後から 2 つのステップを追加してください。」 — 既存のステップとその ID は維持されます。
  • 「サイクル PROJ-R7 をケースを 3 件追加して再作成し、結果を維持してから、元のサイクルを削除してください。」

設定

変数必須デフォルト用途
JIRA_BASE_URLはい—末尾に / を付けない Jira のベース URL(例:https://jira.example.com)
JIRA_AUTHいいえpatpat | basic
JIRA_PATpat の場合—Jira Server/DC のパーソナルアクセストークン
JIRA_USERNAME, JIRA_PASSWORDbasic の場合—Basic 認証の資格情報
JIRA_TIMEOUT_MSいいえ30000リクエストごとのタイムアウト
JIRA_MAX_RETRIESいいえ2GET およびすべての 429/503 に対する再試行。Retry-After に従い、ない場合はジッターを加えた指数バックオフを使用
JIRA_TLS_REJECT_UNAUTHORIZEDいいえtruefalse にすると自己署名証明書を受け入れます — TLS 検証がプロセス全体で無効になり、stderr に警告が出力されます
ZEPHYR_DEFAULT_PROJECT_KEYいいえ—ツールが projectKey なしで呼び出されるたびに使用
ZEPHYR_READONLYいいえfalsetrue にすると、すべての書き込みツールがエラーで拒否します。読み取りツールは引き続き動作します
ZEPHYR_ALLOW_INTERNAL_APIいいえfalsetrue にすると、内部 /rest/tests/1.0 API を使用する 12 個の非公式ツールが登録されます
ZEPHYR_LOG_LEVELいいえinfodebug | info | warn | error

テストで確認している保証が 2 つあります。JIRA_PAT と JIRA_PASSWORD は、出力時に取りうるどの形式(生の値、JSON エスケープ、または Base64 の Basic 認証トークン)でも、ログ、ツール出力、エラーメッセージに決して現れません(エラー文にはメソッドとパスのみが含まれます。データが含まれる可能性のあるクエリー文字列は含まれません)。また、stdout は MCP プロトコル専用であり、すべてのログ行は stderr に出力されます。意図的な例外が 1 つあります。6 文字未満のシークレットはそのまま残ります。これを秘匿化すると、何も保護できないまま無関係な出力が破損するためです。サーバーは起動時に警告します。

設定は起動時に検証されます。すべての問題が一度に報告され、中途半端な設定で起動するのではなく、プロセスはゼロ以外の終了コードで終了します。

ツール

54 個のツールがあります。公開されている 42 個は常に登録され、最後のグループの 12 個は ZEPHYR_ALLOW_INTERNAL_API=true の場合にのみ登録されます。

テストケース — 13 個のツール
ツール機能
create_test_caseSTEP_BY_STEP / PLAIN_TEXT / BDD スクリプト、パラメーター、カスタムフィールド、Call-to-Test ステップを含むケースを作成
get_test_caseケースを読み込みます。必要に応じて fields で絞り込めます。ステップ ID はここで返されます
search_test_casesページネーション対応の TQL 検索。1500 文字を超えるクエリーは POST /testcase/search として送信されます(projectKey、key、name のみサポート)
update_test_case部分更新。testScript.steps は ID によって同期されます(制限事項 7 を参照)
add_test_steps既存のステップを失わずに指定位置へステップを挿入 — 読み込み、ID でマージし、書き戻します
set_test_scriptスクリプト全体を置き換えるか、形式を変更します。仕様上、破壊的な操作です
clone_test_caseプロジェクト内でケースをコピーし、新しいステップ ID を割り当てます。リンク、添付ファイル、履歴はコピーされません
move_test_cases_to_folder明示的なキーまたは移動元フォルダーを指定して一括移動します。失敗したケースがあっても、残りの処理は中断されません
delete_test_caseケース、スクリプト、履歴を完全に削除します
create_test_cases_bulk1 回の呼び出しで複数のケースを作成します。一括エンドポイントに問題がある場合は、ケースごとにフォールバックします
link_issues_to_test_casesケースを Jira の課題に一括リンクします(追加のみ)
get_test_cases_linked_to_issue逆引き:課題 → ケース
get_issue_test_coverageトレーサビリティレポート:課題 → リンクされたケース → 各ケースの最新実行
テストサイクル(テスト実行) — 7 個のツール | ツール | 機能 | |---|---| | `create_test_run` | サイクルを、そのすべての項目リストとともに作成します。同じ呼び出しで、各項目の実行結果も指定できます | | `get_test_run` | 項目を含むサイクルを読み取ります | | `search_test_runs` | TQL 検索です。実行では `projectKey` と `folder` のみ検索できます | | `delete_test_run` | サイクルとすべての結果を完全に削除します | | `get_test_run_results` | レガシーのフラットエンドポイントへのフォールバックを含め、サイクルの実行結果をページごとに取得します | | `get_test_run_summary` | 各項目の最新の実行結果を取得します。`byStatus` の件数はそのまま返され、文字列どおりの `Pass` ステータスがある場合は `executionProgressPct` と `passRatePct` も返されます | | `recreate_test_run_with_items` | 実行の不変性に対する公開の回避策です。ケースの追加または削除を行い、**新しい**キーで再作成します。必要に応じて最新の結果を引き継ぎ、元のサイクルを削除できます |
実行(テスト結果) — 4 ツール
ツール機能
create_test_result項目の実行結果を新たに追加します。ステップごとの scriptResults も指定できます
update_last_test_result項目の最新の実行結果を部分的に更新します
create_test_results_bulk1 回の呼び出しで、1 つのサイクルに複数の実行結果を追加します
get_latest_result_for_test_caseすべてのサイクルを対象に、保存されている実行日が最も新しいケースの実行結果を取得します。最後に記録された結果とは限りません

1 つの実行内に複数回存在する項目(環境別または担当者別)は、クエリパラメーターとして渡す matchEnvironment/matchUserKey で区別します。

テスト計画 — 5 ツール
ツール機能
create_test_planテスト計画を作成します。{ key }(例:PROJ-P123)を返します
get_test_plan関連付けられた実行と課題を含むテスト計画を読み取ります
update_test_plan部分更新します
delete_test_plan完全に削除します
search_test_plansTQL 検索です。検索可能なフィールドは Zephyr Scale のバージョンによって異なります
フォルダー — 2 ツール
ツール機能
create_folderフルパスからケース/計画/サイクルのフォルダーを作成します。recursive(既定値は true)を指定した場合、フルパスで 400 が返されると親パスを順に作成して 1 回再試行します。403、409、5xx はそのまま伝播します
rename_folder数値 ID でフォルダーのセグメントを 1 つ変更します(必要に応じてカスタムフィールドも設定できます)
添付ファイル — 4 ツール
ツール機能
upload_attachmentローカルファイルをケース、ケースのステップ、サイクル、実行結果、または実行結果のステップに添付します(multipart)
list_attachments上記のいずれかの対象の添付ファイルを一覧表示します。各レコードには、他のツールで必要となる ID と URL が含まれます
download_attachmentID、または list_attachments が返した URL を指定して添付ファイルを保存します。その URL は設定済みの Jira ホスト上にある必要があります。内部 API から読み取る公開ツールはこれだけです。添付ファイルの内容は /rest/tests/1.0/attachment/{id} から提供され、このエンドポイントは ZEPHYR_ALLOW_INTERNAL_API の値にかかわらず存在します
delete_attachment数値 ID で添付ファイルを 1 つ完全に削除します
自動化 — 3 ツール
ツール機能
upload_automation_resultsZephyr 独自の JSON 形式による結果の ZIP を公開します。常に新しいサイクルを作成します
upload_cucumber_resultsCucumber JSON レポートの ZIP を公開します。シナリオは @TestCaseKey=PROJ-T1 タグで照合されます
download_feature_filesBDD ケースを .feature ファイルの ZIP としてエクスポートします。tql は必須で、testCase. を前置する形式を使用します。PK 署名を確認してからアーカイブを書き込むため、HTTP 200 で配信された HTML のログインページはエラーとなり、破損したファイルが残りません
サービスと診断 — 4 ツール | ツール | 機能 | |---|---| | `health_check` | Jira への到達性、認証情報、Zephyr プラグインが応答するかどうかを確認します | | `list_environments` | プロジェクトの環境を一覧表示します。結果が参照する、厳密に大文字と小文字を区別する名前です | | `create_environment` | プロジェクトに環境を作成します | | `find_jira_user` | `owner` / `executedBy` / `assignedTo` で必要な Jira の **ユーザーキー**(`JIRAUSER10000`)を解決します |
非公式 — 内部 API、オプトイン — 12 個のツール

ZEPHYR_ALLOW_INTERNAL_API=true の場合にのみ登録されます。これらは /rest/tests/1.0 を呼び出します。これは Jira UI の背後にある、ドキュメント化されていない API です。ベンダーのサポート対象外です。エンドポイントは、別の Zephyr Scale バージョンでは異なる場合や、存在しない場合があります。これらのツールからの 404 / 405 は、まさにそれを意味します。以下の各リクエスト形式は、Jira UI 自身の通信を記録したか、実際のインスタンスに対してライブで検証したものであり、推測したものではありません。このレイヤーからのエラーには、その旨を示すヒントが含まれます。

ツール機能
update_test_runサイクルの名前を変更する、別のフォルダーに移動する(数値のフォルダー ID を指定)、または予定日をその場で変更します。キー、項目、結果は維持されます。公開 API には PUT /testrun がありません
add_test_cases_to_run既存のサイクルにケースをその場で追加します。キーと既存の結果は維持されます
remove_test_cases_from_run既存のサイクルから項目をその場で削除します。削除すると、それらの実行履歴もすべて失われます
reorder_test_run_items既存のサイクルの項目を並べ替えます。サイクルがすでに指定された順序になっている場合、書き込みは一切行いません
link_issues_to_test_runJira 課題を既存のサイクルにリンクします。公開 API はランの issueLinks フィールドを全面的に拒否するため、これが唯一の方法です
link_test_run_to_plan作成後に既存のサイクルをテスト計画に関連付けます。公開 API が testPlanKey を受け付けるのは作成時のみです
delete_test_results数値 ID を指定して個々の実行を削除します。項目の最後の実行は削除できません
update_test_result_by_id項目の履歴にある任意の実行を編集します。古い実行も対象です。status は、大文字と小文字を区別する名前から内部 ID に解決されます
get_folder_treeプロジェクトのフォルダーツリー全体と、rename_folder、delete_folder、update_test_run で必要となる数値 ID を取得します。エンティティの種類ごとに、それぞれ独自のツリーがあります
get_status_optionsプロジェクトの実行ステータス、ケースステータス、または優先度の正確な内部名を取得します。公開 API は、誤った値を通知なく無視します
get_custom_field_definitionsエンティティの種類ごとのカスタムフィールド定義(名前、型、必須フラグ、選択肢)を取得します
delete_folder数値 ID を指定してフォルダーを削除します。空でないフォルダーをどう扱うかはバージョンによって異なるため、先に空にしてください
## API v1 における制約事項

以下は、このサーバーの設計上の制約です。各ツールの説明には、そのツールに関連する制約が繰り返し記載されているため、エージェントは呼び出し時に確認できます。

  1. テスト実行は変更できません。 PUT /testrun は存在しないため、実行の名前変更や移動、テストケースの追加・削除はできません。項目は作成時に固定され、実行ステータスは項目のステータスから決まります。回避策:recreate_test_run_with_items(公開 API。同じキーではなく新しいキーが生成されます)、または内部 API の update_test_run / add_test_cases_to_run / remove_test_cases_from_run(同じキーを使用します)。
  2. フォルダーは自動作成されません。 create_test_case、create_test_run、create_test_plan は、存在しないフォルダーを指定すると 400 エラーになります。公開 API ではフォルダーを一覧表示することもできません。また、フォルダーの名前変更には、create_folder が返す数値 ID が必要です。内部 API が有効な場合は、get_folder_tree で取得できます。
  3. owner / executedBy / assignedTo には Jira ユーザーキー(JIRAUSER10000)を指定します。ユーザー名やメールアドレスは指定できません。find_jira_user でユーザーキーを取得できます。
  4. TQL の構文は厳格です。 演算子の前後にはスペースが必須です。文字列値は二重引用符で囲み、使用できる接続詞は AND のみです(OR は使用できません)。フォルダーパスは / で始めます。テスト実行の検索条件に指定できるのは projectKey と folder のみです。単一選択/複数選択のカスタムフィールドでは = は使えません。IN を使用してください。
  5. ステータス、優先度、環境名は、大文字と小文字が区別される内部名です。 組み込みステータスは UI 上でローカライズして表示されます(Draft のラベルは翻訳されている場合があります)が、カスタムステータスは文字列どおりの名前が使われます。API が実際に受け付ける値は get_status_options で確認できます。実行ステータスが正しくない場合、公開 API は警告なしに無視します。
  6. BDD スクリプトにはシナリオ本文のみを指定します。 Given / When / Then / And / But の行をそのまま記述してください。Feature: / Scenario: で囲んだテキストは 400 Invalid BDD Script として拒否されます。ラッパーはエクスポート時に生成されます。
  7. STEP_BY_STEP のステップは PUT 時に ID で同期されます。 ID のないステップは作成され、ID のあるステップは更新されます。また、リストに含まれていない保存済みのステップはすべて削除されます。get_test_case で取得した ID を引き継いで、常に最終的なステップの完全なリストを送信してください。または、読み込み・マージ・書き込みを行う add_test_steps を使用してください。
  8. 非推奨のフィールドは意図的に受け付けていません。 issueKey の代わりに issueLinks、executionDate の代わりに actualEndDate、userKey の代わりに executedBy を使用してください。

古いプラグインビルドの特記事項

以下はすべて、実際のレガシー Zephyr Scale Server インスタンスで実行中に確認され、テストでカバーされています。

  • サイクルキーには -R ではなく -C プレフィックス(PROJ-C34)が使われる場合があります。 すべての実行キーのパラメーターではキーをそのまま受け取るため、インスタンスに表示されているキーをそのまま渡してください。
  • GET /testrun/{key}/testresults/page が存在しない場合があります。 get_test_run_results と get_test_run_summary は、非推奨のフラットエンドポイントにフォールバックしてクライアント側でページネーションを行い、レスポンスに note を追加します。実際に存在しない実行の場合は、引き続き 404 が返されます。
  • scriptResults と一緒に送信された全体の status は無視されます。 先にステップの結果を送信してから、update_last_test_result で全体のステータスを設定してください。
  • POST /testcase/link-issues は 500 を返す場合があります。 代わりに issueLinks を指定して update_test_case からリンクしてください。
  • POST /testcase/bulk は、単一作成が機能していても、どのペイロードでも本文が空の HTTP 500 を返す場合があります。 create_test_cases_bulk は、任意の 5xx の場合、および JSON の 404(このビルドにそのエンドポイントがないことを意味します。プラグインが存在しない場合に Jira が返す HTML の 404 とは異なります)の場合に、ケースを 1 件ずつ作成するフォールバックを行い、成功したものを報告します(#1)。それ以外の 4xx はペイロードエラーであり、再試行されません。
  • このビルドでは、実行の項目に含まれていないケースの結果を投稿すると、そのケースが実行に暗黙的に追加されます。 ほかのビルドでは、この呼び出しは 400/404 で拒否されます。結果ツールでは、どちらの動作も説明しています。
  • カスタム自動化結果形式は厳密に検証されます。 {"version": 1, "executions": [{"source", "result", "testCase": {"key"}}]} は機能しますが、executionTime などの実行ごとの追加フィールドは Invalid Custom Format JSON file で拒否されます。シナリオに @TestCaseKey=PROJ-T1 が含まれていれば、Cucumber JSON レポートはそのまま機能します。
  • download_feature_files には tql クエリパラメーターが必要です — API はこれがない場合、呼び出しを拒否します。
  • 実行項目の最後の実行は削除できません。 delete_test_results はこれを拒否します。代わりに項目を削除してください。
  • カスタムフィールドがまったく存在しない場合があります — その場合、定義エンドポイントは [] を返します。

開発

npm run typecheck    # tsc --noEmit, strict
npm test             # 1181 unit + contract tests (vitest + msw), no network
npm run build        # tsup -> dist/index.js
npm run smoke        # 13 end-to-end tests, ZEPHYR_E2E=1, real instance required

スモークシナリオは ZEPHYR_E2E=1 の場合を除きスキップされます。実際の JIRA_BASE_URL と認証情報、および専用の ZEPHYR_DEFAULT_PROJECT_KEY が必要です — 実際のエンティティを作成・削除し、公開 API ではフォルダーを削除できないため /mcp-smoke-* フォルダーが残ります。

src/
├── index.ts             # bootstrap: config, tool registration, stdio transport
├── config.ts            # environment validation
├── http.ts              # fetch wrapper: auth, timeouts, retries, error normalization,
│                        #   multipart and binary bodies
├── schemas.ts           # shared parameter schemas, field shapes, recurring description constants
├── toolkit.ts           # defineTool(): strict zod input, read-only guard,
│                        #   JSON / isError response shaping, shared helpers
├── internal.ts          # the UNOFFICIAL /rest/tests/1.0 layer: key -> id resolution,
│                        #   run-item plumbing, status resolution, error hints
├── runResults.ts        # paged run results with the legacy fallback
├── log.ts               # leveled logger, stderr only
└── tools/               # one module per tool family: testCases, testRuns, testResults,
                         #   testPlans, folders, attachments, automation, misc,
                         #   runMaintenance, resultsMaintenance, internalRefs
test/                    # one test module per source module + negative contract tests
                         #   and the gated smoke scenario

バージョン管理と変更履歴

バージョン 1.0.0 です。このリリース以降、ツール名、パラメーター名、レスポンスの形式は公開契約となり、メジャーバージョンでのみ変更されます。CHANGELOG.md を参照してください。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。