# Lunara (remote · lunaraai.cc)

Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact.

- Trust score: 81/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `lunaraai.cc`: 81/100 (this document), [markdown](https://verifymcp.io/servers/darkmatteros-lunara/lunaraai.md), [page](https://verifymcp.io/servers/darkmatteros-lunara/lunaraai)

## Channel facts

- Endpoint: `https://lunaraai.cc/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.1`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - 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.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - 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.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### 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.

### Claude

```bash
claude mcp add --transport http darkmatteros-lunara 'https://lunaraai.cc/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "darkmatteros-lunara": {
      "url": "https://lunaraai.cc/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "darkmatteros-lunara": {
      "type": "http",
      "url": "https://lunaraai.cc/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.darkmatteros-lunara]
url = "https://lunaraai.cc/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "darkmatteros-lunara": {
      "type": "remote",
      "url": "https://lunaraai.cc/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add darkmatteros-lunara --url 'https://lunaraai.cc/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  darkmatteros-lunara:
    url: "https://lunaraai.cc/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "darkmatteros-lunara": {
      "Transport": "http",
      "Url": "https://lunaraai.cc/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add darkmatteros-lunara -t streamable-http -u 'https://lunaraai.cc/mcp'
```

### Other

```json
{
  "mcpServers": {
    "darkmatteros-lunara": {
      "type": "http",
      "url": "https://lunaraai.cc/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 81, +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.

### 2026-11-02 (score 80, +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.

### 2026-10-31 (score 79, +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.

### 2026-10-30 (score 78, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional regression] Schema quality: pass → fail
- [functional improvement] Stability: unverified → 0.03
- [functional] Schema quality: good → excellent
- [functional] New tool “lunara_get_queue”
- [functional] New tool “lunara_guide”

### 2026-10-29 (score 78)

First indexed and scored.

## MCP tools (20)

### `lunara_list_tools` (~36 tokens)

Return every subtitle tool Lunara exposes, with the minutes each one costs. Call this first when you are unsure which tool fits.

### `lunara_get_job` (~61 tokens)

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.

Input parameters:

- `jobId` (string, required): The job id returned by lunara_upload_video.

### `lunara_get_srt` (~68 tokens)

Return the subtitle file for a finished job. One line per cue. Use track="secondary" for the translated track (English by default).

Input parameters:

- `jobId` (string, required): The job id.
- `track` (string): primary = the written-language track; secondary = the translation.

### `lunara_list_cues` (~76 tokens)

Return subtitle cues for a job as timestamps plus text, so you can inspect or reference individual lines before proposing edits.

Input parameters:

- `jobId` (string, required): The job id.
- `limit` (integer): How many cues to return. Default 100.
- `offset` (integer): Skip this many cues. Default 0.

### `lunara_start_subtitle_job` (~135 tokens)

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.

Input parameters:

- `audioUrl` (string, required): 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.

### `lunara_subtitle_from_url` (~181 tokens)

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.

Input parameters:

- `audioUrl` (string, required): 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.

### `lunara_upload_video` (~178 tokens)

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.

Input parameters:

- `clientOperationId` (string): Idempotency key. Reuse the same value to retry without creating a second upload.
- `filename` (string, required): Original filename, used for the download name.
- `mime` (string, required): 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, required): Exact file size in bytes.

### `lunara_finish_upload` (~103 tokens)

Tell Lunara the bytes are uploaded so the pipeline can start. Returns the job id to poll with lunara_get_job.

Input parameters:

- `durationMs` (integer, required): Media duration in milliseconds.
- `key` (string, required): The object key.
- `parts` (array, required): Uploaded parts, each { PartNumber, ETag }.
- `uploadId` (string, required): The multipart upload id.
- `videoId` (string, required): The video id from lunara_upload_video.

### `lunara_get_glossary` (~42 tokens)

Return the proper nouns Lunara has learned for this org, so names are spelled consistently across tracks.

Input parameters:

- `limit` (integer): Default 100.

### `lunara_transcribe` (~93 tokens)

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.

Input parameters:

- `audioUrl` (string, required): 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.

### `lunara_translate` (~85 tokens)

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.

Input parameters:

- `jobId` (string, required): The job whose cues to translate.
- `targetLang` (string, required): Target language.
- `track` (string): Which track to read. Default primary.

### `lunara_rewrite` (~73 tokens)

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.

Input parameters:

- `jobId` (string, required): The job whose cues to rewrite.
- `track` (string): Which track to read. Default primary.

### `lunara_segment` (~132 tokens)

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.

Input parameters:

- `jobId` (string, required): 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.

### `lunara_glossary_extract` (~75 tokens)

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.

Input parameters:

- `jobId` (string, required): The job whose cues to scan.
- `limit` (integer): Maximum terms to return. Default 50.

### `lunara_guide` (~188 tokens)

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.

Input parameters:

- `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…

### `lunara_get_queue` (~62 tokens)

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.

### `lunara_qa_contract` (~83 tokens)

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.

Input parameters:

- `jobId` (string, required): The job to validate.
- `track` (string): Which track to check. Default both.

### `lunara_probe_media` (~54 tokens)

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.

Input parameters:

- `mediaUrl` (string, required): URL to probe.

### `lunara_get_coverage` (~50 tokens)

Report how much of the source timeline the subtitles cover, and list suspicious gaps longer than a second. Use before shipping a long video.

Input parameters:

- `jobId` (string, required): The job to inspect.

### `lunara_readability` (~60 tokens)

Per-cue reading speed, displayed length and characters-per-second, with the cues that exceed comfortable limits. Mirrors the metrics shown in the editor.

Input parameters:

- `jobId` (string, required): The job to measure.
- `track` (string): Default primary.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/darkmatteros-lunara/lunaraai#diagnostics

## Score history

- 2026-11-05: 81
- 2026-11-04: 81
- 2026-11-03: 80
- 2026-11-02: 80
- 2026-11-01: 79
- 2026-10-31: 79
- 2026-10-30: 78
- 2026-10-29: 78

## Common questions

### 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://lunaraai.cc/mcp
- Authorisation metadata: https://lunaraai.cc/.well-known/oauth-protected-resource/mcp
- Repository: https://github.com/DarkMatteros/DarkMatter
- Website: https://lunaraai.cc/
- Changelog RSS feed: https://verifymcp.io/servers/darkmatteros-lunara/lunaraai.xml
- Changelog JSON feed: https://verifymcp.io/servers/darkmatteros-lunara/lunaraai.json
- HTML version of this page: https://verifymcp.io/servers/darkmatteros-lunara/lunaraai
