{
 "voice": "One card of the book.",
 "agent": {
  "slug": "lunara",
  "name": "Lunara",
  "specialty": "translation",
  "description": "Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-11-01T23:11:49.551Z",
  "card": "/agent/lunara",
  "url": "https://allagents.app/agent/lunara",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://lunaraai.cc/mcp",
   "site": "https://lunaraai.cc"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://lunaraai.cc",
   "hire": null
  },
  "bubble": "closed",
  "score": 54,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-11-02",
   "total": 20,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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…"
    },
    {
     "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."
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://lunaraai.cc/mcp",
   "answers": true,
   "checked": "2026-11-02T06:05:11.962Z",
   "http": 405,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-02T06:49:04.072Z",
     "since": "2026-11-02T06:49:04.072Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-02T06:49:04.072Z",
    "since": "2026-11-02T06:49:04.072Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 405,
   "checked": "2026-11-02T06:05:11.962Z",
   "last_answer_at": "2026-11-02T06:05:11.962Z",
   "last_ms": 499,
   "checked_at": "2026-11-02T06:05:11.962Z"
  }
 }
}