mcpField
A
alltrails-mcp

alltrails-mcp

ローカル
github.com/chrischall地図・旅行0今日更新

alltrails-mcp について

alltrails-mcpは、ClaudeなどのMCPホストからAllTrailsのコース情報やアカウントデータを参照する読み取り専用MCPサーバーです。ログイン済みのブラウザータブとContextMint Bridge経由でリクエストします。

主な機能

  1. 01コースや場所の検索
  2. 02コース詳細と天気の取得
  3. 03レビューや写真の参照
  4. 04GPX形式でのルート出力
  5. 05保存リストとハイキング履歴の確認
  6. 06ブラウザーブリッジの状態確認

活用シーン

  1. 01場所の近くのコース探し
  2. 02コースの評価や天候の比較
  3. 03保存済み・完了済みコースの確認

MCP 対応

AllTrailsの検索、コース、天気、レビュー、写真、プロフィール、リスト操作をMCPツールとして提供します。リクエストはContextMint Bridgeを介して、ログイン済みのAllTrailsタブから送信されます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"chrischall-alltrails": {
"command": "npx",
"args": [
"-y",
"alltrails-mcp"
],
"env": {
"ALLTRAILS_USER_ID": "<ALLTRAILS_USER_ID>",
"ALLTRAILS_REQUEST_TIMEOUT_MS": "<ALLTRAILS_REQUEST_TIMEOUT_MS>",
"ALLTRAILS_DEBUG_LOG": "<ALLTRAILS_DEBUG_LOG>",
"ALLTRAILS_WS_PORT": "<ALLTRAILS_WS_PORT>",
"ALLTRAILS_LOCALE": "<ALLTRAILS_LOCALE>",
"ALLTRAILS_CALLER": "<ALLTRAILS_CALLER>"
}
}
}
}
起動コマンドnpx -y alltrails-mcp
設定が必要な環境変数
ALLTRAILS_USER_IDOptional numeric AllTrails user id for the per-user tools (saved lists, completed trails, feed). If omitted, those tools resolve the signed-in user via /api/alltrails/me.
ALLTRAILS_REQUEST_TIMEOUT_MSPer-request timeout in ms (default 30000).
ALLTRAILS_DEBUG_LOG1/true/yes/on logs each request/response to stderr — method, path, status, response size, and a redacted 200-char request-body prefix (response bodies are never logged).
ALLTRAILS_WS_PORTfetchproxy concentrator port (default 37149, shared by the whole fetchproxy fleet — override only for local dev/tests).
ALLTRAILS_LOCALEOverrides the x-language-locale request header (default "en-US").
ALLTRAILS_CALLEROverrides the x-at-caller request header (default "Mugen").

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

パッケージ
npmalltrails-mcp3.1.11

ツール

13

掲載時のツール一覧 · 今日に更新

パラメーター型必須説明
viewenumいいえレスポンス形式:"compact"(デフォルト)では、レスポンス内の他の場所にすでに含まれているフィールドを省略します。"full" では、このサーバーが扱うすべてのフィールドを返します。compact は { name, overview, length in m+mi, elevation gain in m+ft, difficulty, rating, route type, location } を返し、1 要素のエンベロープから展開します。"full" はルートジオメトリを含む全レコードを返します(取得には detail:"offline" も必要です)。compact | full
detailenumいいえ詳細レベル。"medium"(デフォルト)は概要を表示し、"offline" は完全なルートジオメトリを含みます。basic | medium | offline
trailIdstringはい数値の AllTrails トレイル ID(例:"10236086")

詳細

AllTrails MCP

CI npm license

Model Context Protocol サーバーです。Claude を AllTrails に接続し、トレイルの検索、詳細、レビュー、写真、天気、自分の保存済みリストやハイキング履歴に自然言語でアクセスできるようにします。

警告

AI によって開発されたプロジェクトです。 このコードベースはすべて Claude によって構築され、現在も積極的に保守されています。実装を監査した人間はいません。使用する前に、すべてのコードとツールの権限を確認してください。

注意

非公式で、サポート対象外です。 AllTrails には公開 API がありません。このサーバーは、alltrails.com が使用する内部 API をリバースエンジニアリングしています。この API は DataDome のボット対策の背後にあり、AllTrails の利用規約が適用されます。予告なく動作しなくなる可能性があり、自動アクセスは利用規約に違反するおそれがあります。過去に、第三者が提供した AllTrails プロジェクトが AllTrails の要請により無効化されています。ご自身のアカウントで、ご自身の判断のもとでのみ使用してください。

