Server doesn’t appear in Claude Desktop
Symptom: you addedmireye-earth to claude_desktop_config.json and
restarted, but the 🔌 menu shows no Mireye entry, or it’s red.
-
Validate the config JSON. A trailing comma or unbalanced brace
silently disables all MCP servers.
-
Confirm
uvxis on PATH. macOS launches GUI apps with a minimal PATH (no shell profile loaded). Ifwhich uvxprints~/.local/bin/uvx, that path may not be visible to Claude. Use the absolute path in your config:Don’t haveuvat all? Install it: -
Check the Claude logs. Logs live at
~/Library/Logs/Claude/mcp-server-mireye-earth.log. On startup you should see one line:If you see a Python ImportError,mireye-mcpwas launched against an interpreter that doesn’t have themcpSDK installed. Withuvx, this shouldn’t happen —uvxprovisions a managed environment per call. If you switched to plain pip, make surepip show mcpreturns>= 1.27.2in the same interpreter the binary lives in.
Tools not appearing in the picker
Symptom: server is connected (green dot) but no tools show.- Old
mcpSDK. The package pinsmcp >= 1.27.2, < 2.0. If you installed an older version manually, upgrade:pip install --upgrade 'mcp>=1.27.2,<2.0'. - Import failure. Run
uvx mireye-mcpfrom a terminal. It should sit silently waiting for stdio input — anything printed to stderr beyond thestarting …line is a real error.
ConnectError / ReadTimeout on the first call
The hosted API keeps its machines running, but the first calls right
after a backend deploy can be slow while geospatial sources warm in the
background, and a handful of fields depend on slow upstream federal
services at the best of times.
-
The default already covers this.
MIREYE_TIMEOUT_Sdefaults to 120 s, above the server’s ~110 s/v1/askdeadline, so a cold start completes within it. Only raise it further (never set it below 120 — that would abandon requests the server still completes) if you still time out: -
Pre-warm with a cheap call. Hit
https://api.mireye.com/healthzbefore your first user-facing call (e.g. in your agent’s session-start hook).
HTTP 400 coord_out_of_bounds
Mireye is US-only in V1. Accepted envelope:
This covers the lower 48, Alaska, Hawaii, and US territories. Coordinates
outside this envelope return:
HTTP 400 fields_unknown
A requested field name is not in the catalog. The response lists exactly
which names failed:
elevation_m→elevationslope→slope_degreesfloodplain→within_floodplain_polygonpower_plant→nearest_power_plant_name
/v1/meta/fields.
HTTP 400 fields_too_many
You requested more than 50 fields (after preset expansion). Two paths:
- Drop the preset and pick fields explicitly.
- Split into multiple
fetchcalls (e.g. one per layer).
401 / 403 errors
For the local stdio adapter, 401 means the MCP server did not send a
valid bearer token. Run mireye-mcp login, or set
MIREYE_BEARER_TOKEN in your MCP config. 403 means the signed-in
account failed backend policy, such as a non-Google provider or
unverified email.
Two adapter-side errors look similar but never reach the API:
- Stored credentials bound to a different URL. Stored logins only
attach to the
MIREYE_BASE_URLthey were created against. If you changedMIREYE_BASE_URLafter logging in, tool calls behave as logged out and the error names both the stored and the active URL. Re-runmireye-mcp loginagainst the new URL, or setMIREYE_BEARER_TOKEN. insecure_base_url. Tokens are never sent over plainhttp://except to loopback hosts (localhost/127.0.0.1/[::1]).loginalso refuses to run against a remote plain-http URL. Use https for any non-local deployment.
https://api.mireye.com/mcp),
401 should include a WWW-Authenticate header pointing at the OAuth
protected-resource metadata. If your client does not open an OAuth
browser flow after that challenge, confirm it supports remote MCP
authorization over Streamable HTTP.
Unexplained 500s
These are bugs. Include the X-Request-ID when reporting (structured
errors carry it; plain unhandled 500s don’t — include the timestamp and
tool name instead). The MCP server logs each tool call to stderr with
the request ID: