模型 / 数据集
AI-QL/tuui avatar
AI-QL/tuui

TUUI:把 MCP 服务器和多家 LLM 塞进一个桌面客户端的取舍

A desktop MCP client designed as a tool unitary utility integration, accelerating AI adoption through the Model Context Protocol (MCP) and enabling cross-vendor LLM API orchestration.

1,154 个 Star108 个 ForkTypeScriptApache-2.0

秒懂

它是什么?
TUUI 是一个基于 TypeScript 与 Vue3/Vuetify 的桌面 MCP 客户端,用 JSON 文件配置 LLM 端点与 MCP 服务器,支持 Tools、Prompts、Resources、Sampling、Elicitation 与 MCPB 扩展。本文梳理它的配置机制、真实约束,以及它不适合的场景。
适合谁用?
如果你需要在本地同时挂多个厂商的 LLM 端点、又想让 MCP 服务器以 JSON 文件形式集中管理,TUUI 的配置模型是直接可读的,导入后落在 localStorage,也能从 Tray Menu 一键清空。反过来,如果你的工作流依赖 MCP 的 Roots 能力,README 的兼容表里这一项标的是未实现,作者给出的理由是 Roots 主要服务 Vibe Coding 类 IDE、通常可用服务器环境变量替代,这个替代在需要动态切换工作区根目录时会失效。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 125 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它要解决的是端点与服务器两头分散的问题

用 MCP 的人通常有两份配置要维护。一份是 LLM 侧:API key、base url、path、model 名称,每家厂商写法不同,OpenRouter 的路径是 /v1/chat/completions,DeepInfra 却是 /v1/openai/chat/completions。另一份是 MCP 服务器侧:进程怎么起、参数怎么传。TUUI 把这两份配置都收进桌面应用,README 描述它是一个基于 MCP 的 LLM 聊天桌面应用,定位是 tool unitary utility integration。目标用户是需要在本地同时试多家模型、又要挂载 MCP 工具的开发者,而不是只想聊天的一般用户。README 顶部四个标签写得很直白:零账号、完全控制、开源、下载即用。

配置是一段 JSON,单对象或数组都收

LLM 端点不用图形界面点选,而是直接写 JSON。README 给出的 Qwen 模板包含这些键:name、apiKey、url、path、model、modelList、maxTokensValue、mcp。其中 url 与 path 是分开的,这解释了为什么同一份配置能指向 DashScope 的 compatible-mode 加 /v1/chat/completions,也能指向 DeepInfra 的 /v1/openai/chat/completions。mcp 这个布尔值控制该端点是否启用 MCP 相关能力,所以关掉它就能得到一个纯聊天后端。

配置可以是单个对象,也可以是数组。数组形式下每个元素是一个独立 chatbot,README 的示例里第一个叫 Openrouter && Proxy,带 urlList 字段列出 api3.aiql.com 与 openrouter.ai/api 两个地址,modelList 里混着 openai/gpt-4.1-mini、anthropic/claude-sonnet-4、google/gemini-2.5-pro-preview。第二个叫 DeepInfra,modelList 里是 Qwen3-32B 与 Meta-Llama-3.1-70B-Instruct。值得注意的是 modelList 与 urlList 都是数组,前者决定界面里能切哪些模型,后者提供备用地址,这两个键在单对象模板里没有出现,说明它们是可选的。

默认配置文件的位置与打包后的迁移

仓库里内置了四份默认配置:LLM 端点在 src/main/assets/config/llm.json,MCP 服务器在 src/main/assets/config/mcp.json,启动页新闻在 startup.json,启动弹窗提示在 popup.json。README 说明完整的 LLM 配置类型定义在 src/preload/llm.d.ts,想知道 maxTokensValue 之类字段接受什么值,应该去看这个类型文件而不是猜。

打包之后路径会变。README 明确写了 src/main/assets/config/llm.json 在构建产物里位于 resources/assets/config/llm.json,所以想改已发布版本的默认值,改的是 resources 下那一份。改完或导入的配置默认存进 localStorage,而不是回写文件。清空的做法是从 Tray Menu 里选择清除全部配置。这个设计意味着配置有两层:随包分发的默认值,和用户本地覆盖后的 localStorage 副本,排查问题时先分清当前生效的是哪一层。

MCP 支持清单里有一条明确的空缺

README 的 MCP 功能表把服务端能力 Tools、Prompts、Resources 都标为已支持,客户端能力 Sampling 与 Elicitation 也已支持,Registry 的 Discovery 和 MCPB(即 .mcpb,原 Desktop Extensions / .dxt 的新名字)同样打了勾。唯一未实现的是 Roots,作者在备注里解释了原因:Roots 一般只用于 Vibe Coding 类 IDE,通常可以用服务器环境变量来配置。

