{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_p6qttnnnssa2","handle":"lunara","url":"https://wellknown.network/agents/lunara","links":{"self":"https://wellknown.network/agents/lunara/record.json","html":"https://wellknown.network/agents/lunara","markdown":"https://wellknown.network/agents/lunara/record.md","api":"https://wellknown.network/api/v1/agents/lunara","status":"https://wellknown.network/api/v1/agents/lunara/status","claim":"https://wellknown.network/agents/lunara/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/lunara/claim.json","badge":"https://wellknown.network/agents/lunara/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/lunara/history","tools":"https://wellknown.network/api/v1/agents/lunara/tools"},"ard":{"identifier":"urn:air:lunaraai.cc:server:lunara","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Lunara","summary":"Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact.","description":"Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact.","publisher":{"name":"DarkMatteros","url":null},"homepage":"https://lunaraai.cc","repository":"https://github.com/DarkMatteros/DarkMatter","version":"1.0.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://lunaraai.cc/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-29T03:08:03.552394Z","publishedAt":"2026-10-29T03:08:03.552394Z","registryName":"io.github.DarkMatteros/lunara"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.translation","name":"Translation","confidence":1,"provenance":"derived"},{"slug":"media.speech-recognition","name":"Speech Recognition","confidence":1,"provenance":"derived"},{"slug":"documents.contracts","name":"Contracts & Legal","confidence":1,"provenance":"derived"},{"slug":"media.video-editing","name":"Video Editing","confidence":0.54,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":0.525,"provenance":"derived"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["content","dev","documents","media","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-10-29T17:24:30.737Z","lastProbedAt":"2026-10-29T17:24:30.737Z","statusComputedAt":"2026-10-29T17:27:24.501Z","reliability30d":{"probes":2,"successRate":1,"p50Ms":286,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":2,"ok":2,"authBoundaryOk":0,"serviceOk":2,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-29T17:24:30.737Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":274,"error":null,"detail":{"tools":[{"name":"lunara_list_tools","description":"Return every subtitle tool Lunara exposes, with the minutes each one costs. Call this first when you are unsure which tool fits."},{"name":"lunara_get_job","description":"Return the state of a subtitle job: status, progress, whether the SRT is ready, and how many cues it has. Poll this after lunara_upload_video."},{"name":"lunara_get_srt","description":"Return the subtitle file for a finished job. One line per cue. Use track=\"secondary\" for the translated track (English by default)."},{"name":"lunara_list_cues","description":"Return subtitle cues for a job as timestamps plus text, so you can inspect or reference individual lines before proposing edits."},{"name":"lunara_start_subtitle_job","description":"Run the full eight-layer subtitle pipeline on an audio or video URL you can already host. Produces a written-language track and a translated track. Prefer lunar"},{"name":"lunara_subtitle_from_url","description":"Start a persisted subtitle job from a URL you already host — no upload needed. Returns a job id; poll lunara_get_job every 15–30 s until status is \"completed\", "},{"name":"lunara_upload_video","description":"Reserve an upload slot and return the object key plus a signed URL per part. After uploading the bytes call lunara_finish_upload. Use this for a file you hold l"},{"name":"lunara_finish_upload","description":"Tell Lunara the bytes are uploaded so the pipeline can start. Returns the job id to poll with lunara_get_job."},{"name":"lunara_get_glossary","description":"Return the proper nouns Lunara has learned for this org, so names are spelled consistently across tracks."},{"name":"lunara_transcribe","description":"Run speech recognition only — no rewrite, no translation. Returns timed segments. Use this when you want the transcript itself, or when you plan to pick a later"},{"name":"lunara_translate","description":"Translate the text of an existing job’s cues into another language. Every cue boundary and timestamp is preserved; only the text changes. Use this instead of tr"},{"name":"lunara_rewrite","description":"Turn spoken Cantonese cue text into written Chinese. Every cue boundary and timestamp is preserved. Deliberate mispronunciations are never corrected, and proper"},{"name":"lunara_segment","description":"Approximate split, not audio-grounded segmentation: cue text is divided at clause punctuation and each piece receives a share of the original span proportional "},{"name":"lunara_glossary_extract","description":"Find candidate proper nouns in a job’s cues, ranked by frequency, with the first cue they appear in. Suggestions for a glossary, not corrections — nothing is re"},{"name":"lunara_guide","description":"Returns a step-by-step guide written to be read by a human, not by you. Call this when someone asks \"how do I use this\", \"what can it do\", \"how do I get started"},{"name":"lunara_get_queue","description":"How many transcription jobs are running and whether a new one can be accepted. Call this before lunara_start_subtitle_job or lunara_subtitle_from_url if you are"},{"name":"lunara_qa_contract","description":"Run the contract gate over both tracks: ASR text and timings byte-exact, cue length bounds, no empty cues. Returns pass/fail per rule. Free, because refusing a "},{"name":"lunara_probe_media","description":"Return duration, dimensions, codecs and container for a URL, plus whether the audio is mono 16 kHz already. Call this before choosing an ASR engine."},{"name":"lunara_get_coverage","description":"Report how much of the source timeline the subtitles cover, and list suspicious gaps longer than a second. Use before shipping a long video."},{"name":"lunara_readability","description":"Per-cue reading speed, displayed length and characters-per-second, with the cues that exceed comfortable limits. Mirrors the metrics shown in the editor."}],"toolCount":20,"toolsHash":"a8c234075c26615baa036c41ebbe4c4f7a3db7e646b950fc654b72b971659ea3","serverName":"lunara","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T09:29:12.729Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":298,"error":null,"detail":{"tools":[{"name":"lunara_list_tools","description":"Return every subtitle tool Lunara exposes, with the minutes each one costs. Call this first when you are unsure which tool fits."},{"name":"lunara_get_job","description":"Return the state of a subtitle job: status, progress, whether the SRT is ready, and how many cues it has. Poll this after lunara_upload_video."},{"name":"lunara_get_srt","description":"Return the subtitle file for a finished job. One line per cue. Use track=\"secondary\" for the translated track (English by default)."},{"name":"lunara_list_cues","description":"Return subtitle cues for a job as timestamps plus text, so you can inspect or reference individual lines before proposing edits."},{"name":"lunara_start_subtitle_job","description":"Run the full eight-layer subtitle pipeline on an audio or video URL you can already host. Produces a written-language track and a translated track. Prefer lunar"},{"name":"lunara_subtitle_from_url","description":"Start a persisted subtitle job from a URL you already host — no upload needed. Returns a job id; poll lunara_get_job every 15–30 s until status is \"completed\", "},{"name":"lunara_upload_video","description":"Reserve an upload slot and return the object key plus a signed URL per part. After uploading the bytes call lunara_finish_upload. Use this for a file you hold l"},{"name":"lunara_finish_upload","description":"Tell Lunara the bytes are uploaded so the pipeline can start. Returns the job id to poll with lunara_get_job."},{"name":"lunara_get_glossary","description":"Return the proper nouns Lunara has learned for this org, so names are spelled consistently across tracks."},{"name":"lunara_transcribe","description":"Run speech recognition only — no rewrite, no translation. Returns timed segments. Use this when you want the transcript itself, or when you plan to pick a later"},{"name":"lunara_translate","description":"Translate the text of an existing job’s cues into another language. Every cue boundary and timestamp is preserved; only the text changes. Use this instead of tr"},{"name":"lunara_rewrite","description":"Turn spoken Cantonese cue text into written Chinese. Every cue boundary and timestamp is preserved. Deliberate mispronunciations are never corrected, and proper"},{"name":"lunara_segment","description":"Approximate split, not audio-grounded segmentation: cue text is divided at clause punctuation and each piece receives a share of the original span proportional "},{"name":"lunara_glossary_extract","description":"Find candidate proper nouns in a job’s cues, ranked by frequency, with the first cue they appear in. Suggestions for a glossary, not corrections — nothing is re"},{"name":"lunara_guide","description":"Returns a step-by-step guide written to be read by a human, not by you. Call this when someone asks \"how do I use this\", \"what can it do\", \"how do I get started"},{"name":"lunara_get_queue","description":"How many transcription jobs are running and whether a new one can be accepted. Call this before lunara_start_subtitle_job or lunara_subtitle_from_url if you are"},{"name":"lunara_qa_contract","description":"Run the contract gate over both tracks: ASR text and timings byte-exact, cue length bounds, no empty cues. Returns pass/fail per rule. Free, because refusing a "},{"name":"lunara_probe_media","description":"Return duration, dimensions, codecs and container for a URL, plus whether the audio is mono 16 kHz already. Call this before choosing an ASR engine."},{"name":"lunara_get_coverage","description":"Report how much of the source timeline the subtitles cover, and list suspicious gaps longer than a second. Use before shipping a long video."},{"name":"lunara_readability","description":"Per-cue reading speed, displayed length and characters-per-second, with the cues that exceed comfortable limits. Mirrors the metrics shown in the editor."}],"toolCount":20,"toolsHash":"a8c234075c26615baa036c41ebbe4c4f7a3db7e646b950fc654b72b971659ea3","serverName":"lunara","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"lunara_list_tools","description":"Return every subtitle tool Lunara exposes, with the minutes each one costs. Call this first when you are unsure which tool fits."},{"name":"lunara_get_job","description":"Return the state of a subtitle job: status, progress, whether the SRT is ready, and how many cues it has. Poll this after lunara_upload_video."},{"name":"lunara_get_srt","description":"Return the subtitle file for a finished job. One line per cue. Use track=\"secondary\" for the translated track (English by default)."},{"name":"lunara_list_cues","description":"Return subtitle cues for a job as timestamps plus text, so you can inspect or reference individual lines before proposing edits."},{"name":"lunara_start_subtitle_job","description":"Run the full eight-layer subtitle pipeline on an audio or video URL you can already host. Produces a written-language track and a translated track. Prefer lunar"},{"name":"lunara_subtitle_from_url","description":"Start a persisted subtitle job from a URL you already host — no upload needed. Returns a job id; poll lunara_get_job every 15–30 s until status is \"completed\", "},{"name":"lunara_upload_video","description":"Reserve an upload slot and return the object key plus a signed URL per part. After uploading the bytes call lunara_finish_upload. Use this for a file you hold l"},{"name":"lunara_finish_upload","description":"Tell Lunara the bytes are uploaded so the pipeline can start. Returns the job id to poll with lunara_get_job."},{"name":"lunara_get_glossary","description":"Return the proper nouns Lunara has learned for this org, so names are spelled consistently across tracks."},{"name":"lunara_transcribe","description":"Run speech recognition only — no rewrite, no translation. Returns timed segments. Use this when you want the transcript itself, or when you plan to pick a later"},{"name":"lunara_translate","description":"Translate the text of an existing job’s cues into another language. Every cue boundary and timestamp is preserved; only the text changes. Use this instead of tr"},{"name":"lunara_rewrite","description":"Turn spoken Cantonese cue text into written Chinese. Every cue boundary and timestamp is preserved. Deliberate mispronunciations are never corrected, and proper"},{"name":"lunara_segment","description":"Approximate split, not audio-grounded segmentation: cue text is divided at clause punctuation and each piece receives a share of the original span proportional "},{"name":"lunara_glossary_extract","description":"Find candidate proper nouns in a job’s cues, ranked by frequency, with the first cue they appear in. Suggestions for a glossary, not corrections — nothing is re"},{"name":"lunara_guide","description":"Returns a step-by-step guide written to be read by a human, not by you. Call this when someone asks \"how do I use this\", \"what can it do\", \"how do I get started"},{"name":"lunara_get_queue","description":"How many transcription jobs are running and whether a new one can be accepted. Call this before lunara_start_subtitle_job or lunara_subtitle_from_url if you are"},{"name":"lunara_qa_contract","description":"Run the contract gate over both tracks: ASR text and timings byte-exact, cue length bounds, no empty cues. Returns pass/fail per rule. Free, because refusing a "},{"name":"lunara_probe_media","description":"Return duration, dimensions, codecs and container for a URL, plus whether the audio is mono 16 kHz already. Call this before choosing an ASR engine."},{"name":"lunara_get_coverage","description":"Report how much of the source timeline the subtitles cover, and list suspicious gaps longer than a second. Use before shipping a long video."},{"name":"lunara_readability","description":"Per-cue reading speed, displayed length and characters-per-second, with the cues that exceed comfortable limits. Mirrors the metrics shown in the editor."}],"package":null,"toolSurface":{"id":"ts_chpgaup27uvk","endpointId":"ep_k54y4v87kxjy","hash":"a8c234075c26615baa036c41ebbe4c4f7a3db7e646b950fc654b72b971659ea3","toolCount":20,"serverName":"lunara","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-29T09:29:12.742Z","lastSeenAt":"2026-10-29T17:24:30.745Z","observations":2,"toolNames":["lunara_list_tools","lunara_get_job","lunara_get_srt","lunara_list_cues","lunara_start_subtitle_job","lunara_subtitle_from_url","lunara_upload_video","lunara_finish_upload","lunara_get_glossary","lunara_transcribe","lunara_translate","lunara_rewrite","lunara_segment","lunara_glossary_extract","lunara_guide","lunara_get_queue","lunara_qa_contract","lunara_probe_media","lunara_get_coverage","lunara_readability"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.DarkMatteros/lunara","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.DarkMatteros%2Flunara","firstSeenAt":"2026-10-29T08:19:32.121Z","fetchedAt":"2026-10-29T08:19:32.121Z","normalizedAt":"2026-10-29T08:19:32.121Z"}]},"firstSeenAt":"2026-10-29T08:19:32.121Z","updatedAt":"2026-10-29T17:29:07.478Z"}