Map Traveler MCP

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Enables reading from custom feeds, getting mentions, posting articles, replying to posts, and adding likes to content on Bluesky SNS

  • Provides virtual travel capabilities including location setting, navigation, journey planning, and retrieving information about destinations and nearby facilities

  • Retrieves Street View photos of locations which can be combined with generated avatars to create immersive travel imagery

MCP向け仮想移動ボット環境

英語 /日本語

Google マップ上をアバターが仮想的に移動できる環境を構築する MCP サーバーです。

Claude Desktop などの MCP クライアントから、アバターに指示を与え、その移動の進行状況を写真付きで報告することができます。

librechat https://www.librechat.ai/ をサポートするようになりました。

機能

MCPサーバーツール機能

MCPサーバーとして以下の機能が利用可能です。設定や実行状態によって利用可能な機能が異なります。

関数名を直接指定することもできますが、Claude LLM が自動的に認識するため、一般的な用語で操作を指定できます。

例:「今どこにいるの?」「東京駅へ出発しましょう。」

  • get_traveler_view_info(写真を含める:boolean、近隣施設を含める:boolean)
    現在の旅行アバターの位置に関する情報を取得します。
    • includePhoto: 近くのGoogleストリートビュー写真を取得します。画像生成AIを設定している場合は、アバターが合成されます。
    • includeNearbyFacilities: 近くの施設に関する情報を取得します。
  • get_traveler_location()
    現在の旅行アバターの住所と近くの施設に関する情報を取得します。
  • reach_a_percentage_of_destination() 目的地の指定された割合に到達する(moveMode=skipのみ) timeElapsedPercentage: 目的地までの進行率(0〜100)
  • set_traveler_location(アドレス: 文字列)
    現在の旅行アバターの位置を設定します。
    • address: 住所情報(正確な住所、または Google マップや Claude が認識できる一般的な名前など)
  • 旅行者の目的地住所を取得する
    設定した旅行アバターの目的地を取得します
  • set_traveler_destination_address(アドレス: 文字列)
    旅行アバターの目的地を設定する
    • address: 住所情報(正確な住所、または Google マップや Claude が認識できる一般的な名前など)
  • 旅の始まり
    目的地から旅を始めます。(moveMode=realtime のみ)
  • 旅行者の旅を止める
    旅を止めてください。(moveMode=realtime のみ)
  • set_traveler_info(設定:文字列)
    旅行者の属性を設定します。名前や性格など、動的に変更したい旅行者の性格を設定します。ただし、ロールスクリプトを使用すると、スクリプトはより安定します。
    • 設定:名前や性格などの設定情報。
  • 旅行者情報を取得する
    旅行者の属性を把握し、旅行者の性格を把握します。
  • set_avatar_prompt(プロンプト:文字列)
    旅行用アバター画像を生成する際のプロンプトを設定します。デフォルトはアニメ風の女性です。偽の画像を防ぐために、アニメ風が強制されます。
    • プロンプト
  • アバターのリセットプロンプト
    アバター生成プロンプトをデフォルトにリセットします。
  • SNSフィードを取得する
    指定されたカスタム フィード (特定のタグを含むフィード) の Bluesky SNS 記事を取得します。
  • SNSメンションを取得する
    自分が作成した Bluesky SNS 投稿への最近のメンション (いいね、返信) を取得します。
  • post_sns_writer(メッセージ:文字列)
    指定されたカスタムフィードを使用して、Bluesky SNSに記事を投稿します。旅行ボットによって生成された投稿であることが判別できるように、特定のタグを設定します。
    • メッセージ: 記事
  • reply_sns_writer(メッセージ:文字列,ID:文字列)
    指定されたIDの記事に返信します。投稿が旅行ボットによって生成されたものであることが判別できるように、特定のタグを設定します。
    • メッセージ: 返信
    • id: 返信する投稿のID
  • add_like(id:文字列)
    指定された投稿に「いいね!」を追加します。
    • id: いいねする投稿のID
  • ヒント
    まだ設定されていない機能を設定する方法についてガイドします。
  • 設定を取得する
    環境と画像の設定を取得します。

