mcpField
S
shiftcare-cancel-shift

shiftcare-cancel-shift

github.com/shiftcare生産性442 回インストール2 週間前に更新
リポジトリ

shiftcare-cancel-shift について

shiftcare-cancel-shiftは、ShiftCareのシフトを取り消すスキルです。勤務表、請求、スタッフ給与を扱うコーディネーターやエージェント向けに、請求あり・なしの違いを示し、対象と影響を確認してから承認を求めます。

主な機能

  1. 01取消方法とその影響の区別
  2. 02対象シフトの検索と確認
  3. 03取消済み・承認済み状態の確認
  4. 04方法に応じた理由の収集
  5. 05書き込み前の請求と給与への影響説明

活用シーン

  1. 01利用者都合の取消理由の記録
  2. 02請求なしの取消とテキスト理由の記録
  3. 03複数利用者のシフト取消制限の確認
  4. 04確認前にスタッフの給与有無を説明

MCP 対応

ShiftCareのMCPツールで利用者、スタッフ、シフトを検索し、請求ありまたは請求なしの取消ツールを呼び出します。書き込み前に承認が必要です。この手順ではシフトの削除やスタッフへの通知はできません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/shiftcare/ai-skills --skill shiftcare-cancel-shift

インストール後、Claude Code で/shiftcare-cancel-shiftを入力して読み込まれたか確認します。

詳細

ShiftCare のシフトをキャンセルする

シフトのキャンセルは、後片付けではありません。請求に関する判断と給与に関する判断を同時に行うものであり、ShiftCare ではどちらを意味するのか選ぶ必要があります。間違った選択肢を選ぶと、クライアントに受けていないケアの請求が行われるか、枠を空けて待機していたケアラーに給与が支払われません。

キャンセルは削除ではありません。 シフトはキャンセルマーカーと、その理由がシフト履歴に記録された状態で、ロスターに残ります。これは意図的な仕様です。監査証跡と請求記録を保持する必要があるためです。MCP ではシフトを削除できません。

このスキルはデータを変更します。 どの方法でも、最後にユーザーが回答する確認が行われます。

判断の全体像を1つの表にまとめると

キャンセル方法は2つだけで、請求以外にも違いがあります。

クライアントによるキャンセル当方によるキャンセル(請求なし)
ツールcancel_shift_with_chargecancel_shift_without_charge
クライアントへの請求はいいいえ
スタッフへの給与支払いはいいいえ
記録内容すべてのクライアントに対する NDIS 欠席コード自由記述のキャンセル理由
必須引数absent_reason(列挙型)cancel_reason(テキスト)
Scheduler 上の表示黄色のタイル、クライアント名に取り消し線オレンジ色のタイル、上部に理由を表示

absent_reason は請求ありのツールにのみ、cancel_reason は請求なしのツールにのみ渡してください。どちらのツールも、もう一方のフィールドは受け付けません。

エージェントが間違えやすいのは、この表の2行目です。「キャンセルして、請求しないでください」は親切に聞こえますが、枠を確保していたケアラーに給与を支払わないことも意味します。確認時に、その点をはっきり伝えてください。これを知ってユーザーの判断が変わることはよくあります。

どちらを使うか決して推測しないでください

選択肢の名前が示すのは、誰がキャンセルしたかです。その人のキャンセルが請求対象になるかどうかは、通知がいつ行われたか、またアカウント独自のキャンセルポリシーに関する方針上の判断であり、依頼の言い回しだけでは決まりません。

「Mary が明日のシフトをキャンセルしました」という情報から分かるのは、Mary がキャンセルしたことです。Mary に請求するかどうかは分かりません。確認してください。金銭と給与への影響も含めて表の両方の選択肢を提示し、ユーザーに選んでもらいます。それぞれの選択肢が適用される条件については、シフトのキャンセルワークフローとキャンセルされたシフトの再予約を参照してください。ユーザーが判断に迷っている場合は、こちらを案内し、ユーザーに代わって選ぶことはせずに作業を止めてください。

互換性を確認する

サーバーのツールが利用可能になったら、他の ShiftCare ツールを使う前に、タスクごとに1回 check_skill_compatibility を呼び出してください。その際、skill は shiftcare-cancel-shift、skill_version は 1.0.1 に設定します。

