mcpField
M
Moodle Student MCP

Moodle Student MCP

ローカル
github.com科学・教育02 日前に更新

Moodle Student MCP について

Moodle Student MCPは、Moodleを使う学生向けの読み取り専用MCPサーバーです。AIアプリからコース、成績、期限、告知を確認でき、課題の要約にも対応しますが、提出や変更はできません。

主な機能

  1. 01コースとコース内容の確認
  2. 02期限と期限超過課題の確認
  3. 03タスクと未提出課題の要約
  4. 04成績と評価項目の参照
  5. 05告知の閲覧とコースファイルの取得
  6. 06すべてのツールが読み取り専用

活用シーン

  1. 01今週や近日中の課題を整理
  2. 02期限超過や未提出の課題を確認
  3. 03コースの成績と評価項目を確認
  4. 04コースの告知やファイル本文を取得

MCP 対応

MCP クライアントに Moodle の参照ツールを提供します。学校の Moodle アドレスとモバイル Web サービスキーで接続し、すべてのツールは読み取り専用です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"anonymousonyx22-moodle-student": {
"command": "npx",
"args": [
"-y",
"moodle-student-mcp"
],
"env": {
"MOODLE_BASE_URL": "<MOODLE_BASE_URL>",
"MOODLE_TOKEN": "<MOODLE_TOKEN>"
}
}
}
}
起動コマンドnpx -y moodle-student-mcp
設定が必要な環境変数
MOODLE_BASE_URLYour school's Moodle address, for example https://moodle.myschool.edu
MOODLE_TOKENシークレットYour Moodle mobile web service key, copied from Preferences > User account > Security keys

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

パッケージ
npmmoodle-student-mcp0.1.7

ツール

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

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

詳細

学生向け Moodle MCP

npx を使って、AI アプリにサーバーを追加します。以下のアプリ用の行に、学校の Moodle アドレスとキーを入力して実行してください。

Moodle MCP サーバーを使って、Moodle で実際に残っている課題を AI に尋ねてみましょう。

これは無料のオープンソースのMoodle MCPサーバーです。Claude Desktop、Claude Code、Cursor、VS Code、その他のローカル MCP サーバーを実行する AI アプリから、Moodle のコース、期限、成績、お知らせを読み取れます。読み取り専用です。提出、編集、削除は一切できません。

モバイルウェブサービスが有効になっている Moodle サイトで動作します。Moodle Pty Ltd とは関係ありません。

永久に無料です。登録もサブスクリプションも必要ありません。ログイン情報が送信されるのは、利用者自身の学校だけです。

インストール

Claude Code

ターミナルで次を実行します。

claude mcp add moodle --env MOODLE_BASE_URL=https://moodle.yourschool.edu --env MOODLE_TOKEN=your-key -- npx -y moodle-student-mcp

すべてのプロジェクトでサーバーを使う場合は、--scope user を追加してください。

Cursor

ターミナルで次を実行します。Cursor はサーバーを mcp.json に保存するため、この行は既存のサーバーをそのまま残しながら、サーバーを ~/.cursor/mcp.json に書き込みます。Windows では、このファイルは %USERPROFILE%\.cursor\mcp.json にあります。

node -e "const fs=require('fs'),os=require('os'),path=require('path'),file=path.join(os.homedir(),'.cursor','mcp.json');let config={};try{config=JSON.parse(fs.readFileSync(file,'utf8'))}catch(error){}config.mcpServers={...(config.mcpServers||{}),moodle:{type:'stdio',command:'npx',args:['-y','moodle-student-mcp'],env:{MOODLE_BASE_URL:'https://moodle.yourschool.edu',MOODLE_TOKEN:'your-key'}}};fs.mkdirSync(path.dirname(file),{recursive:true});fs.writeFileSync(file,JSON.stringify(config,null,2));"
VS Code

ターミナルで次を実行します。

