🚃 乗換案内MCP - 乗り換え検索 / Norikae MCP - Japanese train route search using Yahoo! Transit
乗換案内MCP 🚃 / Norikae MCP
日本の電車乗り換え検索ができるMCP(Model Context Protocol)サーバーです。 Yahoo!乗換案内のデータを使用して、駅から駅への最適なルートを検索できます。
An MCP (Model Context Protocol) server for searching train routes in Japan. Uses Yahoo! Transit data to find optimal routes between stations.
機能 / Features
- 🚉 駅から駅への乗り換えルート検索 / Station-to-station route search
- 🔀 経由駅の指定(最大3駅)/ Via station specification (up to 3 stations)
- ⏰ 指定時刻での検索(出発・到着時刻指定)/ Departure or arrival time specification
- 💰 IC運賃の表示 / IC card fare display
- 🔄 乗り換え回数・所要時間の比較 / Transfer count and travel time comparison
必要条件 / Requirements
- Node.js 18以上 / Node.js 18+
インストール / Installation
npm install -g norikae-mcp
または、npxで直接実行 / Or run directly with npx:
npx norikae-mcp
設定 / Configuration
Claude Desktop での設定 / Claude Desktop Configuration
設定ファイルを開いて以下を追加してください:
Open the config file and add the following:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"norikae": {
"command": "npx",
"args": ["-y", "norikae-mcp"]
}
}
}
設定後、Claude Desktopを再起動してください。
After saving, restart Claude Desktop.
Cursor での設定 / Cursor Configuration
~/.cursor/mcp.json または プロジェクトの .cursor/mcp.json に以下を追加:
Add the following to ~/.cursor/mcp.json or your project's .cursor/mcp.json:
{
"mcpServers": {
"norikae": {
"command": "npx",
"args": ["-y", "norikae-mcp"]
}
}
}
使用できるツール / Available Tools
search_route
駅から駅への電車ルートを検索します。
Search for train routes between stations.
パラメータ / Parameters:
| パラメータ | 型 | 必須 | 説明 / Description |
|-----------|------|------|---------------------|
| from | string | ✅ | 出発駅名 / Departure station (e.g., 東京, 新宿) |
| to | string | ✅ | 到着駅名 / Arrival station (e.g., 九段下, 横浜) |
| via | string[] | - | 経由駅名の配列(最大3駅)/ Via stations array (max 3) |
| year | number | - | 出発年 / Year (default: current) |
| month | number | - | 出発月 / Month (default: current) |
| day | number | - | 出発日 / Day (default: current) |
| hour | number | - | 時 / Hour (default: current) |
| minute | number | - | 分 / Minute (default: current) |
検索オプション / Search Options:
| パラメータ | 型 | デフォルト | 説明 / Description |
|-----------|------|----------|---------------------|
| timeType | departure | arrival | first_train | last_train | unspecified | departure | 時刻指定タイプ / Time type |
| ticket | ic | cash | ic | 運賃タイプ / Fare type |
| seatPreference | non_reserved | reserved | green | non_reserved | 座席指定 / Seat preference |
| walkSpeed | fast | slightly_fast | slightly_slow | slow | slightly_slow | 歩く速度 / Walking speed |
| sortBy | time | transfer | fare | time | 並び順 / Sort order |
交通手段オプション / Transport Options:
| パラメータ | 型 | デフォルト | 説明 / Description |
|-----------|------|----------|---------------------|
| useAirline | boolean | true | 空路を使う / Use airlines |
| useShinkansen | boolean | true | 新幹線を使う / Use Shinkansen |
| useExpress | boolean | true | 有料特急を使う / Use express trains |
| useHighwayBus | boolean | true | 高速バスを使う / Use highway buses |
| useLocalBus | boolean | true | 路線バスを使う / Use local buses |
| useFerry | boolean | true | フェリーを使う / Use ferries |
使用例(自然言語 → オプション)/ Usage Examples (Natural Language → Options)
AIに以下のように話しかけると、自動的に適切なオプションが設定されます。
When you ask the AI in natural language, the appropriate options are automatically set.
基本的な検索 / Basic Search
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「東京から九段下まで」 | from: 東京, to: 九段下 |
| 「新宿から横浜への行き方」 | from: 新宿, to: 横浜 |
| "How to get from Tokyo to Shibuya" | from: 東京, to: 渋谷 |
| "Route from Shinjuku to Yokohama" | from: 新宿, to: 横浜 |
経由駅の指定 / Via Stations
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「東京から新宿まで、表参道経由で」 | from: 東京, to: 新宿, via: ["表参道"] |
| 「渋谷から池袋、原宿と新宿を経由して」 | from: 渋谷, to: 池袋, via: ["原宿", "新宿"] |
| 「品川から上野、東京駅と秋葉原を通って」 | from: 品川, to: 上野, via: ["東京", "秋葉原"] |
| "From Tokyo to Shinjuku via Omotesando" | from: 東京, to: 新宿, via: ["表参道"] |
| "Shibuya to Ikebukuro, passing through Harajuku and Shinjuku" | from: 渋谷, to: 池袋, via: ["原宿", "新宿"] |
時刻指定 / Time Specification
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「10時30分に出発」 | hour: 10, minute: 30 |
| 「朝8時の電車」 | hour: 8 |
| 「明日の朝9時」 | day: (tomorrow), hour: 9 |
| "Departing at 10:30 AM" | hour: 10, minute: 30 |
| "Train at 8 in the morning" | hour: 8 |
到着時刻指定 / Arrival Time (timeType)
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「18時に着きたい」 | timeType: arrival, hour: 18 |
| 「9時の会議に間に合うように」 | timeType: arrival, hour: 9 |
| "I want to arrive by 6 PM" | timeType: arrival, hour: 18 |
| "Need to be there for a 9 AM meeting" | timeType: arrival, hour: 9 |
始発・終電 / First/Last Train (timeType)
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「始発で」 | timeType: first_train |
| 「一番早い電車」 | timeType: first_train |
| 「終電で帰りたい」 | timeType: last_train |
| 「最終電車は?」 | timeType: last_train |
| "First train of the day" | timeType: first_train |
| "Last train home" | timeType: last_train |
座席指定 / Seat Preference (seatPreference)
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「自由席で」 | seatPreference: non_reserved (default) |
| 「指定席で」 | seatPreference: reserved |
| 「グリーン車で」 | seatPreference: green |
| 「贅沢にグリーン車で」 | seatPreference: green |
| "Non-reserved seat" | seatPreference: non_reserved |
| "Reserved seat please" | seatPreference: reserved |
| "Green car / first class" | seatPreference: green |
運賃タイプ / Fare Type (ticket)
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「IC運賃で」 | ticket: ic (default) |
| 「きっぷの値段で」 | ticket: cash |
| 「Suicaで」 | ticket: ic |
| "Using IC card" | ticket: ic |
| "Cash fare please" | ticket: cash |
歩く速度 / Walking Speed (walkSpeed)
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「急いでるので早歩きで」 | walkSpeed: fast |
| 「ゆっくり歩きたい」 | walkSpeed: slow |
| 「足が悪いのでゆっくり」 | walkSpeed: slow |
| "I'm in a hurry, fast walking" | walkSpeed: fast |
| "Walking slowly, I have luggage" | walkSpeed: slow |
並び順 / Sort Order (sortBy)
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「一番早いルート」 | sortBy: time (default) |
| 「一番安いルート」 | sortBy: fare |
| 「乗り換え少ないのがいい」 | sortBy: transfer |
| "Fastest route" | sortBy: time |
| "Cheapest route" | sortBy: fare |
| "Fewest transfers" | sortBy: transfer |
交通手段の除外 / Excluding Transport Types
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|------------------------------|------------------------------------------|
| 「新幹線を使わないで」 | useShinkansen: false |
| 「在来線だけで」 | useShinkansen: false, useExpress: false |
| 「バスは乗りたくない」 | useHighwayBus: false, useLocalBus: false |
| "Without Shinkansen" | useShinkansen: false |
| "Local trains only" | useShinkansen: false, useExpress: false |
| "No buses please" | useHighwayBus: false, useLocalBus: false |
組み合わせ例 / Combined Examples
例1 / Example 1: 出張で節約したい / Budget business trip
「明日の朝10時までに東京から大阪に着きたい、新幹線なしで、一番安いルートで」
"I need to arrive in Osaka from Tokyo by 10 AM tomorrow, without Shinkansen, cheapest route"
→ from: 東京, to: 大阪, timeType: arrival, hour: 10, useShinkansen: false, sortBy: fare
例2 / Example 2: 観光でゆっくり / Leisurely sightseeing
「京都から奈良まで、ゆっくり歩きで」
"From Kyoto to Nara, walking slowly"
→ from: 京都, to: 奈良, walkSpeed: slow
例3 / Example 3: 急いでいる / In a hurry
「今すぐ渋谷から羽田空港、最速で、早歩きで」
"Right now from Shibuya to Haneda Airport, fastest route, fast walking"
→ from: 渋谷, to: 羽田空港, sortBy: time, walkSpeed: fast
例4 / Example 4: 複雑な条件 / Complex conditions
「来週の金曜日、18時に品川に着くように新宿から、新幹線と飛行機は使わないで、乗り換え少ない順で」
"Next Friday, arriving at Shinagawa by 6 PM from Shinjuku, no Shinkansen or planes, fewest transfers"
→ from: 新宿, to: 品川, timeType: arrival, hour: 18, useShinkansen: false, useAirline: false, sortBy: transfer
例5 / Example 5: 経由駅を指定 / Specifying via stations
「東京から新宿まで、表参道と飯田橋を経由して、一番安いルートで」
"From Tokyo to Shinjuku via Omotesando and Iidabashi, cheapest route"
→ from: 東京, to: 新宿, via: ["表参道", "飯田橋"], sortBy: fare
例6 / Example 6: 観光ルート / Sightseeing route
「浅草から原宿まで、上野と秋葉原と東京を通って、ゆっくり歩きで」
"From Asakusa to Harajuku, passing through Ueno, Akihabara, and Tokyo, walking slowly"
→ from: 浅草, to: 原宿, via: ["上野", "秋葉原", "東京"], walkSpeed: slow
開発 / Development
# リポジトリをクローン / Clone the repository
git clone https://github.com/YOUR_USERNAME/norikae-mcp.git
cd norikae-mcp
# 依存関係のインストール / Install dependencies
npm install
# ビルド / Build
npm run build
# 開発モード / Development mode (watch)
npm run dev
# テスト実行 / Run tests
npm test
技術詳細 / Technical Details
- MCP SDK:
@modelcontextprotocol/sdk - データソース / Data source: Yahoo!乗換案内 (transit.yahoo.co.jp)
- ランタイム / Runtime: Node.js 18+
注意事項 / Notes
- このMCPはYahoo!乗換案内のWebページをスクレイピングしています This MCP scrapes Yahoo! Transit web pages
- 個人利用を想定しています Intended for personal use
- Yahoo! JAPANの利用規約をご確認ください Please check Yahoo! JAPAN's terms of service
- リアルタイムの遅延情報は含まれない場合があります Real-time delay information may not be included
ライセンス / License
MIT