メインコンテンツにスキップ

MCP 経由でイベントを購読する

MCP 経由で Kanera に接続されている AI エージェントは、ポーリングの代わりに、作業が変更されたときに通知を受けるように要求できます。 Kanera はドラフトの Webhook 配信を実装します MCPイベント 拡張子: エージェントのホストが HTTPS コールバックを登録し、Kanera がそれを検証し、それ以降、一致するすべての変更が署名付き JSON オカレンスとしてホストにポストされます。

これは、ChatGPT などのクライアントで「このボードを見て、コメントが到着したら教えてください」の背後にあるメカニズムです。ホストはコールバックを所有します。サーバーを実行したり、Kanera のどこにも URL を貼り付けたりする必要はありません。

対象者 ChatGPT を使用する場合は、お読みください ChatGPT の変更を監視します。 そしてそこで止まります。このページの残りの部分は、独自の MCP ホストまたはカスタム統合を構築している人、およびエージェントに何ができて何ができないかを正確に知りたい人のためのワイヤレベルの契約です。 :::

エージェントが購読できる内容​

イベント発火時期追加フィールド data
card.created監視対象スコープ内にカードが作成されます。title, listId, url
card.updatedカードが変更されます: タイトル、説明、完了、アーカイブ状態、およびその他のカード フィールド。title, listId, url
card.movedカードはリストまたはボード内、またはリストまたはボード間を移動します。listId (目的地)、 fromListId (情報源)、 prevPosition, url
card.blockedアクティブなカードは、再開または復元を含む最初のオープン ブロッカーを獲得します。title, listId, url;ブロッカーの詳細はありません
card.unblockedアクティブなカードは、ブロッカーのボードまたはリストの完了、アーカイブ、リンク解除、または削除によって、最後に開いていたブロッカーを失います。title, listId, url;ブロッカーの詳細はありません
schedule.conflict_detectedオープン カードは最初のスケジュール競合を取得します。オープン ブロッカーは開始時または開始後に終了するように計画されています。blockerCardId, days (扶養家族が移動する必要がある労働日)
schedule.conflict_resolved開いているカードは、最後のスケジュールの競合を失います。追加のスケジュールフィールドはありません
schedule.critical_path_slippedクリティカル パス カードの計画された終了が遅くなり、ボードの計画された終了が遅れます。previousProjectedFinish, projectedFinish, days, slipDays
comment.createdコメントはカードに投稿されます。commentId, text (最大8,000文字)、 url
priorities.changedあなた自身の 次にやること キューが変更されている可能性があります。なし。参照 次のキューへ.
my_day.readyあなたのタイムゾーンでは平日の午前中です。localDate, timeZone。参照 朝のブリーフィング.
reminder.dueあなた自身のもの カードリマインダー 期限が来ます。reminderId, cardId, remindAt, url。参照 カードのリマインダー.

すべてのカードとコメントの出現には次のような特徴があります。 workspaceId, boardId, cardId、そして actor (参照 自分の書き込みを区別する)。ペイロードは制限された要約です。カードの説明、添付ファイル、および完全なコメント スレッドは決して含まれません。エージェントは現在のレコードを次のように読み取ります。 cards.get または comments.list さらに必要になったとき。

カード、コメント、イベントのスケジュールについては、サブスクリプションをご利用ください。 引数 配信される内容を絞り込む:

引数必須効果
workspaceIdはいこのワークスペース内のイベントのみ。
boardIdいいえこの掲示板のイベントのみです。宿泊ゲストの場合は必須です。
listIdいいえこのワークスペース リスト内のカードのイベントのみ。のために card.moved、リストに入るカードまたはリストから出るカードは一致しますが、リスト内の並べ替えは一致しません。省略 boardId アクセスできるすべてのボードで、共有リストをウォッチします。
cardIdいいえこのカードのイベントのみ。必要なもの boardId.

アクセスは、サブスクライブ時だけでなく、配信ごとに接続された ID に従います。ワークスペースのメンバーはワークスペース全体を監視できます。組織を超えたゲストは、招待されたボードの名前を指定する必要があります。割り当てられたアイテムに制限されているゲストは、現在割り当てられているカードに名前を付ける必要があります。その後 ID がスコープにアクセスできなくなると、配信が停止し、サブスクリプションが期限切れになります。ボード全体のサブスクリプション内の 1 つのカードへのアクセスが失われると、そのカードのみがスキップされます。

