mcpField
E
Espresso MCP

Espresso MCP

ローカル
github.com地図・旅行023 週間前に更新

Espresso MCP について

Espresso MCPは、スペシャルティコーヒー愛好家向けのMCPサーバーです。厳選したカフェやロースターのデータと明示的な評価方式を用い、場所や条件による検索と、根拠を示すカフェ評価を行います。

主な機能

  1. 01座標周辺のカフェ検索と順位付け
  2. 02都市・国・条件による検索
  3. 03カフェの評価内訳の確認
  4. 04観察した特徴に基づくカフェ評価
  5. 05国や評判によるロースター検索
  6. 06避けたい店の事例一覧

活用シーン

  1. 01旅行先で近くのカフェを探す
  2. 02都市内のカフェを評価で絞り込む
  3. 03カフェの評価理由を確認する
  4. 04各国のスペシャルティロースターを比較する

MCP 対応

対応するMCPクライアントに、カフェ検索、詳細、評価、ロースター一覧、避けたい事例のツールを提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"mattgierhart-espresso": {
"command": "npx",
"args": [
"-y",
"espresso-mcp"
]
}
}
}
起動コマンドnpx -y espresso-mcp

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

パッケージ
npmespresso-mcp0.2.0

ツール

6

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
latnumberはい10進数の緯度(-90..90)。
lonnumberはい10進数の経度(-180..180)。
limitintegerいいえ返されるカフェの最大数。デフォルトは10。
min_scorenumberいいえエスプレッソ品質スコアがこの値を下回るカフェを除外します(0-100)。デフォルトは50。
radius_kmnumberいいえ検索半径(キロメートル)。デフォルトは2km。

詳細

espresso-mcp

npm version npm downloads MCP Registry code license data license

優れたエスプレッソカフェを見つけ、その魅力を生み出す要素を明らかにする MCP サーバーです。

espresso-mcp は、Claude Desktop、Claude.ai、ChatGPT、Google Gemini、Cursor、Hermes、OpenClaw、その他あらゆる標準的な MCP ホストに接続できる、Model Context Protocol サーバーです。厳選したスペシャルティコーヒーショップ 100 店以上、スペシャルティロースター 75 社以上のデータベースと、ショップの良さの理由(豆の調達、新鮮さ、機材、トレーニング)や、悪さの理由(最も大きなマイナス要素は、フレーバーシロップがメニューの大半を占めること)を捉える、透明性の高いスコアリングアルゴリズムを備えています。

これは Yelp のクローンではありません。データは手作業で厳選し、スコアリングの基準を明確にしています。基本方針は「まずいコーヒーをフレーバーで覆い隠している店は対象外」です。


このツールの評価基準

espresso-mcp には独自の評価基準があります。まずいコーヒーをフレーバーシロップで覆い隠すショップは、このツールが除外するために設計された典型的な問題例です。スコアリングアルゴリズムでは、syrup_emphasis に失格にならないマイナス要素の中で最大のペナルティ(−22)を付与しています。これは、単一のプラス要素よりも大きな値です。大手チェーン(Starbucks、Dunkin'、Costa、Tim Hortons、Peet's、Caribou)や、「サードウェーブ風に見えてもフレーバー付きの味がする」ショップ(アルゴリズム上の flavor-led-specialty カテゴリ)は、看板がどれほど立派でも avoid または fair の評価になります。

