canvas-discussion-facilitator について
Canvas Discussion Facilitatorは、Canvasのコースディスカッションを管理する学生・教育者向けスキルです。投稿の閲覧、確認用の返信案作成、トピック作成、参加状況の確認に対応します。
主な機能
- 01コースとディスカッショントピックの閲覧
- 02投稿本文と返信の確認
- 03確認用の返信案や投稿案の作成
- 04ディスカッショントピックの作成と予約
- 05ディスカッションの参加状況を集計
活用シーン
- 01投稿と議論の要点を把握
- 02クラスメートや学生への返信案を作成
- 03未参加の学生を特定
- 04投稿設定を指定してコースの議論を作成
MCP 対応
Canvas MCP サーバーへの接続が必要で、コース、トピック、投稿の閲覧や、ディスカッションの作成・返信にそのツールを使います。書き込み操作は送信前にユーザーの確認が必要です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ vishalsachdev/ canvas-mcp --skill canvas-discussion-facilitatorインストール後、Claude Code で/canvas-discussion-facilitatorを入力して読み込まれたか確認します。
詳細
Canvas ディスカッションファシリテーター
Canvas LMS のディスカッションフォーラムでの活動を支援します。トピックの閲覧、投稿の読解、学生への返信、新しいディスカッションの作成、参加状況の確認ができます。学生と教育者のどちらにも対応しています。
前提条件
- Canvas MCP サーバーが稼働し、エージェントの MCP クライアントに接続されている必要があります。
- 認証済みユーザーは、どの Canvas ロール(学生、TA、講師)でもかまいません。ツールへのアクセスは Canvas API の権限によって決まります。
- FERPA に配慮した取り扱い(教育者向け):Canvas MCP サーバーの環境で
ENABLE_DATA_ANONYMIZATION=trueを設定すると、出力に含まれる、対応する学生の識別情報フィールドが匿名化されます。この設定だけでコンプライアンスが確立されるわけではありません。
手順
1. コースを特定する
ユーザーに、どのコースを対象にするか尋ねます。コースコードまたは Canvas ID を受け付けるか、一覧から選んでもらいます。
ユーザーが指定しない場合は、list_courses を使ってアクティブなコースを表示し、次のように尋ねます。
どのコースのディスカッションを確認しますか?
2. ディスカッショントピックを閲覧する
コース識別子を指定して、MCP ツール list_discussion_topics を呼び出し、すべてのディスカッションフォーラムを取得します。
パラメーター:
course_identifier-- コースコードまたは Canvas IDinclude_announcements-- ディスカッションのみを表示するにはfalse(既定値)、アナウンスも含めるにはtrueに設定します
トピックごとに提示する情報:
- トピック ID とタイトル
- 作成者名
- 投稿日
- エントリー数(取得できる場合)
- トピックが固定またはロックされているかどうか
ユーザーが詳細を確認するトピックを選べるように、一覧を提示します。
3. ディスカッション内の投稿を表示する
ユーザーがトピックを選択したら、list_discussion_entries を呼び出して投稿を取得します。
パラメーター:
course_identifier-- コースコードまたは Canvas IDtopic_id-- 選択したディスカッショントピックの IDinclude_full_content-- 投稿の本文全体を表示するにはtrueに設定しますinclude_replies-- スレッド形式の返信を表示するにはtrueに設定します
エントリーごとに提示する情報:
- 作成者名
- 投稿日
- メッセージ内容(またはプレビュー)
- 返信数
- エントリー ID(返信に必要です)
4. 特定の投稿全文を読む
投稿が省略されている場合、またはユーザーが全文を確認したい場合は、get_discussion_entry_details を呼び出します。
パラメーター:
course_identifier-- コースコードまたは Canvas IDtopic_id-- ディスカッショントピックの IDentry_id-- 特定のエントリー IDinclude_replies-- このエントリーへの返信もすべて取得するにはtrueに設定します
投稿の全文と、返信があればその内容、タイムスタンプ、作成者情報を提示します。
5. 投稿に返信する
ユーザーが特定の投稿への返信を希望する場合は、reply_to_discussion_entry を呼び出します。
パラメーター:
course_identifier-- コースコードまたは Canvas IDtopic_id-- ディスカッショントピックの IDentry_id-- 返信対象のエントリーmessage-- 返信内容(HTML に対応しています)
送信前に必ず次のことを行います:
- 確認のため、返信の下書きをユーザーに提示します
- ユーザーが文脈を確認できるよう、元の投稿を参照します
- 明示的な承認を得てから送信します
6. 新しいトップレベルのエントリーを投稿する
既存のディスカッションに新しい投稿(返信ではないもの)を追加する場合は、post_discussion_entry を呼び出します。
パラメーター:
course_identifier-- コースコードまたは Canvas IDtopic_id-- ディスカッショントピックの IDmessage-- 投稿内容(HTML に対応しています)
投稿前に下書きをユーザーに提示し、確認を得ます。
7. 新しいディスカッショントピックを作成する
ユーザーがまったく新しいディスカッションフォーラムを必要としている場合は、create_discussion_topic を呼び出します。
パラメーター:
course_identifier-- コースコードまたは Canvas IDtitle-- ディスカッションのタイトルmessage-- ディスカッションの冒頭投稿/プロンプトdelayed_post_at-- (任意)ディスカッションを後で公開する日時を指定する ISO 8601 形式の日時lock_at-- (任意)ディスカッションを自動的にロックする日時を指定する ISO 8601 形式の日時require_initial_post-- 学生がクラスメートの返信を見る前に投稿する必要がある場合は、trueに設定しますpinned-- トピックをディスカッション一覧の先頭に固定する場合は、trueに設定します
作成する前に、タイトル、内容、スケジュール設定をユーザーに確認します。
教育者向けのユースケース
参加状況を確認する
list_discussion_topicsを呼び出し、コース内のすべてのディスカッションフォーラムを取得します。- 各トピックについて、
list_discussion_entriesを呼び出し、すべての投稿を取得します。 - 投稿者をクラスの名簿と照合します(登録済みの学生を取得するには、
list_usersまたはlist_submissionsを使用します)。 - 有効なディスカッションに一度も投稿していない学生を特定します。
参加状況は、次のようにまとめて提示します。
## Discussion Participation: [Course Name]
### Topic: "Week 5 Reading Response" (due Mar 3)
- **Posted:** 28 / 32 students (88%)
- **Not posted:** Student_a1b2c3d, Student_e4f5g6h, Student_i7j8k9l, Student_m0n1o2p
### Topic: "Case Study Analysis" (due Mar 5)
- **Posted:** 15 / 32 students (47%)
- **Not posted:** [17 students listed]
### Students Missing Multiple Discussions
- Student_a1b2c3d -- missing 2 discussions
- Student_e4f5g6h -- missing 2 discussions
参加を促すリマインダーを送信する
参加していない学生を特定した後、次の対応を提案します。
create_announcementを使用して、ディスカッションの期限に関する一般的なリマインダーを告知します。send_conversationを使用して、参加が遅れている学生に個別にメッセージを送信します。
思慮深い返信を作成する
教育者が学生の投稿に返信したい場合は、次の手順を実行します。
get_discussion_entry_detailsで投稿全体を読みます(文脈を把握するために返信も含めます)。- 学生の主張に触れ、追加の質問をしたり、コースの教材と考えを結び付けたりする返信案を作成します。
reply_to_discussion_entryを呼び出す前に、教育者が確認・修正できるよう返信案を提示します。
学生向けのユースケース
ディスカッションを閲覧して内容を把握する
list_discussion_topicsを呼び出し、有効なディスカッションをすべて確認します。include_full_content=trueを指定してlist_discussion_entriesを呼び出し、投稿を読みます。- 学生がすばやく内容を把握できるよう、投稿全体の主なテーマや主張を要約します。
クラスメートに返信する
get_discussion_entry_detailsで対象の投稿を読みます。- 元の投稿に実質的な内容で応じる返信案の作成を学生に支援します。
reply_to_discussion_entryで送信する前に確認します。
新しい投稿をする
- すでに述べられている点と重複しないよう、
list_discussion_entriesで既存の投稿を確認します。 - 独自の視点を加えたり、会話を発展させたりする投稿案の作成を学生に支援します。
post_discussion_entryで送信する前に確認します。
使用する MCP ツール
| ツール | 用途 |
|---|---|
list_courses | 対象のコースを探す |
list_discussion_topics | コース内のすべてのディスカッションフォーラムを閲覧する |
list_discussion_entries | ディスカッショントピック内の投稿を表示する |
get_discussion_entry_details | 全文と返信を含む単一の投稿を読む |
get_discussion_topic_details | ディスカッショントピックのメタデータを取得する |
reply_to_discussion_entry | 既存の投稿に返信する |
post_discussion_entry | ディスカッションに新しいトップレベルの投稿を追加する |
create_discussion_topic | 新しいディスカッションフォーラムを作成する |
create_announcement | コースのお知らせを投稿する(教育者) |
send_conversation | Canvas を通じて特定の学生にメッセージを送信する(教育者) |
list_users | 参加状況の追跡用に登録済みの学生を取得する(教育者) |
ベストプラクティス
- 返信する前に読みましょう。 返信を作成する前に、投稿とその返信をすべて読みます。これにより、同じ内容を繰り返さず、会話にしっかり参加できます。
- 似た投稿がすでにないか確認しましょう。 新しい投稿をする前に、既存の投稿を確認し、他の人がすでに述べている内容を重複して投稿しないようにします。既存の意見を踏まえて発展させるか、敬意を持って異なる意見を述べましょう。
- 具体的な点に言及しましょう。 返信するときは、元の投稿の具体的な部分を引用するか、言い換えて触れます。これにより、返信に内容が加わり、注意深く読んだことが伝わります。
- 送信前に確認を取りましょう。 書き込みツール(
reply_to_discussion_entry、post_discussion_entry、create_discussion_topic、create_announcement)を呼び出す前に、必ず下書きをユーザーに提示して承認を得ます。 - ディスカッションの設定を尊重しましょう。 他の投稿を見る前に最初の投稿が必要なディスカッションもあります(
require_initial_post)。他の投稿を表示できない学生は、先に投稿する必要があります。 - 投稿可能な時間に注意しましょう。 トピックの
delayed_post_atとlock_atの日付を確認します。ロックされたディスカッションには投稿しないでください。 - 教育者向けの匿名化に配慮しましょう。 学生の参加状況を確認するときは、匿名化が有効な場合、匿名IDを使用します。Canvas MCP サーバーは、表示名を匿名化しながら、メッセージ送信に必要なユーザーIDを維持します。
例
ユーザー(教育者): 「CS 101の第5週のディスカッションで、まだ投稿していない学生を教えてください。」
エージェント: list_discussion_topicsを呼び出して第5週のトピックを見つけ、次にlist_discussion_entriesを呼び出してすべての投稿を取得し、登録済みの学生と照合します。投稿していない学生を一覧にした参加状況の概要を出力します。
ユーザー: 「その学生たちにリマインダーを送ってください。」
エージェント: ディスカッションの締め切りに触れたリマインダーメッセージを作成し、確認のために提示してから、send_conversationを呼び出して参加していない学生にメッセージを送信します。
ユーザー(学生): 「ケーススタディのディスカッションにあるMariaの投稿に返信したいです。」
エージェント: list_discussion_topicsを呼び出してケーススタディのトピックを見つけ、次にlist_discussion_entriesを呼び出してMariaの投稿を特定し、さらにget_discussion_entry_detailsを呼び出して全文を読みます。Mariaの重要な主張に触れる返信の作成を支援し、確認のために下書きを提示してから、reply_to_discussion_entryを呼び出します。
補足
- ディスカッションに入る前にコース全体の状況を把握したい教育者には、このスキルを
canvas-morning-checkと組み合わせると便利です。 - ディスカッションの投稿はHTMLコンテンツに対応しています。投稿を作成するときは、読みやすさのために段落タグを使い、複雑すぎるマークアップは避けてください。
- 各ユーザーができる操作はCanvas APIの権限によって決まります。コースで許可されていない限り、学生はディスカッショントピックを作成できません。教育者はすべての操作が可能です。
- ディスカッションが多いコースでは、ワークフローを絞り込むため、最近のトピックやピン留めされたトピックでのフィルタリングを提案してください。