tt-design-mcp 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 功能概述
6
6
 
7
- - 列出基础组件 / 业务组件
7
+ - 列出基础组件
8
8
  - 查询组件导出位置与推荐导入方式
9
9
  - 查询组件 API 元信息(props、默认值、propTypes、forwardRef、memo)
10
10
  - 查询组件样式元信息(类名、CSS 变量、主题引用)
@@ -15,31 +15,47 @@
15
15
 
16
16
  ## 前置条件
17
17
 
18
- 1. 本机已安装 Node.js
18
+ 1. 本机已安装 Node.js 18+
19
19
  2. 当前项目已安装 `tt-design`
20
- 3. 当前项目可安装开发依赖
21
20
 
22
21
  ## 快速接入
23
22
 
24
- ### 1. 安装依赖
23
+ ### 推荐原则
24
+
25
+ - 业务项目只安装 `tt-design`
26
+ - `tt-design-mcp` 作为本地开发工具使用,不写入业务项目 `package.json`
27
+ - 推荐通过 `npx`、全局安装或独立工具目录运行 `tt-design-mcp`
28
+
29
+ 不推荐在业务项目中执行:
25
30
 
26
31
  ```bash
27
- npm install tt-design
28
32
  npm install -D tt-design-mcp
29
33
  ```
30
34
 
35
+ 原因:
36
+
37
+ - `tt-design-mcp` 依赖 Node.js 18+
38
+ - 一些 Jenkins / CI 环境会安装 `devDependencies`
39
+ - 如果 CI 仍使用 Node.js 14,安装 `tt-design-mcp` 时可能失败
40
+
41
+ ### 1. 安装业务依赖
42
+
43
+ ```bash
44
+ npm install tt-design
45
+ ```
46
+
31
47
  ### 2. 配置 MCP Client
32
48
 
33
49
  如果使用 Claude Code,推荐在已安装 `tt-design` 的项目根目录执行:
34
50
 
35
51
  ```bash
36
- claude mcp add --scope project --transport stdio tt-design -- npx tt-design-mcp
52
+ claude mcp add --scope project --transport stdio tt-design -- npx -y tt-design-mcp
37
53
  ```
38
54
 
39
55
  如果在 Windows 上使用 Claude Code,请加上 `cmd /c` 包装:
40
56
 
41
57
  ```bash
42
- claude mcp add --scope project --transport stdio tt-design -- cmd /c npx tt-design-mcp
58
+ claude mcp add --scope project --transport stdio tt-design -- cmd /c "npx -y tt-design-mcp"
43
59
  ```
44
60
 
45
61
  如果需要手动配置,也可以在 Claude Code 等 MCP Client 的配置中添加:
@@ -65,20 +81,73 @@ claude mcp add --scope project --transport stdio tt-design -- cmd /c npx tt-desi
65
81
 
66
82
  能正常返回结果即表示接入成功。
67
83
 
84
+ ## 本地使用规范
85
+
86
+ 推荐团队统一采用下面这套流程:
87
+
88
+ 1. 业务项目依赖里只保留 `tt-design`
89
+ 2. 本地 MCP Client 统一用 `npx -y tt-design-mcp`
90
+ 3. `tt-design-mcp` 不进入业务项目的 `dependencies` 或 `devDependencies`
91
+ 4. 本地运行 MCP 时使用 Node.js 18+,不影响业务项目现有构建 Node 版本
92
+
93
+ 这样可以同时满足:
94
+
95
+ - 开发者本地可正常使用 MCP
96
+ - Jenkins / CI 不会因为安装 `tt-design-mcp` 失败
97
+ - 不污染业务项目锁文件和依赖树
98
+
99
+ ## 其他本地接入方案
100
+
101
+ ### 方案二:全局安装
102
+
103
+ 如果团队成员经常使用,可以在本机全局安装:
104
+
105
+ ```bash
106
+ npm install -g tt-design-mcp
107
+ ```
108
+
109
+ 然后在 MCP Client 中配置:
110
+
111
+ ```json
112
+ {
113
+ "mcpServers": {
114
+ "tt-design": {
115
+ "command": "tt-design-mcp",
116
+ "args": []
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### 方案三:独立工具目录
123
+
124
+ 如果希望进一步与业务项目隔离,可以在本机单独创建工具目录:
125
+
126
+ ```bash
127
+ mkdir -p ~/dev-tools/tt-design-mcp
128
+ cd ~/dev-tools/tt-design-mcp
129
+ npm init -y
130
+ npm install tt-design-mcp
131
+ ```
132
+
133
+ 然后让 MCP Client 指向该目录下的可执行文件或通过该目录内的 `npx` 启动。
134
+
68
135
  ## 可用工具
69
136
 
70
137
  ### `list_components`
71
- 列出组件,支持按分类或关键字过滤。
138
+
139
+ 列出基础组件,支持关键字过滤。
72
140
 
73
141
  ```
