# Lunara > Subtitle production for Cantonese, Mandarin, English, Japanese and Korean. Upload one audio or > video file and Lunara returns a written-language subtitle track plus a translated track, with > ASR text and timings preserved byte-for-byte. Lunara is reachable two ways: a website upload box for people, and an MCP server for agents. An agent that can call MCP tools can upload a file, start the pipeline, poll the job and download the finished SRT without a human in the loop. ## MCP server - Endpoint: https://lunaraai.cc/mcp - Transport: HTTP POST, JSON-RPC 2.0 - Auth: `Authorization: Bearer lnr_live_…` (create a key at https://lunaraai.cc/settings) - Manifest: https://lunaraai.cc/.well-known/mcp.json - OpenAPI: https://lunaraai.cc/openapi.json Protocol methods: `initialize`, `tools/list`, `tools/call`, `ping`. ## Tools Each tool is priced in minutes drawn from the organisation's balance. Read-only tools are free. ### lunara_guide — free Return a step-by-step guide written for a **person**, not for you. Call this when someone asks how to use Lunara, what it can do, how to get started, or what its limits are — then relay the text rather than paraphrasing from memory. `journey` is one of: `first_subtitle`, `api_key`, `languages`, `limits`, `edit_subtitles`, `agent`. Omit it to get every journey at once. A longer version of the same content, for a crawler rather than a call: https://lunaraai.cc/llms-full.txt ### lunara_list_tools — free Return every tool with its price. Call this first if you are unsure which tool fits. ### lunara_get_job — free Return a job's status, progress, `srtReady` flag and cue count. Poll this after starting a job. ### lunara_get_srt — free Return the finished subtitle file. One line per cue. `track: "secondary"` returns the translation. ### lunara_list_cues — free Return cues as `{ idx, startMs, endMs, text, secondaryText }` so you can inspect individual lines. ### lunara_upload_video — 5 minutes Reserve an upload slot. Returns a video id, an upload id, an object key and one signed URL per part. ### lunara_finish_upload — free Tell Lunara the bytes have landed so the pipeline starts. Returns a job id. ### lunara_start_subtitle_job — 5 minutes Run the pipeline on a URL you already host. Suitable for public or pre-signed media URLs. ### lunara_get_glossary — free Return the organisation's proper-noun glossary so names stay consistent across tracks. ### lunara_propose_edits — 1 minute Ask the editor agent for proposed cue edits. Review before applying, so the byte-exact ASR contract is never broken by an unattended rewrite. ### lunara_apply_proposals — 1 minute Commit proposals returned by `lunara_propose_edits`. ## Example ```bash curl -s https://lunaraai.cc/mcp \ -H "authorization: Bearer $LUNARA_API_KEY" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` ```bash # Start a job from a URL you host, then poll it. curl -s https://lunaraai.cc/mcp \ -H "authorization: Bearer $LUNARA_API_KEY" \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"lunara_start_subtitle_job","arguments":{"audioUrl":"https://example.com/talk.mp3"}}}' ``` ## What Lunara does not do - It does not rewrite what a speaker said. ASR text and timings are preserved exactly; only punctuation, cue boundaries and the separate written/translated tracks are produced. - It does not accept a cue text you invented. Edits go through `propose_edits` so every change is traceable to a proposal.