code --add-mcp "{\"name\":\"moodle\",\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"-y\",\"moodle-student-mcp\"],\"env\":{\"MOODLE_BASE_URL\":\"https://moodle.yourschool.edu\",\"MOODLE_TOKEN\":\"your-key\"}}"

JSON 内の引用符はエスケープされているため、Mac または Linux のターミナルでも、Windows のコマンドプロンプトでも同じように実行できます。Windows の PowerShell では、代わりに次の行を使ってください。

code --add-mcp '{\"name\":\"moodle\",\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"-y\",\"moodle-student-mcp\"],\"env\":{\"MOODLE_BASE_URL\":\"https://moodle.yourschool.edu\",\"MOODLE_TOKEN\":\"your-key\"}}'

ユーザープロファイルにサーバーが追加されるため、すべてのプロジェクトで使えます。

Claude Desktop

これを MCP 設定(Claude Desktop の場合は claude_desktop_config.json)に貼り付けます。

{
  "mcpServers": {
    "moodle": {
      "command": "npx",
      "args": ["-y", "moodle-student-mcp"],
      "env": {
        "MOODLE_BASE_URL": "https://moodle.yourschool.edu",
        "MOODLE_TOKEN": "your-key"
      }
    }
  }
}

すでにアプリを起動している場合は再起動してから、次のように尋ねてください。

  • 「今週の期限は何ですか?」
  • 「期限を過ぎたものはありますか?」
  • 「まだ提出できていない課題は何ですか?」
  • 「ネットワーキングの成績は何点ですか?」

デモ

最初から最後までのやり取りを紹介します。「サーバーの回答」の下にある行は、テストに含まれるテスト用 Moodle サイトでこのコードを実行し、ツールが返したテキストをそのままコピーしたものです。コース、日付、お知らせは架空のサンプルデータで、時刻は UTC です。何もインストールする前に回答例を確認するには、このブロックを任意のチャットアプリにコピーしてください。

You: What should I do today?

Tool call: get_todo
{"name":"get_todo","arguments":{}}

The server answers:
Overdue:
- Problem set 1 (Data Structures) was due Mon, Oct 19, 11:59 p.m. UTC, not submitted

Due soon:
- Quiz 1 closes (Networking Basics) is due Fri, Oct 23, 11:59 p.m. UTC
- Lab 3: routing table (Networking Basics) is due Wed, Oct 28, 11:59 p.m. UTC, not submitted
- Lab 4: report draft (Networking Basics) is due Mon, Nov 2, 11:59 p.m. UTC, draft, not submitted
- Problem set 3 (Data Structures) is due Mon, Nov 2, 11:59 p.m. UTC

New announcements:
- Lab 3 is due Friday (Networking Basics, Wed, Oct 21, 9:15 a.m. UTC)
- Week 6 reading (Networking Basics, Tue, Oct 20, 2:05 p.m. UTC)
- Room change for Thursday (Data Structures, Mon, Oct 19, 4:40 p.m. UTC)

The app replies: Start with Problem set 1 in Data Structures, which was due Monday. Quiz 1 closes Friday, the Lab 3 routing table is due Wednesday, and the Lab 4 report draft and Problem set 3 are due Nov 2. The latest announcements mention the Lab 3 deadline, the Week 6 reading and a room change for Data Structures.

You: What's due this week?

Tool call: get_upcoming_due_dates
{"name":"get_upcoming_due_dates","arguments":{}}

The server answers:
- Quiz 1 closes (Networking Basics) due Fri, Oct 23, 11:59 p.m. UTC
- Lab 4 report (Networking Basics) due Wed, Oct 28, 11:59 p.m. UTC
- Problem set 3 (Data Structures) due Mon, Nov 2, 11:59 p.m. UTC

The app replies: Three things are due soon. Quiz 1 closes on Friday, the Lab 4 report is due on Wednesday, and Problem set 3 in Data Structures is due on Monday.

You: What's due in Networking Basics?

Tool call: get_my_courses
{"name":"get_my_courses","arguments":{}}