優れたショップが実際に力を注いでいる要素は、プラス評価の対象です。

  • 自家焙煎、または著名なスペシャルティロースターからの仕入れ先を明示
  • シングルオリジンのエスプレッソ(ブレンドのみではない)
  • 小売用の豆袋に焙煎日を記載(鮮度を重視する姿勢)
  • エスプレッソとプアオーバーの両方を提供(「充実したプログラム」)
  • メニューにコルタードがあること(自信の指標。エスプレッソの味が持ちこたえないショップは、少量のミルクドリンクを避けます)
  • 競技会への参加、または SCA 認定スタッフ
  • サードウェーブの有力候補リストにある機材(Slayer、La Marzocco、Synesso、Decent、Victoria Arduino、Modbar)
  • 信頼できるランキングでの評価(World's 100 Best、SCA チャンピオンシップ、Coffee Review 95+、Good Food Awards)

すべての評価要素は src/scoring/weights.ts に記載され、各結果のスコア内訳としてクライアントに表示されます。カフェが推奨される理由を正確に確認できます。


動作を見る

You: I'm near Brandenburg Gate in Berlin. Find me 3 great espresso cafes 
     within walking distance.

Claude: [resolves Brandenburg Gate → 52.5163, 13.3777]
        [calls find_espresso_near with radius_km=2]

  Found 3 specialty cafes within 2km of Brandenburg Gate, sorted by quality:

  • The Barn (Mitte)         — 0.8km — score 95 (world-class) — World's #61
    In-house roastery, single-origin focus, "never blends beans." Founded 
    2010, one of Europe's leading third-wave roasters.

  • Companion Coffee (Mitte) — 1.1km — score 83 (great)
    Curated multi-roaster with rotating guest beans. Tea + coffee crossover 
    in a quiet Mitte design space.

  • Westberlin (Mitte)       — 1.3km — score 82 (great)
    Iconic third-wave anchor since ~2010. Magazine + coffee concept; pours 
    The Barn and rotating European roasters.

できること

MCP クライアントにインストールすると、次のような質問ができます。

  • 「ベルリンのホテル・アドロンにいます。徒歩圏内でおすすめのエスプレッソを探してください。」
  • 「ブランデンブルク門の近くに滞在しています。カフェを 3 軒おすすめして、品質順に並べてください。」
  • 「東京でスコアが 80 を超えるカフェを検索してください。」
  • 「Tim Wendelboe について教えてください。」
  • 「このカフェを評価してください。Slayer のマシン、自家焙煎、シングルオリジンのエスプレッソがあり、フレーバーシロップはありません。」
  • 「デンマークの世界トップクラスのロースターはどこですか?」
  • 「シカゴで避けるべき店はどこですか?悪い例も見せてください。」

モデルは、理由、距離、受賞歴、評価要素ごとの寄与を含む構造化スコアを取得します。そのため、人気順の一覧ではなく、誠実なおすすめを提示できます。


クイックインストール

クライアントセクション
Claude Desktop↓
Claude.ai(Browser MCP)↓
ChatGPT↓
Google Gemini CLI↓
Hermes(Nous Research)↓
OpenClaw↓
Cursor↓
VS Code↓
標準的な stdio クライアント全般↓
ソースから↓
推奨:プロジェクトが進行中の間は @latest を使用する

カフェの追加やアルゴリズムの改善を続けている間は、npm の最新バージョンを指定してください。

"args": ["-y", "espresso-mcp@latest"]

データとスコアリングが安定したら、@latest を外して特定のバージョンを指定し、再現性を確保できます。


クライアントごとの設定

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows)を編集します。ファイルが存在しない場合は、作成してください。

{
  "mcpServers": {
    "espresso": {
      "command": "npx",
      "args": ["-y", "espresso-mcp@latest"]
    }
  }
}

Claude Desktop を再起動します。「espresso」の下に 6 つのツールが 🔌 メニューに表示されます。

Claude.ai(ブラウザー MCP)

Claude.ai のウェブアプリは、OAuth とリモートエンドポイントを介した MCP サーバーに対応しています。ローカルにインストールする場合は、代わりに Claude Desktop を使用してください(上記参照)。espresso-mcp をリモートサーバーとして Claude.ai に公開するには、mcp-remote でラップします(下記のChatGPT セクションを参照してください。同じ方法です)。

ChatGPT

⚠ 重要:ChatGPT が対応しているのはリモート MCP サーバー(HTTPS エンドポイント)のみで、ローカルの stdio プロセスには対応していません。次の 2 つの方法があります。

方法 1:ホスト版を使用する(利用可能になった場合)。 ホスト版のエンドポイントを公開した場合は、ここに掲載します。

方法 2:mcp-remote を介して espresso-mcp を HTTPS にブリッジする。 ご自身で管理するマシン上で、小さなブリッジを実行します。

npx -y mcp-remote bridge espresso-mcp \
  --port 8080 \
  --token "your-shared-secret"

次に、トンネル(Cloudflare Tunnel、Tailscale Funnel、小規模な VPS など)を介してポート 8080 を公開し、生成された HTTPS URL を使用します。

ChatGPT で MCP を有効にする(Plus/Pro/Team/Enterprise プランのみ):

  1. 設定 → コネクター → 詳細設定 → 開発者モードをオンにします。
  2. ブリッジの URL を指定するカスタムコネクターを追加します。

最新のコネクター設定については、OpenAI の MCP ドキュメントを参照してください。

Google Gemini CLI

~/.gemini/settings.json を編集します。

{
  "mcpServers": {
    "espresso": {
      "command": "npx",
      "args": ["-y", "espresso-mcp@latest"]
    }
  }
}

Gemini CLI を再起動します。起動時に自動接続し、成功すると「Connected」と表示されます。詳細については、Gemini CLI の MCP ドキュメントを参照してください。

Hermes(Nous Research)