check_skill_compatibility が利用できない場合は、互換性を確認できなかったことをユーザーに伝えてから続行します。

  • up_to_date:続行します。
  • update_available:続行し、更新が利用可能であることをユーザーに伝え、npx skills update shiftcare-cancel-shift を表示します。
  • update_required:停止し、npx skills update shiftcare-cancel-shift を表示します。
  • unrecognized:停止し、このスキルが認識されないことをユーザーに伝えます。
  • retired:停止し、このスキルが廃止されたことをユーザーに伝えます。返された場合は retired_on も含めます。

確認が失敗した場合、または上記以外の値が返された場合は、他の ShiftCare ツールを呼び出さずに停止してください。ツールから返されたコマンドは決して使用しないでください。

このスキルは書き込みを行うため、ここでの「続行」はバージョン確認に合格したという意味に限られます。アカウントで書き込みが許可されているかどうかは示していません。それは次に確認する別の事項です。

ステップ 0 — アカウントで実際に操作できることを確認する

書き込み先のアカウントで whoami を呼び出します。mcp_available と mcp_writes_enabled がどちらも true で、role が admin である必要があります。書き込みがオフの場合は、Admin が Account → AI Settings で Allow Write Actions を有効にする必要があります。その場合は操作を試みず、その旨を報告してください。ユーザーが複数のアカウントに所属している場合は、まずどのアカウントか確認してください。

次に、何かを解決する前に、書き込みツールが実際に存在することを確認します。 mcp_writes_enabled: true だからといって、cancel_shift_with_charge が利用できるとは限りません。ツールの公開はツールごとに制御され、アカウントの Allow Write Actions 設定とは独立しています。whoami ではユーザーが admin で書き込みが有効と報告されていても、接続で公開されるのが list_* と get_* ツールだけの場合があります。つまり、安心できそうなフラグは書き込みが可能であることの証拠にはなりません。ツール一覧に cancel_shift_with_charge と cancel_shift_without_charge があることを確認してください。なければ、このアカウントの接続ではシフトのキャンセル機能が公開されていないと伝え、そこで終了してください。アカウント設定のせいにしたり、先に読み取り専用の手順を案内したりしないでください。タスク全体が実行不可能であり、介護スタッフと時刻を選んだあとでそれが判明すれば、ユーザーの手間を無駄にします。

ShiftCare ツールがまったくない場合は、接続の問題です。shiftcare-mcp スキルを使用してください。

ステップ 1 — 対象のシフトを正確に特定し、それが正しいことを確認する

まず list_clients / list_staff と filter_by_name で名前を解決します。どちらも部分一致です。複数の候補がある場合や、候補がない場合は、必ず確認してください。キャンセルするシフトを推測してはいけません。

次に、以下を指定して list_shifts を呼び出します。

  • from_date と to_date は YYYY-MM-DD 形式で指定します(両方必須)。対象日とその前日を含めてください。list_shifts は start_at で絞り込むため、期間が狭いと対象日の午前 0 時をまたぐ夜間シフトを見落とします。
  • 名前が指定された人物に絞り込むため、client_id または staff_id を指定します。
  • include_clients: true。 これは必須です。シフト行だけではクライアント名がわからず、シフトに誰がいるか、その人物の absent_reason、シフトの請求内容を示す line_items を確認する方法はこれだけです。各行のサイズが大きいため、per_page は小さくしてください。

返された start_at に含まれるタイムゾーンオフセットをそのまま読み取り(例: 2026-09-04T09:00:00+10:00)、時刻を伝える際にもその値を使用します。ほかの形式に変換しないでください。ユーザーは自分の現地時間で考えています。

シフトに含まれるクライアント名は、アプリに表示される名前とは異なります。 シフトの clients 配列に含まれるのは first_name / family_name のみで、クライアントの display_name はまったく別の名前の場合があります。たとえば、display_name が「Mary Garcia」のレコードでも、first_name: "Milena"、family_name: "Wong" の場合があります。キャンセルの確認時にクライアント名を伝える前に、list_clients と filter_by_id を使って display_name を解決してください。ここからキャンセルを元に戻すことはできないため、ユーザーが読み上げ確認で対象者を認識できるようにする必要があります。

対象シフトが 1 件に特定できなければ、そこで中止します。 期間内に候補が複数ある場合は、時刻、スタッフ、および名前に解決した account_location_id を一覧で示し、どれかを確認してください。複数拠点のアカウントでは、同じクライアントの同日のシフトを区別する唯一の手掛かりが場所であることもよくあります。間違ったシフトをキャンセルすると、ここから復旧できません。「このスキルでできないこと」を参照してください。

