Skip to content

MCP Server Picker 插件选择器

MCP Server Picker 组件是一个用于展示和管理插件的组件,支持已安装插件和插件市场两个标签页,可以进行插件的添加、删除和启用/禁用操作。

基础用法

loading

插件添加状态

市场插件支持三种添加状态,提供更好的用户体验:

  • idle: 未添加状态,显示"添加"按钮,用户可以点击添加
  • loading: 添加中状态,显示"添加中"按钮,按钮不可点击,适用于网络请求等异步操作
  • added: 已添加状态,显示"已添加"按钮,按钮不可点击

通过 addState 属性控制插件的添加状态,开发者可以在添加插件的异步过程中动态更新状态,提升用户体验。

状态控制示例

typescript
const handlePluginAdd = (plugin: PluginInfo) => {
  const targetPlugin = marketPlugins.value.find((p) => p.id === plugin.id)!
  
  // 设置为加载状态
  targetPlugin.addState = 'loading'
  
  // 异步添加插件
  addPluginToServer(plugin)
    .then(() => {
      // 添加成功
      targetPlugin.addState = 'added'
      // 添加到已安装列表
      installedPlugins.value.push(newPlugin)
    })
    .catch(() => {
      // 添加失败,重置为idle状态,用户可以重新尝试
      targetPlugin.addState = 'idle'
    })
}

弹出方式

MCP Server Picker 组件支持两种弹出方式, 即 Fixed 模式和 Drawer 模式,通过 popupConfig 配置对象统一管理

loading

API

Props

数据源配置

属性类型默认值说明
installedPluginsPluginInfo[][]已安装插件列表
marketPluginsPluginInfo[][]市场插件列表

搜索与筛选

属性类型默认值说明
enableSearchbooleantrue是否启用搜索功能
searchPlaceholderstring'搜索插件'搜索框占位符
enableMarketCategoryFilterbooleantrue是否启用市场分类筛选功能
marketCategoryOptionsMarketCategoryOption[][]市场分类选项列表
marketCategoryPlaceholderstring'按照分类筛选'分类筛选下拉框占位符

面板控制

属性类型默认值说明
visiblebooleanfalse是否显示整个组件面板(支持 v-model:visible)
activeCountnumber-激活插件数量(支持 v-model:activeCount)
defaultActiveTab'installed' | 'market''installed'默认激活的标签页
showInstalledTabbooleantrue是否显示已安装标签页
showMarketTabbooleantrue是否显示市场标签页
installedTabTitlestring'已安装插件'已安装标签页标题
marketTabTitlestring'市场'市场标签页标题
popupConfigPopupConfig{ type: 'fixed', position: {}, drawer: { direction: 'right' } }弹出配置对象

头部配置

属性类型默认值说明
titlestring'插件'组件标题
showCustomAddButtonbooleantrue是否显示自定义添加按钮
customAddButtonTextstring'自定义添加'自定义添加按钮文本

行为控制

属性类型默认值说明
allowPluginTogglebooleantrue是否允许切换插件状态
allowToolTogglebooleantrue是否允许切换工具状态
allowPluginDeletebooleantrue是否允许删除插件
allowPluginAddbooleantrue是否允许添加插件

状态控制

属性类型默认值说明
loadingbooleanfalse已安装插件加载状态
marketLoadingbooleanfalse市场插件加载状态

Events

搜索与筛选

事件名参数默认说明
market-category-change(category: string)市场分类筛选变化
installedSearchFn(query: string, item: PluginInfo) => boolean默认按 name 包含匹配已添加插件搜索函数
marketSearchFn(query: string, item: PluginInfo) => boolean默认按 name 包含匹配市场插件搜索函数

面板控制

事件名参数说明
update:visible(visible: boolean)面板显示状态变化
update:activeCount(count: number)激活插件数量变化
tab-change(activeTab: 'installed' | 'market')标签页切换

插件操作

事件名参数说明
plugin-toggle(plugin: PluginInfo, enabled: boolean)插件启用/禁用
plugin-delete(plugin: PluginInfo)删除插件
plugin-add(plugin: PluginInfo)市场插件添加
plugin-create(type: 'form' | 'code', data: PluginCreationData)插件创建

工具操作

事件名参数说明
tool-toggle(plugin: PluginInfo, toolId: string, enabled: boolean)工具启用/禁用

其他

事件名参数说明
refresh(tab: 'installed' | 'market')刷新请求

Types

PluginInfo

插件信息类型:

typescript
type PluginAddState = 'idle' | 'loading' | 'added'

