protogrid

Search / io.github.cyanheads/elevation-mcp-server

elevation-mcp-server

R0· no sign-in

Look up elevation worldwide, profile route ascent/descent, grid areas, check terrain line of sight.

v0.2.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality89good
Trust94of 100
Uptime, 30 days100%
Latency p50214 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "elevation-mcp-server": {
      "type": "http",
      "url": "https://elevation.caseyjhand.com/mcp"
    }
  }
}
claude mcp add --transport http elevation-mcp-server https://elevation.caseyjhand.com/mcp
[mcp_servers.elevation-mcp-server]
url = "https://elevation.caseyjhand.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "elevation-mcp-server": {
      "type": "remote",
      "url": "https://elevation.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "elevation-mcp-server": {
      "type": "http",
      "url": "https://elevation.caseyjhand.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=elevation-mcp-server&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vZWxldmF0aW9uLmNhc2V5amhhbmQuY29tL21jcCJ9"
}
{
  "servers": {
    "elevation-mcp-server": {
      "type": "http",
      "url": "https://elevation.caseyjhand.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "elevation-mcp-server": {
      "httpUrl": "https://elevation.caseyjhand.com/mcp"
    }
  }
}
extensions:
  "elevation-mcp-server":
    enabled: true
    name: "elevation-mcp-server"
    type: streamable_http
    uri: "https://elevation.caseyjhand.com/mcp"
    timeout: 300

Quality 89 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations4 of 4 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: elevation_get_points (destructiveHint); elevation_get_profile (destructiveHint); elevation_get_grid (destructiveHint); …
  • pass
    tools.token_costabout 2,771 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changes4 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15

4 tools, about 2,771 tokens to load them all · tool set 3f06be7cda78 · tools last changed 2026-10-18 · checked 2026-10-20 10:03 UTC

Tool changes

  • elevation_check_line_of_sightchangedinput schema, output schema
  • elevation_get_gridchangedoutput schema
  • elevation_get_profilechangedinput schema, output schema
  • elevation_get_pointschangeddescription, input schema, output schema
    before

    Look up ground elevation at up to 100 coordinates in one call, in meters and feet, with the dataset and resolution behind every point. Inside USGS 3DEP coverage (the US and its territories, plus much of Canada and Mexico) values come from 3DEP at 1–30 m resolution. Elsewhere they come from Open Topo Data: SRTM at about 30 m on land between 60°N and 56°S, and Mapzen terrain tiles beyond SRTM's coverage and over the ocean, where values below 0 m are sea-floor depths. A point with no data in any queried dataset returns status no_data instead of failing the call.

    after · 81% of words in common

    Look up ground elevation at up to 100 coordinates in one call, in meters and feet, with the dataset and resolution behind every point. Accepts up to 1,000 submitted positions; only the first 100 are validated and sampled, with counts and next_offset identifying the unvalidated remainder. Continue with originalPoints.slice(next_offset). Inside USGS 3DEP coverage (the US and its territories, plus much of Canada and Mexico) values come from 3DEP at 1–30 m resolution. Elsewhere they come from Open Topo Data: SRTM at about 30 m on land between 60°N and 56°S, and Mapzen terrain tiles beyond SRTM's coverage and over the ocean, where values below 0 m are sea-floor depths. A point with no data in any queried dataset returns status no_data instead of failing the call.

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance80
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +reachable +uptime-100% +updated-2d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://elevation.caseyjhand.com/mcp streamable-httpnoneyes100%214 ms2026-07-282026-10-20
packageregistryversionruntimesecrets
@cyanheads/elevation-mcp-servernpm0.2.0npx
@cyanheads/elevation-mcp-servernpm0.2.0npx

Tools (4)