MCPリソース

5つのカスタムプロンプトサンプルがあります。Claude Desktopでプロンプトをインポートすると、Claudeが旅行者として機能します。SNS対応バージョンでは、旅行中の会話中にSNSの入出力を制御します。

  • 役割.txt
    クロードは旅行者として行動します。
  • roleWithSns.txt
    クロードは旅行者として機能します。また、SNSの閲覧や投稿も制御します。
  • carBattle.txt
    横浜から東京へ秘密文書を輸送する物語を描いた、ちょっとしたノベルゲームです。シーンは自動生成されます。moveMode=skip でプレイできます。
  • japanMapChallenge.txt、japanMapChallenge2.txt
    2つのAIがSNSでコミュニケーションを取りながら、風景画像を使ったチャレンジゲームをプレイします。
    プレイするには、Blueskyアカウント2つとClaudeデスクトップ2台が必要です。また、moveMode=skipに設定してください。(ただし、動作がやや不安定です。)
    japanMapChallenge2にはチャレンジ反映ルールがあります。

設定

複数のGoogleマップへのアクセスや画像生成など、複数のAPIごとにアクセスキーを取得して設定する必要があります。APIのご利用には料金が発生する場合があります。

Claude Desktopで使用するための設定

claude_desktop_config.json

{ "mcpServers": { "traveler": { "command": "npx", "args": ["-y", "@mfukushim/map-traveler-mcp"], "env":{ "MT_GOOGLE_MAP_KEY":"(Google Map API key)", "MT_MAP_API_URL": "(Optional: Map API custom endpoint. Example: direction=https://xxxx,places=https://yyyy )", "MT_TIME_SCALE": "(Optional:Scale of travel time on real roads duration. default 4)", "MT_SQLITE_PATH":"(db save path: e.g. %USERPROFILE%/Desktop/traveler.sqlite ,$HOME/traveler.sqlite )", "MT_REMBG_PATH": "(absolute path of the installed rembg cli)", "MT_REMBG_URL": "(rembg API URL)", "MT_PIXAI_KEY":"(pixAi API key)", "MT_SD_KEY":"(or Stability.ai image generation API key", "MT_PIXAI_MODEL_ID": "(Optional: pixAi ModelId, if not set use default model 1648918127446573124 ", "MT_COMFY_URL": "(Option: Generate image using ComfyUI API at specified URL. Example: http://192.168.1.100:8188)", "MT_COMFY_WORKFLOW_T2I": "(Optional: Path to API workflow file when using text to image with ComfyUI. If not specified: assets/comfy/t2i_sample.json)", "MT_COMFY_WORKFLOW_I2I": "(Optional: Path of API workflow file when image to image in ComfyUI. If not specified: assets/comfy/i2i_sample.json)", "MT_COMFY_PARAMS": "(Optional: Variable values to send to the workflow via comfyUI API)", "MT_FIXED_MODEL_PROMPT": "(Optional: Fixed avatar generation prompt. You will no longer be able to change your avatar during conversations.)", "MT_BODY_AREA_RATIO": "(Optional: Acceptable avatar image area ratio. default 0.042)", "MT_BODY_HW_RATIO": "(Optional: Acceptable avatar image aspect ratios. default 1.5~2.3)", "MT_BODY_WINDOW_RATIO_W": "(Optional: Avatar composite window horizontal ratio. default 0.5)", "MT_BODY_WINDOW_RATIO_H": "(Optional: Avatar composite window aspect ratio. default 0.75)", "MT_BS_ID":"(Bluesky sns registration address)", "MT_BS_PASS":"(bluesky sns password)", "MT_BS_HANDLE":"(bluesky sns handle name: e.g. xxxxxxxx.bsky.social )", "MT_FILTER_TOOLS": "(Optional: Directly filter the tools to be used. All are available if not specified. e.g. tips,set_traveler_location)", "MT_MOVE_MODE": "(Option: Specify whether the movement mode is realtime or skip. default realtime)", "MT_IMAGE_WIDTH": "(Option: Output image width (pixels) Default is 512)", "MT_NO_IMAGE": "(Options: true = do not output image, not specified = output image if possible, default is not specified)", "MT_FEED_TAG": "(Optional: Specify the feed tag when posting to SNS (#required, 15 characters or more) Default is #geo_less_traveler)" } } } }

