Google Street View Virtual Location MCP Server
Explore immersive virtual locations with an MCP server integrating Google Maps, Street View, PixAI, StabilityAI, ComfyUI and Bluesky for LLM simulation.
npx -y @mfukushim/map-traveler-mcpOverview
This MCP (Model Context Protocol) server creates an environment for a virtual avatar to navigate and report back from Google Maps / Street View. It bridges LLM-driven agents (Claude Desktop, LibreChat, Smithery, etc.) with map services, image synthesis backends (PixAI, StabilityAI, ComfyUI, Gemini nano-banana) and a social feed (Bluesky) so an LLM can “travel”, synthesize context-aware images, and publish or read social posts during the journey.
For developers, the server provides a set of callable MCP tools that expose location state, Street View photos, synthesized avatar images, and SNS integration. It supports both stdio-style MCP operation and Streamable-HTTP, and can be configured to use different image generation pipelines. Typical use cases include guided virtual tours, LLM roleplay agents that explore real-world locations, and experiments combining geospatial context with image synthesis and social feed interactions.
Features
- Integrates Google Maps / Street View as the primary spatial context provider
- Synthesizes travel scene images and avatar composites via PixAI, StabilityAI, ComfyUI or Gemini nano-banana
- Exposes MCP-callable tools for location queries, movement, avatar config, and SNS (Bluesky) I/O
- Supports Streamable-HTTP and stdio MCP interfaces (compatible with Smithery.ai and other MCP clients)
- Multi-user capable; session-level database API configuration via Smithery.ai interface
- Optional realtime or skip-based movement modes for simulated travel control
- Includes sample role scripts (traveler, SNS-enabled traveler, small game scenarios)
Installation / Configuration
Install and test quickly with npx (example):
# Run latest published package
If you need the older stdio-only behaviour, pin a previous release:
# stdio-only compatible version
Typical environment variables and configuration you should provide (examples):
# Example environment variables (names are illustrative)
Configuration notes:
- Specify which image backend to use (PixAI / Stability / ComfyUI / Gemini nano-banana) in the server config or Smithery session settings.
- For multi-user operation, supply a per-session database API via the Smithery.ai config interface.
- Ensure Google Maps APIs (Geocoding, Places, Street View) are enabled in your Google Cloud project.
Available Tools
The MCP server exposes a set of callable tools (functions) for clients. Key functions:
| Function | Inputs | Purpose |
|---|---|---|
| get_traveler_view_info(includePhoto, includeNearbyFacilities) | booleans | Returns current location info; optionally includes Street View images and nearby POIs; can trigger avatar image synthesis. |
| get_traveler_location() | — | Returns address and nearby facilities for the travel avatar. |
| set_traveler_location(address) | string | Place the avatar at a specific address or named place. |
| set_traveler_destination_address(address) | string | Set a navigation destination for the avatar. |
| reach_a_percentage_of_destination(timeElapsedPercentage) | number | Advance progress toward destination (use with moveMode=skip). |
| start_traveler_journey() / stop_traveler_journey() | — | Begin or stop realtime travel (use with moveMode=realtime). |
| set_avatar_prompt(prompt) / reset_avatar_prompt() | string | Configure the prompt used to generate the avatar image. |
| get_sns_feeds(), post_sns_writer(message), reply_sns_writer(message,id), add_like(id) | strings | Read/post/reply/like on Bluesky feeds; posts are tagged so they can be identified as bot-generated. |
| get_setting(), tips() | — | Inspect server settings and receive guidance for missing configuration. |
There are also built-in prompt resources (role.txt, roleWithSns.txt, carBattle.txt, japanMapChallenge*.txt) you can import into an LLM client so it behaves as a traveler or runs small scenarios.
Use Cases
- Guided virtual tour via an LLM:
- Start the server and connect a Claude Desktop or LibreChat client.
- Instruct the LLM: “Let’s go to Shibuya Crossing” — the client calls set_traveler_destination_address, then start_traveler_journey. Use get_traveler_view_info(includePhoto:true) to fetch Street View and generated avatar photos for narration.
- Avatar-backed image storytelling:
- Configure Gemini nano-banana (recommended for fast semantic masking) or StabilityAI/ComfyUI.
- Call get_traveler_view_info(includePhoto:true) to produce composite travel images that show the avatar within the captured scene.
- Social feed-enabled exploration:
- Use roleWithSns.txt so the LLM reads Bluesky posts in a custom feed and posts travel updates automatically. Use get_sns_feeds(), post_sns