@athanlab/mcp 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Kept in step with package.json by test/config.test.ts. */
2
+ export const VERSION = '0.1.0';
3
+ export const SERVER_NAME = 'athanlab';
4
+ /** Sent on every API request so AthanLab can tell MCP traffic apart in its logs. */
5
+ export const USER_AGENT = `athanlab-mcp/${VERSION} (+https://athanlab.com/docs)`;
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAE9B,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAA;AAErC,oFAAoF;AACpF,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,OAAO,+BAA+B,CAAA"}
package/dist/wav.js ADDED
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Minimal WAV reading and joining, for a script's combined.wav.
3
+ *
4
+ * Joining is plain PCM concatenation with digital silence between lines, so
5
+ * every input must share one format: same encoding (integer PCM or IEEE
6
+ * float), sample rate, channel count and bit depth. A mismatch is refused,
7
+ * never resampled. The output is written as it is read — one line file in
8
+ * memory at a time.
9
+ */
10
+ import { open, readFile, rename, rm, stat } from 'node:fs/promises';
11
+ import path from 'node:path';
12
+ import { randomBytes } from 'node:crypto';
13
+ import { AthanLabError } from './api/errors.js';
14
+ const PCM_GUID_TAIL = '000000001000800000aa00389b71';
15
+ function fail(message) {
16
+ throw AthanLabError.client('wav_mismatch', message);
17
+ }
18
+ /**
19
+ * Parse a WAV header. `totalSize` is the file's full size when `buf` holds
20
+ * only its head (readWavInfo): the data chunk is then measured against it.
21
+ */
22
+ export function parseWav(buf, label = 'audio', totalSize = buf.length) {
23
+ if (buf.length < 12 || buf.toString('ascii', 0, 4) !== 'RIFF' || buf.toString('ascii', 8, 12) !== 'WAVE') {
24
+ fail(`${label} is not a WAV file.`);
25
+ }
26
+ let offset = 12;
27
+ let fmt = null;
28
+ let dataOffset = -1;
29
+ let dataBytes = 0;
30
+ while (offset + 8 <= buf.length) {
31
+ const id = buf.toString('ascii', offset, offset + 4);
32
+ const size = buf.readUInt32LE(offset + 4);
33
+ const body = offset + 8;
34
+ if (id === 'fmt ') {
35
+ if (size < 16 || body + 16 > buf.length)
36
+ fail(`${label} has a malformed fmt chunk.`);
37
+ let audioFormat = buf.readUInt16LE(body);
38
+ const channels = buf.readUInt16LE(body + 2);
39
+ const sampleRate = buf.readUInt32LE(body + 4);
40
+ const blockAlign = buf.readUInt16LE(body + 12);
41
+ const bitsPerSample = buf.readUInt16LE(body + 14);
42
+ if (audioFormat === 0xfffe && size >= 40 && body + 40 <= buf.length) {
43
+ // WAVE_FORMAT_EXTENSIBLE: the real format is the sub-format GUID's first two bytes.
44
+ const sub = buf.readUInt16LE(body + 24);
45
+ const tail = buf.subarray(body + 26, body + 40).toString('hex');
46
+ if (tail === PCM_GUID_TAIL)
47
+ audioFormat = sub;
48
+ }
49
+ if (audioFormat !== 1 && audioFormat !== 3)
50
+ fail(`${label} is not PCM or float WAV (format ${audioFormat}).`);
51
+ if (!channels || !sampleRate || !bitsPerSample || blockAlign !== channels * Math.ceil(bitsPerSample / 8)) {
52
+ fail(`${label} has an inconsistent fmt chunk.`);
53
+ }
54
+ fmt = { audioFormat: audioFormat, channels, sampleRate, bitsPerSample, blockAlign };
55
+ }
56
+ else if (id === 'data') {
57
+ dataOffset = body;
58
+ // 0xFFFFFFFF (or a size past the end) = streamed WAV: the data runs to the end of the file.
59
+ dataBytes = size === 0xffffffff || body + size > totalSize ? totalSize - body : size;
60
+ break;
61
+ }
62
+ offset = body + size + (size % 2);
63
+ }
64
+ if (!fmt)
65
+ fail(`${label} has no fmt chunk.`);
66
+ if (dataOffset < 0)
67
+ fail(`${label} has no data chunk.`);
68
+ const frames = Math.floor(dataBytes / fmt.blockAlign);
69
+ return {
70
+ ...fmt,
71
+ dataOffset,
72
+ dataBytes: frames * fmt.blockAlign,
73
+ frames,
74
+ durationSeconds: frames / fmt.sampleRate,
75
+ };
76
+ }
77
+ /** Header-only read: the first 64 KB plus the file size. */
78
+ export async function readWavInfo(file) {
79
+ const { size } = await stat(file);
80
+ const handle = await open(file, 'r');
81
+ try {
82
+ const head = Buffer.alloc(Math.min(size, 64 * 1024));
83
+ await handle.read(head, 0, head.length, 0);
84
+ return parseWav(head, path.basename(file), size);
85
+ }
86
+ finally {
87
+ await handle.close();
88
+ }
89
+ }
90
+ export function sameFormat(a, b) {
91
+ return a.audioFormat === b.audioFormat
92
+ && a.channels === b.channels
93
+ && a.sampleRate === b.sampleRate
94
+ && a.bitsPerSample === b.bitsPerSample;
95
+ }
96
+ export function describeFormat(f) {
97
+ return `${f.audioFormat === 3 ? 'float' : 'PCM'} ${f.bitsPerSample}-bit, ${f.sampleRate} Hz, ${f.channels} channel${f.channels === 1 ? '' : 's'}`;
98
+ }
99
+ /** A canonical 44-byte header for `dataBytes` of audio in `fmt`. */
100
+ export function wavHeader(fmt, dataBytes) {
101
+ const header = Buffer.alloc(44);
102
+ header.write('RIFF', 0, 'ascii');
103
+ header.writeUInt32LE(36 + dataBytes, 4);
104
+ header.write('WAVE', 8, 'ascii');
105
+ header.write('fmt ', 12, 'ascii');
106
+ header.writeUInt32LE(16, 16);
107
+ header.writeUInt16LE(fmt.audioFormat, 20);
108
+ header.writeUInt16LE(fmt.channels, 22);
109
+ header.writeUInt32LE(fmt.sampleRate, 24);
110
+ header.writeUInt32LE(fmt.sampleRate * fmt.blockAlign, 28);
111
+ header.writeUInt16LE(fmt.blockAlign, 32);
112
+ header.writeUInt16LE(fmt.bitsPerSample, 34);
113
+ header.write('data', 36, 'ascii');
114
+ header.writeUInt32LE(dataBytes, 40);
115
+ return header;
116
+ }
117
+ /** Digital silence: 0x80 for unsigned 8-bit PCM, zero bytes for everything else. */
118
+ function silence(fmt, frames) {
119
+ return Buffer.alloc(frames * fmt.blockAlign, fmt.audioFormat === 1 && fmt.bitsPerSample === 8 ? 0x80 : 0);
120
+ }
121
+ /**
122
+ * Join `items` (in order) into `target`. Each item starts at
123
+ * round(startSeconds × sampleRate); the frames between the end of one file
124
+ * and the start of the next are silence.
125
+ */
126
+ export async function combineWavFiles(items, target) {
127
+ if (items.length === 0)
128
+ fail('There are no line files to combine.');
129
+ const firstItem = items[0];
130
+ const first = parseWav(await readFile(firstItem.file), path.basename(firstItem.file));
131
+ const fmt = {
132
+ audioFormat: first.audioFormat,
133
+ channels: first.channels,
134
+ sampleRate: first.sampleRate,
135
+ bitsPerSample: first.bitsPerSample,
136
+ blockAlign: first.blockAlign,
137
+ };
138
+ const tmp = path.join(path.dirname(target), `.${path.basename(target)}.${randomBytes(4).toString('hex')}.part`);
139
+ const handle = await open(tmp, 'w');
140
+ let cursor = 0;
141
+ try {
142
+ await handle.write(Buffer.alloc(44)); // placeholder; rewritten once the length is known
143
+ for (const item of items) {
144
+ const buf = await readFile(item.file);
145
+ const info = parseWav(buf, path.basename(item.file));
146
+ if (!sameFormat(info, fmt)) {
147
+ fail(`Cannot combine: ${path.basename(item.file)} is ${describeFormat(info)} but ${path.basename(firstItem.file)} is ${describeFormat(fmt)}.`);
148
+ }
149
+ const startFrame = Math.max(cursor, Math.round(item.startSeconds * fmt.sampleRate));
150
+ if (startFrame > cursor)
151
+ await handle.write(silence(fmt, startFrame - cursor));
152
+ await handle.write(buf.subarray(info.dataOffset, info.dataOffset + info.dataBytes));
153
+ cursor = startFrame + info.frames;
154
+ }
155
+ const dataBytes = cursor * fmt.blockAlign;
156
+ if (dataBytes + 36 > 0xffffffff)
157
+ fail('The combined audio would exceed the 4 GB WAV limit.');
158
+ await handle.write(wavHeader(fmt, dataBytes), 0, 44, 0);
159
+ await handle.close();
160
+ await rename(tmp, target);
161
+ return { format: fmt, frames: cursor, durationSeconds: cursor / fmt.sampleRate, bytes: dataBytes + 44 };
162
+ }
163
+ catch (err) {
164
+ await handle.close().catch(() => { });
165
+ await rm(tmp, { force: true }).catch(() => { });
166
+ throw err;
167
+ }
168
+ }
169
+ //# sourceMappingURL=wav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wav.js","sourceRoot":"","sources":["../src/wav.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,53 @@
1
1
  {
2
2
  "name": "@athanlab/mcp",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "MCP server for the AthanLab Developer API: natural Myanmar (Burmese) text-to-speech for AI agents.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "AthanLab <support@athanlab.com>",
8
+ "homepage": "https://athanlab.com/docs#agents",
9
+ "keywords": [
10
+ "mcp",
11
+ "model-context-protocol",
12
+ "text-to-speech",
13
+ "tts",
14
+ "burmese",
15
+ "myanmar",
16
+ "athanlab",
17
+ "claude"
18
+ ],
19
+ "bin": {
20
+ "athanlab-mcp": "dist/index.js"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "skill",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "engines": {
29
+ "node": ">=20"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc -p tsconfig.build.json && chmod +x dist/index.js",
36
+ "typecheck": "tsc -p tsconfig.json --noEmit",
37
+ "lint": "tsc -p tsconfig.json --noEmit",
38
+ "test": "vitest run",
39
+ "test:watch": "vitest",
40
+ "gen:types": "openapi-typescript \"${ATHANLAB_OPENAPI_URL:-https://api.athanlab.com/api/v1/openapi.json}\" --default-non-nullable false -o src/generated/athanlab-api.d.ts",
41
+ "start": "node dist/index.js"
42
+ },
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.32.0",
45
+ "zod": "^4.6.5"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^20.19.43",
49
+ "openapi-typescript": "^7.13.0",
50
+ "typescript": "~5.9.3",
51
+ "vitest": "^4.1.11"
52
+ }
53
+ }
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: athanlab-voice
3
+ description: Generate natural Burmese (Myanmar) speech with the AthanLab MCP tools (athanlab_*). Use when the user wants Burmese or Myanmar text read aloud, a voice-over or narration for a video, an audiobook or podcast passage, a dialogue or multi-speaker script with a different voice per character, subtitles (SRT or VTT) timed to generated speech, or asks which AthanLab voices exist, what a text will cost or how many characters are left. Covers writing text so it is read correctly, casting voices, quoting the cost before spending, and turning a script manifest into subtitles, a timeline or one combined audio track.
4
+ compatibility: Needs the AthanLab MCP server (@athanlab/mcp) connected with an ATHANLAB_API_KEY from an approved AthanLab developer account with API access (Max plan or founder access), and network access to api.athanlab.com.
5
+ ---
6
+
7
+ # AthanLab voice: Burmese text-to-speech
8
+
9
+ AthanLab turns Burmese text into natural speech through its Developer API. The `athanlab_*` MCP tools wrap that API: they create the job, wait for it, download the audio into a local folder and return the file path. Every job spends the user's real AthanLab character balance, so treat calls that create audio like spending money.
10
+
11
+ AthanLab speaks Burmese. It is not a tool for English or other languages.
12
+
13
+ ## The tools
14
+
15
+ | Tool | What it does | Costs characters? |
16
+ |---|---|---|
17
+ | `athanlab_usage` | Plan, whether the key can create jobs, balance, this key's monthly budget, jobs running and the concurrency limit | No |
18
+ | `athanlab_list_voices` | Voices the key can use (`source: athanlab` official, `source: user` the user's own) and `default_voice_id` | No |
19
+ | `athanlab_preview_voice` | A signed sample URL for one voice; `save: true` also downloads it | No |
20
+ | `athanlab_quote` | Dry run: characters, how many pieces (`dispatches`) the text becomes, `spendable`, `sufficient` | No |
21
+ | `athanlab_speak` | One text → one audio file (job created, polled, downloaded) | Yes, the text's length |
22
+ | `athanlab_speak_script` | Many lines → one file per line + `manifest.json` (+ optional `combined.wav`) | Yes, the sum of all lines |
23
+ | `athanlab_get_job`, `athanlab_list_jobs` | Status of one job, or a page of jobs (filter by status) | No |
24
+ | `athanlab_download_audio` | Downloads a finished job's audio (MP3 or WAV) | No, it was paid for at creation |
25
+ | `athanlab_cancel_job` | Stops a job still processing; the unprocessed share is refunded | Refunds |
26
+
27
+ ## Before you spend
28
+
29
+ 1. **Check the account once** with `athanlab_usage`. If `entitled` is false the key is read-only (no new jobs). Look at `spendable` and, for agent keys, `key.remaining` — the most this key may still spend this month.
30
+ 2. **Quote first** with `athanlab_quote` whenever the text is long, was not written by you, or the user cares about cost. A quote is free and also catches text the API would refuse. (It does count against the key's write limit, 60 requests a minute by default, so do not quote every line of a long script yourself — `athanlab_speak_script` quotes for you.)
31
+ 3. **Ask before big jobs.** `athanlab_speak_script` refuses scripts over 2,000 characters or 20 lines unless you pass `confirm: true`, and returns the quote instead. Show that quote to the user (characters, lines, what they have left) and get an explicit yes before calling again with `confirm: true`. Never set `confirm: true` on a large script without that yes.
32
+ 4. **Know the price.** A job costs its text's length in characters, counted in UTF-16 units: a Burmese or Latin character is 1, an emoji 2. Writing numbers out as words costs nothing extra. Dry runs, refused requests and replays are free; a failed job is refunded in full; a cancelled job keeps only the share already generated. Generating the same text again is a new job and costs again.
33
+
34
+ ## Writing text for speech
35
+
36
+ The API reads exactly the text it gets. These habits make it sound natural and keep a job from being refused.
37
+
38
+ **Short sentences, with their punctuation.** End every sentence with `။`, `!` or `?`, and keep sentences short. Text is spoken sentence by sentence; a sentence too long for one piece is cut at a `၊`, then at a space — mid-word only as a last resort — so a long stretch without punctuation breaks in odd places. A piece that still cannot be made short enough is refused before any charge with `422 text_too_long`: “Part of the text is too long to speak in one piece. Add sentence punctuation and retry.” A quote's `dispatches` tells you how many pieces the text becomes.
39
+
40
+ **Burmese script only.** Write every word in Burmese script. The voices mispronounce Latin-script words, so spell names and loanwords the way they sound, in Burmese — `အသံလက်ဘ်`, not `AthanLab` — or leave them out.
41
+
42
+ **Marks the voice does not read.** Quotation marks, brackets and `…` are not spoken well. Remove them, or put a `၊` where you want a short pause. Text that is only emoji, punctuation or whitespace has nothing to read: it is refused before any charge with `422 unspeakable_text`.
43
+
44
+ **Numbers.** `number_mode` sets how digits are read. Each mode reading `ကျပ် ၁၂၃၄`:
45
+
46
+ | `number_mode` | What it reads | `ကျပ် ၁၂၃၄` is spoken as |
47
+ |---|---|---|
48
+ | `smart` | The default. Burmese digits as Burmese words — digit by digit after a leading zero and for runs of 9 or more digits, with ဒဿမ for a decimal point. Latin digits (1234) are left as written. | ကျပ် တစ်ထောင့်နှစ်ရာ့သုံးဆယ့်လေး |
49
+ | `place` | Every number, in Burmese or Latin digits, as Burmese place words (up to 8 digits; longer runs digit by digit). | ကျပ် တစ်ထောင့်နှစ်ရာ့သုံးဆယ့်လေး |
50
+ | `digits` | Burmese, one digit at a time: phone numbers, codes, IDs. | ကျပ် တစ် နှစ် သုံး လေး |
51
+ | `english` | English number words. | ကျပ် one thousand two hundred thirty four |
52
+ | `english_digits` | English, one digit at a time. | ကျပ် one two three four |
53
+
54
+ More of what `smart` does:
55
+
56
+ - `ဖုန်း ၀၉၁၂၃` → ဖုန်း သုည ကိုး တစ် နှစ် သုံး
57
+ - `၃.၅ ကီလို` → သုံး ဒဿမ ငါး ကီလို
58
+ - `ကျပ် 1234` → ကျပ် 1234
59
+ - `၁၂၃၄၅၆၇၈၉` → တစ် နှစ် သုံး လေး ငါး ခြောက် ခုနစ် ရှစ် ကိုး
60
+
61
+ So in `smart` mode, Latin digits stay as written: write the number in Burmese digits, or pick `place`, `digits`, `english` or `english_digits` when the text has Latin digits. Phone numbers, codes and IDs read best with `digits`. The written-out text must stay within 10,000 characters; beyond that the job is refused with `text_too_long`.
62
+
63
+ **Limits.** At most 5,000 characters per job. Split anything longer.
64
+
65
+ **Scripts, dialogue and video.** Split long scripts into sentence-sized lines, one job per line, each with its speaker's voice. Every line then has its own audio file to place on a timeline, retime or replace, and fixing one line regenerates — and costs — only that line. `athanlab_speak_script` does exactly this.
66
+
67
+ ## Casting voices for dialogue
68
+
69
+ 1. Call `athanlab_list_voices`. Official voices come first (`source: athanlab`), then the user's own library (`source: user`). `default_voice_id` is the voice a job uses when you name none.
70
+ 2. Before a long or important script, let the user hear candidates: `athanlab_preview_voice` returns a sample URL (valid about an hour); with `save: true` it also downloads the sample into the output folder. Previews are free.
71
+ 3. **Map each speaker to one `voice_id` and keep it for the whole project.** Pass the map as `voices` to `athanlab_speak_script` (for example `{"narrator": "<voice id>", "Aye": "<voice id>"}`) and reuse the same map for later scenes, retakes and sequels. Never let a character change voice between lines or sessions. `manifest.json` records the `voice_id` of every line, so read it back before adding scenes.
72
+ 4. **Contrast.** Give characters who talk to each other clearly different voices, and keep the narrator distinct from every character. Use the voice names and categories, and the previews — do not guess a voice from its name alone. If there are more characters than distinct voices, tell the user rather than silently reusing one.
73
+ 5. A line with its own `voice_id` overrides the speaker map; use that only for a deliberate exception.
74
+ 6. Use only voices from `athanlab_list_voices`. Voices in a user's library follow AthanLab's consent rules — their own voice, or one they have the speaker's explicit permission to use — so never suggest cloning or imitating a real person.
75
+
76
+ ## One clip: `athanlab_speak`
77
+
78
+ Pass `text` and optionally `voice_id`, `output_format` (`wav` by default, or `mp3` for smaller files), `number_mode` and `filename`. It returns the local `path`, the `job_id`, `duration_seconds`, `characters_charged` and the `output_format`. `speech_start_seconds`, `speech_end_seconds` and `segments` (speech timing) are null until the API supports speech timing; when they are filled in, prefer them for tight subtitle cues.
79
+
80
+ Files go into the server's output folder only; a `filename` is reduced to a plain name with the right extension.
81
+
82
+ Speaking speed (`speed`) and pronunciation respellings (`replacements`) appear as parameters only once the API supports them. If a tool's input schema has no such parameter, the feature is not available yet: respell words in the text itself instead.
83
+
84
+ If `athanlab_speak` returns a `job_id` but no file (it stopped waiting, or the download failed), the job is already paid for. **Do not call `athanlab_speak` again** — that creates and charges a second job. Check it with `athanlab_get_job` and fetch it with `athanlab_download_audio` once it has succeeded.
85
+
86
+ ## Scripts: `athanlab_speak_script` → `manifest.json`
87
+
88
+ 1. Write the script as `lines`: each `{id, speaker, text}` (plus `voice_id` only for an exception). One sentence or one short turn per line, at most 200 lines per call. Give every line a short `id` such as `l003` (it becomes part of the file name) and always set `speaker`.
89
+ 2. Pass `voices` (speaker → voice_id), `output_format`, and **always an `out_subdir`** per scene or project, for example `ep01-scene02`. Without it the folder name is derived from the script's content, so any edit starts a fresh folder and pays for every line again.
90
+ 3. Call it without `confirm` first. For a large script it returns `status: "confirmation_required"` with the quote and creates nothing; show the quote to the user and call again with the same arguments and `confirm: true` once they agree.
91
+ 4. It runs as many lines at once as the account allows, writes one audio file per line, and writes `manifest.json` in the same folder. `status` is `completed`, `partial` (some lines failed), `stopped` (an account problem, see below) or `timed_out` (still running when it stopped waiting — call again with the same arguments to finish).
92
+
93
+ **Resuming and editing.** Re-run the same call with the same `out_subdir`: finished lines are skipped and not charged again, jobs still running are picked up, and only the rest are created — so an interrupted script just finishes. Lines are matched by position:
94
+
95
+ - A line whose text, voice or number mode changed is regenerated, and charged, automatically.
96
+ - Inserting or removing a line in the middle shifts every later line and regenerates them all. Add new lines at the end, or give a new scene its own `out_subdir`.
97
+ - A deleted audio file is downloaded again from the same job, free, within AthanLab's 30-day retention. After that the audio is gone: the next run quotes the line again as a new one (a new charge, counted towards the confirmation threshold like any other line), so show that quote to the user too. For a genuinely new take of an unchanged line, remove that line's entry from `manifest.json` and re-run (a new charge).
98
+ - Renaming a line (a new `id`) does not regenerate it: its audio is downloaded again under the new file name, free.
99
+
100
+ **One call per folder at a time.** Never run `athanlab_speak_script` twice in parallel for the same `out_subdir`. A second call while the first is still running returns `script_running` and does nothing; wait for the first call to return, then re-run if anything is left.
101
+
102
+ **When it stops early.** It stops creating new jobs on `plan_required`, `insufficient_characters` or `key_budget_exceeded` and reports which lines are done. Tell the user what to do (see Errors below), and re-run after they have fixed it; finished lines are kept.
103
+
104
+ **The timeline.** Each manifest entry has `index`, `id`, `speaker`, `voice_id`, `text`, `file`, `job_id`, `characters_charged`, `duration_seconds`, `start_seconds` and `end_seconds`. All lines sit on one timeline starting at 0: the next line starts `gaps.sentence` seconds (default 0.4) after the previous one ends when the speaker stays the same, and `gaps.turn` seconds (default 0.55) when the speaker changes. Example:
105
+
106
+ | Line | Speaker | Duration | Gap before | start → end |
107
+ |---|---|---|---|---|
108
+ | 0 | narrator | 2.10 s | — | 0.000 → 2.100 |
109
+ | 1 | narrator | 1.80 s | sentence 0.40 | 2.500 → 4.300 |
110
+ | 2 | Aye | 1.50 s | turn 0.55 | 4.850 → 6.350 |
111
+ | 3 | Aye | 1.20 s | sentence 0.40 | 6.750 → 7.950 |
112
+ | 4 | narrator | 2.00 s | turn 0.55 | 8.500 → 10.500 |
113
+
114
+ Slower, more deliberate pacing: raise the gaps (for example `{"sentence": 0.6, "turn": 0.9}`). Snappier dialogue: lower them.
115
+
116
+ **One track.** With `output_format: "wav"` and `combine: true` it also writes `combined.wav`: every line laid end to end with exactly those gaps as silence, so the manifest times are times in `combined.wav`. Combining needs WAV; for an MP3 deliverable, combine in WAV and convert afterwards.
117
+
118
+ ## Subtitles from the manifest
119
+
120
+ Make one cue per manifest line, from `start_seconds` to `end_seconds`, with that line's `text` (the text that was spoken). Sort by `start_seconds`.
121
+
122
+ SRT (`HH:MM:SS,mmm`, comma before the milliseconds):
123
+
124
+ ```
125
+ 1
126
+ 00:00:00,000 --> 00:00:02,100
127
+ မင်္ဂလာပါ။
128
+
129
+ 2
130
+ 00:00:02,500 --> 00:00:04,300
131
+ အသံလက်ဘ်မှ ကြိုဆိုပါတယ်။
132
+ ```
133
+
134
+ WebVTT is the same cues without the numbers, under a `WEBVTT` first line and with a dot before the milliseconds (`00:00:02.500 --> 00:00:04.300`); a `<v narrator>` prefix on the cue text names the speaker.
135
+
136
+ - The times are file spans: a cue starts with the audio file, which can begin with a short silence. If the job's speech timing is available (non-null `speech_start_seconds`), add it to `start_seconds` for a tighter cue.
137
+ - Keep cues readable: at most two short lines per cue. Short script lines make short cues; if one line is long, break the cue at a `၊` or a space, or split it into two cues dividing the time in proportion to the characters.
138
+ - Times are in seconds from the start of `combined.wav`, or of the voice track if you place the files yourself. If the voice starts later in the video, add that offset to every cue.
139
+
140
+ ## Placing audio in a video
141
+
142
+ - **Simplest:** use `combined.wav` as the voice-over track and the SRT/VTT built from the same manifest.
143
+ - **Per line:** place each line's file at its `start_seconds` on the voice track of the editor or composition. Retime freely; to change words, regenerate only that line (see Resuming).
144
+ - **ffmpeg**, if available: add the voice to a video with `ffmpeg -i video.mp4 -i combined.wav -map 0:v -map 1:a -c:v copy -af apad -c:a aac -shortest out.mp4`. `apad` pads the voice with silence so the video keeps its full length; a voice track longer than the video is cut at its end. To burn subtitles in, use the `subtitles=subs.srt` filter with a font that has Burmese glyphs (for example `force_style='FontName=Noto Sans Myanmar'`).
145
+
146
+ ## Errors and retry etiquette
147
+
148
+ The tools already retry what is safe to retry — rate limits, the concurrency limit, server restarts and DigitalOcean's 504 page that stands in for a 503 — with the same Idempotency-Key, so a retry can never create a second job. **Do not wrap them in your own retry loop.** When a tool reports an error, read its code and action line:
149
+
150
+ | Code | Meaning | What to do |
151
+ |---|---|---|
152
+ | `plan_required` (402) | Keys are read-only: no Max plan and no founder access | Tell the user; existing jobs, downloads and usage still work |
153
+ | `insufficient_characters` (402) | Not enough characters; nothing was charged | Top up Athan Tokens or wait for the monthly reset |
154
+ | `key_budget_exceeded` (429) | This key hit its monthly budget; nothing was charged | The owner raises the budget on the Developer API page — do not retry |
155
+ | `invalid_api_key` (401); `missing_api_key`, `invalid_api_key_format` (checked locally, nothing sent) | The key is wrong, revoked, expired, missing or mistyped | Never retry: 20 failed key checks in 5 minutes block the whole network for 10 minutes. Ask the user to fix `ATHANLAB_API_KEY` and restart the client |
156
+ | `scope_missing` (403) | The key lacks a permission | The key needs `speech:write`, `speech:read`, `voices:read` or `usage:read` |
157
+ | `developer_pending`, `developer_rejected`, `developer_suspended`, `account_suspended` (403) | Account status | Tell the user; see the Developer API page or support@athanlab.com |
158
+ | `unspeakable_text`, `text_too_long`, `validation_error` (422/400) | The request needs changing | Fix the text or parameters (see Writing text), then call again |
159
+ | `concurrency_limit` (429) | Too many jobs running | Handled automatically; do not start parallel scripts on one account |
160
+ | `script_running` (checked locally, nothing sent) | Another `athanlab_speak_script` call is already working on this `out_subdir` | Wait for that call to return, then call again with the same arguments; never start the same script twice at once |
161
+
162
+ - A job that ends `failed` is refunded in full; resubmitting it is a new job and a new charge.
163
+ - Follow work in progress with `athanlab_list_jobs` and `status: "processing"` rather than polling jobs one by one. Cancel jobs the user no longer wants with `athanlab_cancel_job`.
164
+ - AthanLab deletes audio and input text after 30 days (`410 audio_expired`), so keep the downloaded files.
165
+ - Never ask the user to paste an API key into the conversation: it belongs in the MCP server's environment. If a tool says the key is missing or malformed, ask the user to set `ATHANLAB_API_KEY` and restart the client.
166
+ - Agent keys should have a low monthly budget, a short expiry and only the permissions they need. A `key_budget_exceeded` stop is that safety net working, not something to work around.