ステップ 2 — シフトをまだキャンセルできるか確認する

シフトをキャンセルできるのは、タイムシートが承認されておらず、請求もされていない場合に限られます。先ほど読み取った行を確認します。

**2 種類のキャンセルは異なる場所に記録され、シフト行に反映されるのは一方だけです。**次の順番で両方を確認します。

  • いずれかのクライアントで absent_reason が設定されている → このシフトはすでにクライアント都合で全部または一部がキャンセルされています。実際に確認済みです。料金が発生するキャンセルでは、シフトの cancelled_at と cancelled_reason はずっと null のままで、記録されるのはクライアント側だけです。absent_reason と last_absent_at が記録され、クライアントの price_book.claim_type は CANC になります。そのため、シフト行だけを見ると、クライアント都合でキャンセルされたシフトは有効なままに見えます。この確認で検出できます。これを省略して cancelled_at だけに頼らないでください。
  • cancelled_at が null ではない → すでに料金なしでキャンセルされています。既存の cancelled_reason を伝えて終了します。
  • いずれの場合も、二重にキャンセルしたり、一方のキャンセル種別をもう一方に切り替えたりしないでください。MCP ではできません。
  • is_approved が true、または approved_at が設定されている → **停止します。**タイムシートは承認済みです。その旨を伝えてください。MCP では承認を取り消せません。
  • 請求済みのシフトもキャンセルできませんが、その状態はシフト行からは確認できません。キャンセルの呼び出しが拒否され、上記のどの理由にも当てはまらない場合は、これが原因である可能性が高いです。アプリで請求書を確認するようユーザーに伝えてください。

ステップ 3 — 選択したツールが求める形式で理由を取得する

クライアント都合のキャンセルには、4 つのコードのいずれかを指定した absent_reason が必要です。この選択内容は PRODA ポータルに提出する NDIS 一括請求ファイルに反映されるため、自由記述にはできません。

コード意味
NSDH健康上の理由による無断欠席
NSDF家庭の事情による無断欠席
NSDT交通手段を利用できないことによる無断欠席
NSDOその他

ユーザーの説明に合うコードを提案し、コードだけを独立した行にして確認してください。このコードは請求に反映されます。該当するものがなければ、ほかのコードを無理に当てはめず NSDO を使用してください。

これらのコードは、NDIS サービスを提供していないアカウントを含め、すべての地域で必須です。その場合も、欠席理由として記録されるだけです。NDIS 非対応のユーザーに、この項目は該当しないと伝えたり、入力を省略したりしないでください。

料金が発生するキャンセル用のツールで指定できるのはコードだけです。ユーザーがシフト履歴に説明用のメモも残したい場合は、この方法では記録できず、アプリでキャンセルする必要があると伝えてください。

**こちら都合のキャンセル(料金なし)**には、自由記述の cancel_reason が必要です。これはシフトに記録され、オフィススタッフと割り当てられた介護担当者が確認できます。そのため、3 か月後に読んだ人にも役立つ内容にしてください。「介護担当者が体調不良で、代わりの担当者を手配できなかった」のように記載し、「キャンセル」のような内容は避けます。ユーザー自身の言葉がある場合はそれを使い、理由を勝手に作らないでください。

ステップ 4 — グループシフト:キャンセルする前にお読みください

cancel_shift_with_charge は、シフトに含まれるすべてのクライアントを欠席扱いにします。MCP 経由でクライアントごとに指定する方法はありません。

そのため、include_clients に複数のクライアントが表示され、そのうち実際にキャンセルしたのが 1 人だけの場合、このツールを使うのは適切ではなく、キャンセルすべきなのはシフトではありません。その旨をはっきり伝え、アプリを案内してください。アプリでは、グループシフトを続行したまま、1 人のクライアントだけをキャンセルできます。グループシフトでは、一部のクライアントが引き続き参加する限り、シフトは予約済みのままです。すべてのクライアントがキャンセルされた場合にのみ、シフト自体がキャンセル済みと表示されます。

シフトのクライアントリストを編集して回避しないでください。update_shift はクライアントの配列全体を置き換えるため、ここでは対象外です。また、クライアントを削除することは欠席扱いにすることとは異なり、欠席記録と請求情報が失われます。

ステップ 5 — 毎回、すべてを確認する

シフトの内容と、2つの結果を読み上げてください。この行より上は読み取り専用です。 この行より下はそうではありません。

