> ## Documentation Index
> Fetch the complete documentation index at: https://comfyui-mcp.artokun.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 백엔드 / 제공자

> 패널 에이전트는 어떤 LLM에서든 실행됩니다: 자신의 구독/플랜의 Claude, ChatGPT, Gemini, Grok, Kimi, 또는 GLM, 계정이 전혀 없는 Ollama / LM Studio / llama.cpp의 무료 로컬 모델, 또는 OpenAI 호환 엔드포인트 위의 어떤 호스팅 모델이든. 제공자 중립 AgentBackend 포트, 선택기, 기능 매트릭스가 어떻게 동작하는지.

[사이드바 패널](/docs/docs/ko/panel) 에이전트는 **제공자에 중립적**입니다. **Claude**,
**ChatGPT**, **Gemini**, 또는 \*\*Ollama (로컬)\*\*을 고르면 맞는 에이전트가
백그라운드에서 실행됩니다 — 구독은 API 키가 필요 없고, 로컬 모델은
계정이 전혀 필요 없습니다. Ollama 백엔드는 또한 **어떤 OpenAI 호환
엔드포인트**든 말합니다 (OpenRouter, DeepSeek, GLM, MiMo, vLLM, LM Studio).
그래서 "직접 모델을 가져오기"가 자신의 GPU의 무료 4B부터 프런티어까지
모든 것을 커버합니다. 모든 제공자가 같은 라이브 캔버스 도구, 같은 모델 지식,
같은 원샷 워크플로우 불러오기, 같은 비용 가드레일을 공유합니다.
[LLM 아레나](/docs/docs/ko/arena)가 실제 ComfyUI 작업으로 어느 것이든 점수를 매깁니다.

```
panel (pick a provider) ⇄ loopback bridge ⇄ orchestrator (Claude · ChatGPT · Gemini · any LLM) ⇄ your graph
```

## 포트를 고르는 것이 아니라 제공자를 고르세요

패널은 **백엔드 선택기**를 보여 줍니다 — Claude / ChatGPT / Gemini /
Antigravity / Grok / Kimi / GLM / Ollama / LM Studio / llama.cpp /
OpenRouter / 커스텀 엔드포인트
칩 (Copilot 같은 실험 제공자는 실험
토글 뒤에 나타납니다). 하나를 클릭하면 공유 오케스트레이터 하나에서 그 제공자에
연결합니다 (브리지 포트 하나가 모든 제공자를 서비스하고, 각 패널 탭이
핸드셰이크에서 제공자를 고릅니다). 브리지 URL은 사용자가 관리하는
오케스트레이터를 위해 **고급** 아래에 있습니다.

제공자를 전환하면 **새 채팅이 시작됩니다** — 대화가 제공자 사이에
공유되지 않습니다 — 그리고 패널이 그렇게 말하는 시스템 노트를 게시합니다. 입력창
플레이스홀더는 활성 백엔드를 따릅니다 ("Claude에게 묻기…" / "Ollama에게 묻기…").

## 로그인 (제공자마다 한 번 — 또는 아예 안 해도 됩니다)

* **Claude** — `claude` (또는 `claude setup-token`) — claude.ai OAuth (구독).
* **ChatGPT (Codex)** — `codex login` — ChatGPT 로그인 (구독). Codex
  app-server를 통해 실행됩니다.
* **ChatGPT (직접 OAuth)** — `codex login`을 한 번이라도 실행했다면
  추가 단계 없음: `chatgpt` 백엔드가 `~/.codex/auth.json`을 재사용하고
  ChatGPT와 직접 대화합니다 (Codex 프로세스 없음). ack가 인증 파일이
  없다고 하면, `codex login`을 한 번 실행하세요.
* **Gemini** — `gemini` — Google 로그인. 참고: 무료 개인 Google
  로그인은 2026-06-18에 은퇴했습니다. Gemini CLI 백엔드는 이제
  `GEMINI_API_KEY` 또는 엔터프라이즈/Code Assist 계정이 필요합니다. 개인
  구독자: 아래 **Antigravity**를 쓰세요.