依存関係の遷移​

card.blocked そして card.unblocked フォローする カードの依存関係これには、人による変更、統合、自動化、ミラーリングされたカードが含まれます。自動化ルールは必要ありません。さらにブロッカーを追加したり、複数のブロッカーのうち 1 つだけをクリアしたりしても、遷移は繰り返されません。各方向は、トランザクションごとにカードごとに 1 回に制限されます。

イベントは依存カードについて説明し、プライベート ボードを保護するためにブロッカーの詳細を省略します。読む cards.get 接続に表示される現在の関係について。オートメーションがすでにカードを移動または完了している可能性があるため、操作を行う前に現在の状態を確認してください。

移行のスケジュールを設定する​

3人 schedule.* イベントは、イベントと同じ稼働日エンジンを使用します。 タイムラインビュー そして work.schedule。効果的な組織/ワークスペース設定でタイムラインと依存関係を有効にする必要がありますが、自動化ルールは必要ありません。

  • schedule.conflict_detected スケジュールの競合がない状態から少なくとも 1 つの競合が発生する状態への移行です。 cardId 扶養家族の名前を指定し、 blockerCardId 矛盾する最悪の前提条件を挙げ、 days 扶養家族が適切に移動するために必要な月曜日から金曜日の営業日数です。別の競合を追加しても、競合は繰り返されません。
  • schedule.conflict_resolved たとえば、日付が変更された後、ブロッカーが完了した後、または依存関係が削除された後など、開いているカードに競合が残っていないことを意味します。複数の競合のうち 1 つだけをクリアしても、競合は発生しません。その後再発すると、再び検出がトリガーされる可能性があります。
  • schedule.critical_path_slipped クリティカル カード自体の計画された終了が後で移動することと、ボードの計画された終了が後で移動することの両方が必要です。 Slack に吸収された日付の変更は対象外であり、単に新しい作業を追加するだけでも対象外です。 days 投影がどれだけ移動したかを測定します。 slipDays 最新の期日に対する遅れを測定します。投影は後で移動できます。 slipDays ゼロのままです。

最初のスケジュール評価では、既存のすべての競合を発表するのではなく、ベースラインを確立します。イベントはその後の境界を報告します。使う work.schedule 監視を開始するとき、または見逃した配信から回復するときに、現在の状態を確認します。変更を提案する前に、イベントでもう一度読んでください。これらのアラートはカードを再スケジュールしません。

カスタム ホストの場合は、各イベント名を個別にサブスクライブします。このリクエストは、1 つのボード上の最初の競合を監視します。実際のワークスペースとボードの UUID、およびホストの検証済みコールバックと署名シークレットを置き換えます。

{
"jsonrpc": "2.0",
"id": 3,
"method": "events/subscribe",
"params": {
"name": "schedule.conflict_detected",
"arguments": { "workspaceId": "…", "boardId": "…" },
"delivery": {
"mode": "webhook",
"url": "https://receiver.example.com/kanera/events",
"secret": "whsec_…"
},
"ttlMs": 86400000
}
}

クリティカル パス スリップの発生は次のようになります (ID と日付は例示です)。

{
"eventId": "evt_…_schedule.critical_path_slipped",
"name": "schedule.critical_path_slipped",
"timestamp": "2026-11-02T10:00:00.000Z",
"data": {
"workspaceId": "…",
"boardId": "…",
"cardId": "…",
"previousProjectedFinish": "2026-11-06",
"projectedFinish": "2026-11-09",
"days": 1,
"slipDays": 1,
"actor": { "kind": "user", "userId": "…", "self": false }
},
"cursor": null
}

日付は YYYY-MM-DD;期間、スラック、スリップ数には週末は含まれません。カード イベントとスケジュール イベントは、同じ基礎となる編集を記述しますが、異なるイベント ID を持つ場合があります。重複排除の再試行 eventId そしてチェックしてください actor.self 自分自身の変化に反応する前に。参照 企画例.

次のキューへ​