Ready to cancel this shift:

  Shift:       #10045
  Client:      Mary Chen
  Staff:       Sarah Okafor
  When:        Fri 4 Sep 2026, 9:00 am – 10:00 am (+10:00)
  Shift type:  Personal Care

  Cancelling as:  Cancelled by client
  Reason:         NSDH — no show due to health reasons
  → Mary WILL still be billed for this shift.
  → Sarah WILL still be paid for this shift.

  I cannot notify Sarah from here — please tell her, or cancel in the app
  with 'Notify carer' ticked.

Cancel it?

このステップのルール:

  • 明示的な確認のみです。 以前の「Mary のシフトをキャンセルして」という言葉は意図を示すものであり、今組み立てた特定のシフトと特定の請求方法への同意ではありません。
  • ユーザーが拒否した場合 → 何もキャンセルしません。 一部だけ書き込むことも、「代わりに請求なしで実行します」とすることも、別の理由で再試行することもありません。何も変更されなかったと伝え、そこで終了します。
  • 請求に関する文と支払いに関する文は、該当する方向で別々の2文として伝えてください。 請求なしの場合は、「Mary には請求されません」と「Sarah にはこのシフトの賃金が支払われません」となります。
  • 介護者に通知できないことを伝えてください。 どちらのキャンセルツールにも通知オプションがないため、介護者の電話に通知が届くとは約束できません。アプリ独自のキャンセルフローには「介護者に通知」というトグルがあり、メールとアプリ内通知を送信しますが、この方法では送信されません。介護者に伝達済みだとユーザーに思わせてはいけません。
  • 複数のシフトをキャンセルする場合、影響に応じて複数回分の確認が必要です。 最初の書き込みの前に、件数を確認し、シフトを一覧表示してください。ユーザーが読むのをやめた後に、シフトごとに個別の確認を求めてはいけません。

ステップ 6 — 一度だけ書き込み、その後に検証する

まず、アカウントを再確認してください。 whoami をもう一度呼び出し、account_id が、すべての ID の照合に使ったものと引き続き一致しているか確認します。これは古いキャッシュを心配しているのではありません。タスクの途中で接続が再認証されることがあります。ユーザーがサーバーに再接続する、トークンが更新される、別のユーザーとしてサインインするなどの結果、エラーもツールのレスポンスでの通知もないまま、別のアカウントの別のユーザーとして接続が戻ることがあります。実際に、再接続によってサインイン中のユーザーとアカウントの両方が変わり、その後 list_accounts には新しいアカウントしか表示されなかった事例があります。

保持しているすべての ID は、それを読み取ったアカウントに属します。別のアカウントに送信すると、それらは外部キーになります。運がよければ拒否されますが、そうでなければ ID が衝突した無関係なレコードに気付かないまま関連付けられます。account_id が変わっていたら、停止してください。ID を変換したり、名前を再照合してそのまま続行したりしてはいけません。アカウントが変わったことをユーザーに伝え、ユーザーが実際に利用しているアカウントで再確認できるよう、ステップ 1 からやり直してください。

選択したツールを、id とそのツール固有の理由フィールドを使って、正確に1回呼び出してください。

無条件に再試行してはいけません。 結果が不明瞭な場合は、何かを決める前に list_shifts と include_clients: true を使ってシフトを読み直してください。すでにキャンセル済みのシフトに対する2回目のキャンセルを、安全な何もしない処理だと想定してはいけません。

読み直した行を基に検証してください。また、2つの方法では確認される場所が異なるため、正しいフィールドを読み取ってください。

  • クライアントによるキャンセル: 各クライアントの absent_reason に送信したコードが入り、last_absent_at が記録され、price_book.claim_type が CANC になります。cancelled_at と cancelled_reason は null のままです。 この方法ではこれらのフィールドは設定されないため、cancelled_at を成功の指標として扱うと、キャンセルが成功していても失敗に見えてしまいます。請求に影響する書き込みを再試行することこそ、ここで決してしてはいけないことです。
  • 当方によるキャンセル、請求なし: cancelled_at が設定され、cancelled_reason に送信した内容が入ります。

キャンセル後に published を確認し、変更されていたらユーザーに伝えてください。 実際に、請求ありのキャンセルによって published が false から true に変わり、意図的に非公開で作成されたシフトが再公開された事例があります。そのため、介護者には見えないと約束したシフトが、キャンセルの副作用として見えるようになることがあります。どちらのキャンセルツールも、この動作について説明していません。変更がないと決めつけずにフィールドを読み直し、値が変わっていたら、その旨を伝えてください。介護者はシフト表でそのシフトを見られるようになっている可能性があります。

