Lunara
REMOTE · LUNARAAI.CC
Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact.
Available components
Last scanned (20 hours ago)
Scores higher than 84% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Design and Media
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability77
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2190 tokens (~109/item across 20 items; 20 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
- Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Schema quality: pass → fail ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Schema quality: good → excellent functional
- New tool “lunara_get_queue” functional
- New tool “lunara_guide” functional
- 29 Oct 26 78
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://lunaraai.cc/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=lunaraai.cc | CN=YR2,O=Let's Encrypt,C=US | 16 Sept 2026 | 15 Dec 2026 | RSA 2048 | SHA256-RSA | 693509894d5d7aa3b1f696d6e90787a5d4a |
| SANs: lunaraai.cc | ||||||
| CN=YR2,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | 4ebd24947e24d394802d84a52fd5b319 |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of lunaraai.cc. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| cc. | present | 12593 | 13 | Verified |
| lunaraai.cc. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="lunara", resource_metadata="https://lunaraai.cc/.well-known/oauth-protected-resource"
Bearer realm="lunara", resource_metadata="https://lunaraai.cc/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000 |
| content-security-policy | frame-ancestors 'self'; object-src 'none'; base-uri 'self' |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
Protected resource metadata
| Document | https://lunaraai.cc/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://lunaraai.cc/mcp |
| Authorisation server | https://lunaraai.cc |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://lunaraai.cc/mcp | Verified | 200 | |
| http (plaintext) | http://lunaraai.cc/mcp | HTTPS enforced | 308 | https://lunaraai.cc/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
lunara_finish_upload ~103
Tell Lunara the bytes are uploaded so the pipeline can start. Returns the job id to poll with lunara_get_job.
| Name | Type | Req | Description |
|---|---|---|---|
| durationMs | integer | yes | Media duration in milliseconds. |
| key | string | yes | The object key. |
| parts | array | yes | Uploaded parts, each { PartNumber, ETag }. |
| uploadId | string | yes | The multipart upload id. |
| videoId | string | yes | The video id from lunara_upload_video. |
No output schema declared.
No examples provided.
lunara_get_coverage ~50
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 | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job to inspect. |
No output schema declared.
No examples provided.
lunara_get_glossary ~42
Return the proper nouns Lunara has learned for this org, so names are spelled consistently across tracks.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Default 100. |
No output schema declared.
No examples provided.
lunara_get_job ~61
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 | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job id returned by lunara_upload_video. |
No output schema declared.
No examples provided.
lunara_get_queue ~62
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 submitting several jobs — when saturated, wait the retryAfterSeconds rather than retrying immediately.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
lunara_get_srt ~68
Return the subtitle file for a finished job. One line per cue. Use track="secondary" for the translated track (English by default).
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job id. |
| track | string | – | primary = the written-language track; secondary = the translation. |
No output schema declared.
No examples provided.
lunara_glossary_extract ~75
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 rewritten.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job whose cues to scan. |
| limit | integer | – | Maximum terms to return. Default 50. |
No output schema declared.
No examples provided.
lunara_guide ~188
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", or when you need to explain the workflow rather than execute it. Pass journey="first_subtitle" for the end-to-end path, "api_key" for credential setup, "languages" for what is supported, or "limits" for what it cannot do. Answer the person with this text rather than paraphrasing from memory.
| Name | Type | Req | Description |
|---|---|---|---|
| journey | string | – | Which journey to explain. first_subtitle: upload to finished file. api_key: getting a credential. languages: what it does and does not handle. limits: honest boundaries. edit_subtitles: fixing a line… |
No output schema declared.
No examples provided.
lunara_list_cues ~76
Return subtitle cues for a job as timestamps plus text, so you can inspect or reference individual lines before proposing edits.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job id. |
| limit | integer | – | How many cues to return. Default 100. |
| offset | integer | – | Skip this many cues. Default 0. |
No output schema declared.
No examples provided.
lunara_list_tools ~36
Return every subtitle tool Lunara exposes, with the minutes each one costs. Call this first when you are unsure which tool fits.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
lunara_probe_media ~54
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 | Type | Req | Description |
|---|---|---|---|
| mediaUrl | string | yes | URL to probe. |
No output schema declared.
No examples provided.
lunara_qa_contract ~83
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 broken track should never cost the caller money.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job to validate. |
| track | string | – | Which track to check. Default both. |
No output schema declared.
No examples provided.
lunara_readability ~60
Per-cue reading speed, displayed length and characters-per-second, with the cues that exceed comfortable limits. Mirrors the metrics shown in the editor.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job to measure. |
| track | string | – | Default primary. |
No output schema declared.
No examples provided.
lunara_rewrite ~73
Turn spoken Cantonese cue text into written Chinese. Every cue boundary and timestamp is preserved. Deliberate mispronunciations are never corrected, and proper nouns are protected.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job whose cues to rewrite. |
| track | string | – | Which track to read. Default primary. |
No output schema declared.
No examples provided.
lunara_segment ~132
Approximate split, not audio-grounded segmentation: cue text is divided at clause punctuation and each piece receives a share of the original span proportional to its character count. The words are not changed. Timings are estimated, so treat them as a reading aid rather than a re-alignment — use lunara_start_subtitle_job if you need timing derived from the audio.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job whose cues to re-cut. |
| maxCueMs | integer | – | Duration ceiling per cue in ms. Default 7000. |
| track | string | – | Which track to read. Default primary. |
No output schema declared.
No examples provided.
lunara_start_subtitle_job ~135
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 lunara_upload_video when the file is local.
| Name | Type | Req | Description |
|---|---|---|---|
| audioUrl | string | yes | A URL Lunara can download (public or pre-signed). |
| primaryLang | string | – | Language of the written track. Default yue-Hant. |
| secondaryLang | string | – | Language of the translated track. Default en. |
| spokenLang | string | – | What the speaker is speaking, e.g. yue-Hant-HK. Defaults to primaryLang. |
No output schema declared.
No examples provided.
lunara_subtitle_from_url ~181
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", then call lunara_get_srt. Prefer this over lunara_upload_video whenever the media is reachable by URL.
| Name | Type | Req | Description |
|---|---|---|---|
| audioUrl | string | yes | Direct HTTP(S) URL to the audio or video file. Must be downloadable by our server. |
| filename | string | – | Display name for the result. Defaults to the URL basename. |
| primaryLang | string | – | Language of the written track. Default yue-Hant. |
| secondaryLang | string | – | Language of the translated track. Default en. |
| spokenLang | string | – | What the speaker is speaking, e.g. yue-Hant-HK. Defaults to auto-detect. |
No output schema declared.
No examples provided.
lunara_transcribe ~93
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 stage yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| audioUrl | string | yes | Direct HTTP(S) URL to the audio or video file. |
| spokenLang | string | – | What the speaker is speaking, e.g. yue-Hant-HK. Defaults to auto-detect. |
No output schema declared.
No examples provided.
lunara_translate ~85
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 translating yourself so the timing contract holds.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | The job whose cues to translate. |
| targetLang | string | yes | Target language. |
| track | string | – | Which track to read. Default primary. |
No output schema declared.
No examples provided.
lunara_upload_video ~178
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 locally.
| Name | Type | Req | Description |
|---|---|---|---|
| clientOperationId | string | – | Idempotency key. Reuse the same value to retry without creating a second upload. |
| filename | string | yes | Original filename, used for the download name. |
| mime | string | yes | MIME type, e.g. audio/mpeg, video/mp4. |
| primaryLang | string | – | Written-track language. Default yue-Hant. |
| projectId | string | – | Project to upload into. Omit to let Lunara reuse the most recent project for this organisation. |
| secondaryLang | string | – | Translated-track language. Default en. |
| sizeBytes | integer | yes | Exact file size in bytes. |
No output schema declared.
No examples provided.
How do I install the Lunara MCP server?
Lunara is a hosted endpoint at https://lunaraai.cc/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · lunaraai.cc
claude mcp add --transport http darkmatteros-lunara 'https://lunaraai.cc/mcp'
What is the Lunara MCP server?
Lunara is an MCP server listed in the public MCP registry as io.github.DarkMatteros/lunara. Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact. This page covers its hosted endpoint (https://lunaraai.cc/mcp).
Is the Lunara MCP server safe to use?
Lunara scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Lunara MCP server expose?
Lunara exposes 20 tools: lunara_list_tools, lunara_get_job, lunara_get_srt, lunara_list_cues, lunara_start_subtitle_job, and 15 more. Their descriptions and schemas cost roughly 1,835 tokens of context every time the server is loaded.
Does the Lunara MCP server require authentication?
Yes. Lunara asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Lunara MCP server still maintained?
Lunara is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.