priorities.changed は、接続されているユーザー自身の Up next キューが変更された可能性があることをエージェントに伝え、ポーリングの代わりにキューを再読み取りできるようにします。これは、キューの順序変更またはサイズ変更を行うすべての変更で起動されます。

  • Web アプリ、API、または別のエージェントからエントリが追加、移動、または削除された場合。
  • キューに入れられたカードが完了、アーカイブ、復元、または再割り当てされると、カードはライブ キューから削除されるか、元に戻されます。

引数は必要ありません (パス {}) であり、キューは作業しているすべてのワークスペースにまたがるため、ワークスペースにスコープされることはありません。オカレンスには、それを変更したユーザーのみが含まれます。

"data": {
"targetUserId": "…",
"actor": { "kind": "user", "userId": "…", "self": false }
}

targetUserId は常に接続されているユーザーです。キューのカードについては何も含まれていません。電話をかける priorities.list 現在のランキングについて。通常のカードの可視性が適用されます。

見ることしかできません 自分専用の 行列。他の人の議論には議論の余地はありません。それには、チームメイトのキューを読み取ることができるワークスペース管理者も含まれます。 priorities.list。内容のない通知であっても、監視者には見えないカードがいつ、誰によって完成または再割り当てされたのかが明らかになります。ゲストまたは読み取り専用 API キーは、独自のキューを監視することもできます。

朝のブリーフィング​

my_day.ready エージェントは独自のスケジューラを使用せずに毎朝勤務時間に概要を説明します。 Kanera は、月曜日から金曜日まで、1 日 1 回、プロフィールのタイムゾーンの 08:00 に送信します。 毎日のダイジェストメール。これはダイジェストの設定に従います。毎日のダイジェスト電子メールがオフになっている間は、ping は送信されません。期限があるかどうかに関係なく送信されるため、エージェントは晴れた日を報告できます。

引数は必要ありません (パス {})そして自分自身の一日だけを説明します。この出来事には何の効果もありません。

"data": {
"targetUserId": "…",
"localDate": "2026-10-12",
"timeZone": "Europe/London",
"actor": { "kind": "system", "userId": null, "self": false }
}

その後、エージェントが電話をかけます work.my_day その設定を使って timeZone。 1 回の電話で、期限を過ぎたカード、期限を過ぎたカード、チェックリストの項目が期限を過ぎたカード、14 日以上使用されていない割り当てられたカード、および次のキューの先頭が返され、すべて現在のアクセスと照合してチェックされます。

説明会も戻ってきます schedule.conflicts, schedule.critical、そして schedule.lateToStart: 競合のある割り当てられたカード、競合のないクリティカル パス カード、および進行状況に入らずに予定された開始が過ぎたカード。遅延開始チェックには進行時間の追跡と進行中リストが必要で、すでに期限を過ぎたカードは除外されます。

サブスクリプションは更新ごとに最大 24 時間継続するため、クライアントは翌朝の ping を受信するためにサブスクリプションを更新し続ける必要があります。 ChatGPT は、タスクがアクティブなときにこれを実行します。

カードのリマインダー​

reminder.due エージェントが次のような場合に行動できるようにします。 カードリマインダー たとえば、カードをチャットに投稿したり、カードでの作業を開始したりするために起動されます。リマインダーはカードのアラーム ボタンから、またはエージェントによって設定されます。 cards.set_reminder。引数は必要ありません (パス {})そして自分自身のリマインダーのみをカバーします。誰も他の人のものを購読することはできません。

Kanera は 30 秒ごとに期限のリマインダーをチェックし、リマインダーごとに 1 件のリマインダーを送信します。すでに起動されたリマインダーのスケジュールを変更すると、再度起動され、次の起動は新たな出来事となります。このオカレンスはカードに名前を付けますが、その内容は何も含まれません。

"data": {
"targetUserId": "…",
"reminderId": "…",
"cardId": "…",
"remindAt": "2026-10-16T07:00:00.000Z",
"url": "https://board.kanera.app/o/…/c/MKT-42",
"actor": { "kind": "system", "userId": null, "self": false }
}

エージェントが電話をかける cards.get 次を使用して cardId 現在のカードの場合。配送時には、カードがまだ表示されるかどうかが確認されます。アーカイブされたカード、またはアクセスできなくなったカード上のリマインダーは、通知やイベントなしで起動されます。

