norikae-mcp

๐Ÿšƒ ไน—ๆ›ๆกˆๅ†…MCP - ํ™˜์Šน ์•ˆ๋‚ด / Norikae MCP - ์•ผํ›„ ๊ตํ†ต์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•œ ์ผ๋ณธ ์—ด์ฐจ ๊ฒฝ๋กœ ๊ฒ€์ƒ‰

๋ฌธ์„œ

ไน—ๆ›ๆกˆๅ†…MCP ๐Ÿšƒ / Norikae MCP

npm version License: MIT

ๆ—ฅๆœฌใฎ้›ป่ปŠไน—ใ‚Šๆ›ใˆๆคœ็ดขใŒใงใใ‚‹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
fromstringโœ…ๅ‡บ็™บ้ง…ๅ / Departure station (e.g., ๆฑไบฌ, ๆ–ฐๅฎฟ)
tostringโœ…ๅˆฐ็€้ง…ๅ / Arrival station (e.g., ไนๆฎตไธ‹, ๆจชๆตœ)
viastring[]-็ตŒ็”ฑ้ง…ๅใฎ้…ๅˆ—๏ผˆๆœ€ๅคง3้ง…๏ผ‰/ Via stations array (max 3)
yearnumber-ๅ‡บ็™บๅนด / Year (default: current)
monthnumber-ๅ‡บ็™บๆœˆ / Month (default: current)
daynumber-ๅ‡บ็™บๆ—ฅ / Day (default: current)
hournumber-ๆ™‚ / Hour (default: current)
minutenumber-ๅˆ† / Minute (default: current)

ๆคœ็ดขใ‚ชใƒ—ใ‚ทใƒงใƒณ / Search Options:

ใƒ‘ใƒฉใƒกใƒผใ‚ฟๅž‹ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่ชฌๆ˜Ž / Description
timeTypedeparture | arrival | first_train | last_train | unspecifieddepartureๆ™‚ๅˆปๆŒ‡ๅฎšใ‚ฟใ‚คใƒ— / Time type
ticketic | cashic้‹่ณƒใ‚ฟใ‚คใƒ— / Fare type
seatPreferencenon_reserved | reserved | greennon_reservedๅบงๅธญๆŒ‡ๅฎš / Seat preference
walkSpeedfast | slightly_fast | slightly_slow | slowslightly_slowๆญฉใ้€Ÿๅบฆ / Walking speed
sortBytime | transfer | faretimeไธฆใณ้ † / Sort order

ไบค้€šๆ‰‹ๆฎตใ‚ชใƒ—ใ‚ทใƒงใƒณ / Transport Options:

ใƒ‘ใƒฉใƒกใƒผใ‚ฟๅž‹ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ่ชฌๆ˜Ž / Description
useAirlinebooleantrue็ฉบ่ทฏใ‚’ไฝฟใ† / Use airlines
useShinkansenbooleantrueๆ–ฐๅนน็ทšใ‚’ไฝฟใ† / Use Shinkansen
useExpressbooleantrueๆœ‰ๆ–™็‰นๆ€ฅใ‚’ไฝฟใ† / Use express trains
useHighwayBusbooleantrue้ซ˜้€Ÿใƒใ‚นใ‚’ไฝฟใ† / Use highway buses
useLocalBusbooleantrue่ทฏ็ทšใƒใ‚นใ‚’ไฝฟใ† / Use local buses
useFerrybooleantrueใƒ•ใ‚งใƒชใƒผใ‚’ไฝฟใ† / 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