Hermes は JSON ではなく YAML を使用します。~/.hermes/config.yaml を編集します。

mcp_servers:
  espresso:
    command: "npx"
    args: ["-y", "espresso-mcp@latest"]

任意:公開するツールを必要なものだけに絞り込めます。

mcp_servers:
  espresso:
    command: "npx"
    args: ["-y", "espresso-mcp@latest"]
    tools:
      include: [find_espresso_near, search_cafes, score_cafe]

Hermes を再起動します。起動時に MCP ツールを自動検出します。Hermes の MCP ドキュメントを参照してください。

OpenClaw

OpenClaw は標準の stdio MCP 設定を使用します。まだインストールしていない場合は、OpenClaw をインストールします。

curl -fsSL https://openclaw.ai/install.sh | bash
# or: npm install -g openclaw@latest

次に、OpenClaw の設定に追加します(通常は ~/.openclaw/config.json です。現在の場所についてはOpenClaw の MCP ドキュメントを確認してください)。

{
  "mcpServers": {
    "espresso": {
      "command": "npx",
      "args": ["-y", "espresso-mcp@latest"]
    }
  }
}
Cursor

~/.cursor/mcp.json を編集します。

{
  "mcpServers": {
    "espresso": {
      "command": "npx",
      "args": ["-y", "espresso-mcp@latest"]
    }
  }
}
VS Code

VS Code では専用の mcp.json ファイルを使用します(settings.json ではありません)。ワークスペース単位の設定では .vscode/mcp.json を作成します。ユーザー全体の設定では、コマンドパレットから MCP: Open User Configuration コマンドを実行します。

{
  "servers": {
    "espresso": {
      "command": "npx",
      "args": ["-y", "espresso-mcp@latest"]
    }
  }
}

注:VS Code では mcpServers ではなく servers というキーを使用します。他のクライアントから設定を移行する際によくある、コピー&ペーストの間違いです。

汎用 stdio クライアント

ローカルプロセスを起動する、MCP 互換のホストであれば使用できます。

{
  "command": "npx",
  "args": ["-y", "espresso-mcp@latest"]
}

サーバーは stdout に JSON-RPC を書き込み、ログは stderr にのみ出力します。起動メッセージを確認する場合は、stderr を取得してください。

ソースから実行(開発用)
git clone https://github.com/mattgierhart/espresso-mcp
cd espresso-mcp
npm ci
npm run build

# Point your client at:
#   command: node
#   args:    ["/absolute/path/to/espresso-mcp/dist/index.js"]

または、ローカルビルドに対して MCP Inspector を実行します。

npm run inspect

旅行と住所に基づく検索

実際によくある質問は、「X にいます。どこでコーヒーを飲めますか?」です。実際の使い方を紹介します。

ホテルを基点にしたおすすめ
You: I'm staying at the Hotel Adlon Berlin. Find me 3 great espresso cafes nearby.