ChatGPT の変更を監視します。​

を使用してKaneraプラグインをインストールして接続します。 ChatGPT セットアップガイドを選択し、イベント駆動型タスクをサポートする仕事の会話でそれを選択します。互換性のあるホストは、イベント機能を自動的に検出します。カスタム MCP 接続の場合は、次の場所で開きます。 プラグイン そして選択します リフレッシュ サーバー変更後。公開されたプラグイン ツールの更新は、OpenAI のレビュー プロセスに従います。

Kanera アプリが接続されている会話で、何が起こってほしいかを尋ねます。

Watch the Product board in Kanera. When a new comment appears on any card, summarise it for me and suggest a reply.
Tell me whenever a card moves into the Done list on the Launch board.
Whenever my Up next queue changes, tell me what is now at the top.
Every weekday morning, brief me on what is overdue, what is due this week, and what is at the top of my Up next queue.
Watch the Launch board for scheduling conflicts and critical-path slips. Read the current schedule when one appears, tell me which cards and dates are affected, and propose a repair. Tell me when conflicts clear. Do not change dates.

ChatGPT は、独自にホストされたコールバックでサブスクリプションを作成し、タスクがアクティブな間はサブスクリプションを更新し、タスクを停止するとサブスクリプションを終了します。 Kanera はあなたの作品をどこにも送信しません。ChatGPT はそれが制御していることを証明していません (「 コールバック検証).

カードに関する質問への回答、新しい作業の優先順位付け、1 枚のカードの保護など、さらに効果的な例が含まれています。 使用方法の例.

タスクを作成するときに知っておくべき 2 つの点:

  • ループを避けてください。 すべての発生には、そのアクターと、サブスクライブ接続が発生の原因であるかどうかが示されます。コメントに反応するタスクはチェックする必要があります。 actor.self もう一度書く前にそうしないと、自動的に応答されます。
  • 書く前に読んでください。 出来事は要約です。最初にカードを読み取り、反復可能な変更にはツールの冪等キーを使用するようにタスクに依頼します。

配信は制限付き再試行ウィンドウを使用したベストエフォート型です (「 配信と再試行)。 ChatGPT のコールバックがそれより長く到達できない場合、その発生は見逃されます。タスクは現在の状態を読み取ることで回復します。

プロトコル​

イベントは、ホストされている HTTP エンドポイントでのみ使用できます。 https://mcp.kanera.app/mcp または独自の展開 /mcp、現在の MCP プロトコル上のクライアントのみに適用されます。これにより、イベント サブスクリプションが追加されます。 kanera mcp over stdio はそれらを提供しません。ローカルの stdio ホストには配信先のホストされたコールバックがありません。

server/discover 両方の下で機能をアドバタイズします capabilities.events (今日の ChatGPT の読み取り内容) および capabilities.extensions["io.modelcontextprotocol/events"] (拡張提案がそれを配置する場所)。 3 つのリクエスト メソッドが続き、ツール呼び出しとまったく同じように認証され、OAuth アクセス トークンまたは API キーをベアラーとして使用します。以下の例では、メソッドのパラメーターのみを示しています。クライアント ライブラリは、プロトコルのリクエストごとのヘッダーとメタデータを追加します。

events/list​

各イベントの引数とペイロードの JSON スキーマを含む上記のカタログを返します。カタログは 1 ページです。 cursor 存在しないか空である必要があります。

{
"jsonrpc": "2.0",
"id": 1,
"method": "events/list",
"params": {}
}

events/subscribe​

