Skip to content

Bug Bash 2026-08: Street View Imagery Insights MCP Server - #82

Open
akshitmeghawat wants to merge 1 commit into
googlemaps-samples:feat/street-view-samplesfrom
akshitmeghawat:mcp-branch
Open

Bug Bash 2026-08: Street View Imagery Insights MCP Server#82
akshitmeghawat wants to merge 1 commit into
googlemaps-samples:feat/street-view-samplesfrom
akshitmeghawat:mcp-branch

Conversation

@akshitmeghawat

@akshitmeghawat akshitmeghawat commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Summary of changes

Priority Description
P1 Modified main.py to use fastmcp instead of core mcp SDK (v2.0.0), which does not contain the fastmcp module in its path.
P1 Modified requirements.txt to install fastmcp
P1 Modified gcloud deploy commands in deploy.sh
P1 Modified README.md with updated instructions: 1) use antigravitiy cli 2) resolve error with --allow-unauthenticated flag
P1 Modified the script main.py to use new tables instead of deprecated tables from imagery_insights___us dataset
P1 Added a new function resolve_dataset to allow clients to supply fully qualified dataset IDs
P2 Added package version requirements.txt

@akshitmeghawat
akshitmeghawat changed the base branch from main to feat/street-view-samples August 11, 2026 01:08
@akshitmeghawat akshitmeghawat self-assigned this Aug 11, 2026
@bijanvakili

Copy link
Copy Markdown
Collaborator

@akshitmeghawat

  1. For our external users, please change the README.md instructions here to just recommend Antigravity CLI as a harness. That's sufficient.

  2. See the README.md instructions here. You'll need to add that JSON configuration using the Jetski CLI file as described here.

Since we can't use Antigravity CLI internally, you'll need to test the MCP server using your Jetski CLI

FYI: The url is currently hardcoded to @anubis05 old deployment. You'll need to update the README.md to explicitly tell the reader to use the service URL generated from their own deployment. It can be retrieved using:

gcloud run services describe streetview-imagery-insights-mcp \
  --project "${PROJECT_ID}" \
  --region "${REGION}"
  1. FYI: I'm getting the following error already in the client (Jetski CLI):
error: calling "initialize": sending "initialize": Forbidden

...and the server side (Cloud Run) logs are showing:

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header. Empty Authorization header value. 
Read more at https://cloud.google.com/run/docs/securing/authenticating 

Additional troubleshooting documentation can be found at: https://cloud.google.com/run/docs/troubleshooting#unauthorized-client"

The deploy.sh deploys the service using the --allow-unauthenticated (see here). However, I suspect our organization disallows unauthenticated services.

In PR #59, I got around this using a proxy server (see instructions here. Alternatively, you can try removing the --allow-unauthenticated flag from the deploy.sh and forcing the Jetski CLI client to use Google Application Default credentials as described here.

Comment thread street_view_insights/mcp_server/requirements.txt Outdated
@akshitmeghawat

Copy link
Copy Markdown
Collaborator Author

Modified the README.md as per your comment and also modified deploy.sh after running it with jetski cli.

@bijanvakili
bijanvakili requested a review from msd2178 August 11, 2026 19:34
@akshitmeghawat
akshitmeghawat requested review from anubis05 and bijanvakili and removed request for anubis05 August 11, 2026 22:01
Comment thread street_view_insights/mcp_server/README.md Outdated
Comment thread street_view_insights/mcp_server/README.md Outdated
Comment thread street_view_insights/mcp_server/main.py Outdated
Comment thread street_view_insights/mcp_server/README.md Outdated
Comment thread street_view_insights/mcp_server/README.md Outdated
Comment thread street_view_insights/mcp_server/README.md Outdated
Comment thread street_view_insights/mcp_server/main.py Outdated
Comment thread street_view_insights/mcp_server/README.md
Comment thread street_view_insights/mcp_server/main.py Outdated

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all_assets table is deprecated.

Please update to use the newer table.

You'll find the there are 3 other queries in this file that also need to be updated to stop using deprecated tables.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Used the new tables in the script.
These were the changes I made

  1. In list_assets call: all_assets -> latest_assets
  2. In get_asset_observations call: all_observations -> latest_observations
  3. In analyze_cropped_asset call: all_observations -> cropped_observations_all
  4. In analyze_full_frame_context call: all_observations -> full_frame_observations_all

@bijanvakili bijanvakili left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Local server is working.

However, I am not sure the "Cloud Run Deployment" instructions will actually work. See comments.

numpy
uvicorn
fastapi
mcp ~= 1.29

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can remove mcp from this list.

fastmcp already includes it here (ie. it's a transitive dependency).

query = f"""
SELECT observation_id, gcs_uri, bbox, pano_id, capture_time, camera_pose, asset_type
FROM `{project_id}.{dataset_id}.all_observations`
FROM `{project_id}.{dataset_id}.latest_observations`

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be cropped_assets_all

Reasons:

  • latest_observations will be deprecated
  • The function description indicates that it will retrieve all historical observations

```

### Cloud Run Deployment
1. Navigate to the `mcp_server` directory:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Remove this step cd ... as the local development did not include it.

if __name__ == "__main__":
port = int(os.getenv("PORT", 8080))
uvicorn.run(app, host="0.0.0.0", port=port)
transport = os.getenv("MCP_TRANSPORT", "sse")

@bijanvakili bijanvakili Aug 19, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Based on the MCP specification here, the sse transport is now deprecated and we should be using streamable HTTP instead:
Streamable HTTP was introduced in protocol version 2025-03-26 
as a replacement for the [HTTP+SSE transport](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse) 
from protocol version 2024-11-05.
  1. Additionally, there is an outstanding bug with the Antigravity CLI which shows that their SSE client implementation is broken.

See other comment. I recommend switching this to the http transport.

--source . \
--project "${PROJECT_ID}" \
--region "${REGION}" \
--allow-unauthenticated \

@bijanvakili bijanvakili Aug 19, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please verify that this deployment to Cloud Run will work?

(ie. deploy it and connect with Jetski CLI to successfully run a specific skill)

  1. The service needs to run as a service account with necessary roles to query BigQuery. Take a look at the deployment script for street-view-samples/street_view_insights/cropped/samples/imagery-insights-batch-processor here which ensures the appropriate service account is set up along with forcing the service deployment to use it.

In particular, the service account will require the bigquery.jobs.create permission which is typically granted through one of the roles/bigquery.jobUser or roles/bigquery.user roles.

  1. You'll need to determine if --allow-unauthenticated or --no-allow-unauthenticated should be used. Based on the comment in the README.md, I was only able to get Jetski CLI to connect successfully if the FastMCP transport was http and service was deployed with --no-allow-unauthenticated along with running the Cloud Run proxy in a separate window.

@bijanvakili bijanvakili left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@akshitmeghawat

Please change your base branch to main as @anubis05 just merged feat/street-view-samples branch recently.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants