Skip to main content
Glama
Uncle-Peke

ui-chan

by Uncle-Peke

ui-chan-mcp

通过 MCP(Model Context Protocol)操作桌面宠物的服务器。 从 Claude Code 或任意支持 MCP 的智能体,可以整体切换宠物的外观(脸+手臂)和声音,并让它在气泡中说出台词。

  • 显示层使用 Electron(透明・置顶・屏幕右下角)

  • 立绘直接使用 PSDTool 格式的 PSD!=必需图层、*=单选切换)

  • 外观+声音以 Cue(1个文件=1套完整的外观+声音)为单位管理。面向智能体的视觉操作工具只有 set_cue 一个

  • 支持说话队列・多个智能体同时连接

立绘 PSD 不包含在仓库中(因为素材受版权保护)。 将兼容 PSDTool 的 PSD 放到 assets/ 即可运行。如果没有,则使用占位符启动。 随附的 ui-chan.config.jsoncues/*.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 的添加界面只能从 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

安装方式的区别

仅连接器

插件

工具(set_cue 等)

人格(通过握手注入)

应用・语音引擎的自动启动

/talk /mode /beam /eli14

子智能体(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.jsonport,或环境变量 UI_CHAN_PORT

  • 自动启动 — 应用在会话开始(SessionStart 钩子)和每次工具调用时,VoiSona Talk 在 MCP 启动时和每次 set_cue 时,如果进程已退出就会重新拉起

  • 智能体名称 — 从 MCP 客户端信息自动获取(可用 UI_CHAN_AGENT_NAME 覆盖)

更详细的实现指南请参阅 CLAUDE.md

命令列表

MCP 工具(由智能体调用)

工具

参数

说明

set_cue

cue, text?, reading?, duration_ms?, pitch?, speed?, volume?, intonation?

切换 Cue(外观+声音),可选同时说出台词。省略 text 时静默切换 Cue。未知的 cue 名会回退到 default,并附带 notepitch/speed/volume/intonation 是仅针对那一句台词的即兴演绎

get_state

当前状态・已连接智能体・可用 Cue・好感度・警告

adjust_affinity

directionup/down), magnitudelow/middle/high

增减好感度(仅限会话内・重启后重置)。实际增减量由引擎决定

clear

将气泡・Cue 重置为初始状态(default

Cue 列表由 persona 提示词(以及 SessionStart 钩子)在每次启动时从 cues/*.json 生成, 并传给智能体的上下文。

斜杠命令(安装插件时)

命令

说明

/talk <消息>

与雨衣酱对话(不进行工作)

/mode [请求]

将会话设为凭依模式。之后的工作和对话都以雨衣酱本人身份进行

/beam

雨衣光束。若好感度低于阈值则不会发射

/eli14 [题目]

以14岁视角图解说明(HTML 工件+口头解说)

/mcp__ui-chan__persona

编辑人格文件后重新加载

npm 脚本

命令

说明

npm run doctor

安装前的预检(构建・PSD・凭据・引擎)

npm run install-desktop

向 Claude Desktop 注册 MCP 服务器(使用 -- --remove 解除)

npm run app / stop / restart

Electron 应用的启动/结束/重启

npm run build

src/ 构建到 dist/npm install 时自动执行)

npm run editor

Cue 编辑器“雨衣酱的调试室”

npm run debug

交互式调试控制台(无需 MCP・直接调用 WebSocket)

npm run debug:launch / debug:restart

包含应用启动的调试控制台

npm run debug:state / debug:list

获取状态/Cue・IdlingCue・EventCue 列表

npm run dump-psd -- assets/foo.psd

转储 PSD 图层结构

npm run validate-cues

验证 cues/*.json 的 schema

npm run lint / lint:fix / format

Biome

node tools/mcp-test.mjs

通过 MCP stdio 的 E2E 测试

Q&A

只有修改了 src/ 中的 TypeScript 时才需要。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秒。 原因会显示在 get_statewarnings 中。详见 docs/TTS.md

可以先运行 npm run app 单独启动来排查。安装插件时, SessionStart 钩子会尝试启动,所以通常只要打开会话就会出现。 如果 assets/ 中没有 PSD,则会以占位符显示。

只需创建 cues/<名称>.json 一个文件即可。无继承・完全自包含,保存后会立即重新加载。 想以可视化方式制作请用 npm run editor。格式与图层指定见 docs/CUES_AND_CONFIG.md,PSD 图层名速查表见 docs/CUES.md

请编辑 persona/ui-chan.md(基本人格与工具使用方针)和 context/*.mdSOUL.md 价值观 / VOCABULARY.md 词汇・NG 词 / AFFINITY.md 好感度)。放在 context/ 中的 Markdown 会 按文件名顺序全部注入到智能体。详见 docs/PERSONA.md

通过 ui-chan.config.jsonidle.idlingCuesminSec / maxSec(默认 120〜300 秒)调整间隔, 通过各 IdlingCue 的 weight 调整出现概率。也可以用 minAffinity / maxAffinity 按好感度区分触发。

请调整 ui-chan.config.jsoneventCues.events。每个事件名都有台词池, 用 cooldownSec(由具有相同 throttleKey 的事件共享)和 chance 调整吵闹程度。 内容与 IdlingCue 形式相同,所以可以使用 weight / minAffinity / maxAffinity / hours

可用事件:permission(等待许可)、idle_wait(等待输入)、tool_failureturn_donecompactagent_out(送出子智能体)、agent_back(归来)。

npm run debugevent <事件名> 确认。钩子侧(hooks/)只负责抛出事件名, 所以修改台词不需要碰 JavaScript。

npm run dump-psd -- path/to/file.psd 确认图层名,然后改写 ui-chan.config.jsoncues/*.json(基础是 cues/default.json)。人格侧请将 persona/context/ 整体替换。 不存在的图层路径会被忽略并显示在 get_statewarnings 中, 所以替换过程中也不会崩溃。

好感度还没有达到阈值(65)。通过感谢、体贴、记得她都会提升。 直白的好意表达反而会下降。

文档

文件

内容

docs/CUES_AND_CONFIG.md

Cue 文件的格式与 ui-chan.config.json 的全部设置项

docs/CUES.md

PSD 图层名目录(用于制作新 Cue・面向人类)

docs/PERSONA.md

人格的定义位置与注入方法

docs/TTS.md

VoiSona Talk 联动的详细信息

docs/setup-page.html

图解设置步骤(公开工件的实体)

docs/PLUGIN_UPDATE.md

插件的更新步骤

CLAUDE.md

实现指南(面向 AI・贡献者)

VISION.md

术语与概念

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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