{
"jsonrpc": "2.0",
"id": 2,
"method": "events/subscribe",
"params": {
"name": "comment.created",
"arguments": { "workspaceId": "…", "boardId": "…" },
"delivery": {
"mode": "webhook",
"url": "https://receiver.example.com/kanera/events",
"secret": "whsec_…"
},
"ttlMs": 86400000
}
}
フィールドルール
delivery.modeのみ webhook サポートされています。他のモードは戻ります -32014 Unsupported 次を使用: data.feature = "deliveryMode".
delivery.urlHTTPS、URL に認証情報、フラグメントはなく、パブリック アドレスに解決される必要があります。ループバック、プライベート、リンクローカル、クラウドメタデータ、および IPv4 マッピングまたは移行 IPv6 アドレスは拒否されます。
delivery.secretwhsec_ その後に 24 ~ 64 バイトの Base64 が続きます。 Kanera は暗号化して保存し、すべての配達に署名します。
ttlMs要求された寿命。デフォルトおよび最大値は 24 時間です。短い正の値が優先されます。 null (有効期限なし) は 24 時間に制限されます。
cursor, maxAgeMs互換性のために受け入れられます。Kaneraはリプレイを提供しません: cursor 常に次のように返されます null、null 以外のリクエスト カーソルは次のように報告されます。 truncated: true.

答えは次のとおりです。

{
"id": "sub_…",
"refreshBefore": "2026-10-07T13:00:00.000Z",
"cursor": null,
"truncated": false,
"deliveryStatus": {
"active": true,
"lastDeliveryAt": "2026-10-06T12:58:10.000Z",
"lastError": null
}
}

サブスクリプション id 接続、コールバック URL、イベント名、および引数 ( priorities.changed, my_day.ready、そして reminder.due、接続されているユーザー)、呼び出し events/subscribe 再び同じアイデンティティを持つのは、 リフレッシュする:伸びる refreshBefore、新規を受け入れます secret (古い秘密サインと新しい秘密サインの両方が 5 分間配信されます)、そして戻ります deliveryStatus まだアクティブだったサブスクリプションの場合。 deliveryStatus 最初の購読時と期限切れ後の更新時は省略されます。前にリフレッシュしてください refreshBefore;期限切れのサブスクリプションが後で更新された場合は、更新時から新たに開始され、見逃したサブスクリプションは再生されません。

active いつもです true:Kanera は、配信の失敗によってサブスクリプションを一時停止することはありません。代わりに、発生ごとに再試行を制限し、エンドポイントの状態を報告します。 lastError (のうちの1つ connection_refused, timeout, tls_error, http_4xx, http_5xx, challenge_failed)と failedSince、エンドポイントが失敗し続ける間存在します。

1 つの接続には最大 100 のアクティブなサブスクリプションを保持できます。 101人目の帰還 -32013 ResourceExhausted.

events/unsubscribe​

同じものを取る name, arguments、そして delivery.url、秘密はありません。サブスクリプションを終了できるのは、サブスクリプションを作成した接続のみです。別の資格情報の要求は何も行われません。購読解除は冪等です。

エラー​

Kanera は、イベントのドラフト文書のエラー コードを使用します。サブスクリプションの失敗は構造化されたものを運びます data そのため、ホストはメッセージを解析せずにそれらに基づいて動作できます。

コード名前いつ
-32011NotFoundname カタログには載ってません(data.kind = "event").
-32012ForbiddenID が要求されたスコープを認識できないか、資格情報が API キーまたは OAuth 接続ではありません。
-32013ResourceExhaustedサブスクリプションの制限 (data.max)またはレート制限。
-32014Unsupported以外の配信モード webhook (data.feature, data.value).
-32015CallbackEndpointError検証に失敗しました。 data.reason の 1 つです connection_refused, timeout, tls_error, http_4xx, http_5xx、または challenge_failed。拒否された宛先は次のように報告されます。 challenge_failedしたがって、エラー応答をプライベート ネットワークのマッピングに使用することはできません。
-32602InvalidParams不正なリクエスト、無効なシークレットまたは URL、ワークスペース、ボード、またはカード arguments 存在しないもの、または次に渡される引数: priorities.changed, my_day.ready、または reminder.due.

コールバック検証​

サブスクリプションが保存される前に、Kanera はコールバックがあなたのものであることを証明します。検証リクエストを次の宛先に投稿します。 delivery.url、指定したシークレットで署名されています:

{ "type": "verification", "challenge": "…" }

エンドポイントは応答する必要があります 2xx チャレンジをそのまま返すJSON本文を使います:

{ "challenge": "…" }

それ以外のものはサブスクライブに失敗します -32015 そして上記の理由。リダイレクトは決して追跡されません。成功した検証は接続およびコールバック URL ごとに 5 分間キャッシュされるため、更新または変更が必要になります。 arguments 挑戦を繰り返さない。

