Skip to main content
Glama

Resort webcams

get_resort_cams
Read-onlyIdempotent

The resort's webcams as links: PeakCam page URL, the operator's stream or page URL, a still-image URL when one exists, and health (live / down / unchecked, from PeakCam's probe, not proof of a live broadcast). Frames are never returned inline.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesPeakCam resort slug, lowercase kebab-case, e.g. `breckenridge` or `ski-portillo`. Get it from search_resorts.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
camsYes
nameYes
slugYes
licenseYes
updatedAtYes
attributionYes
canonicalUrlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / bytes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Size of the MP4."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / endsAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Capture time of the last frame (ISO-8601)."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / frames / description
      Added value: +"Archived frames in the clip; at 7 fps the duration is frames / 7 seconds."
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / posterUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Public JPEG of the clip's last frame, the <video> poster. Null for clips rendered before the poster existed."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses / items / properties / startsAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Capture time of the first frame (ISO-8601)."
      +}
    • changedOutput schema / properties / cams / items / properties / timelapses / items / properties / url / description
      Previous value: -"Public MP4 URL."New value: +"Public MP4 URL (H.264, 7 fps, 720p max, at most 3 MB). Link it; never inline it."
    • changedOutput schema / properties / cams / items / properties / timelapses / items / properties / window / description
      Previous value: -"Which clip: `24h` (rolling day), `storm` (one storm, see `stormDate`), or another label."New value: +"Which clip: `24h` (rolling day, replaced every render), `storm` (one storm, see `stormDate`), or another label."
    • changedOutput schema / properties / cams / items / properties / timelapses / items / required
      Previous value: -[
      -  "id",
      -  "window",
      -  "url",
      -  "frames",
      -  "renderedAt",
      -  "stormDate"
      -]New value: +[
      +  "id",
      +  "window",
      +  "url",
      +  "posterUrl",
      +  "frames",
      +  "startsAt",
      +  "endsAt",
      +  "bytes",
      +  "renderedAt",
      +  "stormDate"
      +]
  2. Changed5 schema fields changed
    • addedOutput schema / properties / cams / items / properties / credit
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Attribution line to show with the frame. Null means credit the resort."
      +}
    • addedOutput schema / properties / cams / items / properties / kind
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "summit",
      +        "mid",
      +        "base",
      +        "snow-stake",
      +        "village",
      +        "approach"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What the cam looks at. Null when not classified."
      +}
    • addedOutput schema / properties / cams / items / properties / sourceTermsUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The operator's terms governing reuse of this feed, when known."
      +}
    • addedOutput schema / properties / cams / items / properties / timelapses
      Added value: +{
      +  "description": "Rendered clips, once PeakCam renders them for this cam.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "frames": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "renderedAt": {
      +        "description": "ISO-8601 instant the clip was rendered.",
      +        "type": "string"
      +      },
      +      "stormDate": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "YYYY-MM-DD of the storm a `storm` clip covers."
      +      },
      +      "url": {
      +        "description": "Public MP4 URL.",
      +        "type": "string"
      +      },
      +      "window": {
      +        "description": "Which clip: `24h` (rolling day), `storm` (one storm, see `stormDate`), or another label.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "window",
      +      "url",
      +      "frames",
      +      "renderedAt",
      +      "stormDate"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / cams / items / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "elevation",
      -  "live",
      -  "lastCheckedAt",
      -  "stillUrl",
      -  "capturedAt",
      -  "embedType",
      -  "pageUrl",
      -  "sourceUrl"
      -]New value: +[
      +  "id",
      +  "name",
      +  "elevation",
      +  "live",
      +  "lastCheckedAt",
      +  "stillUrl",
      +  "capturedAt",
      +  "embedType",
      +  "pageUrl",
      +  "sourceUrl",
      +  "kind",
      +  "credit",
      +  "sourceTermsUrl"
      +]
  3. First observed

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: it defines the health field's domain (live/down/unchecked) and warns it comes from PeakCam's probe and is 'not proof of a live broadcast.' That caveat prevents a real misinterpretation. It stops short of describing caching, refresh cadence, or behavior when a cam is missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the resource and then enumerates the return fields in a compact colon-separated list. Every clause carries information; only the parenthetical health caveat slightly interrupts the flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description is not obliged to explain return values, yet it usefully characterizes them anyway and clarifies the health semantics. For a single-parameter read-only lookup, nothing critical is missing; only explicit routing to the timeline/timelapse siblings would improve it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single slug parameter is fully documented in the schema (kebab-case format plus the search_resorts pointer). The description adds no parameter detail of its own, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (the resort's webcams) and enumerates exactly what is returned: PeakCam page URL, operator stream/page URL, still-image URL, and a health flag. That specificity lets an agent distinguish it from siblings like get_cam_timeline and get_timelapses, though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied. The clause 'Frames are never returned inline' hints that an agent wanting actual imagery must go elsewhere, but no sibling tool or condition is named. There is no explicit statement of when to prefer this over get_cam_timeline or get_timelapses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.