Michelin Guide MCP
No description available
Ask AI about Michelin Guide MCP
Powered by Claude Β· Grounded in docs
I know everything about Michelin Guide MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
MCP Michelin Guide Server
About
An MCP (Model Context Protocol) server that lets you search Michelin Guide restaurants worldwide from Claude Code.
Powered by a local SQLite database with the FTS5 full-text search engine for fast, accurate queries -- with a web fallback to supplement the latest information from the official Michelin Guide site.
Key Features
- Multi-criteria restaurant search -- Combine free-text search, city, country, cuisine type, award level, Green Star, and price level
- Restaurant detail lookup -- Get 17-field details by name (partial match) or Michelin Guide URL
- Web fallback search -- Fetches the latest info from the Michelin Guide website when local data is insufficient
- ~18,900 restaurants worldwide -- Based on open-source data updated monthly
- Local-first architecture -- Fast search with SQLite + FTS5, no network required
Architecture
flowchart LR
subgraph "Data Pipeline"
CSV["CSV Source Data<br/>ngshiheng/michelin-my-maps"]
SETUP["src/scripts/setup-data.ts"]
DB["data/michelin.db<br/>SQLite + FTS5"]
CSV -->|Download & Parse| SETUP -->|Create Tables & Index| DB
end
subgraph "MCP Server"
INDEX["src/index.ts<br/>stdio transport"]
DB_MOD["src/db.ts<br/>Query Engine"]
subgraph "Tools"
T1["search_restaurants<br/>Multi-criteria Search"]
T2["get_restaurant_detail<br/>Detail Lookup"]
T3["search_latest_info<br/>Web Fallback"]
end
INDEX --- T1 & T2 & T3
T1 & T2 -->|Query| DB_MOD
T3 -->|Query| DB_MOD
end
DB_MOD -->|Local Query| DB
T3 -->|Fallback| WEB["guide.michelin.com"]
CLAUDE["Claude Code"] <-->|MCP stdio| INDEX
Prerequisites
| Item | Version | Note |
|---|---|---|
| Node.js | >= 18 | LTS recommended |
| npm | >= 9 | Included with Node.js |
| Claude Code | Latest | MCP client |
Installation
1. Clone the repository
git clone https://github.com/anhyobin/michelin-guide-mcp.git
cd michelin-guide-mcp
2. Install dependencies
npm install
3. Initialize the database
Downloads the CSV source data and creates the SQLite database.
npm run setup
This command will:
- Download the latest CSV from the ngshiheng/michelin-my-maps repository
- Parse the CSV and clean the data
- Create
data/michelin.dbwith the restaurants table + FTS5 virtual table
4. Build
npm run build
Claude Code Integration
Option 1: Using .mcp.json (Recommended)
Create or edit a .mcp.json file in your project root:
{
"mcpServers": {
"michelin-guide": {
"command": "node",
"args": ["build/index.js"],
"cwd": "/absolute/path/to/michelin-guide-mcp"
}
}
}
Replace
cwdwith the absolute path to your cloned project directory.
Option 2: Register via Claude Code CLI
claude mcp add michelin-guide -- node /absolute/path/to/michelin-guide-mcp/build/index.js
Verify the integration
Ask Claude Code a question to confirm the MCP server is working:
Find 3-star Michelin restaurants in Tokyo
MCP Tool API Reference
1. search_restaurants -- Multi-criteria restaurant search
Search restaurants by combining multiple criteria. Results are sorted by award level, returning 20 per page.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | - | Free text search (FTS5 full-text search) |
city | string | - | City name |
country | string | - | Country name |
cuisine | string | - | Cuisine type (e.g., Japanese, French, Italian) |
award | string | - | Award level: 1 Star | 2 Stars | 3 Stars | Bib Gourmand | Selected Restaurants |
green_star | boolean | - | Whether the restaurant has a Michelin Green Star |
price_level | number | - | Price level (1=budget to 4=luxury) |
page | number | - | Page number (default: 1) |
Example response:
{
"total": 42,
"page": 1,
"totalPages": 3,
"results": [
{
"name": "Sukiyabashi Jiro",
"award": "3 Stars",
"city": "Tokyo",
"country": "Japan",
"cuisine": "Sushi",
"price_level": 4,
"green_star": false,
"url": "https://guide.michelin.com/..."
}
]
}
2. get_restaurant_detail -- Restaurant detail lookup
Look up full details (17 fields) for a restaurant by name or Michelin Guide URL. Returns a candidate list when multiple matches are found.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Conditional | Restaurant name (partial match supported) |
url | string | Conditional | Michelin Guide URL (exact match) |
Either name or url must be provided.
Response fields:
| Field | Description |
|---|---|
name | Restaurant name |
address | Address |
location | Location info (city, country) |
longitude | Longitude |
latitude | Latitude |
city | City |
country | Country |
price | Price info (original) |
price_level | Price level (1--4) |
cuisine | Cuisine type |
award | Award level |
green_star | Green Star status |
url | Michelin Guide URL |
description | Description |
phone_number | Phone number |
website_url | Website |
facilities_and_services | Facilities and services |
3. search_latest_info -- Web fallback search
Fetches the latest information from the Michelin Guide website when local database data is insufficient.
| Parameter | Type | Required | Description |
|---|---|---|---|
restaurant_name | string | Yes | Restaurant name |
location | string | - | Location hint (city, country, etc.) |
Usage Examples
Ask Claude Code in natural language and the MCP tools are called automatically.
Restaurant search
Find Michelin-starred restaurants in Seoul
-> search_restaurants: { "city": "Seoul" }
Which 3-star French restaurants in France also have a Green Star?
-> search_restaurants: { "country": "France", "cuisine": "French", "award": "3 Stars", "green_star": true }
Find affordable Bib Gourmand Italian restaurants
-> search_restaurants: { "cuisine": "Italian", "award": "Bib Gourmand" }
Detail lookup
Tell me about Sukiyabashi Jiro
-> get_restaurant_detail: { "name": "Sukiyabashi Jiro" }
Show me this restaurant's info: https://guide.michelin.com/...
-> get_restaurant_detail: { "url": "https://guide.michelin.com/..." }
Latest info
Get the latest info for a restaurant in Ginza, Tokyo
-> search_latest_info: { "restaurant_name": "...", "location": "Tokyo Ginza" }
Updating Data
The source data is updated monthly from ngshiheng/michelin-my-maps. To refresh:
# Remove existing database and recreate
rm -rf data/
npm run setup
Project Structure
michelin-guide-mcp/
βββ .mcp.json # Claude Code MCP server config
βββ package.json # Project metadata and dependencies
βββ tsconfig.json # TypeScript configuration
βββ .gitignore
βββ data/
β βββ michelin.db # SQLite DB (gitignored, generated)
βββ src/
β βββ index.ts # MCP server entry point (stdio)
β βββ db.ts # DB initialization and queries
β βββ types.ts # Type definitions
β βββ utils.ts # Utility functions
β βββ scripts/
β β βββ setup-data.ts # CSV download -> SQLite DB setup
β βββ tools/
β βββ search-restaurants.ts # Multi-criteria search tool
β βββ get-restaurant-detail.ts # Detail lookup tool
β βββ search-web.ts # Web fallback search tool
βββ build/ # Compiled JavaScript output
Tech Stack
| Technology | Purpose |
|---|---|
| TypeScript 5.8 | Type-safe server development |
| @modelcontextprotocol/sdk | MCP server framework |
| better-sqlite3 | High-performance native SQLite bindings |
| SQLite FTS5 | Full-text search engine |
| csv-parse | CSV data parsing |
| Zod | Runtime schema validation |
License
This project is distributed under the MIT License.
Credits
- Restaurant data: ngshiheng/michelin-my-maps (MIT License)
- Open-source project providing data on ~18,900 Michelin Guide restaurants worldwide
- Automatically updated monthly for the latest data
- MCP Protocol: Model Context Protocol by Anthropic