検証は、配信と同じ厳密な宛先ポリシー (パブリック HTTPS アドレスのみ) で実行され、一度解決され、接続用に固定されるため、チェックとリクエストの間の DNS 変更によってリダイレクトされることはありません。

配信と再試行​

それぞれの出来事は一つです POST 次を付けてコールバックに渡します: Content-Type: application/json:

{
"eventId": "evt_…",
"name": "comment.created",
"timestamp": "2026-10-06T12:58:09.412Z",
"data": {
"workspaceId": "…",
"boardId": "…",
"cardId": "…",
"commentId": "…",
"text": "Can we ship this on Thursday?",
"url": "https://board.kanera.app/o/3F2A9C1D7B4E6A08/c/PROJ-123",
"actor": { "kind": "user", "userId": "…", "self": false }
},
"cursor": null
}
ヘッダー内容
webhook-idの eventId。再試行しても安定しています。これを使用してハンドラーを冪等にします。
webhook-timestampこの試行が署名されたときの Unix 秒数。再試行するたびに新鮮になります。
webhook-signatureスペースで区切られた 1 つ以上の v1,<base64> 署名 (秘密のローテーション中に 2 つ)。
X-MCP-Subscription-Idサブスクリプション id.

本文のバイトは、試行するたびに同一になります。タイムスタンプと署名のみが変更されます。

応答する 2xx 受信を確認します。Kaneraは応答を次のように扱います:

応答行動
2xx納品されました。本体は無視されます。
410, 413、その他 4xxこのオカレンスは削除されます。サブスクリプションは継続します。今後の出来事も引き続き配信されます。
408, 425, 429, 5xx、タイムアウト、TLS、または接続障害同じように再試行しました eventId: およそ 0 秒、30 秒、1.5 分、3.5 分、および 7.5 分で合計 5 回の試行。その後、オカレンスは削除されます。

4 KiB を超える応答本文は、結果に影響を与えることなく破棄されます。 256 KiB を超えるオカレンスは送信されません。Kaneraは配達記録を 14 日間保管します。

アクティブなサブスクリプションの配信は、Kanera の再起動後も存続します。認証は試行するたびに再チェックされるため、切断されたエージェント、取り消されたキー、削除されたメンバー、または割り当てを失ったゲストは、次の更新時ではなく、次の試行時にデータの受信を停止します。

priorities.changed キューは単一のワークスペースに関連付けられていないため、カード イベントが使用する永続的な変更ログからではなく、キューの変更が保存された瞬間にオカレンスがキューに入れられます。まれに、Kanera がその瞬間に再起動される場合、1 つの通知が失われる可能性があります。次の priorities.list 読み取りは常に最新です。

署名を検証する​

そのスキームは、 標準 Webhook レイアウト。の後にシークレットを解読します whsec_ Base64 のプレフィックス、HMAC-SHA256 文字列 {webhook-id}.{webhook-timestamp}.{body}、ヘッダー内の各署名と定数時間で比較します。

import crypto from "node:crypto";
import express from "express";

const app = express();
const key = Buffer.from(process.env.KANERA_MCP_EVENT_SECRET!.slice("whsec_".length), "base64");

app.post("/kanera/events", express.raw({ type: "application/json" }), (req, res) => {
const body = req.body.toString("utf8");
const payload = JSON.parse(body) as { type?: string; challenge?: string };
const id = req.header("webhook-id") ?? "";
const timestamp = req.header("webhook-timestamp") ?? "";
const expected = crypto.createHmac("sha256", key).update(`${id}.${timestamp}.${body}`).digest("base64");
const digest = Buffer.from(expected);
const valid = (req.header("webhook-signature") ?? "").split(" ").some((entry) => {
const received = Buffer.from(entry.replace(/^v1,/, ""));
return received.length === digest.length && crypto.timingSafeEqual(received, digest);
});
if (!valid) return res.status(401).send("invalid signature");
// Verification challenge: echo it back.
if (payload.type === "verification") return res.json({ challenge: payload.challenge });
// Occurrence: handle it idempotently by webhook-id.
res.sendStatus(204);
});

常に生の本体と照らし合わせて確認してください。配達を拒否する webhook-timestamp バインドリプレイまであと数分以上かかります。