注:環境変数の名前は標準的なスネークケースに変更されました。librechatなど、他の環境変数と組み合わせて使用​​される可能性があるため、「MT_」という接頭辞が追加されています。下位互換性のため、以前の名前も引き続き使用できます。

Google Map API の以下の 3 つの認証情報を設定してください。

  • ストリートビュー静的API
  • プレイス API(新規)
  • タイムゾーンAPI
  • ルート案内API

https://developers.google.com/maps/documentation/streetview/get-api-key

画像生成AIを使用する場合は、pixAi_keyまたはsd_keyのいずれかを設定してください。また、PCにpython3.7~3.11とrembg cli(仮想環境推奨)がインストールされている必要があります。

https://platform.pixai.art/docs\ https://platform.stability.ai/docs/api-reference#tag/SDXL-1.0-and-SD1.6/operation/textToImage

bluesky SNSのアドレス・パスワードは任意です。自動投稿のため、専用のアカウントを作成いただくことをおすすめいたします。

https://bsky.app/

検証に API キーを必要としない練習モードで実行することもできます。

練習モードの設定

claude_desktop_config.json

{ "mcpServers": { "traveler": { "command": "npx", "args": ["-y", "@mfukushim/map-traveler-mcp"] } } }

使い方

練習モードを使う

  1. nodejs 22 をインストールします。
  2. Claude Desktop を使用できるように設定します。
  3. 上記の設定のいずれかを claude_desktop_config.json に反映します。
  4. Claude Desktopを再起動してください。セットアップには時間がかかる場合があります(エラーが発生した場合は、Claude Desktopを再度再起動してください。それでも解決しない場合は、以下の注意事項を参照してください)。画面右下に以下のマークが表示されていることを確認してください。
  5. 「今どこにいるの?」「旅に出よう」と話しかけると会話が始まります。API利用時は確認画面が表示されるので、「許可」を選択してください。
  6. MCP から添付を選択し、role.txt を選択します。
  7. 旅行プロンプトが組み込まれているので、気軽に話しかけてください。

フル機能を使用する

  1. Google Map APIのアクセスキーを取得し、Street View Static API、Places API(新規)、Time Zone API、Directions APIの権限を設定します。これをclaude_desktop_config.jsonのenvに設定し、再起動してください。この時点で、走行ログは実際の地図に基づいて表示されます。重ね合わせていない場合は、走行画像も出力されます。
  2. ディスクに干渉しないパスを決め、claude_desktop_config.json の env の sqlite_path に設定してください。(例: %USERPROFILE%/Desktop/traveler.sqlite $HOME/Documents/traveler.sqlite など) この時点で、移動ログが保存され、Claude Desktop を閉じても移動を続けることができます。
  3. Python 3.7~3.11をインストールし、CLIでrembgをインストールします。venvなどの仮想環境の使用をお勧めします。
python3 -m venv venv . venv/bin/activate or .\venv\Scripts\activate pip install "rembg[cpu,cli]"

サンプル画像ファイルを使って、rembg cli が正常に動作するか確認しましょう。人物が写っている画像を入力し、出力ファイルで人物が切り取られていれば成功です。

