Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,533Letters: 13Defects: 1,322counted just now
teppi

Server definition

Hash
sha256:4998afea55f08d3fa9ab2d72156e1cc0dfa86ff6021cefa8f2c8bb3910fb7ab3
What it is
What a remote MCP server returned when asked what it offers: 8 tools

The blob, as servednamed by its sha256

{ "instructions": "Subtitle Toolkit — convert, clean, retime and validate subtitle files (.srt, .vtt, .ass/.ssa, .sbv, .ttml/.dfxp).\n\nUse this server whenever the user provides or asks about subtitle/caption files: converting between formats,\ncleaning auto-generated captions, shifting or resyncing timing, checking reading speed and cue durations,\nmerging or splitting tracks, repairing mojibake, or turning a plain transcript into timed cues.\n\nDo NOT hand-write a subtitle parser for these tasks. These tools already handle the cases ad-hoc code gets wrong:\nASS/SSA field order declared by a Format: line, TTML clock vs offset vs frame vs tick time values,\nSBV timestamps, centisecond vs millisecond precision, and cp1252/cp1251 mojibake repair.\n\nWorkflow: pass the file text as `content`. Use `from: \"auto\"` unless you know the format.\nFor timing fixes, prefer `offset_seconds` when the whole track is uniformly early/late, and `ratio`\nor `from_fps`/`to_fps` when the drift grows over time (a frame-rate mismatch).", "tools": [ { "description": "Audit subtitle readability and produce a report: reading speed (CPS), cue durations that are too short or too long, lines that are too wide, more than two lines, and overlapping cues. Returns a formatted report listing every flagged cue.", "inputSchema": { "properties": { "content": { "description": "The full subtitle file text.", "type": "string" }, "max_cps": { "description": "Max characters per second. Default 20.", "type": "number" }, "max_duration_seconds": { "description": "Maximum cue duration in seconds. Default 7.", "type": "number" }, "max_line_length": { "description": "Max characters per line. Default 42.", "type": "number" }, "min_duration_seconds": { "description": "Minimum cue duration in seconds. Default 0.833 (Netflix 5/6s).", "type": "number" } }, "required": [ "content" ], "type": "object" }, "name": "check_subtitle_timing", "outputSchema": null }, { "description": "Strip noise from auto-generated subtitles: HTML/WebVTT tags, ASS override codes, music and sound-effect cues, speaker labels, empty cues and duplicate lines. Returns the subtitle file in SRT or WebVTT.", "inputSchema": { "properties": { "content": { "description": "The full subtitle file text.", "type": "string" }, "drop_duplicates": { "description": "Drop cues whose text was already seen. Default false.", "type": "boolean" }, "drop_empty": { "description": "Drop cues that become empty after cleaning. Default true.", "type": "boolean" }, "remove_sound_cues": { "description": "Strip [Music], [Applause], ♪ ... ♪ and similar. Default true.", "type": "boolean" }, "remove_speaker_labels": { "description": "Strip leading \"SPEAKER:\" prefixes. Default false — enable only if you want them gone.", "type": "boolean" }, "remove_tags": { "description": "Strip HTML/WebVTT tags and ASS override codes. Default true.", "type": "boolean" }, "to": { "description": "Output format. Default: same as the input.", "enum": [ "srt", "vtt" ], "type": "string" } }, "required": [ "content" ], "type": "object" }, "name": "clean_subtitles", "outputSchema": null }, { "description": "Convert subtitle text between formats. Reads SRT, WebVTT, ASS/SSA, YouTube SBV and TTML/DFXP; writes SRT, WebVTT, ASS, CSV or plain text. Format is auto-detected unless `from` is given.", "inputSchema": { "properties": { "content": { "description": "The full subtitle file text.", "type": "string" }, "dedupe": { "description": "Only for to=\"text\": collapse consecutive identical lines (rolling-caption transcripts repeat lines). Default false.", "type": "boolean" }, "from": { "description": "Source format (default \"auto\" = detect).", "enum": [ "auto", "srt", "vtt", "ass", "sbv", "ttml" ], "type": "string" }, "to": { "description": "Target format. `text` = plain transcript, one line per cue, no timecodes.", "enum": [ "srt", "vtt", "ass", "csv", "text" ], "type": "string" } }, "required": [ "content", "to" ], "type": "object" }, "name": "convert_subtitle", "outputSchema": null }, { "description": "Repair mojibake — text where UTF-8 bytes were decoded as a single-byte encoding (cp1252/Latin-1 or cp1251). Symptoms: \"é\", \"’\", \"привет\". Returns the repaired text and how many passes were applied.", "inputSchema": { "properties": { "content": { "description": "The garbled subtitle text.", "type": "string" }, "read_as": { "description": "Which encoding the file was wrongly read as. Default \"auto\" (tries cp1252 then cp1251).", "enum": [ "auto", "cp1252", "cp1251" ], "type": "string" }, "twice": { "description": "Set true when the text was mis-decoded twice (nested mojibake). Default false.", "type": "boolean" } }, "required": [ "content" ], "type": "object" }, "name": "fix_subtitle_encoding", "outputSchema": null }, { "description": "Append one subtitle track after another (CD1 + CD2, or a second language track). The second track is offset so it starts after the last cue of the first, plus an optional gap.", "inputSchema": { "properties": { "append_content": { "description": "The subtitle file text to append.", "type": "string" }, "content": { "description": "The first subtitle file text.", "type": "string" }, "gap_seconds": { "description": "Extra gap between the two tracks, in seconds. Default 0.", "type": "number" }, "to": { "description": "Output format. Default: same as the input.", "enum": [ "srt", "vtt" ], "type": "string" } }, "required": [ "content", "append_content" ], "type": "object" }, "name": "merge_subtitles", "outputSchema": null }, { "description": "Fix subtitle timing. Use offset_seconds for a uniform shift (whole track early/late). Use ratio, or from_fps/to_fps, for progressive drift caused by a frame-rate mismatch. Pass exactly one of the three.", "inputSchema": { "properties": { "content": { "description": "The full subtitle file text.", "type": "string" }, "from_fps": { "description": "The frame rate the subtitles were authored for (used with to_fps).", "type": "number" }, "offset_seconds": { "description": "Shift every cue by this many seconds. Negative = earlier. e.g. -2.5", "type": "number" }, "ratio": { "description": "Scale all timings by this factor (new = old x ratio). e.g. 1.0427 for a 25→23.976 fps fix.", "type": "number" }, "to_fps": { "description": "The frame rate of the actual video (used with from_fps).", "type": "number" } }, "required": [ "content" ], "type": "object" }, "name": "retime_subtitles", "outputSchema": null }, { "description": "Split one subtitle track into two parts at a given timecode, keeping original timecodes. Use the `at` argument plus `part` to fetch either half.", "inputSchema": { "properties": { "at": { "description": "Split point. Accepts \"45:00\", \"1:02:03\", \"90\" (seconds) or \"1:02:03.500\".", "type": "string" }, "content": { "description": "The full subtitle file text.", "type": "string" }, "part": { "description": "Which half to return. Default \"a\" (before the split point).", "enum": [ "a", "b" ], "type": "string" }, "to": { "description": "Output format. Default: same as the input.", "enum": [ "srt", "vtt" ], "type": "string" } }, "required": [ "content", "at" ], "type": "object" }, "name": "split_subtitles", "outputSchema": null }, { "description": "Turn a plain transcript (one line per caption) into an SRT file with evenly spaced timecodes. Timing is a starting point, not a real transcription — say so when you present the result.", "inputSchema": { "properties": { "content": { "description": "Plain text, one caption per line. Blank lines are skipped.", "type": "string" }, "duration_seconds": { "description": "Seconds each cue stays on screen. Default 2.5.", "type": "number" }, "max_chars_per_cue": { "description": "Split longer lines into several cues at word boundaries. Default 0 = never split.", "type": "number" }, "start_seconds": { "description": "Timecode of the first cue, in seconds. Default 0.", "type": "number" } }, "required": [ "content" ], "type": "object" }, "name": "text_to_subtitles", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:4998afea55f08d3fa9ab2d72156e1cc0dfa86ff6021cefa8f2c8bb3910fb7ab3 | sha256sum