# Clarion: AI-agentlar uchun MCP server

Agent o'zbekcha audio va videoni MCP orqali matn yoki subtitrga aylantiradi. Transport Streamable HTTP, stateless.

Manzil: `https://api.uzasr.uz/mcp`

## Autentifikatsiya

PKCE bilan OAuth 2.1. Birinchi ulanishda agent brauzerni ochadi: foydalanuvchi Clarion'ga kiradi va ruxsat beradi, kalit kerak emas. Agentni kabinetdagi «API kalitlari» sahifasida uzish mumkin.

## Ulanish

### Claude Code

```bash
claude mcp add --transport http clarion-mcp https://api.uzasr.uz/mcp
```

### Codex

```bash
codex mcp add clarion-mcp --url https://api.uzasr.uz/mcp
codex mcp login clarion-mcp
```

### Plagin

```bash
/plugin marketplace add rustammdev/clarion-mcp
/plugin install clarion-mcp@clarion-mcp
```

Buyruqdan keyin Claude Code'da `/mcp` ni oching, `clarion-mcp` → Authenticate ni tanlang va brauzerda «Ruxsat berish» ni bosing. Codex'da kirishni `codex mcp login clarion-mcp` boshlaydi, plagin esa birinchi chaqiruvda brauzerni o'zi ochadi. Ulangan agentlar kabinetdagi «API kalitlari» sahifasida ko'rinadi.

## CI va headless

Brauzersiz muhitda `uzasr_live_…` API kalitini `Authorization: Bearer <kalit>` sarlavhasida yuboring. Har bir klientga alohida kalit.

### Claude Code

```bash
claude mcp add --transport http clarion-mcp https://api.uzasr.uz/mcp \
  --header "Authorization: Bearer $UZASR_API_KEY"
```

### Codex

```toml
[mcp_servers.clarion-mcp]
url = "https://api.uzasr.uz/mcp"
bearer_token_env_var = "UZASR_API_KEY"
```

## Agent ishlash tartibi

1. `create_upload(file_path)` `upload_id` va tayyor curl buyrug'ini qaytaradi.
2. Agent buyruqni terminalda bajaradi: fayl `PUT /v1/uploads/{id}` ga ketadi.
3. `transcribe(upload_id, model, format)` natijani ~40 s kutadi. Ulgurmasa, `job_id` qaytaradi.
4. `get_transcription(job_id, format)` natijani oladi. `job_id` `upload_id` bilan bir xil.

## Tool'lar

| Tool | Argumentlar | Nima qiladi |
| --- | --- | --- |
| `list_models` | — | Mavjud modellar: `uzasr-large` — asosiy, `uzasr-base` — arzonroq. |
| `create_upload` | file_path | `upload_id` va yuklash uchun curl buyrug'ini qaytaradi. |
| `transcribe` | upload_id, model, format | Standart `model="uzasr-large"`, `format="text"`. ~40 s kutadi, aks holda `job_id` qaytaradi. |
| `get_transcription` | job_id, format | Tayyor natijani oladi. |

## Formatlar

| format | Ichida nima bor |
| --- | --- |
| `text` | Tinish belgilari bilan yaxlit matn, lotin yozuvida. |
| `segments` | Boshlanish va tugash vaqti bilan qatorlar. |
| `srt` | SubRip subtitrlar: kadrlar so'z vaqtlari bo'yicha, 6 s va 84 belgigacha. |
| `vtt` | WebVTT subtitrlar, kadr qoidalari o'sha. |

## Limitlar

| Cheklov | Qiymat |
| --- | --- |
| Fayl hajmi | 256 MB gacha |
| Audio davomiyligi | 3 soatgacha |
| Yuklash havolasi | bir martalik, 15 daqiqa |
| Kalitda `transcribe` kutayotgan yuklamalar | 10 tagacha |

256 MB dan katta videoni avval audioga siqing:

```bash
ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 -c:a libopus -b:a 32k output.ogg
```

## Maxfiylik

- **Audio.** Serverda qisqa muddat saqlanadi va tanib olingach darhol o'chiriladi.
- **Transkript.** 7 kundan keyin o'chiriladi.
- **Natija.** Agentga tool javobi sifatida, demak agentning LLM provayderiga ham boradi. Bu tanlov sizda qoladi.
