Project: Getting Claude to work with Street View (MCP)
The project
I built an MCP connector that allows Claude to look up and see Street View images.
Through this connector Claude can:
- Find street view panoramas using search strings or coordinates
- View and retrieve street view images
- Adjust panorama angles and positioning
- Open images in your default viewer
- Create HTML-based tour guides that combine text with street view images
To try it yourself, check the instructions in the README.
I wanted to explore building an MCP connector that would give Claude image retrieval and viewing capabilities. Since I couldn't find an existing Street View connector, I created one.
Claude shows emergent abilities
Modern language models demonstrate remarkable capabilities when connected to external tools. Their general world knowledge combined with their ability to iterate on tool usage make them a form of proto-AGI (I know this is controversial).
For this project, I simply connected Claude to the Street View static image API via MCP. Claude immediately began using it effectively, leveraging the metadata endpoint to locate panoramas and adjusting views until finding optimal angles.
Here's an example where Claude searches for a specific Berlin restaurant. It iteratively adjusted the panorama until the restaurant was in sight:
The sequence of images shows Claude's process:
Notice how it rotated the view until capturing the full restaurant facade.
Technical notes
Building this MCP image server taught me several lessons. I created a lightweight wrapper for the Street View static API, then exposed it as an MCP using FastMCP, similar to my previous project.
FastMCP allows direct image byte transmission to the MCP client:
from fastmcp import FastMCP, Image
return Image(data=img_bytes, format="jpeg")
In the Claude desktop client, the returned image is visible to the user inside the tool call collapsible, but only after Claude has completed its response. The image is also visible to Claude.
This is good enough, but how can we enable Claude to open this image on our computer, move it around or embed it in a webpage?
I tried asking Claude to copy the image directly to a file, but this doesn't work. It sees the image but can't manipulate it directly.
Here's how I solved it:
- When Claude requests an image, it must provide a filename for it
- If the file already exists, we give an error and ask Claude to provide a better name
- We save the image in a file before returning it to Claude
- We give Claude a tool so it can open the image on the user's computer by providing the filename
- Likewise we give it a tool so it can embed that image in an HTML page
This gives us both capabilities: Claude will be able to both see an image and manipulate it locally as a file.
Repository
https://github.com/vlad-ds/street-view-mcp