[Claude searches for the Adlon's coordinates: ~52.5163, 13.3795]
[Claude calls find_espresso_near with those lat/lon]
[Returns ranked Berlin cafes within walking distance]

モデルが(内蔵知識またはウェブ検索を使って)住所を座標に変換し、find_espresso_near を呼び出します。追加の設定は不要です。

住所に基づく検索
You: I'm walking around Millennium Park in Chicago. What's the closest specialty espresso?

[Claude resolves the landmark → ~41.882, -87.622]
[Calls find_espresso_near with radius_km: 2]
[Ranks results by quality, then distance]
複数都市の旅行計画
You: I have trips coming up to Tokyo, Berlin, and Hong Kong. Build me a coffee plan —
     top 2 cafes per city, plus the one roaster I should buy beans from in each.

[Claude calls search_cafes for each city, sorts by score]
[Calls list_great_roasters filtered by country]
[Composes a per-city itinerary]
今見ている場所をスコアリングする
You: I'm at a cafe with a Slayer machine, they roast on-site, single-origin espresso 
     option, roast date on bags, and they only have plain milk drinks — no syrups. 
     Score it.

[Claude calls score_cafe with those signals]
[Returns 95/100 ("world-class") with per-signal contributions]
ホテルからカフェへの徒歩アクセスを比較する(v0.4 までは手動)

現時点では、複数のツール呼び出しで実行できます。

You: Compare these Berlin hotels by walkable specialty coffee:
     - Hotel Adlon (Mitte)
     - Soho House Berlin (Mitte)
     - 25hours Hotel Bikini (Charlottenburg)

[Claude calls find_espresso_near three times, one per hotel]
[Composes a comparison table]

専用の score_hotel_coffee_access ツールは、v0.5 のロードマップに掲載されています。

データベースに未登録の都市へのベストエフォート対応

まだデータを整備していない都市(例:リスボン、ソウル、メキシコシティ)を検索すると、find_espresso_near はデータベースに登録済みの候補を返しません。それでも、モデルは独自の知識と score_cafe を組み合わせて、説明されたカフェを評価できます。都市のデータは順次追加しています。優先してほしい都市があれば、イシューを作成してください。


ツール

find_espresso_near

座標から指定範囲内にあるスペシャルティエスプレッソカフェを、ランキング形式で検索します。

{ "lat": 35.6855, "lon": 139.6904, "radius_km": 3, "min_score": 60, "limit": 10 }

データベースに登録されたカフェをエスプレッソ品質スコア順に返し、各カフェまでの距離と理由も表示します。

search_cafes

検索クエリ、都市、国、ロースター、または最低スコアを指定して、データベースに登録されたカフェを検索します。

{ "query": "natural wine", "country": "DE", "min_score": 70, "limit": 20 }
get_cafe_details

IDで指定したカフェの全記録を取得します。スコアの内訳をシグナルごとに確認でき、関連するカフェや近隣のカフェもいくつか表示されます。

{ "id": "tim-wendelboe-oslo" }
score_cafe

コード化されたアルゴリズムを直接利用できます(ウェブサイト、レビュー、写真などから)確認したシグナルを渡すと、0~100のスコアとシグナルごとの寄与内訳を取得できます。データベースの検索は不要です。

{
  "name": "Hypothetical Shop",
  "observed_signals": {
    "roasting": "in-house",
    "brew_methods": ["espresso", "pour-over"],
    "single_origin_espresso": true,
    "roast_date_on_bags": true,
    "cortado_on_menu": true,
    "syrup_emphasis": false
  }
}
list_great_roasters

国と評判のランク別に、厳選されたスペシャルティロースターを表示します。

{ "country": "DK", "min_reputation": "regional-leader", "limit": 25 }
list_anti_patterns

避けるべき店舗の典型例を集めた、アルゴリズムの比較対象です。次の2種類があります。

  • mass-market-chain — Starbucks、Dunkin'、Costa、Tim Hortons、Peet's、Caribou。一般的な深煎り、フレーバードリンク中心のメニュー、低い調達透明性が特徴です。
  • flavor-led-specialty — サードウェーブをうたう表示(自家焙煎、シングルオリジンの表示、焙煎日)を掲げているものの、実際にはシロップ中心のメニューを提供する店舗です。スペシャルティに見えても、フレーバードリンクを提供しています。 推薦された店舗が本物である理由を説明する際の比較対象として役立ちます。
{ "category": "flavor-led-specialty", "limit": 10 }

アンチパターンは data/anti-patterns.json に分けて保存されるため、find_espresso_near や search_cafes の検索結果に混入することはありません。


スコアの仕組み

重みの完全な一覧は src/scoring/weights.ts が正式な情報源です。概要は次のとおりです。

プラスのシグナル(優れた店舗に見られる特徴):

  • 実績のあるスペシャルティロースターによる自家焙煎、または名称が明示されたパートナーによる焙煎
  • シングルオリジンのエスプレッソ
  • 小売用の豆袋に焙煎日を表示(鮮度を重視する姿勢)
  • エスプレッソとプアオーバーの両方を提供(「充実したプログラム」)
  • エスプレッソへの自信を示す、メニューにあるコルタード
  • 大会への参加/SCA認定スタッフ
  • 高品質なエスプレッソマシン(Slayer、La Marzocco、Synesso、Decent、Victoria Arduino、Modbar)
  • 受賞歴(World's 100 Best、SCA選手権、Coffee Review 95+、Good Food Awards)

マイナスのシグナル(ごまかしのパターン):

  • syrup_emphasis (−22) — フレーバーシロップを使ったドリンクがメニューの中心です。最も強い回避シグナルです。優れた店舗はシロップに頼りません。
  • flavored_drink_share > 0.5(追加で −7)
  • no_grinder_visible(−25)— 実質的に失格です
  • only_dark_roast(−8)— 豆の欠点を覆い隠します
  • no_origin_info(−7)— 生産地を把握していないか、関心がありません

ロースターの評判による加点:自家焙煎を行うカフェ、または実績のあるロースターと提携しているカフェには、構造的なシグナルに加えて、+25(世界トップクラス)、+15(地域を代表する存在)、または +8(注目に値する)の加点があります。

null/不明のシグナルは減点せず、スキップします。スコアには、実際に確認できたシグナルの数に比例する confidence 値が含まれます。

スコアのランク:

スコアランク
≥ 85世界トップクラス
≥ 70優秀
≥ 55良好
≥ 40まあまあ
< 40回避

「スペシャルティに見えても、実際は違う」というパターンの判定は難しいものです。サードウェーブらしい構造的なシグナルがそろっていても、フレーバードリンク中心のメニューがあるカフェは、シロップによる減点後も「良好」の範囲に入ることがあります。そのようなケースでは、data/anti-patterns.json の明示的な category: flavor-led-specialty フラグが、人による最終判断の基準になります。


キュレーション済みの掲載状況(v0.2.0)

データベースは手作業でキュレーションしています。掲載は、私たち(または信頼できるキュレーション済みガイド)が最近実際に訪れた都市に偏っています。都市ごとに順次追加しているため、優先してほしい都市があれば issue を作成してください。

地域カフェ掲載地区
Berlin15Mitte、Kreuzberg、Neukölln、Charlottenburg
London15Holborn、Shoreditch、City、Marylebone、Bishopsgate、Hammersmith(Workshop × 3 を含む)
NYC(Manhattan + Brooklyn)17East Village、Nolita、Noho、Flatiron、FiDi、NoMad、Williamsburg、Bushwick、Park Slope
Dallas / DFW18Design District、Lower Greenville、Oak Cliff / Bishop Arts、Deep Ellum、Knox-Henderson、Plano
Denver metro18Capitol Hill、RiNo、LoHi、Tennyson、Edgewater、Aurora、Lone Tree、Littleton
Hong Kong10Causeway Bay、Sheung Wan、Tsim Sha Tsui、Tai Hang
Tokyo / Osaka6Omotesando、Nakameguro、Kuramae、Shimokitazawa、Sangubashi
Guangzhou8Tianhe、Yuexiu、Liwan
Other~9Oslo、Copenhagen、Dublin、Galway、Vienna、Singapore、Santa Ana SV、Rogers AR

さらに、意図的にフラグを付けたアンチパターンの掲載が8件あります(Starbucks、Dunkin'、Costa、Tim Hortons、Peet's、Caribou、および「スペシャルティに見えるが、フレーバー付きの味がする」例が2件)。

次に掲載を増やしたい地域:SF、LA、Seattle、Portland、Melbourne、Sydney、Stockholm、Amsterdam、Paris、Taipei、Seoul、Mexico City。


カフェの追加

data/cafes.json に対する PR を作成してください。

  1. 都市名、次に店名のアルファベット順でエントリーを追加します。
  2. 可能であれば正確な座標を使用します("coord_precision": "exact")。Google Maps で調べてください。
  3. last_verified を今日の ISO 形式の日付に設定します。
  4. 自分で確認した、または出典を示せる情報のみを含めてください。
  5. 新しいロースターを追加する場合は、適切な評判ティア(notable、regional-leader、または world-class)を設定して data/roasters.json に追加してください。
  6. PR を作成する前に npm test と npm run validate-data を実行してください。

スキーマの詳細については、data/README.md を参照してください。

アンチパターンの提案

アンチパターンは、category フィールドを設定して data/anti-patterns.json に追加してください。有力な候補は、自分で実際に確認した、大衆向けの店、または「スペシャルティに見えるが、飲むとフレーバー付きだとわかる」店です。看板と実際の体験の違いを説明する notes フィールドを含めてください。

フィードバックの報告

テストした内容、うまくいったこと、意外だったこと、足りないものを記載して issue を作成してください。ロードマップ(コミュニティ貢献ツール、自動住所ジオコーディング、ライブデータのフォールバック、ホテル近接度のスコアリング)は、オープン issue として管理しています。


ライセンス

  • コードは MIT です。詳細は LICENSE を参照してください。
  • データ(data/*.json)は CC-BY 4.0 です。詳細は data/LICENSE を参照してください。帰属表示が必要です。

データを再配布する場合は、このリポジトリへのリンクを記載してください。


パターンの学習に使った情報源

厳選したカフェのリスト、シグナルの重み付け表、アンチパターンのカテゴリー設定は、すでにこの分野で優れた仕事をしている人々の情報を読み、相互参照して作成しました。クレジットとリンクはこちらです。

都市・地域ガイド

受賞歴とランキング

フレームワークと分類体系

カフェで過ごした時間は膨大です。 現地調査です。おそらく税控除の対象にはなりません。このリストで最も正直な項目です。src/scoring/weights.ts のすべての重みは、Slayerを備えた店に期待して訪れたものの、シロップ中心の店だったとわかってがっかりした経験のある人が調整しました。

基盤

コメント

MCP は初めてですか?

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

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