这个取舍值得直说。用环境变量替代 Roots,等于把工作区根目录在服务器启动时就固定下来,运行期无法再通过协议协商变更。如果你的 MCP 服务器需要根据当前项目动态切换根目录,TUUI 在这一项上是缺的,不是配置没写对。反过来说,如果你的服务器本来就靠环境变量接收路径,这条空缺不影响你。

跑起来之前要装什么

README 把前置条件按服务器类型拆开了。基于 NPX 或 NODE 的服务器需要装 Node.js,用来执行 JavaScript 与 TypeScript 工具;基于 UV 或 UVX 的服务器需要 Python 加 UV 库;基于 Docker 的服务器需要 DockerHub。LLM 后端则要求支持 tool/function calling,这是 MCP 功能能否工作的前提,不支持函数调用的后端挂上去也用不了工具。

macOS 与 Linux 用户还要多一步:README 说要修改默认的 MCP 配置,例如调整 CLI 路径或权限,并指向文档里的 MCP Server Issue 一节。这一条被单独列出来,说明在这两个平台上开箱即用程度不如 Windows。开发者要自己构建的话,README 指向 docs/src/en/installation-and-build/getting-started.md 和中文版 docs/src/zhHans/installation-and-build/getting-started.md。普通用户直接去 Releases 页面下载。

这个项目本身是 AI 生成的实验品

README 有一段不常见但很关键的自我说明:这个仓库本质上是一个基于 MCP 的 LLM 聊天桌面应用,同时也是一次用 AI 创建完整项目的实验,许多组件是从原型项目直接转换或由 AI 生成的。作者由此引入了严格的语法检查与命名规范,并要求后续开发必须使用他配置好的 lint 工具来检查和自动修复语法问题。

对打算贡献代码或 fork 的人来说,这句话改变了评估方式。代码风格的一致性由工具保证,但生成来源意味着你需要更仔细地读实现,而不是假设某段逻辑经过人工推敲。README 没有说明哪些文件是生成的、哪些是手写的,所以这个边界得自己判断。技术栈方面,徽章显示前端用 Vue3 加 Vuetify,状态管理走 Pinia store,语言是 TypeScript,许可证是 Apache-2.0。

和现成工具比,它的差异在哪

MCP 官方生态里有两个常被拿来类比的工具。Claude Desktop 是 Anthropic 自家的桌面客户端,MCP 服务器配置写在它自己的配置文件里,模型侧基本绑定 Claude。TUUI 的差异在模型侧:llm.json 支持数组形式挂多个厂商端点,示例里同时出现 OpenRouter、DeepInfra、Qwen 与自托管,切换模型是在应用内完成的。代价是每家厂商的 url 与 path 组合要自己填对,写错不会有人替你纠正。

另一个是 MCP Inspector,它是调试工具,用来观察某台 MCP 服务器暴露了哪些 Tools、Prompts、Resources,本身不是聊天界面。TUUI 更接近日常使用:把服务器挂上,用聊天驱动工具调用。README 的 topics 里同时列了 mcp-inspector 与 mcp-client,但功能表描述的是 Discovery 与 MCPB 这类客户端侧集成,不是协议级调试面板。所以两者不是替代关系,调试服务器协议行为仍然该用 Inspector。

维护成本与许可

从发布节奏看,v1.5.0 在 2026-03-08,v1.5.1 在 2026-05-14,中间隔了约两个月,期间还有一次 v1.5.0-beta。这个频率说明项目在持续更新,但 README 没有给出任何兼容性承诺或版本支持策略,升级前无法从文档判断配置格式是否会变。llm.d.ts 是判断字段是否变动的唯一依据,升级后如果 llm.json 报错,先比对这份类型定义。

许可证是 Apache-2.0,属于宽松许可,允许修改与再分发,通常附带专利授权条款。README 没有提到商标使用限制或商业支持渠道,所以涉及二次分发或改名发布时,具体条款需要自己读 LICENSE 文件确认,这里不构成法律意见。另外配置文件默认落在 localStorage 而非文件系统,备份与迁移要留意这一点。

编辑结论

如果你需要在本地同时挂多个厂商的 LLM 端点、又想让 MCP 服务器以 JSON 文件形式集中管理,TUUI 的配置模型是直接可读的,导入后落在 localStorage,也能从 Tray Menu 一键清空。反过来,如果你的工作流依赖 MCP 的 Roots 能力,README 的兼容表里这一项标的是未实现,作者给出的理由是 Roots 主要服务 Vibe Coding 类 IDE、通常可用服务器环境变量替代,这个替代在需要动态切换工作区根目录时会失效。下载安装包之前先确认三件事:你的 LLM 后端是否支持 tool/function calling,因为 README 把它列为 MCP 功能的前置条件;你的 MCP 服务器走的是 NPX、UVX 还是 Docker,三者分别要求 Node.js、Python 加 UV、DockerHub;以及在 macOS 或 Linux 上你是否愿意按文档调整默认 MCP 配置里的 CLI 路径与权限。

官方来源

  1. AI-QL/tuui on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
社区笔记

社区笔记