The server answers:
- Networking Basics [id 11]
- Data Structures [id 12]

Tool call: get_upcoming_due_dates
{"name":"get_upcoming_due_dates","arguments":{"course_ids":[11]}}

The server answers:
- Quiz 1 closes (Networking Basics) due Fri, Oct 23, 11:59 p.m. UTC
- Lab 4 report (Networking Basics) due Wed, Oct 28, 11:59 p.m. UTC

The app replies: Networking Basics has two things due soon: Quiz 1 closes on Friday and the Lab 4 report is due on Wednesday.

You: Is anything overdue?

Tool call: get_overdue
{"name":"get_overdue","arguments":{}}

The server answers:
- Problem set 1 (Data Structures) was due Mon, Oct 19, 11:59 p.m. UTC

The app replies: One thing is overdue: Problem set 1 in Data Structures, which was due on Monday, Oct 19.

You: Which assignments have I not submitted in Networking Basics?

Tool call: get_my_courses
{"name":"get_my_courses","arguments":{}}

The server answers:
- Networking Basics [id 11]
- Data Structures [id 12]

Tool call: get_assignments
{"name":"get_assignments","arguments":{"course_id":11}}

The server answers:
- Lab 1: LAN cabling due Fri, Oct 9, 11:59 p.m. UTC graded 8.00 / 10.00
- Lab 2: subnetting worksheet due Fri, Oct 16, 11:59 p.m. UTC submitted
- Lab 3: routing table due Wed, Oct 28, 11:59 p.m. UTC not submitted
- Lab 4: report draft due Mon, Nov 2, 11:59 p.m. UTC draft, not submitted

The app replies: Networking Basics is course 11. Lab 3 routing table has not been submitted, and Lab 4 report draft is still a draft, so it is saved but not handed in. Lab 2 was submitted and Lab 1 is graded 8.00 out of 10.

You: What work am I still missing?

Tool call: get_missing_work
{"name":"get_missing_work","arguments":{}}

The server answers:
- Problem set 1 (Data Structures) was due Mon, Oct 19, 11:59 p.m. UTC, not submitted
- Lab 3: routing table (Networking Basics) is due Wed, Oct 28, 11:59 p.m. UTC, not submitted
- Lab 4: report draft (Networking Basics) is due Mon, Nov 2, 11:59 p.m. UTC, draft, not submitted
- Problem set 2 (Data Structures) is due Fri, Nov 6, 11:59 p.m. UTC, not submitted

The app replies: Four assignments are still not handed in. Problem set 1 in Data Structures was due on Oct 19, Lab 3 routing table in Networking Basics is due on Oct 28, the Lab 4 report draft in Networking Basics is due on Nov 2 and is still only a draft, and Problem set 2 in Data Structures is due on Nov 6.

You: How am I doing in Networking Basics?

Tool call: get_my_courses
{"name":"get_my_courses","arguments":{}}

The server answers:
- Networking Basics [id 11]
- Data Structures [id 12]

Tool call: get_my_grades
{"name":"get_my_grades","arguments":{}}

The server answers:
- Networking Basics 88.50
- Data Structures no grade posted yet

Tool call: get_course_grade_items
{"name":"get_course_grade_items","arguments":{"course_id":11}}

The server answers:
- Lab 1: LAN cabling 8.00 (80.00 %)
- Lab 2: subnetting worksheet 9.00 (90.00 %)
- Course total 88.50 (88.50 %)

The app replies: Networking Basics has a course total of 88.50, which is 88.50 percent. Lab 1 is 8.00 (80.00 percent) and Lab 2 is 9.00 (90.00 percent). Data Structures has no grade posted yet.

You: Any new announcements?

Tool call: get_announcements
{"name":"get_announcements","arguments":{}}

The server answers:
- Lab 3 is due Friday (Networking Basics, Wed, Oct 21, 9:15 a.m. UTC)
  Bring your laptop and the patched topology sheet.