* **Antigravity (Google 구독)** — [antigravity.google](https://antigravity.google)에서
  공식 Antigravity CLI를 설치하고, `agy`를 한 번 실행해
  Google 로그인을 완료하세요 (AI Pro/Ultra와 무료 티어). 백엔드는
  턴마다 `agy -p`를 `--continue` 대화 연속성과 함께 구동하고,
  `agy models`에서 라이브 모델 카탈로그를 읽으며, ComfyUI + 패널 MCP
  도구를 병합 안전한 워크스페이스 `.agents/mcp_config.json`을 통해 연결합니다. 설계상
  줄어든 기능 (문서화된 기계 가독 이벤트 스트림 없음): 최종
  답변 텍스트는 들어오지만, 도구별 진행과 이미지
  입력이 없습니다. 대화 연속성은 `agy --continue`를 씁니다 (계정의 최신
  대화). 그래서 한 번에 Antigravity 탭 **하나**만 실행하세요 — 두 번째 탭, 또는
  터미널의 인터랙티브 `agy` 세션이 스레드를 훔칠 수 있습니다.
  `COMFYUI_MCP_ANTIGRAVITY_MODEL`이 모델을 고정하고,
  `COMFYUI_MCP_ANTIGRAVITY_PATH`가 비표준 설치를 가리킵니다.
* **Grok** — Grok CLI (xAI / Grok Build)를 설치하고 `grok`을 한 번 실행해
  로그인하세요. 백엔드가 ACP 모드로 구동합니다. 패널은 또한 Grok이
  준비되지 않았을 때 패널 안 OAuth 로그인 행을 제공합니다.
* **Kimi (권장)** — [Kimi Code CLI](https://moonshotai.github.io/kimi-code/)를 설치하고
  `kimi login`을 실행하세요 (디바이스 코드 흐름). 백엔드가 그 로그인을
  `~/.kimi-code/credentials/kimi-code.json`에서 재사용합니다 (레거시 `~/.kimi` 경로는 여전히
  폴백으로 읽힘). 이것은 **Kimi Code 구독**을 쓰며 Kimi를 실행하는
  선호 방식입니다 — 아래의 토큰당 과금 Moonshot 키보다 싸고 한도가
  높습니다. CI / CLI 없음 용으로만 `KIMI_API_KEY`를 대신 설정하거나,
  기본이 아닌 자격 증명 디렉터리를 가리키려면 `KIMI_CODE_HOME` (`KIMI_SHARE_DIR`은
  예전 이름을 설정한 사람을 위해 여전히 존중됩니다). 패널 안 OAuth 로그인도
  제공됩니다.
* **GLM** — `ZAI_API_KEY`를 설정하세요 (Z.AI Coding Plan. `GLM_API_KEY` /
  `ZHIPUAI_API_KEY`도 받아들여짐). CLI 없음.
* **Kimi K3 (Moonshot)** — Kimi Code 구독이 없을 때의 **토큰당 과금 대안**
  (있으면 위의 **Kimi** 경로를 선호).
  [platform.kimi.ai](https://platform.kimi.ai/console/api-keys)에서
  `MOONSHOT_API_KEY`를 설정하세요. CLI 없음. 이것은 Moonshot
  **플랫폼** 키입니다 (기본 모델 `kimi-k3`, 베이스
  `https://api.moonshot.ai/v1`) — 위의 **Kimi** 제공자와 구별됩니다.
  그것은 Kimi Code 코딩 구독입니다. 모델은
  `COMFYUI_MCP_MOONSHOT_MODEL`로, 베이스는 `COMFYUI_MCP_MOONSHOT_BASE_URL`로 재정의하세요.
* **MiniMax** — [platform.minimax.io](https://platform.minimax.io/console/api-keys)에서
  `MINIMAX_API_KEY`를 설정하세요. CLI 없음.
  기본 모델은 `MiniMax-M3`이고 기본 베이스는 글로벌 엔드포인트
  `https://api.minimax.io/v1`입니다 (OpenAI 호환, 평범한 Bearer 인증). 중국
  지역은 `COMFYUI_MCP_MINIMAX_BASE_URL=https://api.minimaxi.com/v1`를 설정하세요.
  모델은 `COMFYUI_MCP_MINIMAX_MODEL`로 재정의하세요.
* **Copilot (실험)** — 패널의 실험 제공자
  행에서 로그인하세요. 기본값은 꺼짐. 먼저 설정에서 실험 백엔드를 켜세요.
* **Ollama (로컬)** — 로그인 없음. Ollama를 설치하고 도구 호출
  모델을 받으세요 (`ollama pull gemma4:e4b`). **호스팅** 모델이라면
  `COMFYUI_MCP_OLLAMA_API=openai`, `COMFYUI_MCP_OLLAMA_BASE_URL` (예:
  `https://openrouter.ai/api/v1`), 그리고 API 키
  (`COMFYUI_MCP_OLLAMA_API_KEY` / `OPENROUTER_API_KEY`)를 설정하세요.
* **커스텀 엔드포인트** — 로그인 흐름 없음. 설정 → 커스텀
  엔드포인트에서 어떤 OpenAI 호환 `/v1`이든 가리키세요 (vLLM, DeepSeek, Together,
  Azure, 원격 llama-server). 서버가 키를 필요로 하면 거기에 API 키를 추가하세요
  (마스킹된 입력, 오케스트레이터가 0600으로 저장).
  [로컬 LLM → 커스텀 엔드포인트](/docs/docs/ko/local-llms#커스텀-엔드포인트-openai-호환-서버라면-무엇이든)를
  참고하세요.

### 연결 시점의 준비 상태와 온보딩

모든 제공자 칩은 준비되지 않았을 때 정직하게 저하됩니다: 연결 ack가
빠진 정확한 단계를 말합니다 (“ZAI\_API\_KEY를 설정하세요…”, “`codex login`을 실행하세요…”,
“실험 행에서 로그인하세요…”) — 첫 메시지에서 실패하는 대신.
그리고 자격 증명이 나중에 나타나는 제공자는 재시작 없이 다음
연결에서 준비됨으로 뒤집힙니다.

패널은 **연결** 시점에 각 제공자의 준비 상태를 감지합니다 — 구독 제공자는
`PATH`의 CLI 더하기 디스크의 로그인, Ollama는 있는 바이너리
(멈춘 데몬은 연결 시 우아하게 저하). 어느 제공자가 설정되었는지
추측할 필요가 없습니다:

* **온보딩 카드**는 **어떤** 제공자도 준비되지 않았을 때만 나타나며, 제공자마다
  일회성 설정 단계가 있습니다 (Ollama는 로그인이 아니라 설치 + 모델 받기).
* 저장된 제공자 선택이 쓸 수 없으면, 패널이 **준비된 제공자로
  자동 전환**합니다 (설정하면 저장된 선호가 복원됩니다).
* 준비되지 않은 제공자의 행은 동작 중인 에이전트에 설정
  프롬프트를 심는 **"설정"** 작업이 됩니다.

## 각 제공자가 구동되는 방식

오케스트레이터는 제공자 중립 **`AgentBackend`** 포트에
의존합니다 (의존성 주입). 각 제공자는 어댑터입니다:

|                    | Claude                        | ChatGPT (Codex)             | Gemini                                 | Ollama / 어떤 LLM이든                                                                        |
| ------------------ | ----------------------------- | --------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------- |
| 드라이버               | Claude Agent SDK — 지속 스트리밍 세션 | `codex app-server` JSON-RPC | `gemini --acp` (Agent Client Protocol) | 직접 HTTP — Ollama `/api/chat` 또는 어떤 OpenAI 호환 `/v1/chat/completions`. 백엔드가 전체 에이전트 루프를 소유 |
| 인증                 | claude.ai OAuth               | ChatGPT 로그인                 | Google 로그인                             | 없음 (로컬) / bearer 키 (호스팅)                                                                 |
| 라이브 캔버스 도구         | 인프로세스 SDK MCP 서버              | 루프백 streamable-HTTP MCP     | 루프백 streamable-HTTP MCP                | 같은 루프백 MCP 위의 [6도구 라우터](/docs/docs/ko/local-llms)                                             |
| 헤드리스 `comfyui` MCP | 인프로세스                         | 설정 선언 stdio                 | 설정 선언 stdio                            | 라우터 뒤의 컴팩트 모드 stdio 서브프로세스                                                               |

`panel_*` 도구 정의는 **공유 목록 하나**에 살며, 모든 경로에
등록되므로, 라이브 캔버스 표면 (`panel_clear` / `panel_restart_comfyui`의
파괴적 확인 게이팅 포함)이 제공자 사이에
동일합니다. 패리티는 자동입니다 — 어떤 경로도 도구를 다시 구현하지 않습니다. Ollama/어떤-LLM
백엔드는 추가로 두 도구 표면을 라우터 도구 여섯 개 뒤에 감싸
작은 모델이 스키마에 빠지지 않게 합니다 — [로컬 LLM과 다른 에이전트](/docs/docs/ko/local-llms)를 참고하세요.

## 기능 매트릭스

백엔드별 기능 설명자가 제공자가 할 수 없는 기능에서 패널이
**우아하게 저하**하게 합니다:

| 기능                   | Claude          | ChatGPT (Codex)        | Gemini               | Ollama / 어떤 LLM이든            |
| -------------------- | --------------- | ---------------------- | -------------------- | ---------------------------- |
| 지속 채널 (시간에 걸쳐 턴을 푸시) | ✅               | ✅ (스레드 + `turn/start`) | ✅                    | ✅ (메모리 안 히스토리)               |
| 스트리밍 델타              | ✅               | ✅                      | ✅                    | ✅ (NDJSON / SSE)             |
| 턴 중간 중단              | ✅               | ✅ (`turn/interrupt`)   | ✅ (`session/cancel`) | ✅ (요청 중단)                    |
| 대화 롤백 (턴에서 포크)       | ✅ `forkSession` | ⚠️ 게이트 꺼짐              | ⚠️ 게이트 꺼짐            | ⚠️ 게이트 꺼짐                    |
| 인프로세스 MCP 도구         | ✅               | ❌                      | ❌                    | ❌ (MCP 클라이언트 위의 라우터)         |
| 모델 열거                | ✅               | ✅ (`config/read`)      | 정적 카탈로그              | ✅ (`/api/tags` 또는 `/models`) |
| 비전 (이미지 입력)          | ✅               | ✅                      | ✅                    | ❌ (모델 의존. 지금은 꺼짐)            |
| 오디오 입력               | ❌               | ❌                      | ❌                    | ✅ Ollama (확인됨) · ⚠️ 기타 (미검증) |
| 제공자 슬래시 명령어          | ✅               | ❌                      | ❌                    | ❌                            |

### 오디오 입력 — 어느 백엔드가 정직하게 지원하는가

에이전트는 모든 백엔드에서 ComfyUI의 오디오 도구를 구동할 수 있습니다. 오디오 파일을
**듣는 것**은 더 좁고, 위의 표는 의도적으로 보수적입니다.
조용히 떨어진 첨부가 거절된 것보다 나쁘기 때문입니다:

* **Ollama (`ollama` 백엔드, 네이티브 `/api/chat`) — 지원되고, 기능
  확인되며, 처음부터 끝까지 검증됨.** 오디오는 `images[]` 배열을 타며, 이것이
  해킹이 아니라 Ollama 자체의 오디오 운반체입니다. 로컬 Ollama의
  `gemma4:e2b`에 대해 라이브로 확인했고, 실제 WAV를 받아적었습니다.
  * **제공자가 아니라 모델별.** 무엇이든 보내기 전에 백엔드가
    `POST /api/show`로 *이* 모델이 `audio` 기능을 보고하는지 묻습니다. 하지
    않으면, 첨부가 이름으로 거절되고, 보고된 기능 목록이
    인용되며, 들을 수 있는 모델이 말해집니다
    (`ollama pull gemma4:e2b` / `gemma4:e4b` / `nemotron3:33b`). 참고: `GET
    /api/tags`도 `capabilities` 배열을 반환하지만 **같은
    답이 아닙니다** — 같은 모델이 거기서는 오디오 없음, `/api/show`에서는 오디오를
    보고했습니다 — 그래서 `/api/show`만 상담합니다.
  * 오디오를 실어 나르는 모든 턴에서 기능이 다시 확인됩니다. Ollama
    태그가 가변적이기 때문입니다: `ollama pull`이 같은 이름 아래 웨이트를
    바꿀 수 있고, 캐시된 판결이 설명한 모델보다 오래 살 수 있습니다.
* **LM Studio / llama.cpp / OpenRouter / GLM / Kimi / Moonshot / MiniMax /
  Copilot / 커스텀 OpenAI 호환 엔드포인트 — 시도됨, 기능
  확인되지 않음.** 모두 `/v1/chat/completions`를 말하며,
  물을 기능 엔드포인트가 없으므로, 오디오는 `input_audio`
  콘텐츠 파트로 보내지고, 그 턴에 전달이
  **미확인**이라고 말해집니다: *"모델이 실제로 받는지 확인할 수 없습니다 — 답변이
  파일에 있는 것을 반영하지 않으면, 듣지 못한 것입니다."* 대신 거절하면
  기능 API가 없는 모든 엔드포인트에서 오디오를 막을 것입니다.
  실행할 수 없는 가드는 판결이 아닙니다. `input_audio` 형태 자체는
  Ollama의 OpenAI 호환 엔드포인트에 대해 검증되었습니다. *주어진*
  서드파티 호스트가 존중하는지는 확인할 수 있는 것이 아니며, 그렇다고
  주장하지 않습니다.
* **Claude, ChatGPT (Codex), Codex CLI, Gemini, Grok, Antigravity, pi** — 이
  빌드에서 오디오 입력 없음. 오디오 첨부는 턴이 만들어지기 전에 거절되고,
  당신과 모델 모두에게, 제공자를 이름 붙이고 대신 무엇이
  동작할지 말합니다.

  Gemini/Grok에서 이것은 프로토콜 공백이 아니라 의도적 생략입니다: ACP가
  `audio` ContentBlock을 *정의하지만*, 에이전트가 먼저 `audio` 프롬프트
  기능을 광고해야 하고, 어느 CLI도 그렇게 하는 것이 관찰되지
  않았습니다. 절대 연습될 수 없는 보내기 경로, 실패 모드가
  사용자에게 도착하지 않았다고 말해지지 않는 첨부라면, 정직한
  거절보다 나쁩니다 — 그래서 출시하지 않습니다.

**가림** 토글은 *픽셀*에 관한 것입니다: 이미지를 거두고 오디오는
거두지 **않습니다**.

가림의 강제는 에이전트의 **네이티브 도구**에도 닿습니다, comfyui MCP
표면만이 아니라: 내장 Claude 백엔드는 가림이 켜져 있을 때 자체
`Read`/`WebFetch`를 이미지 콘텐츠에서 거부하는 PreToolUse 게이트와 함께
실행됩니다 (확장자 *그리고* 매직 바이트로 래스터 파일, PDF, 노트북 출력,
ComfyUI `/view` URL) — 호출마다 라이브로 읽으므로, 세션 도중 토글이
바로 다음 도구 호출에 묶입니다. API/로컬 레인 (Ollama 계열, GLM, Kimi, 커스텀
엔드포인트)는 우리 도구 표면만 싣므로, MCP 스크럽이 완전히 커버합니다.
**CLI 레인** (Codex, Gemini, Grok, Antigravity, pi, Copilot)은 자체
에이전트 바이너리를 실행하며 내장 파일 도구를 훅할 수 없습니다 — 거기서
가림을 켜면 지킬 수 없는 보장을 암시하는 대신, 정확히 그렇게
말하는 보이는 경고를 게시합니다.

#### 오디오 파일이 턴에 올라가는 방식

오케스트레이터는 패널 `message` 프레임에서 오디오를 두 방식으로 받습니다:

```jsonc theme={null}
{ "type": "message", "text": "what key is this in?",
  "audio":  [{ "filename": "song.mp3", "type": "input" }],   // preferred
  "images": [{ "filename": "song.mp3", "type": "input" }] }  // also routed to audio
```

두 번째 형태가 있는 이유는 `images`만 아는 패널 빌드가
그렇지 않으면 오디오 파일을 비전 콘텐츠 파트에 건넬 것이기 때문입니다. 오디오
확장자가 있는 모든 것은 자동으로 오디오 경로로 옮겨집니다 — 인코딩할 수
없는 형식(`.wma`, `.mid`, `.aiff`)도. 그래서 이미지 오류 대신 "다음 중 하나로
변환하세요…"를 받습니다.

같은 파일을 **두** 배열에 보내는 것(위의 예처럼)은 안전합니다: 참조가
파일명 + 하위 폴더 + 타입으로 식별되므로, 한 번 전달되고
턴당 첨부 두 개 한도에 한 번만 셉니다. 두 번째 파일로 오인되어
맞지 않는다고 거절되지 않습니다.

<Note>
  오디오 파일을 고르는 **입력창 컨트롤**은 패널
  (`comfyui-mcp-panel`)에 살며, 별도 저장소입니다 — 그 부분은 이
  릴리스에 없습니다. 착지할 때까지, 위의 와이어 계약이 클라이언트가 보내는 것이고,
  경로는 오케스트레이터 측에서 처음부터 끝까지 연습됩니다.
</Note>

위의 네이티브 Ollama 경로만 처음부터 끝까지 검증되며, "이 모델이
들을 수 있다"가 가정되지 않고 확립되는 유일한 경로입니다.
OpenAI 호환 경로는 정직한 시도와 정직한 주의입니다. 이 섹션의
나머지는 기능이 아니라 거절을 설명합니다.

**대화 롤백**(채팅을 과거 턴으로 포크)은
Claude 전용입니다. **코드/그래프** 롤백 (`/revert`, Esc 두 번, 턴별
스냅샷)은 제공자가 아니라 오케스트레이터에 살므로 모든 백엔드에서
동작합니다.

## 전환할 때의 추론 강도

강도/모델 선택기는 **제공자별**입니다. 고른 강도는 제공자
전환을 대상 백엔드의 가장 가까운 유효 레벨로 매핑하여 견딥니다
(패널과 오케스트레이터 백엔드가 같은 매핑을 합니다):

* **Claude:** `low` · `medium` · `high` · `xhigh` · `max`
* **ChatGPT (Codex):** `none` · `minimal` · `low` · `medium` · `high` · `xhigh` · `max` · `ultra`
  (GPT-5.6 계열 모델의 `max` / `ultra`)
* **Gemini / Ollama:** 사용자 대면 강도 스케일 없음 — 선택기가 숨겨집니다.

## 지식과 비용 패리티

Claude만 네이티브 스킬을 로드할 수 있으므로, 번들된 전문 지식은
어떤 백엔드든 호출할 수 있는 MCP 도구 하나로 게시됩니다 — `list_packs`. 그 액션이
스킬 (`skill_list`, `skill_read`), 설치 팩 (`list`,
`read_workflow`), 서버의 템플릿 (`list_templates`)을 커버합니다 — 더하기
로컬 GPU 대 유료 API 가드레일 (`action: "check_runtime"`)과 원샷
`panel_load_workflow`. [스킬, 팩 & 런타임 비용](/docs/docs/tools/skills-knowledge)을 참고하세요.

## 참고

* [사이드바 패널](/docs/docs/ko/panel) — 전체 패널 UX
* [로컬 LLM과 다른 에이전트](/docs/docs/ko/local-llms) — 6도구 라우터, 모델 요구 사항, Hermes/OpenClaw/Copilot 설정
* [LLM 아레나](/docs/docs/ko/arena) — 실제 ComfyUI 작업으로 자신의 모델 점수 매기기
* [스킬, 팩 & 런타임 비용](/docs/docs/tools/skills-knowledge) — 패리티 + 비용 도구
* 설계 문서: [`design/agent-backend-injection.md`](https://github.com/artokun/comfyui-mcp/blob/main/design/agent-backend-injection.md)