elevation_check_line_of_sightread-onlyCheck whether terrain blocks the straight sightline between an observer and a target, each at a height above the ground, accounting for earth curvature and atmospheric refraction. Returns a verdict of clear, blocked, or indeterminate (when samples along the line have no data), the minimum clearance and the terrain point that limits it, and the first obstruction from the observer when blocked. With frequency_mhz, it also reports first Fresnel zone clearance against the 60% free-space bar. Where Mapzen reports sea-floor depth over open water, clearance is measured to the sea surface; USGS 3DEP values below 0 m (bay floor in some bays, or dry land) count as received unless water_surface_m sets a water level. Models terrain only: buildings and vegetation are not modeled beyond what the elevation source itself captures, and a ridge narrower than the reported sample spacing can be missed. To see the terrain between the points, call elevation_get_profile on the same two points.
elevation_get_gridread-onlySample a regular grid of terrain elevations across a bounding box and report the highest and lowest sampled points, the mean elevation, and the relief, plus the full elevation matrix with each cell's dataset. Values are point samples at grid nodes (box edges included), not cell averages, so a summit between nodes is missed; to refine a candidate high or low point, call again with a smaller box around it. Over open water, Mapzen cells are sea-floor depths. Rows times columns may not exceed 250.
elevation_get_pointsread-onlyLook up ground elevation at up to 100 coordinates in one call, in meters and feet, with the dataset and resolution behind every point. Accepts up to 1,000 submitted positions; only the first 100 are validated and sampled, with counts and next_offset identifying the unvalidated remainder. Continue with originalPoints.slice(next_offset). Inside USGS 3DEP coverage (the US and its territories, plus much of Canada and Mexico) values come from 3DEP at 1–30 m resolution. Elsewhere they come from Open Topo Data: SRTM at about 30 m on land between 60°N and 56°S, and Mapzen terrain tiles beyond SRTM's coverage and over the ocean, where values below 0 m are sea-floor depths. A point with no data in any queried dataset returns status no_data instead of failing the call.
elevation_get_profileread-onlySample terrain elevation at evenly spaced points along a route (a polyline of 2–1,000 vertices) and summarize it. Returns total distance, cumulative ascent and descent, start, end, minimum, and maximum elevation, and the steepest climb and descent grades, plus the per-sample profile with each sample's dataset unless include_samples is false. Ascent and descent are summed between samples, so they depend on the sample spacing reported in the result: denser sampling captures more small climbs, down to the source's resolution. Over open water, Mapzen samples are sea-floor depths. Each USGS 3DEP sample is a separate upstream request, so up to 250 samples take roughly 10–30 seconds.

Schemas: list_tools.

Similar MCP servers

More from io.github.cyanheads

And 140 more from this publisher.

Official server.json
{
  "name": "io.github.cyanheads/elevation-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://elevation.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.2.0",
  "packages": [
    {
      "version": "0.2.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/elevation-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        },
        {
          "name": "OPENTOPODATA_BASE_URL",
          "format": "string",
          "default": "https://api.opentopodata.org",
          "description": "Base URL of the Open Topo Data instance used outside USGS 3DEP coverage. Defaults to the public instance, paced to its published limits; any other URL is treated as a self-hosted instance, which must serve the srtm30m and mapzen datasets and accept at least 100 locations per request."
        }
      ]
    },
    {
      "version": "0.2.0",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/elevation-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_TRANSPORT_TYPE",
          "value": "http",
          "format": "string",
          "description": "Selects the HTTP transport."
        },
        {
          "name": "MCP_HTTP_HOST",
          "format": "string",
          "default": "127.0.0.1",
          "description": "The hostname for the HTTP server."
        },
        {
          "name": "MCP_HTTP_PORT",
          "format": "string",
          "default": "3010",
          "description": "The port to run the HTTP server on."
        },
        {
          "name": "MCP_HTTP_ENDPOINT_PATH",
          "format": "string",
          "default": "/mcp",
          "description": "The endpoint path for the MCP server."
        },
        {
          "name": "MCP_AUTH_MODE",
          "format": "string",
          "default": "none",
          "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        },
        {
          "name": "OPENTOPODATA_BASE_URL",
          "format": "string",
          "default": "https://api.opentopodata.org",
          "description": "Base URL of the Open Topo Data instance used outside USGS 3DEP coverage. Defaults to the public instance, paced to its published limits; any other URL is treated as a self-hosted instance, which must serve the srtm30m and mapzen datasets and accept at least 100 locations per request."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/cyanheads/elevation-mcp-server",
    "source": "github"
  },
  "description": "Look up elevation worldwide, profile route ascent/descent, grid areas, check terrain line of sight."
}