- Week 6 reading (Networking Basics, Tue, Oct 20, 2:05 p.m. UTC)
  Read chapters 4 and 5 before the quiz.
- Room change for Thursday (Data Structures, Mon, Oct 19, 4:40 p.m. UTC)
  Data Structures meets in room B12 this week.

The app replies: Three announcements. Lab 3 is due Friday, so bring your laptop and the patched topology sheet. Week 6 reading says to read chapters 4 and 5 before the quiz. Data Structures has a room change for Thursday.

クイックスタート

  1. Moodle でプロフィールメニューを開き、設定 > ユーザーアカウント > セキュリティキーに移動します。Moodle モバイルウェブサービスのキーをコピーしてください。Moodle モバイルウェブサービスキーの取得ガイドでは、各手順に加えて、ページやキーが見つからない場合の対処方法も説明しています。
  2. 上記のコマンドまたは設定ブロックに、学校の Moodle アドレスとキーを入力します。
  3. AI アプリを再起動して、上記の質問を1つ尋ねてください。

最初に設定を確認するには、2つの環境変数を設定した状態で npx moodle-student-mcp doctor を実行します。

セキュリティキーのページが見つからない場合、学校でモバイルウェブサービスが無効になっているか、キーを表示しないシングルサインオンでログインしている可能性があります。その場合、このサーバーはアカウントに接続できません。

質問できること

  • 「今週の期限は何ですか?」
  • 「ネットワーキング基礎の期限は何ですか?」
  • 「今後2週間の期限は何ですか?」
  • 「今日は何をすればよいですか?」
  • 「期限を過ぎたものはありますか?」
  • 「ネットワーキング基礎で期限を過ぎたものはありますか?」
  • 「まだ提出できていない課題は何ですか?」
  • 「各コースの成績と、ネットワーキングの評定表の内容を教えてください」
  • 「新しいお知らせはありますか?」
  • 「まだ提出していない課題はどれですか?」

ツール

すべてのツールは読み取り専用です。

ツール機能
get_my_courses現在のコースとその ID
get_upcoming_due_dates今後 60 日以内に期限を迎える、まだ対応が必要な項目を期限が近い順に表示します。「コース開始」などの通常のコースイベントは除外されます。任意でコース ID のリスト course_ids を指定できます
get_overdue期限を過ぎていて、まだ対応が必要な項目を表示します。任意でコース ID のリスト course_ids を指定できます
get_todo次にやることをまとめて表示します。期限超過の課題、期限が近い課題、期限のない課題、最新のお知らせの件名を、それぞれコース名と期限とともに表示します。任意でコース ID のリスト course_ids に加えて、表示期間を設定する days_ahead と overdue_days を指定できます
get_assignmentsコースの課題を、期限と提出状況とともに表示します。get_my_courses の course_id を指定します
get_missing_workまだ提出していない課題を、下書きも含め、コース名と期限とともに表示します。任意でコース ID のリスト course_ids を指定できます
get_my_grades各コースの現在の成績
get_course_grade_itemsコース内の採点対象項目をすべて、評価点と割合とともに表示します。get_my_courses の course_id を指定します
get_course_contentコースのセクションとアクティビティを、ファイル名およびキーを含まないリンクとともに表示します。get_my_courses の course_id を指定します
get_file学校の Moodle サイトからコースファイルをダウンロードし、そのテキストを返します。PDF などのテキストではないファイルの場合は、ファイル名、リンク、Moodle で開くよう促すメモを返します。get_course_content の file_url を指定します
get_announcements最近のお知らせを、それぞれのコース名と日付とともに表示します。Moodle を開けないコースのお知らせは除外されます。任意でコース ID のリスト course_ids を指定できます

プライバシーとセキュリティ

  • キーはお使いのコンピューター上に保存されます。送信先はご自身の学校の Moodle アドレスのみです。
  • このプロジェクトから他のサーバーにデータが送信されることはありません。
  • get_file は、学校の Moodle アドレスを指すリンクのみをダウンロードします。それ以外を指すリンクは拒否されるため、コースページやお知らせ内のリンクからキーが漏れることはありません。
  • すべてのツールは読み取り専用として設定されています。キーは「Security keys」ページでいつでもリセットできます。