自分の書き込みを区別する​

書き戻すことでイベントに反応するエージェントは、自身の書き込みがイベントとして発生することを確認します。 userId 単独ではそれらを分離できません。個人の API キーまたは OAuth エージェントがそのユーザーとして機能するため、エージェントが投稿したコメントと個人が投稿したコメントは同じものになります。 userId.

したがって、すべての出来事には次のものが含まれます。

"actor": { "kind": "apiKey", "userId": "…", "self": true }
フィールド意味
kinduser (ウェブアプリ)、 apiKey, agent (対話型 OAuth エージェント)、 support, automation、または system.
userId変更が行われたユーザー。 null 自動化とシステム変更のため。
selftrue サブスクライブ接続自体が変更を行った場合のみ (同じ OAuth エージェント許可、同じ API キーが直接使用された場合、または同じ無人サービス接続)。

自動化の効果は次のように報告されます。 automation たとえエージェント自身の書き込みがトリガーした場合でも、エージェントのコメントの後にラベルを追加するルールはエージェントの書き込みとして読み取られません。

の title そして text フィールドはユーザーのコンテンツです。それらをエージェントへの指示としてではなく、データとして扱います。

同じ API を直接呼び出す​

MCP メソッドは 3 つのパブリック API ルートに中継し、同じベアラー資格情報、同じ要求および応答本文を受け入れます。 API キーを保持し、MCP を話さずにイベント サブスクリプションを必要とする統合からこれらを使用します。

ルートMCP法
GET /api/v1/mcp-eventsevents/list
POST /api/v1/mcp-events/subscribeevents/subscribe
POST /api/v1/mcp-events/unsubscribeevents/unsubscribe

失敗はコード付きのパブリック API 問題ドキュメントとして返されます。 MCP_EVENT_NOT_FOUND, MCP_EVENT_UNSUPPORTED, MCP_SUBSCRIPTION_LIMIT、そして MCP_CALLBACK_ENDPOINT、MCP 層は上記のエラー テーブルにマッピングします。

1 つの接続より長く存続し、完全なイベント カタログをカバーするチーム統合の場合は、次を使用します。 Webhook 代わりに。 MCP イベント サブスクリプションは、イベント サブスクリプションを作成した認証情報に属し、更新されない限り 24 時間以内に期限切れになり、4 つのカードおよびコメント イベントと独自の Up next キューのみをカバーします。キューはワークスペース データではなく個人用であるため、Webhook は Up next の変更を配信しません。

トラブルシューティング​

問題何を確認するか
クライアントはイベントを提供しません。ホストされているサーバーに接続する必要があります /mcp 現在の MCP プロトコルのエンドポイント。クライアントでサーバーを再スキャンします。標準デジタル経由 kanera mcp イベントを提供することはありません。
events/subscribe 返品 -32015 次を使用: challenge_failed.コールバックはチャレンジをエコーしなかったか、非 2xx ステータスに応答したか、リダイレクトされたか、プライベート、ループバック、またはメタデータ アドレス上にありました。Kanera氏はこれらすべてを意図的に同じ方法で報告している。
-32012 Forbidden 購読中。ID はワークスペース、ボード、またはカードを参照できません。ボードゲストは通過する必要があります boardId;割り当てられたアイテムのみのゲストは、割り当てられたアイテムを渡す必要があります cardId。セッション Cookie はサブスクライブできません。 OAuth 接続または API キーを使用します。
配信は停止されましたが、サブスクリプションはまだ更新されています。チェックする deliveryStatus.lastError そして failedSince リフレッシュ応答について。資格情報が取り消された場合、またはユーザーがアクセスを失った場合、サブスクリプションの有効期限が切れており、更新により何も返されません。 deliveryStatus.
エージェントは自身のコメントに反応し続けます。チェックする data.actor.self 書く前に。
-32602 次を購読する場合: priorities.changed.空で渡す arguments。あ targetUserId または他の引数は拒否されます。監視できるのは自分のキューだけです。
停止後に変更が失われました。再試行は約 7.5 分後に停止し、リプレイは行われません。現在の状態を読み取る cards.list, cards.get, comments.list、または priorities.list.