🚀 N Lobby MCP Server
N Lobby MCP Serverは、N Lobby学校ポータルのデータにアクセスするためのModel Context Protocol (MCP)サーバーです。このサーバーは、ブラウザベースの認証を通じて、学校のお知らせ、スケジュール、学習リソースなどの情報に安全にアクセスできるようにします。
⚠️ 重要注意
このMCPサーバーを使用して生じた損害について、開発者は一切の責任を負いません。このソフトウェアは教育目的で開発されており、その動作は保証されていません。
✨ 主な機能
- ブラウザベースの認証:自動化されたブラウザウィンドウを介した対話型ログイン
- Cookieベースのセッション管理:NextAuth.jsのCookieを使用した安全なセッション管理
- 学校情報へのアクセス:お知らせ、スケジュール、学習リソースの取得
- 必須科目管理:必須科目の情報と学術データへのアクセス
- 複数のカレンダータイプ:個人用と学校用の両方のカレンダーをサポート
- ユーザーロールサポート:学生、保護者、職員に対する異なるアクセスレベル
- MCPプロトコル準拠:MCP対応のAIアシスタントとの完全互換性
- 高度なテストツール:組み込みのデバッグとテスト機能
📦 インストール
オプション1: npmからインストール(推奨)
npm install -g nlobby-mcp
オプション2: 開発用インストール
- リポジトリをクローンします:
git clone https://github.com/minagishl/nlobby-mcp.git
cd nlobby-mcp
- 依存関係をインストールします:
pnpm install
- 環境変数を設定します:
cp .env.example .env
- プロジェクトをビルドします:
pnpm run build
🛠️ 設定
以下の変数を持つ.envファイルを作成します(オプション、デフォルト値が提供されています):
# N Lobby Configuration
NLOBBY_BASE_URL=https://nlobby.nnn.ed.jp
# MCP Server Configuration
MCP_SERVER_NAME=nlobby-mcp
MCP_SERVER_VERSION=1.0.0
💻 使用例
サーバーの起動
npmでインストールした場合:
nlobby-mcp
開発用インストールの場合:
pnpm run start
Cursorと他のMCPクライアントでのセットアップ
Cursor IDEのセットアップ