74
142
  输入参数:
75
- category?: "basic" | "business" # 可选,按组件分类过滤
143
+ category?: "basic" # 可选,仅支持基础组件
76
144
  keyword?: string # 可选,按名称子串过滤
77
145
 
78
- 适用场景:查看当前有哪些组件,查找某类组件是否存在
146
+ 适用场景:查看当前有哪些基础组件,按名称筛选基础组件
79
147
  ```
80
148
 
81
149
  ### `find_component_exports`
150
+
82
151
  查询组件导出位置和推荐导入方式。
83
152
 
84
153
  ```
@@ -89,6 +158,7 @@ claude mcp add --scope project --transport stdio tt-design -- cmd /c npx tt-desi
89
158
  ```
90
159
 
91
160
  ### `get_component_api`
161
+
92
162
  查询组件 API 元信息。
93
163
 
94
164
  ```
@@ -99,6 +169,7 @@ claude mcp add --scope project --transport stdio tt-design -- cmd /c npx tt-desi
99
169
  ```
100
170
 
101
171
  ### `get_component_style`
172
+
102
173
  查询组件样式元信息。
103
174
 
104
175
  ```
@@ -112,12 +183,12 @@ claude mcp add --scope project --transport stdio tt-design -- cmd /c npx tt-desi
112
183
 
113
184
  常见错误及排查:
114
185
 
115
- | 错误码 | 说明 | 排查建议 |
116
- |--------|------|----------|
117
- | `METADATA_LOAD_FAILED` | 未找到 `tt-design` 包 | 确认当前项目已安装 `tt-design` |
118
- | `METADATA_FILE_INVALID` | 元数据文件损坏或格式不兼容 | 确认 `tt-design` 版本与 `tt-design-mcp` 兼容 |
119
- | `COMPONENT_NOT_FOUND` | 组件不在元数据中 | 确认组件名大小写正确 |
120
- | `INVALID_COMPONENT_NAME` | 组件名格式无效 | 组件名只能包含字母、数字、下划线、美元符 |
186
+ | 错误码 | 说明 | 排查建议 |
187
+ | ------------------------ | ----------------- | ------------------------------------- |
188
+ | `METADATA_LOAD_FAILED` | 未找到 `tt-design` 包 | 确认当前项目已安装 `tt-design` |
189
+ | `METADATA_FILE_INVALID` | 元数据文件损坏或格式不兼容 | 确认 `tt-design` 版本与 `tt-design-mcp` 兼容 |
190
+ | `COMPONENT_NOT_FOUND` | 组件不在元数据中 | 确认组件名大小写正确 |
191
+ | `INVALID_COMPONENT_NAME` | 组件名格式无效 | 组件名只能包含字母、数字、下划线、美元符 |
121
192
 
122
193
  ## 发布到 npm
123
194
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tt-design-mcp",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "MCP server for querying tt-design component metadata",
5
5
  "type": "module",
6
6
  "bin": {
package/src/server.mjs CHANGED
@@ -81,9 +81,9 @@ export function createServer() {
81
81
  server.registerTool(
82
82
  'list_components',
83
83
  {
84
- description: 'List tt-design components with optional category and keyword filters.',
84
+ description: 'List basic tt-design components with optional keyword filtering.',
85
85
  inputSchema: {
86
- category: z.enum(['basic', 'business']).optional(),
86
+ category: z.enum(['basic']).optional(),
87
87
  keyword: z.string().min(1).optional(),
88
88
  },
89
89
  outputSchema: envelopeOutputSchema,
@@ -1,6 +1,6 @@
1
1
  import { ok, fail } from '../utils/result.mjs';
2
2
 
3
- const VALID_CATEGORIES = new Set(['basic', 'business']);
3
+ const VALID_CATEGORIES = new Set(['basic']);
4
4
 
5
5
  /**
6
6
  * List tt-design components with optional filters.
@@ -10,10 +10,10 @@ const VALID_CATEGORIES = new Set(['basic', 'business']);
10
10
  */
11
11
  export function listComponents(meta, { category, keyword } = {}) {
12
12
  if (category != null && !VALID_CATEGORIES.has(category)) {
13
- return fail('INVALID_FILTER', 'category must be one of: basic, business', { category });
13
+ return fail('INVALID_FILTER', 'category must be one of: basic', { category });
14
14
  }
15
15
 
16
- let components = meta.components.components;
16
+ let components = meta.components.components.filter((component) => component.category === 'basic');
17
17
 
18
18
  if (category) {
19
19
  components = components.filter((component) => component.category === category);