rembg i source_image_file dest_image_file
  1. rembg cli は python exe の場所にインストールされるので、パスを取得してください。ファイルの場所は OS や python のインストール状況によって異なりますが、venv の場合は、設定したディレクトリの上位の (仮想環境名)\Scripts\rembg.exe または (仮想環境名)/bin/rembg です。見つからない場合は、ファイル検索ソフトなどでパスを検索してください。そのパスを claude_desktop_config.json の env の rembg_path に設定してください。(例: "rembg_path": "C:\Users\xxxx\Documents\rembg_venv\venv\Scripts\rembg.exe")
  2. pixAIまたはStability.aiのサイトから画像生成APIキーを取得します。claude_desktop_config.jsonのenvファイルで、pixAi_keyまたはsd_keyにキーを設定します。これで、アバターが旅行画像にオーバーレイされます。
  3. BlueskyのSNSアドレス/パスワードとハンドルネームを取得します。claude_desktop_config.jsonのenvファイルにあるbs_id、bs_pass、bs_handleにそれぞれ設定します。旅行に関する行動をSNSに報告するために、旅行情報プロンプトroleWithSns.txtをインポートします(自動的にボットとして投稿されるため、専用のアカウントを用意することをお勧めします)。

rembg を cli で準備する代わりに、rembg をサービス API として処理できるようにする設定を追加しました。
下記の rembg サービスを設定すると、remBgUrl に URL を設定することで rembg を利用できるようになります。

https://github.com/danielgatis/rembg?tab=readme-ov-file#rembg-s

Docker バージョンを使用してコンテナを起動してアクセスする場合、セットアップは簡単です。

https://github.com/danielgatis/rembg?tab=readme-ov-file#usage-as-a-docker

外部のComfyUIを使用する場合(上級ユーザー向け)

ローカルのComfyUIを画像生成サーバーとして使用することもできます。画像生成の特性を詳細に設定することで、APIコストを削減できます。

ただし、構成が非常に複雑になり、イメージの生成に時間がかかる可能性があります。

  1. ComfyUI を API モードで実行するように構成します。
  2. env でサーバーの URL を comfy_url に設定します。
  3. env で使用するモデルなどの詳細な設定値を json 文字列の形式で設定します。例。
{ "env": { "comfy_url": "http://192.168.1.100:8188", "comfy_workflow_t2i": "C:\\Documents\\t2itest.json", "comfy_workflow_i2i":"C:\\Documents\\i2itest.json", "comfy_params":"ckpt_name='animagineXL40_v40.safetensors',denoise=0.65" } }
  1. デフォルトのワークフローでは、パッケージ内のassets/comfy/t2i_sample.jsonとassets/comfy/i2i_sample.jsonを使用できます。%を使用して変数を指定し、comfy_paramsで変数を指定できます。

libreChatの使用

libreChatと連携するように調整されました。これにより使いやすくなりましたが、いくつか追加設定が必要です。
また、使用するPCもDockerが安定して動く程度の性能のPCでないと安定しないようです。

libreChatをインストールする

公式サイトに記載されているとおりに動作するか確認してください。
この場合、追加の設定があるため、Docker 構成を使用することをお勧めします。

https://www.librechat.ai/docs/local/docker

公式の手順を使用して librechat.yaml を設定します。
ローカルまたは API LLM サービスを追加する必要があると思います。

https://www.librechat.ai/docs/configuration/librechat\_yaml

ログイン用のユーザーを追加します。

https://www.librechat.ai/docs/configuration/authentication#create-user-script

一般的なチャット会話が行えるように設定してください。

追加設定でrembgコンテナを追加する

Docker で rembg を使用するには、rembg Docker コンテナのプルと実行を追加します。

docker-compose.override.yml

services: api: volumes: - type: bind source: ./librechat.yaml target: /app/librechat.yaml rembg: image: danielgatis/rembg:latest restart: always command: "s --host 0.0.0.0 --port 7000 --log_level info"

MCPサービスにmap-traveler-mcpを追加する