Cursorの設定ファイル (~/.cursor/config.json) に以下を追加します:
{
"mcpServers": {
"nlobby": {
"command": "npx",
"args": ["-y", "nlobby-mcp"],
"env": {
"NLOBBY_BASE_URL": "https://nlobby.nnn.ed.jp"
}
}
}
}
Claude Desktopのセットアップ
Claude Desktopの設定ファイル (~/Library/Application Support/Claude/claude_desktop_config.json on macOS) に以下を追加します:
{
"mcpServers": {
"nlobby": {
"command": "npx",
"args": ["-y", "nlobby-mcp"],
"env": {
"NLOBBY_BASE_URL": "https://nlobby.nnn.ed.jp"
}
}
}
}
その他のMCPクライアント
MCP互換のクライアントでは、以下を使用します:
- コマンド:
nlobby-mcp(グローバルにインストールされている場合)または node /path/to/nlobby-mcp/dist/index.js
- プロトコル:stdio
- 環境:設定セクションに記載されているオプションの環境変数
MCPリソース
サーバーは以下のリソースを提供します:
nlobby://news - 学校のニュースとお知らせ
nlobby://schedule - 日々の授業スケジュールとイベント
nlobby://required-courses - 必須科目と学術情報
nlobby://user-profile - 現在のユーザー情報
MCPツール
利用可能なツール:
認証ツール
interactive_login - N Lobbyに手動でログインするためのブラウザを開く(推奨)
login_help - パーソナライズされたログインヘルプとトラブルシューティングを取得
set_cookies - 認証Cookieを手動で設定
check_cookies - 認証Cookieの状態を確認
verify_authentication - すべてのクライアントでの認証状態を検証
データ取得ツール
get_news - フィルタリングとソートオプション付きで学校のニュースを取得
get_news_detail - 特定のニュース記事の詳細情報を取得
get_required_courses - フィルタリングオプション付きで必須科目の情報を取得
get_schedule - 特定の日付のスケジュールを取得(下位互換性)
get_calendar_events - 高度なオプション付きでカレンダーイベントを取得(個人用/学校用)
test_calendar_endpoints - 個人用と学校用の両方のカレンダーエンドポイントをテスト
mark_news_as_read - ニュース記事を既読にマーク
デバッグツール
health_check - N Lobby APIの接続をテスト
debug_connection - 詳細情報を含めてN Lobbyの接続をデバッグ
test_page_content - ページコンテンツの取得をテストし、サンプルコンテンツを表示
test_trpc_endpoint - 詳細なレスポンスを含めて特定のtRPCエンドポイントをテスト
MCPプロンプト
このサーバーは事前に設定されたプロンプトを提供しません。
🔑 認証フロー
方法1: 対話型ブラウザログイン(推奨)
interactive_loginツールを使用します(資格情報は不要)
- ブラウザウィンドウがN Lobbyに開きます
- ブラウザで手動でログインプロセスを完了します
- システムがログインを検出し、自動的にCookieを抽出します
- すぐに実際のN Lobbyデータにアクセスできます
方法2: 手動Cookie設定
- ウェブブラウザでN Lobbyにログインします
- ブラウザの開発者ツールからCookieを抽出します:
- 開発者ツールを開きます(F12)
- アプリケーション/ストレージタブに移動します
- すべてのCookieを文字列としてコピーします
- 完全なCookie文字列を使用して
set_cookiesツールを使用します
health_checkツールを使用して接続を検証します
- 他のツールを介して実際のN Lobbyデータにアクセスします
クイックスタート例
学生用
login_help email="your.name@nnn.ed.jp"
interactive_login
get_news
get_news_detail newsId="980"
get_news_detail newsId="980" markAsRead=true
get_calendar_events calendar_type="personal" period="today"
get_calendar_events calendar_type="school" period="week"
get_required_courses
get_required_courses grade=2
mark_news_as_read id="980"
職員用
login_help email="your.name@nnn.ac.jp"
interactive_login
test_calendar_endpoints
保護者用
login_help email="parent@gmail.com"
interactive_login
get_news
get_calendar_events calendar_type="personal" period="today"
トラブルシューティング
login_help
health_check
check_cookies
verify_authentication
debug_connection
test_page_content endpoint="/news"
必須科目
get_required_coursesツールを使用すると、学術科目の情報を取得できます:
get_required_courses
get_required_courses grade=1
get_required_courses grade=2
get_required_courses grade=2 semester="2024"
レスポンスには包括的な科目情報が含まれます:
- 科目詳細:科目コード/名前、カリキュラムコード/名前
- 学術単位:学術単位数と承認単位数
- 進捗追跡:報告の完了率、平均点数
- ステータス情報:取得ステータス、評価成績
- テスト情報:試験ステータス、定期試験結果、補欠試験URL
- 在学データ:出席回数と要件
- 時間情報:学期年度、学年(1年次, 2年次, 3年次)
- 計算フィールド:進捗率、完了ステータス、平均点数
カレンダーイベント
get_calendar_eventsツールは高度なオプションをサポートします:
get_calendar_events calendar_type="personal" period="today"
get_calendar_events calendar_type="school" period="week"
get_calendar_events calendar_type="personal" from_date="2024-01-15" to_date="2024-01-20"
get_calendar_events calendar_type="personal" from_date="2024-01-15"
Cookieフォーマット
set_cookiesを使用する場合、ブラウザからの完全なCookie文字列を提供します:
__Secure-next-auth.session-token=ey...; __Host-next-auth.csrf-token=abc123...; other-cookies=values;
👥 ユーザータイプ
サーバーは、メールドメインに基づいて3種類のユーザータイプをサポートしています:
- 学生:
@nnn.ed.jp
- 職員:
@nnn.ac.jp
- 保護者:その他の登録済みメールアドレス(Gmail、Yahoo、会社のメールなど)
🛠️ 開発
スクリプト
pnpm run build - TypeScriptプロジェクトをビルド
pnpm run dev - 開発用のウォッチモード
pnpm run start - MCPサーバーを起動
pnpm run test - テストを実行
pnpm run lint - コードをリント
pnpm run format - コードをフォーマット
プロジェクト構造
src/
├── index.ts # エントリーポイント
├── server.ts # MCPサーバーの実装
├── api.ts # N Lobby APIの統合
├── browser-auth.ts # ログイン用のブラウザ自動化
├── credential-manager.ts # ユーザー資格情報の検証と管理
├── nextauth.ts # NextAuth.jsのセッション管理
├── trpc-client.ts # API呼び出し用のtRPCクライアント
├── config.ts # 設定管理
├── logger.ts # ロギングユーティリティ
└── types.ts # TypeScriptの型定義
アーキテクチャ
サーバーは、認証とAPIアクセスに複数のレイヤーを使用しています:
- ブラウザ認証:対話型ログイン用の自動化されたブラウザ
- Cookie管理:NextAuth.jsのセッションCookieを処理
- HTTPクライアント:REST API呼び出し用のAxiosベースのクライアント
- tRPCクライアント:tRPCエンドポイント用の型安全なクライアント
- 資格情報マネージャー:ユーザータイプを検証し、ガイダンスを提供
🔒 セキュリティに関する注意事項
- すべての認証トークンはメモリ内にのみ保存されます
- サーバーは安全なCookieベースの認証を使用しています
- アクセスは承認されたN High School Groupのメールドメインに制限されています
- 機密データはログに記録されたり永続化されたりすることはありません
- ブラウザ自動化は認証にのみ使用され、データスクレイピングには使用されません
🐞 トラブルシューティング
一般的な問題
- 認証失敗:最も信頼性の高い認証方法として
interactive_loginを使用してください
- Cookie同期問題:
verify_authenticationを実行して同期を確認してください
- 接続問題:診断には
health_checkとdebug_connectionを使用してください
- 結果が空:認証されていることと適切な権限を持っていることを確認してください
デバッグツール
サーバーには包括的なデバッグツールが含まれています:
debug_connection - ネットワークと認証のデバッグ
test_page_content - コンテンツ取得のテスト
test_trpc_endpoint - APIエンドポイントのテスト
verify_authentication - 認証ステータスの検証
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています - 詳細についてはLICENSEファイルを参照してください。