できること

Claude に次のようなことを尋ねられます。

  • 「オレゴン州ポートランド近郊の滝のあるトレイルを探して」
  • 「トレイル 10236086 の AllTrails 評価と距離は?」
  • 「このトレイルの最近のレビューを要約して」
  • 「完了済みとしてマークしたトレイルは?」
  • 「保存した『週末のハイキング』リストにあるトレイルを見せて」

必要条件

利用規約への同意

この MCP サーバーを使用することで、以下を確認し、同意したものとみなされます。

1. このサーバーは、ご自身のサインイン済みセッションを使用して AllTrails にアクセスします。 ご自身のブラウザーセッションの Cookie を再利用します。他のユーザーのアカウントや非公開データにはアクセスできません。

2. AllTrails の利用規約は、AllTrails を直接利用する場合と同様に、このサーバーの使用にも適用されます。 AllTrails は自動アクセスやスクレイピングを制限しており、API はボット対策の背後にあります。このサーバーを通じた自動利用は、利用規約に違反する可能性があります。ツールを呼び出すたびに、AllTrails の利用規約に同意することになります。

3. 個人利用に限ります。 このプロジェクトは AllTrails, LLC と提携、承認、または後援を受けていません。個人向けの自動化ツールです。AllTrails のデータを大量に抽出したり、競合製品を開発したり、サービスに負荷をかけるような方法で使用したりしないでください。

4. あらゆる結果について全責任を負うものとします。 技術的な結果(レート制限、CAPTCHA チャレンジ、アカウントへの措置など)も、それ以外の結果も含まれます。メンテナーは保証もサポートも提供しません。

このセクションは、メンテナーが誠意をもってまとめた概要です。法的助言ではなく、AllTrails の実際の利用規約を変更または置き換えるものでもありません。

インストール

1. クローンしてビルドする
git clone https://github.com/chrischall/alltrails-mcp.git
cd alltrails-mcp
npm install
npm run build
2. Claude Desktop に追加する

Claude Desktop の設定ファイルを編集します。

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

"mcpServers" 内に alltrails エントリーを追加します(キーがない場合は作成します)。

{
  "mcpServers": {
    "alltrails": {
      "command": "node",
      "args": ["/absolute/path/to/alltrails-mcp/dist/index.js"]
    }
  }
}

/absolute/path/to/alltrails-mcp を、リポジトリをクローンした場所のパスに置き換えてください。

3. Claude Desktop を再起動する

完全に終了し(Mac ではウィンドウを閉じるだけでなく Cmd+Q を押してください)、再度起動します。

4. 動作を確認する

Claude に「近くのトレイルを AllTrails で検索して」と尋ねます。

認証

AllTrails は内部 API の前段に DataDome のボット対策を配置しており、DataDome は HTTP クライアント自体をフィンガープリントします。そのため、ブラウザーからコピーした Cookie を Node から再送すると、ブラウザーでは問題なくアクセスできても拒否されます。したがって、fetchproxy ブリッジが必須です。すべての API リクエストは、サインイン済みの alltrails.com タブ内で同一オリジンの fetch として実行され、認証済みセッションが再利用されます。Cookie を保存して使うモードはありません。

必要なもの:インストール済みの ContextMint Bridge ブラウザー拡張機能(Chrome の場合はリリースページから Chrome 用 ZIP をダウンロードし、展開して読み込んでください。現時点では Chrome を使用してください。Safari のサポートは ContextMint アプリに組み込まれる予定ですが、まだ一般公開されていません)、サインイン済みの alltrails.com タブ、および初回使用時の一度限りのペアコード承認(信頼状態は維持されます)。