librechat.yamlを追加する

mcpServers: traveler: type: stdio command: npx args: - -y - "@mfukushim/map-traveler-mcp"

.env を追加します (claude_desktop_config.json の env と同じ)

# map-traveler-mcp GoogleMapApi_key=(Google Map API key) sqlite_path=/home/run_test.sqlite (e.g. librechat in an unobtrusive location inside the container, or in an external directory that you don't want to mount.) remBgUrl=http://rembg:7000 (rembg Service API URL, container URL) (Other settings such as image generation AI settings, PixAI key, stability.ai API key, ComfyUI settings, etc.)

設定後、コンテナを再起動します。
低速なPCでは、mcpの初期化に失敗する場合があります。複数回の再起動で解決する場合もありますが、実行が困難になる場合があります。

llibreChat設定

libreChat で MCP 機能を使用するには、エージェント機能を使用します。

  1. 会話画面で、「エージェント」を選択します。
  2. 画面の右側のパネルから Agent Builder を選択し、エージェントを構成します。
  3. map-traveler を使用するには、[ツールの追加] を選択します。
  4. エージェントツール画面が表示されるので、map-traveler-mcpツールをすべて選択して追加します(map-traveler-mcpツールがリストされていない場合は、MCPの初期化に失敗していますので、コンテナを再起動するか、ログなどを確認して設定を見直してください)。
  5. 指示領域に追加のスクリプトを入力します。
    libreChat には MCP リソース機能がないため、代わりに次の URL の内容テキストを指示エリアに入力します。
    https://github.com/mFukushim/map-traveler-mcp/blob/main/assets/scenario/role.txt\
  6. エージェントを保存するには、「作成」ボタンをクリックします。
  7. 新しいチャットを開始します。

インストールガイド(日本語ですが写真多数)

  1. 紹介と練習モード
    https://note.com/marble\_walkers/n/n7a8f79e4fb30
  2. DB、Google Map API、画像生成API
    https://note.com/marble\_walkers/n/n765257c27f3b
  3. アバタープロンプト
    https://note.com/marble\_walkers/n/nc7273724faea
  4. SNS統合
    https://note.com/marble\_walkers/n/na7c956befe7b
  5. アプリケーション1
    https://note.com/marble\_walkers/n/n3c86edd8e817
  6. ComfyUI API
    https://note.com/marble\_walkers/n/ncefc7c05d102
  7. アプリケーション2
    https://note.com/marble\_walkers/n/ne7584ed231c8
  8. LibreChatの設定
    https://note.com/marble\_walkers/n/n339bf7905324

ソースコードに関する追加情報

エラー管理を簡素化し、自分自身の学習のために Effect.ts を使用しています。
当社ではエフェクト サービスも使用していますが、MCP 呼び出しの仕組み上、このサービスを使用して統合するのは最適ではないと考えています。
MCP 呼び出しをエフェクト内で直接処理する方が簡単だと思います。

最新のアップデートに関するメモ

envにimage_widthを追加しました。デフォルトは512です。これを小さく設定するとLLM APIのコストが削減される可能性があります。
画像入出力を持たない MCP クライアントに対して画像を出力しない env 設定を追加しました。
"MT_NO_IMAGE": "true" に設定すると、画像は生成も出力もされません。その他の画像関連の設定は省略できます。

{ "env": { "MT_NO_IMAGE": "true" } } or { "env": { "GoogleMapApi_key": "xxxx", "MT_NO_IMAGE": "true" } }

SNS(Bluesky)投稿時に付与するタグ名を指定できるようになりました。#必須で、15文字以上である必要があります。指定がない場合は「#geo_less_traveler」となります。
SNSから取得する情報に若干の変更があります。また、SNSに投稿する情報にも若干の変更があります。
複数のトラベルボットがSNS経由で会話して遊ぶことができるスクリプトを追加しました。

ID: fiup8wlcdc