MCP server for source map debugging — fetch, inspect, lookup, and extract original sources from any production website
Strong tool definitions with clear naming, comprehensive descriptions (avg 180 chars), and complete input schemas. All 8 tools follow verb_noun pattern (sourcemap_*). Descriptions explain WHAT, WHEN, and prerequisites well. Input schemas include types, descriptions, and constraints (min/max for numeric params). Error handling via SrcmapError with recovery suggestions is well-structured. Main gaps: output schemas not formally documented in code; no tool annotations (readOnlyHint/destructiveHint) despite clear risk levels; some parameter descriptions could be more prescriptive about format/constraints.
Extract all embedded original source files from a source map to disk. Writes each sourcesContent entry as a file, preserving the directory structure. Handles webpack://, file://, and relative path prefixes. Use this after fetching a source map to get the full original source tree.
Download a JavaScript or CSS bundle and its source map from a URL. Automatically resolves the sourceMappingURL reference (inline data URIs, external URLs, and conventional .map suffix fallback). Saves both files to the output directory. Use this as the first step when debugging a production website.
Show metadata and statistics for a source map file. Returns file name, source count, names, mappings count, lines, content size, and debug ID. Use this to understand what a source map contains before doing lookups.
Find the original source position for a generated (minified) position. Given a line and column in the generated/minified file, returns the original source file, line, column, and optionally the identifier name. Use --context to also get surrounding lines of original source code. All positions are 0-based.
List mappings in a source map with pagination. Shows generated and original positions for each mapping. Optionally filter by source file. Use --limit and --offset for pagination.
Output schemas not formally documented. Tool descriptions state what is returned (e.g., 'Returns file name, source count, names, mappings count...') but no structured schema definition visible in code. LLMs cannot reliably parse unstructured text responses.
Tool annotations missing. sourcemap_fetch and sourcemap_extract_sources are destructive (WRITE risk), but no destructiveHint annotation present. sourcemap_info, sourcemap_validate, sourcemap_sources, sourcemap_mappings, sourcemap_lookup, sourcemap_resolve are read-only but lack readOnlyHint. Agents cannot distinguish safe from unsafe operations without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2025-06-18+ | v2 |
Reverse lookup: find the generated (minified) position for an original source position. Given a source file, line, and column, returns the generated line and column. All positions are 0-based.
List all original source files embedded in a source map. Shows each source path, whether it has embedded content, content size, and if it's on the ignore list. Use this to understand what files a bundle was built from.
Validate that a file is a valid source map. Reports whether the map is valid and its basic structure (sources, names, mappings count).
Parameter descriptions lack format/constraint details. 'file' param described as 'Path to a source map file (.map)' but no guidance on absolute vs relative paths, or validation rules. 'url' param in sourcemap_fetch has no format constraint (http/https only?). Descriptions should state expected format, range, and allowed values explicitly.
Error recovery guidance incomplete. toErrorResult() provides recovery suggestions for known error codes (FETCH_ERROR, NOT_FOUND, PARSE_ERROR, IO_ERROR, PATH_TRAVERSAL) but no guidance for unexpected errors. Agents need actionable next steps for all failure modes.
No pagination guidance in sourcemap_mappings description. Tool accepts limit (1-1000, default 50) and offset (default 0) but description does not explain how to iterate through all mappings or detect end-of-results. Should state: 'Use limit and offset to paginate. When returned count < limit, you have reached the end.'