ContextMint Bridge は、同じメンテナーによる fetchproxy ブラウザー拡張機能の新しい名称です。fetchproxy の README(https://github.com/chrischall/fetchproxy#extension)からリンクされています。ソースコードは https://github.com/nullnet-app/contextmint-bridge で公開されています。自分でビルドするか、リリース ZIP と同じ場所に公開されている .sha256 ファイルを使って確認してください(shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256)。

AllTrails のクライアント自身が送信する x-at-key アプリキーが、このリポジトリや設定に保存されることはありません。サーバーは必要になった時点で、タブ内の API 通信から現在の値を取得し、メモリ内にのみ保持します。また、AllTrails がキーを更新した場合は自動的に再取得します。alltrails_healthcheck ツールはブリッジを経由してプローブを往復させ、どの段階で問題が発生したかを知らせます。

設定
環境変数必須用途
ALLTRAILS_USER_IDいいえユーザーごとのツールで使用する数値のユーザー ID。既定では /api/alltrails/me を使ってサインイン中のユーザーが設定されます。
ALLTRAILS_WS_PORTいいえfetchproxy コンセントレーターのポート(既定値は 37149。fetchproxy 全体で共有されます。ローカル開発/テストの場合にのみ上書きしてください)。
ALLTRAILS_LOCALE / ALLTRAILS_CALLERいいえ対応するリクエストヘッダーを上書きします。
ALLTRAILS_REQUEST_TIMEOUT_MSいいえリクエストごとのタイムアウト時間(ミリ秒単位。既定値は 30000)。両方の経路に適用されます。
ALLTRAILS_DEBUG_LOGいいえ1/true/yes/on に設定すると、各リクエスト/レスポンスのメソッド、パス、ステータス、レスポンスサイズ、およびリクエスト本文の先頭200文字(機密情報は伏せられます)を stderr に記録します。レスポンス本文は記録されません。

利用可能なツール

すべてのツールは読み取り専用です。このサーバーが AllTrails に書き込むことはありません。

ツール機能
alltrails_searchトレイル名または場所名で AllTrails を検索します。自由入力のクエリでは、alltrails.com の検索ボックスと同じ候補エンドポイントを使用します(types: ["trail"] を指定するとトレイルのみが対象になります)
alltrails_resolve_location場所名を AllTrails の場所レコード(国/州/市/地域/POI)に解決し、それぞれの種類、座標、スラッグ、曖昧さを解消するラベルを返します
alltrails_get_trailトレイルの詳細(名前、概要、距離、累積標高、難易度、評価、ルートの種類、場所)を取得します(detail: basic/medium/offline によって AllTrails が送信する情報を選択します)
alltrails_get_trail_reviewsトレイルのユーザーレビュー。各レビューは {user, rating, comment} です
alltrails_get_trail_photosトレイルの写真。取得可能な画像 url を含む簡潔なレコードを返します
alltrails_get_trail_gpxトレイルのルートを GPX 1.1 としてエクスポートします(トラックポイントと標高)
alltrails_get_trail_weatherトレイルの天気の概要を取得します
alltrails_get_profileサインイン中のユーザーのプロフィールを取得します
alltrails_list_user_listsユーザーが保存したリスト/お気に入りを取得します
alltrails_get_list_itemsリスト ID を指定して、リストに保存されたトレイルを取得します。順序付きの {trailId, type, order, notes, addedAt} を返します。各項目は get_trail で詳細を取得してください
alltrails_list_completed_trailsユーザーが完了したトレイルを取得します
alltrails_get_activity_feedユーザーのアクティビティフィードを取得します(項目の取得には feed: local/timeline/personal を指定し、ディレクトリの取得では省略します。cursor でページネーションします)
alltrails_healthcheckfetchproxy ブリッジを経由してプローブを往復させ、役割/ポート/所要時間に加えて、どの中継区間で問題が発生したかを平易な英語で示すヒントを返します

ユーザー単位のツールは、デフォルトでサインイン中のユーザーを対象とします(/api/alltrails/me または ALLTRAILS_USER_ID を使用して解決します)。公開プロフィールを対象にするには userId を渡してください。

応答形式:view

alltrails_search、alltrails_get_trail、alltrails_get_trail_reviews、 alltrails_get_trail_photos、alltrails_get_list_items、および alltrails_get_activity_feed は、2 段階の view パラメーターを受け取ります。

view取得できる内容
compactデフォルトです。 上の表で説明した簡潔な投影データで、呼び出し元が処理するフィールドを含みます。指定する必要はありません。
fullAllTrails の未加工レコード全体です。

デフォルトを compact にしているのは意図的です。これらの投影データは以前から存在していましたが、compact: false の背後にあり、ツールの説明では呼び出し元にオプトインを促していました。しかし、要求しなければ使われない効率化に意味はありません。投影データから省かれるフィールドが必要な場合は view: "full" を指定してください。最もよくある例は、alltrails_get_trail のルートのジオメトリーです。

view は detail ではありません。 alltrails_get_trail は detail (basic/medium/offline)も受け取りますが、これは AllTrails へのパススルーであり、 API がこちらに送信する情報を決めます。view は、このサーバーが あなたに渡す情報を決めます。ルートのジオメトリーには両方が必要です。取得には detail: "offline"、保持には view: "full" を指定してください。この衝突が、全ツール共通のパラメーター名を view にした理由です。

ある投影データは別の投影データのサブセットではありません。alltrails_get_trail_photos の url は コンパクト段階で派生する値です(AllTrails のレコードには画像 URL が含まれていません)。そのため、 view: "full" には含まれません。

トラブルシューティング

403 Forbidden — AllTrails の DataDome 保護によってリクエストが拒否されました。通常、タブでサインインしていないか、DataDome による確認が行われています。開いているタブで alltrails.com にサインインしてから、再試行してください。

「AllTrails bridge: …」 — AllTrails に到達する前にブリッジ自体でエラーが発生しました(拡張機能が実行されていない、ペアリングが承認されていない、タブがない)。alltrails_healthcheck を実行して診断し、ContextMint Bridge 拡張機能のポップアップを確認してください。

「AllTrails: capturing the x-at-key app key failed…」 — キーは、呼び出しの処理中にタブが行うリクエストから読み取られます。アイドル状態のタブはリクエストを行いません。先にページを再読み込みしても解決しません。拡張機能がリッスンするのは呼び出しの処理中のみなので、呼び出しが始まる前に完了した再読み込みの時点では、リッスンしていないためです。ツールを再実行し、処理中にサインイン済みの www.alltrails.com タブを再読み込みしてください。

結果が空、または予期しない結果になる場合 — AllTrails の内部エンドポイントは文書化されておらず、時間とともに変更されるため、レスポンスが変わる場合があります。ALLTRAILS_DEBUG_LOG=1 を有効にすると、各リクエストのメソッド、パス、ステータス、レスポンスサイズが stderr に記録されます。

開発

npm test         # run the vitest suite
npm run build    # tsc → dist/, then esbuild bundle → dist/bundle.js
npm run dev      # node --env-file=.env dist/index.js (requires built dist)

vitest.config.ts では、src/**(stdio エントリーポイントを除く)のカバレッジを 100% にするよう設定されています。main ブランチは保護されており、すべての変更は PR 経由で反映されます。PR とリリースの手順については、CLAUDE.md を参照してください。

プロジェクト構成
src/
  index.ts          MCP server entry (runMcp + StdioServerTransport)
  protocol.ts       Wire-level constants (BASE_URL, app key, headers)
  transport.ts      createAllTrailsTransport(): the fetchproxy bridge transport
  client.ts         AllTrailsClient — bridge requests, live x-at-key capture, 429 retry
  config.ts         Env parsing (api key, headers, timeout, port, user id, debug)
  validate.ts       parseAllTrails(): zod validation of responses at call sites
  tools/
    _shared.ts      Response helpers + resolveUserId
    trails.ts       get_trail, reviews, photos, weather, gpx export
    explore.ts      search, list by state/country
    user.ts         profile, saved lists, completed trails, activity feed
    healthcheck.ts  alltrails_healthcheck (bridge diagnostics)
tests/              Mirrors src/; mocks AllTrailsClient.request via vi.spyOn
リクエストのフロー

すべての API リクエストは、fetchproxy ブリッジ(src/transport.ts にある共通の createFetchproxyTransport ファクトリー)を介して、サインイン済みの alltrails.com タブ内で同一オリジンのフェッチとして実行されます。ブラウザーは自身の Cookie を使用し、サーバーは AllTrails のプロトコルヘッダー(x-at-key など)のみを付加します。このヘッダーは、タブ内でのフェッチでは自動的に追加されません。Node から直接リクエストするモードはありません。DataDome は HTTP クライアントのフィンガープリントを識別するため、信頼できるのはタブ内からのリクエストのみです。

認証を参照して、ContextMint Bridge 拡張機能をインストールしてください。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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