streamprobe-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@streamprobe-mcpWhy is https://cdn.example.com/live/master.m3u8 stalling?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-mcpClaude 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: loudcheck
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 |
| What is wrong with this stream, worst first. Pass |
| What is this stream: protocol, live or VOD, the ladder, codecs, audio and subtitle tracks, protection, ad markers. No opinions. |
| Which systems protect it, with key IDs and license URIs. Reads the manifest only; never requests a license or attempts decryption. |
| 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> --deepLicence
MIT. Built by CodeDTX, who build OTT and Android TV products and got tired of reading manifests by eye.
Available Tools
4 toolscheck_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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL of an HLS .m3u8 or DASH .mpd manifest | |
| sample | No | How many segments to probe. Default 5. | |
| headers | No | Extra request headers, for CDN tokens or a required Referer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states the probe scope ('newest few segments', 'first rendition'), the HTTP method strategy ('Uses HEAD where the CDN allows it'), and what is reported ('failures and timings'). This is meaningful behavioral context beyond the tool name and title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a distinct job: action, use case, and method detail. The content is front-loaded and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers why, what, and how in a compact way: it probes the newest few segments of the first rendition using HEAD where possible, to detect missing or slow media behind a valid manifest. There is no output schema, so a more detailed return-structure note would help, but 'report failures and timings' gives a workable model.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented well. The description adds no new parameter-level detail beyond loosely matching 'sample' with 'few segments.' Baseline 3 is appropriate because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Request the newest few segments of the first rendition and report failures and timings.' It also distinguishes the tool from manifest-level siblings by stating it 'answers the case where the manifest is valid but the media behind it is missing or slow.' This makes the tool's unique role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger condition: use this tool when the manifest is valid but the media behind it may be missing or slow. It does not name sibling tools or provide when-not guidance, so it falls just short of a 5, but the routing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL of an HLS .m3u8 or DASH .mpd manifest | |
| headers | No | Extra request headers, for CDN tokens or a required Referer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states the tool reports facts only, with no judgment, and enumerates the categories of information it returns. It does not mention side effects or permission requirements, but for a read-style describe operation the described behavior is sufficiently clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences contain no filler. The first sentence front-loads the specific fact categories, and the second sentence provides a crisp usage guideline with a clear contrast to judgment-oriented tools. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only description tool with a fully documented input schema, the description covers the tool's purpose, its output scope, and its intended usage context. There is no output schema, but the enumerated fact categories together with the sibling tool context give an agent enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (url and headers) are already well documented in the schema. The description does not add new parameter-level meaning, but it does clarify the overall purpose that connects the parameters to stream inspection. Baseline 3 is appropriate since the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('describe') and resource ('stream'), and enumerates exactly what kind of facts are returned: protocol, live/VOD status, rendition ladder, codecs, tracks, protection, and ad markers. It also explicitly contrasts with judging or diagnosing, which distinguishes it from sibling tools like diagnose_stream.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Use when you want to know what a stream is rather than what is wrong with it.' This tells the agent when to choose this tool and implies the alternative of diagnose_stream for problem-focused analysis. It does not explicitly name alternatives or state when not to use inspect_drm or check_segments, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL of an HLS .m3u8 or DASH .mpd manifest | |
| deep | No | Also fetch media playlists. One extra request per rendition. Default false. | |
| headers | No | Extra request headers, for CDN tokens or a required Referer | |
| maxRenditions | No | Cap on playlists read when deep. Default 6. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals the core mechanism (fetch manifest, report issues in priority order) and explains the deep mode's purpose ('required to catch segment timing and live window problems'). While it doesn't discuss failure modes or rate limits, the read-only nature is clear from 'fetch and report.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The core action is front-loaded, the usage trigger follows immediately, and the deep parameter explanation earns its place. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter diagnostic tool with no output schema, the description covers the main use case, when to start, and deep mode's rationale. It could be more complete with explicit sibling comparisons or output format hints, but 'report what is wrong with it' sufficiently signals the return concept.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic value for the deep parameter by explaining why it matters ('required to catch segment timing and live window problems'), which is not in the schema. Other parameters are adequately covered by schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Fetch a manifest and report what is wrong with it, worst first.' This clearly distinguishes it from siblings like describe_stream (descriptive) and check_segments (segment-focused). The phrase 'Start here when a stream misbehaves and you do not yet know why' anchors it as the first-line diagnostic tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger: 'Start here when a stream misbehaves and you do not yet know why,' which implies using more targeted tools once the cause is known. It does not explicitly name alternatives or exclusions, but the 'start here' framing provides enough routing context for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL of an HLS .m3u8 or DASH .mpd manifest | |
| headers | No | Extra request headers, for CDN tokens or a required Referer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It effectively states the tool is read-only, does not request licenses, and does not attempt decryption, which covers the most critical side-effect concerns. It does not disclose error behavior or rate limits, but for a simple inspection tool these are minor omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the core capability, the second adds a crucial safety qualifier. It is front-loaded with the purpose and avoids redundant restatement of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 parameters, no output schema, no annotations) and the schema covering parameter semantics, the description is largely complete. It tells the agent what the tool reports, the input constraints, and the non-destructive behavior. It does not describe the return format, but the absence of an output schema makes that a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both url and headers are already documented in the input schema. The tool description adds minimal parameter-specific meaning beyond the schema, only referring to 'manifest' generically, which aligns with the url format already described. This matches the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Report the DRM systems, key identifiers and license URIs a manifest declares.' It clearly distinguishes this from sibling tools like describe_stream or diagnose_stream by focusing specifically on DRM metadata, and adds a safety qualifier that it only reads the manifest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by emphasizing 'Reads the manifest only: it never requests a license or attempts decryption,' which signals it is safe for inspection and suggests when not to use it. However, it does not explicitly mention alternatives or when to choose this over diagnose_stream, describe_stream, or check_segments, so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
check_segments - First observed
describe_stream - First observed
diagnose_stream - First observed
inspect_drm
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Audit public webpages and supplied markup for HTML, CSS, SEO, JSON-LD, and link issues.
Parse WebVTT, SRT, or TTML for conformance, timing, overlaps, line length, and reading speed.
Structured data validator in one call: extracts JSON-LD, microdata and RDFa from a URL or raw HTM...
11Diagnose AI workflows for failure, security, and handoff risks — RED/AMBER/GREEN per node.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables comprehensive video quality analysis including metadata extraction, GOP structure analysis, quality metrics comparison (PSNR, SSIM, VMAF), artifact detection, and transcoding effect assessment through FFmpeg-based tools.6-
- AlicenseAqualityBmaintenanceLoudness 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.298 PyPI1MIT
- AlicenseAqualityCmaintenanceValidates structured AI video briefs for subject, motion, camera, visual-detail, and audio-direction signals, then builds a portable preflight manifest. Runs locally over stdio and does not call any generation backend.2MIT
- AlicenseNot gradedqualityCmaintenanceOffline, 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