どのシフトを、誰について、どの方法でキャンセルしたのか、誰に請求されるのか、誰に賃金が支払われるのか、そして介護者には引き続き伝える必要があることを、平易な言葉で報告してください。シフトの url が返された場合は、それも含めてください。

このスキルでできないこと

MCP には以下のためのツールがありません。独自に対応しようとせず、制限事項を伝えてアプリを案内してください。

  • キャンセルの取り消し。 キャンセルしたシフトは、アプリの Rebook ボタンで再設定できます。クライアントによるキャンセルの場合はクライアント名の横に、料金なしのキャンセルの場合は More actions の下にあります。再設定ツールはありません。これがステップ 5 を省略できない理由です。
  • シフトの削除。 これは別の取り消せない操作です。削除したシフトは復元できません。MCP では実行できず、キャンセルで代用することも、その逆もできません。
  • 日付範囲を指定した一括キャンセル。 「今月の Mary のシフトをすべてキャンセル」のような場合は、スケジューラーの Cancel Schedule 機能(シフトの一括キャンセル)を案内してください。この機能では、絞り込んだ範囲をまとめてキャンセルできます。ユーザーが希望した場合に限り、1 件ずつキャンセルする方法を案内してください。その場合は、最初に対象の全件リストと件数を確認します。
  • 繰り返しのシフトシリーズのキャンセル。 1 回分をキャンセルしても、残りには影響しません。シリーズ全体のキャンセルはアプリでのみ可能です(繰り返しのシフトの編集、キャンセル、削除、再設定)。
  • グループシフトで特定のクライアントを欠席扱いにする。 ステップ 4 を参照してください。
  • ケアラーへの通知。 ステップ 5 を参照してください。
  • 既存のキャンセルの請求方法の変更。 どちらのツールでも、片方の種類からもう片方の種類に変更することはできません。

対象外の操作であり、別のワークフローが必要な場合は、どれに該当するかを伝えて確認し、ここでの手順は続行しないでください。

  • 時刻の変更、またはケアラーの交代。 この操作には update_shift を使用します。このツールのクライアント配列とスタッフ配列は、割り当てリスト全体を置き換えます。このスキルの対象ではありません。
  • 代わりのシフトの作成。 この操作には shiftcare-create-shift スキルを使用します。

「Sarah が明日、体調不良で休むと連絡してきました」は、誤ってここに分類されることが最も多い依頼です。通常は「別のケアラーを探す」という意味であり、「クライアントのケアをキャンセルする」という意味ではありません。キャンセル、担当者の再割り当て、シフトの差し替えのどれを希望するか確認し、キャンセルと回答された場合にのみ続行してください。

エラー

症状考えられる原因対処方法
書き込みツールが表示されず、whoami で書き込みが off と表示される「Allow Write Actions」がオフになっている、またはユーザーが管理者ではない管理者が AI Settings で有効にするまで、作業を中止してください
whoami では書き込みが on と表示されるのに、書き込みツールが表示されないこの接続では書き込みツールが公開されていません。これは「Allow Write Actions」とは別に、ツールごとに制限されていますその事実を正確に伝えてください。このスキルでは回避できず、アカウント設定の問題でもありません
キャンセルが拒否され、シフトに問題がないように見えるシフトが請求済み、またはタイムシートが承認済みis_approved/approved_at を確認してください。それ以外の場合は請求書を確認してください。どちらも取り消しはアプリでのみ可能です
Missing required arguments: from_date, to_datelist_shifts には常に YYYY-MM-DD 形式の両方の日付が必要です対象日とその前日を含む 1 日単位の範囲を指定してください
シフトにクライアント名が表示されないinclude_clients が渡されていないinclude_clients: true を指定して再読み込みしてください
キャンセルツールで引数が拒否される料金ありのキャンセル用ツールに cancel_reason を送った、または料金なしのキャンセル用ツールに absent_reason を送った各ツールが受け付けるのは、それぞれ専用の理由フィールドのみです
absent_reason が拒否される4 つのコード以外の値が指定されているNSDH、NSDF、NSDT、または NSDO を使用してください
間違ったシフトがキャンセルされた範囲検索で複数の候補が返されたのに、1 件だけだと判断したアプリで再設定し、ステップ 1 をもう一度読み込んでください

コメント