ui-chan
ui-chan-mcp
デスクトップマスコットを MCP(Model Context Protocol)経由で操作するサーバ。 Claude Code や任意の MCP 対応エージェントから、マスコットの見た目(顔+腕)と声をまとめて切り替え、 吹き出しでセリフを話させることができます。
表示層は Electron(透過・最前面・画面右下)
立ち絵は PSDTool 形式の PSD(
!=必須レイヤー、*=ラジオ切替)をそのまま利用見た目+声は Cue(1ファイル=1つの完成した見た目+声)という単位で管理。エージェント向けの 視覚操作ツールは
set_cueただ1つ発話キュー・複数エージェント同時接続に対応
立ち絵 PSD はリポジトリに含まれていません(著作権保護された素材のため)。
assets/に PSDTool 対応の PSD を置くと動きます。無い場合はプレースホルダで起動します。 同梱のui-chan.config.jsonとcues/*.jsonは 雨衣(うい)立ち絵素材(坂本アヒル様) のレイヤー構成向けです。 利用は雨衣キャラクターガイドラインの範囲でどうぞ。
セットアップ
→ 図解セットアップ手順 (クローンから画面に出るまで。人が読んでも AI が読んでも分かる粒度で書いてあります。 同じ内容が 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 の追加 UI は GitHub からの 追加のみで、ローカルのフォルダは指定できません)。
/plugin marketplace add /path/to/ui-chan-mcp # ローカルのクローンから
/plugin install ui-chan@ui-chanGitHub から入れる場合は 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"]
}
}
}同じことを1コマンドでやる場合(既存の設定は保持し、.bak を残します):
npm run install-desktop # 解除は npm run install-desktop -- --removeClaude 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ポート —
ui-chan.config.jsonのport、または環境変数UI_CHAN_PORT自動起動 — アプリはセッション開始時(SessionStart フック)と各ツール呼び出し時に、 VoiSona Talk は MCP 起動時と
set_cueのたびに、落ちていれば起こし直されますエージェント名 — MCP クライアント情報から自動取得(
UI_CHAN_AGENT_NAMEで上書き可)
より詳しい実装のガイドは CLAUDE.md を参照。
コマンド一覧
MCP ツール(エージェントが呼ぶ)
ツール | 引数 | 説明 |
|
| Cue(見た目+声)を切り替え、任意でセリフを同時に話す。 |
| — | 現在の状態・接続エージェント・利用可能Cue・好感度・警告 |
|
| 好感度を増減(セッション内のみ・再起動でリセット)。実際の増減量はエンジンが決めます |
| — | 吹き出し・Cueを初期状態( |
Cue の一覧は persona プロンプト(と SessionStart フック)が cues/*.json から起動のたびに
生成してエージェントのコンテキストに渡します。
スラッシュコマンド(プラグイン導入時)
コマンド | 説明 |
| ういちゃんと会話する(作業はしない) |
| セッションごと憑依モードにする。以後の作業も会話もういちゃん本人として行う |
| ういビーム。好感度が閾値未満なら撃ってくれない |
| 14才目線の図解で説明する(HTMLアーティファクト+口頭解説) |
| 人格ファイルを編集したあとの読み込み直し |
npm スクリプト
コマンド | 説明 |
| セットアップの事前チェック(ビルド・PSD・資格情報・エンジン) |
| Claude Desktop に MCP サーバを登録( |
| Electron アプリの起動/終了/再起動 |
|
|
| Cue エディタ「雨衣ちゃんのデバッグルーム」 |
| 対話型デバッグコンソール(MCP 不要・WebSocket 直叩き) |
| アプリ起動込みのデバッグコンソール |
| 状態の取得/Cue・IdlingCue・EventCue 一覧 |
| PSD レイヤー構造のダンプ |
|
|
| Biome |
| MCP stdio 経由の E2E テスト |
Q&A
src/ の TypeScript を直したときだけ。npm install が prepare で1回ビルドするので、
クローン直後も 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秒に1回まで)、REST が応答するまで最大20秒待ちます。
get_state の warnings に理由が出ます。詳しくは docs/TTS.md。
まず npm run app で単体起動を試すと切り分けられます。プラグイン導入時は
SessionStart フックが起動を試みるので、通常はセッションを開くだけで出てきます。
PSD が assets/ に無い場合はプレースホルダ表示になります。
cues/<名前>.json を1ファイル作るだけです。継承なし・完全に自己完結で、保存すると即リロードされます。
ビジュアルに作るなら npm run editor。書式とレイヤー指定は
docs/CUES_AND_CONFIG.md、PSD レイヤー名の早見表は
docs/CUES.md。
persona/ui-chan.md(基本人格とツール使用方針)と context/*.md(SOUL.md 価値観 /
VOCABULARY.md 語彙・NGワード / AFFINITY.md 好感度)です。context/ に置いた Markdown は
ファイル名順に全部エージェントへ注入されます。詳しくは docs/PERSONA.md。
ui-chan.config.json の idle.idlingCues にある minSec / maxSec(既定 120〜300秒)で間隔を、
各 IdlingCue の weight で出やすさを調整します。minAffinity / maxAffinity で
好感度による出し分けもできます。
ui-chan.config.json の eventCues.events です。イベント名ごとにセリフのプールがあり、
cooldownSec(同じ throttleKey を持つイベントで共有)と chance で騒がしさを調整します。
中身は IdlingCue と同じ形なので weight / minAffinity / maxAffinity / hours が使えます。
用意されているイベント:permission(許可待ち)、idle_wait(入力待ち)、tool_failure、
turn_done、compact、agent_out(サブエージェント送り出し)、agent_back(帰還)。
確認は npm run debug の event <イベント名>。フック側(hooks/)はイベント名を投げるだけなので、
セリフを変えるのに JavaScript を触る必要はありません。
npm run dump-psd -- path/to/file.psd でレイヤー名を確認し、ui-chan.config.json と
cues/*.json(土台は cues/default.json)を書き換えます。人格側は persona/ と context/ を
丸ごと差し替えてください。存在しないレイヤーパスは無視され get_state の warnings に出るので、
差し替え作業中もクラッシュはしません。
好感度が閾値(65)に届いていません。感謝・気遣い・覚えていてくれること で上がります。 直球の好意表現はむしろ下がります。
ドキュメント
ファイル | 内容 |
Cue ファイルの書式と | |
PSD レイヤー名カタログ(新規Cue制作用・人間向け) | |
人格の定義場所と注入方法 | |
VoiSona Talk 連携の詳細 | |
図解セットアップ手順(公開アーティファクトの実体) | |
プラグインの更新手順 | |
実装ガイド(AI・コントリビュータ向け) | |
用語とコンセプト |
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