ui-chan
ui-chan-mcp
Сервер для управления настольным маскотоном через MCP (Model Context Protocol). Позволяет из Claude Code или любого MCP-совместимого агента переключать внешний вид маскотона (лицо + руки) вместе с голосом и произносить реплики в облачке.
Отображение — Electron (прозрачный, поверх всех окон, правый нижний угол экрана)
Спрайт — используется как есть PSD в формате PSDTool (
!=обязательный слой,*=радио-переключатель)Внешний вид + голос управляются как Cue (1 файл = один готовый внешний вид + голос). Для агентов есть только один инструмент визуального управления —
set_cueПоддержка очереди речи и одновременного подключения нескольких агентов
Стоячие спрайты PSD не включены в репозиторий (из-за защищённых авторским правом материалов). Работает, если положить PSD, совместимый с PSDTool, в
assets/. Если его нет, приложение запускается с плейсхолдером. Включённыеui-chan.config.jsonиcues/*.jsonрассчитаны на структуру слоёв 雨衣(うい)立ち絵素材(坂本アヒル様). Используйте в рамках 雨衣キャラクターガイドライン.
Установка
→ Иллюстрированные шаги настройки (от клонирования до появления на экране; описано с такой детализацией, что поймёт и человек, и ИИ. То же самое есть в docs/setup-page.html)
Кратко для тех, кто спешит:
git clone https://github.com/Uncle-Peke/ui-chan-mcp.git && cd ui-chan-mcp
npm install # 依存の取得 + ビルド(prepare で dist/ まで作られる)
cp .env.example .env # VoiSona Talk の資格情報(音声を使わないなら不要)
# 立ち絵 PSD を assets/ に配置
npm run doctor # ビルド・PSD・資格情報・エンジン起動をまとめて確認Подключение
Какой бы способ подключения вы ни выбрали, всё готово в момент подключения. Приложение маскотона и VoiSona Talk запускаются автоматически при подключении, а личность передаётся через рукопожатие MCP (instructions). Никакой ручной установки файлов личности не требуется.
Установка как плагина (общий способ для Claude Code / Claude Desktop, рекомендуется)
Реестр плагинов является общим для Claude Code и Claude Desktop. Если зарегистрировать плагин один раз в Claude Code, он появится и в «Настройки → Плагины» в Desktop (с другой стороны, интерфейс добавления в Desktop позволяет добавлять только с GitHub; указать локальную папку нельзя).
/plugin marketplace add /path/to/ui-chan-mcp # ローカルのクローンから
/plugin install ui-chan@ui-chanЕсли устанавливаете с GitHub, укажите Uncle-Peke/ui-chan-mcp (но поскольку dist/ не закоммичен, потребуется отдельно клонировать репозиторий и выполнить npm install).
При установке плагина вместе с ним регистрируется и коннектор (MCP-сервер) (.mcp.json). Вручную регистрировать коннектор не нужно; если сделать и то и другое, один и тот же сервер запустится дважды.
Использовать только MCP-сервер (только коннектор)
Для случаев, когда не нужны скиллы и хуки, а достаточно только инструментов и личности. В Claude Desktop откройте Настройки → Разработчик → Изменить настройки, допишите в claude_desktop_config.json следующее, полностью закройте приложение (⌘Q) и запустите заново. В command вставьте результат which node (окружение Claude Desktop отличается от терминала, поэтому при записи просто node может не найтись).
{
"mcpServers": {
"ui-chan": {
"command": "/usr/local/bin/node",
"args": ["/path/to/ui-chan-mcp/dist/mcp-server.js"]
}
}
}Если нужно сделать то же самое одной командой (существующие настройки сохраняются, остаётся .bak):
npm run install-desktop # 解除は npm run install-desktop -- --removeДля ручной регистрации в Claude Code сделайте следующее. Учётные данные читаются из .env, поэтому env не нужен.
claude mcp add ui-chan -- node /path/to/ui-chan-mcp/dist/mcp-server.jsРазличия по способу установки
Только коннектор | Плагин | |
Инструменты ( | ○ | ○ |
Личность (внедряется через рукопожатие) | ○ | ○ |
Автозапуск приложения и голосового движка | ○ | ○ |
| ✕ | ○ |
Субагенты (talk / mode) | ✕ | ○ |
Автоматические реакции на работу (EventCue) | ✕ | ○ |
Это различие не между Claude Code и Claude Desktop, а между способами установки. В любом из приложений при установке как плагин доступно одно и то же.
Related MCP server: pov
Архитектура
MCP-сервер — это тонкий мост; всё состояние централизовано на стороне Electron-приложения. Даже если несколько агентов подключены одновременно, состояние не разъезжается.
flowchart LR
agent["エージェント<br/>(Claude Code 等)"]
mcp["dist/mcp-server.js<br/>ステートレスなブリッジ"]
subgraph app["Electron アプリ (dist/app/main.js)"]
direction TB
state["UiChanState<br/>発話キュー・好感度・アイドル"]
tts["VoiSonaTalkClient<br/>音声合成"]
renderer["レンダラ<br/>PSD合成・吹き出し・口パク"]
end
voisona["VoiSona Talk<br/>REST API :32766"]
agent -- "stdio (MCP)" --> mcp
mcp -- "WebSocket :8123" --> state
mcp -. "未起動なら自動起動" .-> app
mcp -. "未起動なら自動起動" .-> voisona
state --> tts
tts -- "WAV + 音素タイミング" --> renderer
tts <--> voisona
state -- "IPC (RenderCommand)" --> rendererПорт —
portвui-chan.config.jsonили переменная окруженияUI_CHAN_PORTАвтозапуск — приложение поднимается заново при старте сессии (хук SessionStart) и при каждом вызове инструмента; VoiSona Talk — при запуске MCP и при каждом
set_cue, если они не были запущеныИмя агента — автоматически берётся из информации MCP-клиента (можно переопределить через
UI_CHAN_AGENT_NAME)
Более подробное руководство по реализации см. в CLAUDE.md.
Список команд
MCP-инструменты (вызываются агентом)
Инструмент | Аргументы | Описание |
|
| Переключает Cue (внешний вид + голос) и при необходимости одновременно произносит реплику. Если |
| — | Текущее состояние, подключённые агенты, доступные Cue, уровень симпатии, предупреждения |
|
| Увеличивает или уменьшает уровень симпатии (только в пределах сессии; сбрасывается при перезапуске). Фактическую величину изменения определяет движок |
| — | Сбрасывает облачко и Cue в исходное состояние ( |
Список Cue генерируется при каждом запуске из cues/*.json промптом persona (и хуком SessionStart) и передаётся в контекст агента.
Слэш-команды (при установке плагина)
Команда | Описание |
| Поговорить с Уи-тян (без выполнения работы) |
| Включает режим одержимости на сессию. Далее и работа, и разговоры ведутся от лица самой Уи-тян |
| Уи-бим. Если уровень симпатии ниже порога, не стреляет |
| Объясняет с иллюстрациями с точки зрения 14-летнего (HTML-артефакт + устное объяснение) |
| Перезагрузка после редактирования файла личности |
npm-скрипты
Команда | Описание |
| Предварительная проверка установки (сборка, PSD, учётные данные, движок) |
| Регистрирует MCP-сервер в Claude Desktop (для удаления — |
| Запуск / остановка / перезапуск Electron-приложения |
| Собирает |
| Редактор Cue «Отладочная комната Уи-тян» |
| Интерактивная консоль отладки (MCP не нужен, прямое обращение к WebSocket) |
| Консоль отладки с запуском приложения |
| Получение состояния / списки Cue, IdlingCue, EventCue |
| Дамп структуры слоёв PSD |
| Проверка схемы |
| Biome |
| E2E-тест через MCP stdio |
Q&A
Только когда вы правили TypeScript в src/. Поскольку npm install выполняет сборку один раз через prepare, сразу после клонирования запускать npm run build не нужно. Cue и ui-chan.config.json — это JSON, поэтому сборка не требуется (Cue перезагружаются сразу после сохранения).
Однако MCP-сервер продолжает работать с кодом, который был загружен на момент старта сессии. Даже если пересобрать, изменения не применятся к текущей сессии, поэтому переподключите MCP или откройте сессию заново.
Выполните npm run doctor. Обычные причины: VoiSona Talk не запущен, в .env нет учётных данных, на стороне VoiSona не включён REST API.
Даже без звука облачко появляется, а артикуляция губ работает по кане из reading. VoiSona перезапускается при каждом set_cue (не чаще раза в 30 секунд) и ждёт ответа REST до 20 секунд. Причина отображается в warnings у get_state. Подробнее: docs/TTS.md.
Сначала попробуйте запустить отдельно через npm run app — это поможет локализовать проблему. При установке плагина хук SessionStart пытается запустить приложение, так что обычно оно появляется просто при открытии сессии. Если PSD нет в assets/, отображается плейсхолдер.
Достаточно создать один файл cues/<名前>.json. Без наследования, полностью самодостаточный; после сохранения сразу перезагружается. Для создания в визуальном режиме — npm run editor. Формат и указание слоёв — в docs/CUES_AND_CONFIG.md, шпаргалка по именам слоёв PSD — в docs/CUES.md.
Это persona/ui-chan.md (базовая личность и правила использования инструментов) и context/*.md (SOUL.md — ценности / VOCABULARY.md — словарь и запрещённые слова / AFFINITY.md — уровень симпатии). Все Markdown-файлы в context/ внедряются в агента в порядке имён файлов. Подробнее: docs/PERSONA.md.
Интервал задаётся через minSec / maxSec (по умолчанию 120–300 секунд) в idle.idlingCues файла ui-chan.config.json, а частота появления — через weight каждого IdlingCue. С помощью minAffinity / maxAffinity можно также управлять появлением в зависимости от уровня симпатии.
Это eventCues.events в ui-chan.config.json. Для каждого имени события есть пул реплик; cooldownSec (общий для событий с одинаковым throttleKey) и chance регулируют степень шумности. Содержимое имеет ту же форму, что и IdlingCue, поэтому доступны weight / minAffinity / maxAffinity / hours.
Доступные события: permission (ожидание разрешения), idle_wait (ожидание ввода), tool_failure, turn_done, compact, agent_out (отправка субагента), agent_back (возвращение).
Проверить можно командой event <イベント名> в npm run debug. Сторона хуков (hooks/) только отправляет имя события, поэтому для изменения реплик не нужно трогать JavaScript.
Проверьте имена слоёв через npm run dump-psd -- path/to/file.psd и перепишите ui-chan.config.json и cues/*.json (основа — cues/default.json). Сторону личности замените целиком: persona/ и context/. Несуществующие пути слоёв игнорируются и показываются в warnings у get_state, поэтому при замене краха не будет.
Уровень симпатии не достиг порога (65). Он повышается за благодарность, заботу и то, что вы помните о ней. Прямолинейные выражения симпатии, наоборот, снижают его.
Документация
Файл | Содержание |
Формат файлов Cue и все настройки | |
Каталог имён слоёв PSD (для создания новых Cue, для людей) | |
Где определяется личность и как она внедряется | |
Подробности интеграции с VoiSona Talk | |
Иллюстрированные шаги настройки (фактический файл опубликованного артефакта) | |
Порядок обновления плагина | |
Руководство по реализации (для ИИ и контрибьюторов) | |
Термины и концепции |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to control a Live2D desktop pet's expressions and actions via MCP protocol.MIT
- AlicenseAqualityDmaintenanceEnables LLM agents to capture screenshots, control mouse/keyboard, and manage windows on desktop platforms, primarily Windows, via an MCP server.161MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to show, animate, and control a VRM character on the desktop, including posing and motion installation via MCP tools.1
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to control a desktop virtual character (VRM) by playing animations, showing/hiding the character, and checking runtime status through the MCP protocol.395,2941MIT
Related MCP Connectors
Give AI agents real phone numbers, messages, and voice calls via MCP.
Pocket Agent (aipocketagent.com) MCP server — read tools for personas, apps, and product info.
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Uncle-Peke/ui-chan-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server