トラブルシューティング

設定に問題がある場合、すべてのツールは以下のメッセージを返します。それぞれに対処方法が記載されています。

メッセージ対処方法
Not signed inキーの有効期限が切れたか、リセットされました。Preferences > User account > Security keys から新しいキーをコピーし、MOODLE_TOKEN を更新してください。
Access denied学校が学生向けにこの機能を無効にしています。自分でキーをコピーした場合は、Preferences > User account > Security keys にある Moodle モバイルウェブサービス用のキーであることを確認してください。
Web services not enabled学校でモバイルウェブサービスが有効になっていないため、Preferences > User account > Security keys に Moodle モバイルウェブサービス用のキーがありません。学校に有効化を依頼してください。
Not foundget_my_courses でコース ID を確認してください。
The school's server sent a reply this server can't readMOODLE_BASE_URL が Moodle サイトのアドレスを指していることを確認してください。

開発

npm install
npm run build
npm test

テストランナーに必要なため、開発には Node 22.12 以降が必要です。サーバー自体は Node 20 以降で動作します。

テストは偽の Moodle サーバーに対して実行されるため、アカウントもネットワークも必要ありません。

上記のデモのやり取りは、同じコードから生成されています。ツールを変更した後に npm run demo を実行すると、再度表示できます。npm test を実行すると、README の内容がツールの応答と一致しているか確認できます。

Moodle を調べる時間を節約できた場合は、リポジトリにスターを付けてください。現在スターは 0 個です。スターが 1 つ付くだけでも、次の学生がこのプロジェクトを見つけやすくなります。

Moodle と Brightspace の比較

どちらも学生向けの無料オープンソースの読み取り専用 MCP サーバーです。学校で使われている学習プラットフォームに合わせて選んでください。学校で両方を使っている場合や、複数の学校を行き来する場合は、MCP 設定で異なるサーバー名を付けて、両方を並行して実行できます。

Moodle MCPBrightspace MCP
学習プラットフォームMoodleD2L Brightspace
サインインMoodle の「Security keys」ページにあるモバイルウェブサービスキーブラウザーでサインイン。Microsoft、Duo、Okta、Shibboleth に対応
学校側で必要な設定モバイルウェブサービスを有効にする必要がありますなし
コース、締め切り、成績はいはい
課題ごとの提出状況はいはい
コースのファイルはいはい
お知らせはいはい
ディスカッション、名簿、カレンダー、成績の見通しいいえはい
目標成績計算ツールいいえはい
料金無料無料

その他の無料学生向け MCP サーバー

すべて無料のオープンソースで、アカウントにアクセスする場合も読み取り専用です。全リストは brightspacemcp.com/more-mcps でご覧ください。

サーバー機能
Brightspace MCPAI 向けの D2L Brightspace です。実際の提出状況を含む締め切り、成績、目標成績計算ツール、コースのファイルを確認できます。
Canvas MCPAI 向けの読み取り専用 Canvas LMS です。締め切り、未提出の課題、成績、お知らせを確認できます。
Google Classroom MCPAI 向けの読み取り専用 Google Classroom です。ToDo、締め切り、未提出の課題、成績を確認できます。
GPA Calculator MCPAI 向けの GPA、成績換算、期末試験で必要な成績を計算できます。オフラインで動作し、アカウントは不要です。
Citations MCPDOI、ISBN、または入力した詳細情報から APA、MLA、Chicago 形式の引用を作成できます。アカウントは不要です。
Study Planner MCP試験の学習スケジュール、間隔反復の日程、ポモドーロ計画、課題のマイルストーンを作成できます。オフラインで動作します。
Paper Finder MCPOpenAlex を通じて学術論文を検索し、オープンアクセス版や関連研究を見つけられます。キーは不要です。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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