https://api.mireye.com/mcp. Use this remote HTTP endpoint for
Claude Code so /mcp can open the browser sign-in flow and Claude Code
can store and refresh OAuth credentials for you.
Mireye also ships a local stdio adapter (mireye-mcp) for Claude
Desktop, Cursor, and custom agents that do not use hosted HTTP MCP. Local
stdio does not launch Claude’s native OAuth flow; it requires
mireye-mcp login or MIREYE_BEARER_TOKEN.
Both distributions ship under the MCP server name com.mireye/earth.
Publication to the
Official MCP Registry is in
flight — until the entry is live, use the manual setup below (it is the
same config either way).
Claude Code — hosted OAuth
If you previously configured the local stdio adapter under the same name, remove it first:/mcp and follow the
browser login flow. After authentication, both tools (mireye_ask,
mireye_fetch) are available for natural chat and tool calls. Catalog
resources and workflow prompts are also available to clients that surface
those MCP primitives.
Matching slash commands also appear:
/mcp__mireye-earth__mireye_ask <lat> <lng> <question>/mcp__mireye-earth__mireye_fetch <lat> <lng> [fields] [preset]
/mcp__<server>__<prompt> format is Claude Code’s slash-command
convention for MCP prompts — it isn’t customizable.)
Local stdio adapter — fallback
Use the local adapter when your MCP client does not support remote HTTP OAuth, or when you need a local stdio process. It exposes the same two tools, catalog resources, and prompts, and ships as its own slim PyPI package: two runtime dependencies (httpx + mcp), no native builds,
no GDAL.
Install with uvx:
The six siting presets (catalog 0.6.0) and the credential URL-binding behavior described on this page requiremireye-mcp >= 0.2.0. Ifpip index versions mireye-mcpreturns nothing yet, the release is in flight — use the hosted endpoint until it lands.
uvx (bundled with uv) downloads the
package on first run, caches it, and the next invocation is instant.
No venv to manage.
Don’t have uv?
mireye-mcp console entry point. Verify:
Claude Desktop
Edit the Claude Desktop config:- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
mireye-earth to mcpServers:
mireye-mcp login or setting MIREYE_BEARER_TOKEN,
restart Claude Desktop. Two tools — mireye_ask and mireye_fetch —
appear in the 🔌 menu, with catalog resources and workflow prompts
available to clients that expose them. Click through to confirm both
tools are green; then start a new chat and ask:
What’s the elevation at 40.7128, -74.0060?Claude calls
mireye_ask, returns the cited answer.
uvx not on PATH?
macOS launches GUI apps with a minimal PATH (no shell profile loaded).
If your uv install lives at ~/.local/bin/uvx, that path may not be
visible to Claude. Use the absolute path:
which uvx from a terminal gives you the absolute path.
Cursor
Cursor reads MCP config from one of:~/.cursor/mcp.json(global)<repo>/.cursor/mcp.json(workspace)
mireye-earth server should show
two tools with green status indicators. Resource and prompt visibility
depends on the Cursor MCP UI version.
Custom MCP agent (Python SDK)
If you’re embedding MCP in your own agent loop, use the officialmcp
Python SDK to talk to the server:
result.content is the verbatim JSON body from POST /v1/ask. See
the tool reference for the input schemas.
Configuration
Both tools share the same configuration, set via environment variables on the MCP server process:
Set them in the agent’s MCP config:
Verify with MCP Inspector
The MCP Inspector is the canonical way to debug a server end-to-end:- Tools list shows exactly two entries:
mireye_ask,mireye_fetch. - Resources list shows
mireye://catalog/fields,mireye://catalog/presets, andmireye://catalog/us-envelope. - Prompt list includes
mireye_site_report,mireye_flood_check,mireye_wildfire_underwrite, andmireye_pick_fields. - Call
mireye_askwithlat: 40.7128, lng: -74.006, question: "elevation?"— get a JSON response withanswer,confidence,citations. - Call
mireye_fetchwithlat: 40.7128, lng: -74.006, fields: ["elevation"]— get a JSON response withfields.elevation.valuepopulated.
Authentication
The local stdio adapter does not launch native MCP OAuth. It runs on your machine and uses a one-time device login to store a Mireye API token locally. Run:MIREYE_BASE_URL that login ran
against, and the token is only ever sent to that same URL. If you later
point MIREYE_BASE_URL somewhere else (staging, self-hosted), tool
calls behave as logged out and the error names both URLs — re-run
mireye-mcp login against the new URL, or set
MIREYE_BEARER_TOKEN explicitly. Tokens are also never sent over plain
http://, except to loopback hosts (localhost / 127.0.0.1 /
[::1]) for local development. status and logout --revoke use the
stored URL, so you can always inspect or revoke a stored login.
For non-interactive hosts, set MIREYE_BEARER_TOKEN in the MCP config.
The MCP server only forwards bearer tokens; Firebase verification and
account policy live in the HTTP API.
Remote MCP clients should connect to https://api.mireye.com/mcp
instead. They will receive the OAuth metadata and complete a browser
OAuth 2.1 + PKCE flow automatically when the client supports remote MCP
authorization.
Updating
Switching from the oldWithmireye-earth-mcppackage? Credentials now live in~/.config/mireye-mcp/credentials.json(the old path was~/.config/mireye-earth-mcp/), so the first run after switching looks unauthenticated. Re-runmireye-mcp loginonce to re-authenticate.
uvx, just re-invoke — uvx checks for a new version on each
cold call (or pin explicitly with uvx mireye-mcp@latest):