by mfukushim
Creates a virtual travel environment where an avatar moves along Google Maps routes, generates street‑view images, overlays a customizable avatar, and can report progress to Bluesky SNS—all controllable via LLM prompts.
Map Traveler provides an MCP server that lets a language model control a travel avatar on Google Maps. The avatar can move in real‑time or skip mode, retrieve location details, fetch nearby facilities, and produce images (street‑view plus optional avatar overlay). It can also post updates to Bluesky, reply, like, and retrieve feeds.
npx -y @mfukushim/map-traveler-mcp
command.role.txt
) to give the LLM a traveler persona.get_traveler_location
, set_traveler_location
, set_traveler_destination_address
, start_traveler_journey
, stop_traveler_journey
, reach_a_percentage_of_destination
.get_traveler_view_info
can return street‑view photos and nearby facilities.post_sns_writer
, reply_sns_writer
, add_like
, get_sns_feeds
, get_sns_mentions
.Q: Do I need all Google Maps APIs? A: Yes, Street View Static, Places, Time Zone, and Directions APIs are required for full functionality.
Q: Can I run it without image generation?
A: Set MT_NO_IMAGE=true
(or omit image‑related keys) to disable image output.
Q: How is the avatar image created?
A: By default an anime‑style woman prompt is used. You can change it with set_avatar_prompt
or fix it via MT_FIXED_MODEL_PROMPT
.
Q: What if I don’t have a Bluesky account?
A: SNS features are optional; simply omit the MT_BS_*
variables.
Q: Is there a cloud‑only database option?
A: Yes, configure MT_TURSO_URL
and MT_TURSO_TOKEN
to use Turso libSQL instead of a local file.
Q: How do I switch between real‑time and skip movement?
A: Set MT_MOVE_MODE
to realtime
or skip
; reach_a_percentage_of_destination
works only in skip mode.
Q: Can I use this with LibreChat?
A: Add the server under mcpServers
in LibreChat’s config and enable the tools via the Agents UI.
Q: What image‑generation services are supported?
A: PixAI, Stability.ai, local ComfyUI (API mode), cloud rembg (withoutbg.com), or the CLI rembg
tool.
Q: How do I reset the avatar prompt to default?
A: Call the reset_avatar_prompt
tool.
English / Japanese
This is an MCP server that creates an environment for an avatar to virtually travel on Google Maps.
From an MCP client such as Claude Desktop, you can give instructions to the avatar and report on the progress of its journey with photos.
Now supports librechat https://www.librechat.ai/.
Now supports Smithery https://smithery.ai/server/@mfukushim/map-traveler-mcp (images are excluded because they are heavy to run).
Now verified MseeP https://mseep.ai/app/mfukushim-map-traveler-mcp
The following functions can be used as an MCP server. The available functions vary depending on the settings and execution state.
You can specify the function name directly, but Claude LLM will automatically recognize it, so you can specify the operation in general terms.
Example: "Where are you now?" "Let's leave for Tokyo Station."
Has five custom prompt samples. When you import a prompt with Claude Desktop, Claude will act as a traveler. The SNS-compatible version controls SNS input and output while having a travel conversation.
role.txt
Claude will act as a traveler.
roleWithSns.txt
Claude will act as a traveler. It also controls reading and posting to SNS.
carBattle.txt
This is a small novel game about a story of transporting secret documents from Yokohama to Tokyo. Scenes are automatically generated. Set moveMode=skip to play.
japanMapChallenge.txt,japanMapChallenge2.txt
Two AIs communicate with each other via SNS and play a challenge game using landscape images.
To play, you need two Bluesky accounts and two Claude Desktops. Also set moveMode=skip. (However, the operation is somewhat unstable.)
japanMapChallenge2 has a challenge reflection rule.
You will need to obtain and set access keys for multiple APIs, such as for accessing multiple Google maps and generating images. Use of the API may incur charges.
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_TURSO_URL":"(Turso sqlite API URL)",
"MT_TURSO_TOKEN":"(Turso sqlite API access token)",
"MT_REMBG_PATH": "(absolute path of the installed rembg cli)",
"MT_REMBG_URL": "(rembg API URL)",
"MT_REMBG_WO_KEY": "(withoutbg.com rembg API key)",
"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_NO_AVATAR": "(Option: true = Output StreetView image as is without avatar superimposition. Not specified = Superimpose avatar image. 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)"
}
}
}
}
NOTE: The environment variables have been renamed to standard snake case. The MT_ prefix is added because they may be used in conjunction with other environment variables, such as in librechat. The old names can still be used for backward compatibility.
Please set the following three Credentials for Google Map API.
https://developers.google.com/maps/documentation/streetview/get-api-key
If you want to use the image generation AI, set either pixAi_key or sd_key. You also need to have python3.7~3.11 installed on your PC and rembg cli installed (virtual environment recommended).
https://platform.pixai.art/docs
https://platform.stability.ai/docs/api-reference#tag/SDXL-1.0-and-SD1.6/operation/textToImage
The bluesky SNS address/password are optional. It is recommended that you create a dedicated account as it will post automatically.
You can also run it in practice mode, which does not require an API key for verification.
claude_desktop_config.json
{
"mcpServers": {
"traveler": {
"command": "npx",
"args": ["-y", "@mfukushim/map-traveler-mcp"]
}
}
}
Install nodejs 22.
Set up Claude Desktop for use.
Reflect one of the above settings in claude_desktop_config.json.
Restart Claude Desktop. It may take some time to set up (if an error occurs, try restarting Claude Desktop again. If it doesn't work, see the notes below). Make sure the following mark appears in the bottom right of the screen.
python3 -m venv venv
. venv/bin/activate or .\venv\Scripts\activate
pip install "rembg[cpu,cli]"
Check if rembg cli works properly using a sample image file. Input an image with a person in it, and if the person is cut out in the output file, it's OK.
rembg i source_image_file dest_image_file
Instead of preparing rembg with the cli, we have added a setting that allows you to handle rembg as a service API.
If you configure the following rembg service, you can use rembg by setting the URL in remBgUrl.
https://github.com/danielgatis/rembg?tab=readme-ov-file#rembg-s
Setup is simple if you use the Docker version to launch a container and access it.
https://github.com/danielgatis/rembg?tab=readme-ov-file#usage-as-a-docker
If you want to use the cloud API Turso libsql (https://turso.tech/libsql) without having a local sqlite file, sign up for Turso and allocate a sqlite database (paid, free tier available).
This add-in will automatically configure (migrate) the database.
MT_TURSO_URL = turso db URL
MT_TURSO_TOKEN = turso db access token
Local settings around rembg are complicated no matter what method you use, but we have added settings for the paid cloud rembg (https://withoutbg.com/).
Note: There is a small free trial available, but please be aware that this is a commercial API and is quite expensive (about 0.1 euros per image).
MT_REMBG_WO_KEY = withoutbg access token
You can also use a local ComfyUI as an image generation server. You can configure the image generation characteristics yourself in detail to reduce API costs.
However, the configuration will be quite complicated and image generation may take longer.
{
"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"
}
}
It has been adapted to work with libreChat. This makes it easier to use, but some additional settings are required.
Also, it seems that it will not be stable unless the PC you use has a decent level of performance, such as one that can stably run Docker.
Please make sure it works as described on the official website.
In this case, we recommend using Docker configuration due to additional settings.
https://www.librechat.ai/docs/local/docker
Configure librechat.yaml using the official procedure.
I think you will need to add a local or API LLM service.
https://www.librechat.ai/docs/configuration/librechat_yaml
Add a user for login.
https://www.librechat.ai/docs/configuration/authentication#create-user-script
Please set it so that you can have general chat conversations.
To use rembg with Docker, add pulling and running the rembg Docker container.
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"
Add librechat.yaml
mcpServers:
traveler:
type: stdio
command: npx
args:
- -y
- "@mfukushim/map-traveler-mcp"
Add .env (Same as env in claude_desktop_config.json)
# 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.)
After setting, restart the container.
On slow PCs, mcp initialization may fail. Multiple restarts may work, but this may be difficult to run...
To use the MCP function in libreChat, use the Agents function.
Please refer to https://smithery.ai/server/@mfukushim/map-traveler-mcp.
Remote MCP (stdio mode) is supported, but the configuration feature has been removed because image generation was too heavy to run.
Database settings can now be recorded with Turso sqlite, so if you configure Turso, your travel progress will also be saved.
I use Effect.ts to simplify error management & for my own learning.
We also use the Effect Service, but due to the way MCP calls work, we believe that consolidating it using the Service was not optimal.
I think it would be simpler to handle the MCP calls directly in the Effect.
Addendum: I'm aware that I will be able to reconsider how to use the Effect Service and rewrite it neatly, but I'm still considering whether to rewrite it.
{
"env": {
"MT_NO_IMAGE": "true"
}
}
or
{
"env": {
"GoogleMapApi_key": "xxxx",
"MT_NO_IMAGE": "true"
}
}
You can now specify the tag name to be added when posting to SNS (Bluesky). #Required and must be at least 15 characters. If not specified, it will become "#geo_less_traveler".
The information obtained from SNS has been slightly changed. The information posted to SNS has been slightly changed.
A script has been added that allows multiple travel bots to converse and play via SNS.
Supports remote use from Smithery.
If you do not want to configure detailed settings, start the app in practice mode.
You can also run the app at full speed by configuring each cloud API, but please be aware of charges as it uses many paid APIs such as rembg API.
If you do not want to synthesize avatars, you can run the app with the minimum settings of Google Map API and Turso sqlite API.
Added the MT_NO_AVATAR option.
If set, an avatar image will not be composited onto the landscape image. Since there will be no retry processing for avatar composition, the time it takes to obtain a response will be significantly shorter.
Set this option if image composition is slow or fails unavoidably.
Partially applied MCP version 2025-06-18.
I added title to the schema. I plan to apply outputSchema and structured response in the future, but I haven't implemented them this time. Since the output of Travel Bot is simple text, I don't think structuring is necessary yet.
https://modelcontextprotocol.io/specification/2025-06-18/server/tools
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "traveler": { "command": "npx", "args": [ "-y", "@mfukushim/map-traveler-mcp" ], "env": { "MT_GOOGLE_MAP_KEY": "<YOUR_GOOGLE_MAP_API_KEY>", "MT_REMBG_PATH": "<PATH_TO_REMBG_CLI>", "MT_REMBG_URL": "<REMBG_SERVICE_URL>", "MT_REMBG_WO_KEY": "<WITHOUTBG_API_KEY>", "MT_PIXAI_KEY": "<PIXAI_API_KEY>", "MT_SD_KEY": "<STABILITY_AI_API_KEY>", "MT_TURSO_URL": "<TURSO_DATABASE_URL>", "MT_TURSO_TOKEN": "<TURSO_ACCESS_TOKEN>", "MT_BS_ID": "<BLUESKY_EMAIL>", "MT_BS_PASS": "<BLUESKY_PASSWORD>", "MT_BS_HANDLE": "<BLUESKY_HANDLE>", "MT_MOVE_MODE": "realtime", "MT_IMAGE_WIDTH": "512", "MT_NO_IMAGE": "false", "MT_NO_AVATAR": "false", "MT_FEED_TAG": "#geo_less_traveler" } } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by modelcontextprotocol
An MCP server implementation that provides a tool for dynamic and reflective problem-solving through a structured thinking process.
by danny-avila
Provides a self‑hosted ChatGPT‑style interface supporting numerous AI models, agents, code interpreter, image generation, multimodal interactions, and secure multi‑user authentication.
by block
Automates engineering tasks on local machines, executing code, building projects, debugging, orchestrating workflows, and interacting with external APIs using any LLM.
by RooCodeInc
Provides an autonomous AI coding partner inside the editor that can understand natural language, manipulate files, run commands, browse the web, and be customized via modes and instructions.
by pydantic
A Python framework that enables seamless integration of Pydantic validation with large language models, providing type‑safe agent construction, dependency injection, and structured output handling.
by lastmile-ai
Build effective agents using Model Context Protocol and simple, composable workflow patterns.
by mcp-use
A Python SDK that simplifies interaction with MCP servers and enables developers to create custom agents with tool‑calling capabilities.
by nanbingxyz
A cross‑platform desktop AI assistant that connects to major LLM providers, supports a local knowledge base, and enables tool integration via MCP servers.
by gptme
Provides a personal AI assistant that runs directly in the terminal, capable of executing code, manipulating files, browsing the web, using vision, and interfacing with various LLM providers.