interface PluginInfo {
  id: string              // 插件唯一标识
  name: string            // 插件名称
  icon: string            // 插件图标URL
  description: string     // 插件描述
  enabled: boolean       // 是否启用
  expanded?: boolean      // 是否展开
  tools: PluginTool[]    // 工具列表
  addState?: PluginAddState // 市场插件添加状态(可选): 'idle' - 未添加, 'loading' - 添加中, 'added' - 已添加
  category?: string       // 插件分类(可选,用于市场分类筛选)
}

PluginTool

插件工具类型:

typescript
interface PluginTool {
  id: string              // 工具唯一标识
  name: string            // 工具名称
  description: string     // 工具描述
  enabled: boolean        // 是否启用
}

MarketCategoryOption

市场分类选项类型:

typescript
interface MarketCategoryOption {
  value: string           // 分类值
  label: string           // 分类显示名称
}

PluginFormData

表单方式添加插件数据类型:

typescript
interface PluginFormData {
  name: string            // 插件名称
  description: string     // 插件描述
  type: 'sse' | 'streamableHttp'  // 插件类型, sse 或 streamableHttp
  url: string             // 插件 URL
  headers: string         // 请求头(JSON 格式字符串)
  thumbnail?: File | null // 缩略图文件(可选)
}

PluginCreationData

PluginCreationData 类型是 PluginFormData 或 string 的联合类型,用于表示插件创建的数据。

typescript
type PluginCreationData = PluginFormData | string

PopupConfig

弹窗配置类型:

typescript
interface PopupConfig {
  type: 'fixed' | 'drawer'
  // fixed模式配置
  position?: {
    top?: string | number
    left?: string | number
    right?: string | number
    bottom?: string | number
  }
  // drawer模式配置
  drawer?: {
    direction: 'left' | 'right'
  }
}

McpAddForm 插件添加表单

McpAddForm 是一个用于添加插件的表单组件,支持表单添加和代码添加两种方式。

代码示例

基础用法

loading

API

Props

Prop NameDescriptionTypeRequiredDefault
addType当前添加方式AddTypeform
formData表单数据McpAddFormData
codeData代码数据string

Emits

Event NameDescriptionParameters
update:addType添加方式变化时触发(value: AddType)
confirm确认添加时触发(type: AddType, data: McpAddFormData | string)
cancel取消添加时触发

类型定义

AddType

typescript
type AddType = 'form' | 'code'

McpAddFormData

typescript
interface McpAddFormData {
  name: string
  description: string
  type: 'sse' | 'streamableHttp'
  url: string
  headers: string
  thumbnail?: File | null
}

CSS 变量

McpAddForm 组件支持以下 CSS 变量来自定义样式:

全局变量 (:root)

变量名描述
--tr-mcp-add-form-box-shadow容器阴影
--tr-mcp-add-form-content-padding内容区域内边距
--tr-mcp-add-form-add-type-gap添加类型区域间距
--tr-mcp-add-form-add-type-margin-bottom添加类型区域下边距
--tr-mcp-add-form-add-type-label-font-size标签字体大小
--tr-mcp-add-form-add-type-label-font-weight标签字体粗细
--tr-mcp-add-form-add-type-label-line-height标签行高
--tr-mcp-add-form-add-type-label-color标签文字颜色
--tr-mcp-add-form-footer-padding底部区域内边距
--tr-mcp-add-form-footer-gap底部按钮间距
--tr-mcp-add-form-button-border-radius按钮圆角
--tr-mcp-add-form-button-padding按钮内边距
--tr-mcp-add-form-button-font-size按钮字体大小
--tr-mcp-add-form-button-height按钮高度
--tr-mcp-add-form-button-line-height按钮行高
--tr-mcp-add-form-button-min-width按钮最小宽度
--tr-mcp-add-form-button-transition按钮过渡效果
--tr-mcp-add-form-cancel-bg-color取消按钮背景色
--tr-mcp-add-form-cancel-border-color取消按钮边框色
--tr-mcp-add-form-cancel-text-color取消按钮文字颜色
--tr-mcp-add-form-cancel-hover-border-color取消按钮悬停边框色
--tr-mcp-add-form-confirm-bg-color确认按钮背景色
--tr-mcp-add-form-confirm-border-color确认按钮边框色
--tr-mcp-add-form-confirm-text-color确认按钮文字颜色
--tr-mcp-add-form-confirm-hover-bg-color确认按钮悬停背景色
--tr-mcp-add-form-confirm-hover-border-color确认按钮悬停边框色

响应式变量:

变量名描述
--tr-mcp-add-form-add-type-gap-mobile移动端添加类型区域间距

变量覆盖

默认模式

css
:root {
  --tr-mcp-add-form-max-width: 600px;
}

自定义按钮颜色

css
:root {
  --tr-mcp-add-form-confirm-bg-color: #1890ff;
  --tr-mcp-add-form-confirm-border-color: #1890ff;
  --tr-mcp-add-form-confirm-hover-bg-color: #40a9ff;
}