# ๐Ÿš€ OmniRoute โ€” ๋ฌด๋ฃŒ AI ๊ฒŒ์ดํŠธ์›จ์ด ### ์ฝ”๋”ฉ์„ ๋ฉˆ์ถ”์ง€ ๋งˆ์„ธ์š”. ์ž๋™ ํด๋ฐฑ์„ ํ†ตํ•ด **๋ฌด๋ฃŒ ๋ฐ ์ €๊ฐ€ํ˜• AI ๋ชจ๋ธ**๋กœ ์Šค๋งˆํŠธ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. _๋ฒ”์šฉ API ํ”„๋ก์‹œ โ€” ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ, 67๊ฐœ ์ด์ƒ์˜ ๊ณต๊ธ‰์ž, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„ ์—†์Œ. ์ด์ œ **MCP ๋ฐ A2A** ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค._ **์ฑ„ํŒ… ์™„๋ฃŒ โ€ข ์ž„๋ฒ ๋”ฉ โ€ข ์ด๋ฏธ์ง€ ์ƒ์„ฑ โ€ข ๋น„๋””์˜ค โ€ข ์Œ์•… โ€ข ์˜ค๋””์˜ค โ€ข ์ˆœ์œ„ ์žฌ์ง€์ • โ€ข **์›น ๊ฒ€์ƒ‰** โ€ข MCP ์„œ๋ฒ„ โ€ข A2A ํ”„๋กœํ† ์ฝœ โ€ข 100% TypeScript** ---
[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) [![npm downloads](https://img.shields.io/npm/dm/omniroute?color=cb3837&logo=npm&label=npm%20downloads)](https://www.npmjs.com/package/omniroute) [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) [![Docker Pulls](https://img.shields.io/docker/pulls/diegosouzapw/omniroute?logo=docker&color=2496ED&label=docker%20pulls)](https://hub.docker.com/r/diegosouzapw/omniroute) [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) [![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) [๐ŸŒ Website](https://omniroute.online) ยท [๐Ÿš€ Quick Start](#-quick-start) ยท [๐Ÿ’ก Features](#-key-features) ยท [๐Ÿ“– Docs](#-documentation) ยท [๐Ÿ’ฐ Pricing](#-pricing-at-a-glance) ยท [๐Ÿ’ฌ WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
๐ŸŒ **Available in:** ๐Ÿ‡บ๐Ÿ‡ธ [English](README.md) | ๐Ÿ‡ง๐Ÿ‡ท [Portuguรชs (Brasil)](docs/i18n/pt-BR/README.md) | ๐Ÿ‡ช๐Ÿ‡ธ [Espaรฑol](docs/i18n/es/README.md) | ๐Ÿ‡ซ๐Ÿ‡ท [Franรงais](docs/i18n/fr/README.md) | ๐Ÿ‡ฎ๐Ÿ‡น [Italiano](docs/i18n/it/README.md) | ๐Ÿ‡ท๐Ÿ‡บ [ะ ัƒััะบะธะน](docs/i18n/ru/README.md) | ๐Ÿ‡จ๐Ÿ‡ณ [ไธญๆ–‡ (็ฎ€ไฝ“)](docs/i18n/zh-CN/README.md) | ๐Ÿ‡ฉ๐Ÿ‡ช [Deutsch](docs/i18n/de/README.md) | ๐Ÿ‡ฎ๐Ÿ‡ณ [เคนเคฟเคจเฅเคฆเฅ€](docs/i18n/in/README.md) | ๐Ÿ‡น๐Ÿ‡ญ [เน„เธ—เธข](docs/i18n/th/README.md) | ๐Ÿ‡บ๐Ÿ‡ฆ [ะฃะบั€ะฐั—ะฝััŒะบะฐ](docs/i18n/uk-UA/README.md) | ๐Ÿ‡ธ๐Ÿ‡ฆ [ุงู„ุนุฑุจูŠุฉ](docs/i18n/ar/README.md) | ๐Ÿ‡ฏ๐Ÿ‡ต [ๆ—ฅๆœฌ่ชž](docs/i18n/ja/README.md) | ๐Ÿ‡ป๐Ÿ‡ณ [Tiแบฟng Viแป‡t](docs/i18n/vi/README.md) | ๐Ÿ‡ง๐Ÿ‡ฌ [ะ‘ัŠะปะณะฐั€ัะบะธ](docs/i18n/bg/README.md) | ๐Ÿ‡ฉ๐Ÿ‡ฐ [Dansk](docs/i18n/da/README.md) | ๐Ÿ‡ซ๐Ÿ‡ฎ [Suomi](docs/i18n/fi/README.md) | ๐Ÿ‡ฎ๐Ÿ‡ฑ [ืขื‘ืจื™ืช](docs/i18n/he/README.md) | ๐Ÿ‡ญ๐Ÿ‡บ [Magyar](docs/i18n/hu/README.md) | ๐Ÿ‡ฎ๐Ÿ‡ฉ [Bahasa Indonesia](docs/i18n/id/README.md) | instagram [ํ•œ๊ตญ์–ด](docs/i18n/ko/README.md) | ๐Ÿ‡ฒ๐Ÿ‡พ [Bahasa Melayu](docs/i18n/ms/README.md) | ๐Ÿ‡ณ๐Ÿ‡ฑ [Nederlands](docs/i18n/nl/README.md) | ๐Ÿ‡ณ๐Ÿ‡ด [Norsk](docs/i18n/no/README.md) | ๐Ÿ‡ต๐Ÿ‡น [Portuguรชs (Portugal)](docs/i18n/pt/README.md) | ๐Ÿ‡ท๐Ÿ‡ด [Romรขnฤƒ](docs/i18n/ro/README.md) | ๐Ÿ‡ต๐Ÿ‡ฑ [Polski](docs/i18n/pl/README.md) | ๐Ÿ‡ธ๐Ÿ‡ฐ [Slovenฤina](docs/i18n/sk/README.md) | ๐Ÿ‡ธ๐Ÿ‡ช [Svenska](docs/i18n/sv/README.md) | ๐Ÿ‡ต๐Ÿ‡ญ [Filipino](docs/i18n/phi/README.md) | ๐Ÿ‡จ๐Ÿ‡ฟ [ฤŒeลกtina](docs/i18n/cs/README.md) --- ## ๐Ÿ†• v3.0.0์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ > **Upgrading from v2.9.5?** โ€” See the [full CHANGELOG](CHANGELOG.md#300--2026-03-22-release-candidate--not-yet-merged-to-main) for all changes. | ๋ฉด์  | ๋ณ€๊ฒฝ | | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | ๐Ÿ”’ **CodeQL ๋ณด์•ˆ** | 10๊ฐœ ์ด์ƒ์˜ CodeQL ๊ฒฝ๊ณ  ์ˆ˜์ •: ๋‹คํ•ญ์‹ ์žฌ์‹คํ–‰, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฌด์ž‘์œ„์„ฑ, ์…ธ ์ฃผ์ž… ์ˆ˜์ • | | โœ… **๊ฒฝ๋กœ ๊ฒ€์ฆ** | ์ด์ œ Zod ์Šคํ‚ค๋งˆ + `validateBody()` โ€” CI `check:route-validation:t06` ํ†ต๊ณผ๋กœ ๊ฒ€์ฆ๋œ ๋ชจ๋“  176๊ฐœ API ๊ฒฝ๋กœ | | ๐Ÿ› **omniModel ํƒœ๊ทธ ์œ ์ถœ** | ๋‚ด๋ถ€ `` ํƒœ๊ทธ๊ฐ€ ๋” ์ด์ƒ SSE ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ˆ„์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(#585) | | ๐Ÿ”‘ **๋“ฑ๋ก๋œ ํ‚ค API** | ๊ณต๊ธ‰์ž/๊ณ„์ •๋ณ„ ํ• ๋‹น๋Ÿ‰ ์ ์šฉ, ๋ฉฑ๋“ฑ์„ฑ, SHA-256 ์ €์žฅ์†Œ ๋ฐ ์„ ํƒ์  GitHub ๋ฌธ์ œ ๋ณด๊ณ  ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ `POST /api/v1/registered-keys`์„ ํ†ตํ•ด API ํ‚ค ์ž๋™ ํ”„๋กœ๋น„์ €๋‹ | | ๐Ÿ‘๏ธ **Scoped API Key Reveal** ๐Ÿ†• | Opt-in recovery of API keys via `ALLOW_API_KEY_REVEAL` | | ๐ŸŽจ **๊ณต๊ธ‰์ž ์•„์ด์ฝ˜** | PNG๊ฐ€ ํฌํ•จ๋œ `@lobehub/icons`(SVG)์„ ํ†ตํ•œ 130๊ฐœ ์ด์ƒ์˜ ๊ณต๊ธ‰์ž ๋กœ๊ณ  โ†’ ์ผ๋ฐ˜ ํด๋ฐฑ ์ฒด์ธ | | ๐Ÿ”„ **๋ชจ๋ธ ์ž๋™ ๋™๊ธฐํ™”** | ๋‚ด์žฅ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ OpenAI ํ˜ธํ™˜ ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ๋ชจ๋ธ ๋ชฉ๋ก์„ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ 24์‹œ๊ฐ„ ์Šค์ผ€์ค„๋Ÿฌ ๋ฐ ์ˆ˜๋™ UI ํ† ๊ธ€ | | ๐ŸŒ **์˜คํ”ˆ์ฝ”๋“œ Zen/Go** | PR #530์„ ํ†ตํ•œ @kang-heewon์˜ ๋‘ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ์ œ๊ณต์ž: `OpencodeExecutor`๋ฅผ ํ†ตํ•œ ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ + ๊ตฌ๋… ๋“ฑ๊ธ‰ | | ๐Ÿ› **Gemini CLI OAuth** | Docker์— `GEMINI_OAUTH_CLIENT_SECRET`์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜(์•”ํ˜ธ์ ์ธ Google ์˜ค๋ฅ˜์ž„) | | ๐Ÿ› **OpenCode ๊ตฌ์„ฑ** | `saveOpenCodeConfig()`์€ ์ด์ œ TOML์„ `XDG_CONFIG_HOME`์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์”๋‹ˆ๋‹ค. | | ๐Ÿ› **๊ณ ์ •๋œ ๋ชจ๋ธ ์žฌ์ •์˜** | `body.model`์ด ์ปจํ…์ŠคํŠธ ์บ์‹œ ๋ณดํ˜ธ์—์„œ `pinnedModel`๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋จ | | ๐Ÿ› **์ฝ”๋ฑ์Šค/ํด๋กœ๋“œ ๋ฃจํ”„** | `tool_result` ๋ธ”๋ก์ด ์ด์ œ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์ค‘์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. | | ๐Ÿ› **๋กœ๊ทธ์ธ ๋ฆฌ๋””๋ ‰์…˜** | ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •์„ ๊ฑด๋„ˆ๋›ด ํ›„ ๋กœ๊ทธ์ธ์ด ๋” ์ด์ƒ ์ •์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. | | ๐Ÿ› **Windows ๊ฒฝ๋กœ** | MSYS2/Git-Bash ๊ฒฝ๋กœ(`/c/...`)๊ฐ€ ์ž๋™์œผ๋กœ `C:\...`๋กœ ์ •๊ทœํ™”๋จ | --- ## ๐Ÿ–ผ๏ธ ๋ฉ”์ธ ๋Œ€์‹œ๋ณด๋“œ
OmniRoute Dashboard
--- ## ๐Ÿ“ธ ๋Œ€์‹œ๋ณด๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
Click to see dashboard screenshots | ํŽ˜์ด์ง€ | Screenshot | | -------------- | ------------------------------------------------- | | **Providers** | ![Providers](docs/screenshots/01-providers.png) | | **์ฝค๋ณด** | ![Combos](docs/screenshots/02-combos.png) | | **๋ถ„์„** | ![Analytics](docs/screenshots/03-analytics.png) | | **๊ฑด๊ฐ•** | ![Health](docs/screenshots/04-health.png) | | **๋ฒˆ์—ญ๊ฐ€** | ![Translator](docs/screenshots/05-translator.png) | | **์„ค์ •** | ![Settings](docs/screenshots/06-settings.png) | | **CLI ๋„๊ตฌ** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | | **์‚ฌ์šฉ ๋กœ๊ทธ** | ![Usage](docs/screenshots/08-usage.png) | | **์—”๋“œํฌ์ธํŠธ** | ![Endpoints](docs/screenshots/09-endpoint.png) |
--- ### ๐Ÿค– Free AI Provider for your favorite coding agents _Connect any AI-powered IDE or CLI tool through OmniRoute โ€” free API gateway for unlimited coding._
OpenClaw
OpenClaw

โญ 205K
NanoBot
NanoBot

โญ 20.9K
PicoClaw
PicoClaw

โญ 14.6K
ZeroClaw
ZeroClaw

โญ 9.9K
IronClaw
IronClaw

โญ 2.1K
OpenCode
OpenCode

โญ 106K
Codex CLI
Codex CLI

โญ 60.8K
Claude Code
Claude Code

โญ 67.3K
Gemini CLI
Gemini CLI

โญ 94.7K
Kilo Code
Kilo Code

โญ 15.5K
๐Ÿ“ก ๋ชจ๋“  ์—์ด์ „ํŠธ๋Š” http://localhost:20128/v1 ๋˜๋Š” http://cloud.omniroute.online/v1์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. โ€” ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ, ๋ฌด์ œํ•œ ๋ชจ๋ธ ๋ฐ ํ• ๋‹น๋Ÿ‰ --- ## ๐Ÿค” ์™œ OmniRoute์ธ๊ฐ€์š”? **๋ˆ์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๊ณ  ํ•œ๋„์— ๋„๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š”.** - Subscription quota expires unused every month - Rate limits stop you mid-coding - Expensive APIs ($20-50/month per provider) - Manual switching between providers **OmniRoute๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.** - โœ… **Maximize subscriptions** - Track quota, use every bit before reset - โœ… **Auto fallback** - Subscription โ†’ API Key โ†’ Cheap โ†’ Free, zero downtime - โœ… **Multi-account** - Round-robin between accounts per provider - โœ… **Universal** - Works with Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, any CLI tool --- ## ๐Ÿ“ง ์ง€์› > ๐Ÿ’ฌ **Join our community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) โ€” Get help, share tips, and stay updated. - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online) - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) - **๋ฌธ์ œ**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) - **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md), open a PR, or pick a `good first issue` - **์›๋ž˜ ํ”„๋กœ์ ํŠธ**: [9router by decolua](https://github.com/decolua/9router) ### ๐Ÿ› ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜์‹œ๋‚˜์š”? When opening an issue, please run the system-info command and attach the generated file: ```bash npm run system-info ``` ๊ทธ๋Ÿฌ๋ฉด Node.js ๋ฒ„์ „, OmniRoute ๋ฒ„์ „, OS ์„ธ๋ถ€ ์ •๋ณด, ์„ค์น˜๋œ CLI ๋„๊ตฌ(qoder, gemini, claude, codex, antigravity, droid ๋“ฑ), Docker/PM2 ์ƒํƒœ, ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๋“ฑ ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํฌํ•จ๋œ `system-info.txt`์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. GitHub ๋ฌธ์ œ์— ์ง์ ‘ ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•˜์„ธ์š”. --- ## ๐Ÿ”„ ์ž‘๋™ ๋ฐฉ์‹ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Your CLI โ”‚ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...) โ”‚ Tool โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ http://localhost:20128/v1 โ†“ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ OmniRoute (Smart Router) โ”‚ โ”‚ โ€ข Format translation (OpenAI โ†” Claude) โ”‚ โ”‚ โ€ข Quota tracking + Embeddings + Images โ”‚ โ”‚ โ€ข Auto token refresh โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ†’ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI โ”‚ โ†“ quota exhausted โ”œโ”€โ†’ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc. โ”‚ โ†“ budget limit โ”œโ”€โ†’ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M) โ”‚ โ†“ budget limit โ””โ”€โ†’ [Tier 4: FREE] Qoder, Qwen, Kiro (unlimited) Result: Never stop coding, minimal cost ``` --- ## ๐ŸŽฏ What OmniRoute Solves โ€” 30 Real Pain Points & Use Cases > **AI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋Š” ๋งค์ผ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•ฉ๋‹ˆ๋‹ค.** OmniRoute๋Š” ๋น„์šฉ ์ดˆ๊ณผ๋ถ€ํ„ฐ ์ง€์—ญ์  ์ฐจ๋‹จ, ์†์ƒ๋œ OAuth ํ๋ฆ„๋ถ€ํ„ฐ ํ”„๋กœํ† ์ฝœ ์šด์˜ ๋ฐ ๊ธฐ์—… ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ๊นŒ์ง€ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ’ธ 1. "๋น„์‹ผ ๊ตฌ๋… ๋น„์šฉ์„ ์ง€๋ถˆํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•œ๋„ ๋•Œ๋ฌธ์— ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค." Developers pay $20โ€“200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling โ€” 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ** โ€” ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰์ด ์†Œ์ง„๋˜๋ฉด ์ˆ˜๋™ ๊ฐœ์ž… ์—†์ด ์ž๋™์œผ๋กœ API ํ‚ค โ†’ ์ €๋ ดํ•จ โ†’ ๋ฌด๋ฃŒ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. - **Real-Time Quota Tracking** โ€” Shows token consumption in real-time with reset countdown (5h, daily, weekly) - **Multi-Account Support** โ€” Multiple accounts per provider with auto round-robin โ€” when one runs out, switches to the next - **์‚ฌ์šฉ์ž ์ •์˜ ์ฝค๋ณด** โ€” 6๊ฐ€์ง€ ๊ท ํ˜• ์ „๋žต(์ฑ„์šฐ๊ธฐ ์šฐ์„ , ๋ผ์šด๋“œ ๋กœ๋นˆ, P2C, ๋ฌด์ž‘์œ„, ์ตœ์†Œ ์‚ฌ์šฉ, ๋น„์šฉ ์ตœ์ ํ™”)์„ ๊ฐ–์ถ˜ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ ํด๋ฐฑ ์ฒด์ธ - **Codex Business Quotas** โ€” Business/Team workspace quota monitoring directly in the dashboard
๐Ÿ”Œ 2. "I need to use multiple providers but each has a different API" OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฅธ ์ œ๊ณต์—…์ฒด์˜ ๋ชจ๋ธ์„ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์ด๋“ค ์‚ฌ์ด์—์„œ ๋Œ€์ฒดํ•˜๋ ค๋Š” ๊ฒฝ์šฐ SDK๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ณ , ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Custom providers (FriendLI, NIM) have non-standard model endpoints. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **Unified Endpoint** โ€” A single `http://localhost:20128/v1` serves as proxy for all 67+ providers - **Format Translation** โ€” Automatic and transparent: OpenAI โ†” Claude โ†” Gemini โ†” Responses API - **์‘๋‹ต ์‚ญ์ œ** โ€” OpenAI SDK v1.83+๋ฅผ ์†์ƒ์‹œํ‚ค๋Š” ๋น„ํ‘œ์ค€ ํ•„๋“œ(`x_groq`, `usage_breakdown`, `service_tier`)๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - **Role Normalization** โ€” Converts `developer` โ†’ `system` for non-OpenAI providers; `system` โ†’ `user` for GLM/ERNIE - **Think Tag Extraction** โ€” Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` - **Structured Output for Gemini** โ€” `json_schema` โ†’ `responseMimeType`/`responseSchema` automatic conversion - **`stream` defaults to `false`** โ€” Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs
๐ŸŒ 3. "My AI provider blocks my region/country" Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **3-Level Proxy Config** โ€” Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key - **Color-Coded Proxy Badges** โ€” Visual indicators: ๐ŸŸข global proxy, ๐ŸŸก provider proxy, ๐Ÿ”ต connection proxy, always showing the IP - **OAuth Token Exchange Through Proxy** โ€” OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` - **Connection Tests via Proxy** โ€” Connection tests use the configured proxy (no more direct bypass) - **SOCKS5 Support** โ€” Full SOCKS5 proxy support for outbound routing - **TLS Fingerprint Spoofing** โ€” Browser-like TLS fingerprint via `wreq-js` to bypass bot detection - **๐Ÿ” CLI ์ง€๋ฌธ ์ผ์น˜** โ€” ๊ธฐ๋ณธ CLI ๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ๋ช…๊ณผ ์ผ์น˜ํ•˜๋„๋ก ํ—ค๋”์™€ ๋ณธ๋ฌธ ํ•„๋“œ์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ณ„์ • ํ”Œ๋ž˜๊ทธ ์œ„ํ—˜์„ ๋Œ€ํญ ์ค„์ž…๋‹ˆ๋‹ค. The proxy IP is preserved โ€” you get both stealth **and** IP masking simultaneously
๐Ÿ†“ 4. "I want to use AI for coding but I have no money" Not everyone can pay $20โ€“200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๋ฌด๋ฃŒ ๊ณ„์ธต ์ œ๊ณต์ž ๋‚ด์žฅ** โ€” 100% ๋ฌด๋ฃŒ ์ œ๊ณต์ž์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›: Qoder(OAuth๋ฅผ ํ†ตํ•œ 5๊ฐœ์˜ ๋ฌด์ œํ•œ ๋ชจ๋ธ: kimi-k2-thinking, qwen3-coder-plus, deepseek-r1, minimax-m2, kimi-k2), Qwen(4๊ฐœ์˜ ๋ฌด์ œํ•œ ๋ชจ๋ธ: qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next, Vision-model), Kiro (Claude + AWS Builder ID for free), Gemini CLI (180K tokens/month free) - **Ollama Cloud** โ€” Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; `ollamacloud/` ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ - **Free-Only Combos** โ€” Chain `gc/gemini-3-flash โ†’ if/kimi-k2-thinking โ†’ qw/qwen3-coder-plus` = $0/month with zero downtime - **NVIDIA NIM ๋ฌด๋ฃŒ ์•ก์„ธ์Šค** โ€” ~40RPM ๊ฐœ๋ฐœ - build.nvidia.com์—์„œ 70๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ์— ์˜์›ํžˆ ๋ฌด๋ฃŒ ์•ก์„ธ์Šค(ํฌ๋ ˆ๋”ง์—์„œ ์ˆœ์ˆ˜ ์†๋„ ์ œํ•œ์œผ๋กœ ์ „ํ™˜) - **Cost Optimized Strategy** โ€” Routing strategy that automatically chooses the cheapest available provider
๐Ÿ”’ 5. "I need to protect my AI gateway from unauthorized access" When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **API Key Management** โ€” Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page - **Model-Level Permissions** โ€” Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle - **API Endpoint Protection** โ€” Require a key for `/v1/models` and block specific providers from the listing - **Auth Guard + CSRF Protection** โ€” All dashboard routes protected with `withAuth` middleware + CSRF tokens - **Rate Limiter** โ€” Per-IP rate limiting with configurable windows - **IP Filtering** โ€” Allowlist/blocklist for access control - **Prompt Injection Guard** โ€” Sanitization against malicious prompt patterns - **AES-256-GCM Encryption** โ€” Credentials encrypted at rest
๐Ÿ›‘ 6. "My provider went down and I lost my coding flow" AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๋ชจ๋ธ๋ณ„ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** โ€” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž„๊ณ„๊ฐ’ ๋ฐ ์ฟจ๋‹ค์šด(๋‹ซํž˜/์—ด๋ฆผ/๋ฐ˜์—ด๋ฆผ)์„ ํ†ตํ•œ ์ž๋™ ์—ด๊ธฐ/๋‹ซ๊ธฐ, ๊ณ„๋‹จ์‹ ๋ธ”๋ก ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ๋ณ„ ๋ฒ”์œ„ ์ง€์ • - **Exponential Backoff** โ€” Progressive retry delays - **Anti-Thundering Herd** โ€” Mutex + semaphore protection against concurrent retry storms - **Combo Fallback Chains** โ€” If the primary provider fails, automatically falls through the chain with no intervention - **Combo Circuit Breaker** โ€” Auto-disables failing providers within a combo chain - **Health Dashboard** โ€” Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency
๐Ÿ”ง 7. "Configuring each AI tool is tedious and repetitive" Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **CLI Tools Dashboard** โ€” Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline - **GitHub Copilot Config Generator** โ€” Generates `chatLanguageModels.json` for VS Code with bulk model selection - **Onboarding Wizard** โ€” Guided 4-step setup for first-time users - **One endpoint, all models** โ€” Configure `http://localhost:20128/v1` once, access 67+ providers
๐Ÿ”‘ 8. "Managing OAuth tokens from multiple providers is hell" Claude Code, Codex, Gemini CLI, Copilot โ€” all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. LAN/VPS์˜ OAuth๋Š” ํŠนํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **Auto Token Refresh** โ€” OAuth tokens refresh in background before expiration - **OAuth 2.0 (PKCE) Built-in** โ€” Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, Qoder - **Multi-Account OAuth** โ€” Multiple accounts per provider via JWT/ID token extraction - **OAuth LAN/Remote Fix** โ€” Private IP detection for `redirect_uri` + manual URL mode for remote servers - **OAuth Behind Nginx** โ€” Uses `window.location.origin` for reverse proxy compatibility - **Remote OAuth Guide** โ€” Step-by-step guide for Google Cloud credentials on VPS/Docker
๐Ÿ“Š 9. "I don't know how much I'm spending or where" Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋น„์šฉ์ด ์Œ“์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **Cost Analytics Dashboard** โ€” Per-token cost tracking and budget management per provider - **Budget Limits per Tier** โ€” Spending ceiling per tier that triggers automatic fallback - **Per-Model Pricing Configuration** โ€” Configurable prices per model - **Usage Statistics Per API Key** โ€” Request count and last-used timestamp per key - **Analytics Dashboard** โ€” Stat cards, model usage chart, provider table with success rates and latency
๐Ÿ› 10. "AI ํ˜ธ์ถœ์—์„œ๋Š” ์˜ค๋ฅ˜ ๋ฐ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ํ˜ธ์ถœ์ด ์‹คํŒจํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์†๋„ ์ œํ•œ, ๋งŒ๋ฃŒ๋œ ํ† ํฐ, ์ž˜๋ชป๋œ ํ˜•์‹ ๋˜๋Š” ๊ณต๊ธ‰์ž ์˜ค๋ฅ˜์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„์— ๊ฑธ์ณ ์กฐ๊ฐํ™”๋œ ๋กœ๊ทธ. ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์œผ๋ฉด ๋””๋ฒ„๊น…์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **ํ†ตํ•ฉ ๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ** โ€” ํƒญ 4๊ฐœ: ์š”์ฒญ ๋กœ๊ทธ, ํ”„๋ก์‹œ ๋กœ๊ทธ, ๊ฐ์‚ฌ ๋กœ๊ทธ, ์ฝ˜์†” - **์ฝ˜์†” ๋กœ๊ทธ ๋ทฐ์–ด** โ€” ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ ˆ๋ฒจ, ์ž๋™ ์Šคํฌ๋กค, ๊ฒ€์ƒ‰, ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์‹ค์‹œ๊ฐ„ ํ„ฐ๋ฏธ๋„ ์Šคํƒ€์ผ ๋ทฐ์–ด - **SQLite ํ”„๋ก์‹œ ๋กœ๊ทธ** โ€” ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ์ง€์†๋˜๋Š” ์˜๊ตฌ ๋กœ๊ทธ - **๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ** โ€” 4๊ฐ€์ง€ ๋””๋ฒ„๊น… ๋ชจ๋“œ: ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ(ํ˜•์‹ ๋ฒˆ์—ญ), ์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ(์™•๋ณต), ํ…Œ์ŠคํŠธ ๋ฒค์น˜(์ผ๊ด„), ๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ(์‹ค์‹œ๊ฐ„) - **์›๊ฒฉ ์ธก์ • ์š”์ฒญ** โ€” p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„ + X-์š”์ฒญ-ID ์ถ”์  - **ํšŒ์ „์„ ํ†ตํ•œ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋กœ๊น…** โ€” ์ฝ˜์†” ์ธํ„ฐ์…‰ํ„ฐ๋Š” ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํšŒ์ „์„ ํ†ตํ•ด ๋ชจ๋“  ๊ฒƒ์„ JSON ๋กœ๊ทธ์— ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. - **์‹œ์Šคํ…œ ์ •๋ณด ๋ณด๊ณ ์„œ** โ€” `npm run system-info`์€ ์ „์ฒด ํ™˜๊ฒฝ(๋…ธ๋“œ ๋ฒ„์ „, OmniRoute ๋ฒ„์ „, OS, CLI ๋„๊ตฌ, Docker/PM2 ์ƒํƒœ)์—์„œ `system-info.txt`์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰๊ฐ์ ์ธ ๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•  ๋•Œ ์ฒจ๋ถ€ํ•˜์„ธ์š”.
๐Ÿ—๏ธ 11. "๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค." ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ(๋กœ์ปฌ, VPS, Docker, ํด๋ผ์šฐ๋“œ)์—์„œ AI ํ”„๋ก์‹œ๋ฅผ ์„ค์น˜, ๊ตฌ์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋…ธ๋™ ์ง‘์•ฝ์ ์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฒฝ๋กœ, ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ `EACCES`, ํฌํŠธ ์ถฉ๋Œ, ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋นŒ๋“œ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋งˆ์ฐฐ์ด ๊ฐ€์ค‘๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **npm ์ „์—ญ ์„ค์น˜** โ€” `npm install -g omniroute && omniroute` โ€” ์™„๋ฃŒ - **Docker ๋‹ค์ค‘ ํ”Œ๋žซํผ** โ€” AMD64 + ARM64 ๊ธฐ๋ณธ(Apple Silicon, AWS Graviton, Raspberry Pi) - **Docker Compose ํ”„๋กœํ•„** โ€” `base`(CLI ๋„๊ตฌ ์—†์Œ) ๋ฐ `cli`(Claude Code, Codex, OpenClaw ํฌํ•จ) - **Electron ๋ฐ์Šคํฌํƒ‘ ์•ฑ** โ€” ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด, ์ž๋™ ์‹œ์ž‘, ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ๋ฅผ ๊ฐ–์ถ˜ Windows/macOS/Linux์šฉ ๊ธฐ๋ณธ ์•ฑ - **๋ถ„ํ•  ํฌํŠธ ๋ชจ๋“œ** โ€” ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค(์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ, ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น)๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ํฌํŠธ์— ์žˆ๋Š” API ๋ฐ ๋Œ€์‹œ๋ณด๋“œ - **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”** โ€” Cloudflare Workers๋ฅผ ํ†ตํ•ด ์žฅ์น˜ ๊ฐ„ ๊ตฌ์„ฑ ๋™๊ธฐํ™” - **DB ๋ฐฑ์—…** โ€” ๋ชจ๋“  ์„ค์ •์˜ ์ž๋™ ๋ฐฑ์—…, ๋ณต์›, ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
๐ŸŒ 12. "์ธํ„ฐํŽ˜์ด์Šค๋Š” ์˜์–ด๋กœ๋งŒ ์ œ๊ณต๋˜๋ฉฐ ์šฐ๋ฆฌ ํŒ€์€ ์˜์–ด๋ฅผ ๊ตฌ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ์˜์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ตญ๊ฐ€, ํŠนํžˆ ๋ผํ‹ด ์•„๋ฉ”๋ฆฌ์นด, ์•„์‹œ์•„, ์œ ๋Ÿฝ์˜ ํŒ€์€ ์˜์–ด ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธํ•ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ์žฅ๋ฒฝ์œผ๋กœ ์ธํ•ด ์ฑ„ํƒ์ด ์ค„์–ด๋“ค๊ณ  ๊ตฌ์„ฑ ์˜ค๋ฅ˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๋Œ€์‹œ๋ณด๋“œ i18n โ€” 30๊ฐœ ์–ธ์–ด** โ€” ํ•œ๊ตญ์–ด, ์•„๋ž์–ด, ๋ถˆ๊ฐ€๋ฆฌ์•„์–ด, ๋ด๋งˆํฌ์–ด, ๋…์ผ์–ด, ์ŠคํŽ˜์ธ์–ด, ํ•€๋ž€๋“œ์–ด, ํ”„๋ž‘์Šค์–ด, ํžˆ๋ธŒ๋ฆฌ์–ด, ํžŒ๋””์–ด, ํ—๊ฐ€๋ฆฌ์–ด, ์ธ๋„๋„ค์‹œ์•„์–ด, ์ดํƒˆ๋ฆฌ์•„์–ด, ์ผ๋ณธ์–ด, ๋ง๋ ˆ์ด์–ด, ๋„ค๋œ๋ž€๋“œ์–ด, ๋…ธ๋ฅด์›จ์ด์–ด, ํด๋ž€๋“œ์–ด, ํฌ๋ฅดํˆฌ๊ฐˆ์–ด(PT/BR), ๋ฃจ๋งˆ๋‹ˆ์•„์–ด, ๋Ÿฌ์‹œ์•„์–ด, ์Šฌ๋กœ๋ฐ”ํ‚ค์•„์–ด, ์Šค์›จ๋ด์–ด, ํƒœ๊ตญ์–ด, ์šฐํฌ๋ผ์ด๋‚˜์–ด, ๋ฒ ํŠธ๋‚จ์–ด, ์ค‘๊ตญ์–ด, ํ•„๋ฆฌํ•€์–ด, ์˜์–ด๋ฅผ ํฌํ•จํ•œ 500๊ฐœ ์ด์ƒ์˜ ํ‚ค ๋ฒˆ์—ญ๋จ - **RTL ์ง€์›** โ€” ์•„๋ž์–ด ๋ฐ ํžˆ๋ธŒ๋ฆฌ์–ด์— ๋Œ€ํ•ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ง€์› - **๋‹ค๊ตญ์–ด README** โ€” 30๊ฐœ์˜ ์™„์ „ํ•œ ๋ฌธ์„œ ๋ฒˆ์—ญ - **์–ธ์–ด ์„ ํƒ๊ธฐ** โ€” ์‹ค์‹œ๊ฐ„ ์ „ํ™˜์„ ์œ„ํ•œ ํ—ค๋”์˜ ์ง€๊ตฌ๋ณธ ์•„์ด์ฝ˜
๐Ÿ”„ 13. "์ฑ„ํŒ… ์ด์ƒ์˜ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ, ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." AI๋Š” ๋‹จ์ˆœํ•œ ์ฑ„ํŒ… ์™„์„ฑ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜ค๋””์˜ค๋ฅผ ๊ธฐ๋กํ•˜๊ณ , RAG์šฉ ์ž„๋ฒ ๋”ฉ์„ ๋งŒ๋“ค๊ณ , ๋ฌธ์„œ ์ˆœ์œ„๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•˜๊ณ , ์ฝ˜ํ…์ธ ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ API์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—”๋“œํฌ์ธํŠธ์™€ ํ˜•์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์ž„๋ฒ ๋”ฉ** โ€” `/v1/embeddings`(6๊ฐœ ๊ณต๊ธ‰์ž ๋ฐ 9๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ ํฌํ•จ) - **์ด๋ฏธ์ง€ ์ƒ์„ฑ** โ€” 10๊ฐœ ๊ณต๊ธ‰์ž์™€ 20๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ(OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)์„ ๊ฐ–์ถ˜ `/v1/images/generations` - **ํ…์ŠคํŠธ-๋น„๋””์˜ค** โ€” `/v1/videos/generations` โ€” ComfyUI(AnimateDiff, SVD) ๋ฐ SD WebUI - **ํ…์ŠคํŠธ-์Œ์•…** โ€” `/v1/music/generations` โ€” ComfyUI(์•ˆ์ •์ ์ธ ์˜ค๋””์˜ค ์˜คํ”ˆ, MusicGen) - **์˜ค๋””์˜ค ์ „์‚ฌ** โ€” `/v1/audio/transcriptions` โ€” Whisper + Nvidia NIM, HuggingFace, Qwen3 - **ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜** โ€” `/v1/audio/speech` โ€” ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, **Inworld**, **Cartesia**, **PlayHT**, + ๊ธฐ์กด ์ œ๊ณต์—…์ฒด - **์กฐ์ •** โ€” `/v1/moderations` โ€” ์ฝ˜ํ…์ธ  ์•ˆ์ „ ํ™•์ธ - **์žฌ์ˆœ์œ„** โ€” `/v1/rerank` โ€” ๋ฌธ์„œ ๊ด€๋ จ์„ฑ ์žฌ์ˆœ์œ„ - **์‘๋‹ต API** โ€” Codex์— ๋Œ€ํ•œ ์ „์ฒด `/v1/responses` ์ง€์›
๐Ÿงช 14. "๋ชจ๋ธ ๊ฐ„ ํ’ˆ์งˆ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋น„๊ตํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค." ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€(์ฝ”๋“œ, ๋ฒˆ์—ญ, ์ถ”๋ก )์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ชจ๋ธ์„ ์•Œ๊ณ  ์‹ถ์–ดํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋А๋ฆฝ๋‹ˆ๋‹ค. ํ†ตํ•ฉ ํ‰๊ฐ€ ๋„๊ตฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **LLM ํ‰๊ฐ€** โ€” ์ธ์‚ฌ๋ง, ์ˆ˜ํ•™, ์ง€๋ฆฌ, ์ฝ”๋“œ ์ƒ์„ฑ, JSON ์ค€์ˆ˜, ๋ฒˆ์—ญ, ๋งˆํฌ๋‹ค์šด, ์•ˆ์ „ ๊ฑฐ๋ถ€๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฌ์ „ ๋กœ๋“œ๋œ 10๊ฐ€์ง€ ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•œ ๊ณจ๋“  ์„ธํŠธ ํ…Œ์ŠคํŠธ - **4๊ฐ€์ง€ ์ผ์น˜ ์ „๋žต** โ€” `exact`, `contains`, `regex`, `custom`(JS ํ•จ์ˆ˜) - **๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ํ…Œ์ŠคํŠธ ๋ฒค์น˜** โ€” ์—ฌ๋Ÿฌ ์ž…๋ ฅ ๋ฐ ์˜ˆ์ƒ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ ์ผ๊ด„ ํ…Œ์ŠคํŠธ, ๊ณต๊ธ‰์—…์ฒด ๊ฐ„ ๋น„๊ต - **์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ** โ€” ์‹œ๊ฐ์  ์‘๋‹ต ๋ Œ๋”๋ง์„ ํฌํ•จํ•œ ์ „์ฒด ์™•๋ณต - **๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ** โ€” ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ํ๋ฅด๋Š” ๋ชจ๋“  ์š”์ฒญ์˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ
๐Ÿ“ˆ 15. "์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ํ™•์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." ์š”์ฒญ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋™์ผํ•œ ์งˆ๋ฌธ์„ ์บ์‹ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์ค‘๋ณต ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฉฑ๋“ฑ์„ฑ์ด ์—†์œผ๋ฉด ์ค‘๋ณต ์š”์ฒญ์œผ๋กœ ์ธํ•ด ์ฒ˜๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž๋ณ„ ์š”๊ธˆ ์ œํ•œ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์˜๋ฏธ ์ฒด๊ณ„ ์บ์‹œ** โ€” 2๊ณ„์ธต ์บ์‹œ(์„œ๋ช… + ์˜๋ฏธ ์ฒด๊ณ„)๋กœ ๋น„์šฉ๊ณผ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฐ์†Œ - **๋ฉฑ๋“ฑ์„ฑ ์š”์ฒญ** โ€” ๋™์ผํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ค‘๋ณต ์ œ๊ฑฐ ๊ธฐ๊ฐ„์€ 5์ดˆ์ž…๋‹ˆ๋‹ค. - **์†๋„ ์ œํ•œ ๊ฐ์ง€** โ€” ์ œ๊ณต์—…์ฒด๋ณ„ RPM, ์ตœ์†Œ ๊ฐ„๊ฒฉ ๋ฐ ์ตœ๋Œ€ ๋™์‹œ ์ถ”์  - **ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ** โ€” ์„ค์ • โ†’ ์ง€์†์„ฑ์„ ํ†ตํ•œ ๋ณต์›๋ ฅ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ๊ฐ’ - **API ํ‚ค ๊ฒ€์ฆ ์บ์‹œ** โ€” ํ”„๋กœ๋•์…˜ ์„ฑ๋Šฅ์„ ์œ„ํ•œ 3๊ณ„์ธต ์บ์‹œ - **์›๊ฒฉ ์ธก์ • ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ** โ€” p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„, ์บ์‹œ ํ†ต๊ณ„, ๊ฐ€๋™ ์‹œ๊ฐ„
๐Ÿค– 16. "๋ชจ๋ธ ๋™์ž‘์„ ์ „์—ญ์ ์œผ๋กœ ์ œ์–ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค." ํŠน์ • ์–ธ์–ด, ํŠน์ • ์–ด์กฐ๋กœ ๋ชจ๋“  ์‘๋‹ต์„ ์›ํ•˜๊ฑฐ๋‚˜ ์ถ”๋ก  ํ† ํฐ์„ ์ œํ•œํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž. ๋ชจ๋“  ๋„๊ตฌ/์š”์ฒญ์—์„œ ์ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์‚ฝ์ž…** โ€” ๋ชจ๋“  ์š”์ฒญ์— ์ „์—ญ ํ”„๋กฌํ”„ํŠธ ์ ์šฉ - **์ƒ๊ฐ ์˜ˆ์‚ฐ ๊ฒ€์ฆ** โ€” ์š”์ฒญ๋ณ„ ํ† ํฐ ํ• ๋‹น ์ œ์–ด ์ถ”๋ก (ํŒจ์Šค์Šค๋ฃจ, ์ž๋™, ์‚ฌ์šฉ์ž ์ •์˜, ์ ์‘ํ˜•) - **6๊ฐ€์ง€ ๋ผ์šฐํŒ… ์ „๋žต** โ€” ์š”์ฒญ ๋ฐฐํฌ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ธ€๋กœ๋ฒŒ ์ „๋žต - **์™€์ผ๋“œ์นด๋“œ ๋ผ์šฐํ„ฐ** โ€” `provider/*` ํŒจํ„ด์€ ๋ชจ๋“  ๊ณต๊ธ‰์ž์—๊ฒŒ ๋™์ ์œผ๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค. - **์ฝค๋ณด ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ† ๊ธ€** โ€” ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ง์ ‘ ์ฝค๋ณด๋ฅผ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค. - **๊ณต๊ธ‰์ž ํ† ๊ธ€** โ€” ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. - **์ฐจ๋‹จ๋œ ์ œ๊ณต์ž** โ€” `/v1/models` ๋ชฉ๋ก์—์„œ ํŠน์ • ์ œ๊ณต์ž๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
๐Ÿงฐ 17. "์ตœ๊ณ  ์ˆ˜์ค€์˜ ์ œํ’ˆ ๊ธฐ๋Šฅ์œผ๋กœ MCP ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ๋งŽ์€ AI ๊ฒŒ์ดํŠธ์›จ์ด๋Š” MCP๋ฅผ ์ˆจ๊ฒจ์ง„ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ๋งŒ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํŒ€์—๋Š” ๊ฐ€์‹œ์ ์ด๊ณ  ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์šด์˜ ๋ ˆ์ด์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ๋Œ€์‹œ๋ณด๋“œ ํƒ์ƒ‰ ๋ฐ ์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ ํƒญ์— MCP๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. - ํ”„๋กœ์„ธ์Šค, ๋„๊ตฌ, ๋ฒ”์œ„ ๋ฐ ๊ฐ์‚ฌ๊ฐ€ ํฌํ•จ๋œ ์ „์šฉ MCP ๊ด€๋ฆฌ ํŽ˜์ด์ง€ - `omniroute --mcp` ๋ฐ ํด๋ผ์ด์–ธํŠธ ์˜จ๋ณด๋”ฉ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ๋น ๋ฅธ ์‹œ์ž‘
๐Ÿง  18. "๋™๊ธฐํ™” + ์ŠคํŠธ๋ฆผ ์ž‘์—… ๊ฒฝ๋กœ๋ฅผ ๊ฐ–์ถ˜ A2A ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์—๋Š” ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ œ์–ด๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์‘๋‹ต๊ณผ ์žฅ๊ธฐ ์‹คํ–‰ ์ŠคํŠธ๋ฆฌ๋ฐ ์‹คํ–‰์ด ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - `message/send` ๋ฐ `message/stream`์ด ์žˆ๋Š” A2A JSON-RPC ์—”๋“œํฌ์ธํŠธ(`POST /a2a`) - ํ„ฐ๋ฏธ๋„ ์ƒํƒœ ์ „ํŒŒ๋ฅผ ํ†ตํ•œ SSE ์ŠคํŠธ๋ฆฌ๋ฐ - `tasks/get` ๋ฐ `tasks/cancel`์šฉ ์ž‘์—… ์ˆ˜๋ช… ์ฃผ๊ธฐ API
๐Ÿ›ฐ๏ธ 19. "์ถ”์ธก๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ MCP ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์šด์˜ํŒ€์€ API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ MCP๊ฐ€ ์‹ค์ œ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - PID, ํƒ€์ž„์Šคํƒฌํ”„, ์ „์†ก, ๋„๊ตฌ ๊ฐœ์ˆ˜ ๋ฐ ๋ฒ”์œ„ ๋ชจ๋“œ๊ฐ€ ํฌํ•จ๋œ ๋Ÿฐํƒ€์ž„ ํ•˜ํŠธ๋น„ํŠธ ํŒŒ์ผ - ํ•˜ํŠธ๋น„ํŠธ + ์ตœ๊ทผ ํ™œ๋™์„ ๊ฒฐํ•ฉํ•œ MCP ์ƒํƒœ API - ํ”„๋กœ์„ธ์Šค/๊ฐ€๋™ ์‹œ๊ฐ„/ํ•˜ํŠธ๋น„ํŠธ ์ตœ์‹ ์„ฑ์„ ์œ„ํ•œ UI ์ƒํƒœ ์นด๋“œ
๐Ÿ“‹ 20. "๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ MCP ๋„๊ตฌ ์‹คํ–‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ๋„๊ตฌ๊ฐ€ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์šด์˜ ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ํŒ€์—๋Š” ๋ฒ•์˜ํ•™์  ์ถ”์ ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - MCP ๋„๊ตฌ ํ˜ธ์ถœ์— ๋Œ€ํ•œ SQLite ์ง€์› ๊ฐ์‚ฌ ๋กœ๊น… - ๋„๊ตฌ, ์„ฑ๊ณต/์‹คํŒจ, API ํ‚ค, ํŽ˜์ด์ง€ ๋งค๊น€ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋ง - ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋Œ€์‹œ๋ณด๋“œ ๊ฐ์‚ฌ ํ…Œ์ด๋ธ” + ํ†ต๊ณ„ ์—”๋“œํฌ์ธํŠธ
๐Ÿ” 21. "ํ†ตํ•ฉ๋‹น ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ MCP ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์—๋Š” ๋„๊ตฌ ๋ฒ”์ฃผ์— ๋Œ€ํ•œ ์ตœ์†Œ ๊ถŒํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ์ œ์–ด๋œ ๋„๊ตฌ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ 9๊ฐœ์˜ ์„ธ๋ถ„ํ™”๋œ MCP ๋ฒ”์œ„ - MCP ๊ด€๋ฆฌ UI์˜ ๋ฒ”์œ„ ์ ์šฉ ๋ฐ ๊ฐ€์‹œ์„ฑ - ์šด์˜ ํˆด๋ง์„ ์œ„ํ•œ ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ ์ž์„ธ
โš™๏ธ 22. "์žฌ๋ฐฐํฌ ์—†์ด ์šด์˜ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ํŒ€์€ ์‚ฌ๊ณ  ๋˜๋Š” ๋น„์šฉ ์ด๋ฒคํŠธ ์ค‘์— ๋น ๋ฅธ ๋Ÿฐํƒ€์ž„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - MCP ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ง์ ‘ ์ฝค๋ณด ํ™œ์„ฑํ™” ์ „ํ™˜ - ์‚ฌ์ „ ์ •์˜๋œ ์ •์ฑ… ํŒฉ์˜ ๋ณต์›๋ ฅ ํ”„๋กœํ•„ ์ ์šฉ - ๋™์ผํ•œ ์šด์˜ ํŒจ๋„์—์„œ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ ์žฌ์„ค์ •
๐Ÿ”„ 23. "์‹ค์‹œ๊ฐ„ A2A ์ž‘์—… ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ฐ€์‹œ์„ฑ ๋ฐ ์ทจ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ฐ€์‹œ์„ฑ์ด ์—†์œผ๋ฉด ์ž‘์—… ์‚ฌ๊ณ ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ํŽ˜์ด์ง€ ๋งค๊น€์„ ํ†ตํ•œ ์ƒํƒœ/๊ธฐ์ˆ ๋ณ„ ์ž‘์—… ๋ชฉ๋ก/ํ•„ํ„ฐ๋ง - ์ž‘์—… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ด๋ฒคํŠธ ๋ฐ ์•„ํ‹ฐํŒฉํŠธ์— ๋Œ€ํ•œ ๋“œ๋ฆด๋‹ค์šด - ์ž‘์—… ์ทจ์†Œ ๋์  ๋ฐ ํ™•์ธ์ด ํฌํ•จ๋œ UI ์ž‘์—…
๐ŸŒŠ 24. "A2A ๋กœ๋“œ๋ฅผ ์œ„ํ•œ ํ™œ์„ฑ ์ŠคํŠธ๋ฆผ ๋ฉ”ํŠธ๋ฆญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์ŠคํŠธ๋ฆฌ๋ฐ ์›Œํฌํ”Œ๋กœ์—๋Š” ๋™์‹œ์„ฑ ๋ฐ ๋ผ์ด๋ธŒ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์šด์˜ ํ†ต์ฐฐ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - A2A ์ƒํƒœ์— ํ†ตํ•ฉ๋œ ํ™œ์„ฑ ์ŠคํŠธ๋ฆผ ์นด์šดํ„ฐ - ๋งˆ์ง€๋ง‰ ์ž‘์—… ํƒ€์ž„์Šคํƒฌํ”„ ๋ฐ ์ƒํƒœ๋ณ„ ๊ฐœ์ˆ˜ - ์‹ค์‹œ๊ฐ„ ์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ A2A ๋Œ€์‹œ๋ณด๋“œ ์นด๋“œ
๐Ÿชช 25. "ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ์—์ด์ „ํŠธ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ์—๋Š” ์˜จ๋ณด๋”ฉ์„ ์œ„ํ•ด ์ปดํ“จํ„ฐ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - `/.well-known/agent.json`์— ๋…ธ์ถœ๋œ ์—์ด์ „ํŠธ ์นด๋“œ - ๊ด€๋ฆฌ UI์— ํ‘œ์‹œ๋˜๋Š” ๋Šฅ๋ ฅ๊ณผ ๊ธฐ์ˆ  - A2A ์ƒํƒœ API์—๋Š” ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๊ฒ€์ƒ‰ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿงญ 26. "์ œํ’ˆ UX์—์„œ ํ”„๋กœํ† ์ฝœ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœํ† ์ฝœ ํ‘œ๋ฉด์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ฑ„ํƒ ๋ฐ ์ง€์› ํ’ˆ์งˆ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ํ”„๋ก์‹œ, MCP, A2A ๋ฐ API ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ํƒญ์ด ํฌํ•จ๋œ ํ†ตํ•ฉ **์—”๋“œํฌ์ธํŠธ** ํŽ˜์ด์ง€ - MCP ๋ฐ A2A์— ๋Œ€ํ•œ ์ธ๋ผ์ธ ์„œ๋น„์Šค ์ƒํƒœ ํ† ๊ธ€(์˜จ๋ผ์ธ/์˜คํ”„๋ผ์ธ) - ๊ฐœ์š”์—์„œ ์ „์šฉ ๊ด€๋ฆฌ ํƒญ์œผ๋กœ์˜ ๋งํฌ
๐Ÿงช 27. "์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—”๋“œํˆฌ์—”๋“œ ํ”„๋กœํ† ์ฝœ ๊ฒ€์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ๋ชจ์˜ ํ…Œ์ŠคํŠธ๋Š” ์ถœ์‹œ ์ „์— ํ”„๋กœํ† ์ฝœ ํ˜ธํ™˜์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ์•ฑ์„ ๋ถ€ํŒ…ํ•˜๊ณ  ์‹ค์ œ MCP SDK ํด๋ผ์ด์–ธํŠธ ์ „์†ก์„ ์‚ฌ์šฉํ•˜๋Š” E2E ์ œํ’ˆ๊ตฐ - ํ๋ฆ„ ๊ฒ€์ƒ‰, ์ „์†ก, ์ŠคํŠธ๋ฆฌ๋ฐ, ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์ทจ์†Œ์— ๋Œ€ํ•œ A2A ํด๋ผ์ด์–ธํŠธ ํ…Œ์ŠคํŠธ - MCP ๊ฐ์‚ฌ ๋ฐ A2A ์ž‘์—… API์— ๋Œ€ํ•œ ๊ต์ฐจ ํ™•์ธ ์ฃผ์žฅ
๐Ÿ“ก 28. "๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค์— ๊ฑธ์ณ ํ†ตํ•ฉ๋œ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ํ”„๋กœํ† ์ฝœ๋ณ„๋กœ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ๋ถ„ํ• ํ•˜๋ฉด ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  MTTR์ด ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ๋Œ€์‹œ๋ณด๋“œ/๋กœ๊ทธ/๋ถ„์„์„ ํ•˜๋‚˜์˜ ์ œํ’ˆ์œผ๋กœ ํ†ตํ•ฉ - OpenAI, MCP ๋ฐ A2A ๊ณ„์ธต ์ „๋ฐ˜์— ๊ฑธ์ณ ์ƒํƒœ + ๊ฐ์‚ฌ + ์›๊ฒฉ ์ธก์ • ์š”์ฒญ - ์ƒํƒœ ๋ฐ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์šด์˜ API
๐Ÿ’ผ 29. "ํ”„๋ก์‹œ + ๋„๊ตฌ + ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์œ„ํ•ด ํ•˜๋‚˜์˜ ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ์—ฌ๋Ÿฌ ๊ฐœ๋ณ„ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์šด์˜ ๋น„์šฉ๊ณผ ์˜ค๋ฅ˜ ๋ชจ๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - OpenAI ํ˜ธํ™˜ ํ”„๋ก์‹œ, MCP ์„œ๋ฒ„, A2A ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ์Šคํƒ์— ์žˆ์Œ - ๊ณต์œ  ์ธ์ฆ, ๋ณต์›๋ ฅ, ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋ฐ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ - ๋ชจ๋“  ์ƒํ˜ธ ์ž‘์šฉ ํ‘œ๋ฉด์— ๊ฑธ์ณ ์ผ๊ด€๋œ ์ •์ฑ… ๋ชจ๋ธ
๐Ÿš€ 30. "๊ธ€๋ฃจ ์ฝ”๋“œ ํ™•์‚ฐ ์—†์ด ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." ์—ฌ๋Ÿฌ ์ž„์‹œ ์„œ๋น„์Šค์™€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฒฐํ•ฉํ•  ๋•Œ ํŒ€์˜ ์†๋„๊ฐ€ ๋А๋ ค์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ํด๋ผ์ด์–ธํŠธ์™€ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ํ†ตํ•ฉ ์—”๋“œํฌ์ธํŠธ ์ „๋žต - ๋‚ด์žฅ๋œ ํ”„๋กœํ† ์ฝœ ๊ด€๋ฆฌ UI ๋ฐ ์—ฐ๊ธฐ ๊ฒ€์ฆ ๊ฒฝ๋กœ - ํ”„๋กœ๋•์…˜ ์ค€๋น„ ๊ธฐ๋ฐ˜(๋ณด์•ˆ, ๋กœ๊น…, ํƒ„๋ ฅ์„ฑ, ๋ฐฑ์—…)
### ํ”Œ๋ ˆ์ด๋ถ ์˜ˆ์‹œ(ํ†ตํ•ฉ ์‚ฌ์šฉ ์‚ฌ๋ก€) **ํ”Œ๋ ˆ์ด๋ถ A: ์œ ๋ฃŒ ๊ตฌ๋… ๊ทน๋Œ€ํ™” + ์ €๋ ดํ•œ ๋ฐฑ์—…** ```txt Combo: "maximize-claude" 1. cc/claude-opus-4-6 2. glm/glm-4.7 3. if/kimi-k2-thinking Monthly cost: $20 + small backup spend Outcome: higher quality, near-zero interruption ``` **ํ”Œ๋ ˆ์ด๋ถ B: ๋น„์šฉ์ด ์ „ํ˜€ ๋“ค์ง€ ์•Š๋Š” ์ฝ”๋”ฉ ์Šคํƒ** ```txt Combo: "free-forever" 1. gc/gemini-3-flash 2. if/kimi-k2-thinking 3. qw/qwen3-coder-plus Monthly cost: $0 Outcome: stable free coding workflow ``` **ํ”Œ๋ ˆ์ด๋ถ C: ์—ฐ์ค‘๋ฌดํœด ์ƒ์‹œ ๊ฐ€๋™ ํด๋ฐฑ ์ฒด์ธ** ```txt Combo: "always-on" 1. cc/claude-opus-4-6 2. cx/gpt-5.2-codex 3. glm/glm-4.7 4. minimax/MiniMax-M2.1 5. if/kimi-k2-thinking Outcome: deep fallback depth for deadline-critical workloads ``` **ํ”Œ๋ ˆ์ด๋ถ D: MCP + A2A๋ฅผ ์‚ฌ์šฉํ•œ ์—์ด์ „ํŠธ ์ž‘์—…** ```txt 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations 2) Run A2A tasks via `message/send` and `message/stream` 3) Observe via /dashboard/endpoint (MCP and A2A tabs) 4) Toggle services via inline status controls ``` --- ## ๐Ÿ†“ ๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ โ€” ๊ตฌ์„ฑ ๋น„์šฉ ์—†์Œ > **$0/์›”**๋กœ ๋ช‡ ๋ถ„ ๋งŒ์— AI ์ฝ”๋”ฉ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ ๊ณ„์ •์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‚ด์žฅ๋œ **๋ฌด๋ฃŒ ์Šคํƒ** ์ฝค๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. | ๋‹จ๊ณ„ | ์•ก์…˜ | ์ œ๊ณต์ž ์ž ๊ธˆ ํ•ด์ œ | | ---- | ---------------------------------------------- | --------------------------------------------------------------- | | 1 | **Kiro** ์—ฐ๊ฒฐ(AWS Builder ID OAuth) | ํด๋กœ๋“œ ์†Œ๋„คํŠธ 4.5, ํ•˜์ด์ฟ  4.5 โ€” **๋ฌด์ œํ•œ** | | 2 | **Qoder** ์—ฐ๊ฒฐ(Google OAuth) | kimi-k2-thinking, qwen3-coder-plus, deepseek-r1... โ€” **๋ฌด์ œํ•œ** | | 3 | ์—ฐ๊ฒฐ **Qwen**(์žฅ์น˜ ์ฝ”๋“œ) | qwen3-coder-plus, qwen3-coder-flash... โ€” **๋ฌด์ œํ•œ** | | 4 | **Gemini CLI**(Google OAuth) ์—ฐ๊ฒฐ | gemini-3-flash, gemini-2.5-pro โ€” **180K/์›” ๋ฌด๋ฃŒ** | | 5 | `/dashboard/combos` โ†’ **๋ฌด๋ฃŒ ์Šคํƒ($0)** ํ…œํ”Œ๋ฆฟ | ๋ชจ๋“  ๋ฌด๋ฃŒ ๊ณต๊ธ‰์ž๋ฅผ ์ž๋™์œผ๋กœ ๋ผ์šด๋“œ ๋กœ๋นˆ | **IDE/CLI์—์„œ ๋‹ค์Œ์„ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค.** `http://localhost:20128/v1` ยท API ํ‚ค: `any-string` ยท ์™„๋ฃŒ. > **์„ ํƒ์  ์ถ”๊ฐ€ ์ ์šฉ ๋ฒ”์œ„(๋ฌด๋ฃŒ):** Groq API ํ‚ค(30RPM ๋ฌด๋ฃŒ), NVIDIA NIM(40RPM ๋ฌด๋ฃŒ, 70๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ), Cerebras(100๋งŒ ํ† ํฌ/์ผ), LongCat API ํ‚ค(5000๋งŒ ํ† ํฐ/์ผ!), Cloudflare Workers AI(10K ๋‰ด๋Ÿฐ/์ผ, 50๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ). ## โšก ๋น ๋ฅธ ์‹œ์ž‘ ### 1) ์„ค์น˜ ๋ฐ ์‹คํ–‰ ```bash npm install -g omniroute omniroute ``` > **pnpm ์‚ฌ์šฉ์ž:** ์„ค์น˜ ํ›„ `pnpm approve-builds -g`์„ ์‹คํ–‰ํ•˜์—ฌ `better-sqlite3` ๋ฐ `@swc/core`์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. > > ```bash > pnpm install -g omniroute > pnpm approve-builds -g # Select all packages โ†’ approve > omniroute > ``` ๋Œ€์‹œ๋ณด๋“œ๋Š” `http://localhost:20128`์—์„œ ์—ด๋ฆฌ๊ณ  API ๊ธฐ๋ณธ URL์€ `http://localhost:20128/v1`์ž…๋‹ˆ๋‹ค. | ๋ช…๋ น | ์„ค๋ช… | | ----------------------- | --------------------------------------------------------------- | | `omniroute` | ์„œ๋ฒ„ ์‹œ์ž‘(`PORT=20128`, API ๋ฐ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹๋™์ผํ•œ ํฌํŠธ์— ์žˆ์Œ) | | `omniroute --port 3000` | ํ‘œ์ค€/API ํฌํŠธ๋ฅผ 3000์œผ๋กœ ์„ค์ • | | `omniroute --mcp` | MCP ์„œ๋ฒ„ ์‹œ์ž‘(stdio ์ „์†ก) | | `omniroute --no-open` | ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž๋™์œผ๋กœ ์—ด์ง€ ์•Š์Œ | | `omniroute --help` | ๋„์›€๋ง ํ‘œ์‹œ | ์„ ํƒ์  ๋ถ„ํ•  ํฌํŠธ ๋ชจ๋“œ: ```bash PORT=20128 DASHBOARD_PORT=20129 omniroute # API: http://localhost:20128/v1 # Dashboard: http://localhost:20129 ``` ### 2) ๊ณต๊ธ‰์ž ์—ฐ๊ฒฐ ๋ฐ API ํ‚ค ์ƒ์„ฑ 1. ๋Œ€์‹œ๋ณด๋“œ โ†’ `Providers`์„ ์—ด๊ณ  ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ณต๊ธ‰์ž(OAuth ๋˜๋Š” API ํ‚ค)๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. 2. ๋Œ€์‹œ๋ณด๋“œ โ†’ `Endpoints`์„ ์—ด๊ณ  API ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 3. (์„ ํƒ ์‚ฌํ•ญ) ๋Œ€์‹œ๋ณด๋“œ โ†’ `Combos`์„ ์—ด๊ณ  ํด๋ฐฑ ์ฒด์ธ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ### 3) ์ฝ”๋”ฉ ๋„๊ตฌ๋กœ OmniRoute๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ```txt Base URL: http://localhost:20128/v1 API Key: [copy from Endpoint page] Model: if/kimi-k2-thinking (or any provider/model prefix) ``` Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode ๋ฐ OpenAI ํ˜ธํ™˜ SDK์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ### 4) ํ”„๋กœํ† ์ฝœ ํ™œ์„ฑํ™” ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ(v2.0) **MCP(๋„๊ตฌ ๊ธฐ๋ฐ˜ ์ž‘์—…์šฉ):** ```bash omniroute --mcp ``` ๊ทธ๋Ÿฐ ๋‹ค์Œ `stdio`์„ ํ†ตํ•ด MCP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. - `omniroute_get_health` - `omniroute_list_combos` **A2A(์—์ด์ „ํŠธ ๊ฐ„ ์›Œํฌํ”Œ๋กœ์šฉ):** ```bash curl http://localhost:20128/.well-known/agent.json ``` ```bash curl -X POST http://localhost:20128/a2a \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' ``` ### 5) ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ™•์ธํ•˜์„ธ์š”(๊ถŒ์žฅ) ```bash npm run test:protocols:e2e ``` ์ด ์ œํ’ˆ๊ตฐ์€ ์‹คํ–‰ ์ค‘์ธ ์•ฑ์— ๋Œ€ํ•ด ์‹ค์ œ MCP ๋ฐ A2A ํด๋ผ์ด์–ธํŠธ ํ๋ฆ„์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ### ๋Œ€์•ˆ: ์†Œ์Šค์—์„œ ์‹คํ–‰ ```bash cp .env.example .env npm install PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` --- ## ๐Ÿณ ๋„์ปค OmniRoute๋Š” [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute)์—์„œ ๊ณต๊ฐœ Docker ์ด๋ฏธ์ง€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **๋น ๋ฅธ ์‹คํ–‰:** ```bash docker run -d \ --name omniroute \ --restart unless-stopped \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest ``` **ํ™˜๊ฒฝ ํŒŒ์ผ ํฌํ•จ:** ```bash # Copy and edit .env first cp .env.example .env docker run -d \ --name omniroute \ --restart unless-stopped \ --env-file .env \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest ``` **Docker Compose ์‚ฌ์šฉ:** ```bash # Base profile (no CLI tools) docker compose --profile base up -d # CLI profile (Claude Code, Codex, OpenClaw built-in) docker compose --profile cli up -d ``` | ์ด๋ฏธ์ง€ | ํƒœ๊ทธ | ์‚ฌ์ด์ฆˆ | ์„ค๋ช… | | ------------------------ | -------- | ------ | ---------------- | | `diegosouzapw/omniroute` | `latest` | ~250MB | ์ตœ์‹  ์•ˆ์ • ๋ฆด๋ฆฌ์Šค | | `diegosouzapw/omniroute` | `1.0.3` | ~250MB | ํ˜„์žฌ ๋ฒ„์ „ | --- ## ๐Ÿ–ฅ๏ธ ๋ฐ์Šคํฌํ†ฑ ์•ฑ โ€” ์˜คํ”„๋ผ์ธ ๋ฐ ์ƒ์‹œ ์ ‘์† > ๐Ÿ†• **์‹ ๊ทœ!** ์ด์ œ OmniRoute๋ฅผ Windows, macOS, Linux์šฉ **๊ธฐ๋ณธ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜**์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OmniRoute๋ฅผ ๋…๋ฆฝํ˜• ๋ฐ์Šคํฌํ†ฑ ์•ฑ์œผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ๋กœ์ปฌ ๋ชจ๋ธ์—๋Š” ํ„ฐ๋ฏธ๋„, ๋ธŒ๋ผ์šฐ์ €, ์ธํ„ฐ๋„ท์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Electron ๊ธฐ๋ฐ˜ ์•ฑ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. - ๐Ÿ–ฅ๏ธ **๊ธฐ๋ณธ ์ฐฝ** โ€” ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅํ•œ ์ „์šฉ ์•ฑ ์ฐฝ - ๐Ÿ”„ **์ž๋™ ์‹œ์ž‘** โ€” ์‹œ์Šคํ…œ ๋กœ๊ทธ์ธ ์‹œ OmniRoute ์‹คํ–‰ - ๐Ÿ”” **๊ธฐ๋ณธ ์•Œ๋ฆผ** โ€” ํ• ๋‹น๋Ÿ‰ ์†Œ์ง„ ๋˜๋Š” ๊ณต๊ธ‰์ž ๋ฌธ์ œ์— ๋Œ€ํ•œ ์•Œ๋ฆผ ๋ฐ›๊ธฐ - โšก **์›ํด๋ฆญ ์„ค์น˜** โ€” NSIS(Windows), DMG(macOS), AppImage(Linux) - ๐ŸŒ **์˜คํ”„๋ผ์ธ ๋ชจ๋“œ** โ€” ๋ฒˆ๋“ค ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํžˆ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ž‘๋™ ### ๋น ๋ฅธ ์‹œ์ž‘ ```bash # Development mode npm run electron:dev # Build for your platform npm run electron:build # Current platform npm run electron:build:win # Windows (.exe) npm run electron:build:mac # macOS (.dmg) โ€” x64 & arm64 npm run electron:build:linux # Linux (.AppImage) ``` ### ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์ตœ์†Œํ™”๋˜๋ฉด OmniRoute๋Š” ๋น ๋ฅธ ์ž‘์—…์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. - ๋Œ€์‹œ๋ณด๋“œ ์—ด๊ธฐ - ์„œ๋ฒ„ ํฌํŠธ ๋ณ€๊ฒฝ - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ๐Ÿ“– ์ „์ฒด ๋ฌธ์„œ: [**OMNI_TOKEN_153**](electron/README.md) --- ## ๐Ÿ’ฐ ๊ฐ€๊ฒฉ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ | ๊ณ„์ธต | ๊ณต๊ธ‰์ž | ๋น„์šฉ | ํ• ๋‹น๋Ÿ‰ ์žฌ์„ค์ • | ์ตœ๊ณ ์˜ ๋Œ€์ƒ | | ------------- | ----------------------- | ------------------------------- | --------------- | -------------------------------------- | | **๐Ÿ’ณ ๊ตฌ๋…** | ํด๋กœ๋“œ ์ฝ”๋“œ (Pro) | $20/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | ์ด๋ฏธ ๊ตฌ๋… ์ค‘ | | | ์ฝ”๋ฑ์Šค(ํ”Œ๋Ÿฌ์Šค/ํ”„๋กœ) | $20-200/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | OpenAI ์‚ฌ์šฉ์ž | | | ์ œ๋ฏธ๋‹ˆ CLI | **๋ฌด๋ฃŒ** | 180K/์›” + 1K/์ผ | ๋ชจ๋“  ์‚ฌ๋žŒ! | | | GitHub ๋ถ€์กฐ์ข…์‚ฌ | $10-19/์›” | ์›”๊ฐ„ | GitHub ์‚ฌ์šฉ์ž | | **๐Ÿ”‘ API ํ‚ค** | ์—”๋น„๋””์•„ NIM | **๋ฌด๋ฃŒ**(์˜์›ํ•œ ๊ฐœ๋ฐœ) | ~40RPM | 70๊ฐœ ์ด์ƒ์˜ ๊ณต๊ฐœ ๋ชจ๋ธ | | | ๋Œ€๋‡Œ | **๋ฌด๋ฃŒ** (100๋งŒ ํ†ก/์ผ) | 60K TPM/30RPM | ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋น ๋ฅธ | | | ๊ทธ๋กœํฌ | **๋ฌด๋ฃŒ**(30RPM) | 14.4KRPD | ์ดˆ๊ณ ์† ๋ผ๋งˆ/์ ฌ๋งˆ | | | DeepSeek V3.2 | 100๋งŒ ๋‹ฌ๋Ÿฌ๋‹น $0.27/$1.10 | ์—†์Œ | ์ตœ๊ณ ์˜ ๊ฐ€๊ฒฉ/ํ’ˆ์งˆ ์ถ”๋ก  | | | xAI Grok-4 ๊ณ ์† | **100๋งŒ ๋‹ฌ๋Ÿฌ๋‹น $0.20/$0.50** ๐Ÿ†• | ์—†์Œ | ๊ฐ€์žฅ ๋น ๋ฅธ + ๋„๊ตฌ ํ˜ธ์ถœ, ์ดˆ์ € | | | xAI Grok-4(ํ‘œ์ค€) | 100๋งŒ ๋‹ฌ๋Ÿฌ๋‹น $0.20/$1.50 ๐Ÿ†• | ์—†์Œ | xAI์˜ ์ถ”๋ก  ์ฃผ๋ ฅ | | | ๋ฏธ์ŠคํŠธ๋ž„ | ๋ฌด๋ฃŒ ํ‰๊ฐ€ํŒ + ์œ ๋ฃŒ | ์š”๊ธˆ ์ œํ•œ | ์œ ๋Ÿฝ์˜ AI | | | ์˜คํ”ˆ๋ผ์šฐํ„ฐ | ์ข…๋Ÿ‰์ œ | ์—†์Œ | 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ์ด ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. | | **๐Ÿ’ฐ ์ €๋ ดํ•œ** | GLM-5(Z.AI๋ฅผ ํ†ตํ•ด) ๐Ÿ†• | $0.5/1M | ๋งค์ผ ์˜ค์ „ 10์‹œ | 128K ์ถœ๋ ฅ, ์ตœ์‹  ํ”Œ๋ž˜๊ทธ์‹ญ | | | GLM-4.7 | $0.6/1M | ๋งค์ผ ์˜ค์ „ 10์‹œ | ์˜ˆ์‚ฐ ๋ฐฑ์—… | | | ๋ฏธ๋‹ˆ๋งฅ์Šค M2.5 ๐Ÿ†• | $0.3/1M ์ž…๋ ฅ | 5์‹œ๊ฐ„ ๋กค๋ง | ์ถ”๋ก  + ์—์ด์ „ํŠธ ์ž‘์—… | | | ๋ฏธ๋‹ˆ๋งฅ์Šค M2.1 | $0.2/1M | 5์‹œ๊ฐ„ ๋กค๋ง | ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜ | | | Kimi K2.5(๋ฌธ์ƒท API) ๐Ÿ†• | ์ข…๋Ÿ‰์ œ | ์—†์Œ | ์ง์ ‘ Moonshot API ์•ก์„ธ์Šค | | | ํ‚ค๋ฏธ K2 | $9/์›” ์ •์•ก | 1000๋งŒ ํ† ํฐ/์›” | ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„์šฉ | | **๐Ÿ†“ ๋ฌด๋ฃŒ** | ์•„์ดํ”Œ๋กœ์šฐ | **$0** | ๋ฌด์ œํ•œ | 5๊ฐœ ๋ชจ๋ธ ๋ฌด์ œํ•œ | | | ํ€€ | **$0** | ๋ฌด์ œํ•œ | 4๊ฐœ ๋ชจ๋ธ ๋ฌด์ œํ•œ | | | ํ‚ค๋กœ | **$0** | ๋ฌด์ œํ•œ | ํด๋กœ๋“œ ์†Œ๋„คํŠธ/ํ•˜์ด์ฟ (AWS ๋นŒ๋”) | | | LongCat ํ”Œ๋ž˜์‹œ๋ผ์ดํŠธ ๐Ÿ†• | **$0** (5์ฒœ๋งŒ ํ† ํฌ/์ผ ๐Ÿ”ฅ) | 1RPS | ์ง€๊ตฌ์ƒ์—์„œ ๊ฐ€์žฅ ํฐ ๋ฌด๋ฃŒ ํ• ๋‹น๋Ÿ‰ | | | ์ˆ˜๋ถ„ AI ๐Ÿ†• | **$0** (์—ด์‡  ํ•„์š” ์—†์Œ) | ์š”์ฒญ 1๊ฐœ/15์ดˆ | GPT-5, ํด๋กœ๋“œ, DeepSeek, ๋ผ๋งˆ 4 | | | Cloudflare ์ž‘์—…์ž AI ๐Ÿ†• | **$0** (10,000๊ฐœ์˜ ๋‰ด๋Ÿฐ/์ผ) | ~150ํšŒ/์ผ | 50๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ, ๊ธ€๋กœ๋ฒŒ ์—ฃ์ง€ | | | ์Šค์ผ€์ผ์›จ์ด AI ๐Ÿ†• | **$0** (์ด 1๋ฐฑ๋งŒ ํ† ํฐ) | ์š”๊ธˆ ์ œํ•œ | EU/GDPR, Qwen3 235B, ๋ผ๋งˆ 70B | > ๐Ÿ†• **์ƒˆ ๋ชจ๋ธ ์ถ”๊ฐ€๋จ(2026๋…„ 3์›”):** $0.20/$0.50/M์˜ Grok-4 Fast ์ œํ’ˆ๊ตฐ(1143ms๋กœ ๋ฒค์น˜๋งˆํฌ โ€” Gemini 2.5 ํ”Œ๋ž˜์‹œ๋ณด๋‹ค 30% ๋น ๋ฆ„), 128K ์ถœ๋ ฅ์˜ Z.AI๋ฅผ ํ†ตํ•œ GLM-5, MiniMax M2.5 ์ถ”๋ก , DeepSeek V3.2 ์—…๋ฐ์ดํŠธ๋œ ๊ฐ€๊ฒฉ, Moonshot ์ง์ ‘ API๋ฅผ ํ†ตํ•œ Kimi K2.5. **๐Ÿ’ก $0 ์ฝค๋ณด ์Šคํƒ โ€” ์™„์ „ํ•œ ๋ฌด๋ฃŒ ์„ค์ •:** ``` # ๐Ÿ†“ Ultimate Free Stack 2026 โ€” 11 Providers, $0 Forever Kiro (kr/) โ†’ Claude Sonnet/Haiku UNLIMITED Qoder (if/) โ†’ kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED LongCat Lite (lc/) โ†’ LongCat-Flash-Lite โ€” 50M tokens/day ๐Ÿ”ฅ Pollinations (pol/) โ†’ GPT-5, Claude, DeepSeek, Llama 4 โ€” no key needed Qwen (qw/) โ†’ qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next UNLIMITED Gemini (gemini/) โ†’ Gemini 2.5 Flash โ€” 1,500 req/day free API key Cloudflare AI (cf/) โ†’ Llama 70B, Gemma 3, Mistral โ€” 10K Neurons/day Scaleway (scw/) โ†’ Qwen3 235B, Llama 70B โ€” 1M free tokens (EU) Groq (groq/) โ†’ Llama/Gemma ultra-fast โ€” 14.4K req/day NVIDIA NIM (nvidia/) โ†’ 70+ open models โ€” 40 RPM forever Cerebras (cerebras/) โ†’ Llama/Qwen world-fastest โ€” 1M tok/day ``` **๋น„์šฉ์ด 0์ž…๋‹ˆ๋‹ค. ์ฝ”๋”ฉ์„ ์ค‘๋‹จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.** ์ด๋ฅผ ํ•˜๋‚˜์˜ OmniRoute ์ฝค๋ณด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ๋ชจ๋“  ํด๋ฐฑ์ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์ „ํ™˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --- --- ## ๐Ÿ†“ ๋ฌด๋ฃŒ ๋ชจ๋ธ โ€” ์‹ค์ œ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ > ์•„๋ž˜์˜ ๋ชจ๋“  ๋ชจ๋ธ์€ **์‹ ์šฉ์นด๋“œ๊ฐ€ ํ•„์š” ์—†์ด 100% ๋ฌด๋ฃŒ**์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ• ๋‹น๋Ÿ‰์ด ์†Œ์ง„๋˜๋ฉด OmniRoute๋Š” ๋‘˜ ์‚ฌ์ด๋ฅผ ์ž๋™์œผ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ชจ๋‘ ๊ฒฐํ•ฉํ•˜์—ฌ ๊นจ์ง€์ง€ ์•Š๋Š” $0 ์ฝค๋ณด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ### ๐Ÿ”ต CLAUDE ๋ชจ๋ธ(Kiro๋ฅผ ํ†ตํ•ด โ€” AWS Builder ID) | ๋ชจ๋ธ | ์ ‘๋‘์‚ฌ | ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | | ------------------- | ------ | ---------- | --------------------- | | `claude-sonnet-4.5` | `kr/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ์ผ์ผ ํ•œ๋„ ์—†์Œ | | `claude-haiku-4.5` | `kr/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ์ผ์ผ ํ•œ๋„ ์—†์Œ | | `claude-opus-4.6` | `kr/` | **๋ฌด์ œํ•œ** | Kiro๋ฅผ ํ†ตํ•œ ์ตœ์‹  Opus | ### ๐ŸŸข QODER ๋ชจ๋ธ(๋ฌด๋ฃŒ OAuth โ€” ์‹ ์šฉ์นด๋“œ ์—†์Œ) | ๋ชจ๋ธ | ์ ‘๋‘์‚ฌ | ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | | ------------------ | ------ | ---------- | ---------------- | | `kimi-k2-thinking` | `if/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `qwen3-coder-plus` | `if/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `deepseek-r1` | `if/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `minimax-m2.1` | `if/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `kimi-k2` | `if/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | ### ๐ŸŸก QWEN ๋ชจ๋ธ(์žฅ์น˜ ์ฝ”๋“œ ์ธ์ฆ) | ๋ชจ๋ธ | ์ ‘๋‘์‚ฌ | ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | | ------------------- | ------ | ---------- | ----------------- | | `qwen3-coder-plus` | `qw/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `qwen3-coder-flash` | `qw/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `qwen3-coder-next` | `qw/` | **๋ฌด์ œํ•œ** | ๋ณด๊ณ ๋œ ํ•œ๋„ ์—†์Œ | | `vision-model` | `qw/` | **๋ฌด์ œํ•œ** | ๋‹ค์ค‘ ๋ชจ๋“œ(์ด๋ฏธ์ง€) | ### ๐ŸŸฃ GEMINI CLI(Google OAuth) | ๋ชจ๋ธ | ์ ‘๋‘์‚ฌ | ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | | ------------------------ | ------ | ---------------------- | ----------- | | `gemini-3-flash-preview` | `gc/` | **180K ํ†ก/์›”** + 1K/์ผ | ์›”๋ณ„ ์žฌ์„ค์ • | | `gemini-2.5-pro` | `gc/` | 180K/์›”(๊ณต์œ  ํ’€) | ๊ณ ํ’ˆ์งˆ | ### โšซ NVIDIA NIM(๋ฌด๋ฃŒ API ํ‚ค โ€” build.nvidia.com) | ๊ณ„์ธต | ์ผ์ผ ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | ๋ฉ”๋ชจ | | ------------ | -------------- | ---------- | ----------------------------------------------------- | | ๋ฌด๋ฃŒ(๊ฐœ๋ฐœ์ž) | ํ† ํฐ ํ•œ๋„ ์—†์Œ | **~40RPM** | 70๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ; 2025๋…„ ์ค‘๋ฐ˜ ์ˆœ์ˆ˜ ๋น„์œจ ์ œํ•œ์œผ๋กœ ์ „ํ™˜ | ์ธ๊ธฐ ์žˆ๋Š” ๋ฌด๋ฃŒ ๋ชจ๋ธ: `moonshotai/kimi-k2.5`(Kimi K2.5), `z-ai/glm4.7`(GLM 4.7), `deepseek-ai/deepseek-v3.2`(DeepSeek V3.2), `nvidia/llama-3.3-70b-instruct`, `deepseek/deepseek-r1` ### โšช CEREBRAS(๋ฌด๋ฃŒ API ํ‚ค โ€” inference.cerebras.ai) | ๊ณ„์ธต | ์ผ์ผ ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | ๋ฉ”๋ชจ | | ---- | ----------------- | ------------- | ---------------------------------------- | | ๋ฌด๋ฃŒ | **100๋งŒ ํ† ํฐ/์ผ** | 60K TPM/30RPM | ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋น ๋ฅธ LLM ์ถ”๋ก ; ๋งค์ผ ์žฌ์„ค์ • | ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ: `llama-3.3-70b`, `llama-3.1-8b`, `deepseek-r1-distill-llama-70b` ### ๐Ÿ”ด GROQ(๋ฌด๋ฃŒ API ํ‚ค โ€” console.groq.com) | ๊ณ„์ธต | ์ผ์ผ ํ•œ๋„ | ๋น„์œจ ์ œํ•œ | ๋ฉ”๋ชจ | | ---- | ------------- | ------------ | -------------------------------------- | | ๋ฌด๋ฃŒ | **14,400RPD** | ๋ชจ๋ธ๋‹น 30RPM | ์‹ ์šฉ์นด๋“œ ์—†์Œ; 429 ํ•œ๋„, ์ฒญ๊ตฌ๋˜์ง€ ์•Š์Œ | ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ: `llama-3.3-70b-versatile`, `gemma2-9b-it`, `mixtral-8x7b`, `whisper-large-v3` ### ๐Ÿ”ด LONGCAT AI(๋ฌด๋ฃŒ API ํ‚ค โ€” longcat.chat) ๐Ÿ†• | ๋ชจ๋ธ | ์ ‘๋‘์‚ฌ | ์ผ์ผ ๋ฌด๋ฃŒ ํ• ๋‹น๋Ÿ‰ | ๋ฉ”๋ชจ | | ----------------------------- | ------ | ------------------- | ---------------------------- | | `LongCat-Flash-Lite` | `lc/` | **5์ฒœ๋งŒ ํ† ํฐ** ํ’ˆ๋ชฉ | ์‚ฌ์ƒ ์ตœ๋Œ€ ๊ทœ๋ชจ์˜ ๋ฌด๋ฃŒ ํ• ๋‹น๋Ÿ‰ | | `LongCat-Flash-Chat` | `lc/` | 50๋งŒ ํ† ํฐ | ๋‹ค๋‹จ๊ณ„ ์ฑ„ํŒ… | | `LongCat-Flash-Thinking` | `lc/` | 50๋งŒ ํ† ํฐ | ์ถ”๋ก  / CoT | | `LongCat-Flash-Thinking-2601` | `lc/` | 50๋งŒ ํ† ํฐ | 2026๋…„ 1์›” ๋ฒ„์ „ | | `LongCat-Flash-Omni-2603` | `lc/` | 50๋งŒ ํ† ํฐ | ๋‹ค์ค‘ ๋ชจ๋“œ | > ๊ณต๊ฐœ ๋ฒ ํƒ€ ๋ฒ„์ „์—์„œ๋Š” 100% ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ์ด๋‚˜ ์ „ํ™”๋กœ [longcat.chat](https://longcat.chat)์— ๊ฐ€์ž…ํ•˜์„ธ์š”. ๋งค์ผ 00:00 UTC์— ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ### ๐ŸŸข POLLINATIONS AI(API ํ‚ค ํ•„์š” ์—†์Œ) ๐Ÿ†• | ๋ชจ๋ธ | ์ ‘๋‘์‚ฌ | ๋น„์œจ ์ œํ•œ | ๋’ค์— ๊ณต๊ธ‰์ž | | ---------- | ------ | ------------- | -------------------- | | `openai` | `pol/` | ์š”์ฒญ 1๊ฐœ/15์ดˆ | GPT-5 | | `claude` | `pol/` | ์š”์ฒญ 1๊ฐœ/15์ดˆ | ์ธ๋ฅ˜ํ•™ ํด๋กœ๋“œ | | `gemini` | `pol/` | ์š”์ฒญ 1๊ฐœ/15์ดˆ | ๊ตฌ๊ธ€ ์ œ๋ฏธ๋‹ˆ | | `deepseek` | `pol/` | ์š”์ฒญ 1๊ฐœ/15์ดˆ | DeepSeek V3 | | `llama` | `pol/` | ์š”์ฒญ 1๊ฐœ/15์ดˆ | ๋ฉ”ํƒ€ ๋ผ๋งˆ 4 ์Šค์นด์šฐํŠธ | | `mistral` | `pol/` | ์š”์ฒญ 1๊ฐœ/15์ดˆ | ๋ฏธ์ŠคํŠธ๋ž„ AI | > โœจ **๋งˆ์ฐฐ ์—†์Œ:** ๊ฐ€์ž…์ด๋‚˜ API ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋นˆ ํ‚ค ํ•„๋“œ๊ฐ€ ์žˆ๋Š” Pollinations ๊ณต๊ธ‰์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ฆ‰์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ### ๐ŸŸ  CLOUDFLARE WORKERS AI(๋ฌด๋ฃŒ API ํ‚ค โ€” cloudflare.com) ๐Ÿ†• | ๊ณ„์ธต | ์ผ์ผ ๋‰ด๋Ÿฐ | ๋™๋“ฑํ•œ ์‚ฌ์šฉ๋ฒ• | ๋ฉ”๋ชจ | | ---- | ---------- | ----------------------------------------- | ----------------------------- | | ๋ฌด๋ฃŒ | **10,000** | ~150 LLM ์‘๋‹ต / 500์ดˆ ์˜ค๋””์˜ค / 15K ์ž„๋ฒ ๋“œ | ๊ธ€๋กœ๋ฒŒ ์—์ง€, 50๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ | ์ธ๊ธฐ ์žˆ๋Š” ๋ฌด๋ฃŒ ๋ชจ๋ธ: `@cf/meta/llama-3.3-70b-instruct`, `@cf/google/gemma-3-12b-it`, `@cf/openai/whisper-large-v3-turbo`(๋ฌด๋ฃŒ ์˜ค๋””์˜ค!), `@cf/qwen/qwen2.5-coder-15b-instruct` > [dash.cloudflare.com](https://dash.cloudflare.com)์˜ API ํ† ํฐ + ๊ณ„์ • ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž ์„ค์ •์— ๊ณ„์ • ID๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ### ๐ŸŸฃ SCALEWAY AI(100๋งŒ ๊ฐœ์˜ ๋ฌด๋ฃŒ ํ† ํฐ โ€” scaleway.com) ๐Ÿ†• | ๊ณ„์ธต | ๋ฌด๋ฃŒ ํ• ๋‹น๋Ÿ‰ | ์œ„์น˜ | ๋ฉ”๋ชจ | | ---- | ------------------- | ----------- | ------------------------------------------ | | ๋ฌด๋ฃŒ | **100๋งŒ ๊ฐœ์˜ ํ† ํฐ** | ๐Ÿ‡ซ๐Ÿ‡ท ํŒŒ๋ฆฌ, EU | ํ•œ๋„ ๋‚ด์—์„œ๋Š” ์‹ ์šฉ์นด๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค | ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ: `qwen3-235b-a22b-instruct-2507` (Qwen3 235B!), `llama-3.1-70b-instruct`, `mistral-small-3.2-24b-instruct-2506`, `deepseek-v3-0324` > EU/GDPR์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. [console.scaleway.com](https://console.scaleway.com)์—์„œ API ํ‚ค๋ฅผ ๋ฐ›์œผ์„ธ์š”. > **๐Ÿ’ก ์ตœ๊ณ ์˜ ๋ฌด๋ฃŒ ์Šคํƒ(11๊ฐœ ์ œ๊ณต์ž, ์˜์›ํžˆ $0):** > > ``` > Kiro (kr/) โ†’ Claude Sonnet/Haiku UNLIMITED > Qoder (if/) โ†’ kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED > LongCat Lite (lc/) โ†’ LongCat-Flash-Lite โ€” 50M tokens/day ๐Ÿ”ฅ > Pollinations (pol/) โ†’ GPT-5, Claude, DeepSeek, Llama 4 โ€” no key needed > Qwen (qw/) โ†’ qwen3-coder models UNLIMITED > Gemini (gemini/) โ†’ Gemini 2.5 Flash โ€” 1,500 req/day free > Cloudflare AI (cf/) โ†’ 50+ models โ€” 10K Neurons/day > Scaleway (scw/) โ†’ Qwen3 235B, Llama 70B โ€” 1M free tokens (EU) > Groq (groq/) โ†’ Llama/Gemma โ€” 14.4K req/day ultra-fast > NVIDIA NIM (nvidia/) โ†’ 70+ open models โ€” 40 RPM forever > Cerebras (cerebras/) โ†’ Llama/Qwen world-fastest โ€” 1M tok/day > ``` ## ๐ŸŽ™๏ธ ๋ฌด๋ฃŒ ์ „์‚ฌ ์ฝค๋ณด > **$0**์— ๋ชจ๋“  ์˜ค๋””์˜ค/๋น„๋””์˜ค ์ „์‚ฌ โ€” Deepgram์ด ๋ฌด๋ฃŒ๋กœ 200๋‹ฌ๋Ÿฌ, AssemblyAI๊ฐ€ 50๋‹ฌ๋Ÿฌ๋กœ ๋Œ€์ฒด, Groq Whisper๋ฅผ ๋ฌด์ œํ•œ ๊ธด๊ธ‰ ๋ฐฑ์—…์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. | ๊ณต๊ธ‰์ž | ๋ฌด๋ฃŒ ํฌ๋ ˆ๋”ง | ์ตœ๊ณ ์˜ ๋ชจ๋ธ | ๋น„์œจ ์ œํ•œ | | ----------------- | -------------------- | ------------------------------------------ | ----------------------------------- | | ๐ŸŸข **๋”ฅ๊ทธ๋žจ** | **$200 ๋ฌด๋ฃŒ** (๊ฐ€์ž…) | `nova-3` โ€” ์ตœ๊ณ ์˜ ์ •ํ™•์„ฑ, 30๊ฐœ ์ด์ƒ์˜ ์–ธ์–ด | ๋ฌด๋ฃŒ ํฌ๋ ˆ๋”ง์—๋Š” RPM ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค | | ๐Ÿ”ต **AssemblyAI** | **$50 ๋ฌด๋ฃŒ**(๊ฐ€์ž…) | `universal-3-pro` โ€” ์žฅ, ๊ฐ์ •, PII | ๋ฌด๋ฃŒ ํฌ๋ ˆ๋”ง์—๋Š” RPM ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค | | ๐Ÿ”ด **๊ทธ๋กœํฌ** | **์˜์›ํžˆ ๋ฌด๋ฃŒ** | `whisper-large-v3` โ€” OpenAI ์†์‚ญ์ž„ | 30RPM(์†๋„ ์ œํ•œ) | **`/dashboard/combos`์˜ ์ œ์•ˆ๋œ ์ฝค๋ณด:** ``` Name: free-transcription Strategy: Priority Nodes: [1] deepgram/nova-3 โ†’ uses $200 free first [2] assemblyai/universal-3-pro โ†’ fallback when Deepgram credits run out [3] groq/whisper-large-v3 โ†’ free forever, emergency fallback ``` ๊ทธ๋Ÿฐ ๋‹ค์Œ `/dashboard/media` โ†’ **๊ธฐ๋ก** ํƒญ์—์„œ ์˜ค๋””์˜ค ๋˜๋Š” ๋น„๋””์˜ค ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ  โ†’ ์ฝค๋ณด ์—”๋“œํฌ์ธํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  โ†’ ์ง€์›๋˜๋Š” ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ## ๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ OmniRoute v2.0์€ ๋‹จ์ˆœํ•œ ๋ฆด๋ ˆ์ด ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹Œ ์šด์˜ ํ”Œ๋žซํผ์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ### ๐Ÿ†• ์‹ ๊ทœ โ€” ClawRouter์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๊ฐœ์„  ์‚ฌํ•ญ(2026๋…„ 3์›”) | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | -------------------------------- | ---------------------------------------------------------------------------------------------------- | | โšก **Grok-4 ๋น ๋ฅธ ์ œํ’ˆ๊ตฐ** | $0.20/$0.50/M์˜ xAI ๋ชจ๋ธ โ€” ๋ฒค์น˜๋งˆํฌ 1143ms(Gemini 2.5 Flash๋ณด๋‹ค 30% ๋น ๋ฆ„) | | ๐Ÿง  **Z.AI๋ฅผ ํ†ตํ•œ GLM-5** | 128K ์ถœ๋ ฅ ์ปจํ…์ŠคํŠธ, $0.5/1M โ€” GLM ์ œํ’ˆ๊ตฐ์˜ ์ตœ์‹  ํ”Œ๋ž˜๊ทธ์‹ญ | | ๐Ÿ”ฎ **๋ฏธ๋‹ˆ๋งฅ์Šค M2.5** | $0.30/1M์˜ ์ถ”๋ก  + ์—์ด์ „ํŠธ ์ž‘์—… โ€” M2.1์—์„œ ๋Œ€ํญ ์—…๊ทธ๋ ˆ์ด๋“œ | | ๐ŸŽฏ **๋ชจ๋ธ๋ณ„ toolCalling ํ”Œ๋ž˜๊ทธ** | ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๋ชจ๋ธ๋ณ„ `toolCalling: true/false` โ€” AutoCombo๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ชจ๋ธ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. | | ๐ŸŒ **๋‹ค๊ตญ์–ด ์˜๋„ ๊ฐ์ง€** | AutoCombo ์ฑ„์ ์˜ PT/ZH/ES/AR ํ‚ค์›Œ๋“œ โ€” ์˜์–ด๊ฐ€ ์•„๋‹Œ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ๋ชจ๋ธ ์„ ํƒ | | ๐Ÿ“Š **๋ฒค์น˜๋งˆํฌ ๊ธฐ๋ฐ˜ ํด๋ฐฑ** | ๋ผ์ด๋ธŒ ์š”์ฒญ์˜ ์‹ค์ œ p95 ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ์ฝค๋ณด ์ ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AutoCombo๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค | | ๐Ÿ” **์ค‘๋ณต ์ œ๊ฑฐ ์š”์ฒญ** | ์ฝ˜ํ…์ธ  ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ค‘๋ณต ์ œ๊ฑฐ ์ฐฝ โ€” ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์•ˆ์ „, ์ค‘๋ณต ์ฒญ๊ตฌ ๋ฐฉ์ง€ | | ๐Ÿ”Œ **ํ”Œ๋Ÿฌ๊ทธํ˜• ๋ผ์šฐํ„ฐ ์ „๋žต** | ํ™•์žฅ ๊ฐ€๋Šฅํ•œ `RouterStrategy` ์ธํ„ฐํŽ˜์ด์Šค โ€” ์‚ฌ์šฉ์ž ์ •์˜ ๋ผ์šฐํŒ… ๋…ผ๋ฆฌ๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ถ”๊ฐ€ | ### ๐Ÿš€ ์ด์ „ v2.0.9+ โ€” ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ, CLI ์ง€๋ฌธ ๋ฐ ACP | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ๐ŸŽฎ **๋ชจ๋ธ ๋†€์ดํ„ฐ** | ๋ชจ๋“  ๋ชจ๋ธ์„ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์‹œ๋ณด๋“œ ํŽ˜์ด์ง€ โ€” ์ œ๊ณต์ž/๋ชจ๋ธ/์—”๋“œํฌ์ธํŠธ ์„ ํƒ๊ธฐ, ๋ชจ๋‚˜์ฝ” ํŽธ์ง‘๊ธฐ, ์ŠคํŠธ๋ฆฌ๋ฐ, ์ค‘๋‹จ, ํƒ€์ด๋ฐ | | ๐Ÿ” **CLI ์ง€๋ฌธ ๋งค์นญ** | ๊ธฐ๋ณธ CLI ์„œ๋ช…๊ณผ ์ผ์น˜ํ•˜๋„๋ก ๊ณต๊ธ‰์ž๋ณ„ ํ—ค๋”/๋ณธ๋ฌธ ์ˆœ์„œ - ์„ค์ • > ๋ณด์•ˆ์—์„œ ๊ณต๊ธ‰์ž๋ณ„๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. **ํ”„๋ก์‹œ IP๋Š” ๋ณด์กด๋ฉ๋‹ˆ๋‹ค** | | ๐Ÿค **ACP ์ง€์›(์—์ด์ „ํŠธ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœํ† ์ฝœ)** | CLI ์—์ด์ „ํŠธ ๊ฒ€์ƒ‰(Codex, Claude, Goose, Gemini CLI, OpenClaw + 9๊ฐœ ์ด์ƒ), ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ๊ธฐ, `/api/acp/agents` ์—”๋“œํฌ์ธํŠธ | | ๐Ÿค– **ACP ์ƒ๋‹ด์› ๋Œ€์‹œ๋ณด๋“œ** | ๋””๋ฒ„๊ทธ โ€บ ์—์ด์ „ํŠธ ํŽ˜์ด์ง€ โ€” ๋ชจ๋“  CLI ๋„๊ตฌ์— ๋Œ€ํ•œ ์„ค์น˜ ์ƒํƒœ, ๋ฒ„์ „, ์‚ฌ์šฉ์ž ์ง€์ • ์—์ด์ „ํŠธ ์–‘์‹์ด ํฌํ•จ๋œ 14๊ฐœ ์—์ด์ „ํŠธ์˜ ๊ทธ๋ฆฌ๋“œ์ž…๋‹ˆ๋‹ค. **OpenCode** ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ์„ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” "opencode.json ๋‹ค์šด๋กœ๋“œ" ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. | | ๐Ÿ”ง **์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋ธ `apiFormat` ๋ผ์šฐํŒ…** | `apiFormat: "responses"`์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋ธ์€ ์ด์ œ Responses API ๋ฒˆ์—ญ๊ธฐ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค. | | ๐Ÿข **Codex ์ž‘์—… ๊ณต๊ฐ„ ๊ฒฉ๋ฆฌ** | ์ด๋ฉ”์ผ๋‹น ์—ฌ๋Ÿฌ Codex ์ž‘์—… ๊ณต๊ฐ„ - OAuth๋Š” ์ž‘์—… ๊ณต๊ฐ„ ID๋กœ ์—ฐ๊ฒฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค | | ๐Ÿ”„ **์ „์ž ์ž๋™ ์—…๋ฐ์ดํŠธ** | ๋ฐ์Šคํฌํƒ‘ ์•ฑ์—์„œ ์—…๋ฐ์ดํŠธ ํ™•์ธ + ์žฌ์‹œ์ž‘ ์‹œ ์ž๋™ ์„ค์น˜ | ### ๐Ÿค– ์—์ด์ „ํŠธ ๋ฐ ํ”„๋กœํ† ์ฝœ ์šด์˜(v2.0) | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ---------------------------------- | ------------------------------------------------------------------------------------------------------ | | ๐Ÿ”ง **MCP ์„œ๋ฒ„(16๊ฐœ ๋„๊ตฌ)** | 3๊ฐ€์ง€ ์ „์†ก์„ ํ†ตํ•œ IDE/์—์ด์ „ํŠธ ๋„๊ตฌ: stdio, SSE(`/api/mcp/sse`), ์ŠคํŠธ๋ฆฌ๋ฐ ๊ฐ€๋Šฅ HTTP(`/api/mcp/stream`) | | ๐Ÿค **A2A ์„œ๋ฒ„(JSON-RPC + SSE)** | ๋™๊ธฐํ™” ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ๋ฆ„์„ ํ†ตํ•œ ์—์ด์ „ํŠธ ๊ฐ„ ์ž‘์—… ์‹คํ–‰ | | ๐Ÿงญ **ํ†ตํ•ฉ ์—”๋“œํฌ์ธํŠธ ํŽ˜์ด์ง€** | ์—”๋“œํฌ์ธํŠธ ํ”„๋ก์‹œ, MCP, A2A ๋ฐ API ์—”๋“œํฌ์ธํŠธ ํƒญ์ด ์žˆ๋Š” ํƒญ ๊ด€๋ฆฌ ํŽ˜์ด์ง€ | | ๐ŸŽš๏ธ **์„œ๋น„์Šค ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ† ๊ธ€** | ์„ค์ • ์ง€์†์„ฑ์„ ๊ฐ–์ถ˜ MCP ๋ฐ A2A์šฉ ON/OFF ์Šค์œ„์น˜(๊ธฐ๋ณธ๊ฐ’: OFF) | | ๐Ÿ›ฐ๏ธ **MCP ๋Ÿฐํƒ€์ž„ ํ•˜ํŠธ๋น„ํŠธ** | ์‹ค์ œ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ(pid, ๊ฐ€๋™ ์‹œ๊ฐ„, ํ•˜ํŠธ๋น„ํŠธ ๊ธฐ๊ฐ„, ์ „์†ก, ๋ฒ”์œ„ ๋ชจ๋“œ) | | ๐Ÿ“‹ **MCP ๊ฐ์‚ฌ ์ถ”์ ** | ์„ฑ๊ณต/์‹คํŒจ ๋ฐ ์ฃผ์š” ์†์„ฑ์ด ํฌํ•จ๋œ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅํ•œ ๊ฐ์‚ฌ ๋กœ๊ทธ | | ๐Ÿ” **MCP ๋ฒ”์œ„ ์ ์šฉ** | ์ œ์–ด๋œ ๋„๊ตฌ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ 9๊ฐœ์˜ ์„ธ๋ถ€์ ์ธ ๋ฒ”์œ„ ๊ถŒํ•œ | | ๐Ÿ“ก **A2A ์ž‘์—… ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ** | ์ž‘์—… ๋‚˜์—ด/ํ•„ํ„ฐ๋ง, ์ด๋ฒคํŠธ/์•„ํ‹ฐํŒฉํŠธ ๊ฒ€์‚ฌ, ์‹คํ–‰ ์ค‘์ธ ์ž‘์—… ์ทจ์†Œ | | ๐Ÿ“‹ **์—์ด์ „ํŠธ ์นด๋“œ ๊ฒ€์ƒ‰** | ํด๋ผ์ด์–ธํŠธ ์ž๋™ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ `/.well-known/agent.json` | | ๐Ÿงช **ํ”„๋กœํ† ์ฝœ E2E ํ…Œ์ŠคํŠธ ํ•˜๋„ค์Šค** | `test:protocols:e2e`์˜ ์‹ค์ œ MCP SDK + A2A ํด๋ผ์ด์–ธํŠธ ํ๋ฆ„ | | โš™๏ธ **์ž‘๋™ ์ œ์–ด** | ํ•˜๋‚˜์˜ ์ œ์–ด ํ‘œ๋ฉด์—์„œ ์ฝค๋ณด ์ „ํ™˜, ํƒ„๋ ฅ์„ฑ ํ”„๋กœํ•„ ์ ์šฉ, ์ฐจ๋‹จ๊ธฐ ์žฌ์„ค์ • | ### ๐Ÿง  ๋ผ์šฐํŒ… ๋ฐ ์ธํ…”๋ฆฌ์ „์Šค | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ------------------------------ | ----------------------------------------------------------------- | | ๐ŸŽฏ **์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ** | ์ž๋™ ๊ฒฝ๋กœ: ๊ตฌ๋… โ†’ API ํ‚ค โ†’ ์ €๋ ดํ•œ โ†’ ๋ฌด๋ฃŒ | | ๐Ÿ“Š **์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ** | ๋ผ์ด๋ธŒ ํ† ํฐ ์ˆ˜ + ๊ณต๊ธ‰์ž๋ณ„ ์นด์šดํŠธ๋‹ค์šด ์žฌ์„ค์ • | | ๐Ÿ”„ **ํ˜•์‹ ๋ฒˆ์—ญ** | OpenAI โ‡” Claude โ‡” Gemini โ‡” ์Šคํ‚ค๋งˆ ์•ˆ์ „ ๋ณ€ํ™˜์„ ํ†ตํ•œ ์‘๋‹ต | | ๐Ÿ‘ฅ **๋‹ค์ค‘ ๊ณ„์ • ์ง€์›** | ์ง€๋Šฅ์ ์ธ ์„ ํƒ์„ ํ†ตํ•ด ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • | | ๐Ÿ”„ **์ž๋™ ํ† ํฐ ์ƒˆ๋กœ๊ณ ์นจ** | ์žฌ์‹œ๋„ ์‹œ OAuth ํ† ํฐ์ด ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค. | | ๐ŸŽจ **๋งž์ถคํ˜• ์ฝค๋ณด** | 6๊ฐ€์ง€ ๋ฐธ๋Ÿฐ์‹ฑ ์ „๋žต + ํด๋ฐฑ ์ฒด์ธ ์ œ์–ด | | ๐ŸŒ **์™€์ผ๋“œ์นด๋“œ ๋ผ์šฐํ„ฐ** | `provider/*` ๋™์  ๋ผ์šฐํŒ… | | ๐Ÿง  **์‚ฌ๊ณ  ์˜ˆ์‚ฐ ํ†ต์ œ** | ํ†ต๊ณผ, ์ž๋™, ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ ์ ์‘ํ˜• ์ถ”๋ก  ์ œํ•œ | | ๐Ÿ”€ **๋ชจ๋ธ ๋ณ„์นญ** | ๋‚ด์žฅ + ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋ธ ์•จ๋ฆฌ์–ด์‹ฑ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์•ˆ์ „ | | โšก **๋ฐฐ๊ฒฝ ์ €ํ•˜** | ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ €๋ ดํ•œ ๋ชจ๋ธ๋กœ ๋ผ์šฐํŒ… | | ๐Ÿงช **์ž‘์—… ์ธ์‹ ์Šค๋งˆํŠธ ๋ผ์šฐํŒ…** | ์ฝ˜ํ…์ธ  ์œ ํ˜•๋ณ„ ๋ชจ๋ธ ์ž๋™ ์„ ํƒ(์ฝ”๋”ฉ/๋น„์ „/๋ถ„์„/์š”์•ฝ) | | ๐Ÿ’ฌ **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์‚ฝ์ž…** | ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ๋˜๋Š” ๊ธ€๋กœ๋ฒŒ ํ–‰๋™ ์ œ์–ด | | ๐Ÿ“„ **์‘๋‹ต API ํ˜ธํ™˜์„ฑ** | Codex ๋ฐ ๊ณ ๊ธ‰ ์—์ด์ „ํŠธ ์ž‘์—… ํ๋ฆ„์— ๋Œ€ํ•œ ์ „์ฒด `/v1/responses` ์ง€์› | ### ๐ŸŽต ๋‹ค์ค‘ ๋ชจ๋“œ API | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ๐Ÿ–ผ๏ธ **์ด๋ฏธ์ง€ ์ƒ์„ฑ** | `/v1/images/generations`(ํด๋ผ์šฐ๋“œ ๋ฐ ๋กœ์ปฌ ๋ฐฑ์—”๋“œ ํฌํ•จ) | | ๐Ÿ“ **์ž„๋ฒ ๋”ฉ** | ๊ฒ€์ƒ‰ ๋ฐ RAG ํŒŒ์ดํ”„๋ผ์ธ์šฉ `/v1/embeddings` | | ๐ŸŽค **์˜ค๋””์˜ค ์ „์‚ฌ** | `/v1/audio/transcriptions` โ€” 7๊ฐœ ๊ณต๊ธ‰์ž(Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), ์ž๋™ ์–ธ์–ด ๊ฐ์ง€, MP4/MP3/WAV ์ง€์› | | ๐Ÿ”Š **ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜** | `/v1/audio/speech` โ€” ์˜ฌ๋ฐ”๋ฅธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š” 10๊ฐœ ๊ณต๊ธ‰์ž(ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) | | ๐ŸŽฌ **๋น„๋””์˜ค ์ƒ์„ฑ** | `/v1/videos/generations`(ComfyUI + SD WebUI ์›Œํฌํ”Œ๋กœ) | | ๐ŸŽต **์Œ์•… ์„ธ๋Œ€** | `/v1/music/generations`(ComfyUI ์›Œํฌํ”Œ๋กœ) | | ๐Ÿ›ก๏ธ **์กฐ์ •** | `/v1/moderations` ์•ˆ์ „ ํ™•์ธ | | ๐Ÿ”€ **์žฌ์ˆœ์œ„** | ๊ด€๋ จ์„ฑ ์ ์ˆ˜๋ฅผ ์œ„ํ•œ `/v1/rerank` | | ๐Ÿ” **์›น ๊ฒ€์ƒ‰** ๐Ÿ†• | `/v1/search` โ€” 5๊ฐœ ๊ณต๊ธ‰์ž(Serper, Brave, Perplexity, Exa, Tavily), ์›” 6,500๊ฐœ ์ด์ƒ์˜ ๋ฌด๋ฃŒ, ์ž๋™ ์žฅ์•  ์กฐ์น˜, ์บ์‹œ | ### ๐Ÿ›ก๏ธ ํƒ„๋ ฅ์„ฑ, ๋ณด์•ˆ ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ------------------------------ | --------------------------------------------------------------------------- | | ๐Ÿ”Œ **ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** | ์ž„๊ณ„๊ฐ’ ์ œ์–ด๋ฅผ ํ†ตํ•œ ๋ชจ๋ธ๋ณ„ ํŠธ๋ฆฝ/๋ณต๊ตฌ | | ๐ŸŽฏ **์—”๋“œํฌ์ธํŠธ ์ธ์‹ ๋ชจ๋ธ** | ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋ธ์€ ์ง€์›๋˜๋Š” ์—”๋“œํฌ์ธํŠธ + API ํ˜•์‹์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค | | ๐Ÿ›ก๏ธ **์ฒœ๋‘ฅ ๋ฐฉ์ง€ ๋ฌด๋ฆฌ** | ์žฌ์‹œ๋„/๋น„์œจ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฎคํ…์Šค + ์„ธ๋งˆํฌ์–ด ๋ณดํ˜ธ | | ๐Ÿง  **์˜๋ฏธ + ์„œ๋ช… ์บ์‹œ** | ๋‘ ๊ฐœ์˜ ์บ์‹œ ๋ ˆ์ด์–ด๋กœ ๋น„์šฉ/์ง€์—ฐ ์‹œ๊ฐ„ ๊ฐ์†Œ | | โšก **๋ฉฑ๋“ฑ์„ฑ ์š”์ฒญ** | ์ค‘๋ณต ๋ณดํ˜ธ ์ฐฝ | | ๐Ÿ”’ **TLS ์ง€๋ฌธ ์Šคํ‘ธํ•‘** | ๋ธŒ๋ผ์šฐ์ €์™€ ์œ ์‚ฌํ•œ TLS ์ง€๋ฌธ โ€” **๋ด‡ ๊ฐ์ง€ ๋ฐ ๊ณ„์ • ํ”Œ๋ž˜๊ทธ ์ง€์ • ๊ฐ์†Œ** | | ๐Ÿ” **CLI ์ง€๋ฌธ ๋งค์นญ** | ๊ธฐ๋ณธ CLI ์š”์ฒญ ์„œ๋ช…๊ณผ ์ผ์น˜ โ€” **ํ”„๋ก์‹œ IP๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ๊ธˆ์ง€ ์œ„ํ—˜์„ ์ค„์ž…๋‹ˆ๋‹ค** | | ๐ŸŒ **IP ํ•„ํ„ฐ๋ง** | ๋…ธ์ถœ๋œ ๋ฐฐํฌ์— ๋Œ€ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก/์ฐจ๋‹จ ๋ชฉ๋ก ์ œ์–ด | | ๐Ÿ“Š **ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ** | ์ง€์†์„ฑ์„ ํ†ตํ•ด ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ „์—ญ/๊ณต๊ธ‰์ž ์ˆ˜์ค€ ์ œํ•œ | | ๐Ÿ”‘ **API ํ‚ค ๊ด€๋ฆฌ + ๋ฒ”์œ„ ์ง€์ •** | ๋ณด์•ˆ ํ‚ค ๋ฐœ๊ธ‰/๊ต์ฒด ๋ฐ ๋ชจ๋ธ/๊ณต๊ธ‰์ž ์ œ์–ด | | ๐Ÿ›ก๏ธ **๋ณดํ˜ธ๋˜๋Š” `/models`** | ๋ชจ๋ธ ์นดํƒˆ๋กœ๊ทธ์— ๋Œ€ํ•œ ์„ ํƒ์  ์ธ์ฆ ๊ฒŒ์ดํŒ… ๋ฐ ๊ณต๊ธ‰์ž ์ˆจ๊ธฐ๊ธฐ | ### ๐Ÿ“Š ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ๋ถ„์„ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | -------------------------------- | ---------------------------------------------------- | | ๐Ÿ“ **์š”์ฒญ + ํ”„๋ก์‹œ ๋กœ๊น…** | ์ „์ฒด ์š”์ฒญ/์‘๋‹ต ๋ฐ ํ”„๋ก์‹œ ๋กœ๊น… | | ๐Ÿ“‰ **Streamed Detailed Logs** ๐Ÿ†• | Reconstructs SSE payload streams cleanly into the UI | | ๐Ÿ“‹ **ํ†ตํ•ฉ ๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ** | ํ•œ ํŽ˜์ด์ง€์—์„œ ์š”์ฒญ, ํ”„๋ก์‹œ, ๊ฐ์‚ฌ ๋ฐ ์ฝ˜์†” ๋ณด๊ธฐ | | ๐Ÿ” **์›๊ฒฉ ์ธก์ • ์š”์ฒญ** | p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ์š”์ฒญ ์ถ”์  | | ๐Ÿฅ **๊ฑด๊ฐ• ๋Œ€์‹œ๋ณด๋“œ** | ๊ฐ€๋™ ์‹œ๊ฐ„, ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ, ์ž ๊ธˆ, ์บ์‹œ ํ†ต๊ณ„ | | ๐Ÿ’ฐ **๋น„์šฉ ์ถ”์ ** | ์˜ˆ์‚ฐ ์ œ์–ด ๋ฐ ๋ชจ๋ธ๋ณ„ ๊ฐ€๊ฒฉ ๊ฐ€์‹œ์„ฑ | | ๐Ÿ“ˆ **๋ถ„์„ ์‹œ๊ฐํ™”** | ๋ชจ๋ธ/๊ณต๊ธ‰์ž ์‚ฌ์šฉ๋Ÿ‰ ํ†ต์ฐฐ๋ ฅ ๋ฐ ์ถ”์„ธ ๋ณด๊ธฐ | | ๐Ÿงช **ํ‰๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ** | ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋งค์น˜ ์ „๋žต์„ ์‚ฌ์šฉํ•œ ๊ณจ๋“  ์„ธํŠธ ํ…Œ์ŠคํŠธ | ### โ˜๏ธ ๋ฐฐํฌ ๋ฐ ํ”Œ๋žซํผ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ---------------------------------- | --------------------------------------------------------- | ------------------ | | ๐ŸŒ **์–ด๋””์„œ๋‚˜ ๋ฐฐํฌ** | ๋กœ์ปฌํ˜ธ์ŠคํŠธ, VPS, Docker, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ | | ๐Ÿ’พ **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”** | ํด๋ผ์šฐ๋“œ ์ž‘์—…์ž๋ฅผ ํ†ตํ•œ ๊ตฌ์„ฑ ๋™๊ธฐํ™” | | ๐Ÿ”„ **๋ฐฑ์—…/๋ณต์›** | ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์žฌํ•ด ๋ณต๊ตฌ ํ๋ฆ„ | | ๐Ÿง™ **์˜จ๋ณด๋”ฉ ๋งˆ๋ฒ•์‚ฌ** | ์ฒซ ์‹คํ–‰ ์•ˆ๋‚ด ์„ค์ • | | ๐Ÿ”ง **CLI ๋„๊ตฌ ๋Œ€์‹œ๋ณด๋“œ** | ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋”ฉ ๋„๊ตฌ๋ฅผ ์œ„ํ•œ ์›ํด๋ฆญ ์„ค์ • | | ๐ŸŽฎ **๋ชจ๋ธ ๋†€์ดํ„ฐ** | ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๊ณต๊ธ‰์ž/๋ชจ๋ธ/์—”๋“œํฌ์ธํŠธ ํ…Œ์ŠคํŠธ | | ๐Ÿ” **CLI ์ง€๋ฌธ ํ† ๊ธ€** | ์„ค์ • > ๋ณด์•ˆ | ๊ณต๊ธ‰์ž๋ณ„ ์ง€๋ฌธ ์ผ์น˜ | | ๐ŸŒ **i18n(30๊ฐœ ์–ธ์–ด)** | RTL ์ ์šฉ ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ๋Œ€์‹œ๋ณด๋“œ + ๋ฌธ์„œ ์–ธ์–ด ์ง€์› | | ๐Ÿงน **๋ชจ๋“  ๋ชจ๋ธ ์ง€์šฐ๊ธฐ** | ๊ณต๊ธ‰์ž ์„ธ๋ถ€์ •๋ณด์—์„œ ์›ํด๋ฆญ ๋ชจ๋ธ ๋ชฉ๋ก ์‚ญ์ œ | | ๐Ÿ‘๏ธ **Sidebar Controls** ๐Ÿ†• | Hide components and integrations from Appearance Settings | | ๐Ÿ“‹ **์ด์Šˆ ํ…œํ”Œ๋ฆฟ** | ๋ฒ„๊ทธ ๋ฐ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ GitHub ํ…œํ”Œ๋ฆฟ | | ๐Ÿ“‚ **์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ** | `DATA_DIR` ์ €์žฅ ์œ„์น˜ ์žฌ์ •์˜ | ### ๊ธฐ๋Šฅ ์‹ฌ์ธต ๋ถ„์„ #### ์‹ค์šฉ์ ์ธ ๋น„์šฉ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•œ ์Šค๋งˆํŠธ ํด๋ฐฑ ```txt Combo: "my-coding-stack" 1. cc/claude-opus-4-6 2. nvidia/llama-3.3-70b 3. glm/glm-4.7 4. if/kimi-k2-thinking ``` ํ• ๋‹น๋Ÿ‰, ์†๋„ ๋˜๋Š” ์ƒํƒœ๊ฐ€ ์‹คํŒจํ•˜๋ฉด OmniRoute๋Š” ์ˆ˜๋™ ์ „ํ™˜ ์—†์ด ์ž๋™์œผ๋กœ ๋‹ค์Œ ํ›„๋ณด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. #### ๋ˆˆ์— ๋ณด์ด๊ณ  ์ž‘๋™ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํ† ์ฝœ ๊ด€๋ฆฌ - MCP + A2A๋Š” UI ๋ฐ ๋ฌธ์„œ์—์„œ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(์ˆจ๊ฒจ์ง€์ง€ ์•Š์Œ). - ํ”„๋กœํ† ์ฝœ ์ƒํƒœ API๋Š” ์‹ค์‹œ๊ฐ„ ์šด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค(`/api/mcp/*`, `/api/a2a/*`). - ๋Œ€์‹œ๋ณด๋“œ์—๋Š” 2์ผ์ฐจ ์ž‘์—…์— ๋Œ€ํ•œ ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(์ฝค๋ณด ํ† ๊ธ€, ์ฐจ๋‹จ๊ธฐ ์žฌ์„ค์ •, ์ž‘์—… ์ทจ์†Œ). #### ๋ฒˆ์—ญ๊ธฐ + ๊ฒ€์ฆ ์ž‘์—… ํ๋ฆ„ ๋ฒˆ์—ญ๊ธฐ ์˜์—ญ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. - **ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ**: ๋ณ€ํ™˜ ํ™•์ธ ์š”์ฒญ - **์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ**: ์ „์ฒด ์š”์ฒญ/์‘๋‹ต ์™•๋ณต - **ํ…Œ์ŠคํŠธ ๋ฒค์น˜**: ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ์‚ฌ๋ก€ ์‹คํ–‰ - **๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ**: ์‹ค์‹œ๊ฐ„ ๊ตํ†ต ์ƒํ™ฉ ๋ณด๊ธฐ `npm run test:protocols:e2e`์„ ํ†ตํ•ด ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœํ† ์ฝœ ๊ฒ€์ฆ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. > ๐Ÿ“– **[MCP Server README](open-sse/mcp-server/README.md)** โ€” ๋„๊ตฌ ์ฐธ์กฐ, IDE ๊ตฌ์„ฑ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์˜ˆ > > ๐Ÿ“– **[A2A Server README](src/lib/a2a/README.md)** โ€” ๊ธฐ์ˆ , JSON-RPC ๋ฐฉ๋ฒ•, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์ž‘์—… ์ˆ˜๋ช… ์ฃผ๊ธฐ ## ๐Ÿงช ํ‰๊ฐ€(Evals) OmniRoute์—๋Š” ๊ณจ๋“  ์„ธํŠธ์— ๋Œ€ํ•ด LLM ์‘๋‹ต ํ’ˆ์งˆ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ํ‰๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์˜ **๋ถ„์„ โ†’ ํ‰๊ฐ€**๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•˜์„ธ์š”. ### ๋‚ด์žฅ ๊ณจ๋“  ์„ธํŠธ ์‚ฌ์ „ ๋กœ๋“œ๋œ "OmniRoute Golden Set"์—๋Š” ๋‹ค์Œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - ์ธ์‚ฌ๋ง, ์ˆ˜ํ•™, ์ง€๋ฆฌ, ์ฝ”๋“œ ์ƒ์„ฑ - JSON ํ˜•์‹ ์ค€์ˆ˜, ๋ฒˆ์—ญ, ๋งˆํฌ๋‹ค์šด ์ƒ์„ฑ - ์•ˆ์ „ ๊ฑฐ๋ถ€(์œ ํ•ด ์ฝ˜ํ…์ธ ), ์นด์šดํŒ…, ๋ถ€์šธ ๋…ผ๋ฆฌ ### ํ‰๊ฐ€ ์ „๋žต | ์ „๋žต | ์„ค๋ช… | ์˜ˆ | | ---------- | -------------------------------------------------------------- | -------------------------------- | | `exact` | ์ถœ๋ ฅ์€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค | `"4"` | | `contains` | ์ถœ๋ ฅ์—๋Š” ํ•˜์œ„ ๋ฌธ์ž์—ด(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆ ํ•จ)์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. | `"Paris"` | | `regex` | ์ถœ๋ ฅ์€ ์ •๊ทœ์‹ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค | `"1.*2.*3"` | | `custom` | ์‚ฌ์šฉ์ž ์ •์˜ JS ํ•จ์ˆ˜๊ฐ€ true/false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. | `(output) => output.length > 10` | --- ## ๐Ÿ“– ์„ค์ • ๊ฐ€์ด๋“œ ### ํ”„๋กœํ† ์ฝœ ์„ค์ •(MCP + A2A)
๐Ÿงฉ MCP ์„ค์ •(๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ) stdio ๋ชจ๋“œ์—์„œ MCP ์ „์†ก์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ```bash omniroute --mcp ``` ๊ถŒ์žฅ๋˜๋Š” ๊ฒ€์ฆ ํ๋ฆ„: 1. stdio๋ฅผ ํ†ตํ•ด MCP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. 2. `omniroute_get_health`์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 3. `omniroute_list_combos`์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 4. `/dashboard/mcp`์„ ์—ด์–ด ํ•˜ํŠธ๋น„ํŠธ, ํ™œ๋™ ๋ฐ ๊ฐ์‚ฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ํ™”์— ์œ ์šฉํ•œ API: - `GET /api/mcp/status` - `GET /api/mcp/tools` - `GET /api/mcp/audit` - `GET /api/mcp/audit/stats`
๐Ÿค A2A ์„ค์ •(Agent2Agent) ์—์ด์ „ํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ```bash curl http://localhost:20128/.well-known/agent.json ``` ์ž‘์—… ๋ณด๋‚ด๊ธฐ: ```bash curl -X POST http://localhost:20128/a2a \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}' ``` ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ: - `GET /api/a2a/status` - `GET /api/a2a/tasks` - `GET /api/a2a/tasks/:id` - `POST /api/a2a/tasks/:id/cancel` ์šด์˜ UI: - ์ž‘์—…/์ƒํƒœ/์ŠคํŠธ๋ฆผ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ์—ฐ๊ธฐ ์ž‘์—…์„ ์œ„ํ•œ `/dashboard/a2a`
๐Ÿงช ์ข…๋‹จ ๊ฐ„ ํ”„๋กœํ† ์ฝœ ๊ฒ€์ฆ ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‘ ํ”„๋กœํ† ์ฝœ์„ ๋ชจ๋‘ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ```bash npm run test:protocols:e2e ``` ์ด๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. - MCP SDK ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ/๋ชฉ๋ก/ํ˜ธ์ถœ - A2A ๊ฒ€์ƒ‰/์ „์†ก/์ŠคํŠธ๋ฆฌ๋ฐ/๊ฐ€์ ธ์˜ค๊ธฐ/์ทจ์†Œ - MCP ๊ฐ์‚ฌ ๋ฐ A2A ์ž‘์—… ๊ด€๋ฆฌ API์˜ ๋ฐ์ดํ„ฐ ๊ต์ฐจ ํ™•์ธ
๐Ÿ’ณ ๊ตฌ๋… ์ œ๊ณต์—…์ฒด ### ํด๋กœ๋“œ ์ฝ”๋“œ(Pro/Max) ```bash Dashboard โ†’ Providers โ†’ Connect Claude Code โ†’ OAuth login โ†’ Auto token refresh โ†’ 5-hour + weekly quota tracking Models: cc/claude-opus-4-6 cc/claude-sonnet-4-5-20250929 cc/claude-haiku-4-5-20251001 ``` **ํ”„๋กœ ํŒ:** ๋ณต์žกํ•œ ์ž‘์—…์—๋Š” Opus๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด Sonnet์„ ์‚ฌ์šฉํ•˜์„ธ์š”. OmniRoute๋Š” ๋ชจ๋ธ๋‹น ํ• ๋‹น๋Ÿ‰์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค! ### OpenAI ์ฝ”๋ฑ์Šค(Plus/Pro) ```bash Dashboard โ†’ Providers โ†’ Connect Codex โ†’ OAuth login (port 1455) โ†’ 5-hour + weekly reset Models: cx/gpt-5.2-codex cx/gpt-5.1-codex-max ``` #### ์ฝ”๋ฑ์Šค ๊ณ„์ • ํ•œ๋„ ๊ด€๋ฆฌ(5์‹œ๊ฐ„ + ์ฃผ๊ฐ„) ์ด์ œ ๊ฐ Codex ๊ณ„์ •์—๋Š” `Dashboard -> Providers`์— ์ •์ฑ… ํ† ๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค. - `5h` (ON/OFF): 5์‹œ๊ฐ„ ์ฐฝ ์ž„๊ณ„๊ฐ’ ์ •์ฑ…์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค. - `Weekly` (ON/OFF): ์ฃผ๊ฐ„ ์ฐฝ ์ž„๊ณ„๊ฐ’ ์ •์ฑ…์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค. - ์ž„๊ณ„๊ฐ’ ๋™์ž‘: ํ™œ์„ฑํ™”๋œ ์ฐฝ์ด ์‚ฌ์šฉ๋Ÿ‰์˜ 90% ์ด์ƒ์— ๋„๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ๊ณ„์ •์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. - ์ˆœํ™˜ ๋™์ž‘: OmniRoute๋Š” ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ ๊ฒฉ Codex ๊ณ„์ •์œผ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. - ๋™์ž‘ ์žฌ์„ค์ •: ๊ณต๊ธ‰์ž `resetAt` ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๊ณ„์ •์ด ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์ž๊ฒฉ์„ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค: - `5h ON` + `Weekly ON`: ๋‘ ์ฐฝ์ด ์ž„๊ณ„๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด ๊ณ„์ •์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. - `5h OFF` + `Weekly ON`: ์ฃผ๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰๋งŒ ๊ณ„์ •์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - `5h ON` + `Weekly OFF`: 5์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ •์ด ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - `resetAt` ํ†ต๊ณผ: ๊ณ„์ •์ด ์ž๋™์œผ๋กœ ์ˆœํ™˜์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(์ˆ˜๋™ ์žฌํ™œ์„ฑํ™” ์—†์Œ). ### Gemini CLI(์›” 180,000 ๋ฌด๋ฃŒ!) ```bash Dashboard โ†’ Providers โ†’ Connect Gemini CLI โ†’ Google OAuth โ†’ 180K completions/month + 1K/day Models: gc/gemini-3-flash-preview gc/gemini-2.5-pro ``` **์ตœ๊ณ ์˜ ๊ฐ€์น˜:** ์—„์ฒญ๋‚œ ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰! ์œ ๋ฃŒ ๋“ฑ๊ธ‰ ์ด์ „์— ์‚ฌ์šฉํ•˜์„ธ์š”. ### GitHub ์ฝ”ํŒŒ์ผ๋Ÿฟ ```bash Dashboard โ†’ Providers โ†’ Connect GitHub โ†’ OAuth via GitHub โ†’ Monthly reset (1st of month) Models: gh/gpt-5 gh/claude-4.5-sonnet gh/gemini-3-pro ```
๐Ÿ”‘ API ํ‚ค ์ œ๊ณต์ž ### NVIDIA NIM(๋ฌด๋ฃŒ ๊ฐœ๋ฐœ์ž ์•ก์„ธ์Šค โ€” 70๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ) 1. ๊ฐ€์ž…: [build.nvidia.com](https://build.nvidia.com) 2. ๋ฌด๋ฃŒ API ํ‚ค ๋ฐ›๊ธฐ(1000 ์ถ”๋ก  ํฌ๋ ˆ๋”ง ํฌํ•จ) 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ NVIDIA NIM: - API ํ‚ค: `nvapi-your-key` **๋ชจ๋ธ:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` ์™ธ 50๊ฐœ ์ด์ƒ **ํ”„๋กœ ํŒ:** OpenAI ํ˜ธํ™˜ API โ€” OmniRoute์˜ ํ˜•์‹ ๋ณ€ํ™˜๊ณผ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ### ๋”ฅ์‹œํฌ 1. ๊ฐ€์ž…: [platform.deepseek.com](https://platform.deepseek.com) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ DeepSeek **๋ชจ๋ธ:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder` ### Groq(๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!) 1. ๊ฐ€์ž…: [console.groq.com](https://console.groq.com) 2. API ํ‚ค ๋ฐ›๊ธฐ(๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ํฌํ•จ) 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ Groq **๋ชจ๋ธ:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b` **ํ”„๋กœ ํŒ:** ์ดˆ๊ณ ์† ์ถ”๋ก  โ€” ์‹ค์‹œ๊ฐ„ ์ฝ”๋”ฉ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค! ### OpenRouter(100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ) 1. ๊ฐ€์ž…: [openrouter.ai](https://openrouter.ai) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ OpenRouter **๋ชจ๋ธ:** ๋‹จ์ผ API ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ฃผ์š” ์ œ๊ณต์—…์ฒด์˜ 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ’ฐ ์ €๋ ดํ•œ ๊ณต๊ธ‰์ž(๋ฐฑ์—…) ### GLM-4.7 (์ผ์ผ ์žฌ์„ค์ •, $0.6/1M) 1. ๊ฐ€์ž…: [Zhipu AI](https://open.bigmodel.cn/) 2. Coding Plan์—์„œ API Key ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API ํ‚ค ์ถ”๊ฐ€: - ์ œ๊ณต์ž: `glm` - API ํ‚ค: `your-key` **์‚ฌ์šฉ:** `glm/glm-4.7` **ํ”„๋กœ ํŒ:** ์ฝ”๋”ฉ ๊ณ„ํš์€ 1/7 ๋น„์šฉ์œผ๋กœ 3๋ฐฐ ํ• ๋‹น๋Ÿ‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค! ๋งค์ผ ์˜ค์ „ 10์‹œ์— ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ### MiniMax M2.1(5์‹œ๊ฐ„ ์žฌ์„ค์ •, $0.20/1M) 1. ๊ฐ€์ž…: [MiniMax](https://www.minimax.io/) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API Key ์ถ”๊ฐ€ **์‚ฌ์šฉ:** `minimax/MiniMax-M2.1` **ํ”„๋กœ ํŒ:** ๊ธด ์ปจํ…์ŠคํŠธ(100๋งŒ ํ† ํฐ)๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค! ### Kimi K2($9/์›” ์ •์•ก) 1. ๊ตฌ๋…: [Moonshot AI](https://platform.moonshot.ai/) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API Key ์ถ”๊ฐ€ **์‚ฌ์šฉ:** `kimi/kimi-latest` **ํ”„๋กœ ํŒ:** 1,000๋งŒ ํ† ํฐ์— ๋Œ€ํ•ด ๊ณ ์ • $9/์›” = $0.90/1M ์œ ํšจ ๋น„์šฉ!
๐Ÿ†“ ๋ฌด๋ฃŒ ์ œ๊ณต์—…์ฒด(๊ธด๊ธ‰ ๋ฐฑ์—…) ### Qoder(OAuth๋ฅผ ํ†ตํ•œ 5๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ) ```bash Dashboard โ†’ Connect Qoder โ†’ Qoder OAuth login โ†’ Unlimited usage Models: if/kimi-k2-thinking if/qwen3-coder-plus if/glm-4.7 if/minimax-m2 if/deepseek-r1 ``` ### Qwen(์žฅ์น˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ 4๊ฐœ์˜ ๋ฌด๋ฃŒ ๋ชจ๋ธ) ```bash Dashboard โ†’ Connect Qwen โ†’ Device code authorization โ†’ Unlimited usage Models: qw/qwen3-coder-plus qw/qwen3-coder-flash ``` ### ํ‚ค๋กœ(ํด๋กœ๋“œ ํ”„๋ฆฌ) ```bash Dashboard โ†’ Connect Kiro โ†’ AWS Builder ID or Google/GitHub โ†’ Unlimited usage Models: kr/claude-sonnet-4.5 kr/claude-haiku-4.5 ```
๐ŸŽจ ์ฝค๋ณด ๋งŒ๋“ค๊ธฐ ### ์˜ˆ์‹œ 1: ๊ตฌ๋… ์ตœ๋Œ€ํ™” โ†’ ์ €๋ ดํ•œ ๋ฐฑ์—… ``` Dashboard โ†’ Combos โ†’ Create New Name: premium-coding Models: 1. cc/claude-opus-4-6 (Subscription primary) 2. glm/glm-4.7 (Cheap backup, $0.6/1M) 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M) Use in CLI: premium-coding ``` ### ์˜ˆ์‹œ 2: ๋ฌด๋ฃŒ ์ „์šฉ(๋น„์šฉ ์—†์Œ) ``` Name: free-combo Models: 1. gc/gemini-3-flash-preview (180K free/month) 2. if/kimi-k2-thinking (unlimited) 3. qw/qwen3-coder-plus (unlimited) Cost: $0 forever! ```
๐Ÿ”ง CLI ํ†ตํ•ฉ ### ์ปค์„œ IDE ``` Settings โ†’ Models โ†’ Advanced: OpenAI API Base URL: http://localhost:20128/v1 OpenAI API Key: [from OmniRoute dashboard] Model: cc/claude-opus-4-6 ``` ### ํด๋กœ๋“œ ์ฝ”๋“œ ์›ํด๋ฆญ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ๋Œ€์‹œ๋ณด๋“œ์˜ **CLI ๋„๊ตฌ** ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `~/.claude/settings.json`์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์„ธ์š”. ### ์ฝ”๋ฑ์Šค CLI ```bash export OPENAI_BASE_URL="http://localhost:20128" export OPENAI_API_KEY="your-omniroute-api-key" codex "your prompt" ``` ### ์˜คํ”ˆํด๋กœ **์˜ต์…˜ 1 - ๋Œ€์‹œ๋ณด๋“œ(๊ถŒ์žฅ):** ``` Dashboard โ†’ CLI Tools โ†’ OpenClaw โ†’ Select Model โ†’ Apply ``` **์˜ต์…˜ 2 - ์ˆ˜๋™:** `~/.openclaw/openclaw.json` ํŽธ์ง‘: ```json { "models": { "providers": { "omniroute": { "baseUrl": "http://127.0.0.1:20128/v1", "apiKey": "sk_omniroute", "api": "openai-completions" } } } } ``` > **์ฐธ๊ณ :** OpenClaw๋Š” ๋กœ์ปฌ OmniRoute์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. IPv6 ํ™•์ธ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด `localhost` ๋Œ€์‹  `127.0.0.1`์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ### ํด๋ผ์ธ / ๊ณ„์† / RooCode ``` Settings โ†’ API Configuration: Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 API Key: [from OmniRoute dashboard] Model: if/kimi-k2-thinking ``` ### ์˜คํ”ˆ์ฝ”๋“œ **1๋‹จ๊ณ„:** OmniRoute๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ • ๊ณต๊ธ‰์ž๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ```bash opencode /connect # Select "Other" โ†’ Enter ID: "omniroute" โ†’ Enter your OmniRoute API key ``` **2๋‹จ๊ณ„:** ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ `opencode.json`์„ ์ƒ์„ฑ/ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค. ```json { "$schema": "https://opencode.ai/config.json", "provider": { "omniroute": { "npm": "@ai-sdk/openai-compatible", "name": "OmniRoute", "options": { "baseURL": "http://localhost:20128/v1" }, "models": { "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" }, "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" }, "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" } } } } } ``` **3๋‹จ๊ณ„:** OpenCode์—์„œ ๋ชจ๋ธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ```bash /models # Select any OmniRoute model from the list ``` > **ํŒ:** OmniRoute `/v1/models` ์—”๋“œํฌ์ธํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์„ `models` ์„น์…˜์— ์ถ”๊ฐ€ํ•˜์„ธ์š”. OmniRoute ๋Œ€์‹œ๋ณด๋“œ์—์„œ `provider/model-id` ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
--- ## ๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ
๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญํ•˜์„ธ์š” **"์–ธ์–ด ๋ชจ๋ธ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"** - ๊ณต๊ธ‰์ž ํ• ๋‹น๋Ÿ‰ ์†Œ์ง„ โ†’ ๋Œ€์‹œ๋ณด๋“œ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ๊ธฐ ํ™•์ธ - ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ฝค๋ณด ํด๋ฐฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋” ์ €๋ ดํ•œ ๊ณ„์ธต์œผ๋กœ ์ „ํ™˜ํ•˜์„ธ์š”. **๋น„์œจ ์ œํ•œ** - ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰ ์ดˆ๊ณผ โ†’ GLM/MiniMax๋กœ ๋Œ€์ฒด - ์ฝค๋ณด ์ถ”๊ฐ€: `cc/claude-opus-4-6 โ†’ glm/glm-4.7 โ†’ if/kimi-k2-thinking` **OAuth ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค** - OmniRoute์— ์˜ํ•ด ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ - ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋Š” ๊ฒฝ์šฐ: Dashboard โ†’ Provider โ†’ Reconnect **๋†’์€ ๋น„์šฉ** - ๋Œ€์‹œ๋ณด๋“œ โ†’ ๋น„์šฉ์—์„œ ์‚ฌ์šฉ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜์„ธ์š”. - ๊ธฐ๋ณธ ๋ชจ๋ธ์„ GLM/MiniMax๋กœ ์ „ํ™˜ - ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์ž‘์—…์—๋Š” ๋ฌด๋ฃŒ ๊ณ„์ธต(Gemini CLI, Qoder)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. **๋Œ€์‹œ๋ณด๋“œ/API ํฌํŠธ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค** - `PORT`์€ ํ‘œ์ค€ ๊ธฐ๋ณธ ํฌํŠธ(๋ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ API ํฌํŠธ)์ž…๋‹ˆ๋‹ค. - `API_PORT`์€ OpenAI ํ˜ธํ™˜ API ๋ฆฌ์Šค๋„ˆ๋งŒ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. - `DASHBOARD_PORT`์€ ๋Œ€์‹œ๋ณด๋“œ/Next.js ๋ฆฌ์Šค๋„ˆ๋งŒ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. - `NEXT_PUBLIC_BASE_URL`์„ ๋Œ€์‹œ๋ณด๋“œ/๊ณต๊ฐœ URL๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(OAuth ์ฝœ๋ฐฑ์šฉ). **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ์˜ค๋ฅ˜** - `BASE_URL`์ด ์‹คํ–‰ ์ค‘์ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. - `CLOUD_URL`์ด ์˜ˆ์ƒ ํด๋ผ์šฐ๋“œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. - `NEXT_PUBLIC_*` ๊ฐ’์„ ์„œ๋ฒ„ ์ธก ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. **์ฒซ ๋ฒˆ์งธ ๋กœ๊ทธ์ธ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค** - `.env`์—์„œ `INITIAL_PASSWORD`์„ ํ™•์ธํ•˜์„ธ์š”. - ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋Œ€์ฒด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” `123456`์ž…๋‹ˆ๋‹ค. **์š”์ฒญ ๋กœ๊ทธ ์—†์Œ** - `.env`์— `ENABLE_REQUEST_LOGS=true`์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. **OpenAI ํ˜ธํ™˜ ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์—์„œ "์ž˜๋ชป๋จ"์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค** - ๋งŽ์€ ๊ณต๊ธ‰์ž๊ฐ€ `/models` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - OmniRoute v1.0.6+์—๋Š” ์ฑ„ํŒ… ์™„๋ฃŒ๋ฅผ ํ†ตํ•œ ๋Œ€์ฒด ๊ฒ€์ฆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - ๊ธฐ๋ณธ URL์— `/v1` ์ ‘๋ฏธ์‚ฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ### ๐Ÿ” ์›๊ฒฉ ์„œ๋ฒ„์˜ OAuth > **โš ๏ธ VPS, Docker ๋˜๋Š” ์›๊ฒฉ ์„œ๋ฒ„์—์„œ OmniRoute๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค‘์š”** #### ์›๊ฒฉ ์„œ๋ฒ„์—์„œ Antigravity/Gemini CLI OAuth๊ฐ€ ์‹คํŒจํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? **Antigravity** ๋ฐ **Gemini CLI** ๊ณต๊ธ‰์ž๋Š” **Google OAuth 2.0**์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Google์—์„œ๋Š” OAuth ํ๋ฆ„์˜ `redirect_uri`์ด ์•ฑ์˜ Google Cloud Console์— ์‚ฌ์ „ ๋“ฑ๋ก๋œ URI ์ค‘ ํ•˜๋‚˜์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. OmniRoute์— ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” OAuth ์ž๊ฒฉ ์ฆ๋ช…์€ **`localhost`์— ๋Œ€ํ•ด์„œ๋งŒ** ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ์„œ๋ฒ„(์˜ˆ: `https://omniroute.myserver.com`)์—์„œ OmniRoute์— ์•ก์„ธ์Šคํ•˜๋ฉด Google์€ ๋‹ค์Œ์„ ํ†ตํ•œ ์ธ์ฆ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ``` Error 400: redirect_uri_mismatch ``` #### ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ž์ฒด OAuth ์ž๊ฒฉ ์ฆ๋ช… ๊ตฌ์„ฑ ์„œ๋ฒ„์˜ URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Google Cloud Console์—์„œ **OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID**๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #### ๋‹จ๊ณ„๋ณ„ **1. Google Cloud Console ์—ด๊ธฐ** ์ด๋™: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials) **2. ์ƒˆ OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID ์ƒ์„ฑ** - **"+ ์ž๊ฒฉ ์ฆ๋ช… ๋งŒ๋“ค๊ธฐ"** โ†’ **"OAuth ํด๋ผ์ด์–ธํŠธ ID"**๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํ˜•: **"์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜"** - ์ด๋ฆ„: ์›ํ•˜๋Š” ๊ฒƒ(์˜ˆ: `OmniRoute Remote`) **3. ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI ์ถ”๊ฐ€** **"์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI"** ํ•„๋“œ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ``` https://your-server.com/callback ``` > `your-server.com`์„ ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ ๋˜๋Š” IP๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํฌํŠธ ํฌํ•จ(์˜ˆ: `http://45.33.32.156:20128/callback`)). **4. ์ž๊ฒฉ ์ฆ๋ช… ์ €์žฅ ๋ฐ ๋ณต์‚ฌ** ์ƒ์„ฑ ํ›„ Google์€ **ํด๋ผ์ด์–ธํŠธ ID** ๋ฐ **ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ**๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. **5. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •** `.env`(๋˜๋Š” Docker ํ™˜๊ฒฝ ๋ณ€์ˆ˜)์—์„œ: ```bash # For Antigravity: ANTIGRAVITY_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-your-secret # For Gemini CLI: GEMINI_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret ``` **6. OmniRoute ๋‹ค์‹œ ์‹œ์ž‘** ```bash # npm: npm run dev # Docker: docker restart omniroute ``` **7. ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ด ๋ณด์„ธ์š”** ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž โ†’ Antigravity(๋˜๋Š” Gemini CLI) โ†’ OAuth ์ด์ œ Google์€ `https://your-server.com/callback`๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. --- #### ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(์‚ฌ์šฉ์ž ์ง€์ • ์ž๊ฒฉ ์ฆ๋ช… ์—†์Œ) ์ง€๊ธˆ ๋ฐ”๋กœ ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ **์ˆ˜๋™ URL ํ๋ฆ„**์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. OmniRoute๋Š” Google ์ธ์ฆ URL์„ ์—ฝ๋‹ˆ๋‹ค. 2. ์Šน์ธ ํ›„ Google์€ `localhost`๋กœ ๋ฆฌ๋””๋ ‰์…˜์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค(์›๊ฒฉ ์„œ๋ฒ„์—์„œ๋Š” ์‹คํŒจํ•จ). 3. ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ ํ‘œ์‹œ์ค„์—์„œ **์ „์ฒด URL์„ ๋ณต์‚ฌ**ํ•˜์„ธ์š”(ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ํ•ด๋‹น). 4. ํ•ด๋‹น URL์„ OmniRoute ์—ฐ๊ฒฐ ๋ชจ๋‹ฌ์— ํ‘œ์‹œ๋œ ํ•„๋“œ์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. 5. **"์—ฐ๊ฒฐ"**์„ ํด๋ฆญํ•˜์„ธ์š”. > ์ด๋Š” ๋ฆฌ๋””๋ ‰์…˜ ํŽ˜์ด์ง€ ๋กœ๋“œ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด URL์˜ ์ธ์ฆ ์ฝ”๋“œ๊ฐ€ ์œ ํšจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ---
๐Ÿ‡ง๐Ÿ‡ท ํฌ๋ฅดํˆฌ๊ฐˆ์–ด ๋ฒ„์ „ #### OAuth์—์„œ Antigravity/Gemini CLI๋ฅผ ์›๊ฒฉ ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Os๋Š” **๋ฐ˜์ค‘๋ ฅ** ๋ฐ **Gemini CLI**๋ฅผ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด **Google OAuth 2.0**์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo. OAuth๋Š” OmniRoute์— ๋Œ€ํ•œ ์‹ ์šฉ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ **`localhost`**์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. Quando vocรช acessa o OmniRoute em um servidor remoto (์˜ˆ: `https://omniroute.meuservidor.com`), o Google rejeita a autenticaรงรฃo com: ``` Error 400: redirect_uri_mismatch ``` #### ํ•ด๊ฒฐ์ฑ…: ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ OAuth ๊ตฌ์„ฑ Vocรช precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com a URI do seu servidor. #### ํŒŒ์˜ ์•„ ํŒŒ์†Œ **1. Google Cloud Console์— ์•ก์„ธ์Šค** ์•„๋ธŒ๋ผ: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials) **2. Crie um novo OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID** - em ํด๋ฆญ **"+ ์ž๊ฒฉ ์ฆ๋ช… ๋งŒ๋“ค๊ธฐ"** โ†’ **"OAuth ํด๋ผ์ด์–ธํŠธ ID"** - ์ ์šฉ ๋ถ„์•ผ: **"์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜"** - ์ด๋ฆ„: escolha qualquer nome (์˜ˆ: `OmniRoute Remote`) **3. ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI๋กœ์„œ์˜ Adicione** ์•„๋‹ˆ์š” **"์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI"**, ์ถ”๊ฐ€: ``` https://seu-servidor.com/callback ``` > `seu-servidor.com` pelo domรญnio ๋˜๋Š” IP do seu servidor๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ํฌํŠธ ํฌํ•จ, ์˜ˆ: `http://45.33.32.156:20128/callback`). **4. ์‚ฌ๋ณธ์„ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ์ €์žฅ** Apรณs criar, o Google morerรก o **ํด๋ผ์ด์–ธํŠธ ID** e o **ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ**. **5. ๋‹ค์–‘ํ•œ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑ** `.env`(Docker์˜ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์ด ์—†์Šต๋‹ˆ๋‹ค. ```bash # Para Antigravity: ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret # Para Gemini CLI: GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret ``` **6. Reinicie ๋˜๋Š” OmniRoute** ```bash # Se usando npm: npm run dev # Se usando Docker: docker restart omniroute ``` **7. Tente conectar novamente** ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž โ†’ Antigravity(๋˜๋Š” Gemini CLI) โ†’ OAuth Agora๋Š” `https://seu-servidor.com/callback` ๋ฐ ์ž๋™ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด Google์„ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. --- #### ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(sem configurar credenciais prรณprias) Se nรฃo quiser criar credenciais prรณprias agora, ainda รฉ possรญvel usar o fluxo **manual de URL**: 1. OmniRoute๋Š” Google ์ž๋™ ์ƒ์„ฑ URL์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 2. Apรณs vocรช autorizar, o Google tentarรก redirectionar para `localhost` (que falha no servidor remoto) 3. **URL ๋ณต์‚ฌ ์™„๋ฃŒ** da barra de endereรงo do seu browser (mesmo que a pรกgina nรฃo carregue) 4. Cole essa URL no campo que aparece no modal de conexรฃo do OmniRoute 5. Clique em **"์—ฐ๊ฒฐ"** > ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ URL์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
---
## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ
๊ธฐ์ˆ  ์Šคํƒ ์„ธ๋ถ€์ •๋ณด๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญํ•˜์„ธ์š”. - **๋Ÿฐํƒ€์ž„**: Node.js 18โ€“22 LTS(โš ๏ธ Node.js 24+๋Š” **์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค** โ€” `better-sqlite3` ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) - **์–ธ์–ด**: TypeScript 5.9 โ€” `src/` ๋ฐ `open-sse/`์—์„œ **100% TypeScript**(v2.0 ์ดํ›„ ํ•ต์‹ฌ ๋ชจ๋“ˆ์—์„œ๋Š” `any`์ด 0์ž„) - **ํ”„๋ ˆ์ž„์›Œํฌ**: Next.js 16 + React 19 + Tailwind CSS 4 - **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: LowDB(JSON) + SQLite(๋„๋ฉ”์ธ ์ƒํƒœ + ํ”„๋ก์‹œ ๋กœ๊ทธ + MCP ๊ฐ์‚ฌ + ๋ผ์šฐํŒ… ๊ฒฐ์ •) - **์Šคํ‚ค๋งˆ**: Zod(MCP ๋„๊ตฌ I/O ๊ฒ€์ฆ, API ๊ณ„์•ฝ) - **ํ”„๋กœํ† ์ฝœ**: MCP(stdio/HTTP) + A2A v0.3(JSON-RPC 2.0 + SSE) - **์ŠคํŠธ๋ฆฌ๋ฐ**: ์„œ๋ฒ„์—์„œ ๋ณด๋‚ธ ์ด๋ฒคํŠธ(SSE) - **์ธ์ฆ**: OAuth 2.0(PKCE) + JWT + API ํ‚ค + MCP ๋ฒ”์œ„ ์Šน์ธ - **ํ…Œ์ŠคํŠธ**: Node.js ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ + Vitest(๋‹จ์œ„, ํ†ตํ•ฉ, E2E๋ฅผ ํฌํ•จํ•œ 900๊ฐœ ์ด์ƒ์˜ ํ…Œ์ŠคํŠธ) - **CI/CD**: GitHub Actions(์ž๋™ npm ๊ฒŒ์‹œ + ์ถœ์‹œ ์‹œ Docker Hub) - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online) - **ํŒจํ‚ค์ง€**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute) - **๋„์ปค**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) - **๋ณต์›๋ ฅ**: ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ, ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„, ์ฒœ๋‘ฅ ๋ฐฉ์ง€ ๋ฌด๋ฆฌ, TLS ์Šคํ‘ธํ•‘, ์ž๋™ ์ฝค๋ณด ์ž๊ฐ€ ์น˜์œ 
--- ## ๐Ÿ“– ๋ฌธ์„œ | ๋ฌธ์„œ | ์„ค๋ช… | | ---------------------------------------------- | ------------------------------------------------ | | [User Guide](docs/USER_GUIDE.md) | ๊ณต๊ธ‰์ž, ์ฝค๋ณด, CLI ํ†ตํ•ฉ, ๋ฐฐํฌ | | [API Reference](docs/API_REFERENCE.md) | ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ | | [MCP Server](open-sse/mcp-server/README.md) | 16 MCP tools, IDE configs, Python/TS/Go clients | | [A2A Server](src/lib/a2a/README.md) | JSON-RPC 2.0 ํ”„๋กœํ† ์ฝœ, ์Šคํ‚ฌ, ์ŠคํŠธ๋ฆฌ๋ฐ, ์ž‘์—… ๊ด€๋ฆฌ | | [Auto-Combo Engine](docs/auto-combo.md) | 6๋‹จ๊ณ„ ์ฑ„์ , ๋ชจ๋“œ ํŒฉ, ์ž๊ฐ€ ์น˜์œ  | | [Troubleshooting](docs/TROUBLESHOOTING.md) | ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• | | [Architecture](docs/ARCHITECTURE.md) | ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋‚ด๋ถ€ | | [Contributing](CONTRIBUTING.md) | ๊ฐœ๋ฐœ ์„ค์ • ๋ฐ ์ง€์นจ | | [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 ์‚ฌ์–‘ | | [Security Policy](SECURITY.md) | ์ทจ์•ฝ์  ๋ณด๊ณ  ๋ฐ ๋ณด์•ˆ ๊ด€ํ–‰ | | [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | ์ „์ฒด ๊ฐ€์ด๋“œ: VM + nginx + Cloudflare ์„ค์ • | | [Features Gallery](docs/FEATURES.md) | ์Šคํฌ๋ฆฐ์ƒท์„ ํฌํ•จํ•œ ์‹œ๊ฐ์  ๋Œ€์‹œ๋ณด๋“œ ๋‘˜๋Ÿฌ๋ณด๊ธฐ | | [Release Checklist](docs/RELEASE_CHECKLIST.md) | ์ถœ์‹œ ์ „ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋‹จ๊ณ„ | --- ## ๐Ÿ—บ๏ธ ๋กœ๋“œ๋งต OmniRoute์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ๊ฑธ์ณ **210๊ฐœ ์ด์ƒ์˜ ๊ธฐ๋Šฅ์ด ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค**. ์ฃผ์š” ์˜์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. | ์นดํ…Œ๊ณ ๋ฆฌ | ๊ณ„ํš๋œ ๊ธฐ๋Šฅ | ํ•˜์ด๋ผ์ดํŠธ | | --------------------------- | ----------- | ------------------------------------------------------------------------------ | | ๐Ÿง  **๋ผ์šฐํŒ… ๋ฐ ์ธํ…”๋ฆฌ์ „์Šค** | 25์„ธ ์ด์ƒ | ์ตœ์ € ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ผ์šฐํŒ…, ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ์‹คํ–‰ ์ „ ํ• ๋‹น๋Ÿ‰, P2C ๊ณ„์ • ์„ ํƒ | | ๐Ÿ”’ **๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜** | 20์„ธ ์ด์ƒ | SSRF ๊ฐ•ํ™”, ์ž๊ฒฉ ์ฆ๋ช… ํด๋กœํ‚น, ์—”๋“œํฌ์ธํŠธ๋‹น ์†๋„ ์ œํ•œ, ๊ด€๋ฆฌ ํ‚ค ๋ฒ”์œ„ ์ง€์ • | | ๐Ÿ“Š **๊ด€์ธก์„ฑ** | 15์„ธ ์ด์ƒ | OpenTelemetry ํ†ตํ•ฉ, ์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ชจ๋ธ๋ณ„ ๋น„์šฉ ์ถ”์  | | ๐Ÿ”„ **๊ณต๊ธ‰์ž ํ†ตํ•ฉ** | 20์„ธ ์ด์ƒ | ๋™์  ๋ชจ๋ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๊ณต๊ธ‰์ž ์ฟจ๋‹ค์šด, ๋‹ค์ค‘ ๊ณ„์ • Codex, Copilot ํ• ๋‹น๋Ÿ‰ ๊ตฌ๋ฌธ ๋ถ„์„ | | โšก **์„ฑ๋Šฅ** | 15์„ธ ์ด์ƒ | ๋“€์–ผ ์บ์‹œ ๋ ˆ์ด์–ด, ํ”„๋กฌํ”„ํŠธ ์บ์‹œ, ์‘๋‹ต ์บ์‹œ, ์ŠคํŠธ๋ฆฌ๋ฐ Keepalive, ๋ฐฐ์น˜ API | | ๐ŸŒ **์ƒํƒœ๊ณ„** | 10์„ธ ์ด์ƒ | WebSocket API, ๊ตฌ์„ฑ ํ•ซ ๋ฆฌ๋กœ๋“œ, ๋ถ„์‚ฐ ๊ตฌ์„ฑ ์ €์žฅ์†Œ, ์ƒ์šฉ ๋ชจ๋“œ | ### ๐Ÿ”œ ์ถœ์‹œ ์˜ˆ์ • - ๐Ÿ”— **OpenCode ํ†ตํ•ฉ** โ€” OpenCode AI ์ฝ”๋”ฉ IDE์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ณต๊ธ‰์ž ์ง€์› - ๐Ÿ”— **TRAE ํ†ตํ•ฉ** โ€” TRAE AI ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์› - ๐Ÿ“ฆ **Batch API** โ€” ๋Œ€๋Ÿ‰ ์š”์ฒญ์— ๋Œ€ํ•œ ๋น„๋™๊ธฐ์‹ ์ผ๊ด„ ์ฒ˜๋ฆฌ - ๐ŸŽฏ **ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…** โ€” ์‚ฌ์šฉ์ž ์ •์˜ ํƒœ๊ทธ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ ๋ผ์šฐํŒ… - ๐Ÿ’ฐ **์ตœ์ € ๋น„์šฉ ์ „๋žต** โ€” ๊ฐ€์žฅ ์ €๋ ดํ•œ ์ œ๊ณต์—…์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. > ๐Ÿ“ [**OMNI_TOKEN_342**](docs/new-features/)์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ๊ธฐ๋Šฅ ์‚ฌ์–‘(217๊ฐœ ์„ธ๋ถ€ ์‚ฌ์–‘) --- ## ๐Ÿ‘ฅ ๊ธฐ์—ฌ์ž [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) ### ๊ธฐ์—ฌ ๋ฐฉ๋ฒ• 1. ์ €์žฅ์†Œ ํฌํฌ 2. ๊ธฐ๋Šฅ ๋ถ„๊ธฐ ์ƒ์„ฑ(`git checkout -b feature/amazing-feature`) 3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค(`git commit -m 'Add amazing feature'`). 4. ๋ธŒ๋žœ์น˜(`git push origin feature/amazing-feature`)๋กœ ํ‘ธ์‹œ 5. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์—ด๊ธฐ ์ž์„ธํ•œ ์ง€์นจ์€ [CONTRIBUTING.md](CONTRIBUTING.md)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ### ์ƒˆ ๋ฒ„์ „ ์ถœ์‹œ ```bash # Create a release โ€” npm publish happens automatically gh release create v2.0.0 --title "v2.0.0" --generate-notes ``` --- ## ๐Ÿ“Š ์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ ## ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์Šคํƒ€๊ฒŒ์ด์ €๊ฐ€ ๋จ ## [![Stargazers over time](https://starchart.cc/diegosouzapw/OmniRoute.svg?variant=adaptive)](https://starchart.cc/diegosouzapw/OmniRoute) ## ๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง์”€ ์ด ํฌํฌ์— ์˜๊ฐ์„ ์ค€ ์›๋ณธ ํ”„๋กœ์ ํŠธ์ธ **[decolua](https://github.com/decolua)**์˜ **[9router](https://github.com/decolua/9router)**์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. OmniRoute๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ, ๋‹ค์ค‘ ๋ชจ๋“œ API ๋ฐ ์ „์ฒด TypeScript ์žฌ์ž‘์„ฑ์„ ํ†ตํ•ด ๋†€๋ผ์šด ๊ธฐ๋ฐ˜์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ด JavaScript ํฌํŠธ์— ์˜๊ฐ์„ ์ค€ ์ตœ์ดˆ์˜ Go ๊ตฌํ˜„์ธ **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)**์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. --- ## ๐Ÿ“„ ๋ผ์ด์„ผ์Šค MIT ๋ผ์ด์„ ์Šค - ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ---
์—ฐ์ค‘๋ฌดํœด์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด โค๏ธ์œผ๋กœ ๊ตฌ์ถ•๋จ
omniroute.online