Skip to main content
Glama
streamprobe-mcp

streamprobe-mcp

by CodeDTX

streamprobe-mcp

An MCP server that tells you why an HLS or DASH stream is broken.

Point it at a manifest URL and ask. It reads the playlist or MPD, checks the rendition ladder, the segment timing, the live window and the protection, and reports what is wrong with the evidence it judged on.

No ffmpeg. Manifest and delivery problems are HTTP and text, not pixels, so this runs from npx with nothing else installed. That is the difference between this and the media-processing MCP servers: they transcode, this diagnoses.

Install

Claude Code:

claude mcp add streamprobe -- npx -y streamprobe-mcp

Claude Desktop, Cursor, or anything else that speaks MCP over stdio:

{
  "mcpServers": {
    "streamprobe": {
      "command": "npx",
      "args": ["-y", "streamprobe-mcp"]
    }
  }
}

Node 20 or newer. No other dependencies.

Related MCP server: Video Brief Manifest MCP Server

Ask it things

Why is https://cdn.example.com/live/master.m3u8 stalling for some viewers?

What DRM is on this stream, and which key IDs?

Compare the ladder on our staging manifest against production.

Tools

Tool

What it answers

diagnose_stream

What is wrong with this stream, worst first. Pass deep: true to read the media playlists too, which is needed for segment timing and live window checks.

describe_stream

What is this stream: protocol, live or VOD, the ladder, codecs, audio and subtitle tracks, protection, ad markers. No opinions.

inspect_drm

Which systems protect it, with key IDs and license URIs. Reads the manifest only; never requests a license or attempts decryption.

check_segments

Are the segments actually there. Requests the newest few and reports failures and timings.

All four accept a headers object, for CDN tokens or a Referer your origin requires.

What it checks

Ladder shape: missing CODECS, duplicate bitrates, a rendition higher up the ladder with a smaller picture, single-rendition ladders, missing audio, and HLS variants pointing at an AUDIO group that has no EXT-X-MEDIA entry.

Delivery: segments longer than the declared EXT-X-TARGETDURATION, live windows holding fewer than three target durations, VOD playlists with no EXT-X-ENDLIST, renditions whose playlists do not load, and dynamic MPDs with no minimumUpdatePeriod.

Protection: Widevine, PlayReady, FairPlay, ClearKey and AES-128, identified by the UUID both protocols agree on, plus a warning for a system it does not recognise rather than silently reporting "no DRM".

Every finding quotes the line, attribute or number it decided on. A diagnosis you cannot verify against your own manifest is one you should not trust.

Example

$ npx streamprobe-mcp   # or: pnpm example <url> --deep

Protocol:    HLS (6)
Type:        vod
Structure:   multivariant
Renditions:  24 video, 3 audio, 1 text
Protection:  none declared

Video ladder:
  480x270     541 kbps     avc1.640015,mp4a.40.2
  640x360     902 kbps     avc1.64001e,mp4a.40.2
  1920x1080   6208 kbps    avc1.640028,mp4a.40.2

0 errors, 0 warnings, 0 notes
No problems found.

What it does not do

It does not transcode, download, or decrypt. It does not request DRM licenses. It does not measure real playback quality, because that needs a player and a viewer; this reads what the manifest claims and checks whether the delivery matches. For encoding and transcoding work, use one of the ffmpeg MCP servers, which is a different job.

It reads media bytes in exactly one place: check_segments requests the first two bytes of a segment to see whether it exists.

Use it without MCP

The diagnostics are a plain library, and importing it does not pull in the MCP SDK:

import { probeStream } from "streamprobe-mcp";

const { model, findings } = await probeStream(url, { deep: true });
for (const f of findings) console.log(f.severity, f.title, f.evidence);

Useful in CI, or in a monitoring job that should fail on a regression in the ladder.

Contributing

Checks are the interesting part, and they are deliberately easy to add: a Check is an id, an applies predicate and a run that returns findings. See src/checks/index.ts. A new check needs a test proving it fires, and the existing "finds nothing wrong with a healthy ladder" test must still pass. That test exists because a diagnostic tool that cries wolf on a correct manifest is worse than no tool.

pnpm install
pnpm check      # format, typecheck, test, build, pack
pnpm example <manifest-url> --deep

Licence

MIT. Built by CodeDTX, who build OTT and Android TV products and got tired of reading manifests by eye.

Available Tools

4 tools
check_segmentsCheck that segments are really thereA

Request the newest few segments of the first rendition and report failures and timings. Answers the case where the manifest is valid but the media behind it is missing or slow. Uses HEAD where the CDN allows it.

Inputs: url (required), sample, headers.

describe_streamDescribe a stream without judging itA

The facts only: protocol, live or VOD, the rendition ladder, codecs, audio and subtitle tracks, protection and ad markers. Use when you want to know what a stream is rather than what is wrong with it.

Inputs: url (required), headers.

diagnose_streamDiagnose an HLS or DASH streamA

Fetch a manifest and report what is wrong with it, worst first. Start here when a stream misbehaves and you do not yet know why. Set deep to also read each rendition's media playlist, which is required to catch segment timing and live window problems.

Inputs: url (required), deep, headers, maxRenditions.

inspect_drmInspect stream protectionA

Report the DRM systems, key identifiers and license URIs a manifest declares. Reads the manifest only: it never requests a license or attempts decryption.

Inputs: url (required), headers.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 4 tools

    Disambiguation4/5

    diagnose_stream is intentionally broad as a triage entry point, while describe_stream, inspect_drm, and check_segments each target a distinct concern. Some overlap exists between diagnose_stream's deep mode and check_segments, but the descriptions clearly delineate when each should be used.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern: diagnose_stream, describe_stream, inspect_drm, check_segments. The verbs are distinct and the objects clearly indicate the target of each operation.

    Tool Count5/5

    Four tools is well-scoped for a stream diagnostics server. Each tool covers a meaningful facet of the domain—overall diagnosis, factual description, DRM inspection, and segment health—without unnecessary redundancy.

    Completeness4/5

    The set covers the main streaming diagnostics workflows: triage, stream description, DRM inspection, and segment validation. Minor gaps remain, such as check_segments only examining the first rendition and no tool for deeper per-track analysis, but the core surface is reasonably complete.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Loudness compliance verdicts against formal broadcast standards (EBU R128, ATSC A/85). Measures audio/video with ffmpeg and returns a pass/fail verdict with exact deltas and remediation parameters.
      2
      47 PyPI
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Offline, dependency-free transport-layer hardening auditor for MCP Streamable HTTP endpoints, probing for DNS rebinding, CORS, session-ID, cleartext, and protocol conformance defects with a severity-weighted score and CI gate.
      MIT