dsh-armory 2.2.1 → 2.3.1
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.en.md +26 -22
- package/README.md +29 -21
- package/docs/installation.md +0 -2
- package/lib/client.js +2495 -744
- package/lib/community-meta.js +222 -0
- package/lib/expert-market.js +119 -23
- package/lib/index.js +276 -92
- package/lib/loadout.js +178 -0
- package/lib/mcp-config.js +0 -171
- package/lib/mcp-oauth.js +2 -4
- package/lib/npm-downloads.js +262 -0
- package/lib/suites-registry.js +10 -4
- package/lib/tool-ledger.js +93 -0
- package/lib/typert.js +13 -10
- package/lib/wb-awesome-market.js +706 -214
- package/lib/wb-install-state.js +10 -4
- package/lib/wb-market.js +99 -27
- package/lib/wb-registry.js +32 -31
- package/lib/whats-new-en.js +31 -0
- package/lib/whats-new.js +37 -0
- package/package.json +2 -2
- package/docs/mcp-market-design.md +0 -617
- package/lib/mcp-catalog-en.js +0 -244
- package/lib/mcp-catalog.js +0 -806
- package/lib/wb-plugin-market.js +0 -291
package/lib/mcp-catalog.js
DELETED
|
@@ -1,806 +0,0 @@
|
|
|
1
|
-
// MCP 服务目录 —— 「MCP 市场」的数据源。
|
|
2
|
-
//
|
|
3
|
-
// ⚠️ 本文件由 `scripts/build-catalog.mjs` 从 `.tasks/mcp-servers-verified.yaml` 生成。
|
|
4
|
-
// 要增删条目请改那份 YAML(它逐条带来源),然后重跑:
|
|
5
|
-
//
|
|
6
|
-
// node scripts/build-catalog.mjs
|
|
7
|
-
//
|
|
8
|
-
// 为什么目录单独成文件,不留在 `mcp-config.js`:那个文件管**配置读写**(解析 patch、校验
|
|
9
|
-
// serverName、归一化表达式),目录是**数据**。两者变更频率差一个数量级——上游改配置格式可能
|
|
10
|
-
// 几个月一次,收录一个 MCP 是每天都能发生的事。混在一起会让「加一条收录」这种低风险改动
|
|
11
|
-
// 去动一个高风险文件。
|
|
12
|
-
//
|
|
13
|
-
// 字段约定(`test/mcp-catalog.test.mjs` 逐条校验):
|
|
14
|
-
//
|
|
15
|
-
// id 短标识,小写连字符。写进配置的 serverName 就是它,所以**一旦发布不能改**。
|
|
16
|
-
// label 显示名。
|
|
17
|
-
// summary 一句话说明。
|
|
18
|
-
// category 见 mcp-config.js 的 MCP_CATEGORIES,市场按它分组。
|
|
19
|
-
// vendor 提供方。详情页显示,也用来区分官方与第三方。
|
|
20
|
-
// access 中文,如实说清免费额度与是否需要 Key。**不要美化**。
|
|
21
|
-
// auth 结构化鉴权标记,取值域见 `AUTH_KINDS`('none' | 'apiKey' | 'oauth' |
|
|
22
|
-
// 'oauth-or-pat')。与 `access` 的分工:`access` 给人读,`auth` 给程序判——
|
|
23
|
-
// 面板据此提前告诉用户「这条装不了」,而不是等连接失败了再猜。
|
|
24
|
-
// authNote 一句话说明「该怎么配」或「为什么装不了」。只在 auth !== 'none' 时写。
|
|
25
|
-
// 可选:省略时面板只显示 auth 的通用文案。
|
|
26
|
-
// transport 'streamable-http' | 'stdio'。
|
|
27
|
-
// url/headers 仅 HTTP 型。
|
|
28
|
-
// command/args 仅 stdio 型。
|
|
29
|
-
// packages 该服务的包名,用于识别「用户已经装过这一条」。HTTP 型也要写——同一服务常常
|
|
30
|
-
// 既有远端 endpoint 又有本地 npx 包,装了哪种都算装过。这层知识推不出来。
|
|
31
|
-
// envKeys 用户需要提供哪些环境变量。省略/空 = 不需要凭据。
|
|
32
|
-
// placeholders args/command 里含 `<占位符>` 的片段。这类条目**装完还不能直接用**,市场会
|
|
33
|
-
// 提示先改;不标出来就会拿 `<仓库路径>` 当真实路径去启动。
|
|
34
|
-
// homepage 官方文档或仓库。详情页的「文档」入口。
|
|
35
|
-
//
|
|
36
|
-
// 收录纪律:**宁可少,不可错**。一条装不上的配置比没有这条更糟——用户会以为是插件的锅。
|
|
37
|
-
// 所以只收能追到官方文档/官方仓库的条目;拿不到一手来源的宁可不收(哪些被排除、为什么,
|
|
38
|
-
// 见 `.tasks/mcp-servers-report.md`)。
|
|
39
|
-
//
|
|
40
|
-
// ⚠️ 已知边界:DSH 的 mcp-client **不支持 OAuth 交互授权**(transport.ts 只传
|
|
41
|
-
// `requestInit.headers`,没有 authProvider)。所以只支持 OAuth、拿不到静态 Token 的
|
|
42
|
-
// 远端服务在这个宿主里**用不了**,本目录不收录。`access` 字段如实标注每条要什么凭据。
|
|
43
|
-
//
|
|
44
|
-
// OPT-24:加结构化 `auth` 标记(枚举 AUTH_KINDS),补「access 只有自由文本」的缺口。
|
|
45
|
-
// 为什么:`access` 写得再细也只有人读得到,面板没法据此判断「这条在当前宿主装不上」。
|
|
46
|
-
// OAuth-only 的条目装完只会得到一个连不上的连接,用户以为是插件的锅。有了这枚枚举,
|
|
47
|
-
// 市场能在点击安装**之前**就把「需 OAuth、本宿主不支持」摊开说。
|
|
48
|
-
// 判定依据仍是 `access` 原文(不凭服务名猜);拿不准时选 'oauth-or-pat' 而非 'oauth'
|
|
49
|
-
// —— 误判成 oauth 会让用户以为装不了,代价比反过来大得多。
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 分类的展示顺序(唯一真相源)。
|
|
53
|
-
*
|
|
54
|
-
* 它靠重排下面的 `MCP_CATALOG` 生效:面板的 chips 取自目录里的**首次出现序**,
|
|
55
|
-
* 所以这个数组的顺序就是用户看到的顺序。改顺序 = 改这里,不要手工重排 MCP_CATALOG。
|
|
56
|
-
* 中文标签见 CATEGORY_LABELS,两者由生成器校验为同一集合。
|
|
57
|
-
* @type {ReadonlyArray<string>}
|
|
58
|
-
*/
|
|
59
|
-
export const CATEGORY_ORDER = [
|
|
60
|
-
'search',
|
|
61
|
-
'dev',
|
|
62
|
-
'security',
|
|
63
|
-
'data',
|
|
64
|
-
'ai',
|
|
65
|
-
'browser',
|
|
66
|
-
'cloud',
|
|
67
|
-
'productivity',
|
|
68
|
-
'files',
|
|
69
|
-
'comms',
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
/** 分类中文标签。与 CATEGORY_ORDER 同集合(生成时校验)。 */
|
|
73
|
-
export const CATEGORY_LABELS = {
|
|
74
|
-
'search': '搜索',
|
|
75
|
-
'dev': '开发工具',
|
|
76
|
-
'security': '安全与逆向',
|
|
77
|
-
'data': '数据库与数据',
|
|
78
|
-
'ai': 'AI 与知识',
|
|
79
|
-
'browser': '浏览器自动化',
|
|
80
|
-
'cloud': '云与基础设施',
|
|
81
|
-
'productivity': '效率协作',
|
|
82
|
-
'files': '文件与本地',
|
|
83
|
-
'comms': '通讯',
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* `auth` 字段的取值域(唯一真相源)。
|
|
88
|
-
*
|
|
89
|
-
* - `'none'` 无需任何凭据:本地 stdio、开源本地服务、免密公开 API。
|
|
90
|
-
* - `'apiKey'` 靠 API Key / Token / PAT / headers 注入即可用,`envKeys` 能承载。
|
|
91
|
-
* - `'oauth'` **只能**走 OAuth 授权流程。本宿主(mcp-client 不支持 OAuth)完成不了,
|
|
92
|
-
* 面板必须降级提示,不要给用户「点了安装就能用」的错觉。
|
|
93
|
-
* - `'oauth-or-pat'` 官方主推 OAuth,但存在可用的 PAT / 静态令牌替代路径。能装,但需引导
|
|
94
|
-
* 用户走替代路径,别让他照着官方文档去点 OAuth 按钮。
|
|
95
|
-
*
|
|
96
|
-
* 为什么是这四个而不是布尔:`oauth` 与 `oauth-or-pat` 的处置**相反**(前者劝退、后者引导),
|
|
97
|
-
* 合成就没法表达。测试逐条断言 `MCP_CATALOG` 的 auth 属于这个集合。
|
|
98
|
-
* @type {ReadonlyArray<string>}
|
|
99
|
-
*/
|
|
100
|
-
export const AUTH_KINDS = ['none', 'apiKey', 'oauth', 'oauth-or-pat']
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* 目录条目。字段含义见文件头。
|
|
104
|
-
*
|
|
105
|
-
* **数组顺序 = 市场的分类展示顺序**(按 CATEGORY_ORDER 分段排布)。面板的 chips
|
|
106
|
-
* 靠这个顺序渲染,所以不要为了顺手而手工重排——要改顺序请改生成器的 CATEGORY_ORDER。
|
|
107
|
-
* @type {ReadonlyArray<object>}
|
|
108
|
-
*/
|
|
109
|
-
export const MCP_CATALOG = [
|
|
110
|
-
{
|
|
111
|
-
id: 'exa',
|
|
112
|
-
label: 'Exa',
|
|
113
|
-
summary: '网页搜索与内容读取',
|
|
114
|
-
category: 'search',
|
|
115
|
-
vendor: 'Exa',
|
|
116
|
-
access: '免密可用(有限额);可在 headers 加 x-api-key 提升额度',
|
|
117
|
-
auth: 'apiKey',
|
|
118
|
-
authNote: '免密信号是 headers 里的空 x-api-key(实测有限额);填 EXA_API_KEY 换额度上限',
|
|
119
|
-
transport: 'streamable-http',
|
|
120
|
-
url: 'https://mcp.exa.ai/mcp',
|
|
121
|
-
headers: { 'x-api-key': '!!js (process.env.EXA_API_KEY ?? "")' },
|
|
122
|
-
packages: ['exa-mcp-server'],
|
|
123
|
-
envKeys: ['EXA_API_KEY'],
|
|
124
|
-
homepage: 'https://docs.exa.ai/reference/exa-mcp',
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
id: 'tavily',
|
|
128
|
-
label: 'Tavily',
|
|
129
|
-
summary: 'AI 优化的搜索与网页提取',
|
|
130
|
-
category: 'search',
|
|
131
|
-
vendor: 'Tavily',
|
|
132
|
-
access: '免密模式免费有速率限制(响应与带 Key 完全一致);官方免费 Key 为 1000 credits/月,无需信用卡',
|
|
133
|
-
auth: 'none',
|
|
134
|
-
transport: 'streamable-http',
|
|
135
|
-
url: 'https://mcp.tavily.com/mcp/',
|
|
136
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.TAVILY_API_KEY ?? "")', 'X-Tavily-Access-Mode': 'keyless' },
|
|
137
|
-
packages: ['tavily-mcp'],
|
|
138
|
-
envKeys: ['TAVILY_API_KEY'],
|
|
139
|
-
homepage: 'https://docs.tavily.com/documentation/mcp',
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
id: 'firecrawl',
|
|
143
|
-
label: 'Firecrawl',
|
|
144
|
-
summary: '网页抓取、搜索与文档解析',
|
|
145
|
-
category: 'search',
|
|
146
|
-
vendor: 'Firecrawl',
|
|
147
|
-
access: '免密可用(每日限额);填 API Key 提升额度。需浏览器登录时改用 /v2/mcp-oauth',
|
|
148
|
-
// 判 apiKey 而非 none:headers 里装配的就是 `Bearer ${FIRECRAWL_API_KEY}`(空串),免密那条路
|
|
149
|
-
auth: 'apiKey',
|
|
150
|
-
authNote: '默认按免密模式发空 Bearer;填 FIRECRAWL_API_KEY 才走带 Key 模式',
|
|
151
|
-
transport: 'streamable-http',
|
|
152
|
-
url: 'https://mcp.firecrawl.dev/v2/mcp',
|
|
153
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.FIRECRAWL_API_KEY ?? "")' },
|
|
154
|
-
packages: ['firecrawl-mcp'],
|
|
155
|
-
envKeys: ['FIRECRAWL_API_KEY'],
|
|
156
|
-
homepage: 'https://docs.firecrawl.dev/mcp-server',
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
id: 'brave-search',
|
|
160
|
-
label: 'Brave Search',
|
|
161
|
-
summary: '独立索引的网页与本地搜索',
|
|
162
|
-
category: 'search',
|
|
163
|
-
vendor: 'Brave',
|
|
164
|
-
access: '必须自备 Brave Search API Key(有免费档,超出需付费)',
|
|
165
|
-
auth: 'apiKey',
|
|
166
|
-
authNote: '必填 BRAVE_API_KEY,没有免密路径',
|
|
167
|
-
transport: 'stdio',
|
|
168
|
-
command: 'npx',
|
|
169
|
-
args: ['-y', '@brave/brave-search-mcp-server', '--transport', 'stdio'],
|
|
170
|
-
packages: ['@brave/brave-search-mcp-server'],
|
|
171
|
-
envKeys: ['BRAVE_API_KEY'],
|
|
172
|
-
homepage: 'https://github.com/brave/brave-search-mcp-server',
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
id: 'perplexity',
|
|
176
|
-
label: 'Perplexity',
|
|
177
|
-
summary: '实时联网搜索与深度研究',
|
|
178
|
-
category: 'search',
|
|
179
|
-
vendor: 'Perplexity',
|
|
180
|
-
access: '需付费 Perplexity API Key(Bearer),无免密额度',
|
|
181
|
-
auth: 'apiKey',
|
|
182
|
-
authNote: '必填 PERPLEXITY_API_KEY(Bearer),无免密额度',
|
|
183
|
-
transport: 'streamable-http',
|
|
184
|
-
url: 'https://api.perplexity.ai/mcp',
|
|
185
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.PERPLEXITY_API_KEY ?? "")' },
|
|
186
|
-
envKeys: ['PERPLEXITY_API_KEY'],
|
|
187
|
-
homepage: 'https://docs.perplexity.ai/docs/getting-started/integrations/mcp-server',
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
id: 'google-maps',
|
|
191
|
-
label: 'Google Maps',
|
|
192
|
-
summary: 'Google Maps 平台开发文档检索',
|
|
193
|
-
category: 'search',
|
|
194
|
-
vendor: 'Google',
|
|
195
|
-
access: '实验阶段免费、无需认证(实测 tools/list 返回 2 个文档检索工具)',
|
|
196
|
-
auth: 'none',
|
|
197
|
-
transport: 'streamable-http',
|
|
198
|
-
url: 'https://mapscodeassist.googleapis.com/mcp',
|
|
199
|
-
homepage: 'https://developers.google.com/maps/ai/code-assist',
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
id: 'fetch',
|
|
203
|
-
label: 'Fetch',
|
|
204
|
-
summary: '抓取网页并转为适合 LLM 的文本',
|
|
205
|
-
category: 'search',
|
|
206
|
-
vendor: 'Anthropic',
|
|
207
|
-
access: '开源免费,无需任何 Key',
|
|
208
|
-
auth: 'none',
|
|
209
|
-
transport: 'stdio',
|
|
210
|
-
command: 'uvx',
|
|
211
|
-
args: ['mcp-server-fetch'],
|
|
212
|
-
packages: ['mcp-server-fetch'],
|
|
213
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/fetch',
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
id: 'github',
|
|
217
|
-
label: 'GitHub',
|
|
218
|
-
summary: '仓库、Issue、PR 与代码检索',
|
|
219
|
-
category: 'dev',
|
|
220
|
-
vendor: 'GitHub',
|
|
221
|
-
access: '需 GitHub 账号并 OAuth 授权;也可用 PAT。功能权限随账号套餐',
|
|
222
|
-
// 置 oauth-or-pat 而非 oauth:PAT 是本宿主唯一走得通的路径,标成 oauth 会误导用户放弃安装
|
|
223
|
-
auth: 'oauth-or-pat',
|
|
224
|
-
authNote: '别走 OAuth:把 GITHUB_PERSONAL_ACCESS_TOKEN(PAT)配进来,Bearer 直连即可',
|
|
225
|
-
transport: 'streamable-http',
|
|
226
|
-
url: 'https://api.githubcopilot.com/mcp/',
|
|
227
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.GITHUB_PERSONAL_ACCESS_TOKEN ?? "")' },
|
|
228
|
-
envKeys: ['GITHUB_PERSONAL_ACCESS_TOKEN'],
|
|
229
|
-
homepage: 'https://docs.github.com/en/copilot/how-tos/copilot-in-your-ide/copilot-for-common-tasks/use-the-github-mcp-server',
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
id: 'gitlab',
|
|
233
|
-
label: 'GitLab',
|
|
234
|
-
summary: '项目、Issue 与合并请求访问',
|
|
235
|
-
category: 'dev',
|
|
236
|
-
vendor: 'GitLab',
|
|
237
|
-
access: 'Free 及以上套餐可用;OAuth 动态注册授权,自建实例亦可|⚠️ 静态 Token 方式未获官方确认(官方 MCP 文档只描述 OAuth/DCR;issue 586184 请求支持 PAT,官方回复不在近期路线图上),在 DSH 中可能无法授权',
|
|
238
|
-
// 判 oauth:官方明确 PAT 不在近期路线图(issue 586184),没有替代路径可引导
|
|
239
|
-
auth: 'oauth',
|
|
240
|
-
authNote: '只支持 OAuth 动态注册,静态 Token 未获官方支持,本宿主会卡在授权;装了也连不上',
|
|
241
|
-
transport: 'streamable-http',
|
|
242
|
-
url: 'https://gitlab.com/api/v4/mcp',
|
|
243
|
-
homepage: 'https://docs.gitlab.com/user/model_context_protocol/mcp_server/',
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
id: 'sentry',
|
|
247
|
-
label: 'Sentry',
|
|
248
|
-
summary: '错误检索、性能分析与问题分诊',
|
|
249
|
-
category: 'dev',
|
|
250
|
-
vendor: 'Sentry',
|
|
251
|
-
access: '需 Sentry 账号 OAuth 授权(可用免费档账号)',
|
|
252
|
-
// 判 oauth:access 只承诺 OAuth,没有像 GitHub 那样把 Token 写成等价路径
|
|
253
|
-
auth: 'oauth',
|
|
254
|
-
authNote: '官方只写 OAuth;若在 Sentry 设置里签发 SENTRY_AUTH_TOKEN 可试 Bearer 直连(未获文档保证)',
|
|
255
|
-
transport: 'streamable-http',
|
|
256
|
-
url: 'https://mcp.sentry.dev/mcp',
|
|
257
|
-
headers: { 'Authorization': '!!js "Sentry-Bearer " + (process.env.SENTRY_AUTH_TOKEN ?? "")' },
|
|
258
|
-
envKeys: ['SENTRY_AUTH_TOKEN'],
|
|
259
|
-
homepage: 'https://docs.sentry.io/product/sentry-mcp/',
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
id: 'git',
|
|
263
|
-
label: 'Git',
|
|
264
|
-
summary: '读写本地 Git 仓库',
|
|
265
|
-
category: 'dev',
|
|
266
|
-
vendor: 'Anthropic',
|
|
267
|
-
access: '开源免费,仅操作本地仓库',
|
|
268
|
-
auth: 'none',
|
|
269
|
-
transport: 'stdio',
|
|
270
|
-
command: 'uvx',
|
|
271
|
-
args: ['mcp-server-git', '--repository', '<仓库路径>'],
|
|
272
|
-
packages: ['mcp-server-git'],
|
|
273
|
-
placeholders: ['<仓库路径>'],
|
|
274
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/git',
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
id: 'serena',
|
|
278
|
-
label: 'Serena',
|
|
279
|
-
summary: '符号级代码检索与重构',
|
|
280
|
-
category: 'dev',
|
|
281
|
-
vendor: 'Oraios AI',
|
|
282
|
-
access: '开源免费(MIT),本地运行;需先 uv tool install -p 3.13 serena-agent',
|
|
283
|
-
auth: 'none',
|
|
284
|
-
transport: 'stdio',
|
|
285
|
-
command: 'serena',
|
|
286
|
-
args: ['start-mcp-server', '--context', 'ide', '--project-from-cwd'],
|
|
287
|
-
packages: ['serena'],
|
|
288
|
-
homepage: 'https://oraios.github.io/serena/02-usage/030_clients.html',
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
id: 'everything',
|
|
292
|
-
label: 'Everything',
|
|
293
|
-
summary: '官方参考实现,用于连通性自检',
|
|
294
|
-
category: 'dev',
|
|
295
|
-
vendor: 'Anthropic',
|
|
296
|
-
access: '开源免费,演示与测试用途',
|
|
297
|
-
auth: 'none',
|
|
298
|
-
transport: 'stdio',
|
|
299
|
-
command: 'npx',
|
|
300
|
-
args: ['-y', '@modelcontextprotocol/server-everything'],
|
|
301
|
-
packages: ['@modelcontextprotocol/server-everything'],
|
|
302
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/everything',
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
id: 'fast-context',
|
|
306
|
-
label: 'Fast Context',
|
|
307
|
-
summary: 'Windsurf 驱动的语义代码检索',
|
|
308
|
-
category: 'dev',
|
|
309
|
-
vendor: 'Windsurf',
|
|
310
|
-
access: '开源免费;装了 Windsurf 会自动读取其 Key,没有才需自备 WINDSURF_API_KEY',
|
|
311
|
-
auth: 'apiKey',
|
|
312
|
-
authNote: '装了 Windsurf 会自动取 Key;否则填 WINDSURF_API_KEY',
|
|
313
|
-
transport: 'stdio',
|
|
314
|
-
command: 'npx',
|
|
315
|
-
args: ['-y', 'fast-context-mcp'],
|
|
316
|
-
packages: ['fast-context-mcp'],
|
|
317
|
-
envKeys: ['WINDSURF_API_KEY'],
|
|
318
|
-
homepage: 'https://www.npmjs.com/package/fast-context-mcp',
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
id: 'jshook',
|
|
322
|
-
label: 'JS Hook',
|
|
323
|
-
summary: 'JS 分析与安全研究:Hook、CDP 调试、反混淆',
|
|
324
|
-
category: 'security',
|
|
325
|
-
vendor: 'jshookmcp',
|
|
326
|
-
access: '开源免费(AGPL-3.0),本地运行;需 Node 22.12+。工具档位由环境变量 MCP_TOOL_PROFILE 控制(search ≈3K tokens / workflow / full ≈40K+),默认档已够用',
|
|
327
|
-
auth: 'none',
|
|
328
|
-
transport: 'stdio',
|
|
329
|
-
command: 'npx',
|
|
330
|
-
args: ['-y', '@jshookmcp/jshook@latest'],
|
|
331
|
-
packages: ['@jshookmcp/jshook'],
|
|
332
|
-
homepage: 'https://vmoranv.github.io/jshookmcp/',
|
|
333
|
-
},
|
|
334
|
-
{
|
|
335
|
-
id: 'ida-pro',
|
|
336
|
-
label: 'IDA Pro',
|
|
337
|
-
summary: '驱动 IDA Pro 做逆向分析',
|
|
338
|
-
category: 'security',
|
|
339
|
-
vendor: 'mrexodia',
|
|
340
|
-
access: '需本机已装 IDA Pro;服务本身按需拉取,无需预先 pip install',
|
|
341
|
-
auth: 'none',
|
|
342
|
-
transport: 'stdio',
|
|
343
|
-
command: 'uvx',
|
|
344
|
-
args: ['--with', 'mcp<2', '--with', 'ida-pro-mcp', 'ida-pro-mcp'],
|
|
345
|
-
packages: ['ida-pro-mcp'],
|
|
346
|
-
homepage: 'https://github.com/mrexodia/ida-pro-mcp',
|
|
347
|
-
},
|
|
348
|
-
{
|
|
349
|
-
id: 'frida-mcp',
|
|
350
|
-
label: 'Frida',
|
|
351
|
-
summary: 'Frida 动态插桩:Hook 函数、跟踪调用',
|
|
352
|
-
category: 'security',
|
|
353
|
-
vendor: 'dnakov',
|
|
354
|
-
access: '开源免费(MIT),本地运行;需本机装 Frida 与被测目标。实测 uvx 启动并完成 initialize/tools/list 握手,enumerate_processes 可正常返回本机进程',
|
|
355
|
-
auth: 'none',
|
|
356
|
-
transport: 'stdio',
|
|
357
|
-
command: 'uvx',
|
|
358
|
-
args: ['--with', 'mcp<2', '--with', 'frida-mcp', 'frida-mcp'],
|
|
359
|
-
packages: ['frida-mcp'],
|
|
360
|
-
homepage: 'https://github.com/dnakov/frida-mcp',
|
|
361
|
-
},
|
|
362
|
-
{
|
|
363
|
-
id: 'dbx',
|
|
364
|
-
label: 'DBX',
|
|
365
|
-
summary: '多数据库查询(Postgres / MySQL / SQLite 等)',
|
|
366
|
-
category: 'data',
|
|
367
|
-
vendor: 't8y2',
|
|
368
|
-
access: '开源免费,本地原生二进制;数据源在 DBX 应用里配置',
|
|
369
|
-
auth: 'none',
|
|
370
|
-
transport: 'stdio',
|
|
371
|
-
command: 'npx',
|
|
372
|
-
args: ['-y', '@dbx-app/mcp-server'],
|
|
373
|
-
packages: ['@dbx-app/mcp-server'],
|
|
374
|
-
homepage: 'https://github.com/t8y2/dbx',
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
id: 'postgres',
|
|
378
|
-
label: 'PostgreSQL',
|
|
379
|
-
summary: 'Postgres 查询、索引与健康分析',
|
|
380
|
-
category: 'data',
|
|
381
|
-
vendor: 'Crystal DBA',
|
|
382
|
-
access: '开源免费,需自备数据库连接串(DATABASE_URI)',
|
|
383
|
-
auth: 'apiKey',
|
|
384
|
-
authNote: '填 DATABASE_URI(数据库连接串,含口令)',
|
|
385
|
-
transport: 'stdio',
|
|
386
|
-
command: 'uvx',
|
|
387
|
-
args: ['--with', 'mcp<2', 'postgres-mcp', '--access-mode=unrestricted'],
|
|
388
|
-
packages: ['postgres-mcp'],
|
|
389
|
-
envKeys: ['DATABASE_URI'],
|
|
390
|
-
homepage: 'https://github.com/crystaldba/postgres-mcp',
|
|
391
|
-
},
|
|
392
|
-
{
|
|
393
|
-
id: 'sqlite',
|
|
394
|
-
label: 'SQLite',
|
|
395
|
-
summary: '本地 SQLite 查询与数据分析',
|
|
396
|
-
category: 'data',
|
|
397
|
-
vendor: 'Anthropic',
|
|
398
|
-
access: '开源免费,只操作本地 .db 文件。注意:官方已归档,仅有维护性修复',
|
|
399
|
-
auth: 'none',
|
|
400
|
-
transport: 'stdio',
|
|
401
|
-
command: 'uvx',
|
|
402
|
-
args: ['mcp-server-sqlite', '--db-path', '<数据库路径>'],
|
|
403
|
-
packages: ['mcp-server-sqlite'],
|
|
404
|
-
placeholders: ['<数据库路径>'],
|
|
405
|
-
homepage: 'https://github.com/modelcontextprotocol/servers-archived/tree/main/src/sqlite',
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
id: 'redis',
|
|
409
|
-
label: 'Redis',
|
|
410
|
-
summary: 'Redis 键值、向量与流操作',
|
|
411
|
-
category: 'data',
|
|
412
|
-
vendor: 'Redis',
|
|
413
|
-
access: '开源免费(MIT),需自备 Redis 实例',
|
|
414
|
-
auth: 'apiKey',
|
|
415
|
-
authNote: '填 REDIS_HOST / REDIS_PORT;实例要口令时一并给',
|
|
416
|
-
transport: 'stdio',
|
|
417
|
-
command: 'uvx',
|
|
418
|
-
args: ['--from', 'redis-mcp-server@latest', 'redis-mcp-server', '--url', 'redis://localhost:6379/0'],
|
|
419
|
-
packages: ['redis-mcp-server'],
|
|
420
|
-
configKeys: ['REDIS_HOST', 'REDIS_PORT'],
|
|
421
|
-
homepage: 'https://redis.io/docs/latest/integrate/redis-mcp/',
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
id: 'clickhouse',
|
|
425
|
-
label: 'ClickHouse',
|
|
426
|
-
summary: 'ClickHouse 查询与库表探查',
|
|
427
|
-
category: 'data',
|
|
428
|
-
vendor: 'ClickHouse',
|
|
429
|
-
access: '开源免费,默认只读;需自备 ClickHouse 连接信息',
|
|
430
|
-
auth: 'apiKey',
|
|
431
|
-
authNote: '填 CLICKHOUSE_HOST / PORT / USER 与 CLICKHOUSE_PASSWORD',
|
|
432
|
-
transport: 'stdio',
|
|
433
|
-
command: 'uv',
|
|
434
|
-
args: ['run', '--with', 'mcp-clickhouse', '--python', '3.12', 'mcp-clickhouse'],
|
|
435
|
-
packages: ['mcp-clickhouse'],
|
|
436
|
-
envKeys: ['CLICKHOUSE_PASSWORD'],
|
|
437
|
-
configKeys: ['CLICKHOUSE_HOST', 'CLICKHOUSE_PORT', 'CLICKHOUSE_USER'],
|
|
438
|
-
homepage: 'https://github.com/ClickHouse/mcp-clickhouse',
|
|
439
|
-
},
|
|
440
|
-
{
|
|
441
|
-
id: 'mongodb',
|
|
442
|
-
label: 'MongoDB',
|
|
443
|
-
summary: 'MongoDB 与 Atlas 数据访问',
|
|
444
|
-
category: 'data',
|
|
445
|
-
vendor: 'MongoDB',
|
|
446
|
-
access: '开源免费(Apache-2.0),需自备连接串',
|
|
447
|
-
auth: 'apiKey',
|
|
448
|
-
authNote: '填 MDB_MCP_CONNECTION_STRING(含口令的连接串)',
|
|
449
|
-
transport: 'stdio',
|
|
450
|
-
command: 'npx',
|
|
451
|
-
args: ['-y', 'mongodb-mcp-server@latest', '--readOnly'],
|
|
452
|
-
packages: ['mongodb-mcp-server'],
|
|
453
|
-
envKeys: ['MDB_MCP_CONNECTION_STRING'],
|
|
454
|
-
homepage: 'https://www.mongodb.com/docs/mcp-server/get-started/',
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
id: 'supabase',
|
|
458
|
-
label: 'Supabase',
|
|
459
|
-
summary: 'Supabase 项目与数据库管理',
|
|
460
|
-
category: 'data',
|
|
461
|
-
vendor: 'Supabase',
|
|
462
|
-
access: '需 Supabase 账号 OAuth 授权;支持 ?read_only=true 等参数收敛权限',
|
|
463
|
-
// 判 oauth:access 只承诺 OAuth,Token 那条路属于未文档化能力
|
|
464
|
-
auth: 'oauth',
|
|
465
|
-
authNote: '官方写的是 OAuth;有 SUPABASE_ACCESS_TOKEN 的话可试 Bearer 直连(未获文档保证)',
|
|
466
|
-
transport: 'streamable-http',
|
|
467
|
-
url: 'https://mcp.supabase.com/mcp',
|
|
468
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.SUPABASE_ACCESS_TOKEN ?? "")' },
|
|
469
|
-
envKeys: ['SUPABASE_ACCESS_TOKEN'],
|
|
470
|
-
homepage: 'https://supabase.com/docs/guides/getting-started/mcp',
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
id: 'neon',
|
|
474
|
-
label: 'Neon',
|
|
475
|
-
summary: 'Neon 项目管理与查询',
|
|
476
|
-
category: 'data',
|
|
477
|
-
vendor: 'Neon',
|
|
478
|
-
access: '需 Neon 账号 OAuth 或 API Key;可选只读模式与单项目限定',
|
|
479
|
-
auth: 'oauth-or-pat',
|
|
480
|
-
authNote: '官方主推 OAuth;改用 NEON_API_KEY 作 Bearer 即可直连',
|
|
481
|
-
transport: 'streamable-http',
|
|
482
|
-
url: 'https://mcp.neon.tech/mcp',
|
|
483
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.NEON_API_KEY ?? "")' },
|
|
484
|
-
envKeys: ['NEON_API_KEY'],
|
|
485
|
-
homepage: 'https://neon.com/docs/ai/neon-mcp-server',
|
|
486
|
-
},
|
|
487
|
-
{
|
|
488
|
-
id: 'deepwiki-fetch',
|
|
489
|
-
label: 'DeepWiki(本地抓取)',
|
|
490
|
-
summary: '抓取 DeepWiki 页面转成 Markdown',
|
|
491
|
-
category: 'ai',
|
|
492
|
-
vendor: 'regenrek',
|
|
493
|
-
access: '完全免费,无需认证;本地进程抓取,与官方远端版功能重叠,按需选一个',
|
|
494
|
-
auth: 'none',
|
|
495
|
-
transport: 'stdio',
|
|
496
|
-
command: 'npx',
|
|
497
|
-
args: ['-y', 'mcp-deepwiki@latest'],
|
|
498
|
-
packages: ['mcp-deepwiki'],
|
|
499
|
-
homepage: 'https://github.com/regenrek/deepwiki-mcp',
|
|
500
|
-
},
|
|
501
|
-
{
|
|
502
|
-
id: 'memory',
|
|
503
|
-
label: 'Memory',
|
|
504
|
-
summary: '基于知识图谱的持久记忆',
|
|
505
|
-
category: 'ai',
|
|
506
|
-
vendor: 'Anthropic',
|
|
507
|
-
access: '开源免费,数据存于本地文件',
|
|
508
|
-
auth: 'none',
|
|
509
|
-
transport: 'stdio',
|
|
510
|
-
command: 'npx',
|
|
511
|
-
args: ['-y', '@modelcontextprotocol/server-memory'],
|
|
512
|
-
packages: ['@modelcontextprotocol/server-memory'],
|
|
513
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/memory',
|
|
514
|
-
},
|
|
515
|
-
{
|
|
516
|
-
id: 'sequential-thinking',
|
|
517
|
-
label: 'Sequential Thinking',
|
|
518
|
-
summary: '分步推理与动态问题拆解',
|
|
519
|
-
category: 'ai',
|
|
520
|
-
vendor: 'Anthropic',
|
|
521
|
-
access: '开源免费,无需任何 Key',
|
|
522
|
-
auth: 'none',
|
|
523
|
-
transport: 'stdio',
|
|
524
|
-
command: 'npx',
|
|
525
|
-
args: ['-y', '@modelcontextprotocol/server-sequential-thinking'],
|
|
526
|
-
packages: ['@modelcontextprotocol/server-sequential-thinking'],
|
|
527
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking',
|
|
528
|
-
},
|
|
529
|
-
{
|
|
530
|
-
id: 'context7',
|
|
531
|
-
label: 'Context7',
|
|
532
|
-
summary: '实时获取库的最新版本文档',
|
|
533
|
-
category: 'ai',
|
|
534
|
-
vendor: 'Upstash',
|
|
535
|
-
access: '免密可用;官网可领免费 API Key 提升速率上限',
|
|
536
|
-
auth: 'none',
|
|
537
|
-
transport: 'streamable-http',
|
|
538
|
-
url: 'https://mcp.context7.com/mcp',
|
|
539
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.CONTEXT7_API_KEY ?? "")' },
|
|
540
|
-
envKeys: ['CONTEXT7_API_KEY'],
|
|
541
|
-
homepage: 'https://github.com/upstash/context7',
|
|
542
|
-
},
|
|
543
|
-
{
|
|
544
|
-
id: 'deepwiki',
|
|
545
|
-
label: 'DeepWiki',
|
|
546
|
-
summary: '代码仓库文档与问答',
|
|
547
|
-
category: 'ai',
|
|
548
|
-
vendor: 'Cognition (Devin)',
|
|
549
|
-
access: '完全免费,无需认证,仅访问公开仓库',
|
|
550
|
-
auth: 'none',
|
|
551
|
-
transport: 'streamable-http',
|
|
552
|
-
url: 'https://mcp.deepwiki.com/mcp',
|
|
553
|
-
homepage: 'https://docs.devin.ai/work-with-devin/deepwiki-mcp',
|
|
554
|
-
},
|
|
555
|
-
{
|
|
556
|
-
id: 'huggingface',
|
|
557
|
-
label: 'Hugging Face',
|
|
558
|
-
summary: '模型、数据集与 Spaces 检索',
|
|
559
|
-
category: 'ai',
|
|
560
|
-
vendor: 'Hugging Face',
|
|
561
|
-
access: '免密可用基础工具;登录后可选用个人已配置的 App 与工具',
|
|
562
|
-
auth: 'none',
|
|
563
|
-
transport: 'streamable-http',
|
|
564
|
-
url: 'https://huggingface.co/mcp',
|
|
565
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.HF_TOKEN ?? "")' },
|
|
566
|
-
envKeys: ['HF_TOKEN'],
|
|
567
|
-
homepage: 'https://huggingface.co/mcp',
|
|
568
|
-
},
|
|
569
|
-
{
|
|
570
|
-
id: 'arxiv',
|
|
571
|
-
label: 'arXiv',
|
|
572
|
-
summary: '论文检索与全文获取',
|
|
573
|
-
category: 'ai',
|
|
574
|
-
vendor: 'Blazick(社区维护,非 arXiv 官方)',
|
|
575
|
-
access: '开源免费,无需 Key',
|
|
576
|
-
auth: 'none',
|
|
577
|
-
transport: 'stdio',
|
|
578
|
-
command: 'uvx',
|
|
579
|
-
args: ['arxiv-mcp-server'],
|
|
580
|
-
packages: ['arxiv-mcp-server'],
|
|
581
|
-
homepage: 'https://github.com/blazickjp/arxiv-mcp-server',
|
|
582
|
-
},
|
|
583
|
-
{
|
|
584
|
-
id: 'chrome-devtools',
|
|
585
|
-
label: 'Chrome DevTools',
|
|
586
|
-
summary: '驱动真实 Chrome 调试与性能分析',
|
|
587
|
-
category: 'browser',
|
|
588
|
-
vendor: 'Google',
|
|
589
|
-
access: '开源免费,本地运行;需本机安装 Chrome',
|
|
590
|
-
auth: 'none',
|
|
591
|
-
transport: 'stdio',
|
|
592
|
-
command: 'npx',
|
|
593
|
-
args: ['-y', 'chrome-devtools-mcp@latest'],
|
|
594
|
-
packages: ['chrome-devtools-mcp'],
|
|
595
|
-
homepage: 'https://github.com/ChromeDevTools/chrome-devtools-mcp',
|
|
596
|
-
},
|
|
597
|
-
{
|
|
598
|
-
id: 'playwright',
|
|
599
|
-
label: 'Playwright',
|
|
600
|
-
summary: '基于可访问性快照的浏览器自动化',
|
|
601
|
-
category: 'browser',
|
|
602
|
-
vendor: 'Microsoft',
|
|
603
|
-
access: '开源免费(Apache-2.0),本地运行;需 Node.js 18+',
|
|
604
|
-
auth: 'none',
|
|
605
|
-
transport: 'stdio',
|
|
606
|
-
command: 'npx',
|
|
607
|
-
args: ['-y', '@playwright/mcp@latest'],
|
|
608
|
-
packages: ['@playwright/mcp'],
|
|
609
|
-
homepage: 'https://github.com/microsoft/playwright-mcp',
|
|
610
|
-
},
|
|
611
|
-
{
|
|
612
|
-
id: 'cloudflare-api',
|
|
613
|
-
label: 'Cloudflare API',
|
|
614
|
-
summary: '调用全部 Cloudflare API',
|
|
615
|
-
category: 'cloud',
|
|
616
|
-
vendor: 'Cloudflare',
|
|
617
|
-
access: '需 Cloudflare 账号 OAuth 授权;也可用 API Token 作 Bearer',
|
|
618
|
-
auth: 'oauth-or-pat',
|
|
619
|
-
authNote: '官方主推 OAuth;改用 CLOUDFLARE_API_TOKEN 作 Bearer 即可直连',
|
|
620
|
-
transport: 'streamable-http',
|
|
621
|
-
url: 'https://mcp.cloudflare.com/mcp',
|
|
622
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.CLOUDFLARE_API_TOKEN ?? "")' },
|
|
623
|
-
envKeys: ['CLOUDFLARE_API_TOKEN'],
|
|
624
|
-
homepage: 'https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/',
|
|
625
|
-
},
|
|
626
|
-
{
|
|
627
|
-
id: 'cloudflare-docs',
|
|
628
|
-
label: 'Cloudflare Docs',
|
|
629
|
-
summary: 'Cloudflare 官方文档语义检索',
|
|
630
|
-
category: 'cloud',
|
|
631
|
-
vendor: 'Cloudflare',
|
|
632
|
-
access: '免密可用,无需任何账号',
|
|
633
|
-
auth: 'none',
|
|
634
|
-
transport: 'streamable-http',
|
|
635
|
-
url: 'https://docs.mcp.cloudflare.com/mcp',
|
|
636
|
-
homepage: 'https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/',
|
|
637
|
-
},
|
|
638
|
-
{
|
|
639
|
-
id: 'aws',
|
|
640
|
-
label: 'AWS',
|
|
641
|
-
summary: '通过 mcp-proxy-for-aws 访问 AWS 服务',
|
|
642
|
-
category: 'cloud',
|
|
643
|
-
vendor: 'Amazon Web Services',
|
|
644
|
-
access: '开源免费;凭据取自本机 AWS 配置(~/.aws),需可访问 Bedrock',
|
|
645
|
-
auth: 'apiKey',
|
|
646
|
-
authNote: '凭据取自本机 ~/.aws,无需在此填 Key;账号需能访问 Bedrock',
|
|
647
|
-
transport: 'stdio',
|
|
648
|
-
command: 'uvx',
|
|
649
|
-
args: ['mcp-proxy-for-aws@latest', 'https://aws-mcp.us-east-1.api.aws/mcp'],
|
|
650
|
-
packages: ['mcp-proxy-for-aws'],
|
|
651
|
-
homepage: 'https://github.com/aws/mcp-proxy-for-aws',
|
|
652
|
-
},
|
|
653
|
-
{
|
|
654
|
-
id: 'kubernetes',
|
|
655
|
-
label: 'Kubernetes',
|
|
656
|
-
summary: '集群资源、Pod 与 Helm 管理',
|
|
657
|
-
category: 'cloud',
|
|
658
|
-
vendor: 'Red Hat / CNCF',
|
|
659
|
-
access: '开源免费(Apache-2.0),使用本机 kubeconfig',
|
|
660
|
-
auth: 'apiKey',
|
|
661
|
-
authNote: '用本机 kubeconfig 的凭据,无需在此填 Key;集群需可连通',
|
|
662
|
-
transport: 'stdio',
|
|
663
|
-
command: 'npx',
|
|
664
|
-
args: ['-y', 'kubernetes-mcp-server@latest'],
|
|
665
|
-
packages: ['kubernetes-mcp-server'],
|
|
666
|
-
homepage: 'https://github.com/containers/kubernetes-mcp-server',
|
|
667
|
-
},
|
|
668
|
-
{
|
|
669
|
-
id: 'docker',
|
|
670
|
-
label: 'Docker MCP Gateway',
|
|
671
|
-
summary: '以容器隔离方式统一运行 MCP',
|
|
672
|
-
category: 'cloud',
|
|
673
|
-
vendor: 'Docker',
|
|
674
|
-
access: '开源免费(MIT),需 Docker Desktop 或 docker CLI 插件',
|
|
675
|
-
auth: 'none',
|
|
676
|
-
transport: 'stdio',
|
|
677
|
-
command: 'docker',
|
|
678
|
-
args: ['mcp', 'gateway', 'run'],
|
|
679
|
-
homepage: 'https://github.com/docker/mcp-gateway',
|
|
680
|
-
},
|
|
681
|
-
{
|
|
682
|
-
id: 'netlify',
|
|
683
|
-
label: 'Netlify',
|
|
684
|
-
summary: '站点构建部署与 Netlify CLI',
|
|
685
|
-
category: 'cloud',
|
|
686
|
-
vendor: 'Netlify',
|
|
687
|
-
access: '需 Netlify 账号 OAuth 授权|⚠️ 静态 Token 方式未获官方确认(官方文档的 NETLIFY_PERSONAL_ACCESS_TOKEN 是本地 stdio 包的环境变量,远端端点只文档化了 OAuth),在 DSH 中可能无法授权',
|
|
688
|
-
// 判 oauth:NETLIFY_PERSONAL_ACCESS_TOKEN 只对本地 stdio 包成立,远端端点拿不到替代路径
|
|
689
|
-
auth: 'oauth',
|
|
690
|
-
authNote: '远端端点只文档化了 OAuth,静态 Token 未获官方确认,本宿主会卡在授权;装了也连不上',
|
|
691
|
-
transport: 'streamable-http',
|
|
692
|
-
url: 'https://netlify-mcp.netlify.app/mcp',
|
|
693
|
-
homepage: 'https://docs.netlify.com/build/build-with-ai/netlify-mcp-server/',
|
|
694
|
-
},
|
|
695
|
-
{
|
|
696
|
-
id: 'linear',
|
|
697
|
-
label: 'Linear',
|
|
698
|
-
summary: 'Issue、项目与评论管理',
|
|
699
|
-
category: 'productivity',
|
|
700
|
-
vendor: 'Linear',
|
|
701
|
-
access: '需 Linear 账号 OAuth;只读可用 https://mcp.linear.app/mcp/readonly',
|
|
702
|
-
auth: 'oauth',
|
|
703
|
-
authNote: '官方写的是 OAuth;LINEAR_API_KEY 作 Bearer 未见文档支持,装了大概率连不上',
|
|
704
|
-
transport: 'streamable-http',
|
|
705
|
-
url: 'https://mcp.linear.app/mcp',
|
|
706
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.LINEAR_API_KEY ?? "")' },
|
|
707
|
-
envKeys: ['LINEAR_API_KEY'],
|
|
708
|
-
homepage: 'https://linear.app/docs/mcp',
|
|
709
|
-
},
|
|
710
|
-
{
|
|
711
|
-
id: 'atlassian',
|
|
712
|
-
label: 'Atlassian (Jira/Confluence)',
|
|
713
|
-
summary: 'Jira 与 Confluence 读写',
|
|
714
|
-
category: 'productivity',
|
|
715
|
-
vendor: 'Atlassian',
|
|
716
|
-
access: '有免费档(无需信用卡);需 Atlassian 账号 OAuth 授权',
|
|
717
|
-
auth: 'oauth',
|
|
718
|
-
authNote: '官方写的是 OAuth;ATLASSIAN_API_TOKEN 作 Bearer 未见文档支持,装了大概率连不上',
|
|
719
|
-
transport: 'streamable-http',
|
|
720
|
-
url: 'https://mcp.atlassian.com/v2/mcp',
|
|
721
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.ATLASSIAN_API_TOKEN ?? "")' },
|
|
722
|
-
envKeys: ['ATLASSIAN_API_TOKEN'],
|
|
723
|
-
homepage: 'https://support.atlassian.com/atlassian-ai-gateway/docs/get-started-with-the-atlassian-remote-mcp-server/',
|
|
724
|
-
},
|
|
725
|
-
{
|
|
726
|
-
id: 'airtable',
|
|
727
|
-
label: 'Airtable',
|
|
728
|
-
summary: '读写 Airtable 库表与记录',
|
|
729
|
-
category: 'productivity',
|
|
730
|
-
vendor: 'Airtable',
|
|
731
|
-
access: '全部套餐可用(含免费档);需 Airtable OAuth 授权',
|
|
732
|
-
auth: 'oauth',
|
|
733
|
-
authNote: '官方写的是 OAuth;AIRTABLE_TOKEN 作 Bearer 未见文档支持,装了大概率连不上',
|
|
734
|
-
transport: 'streamable-http',
|
|
735
|
-
url: 'https://mcp.airtable.com/mcp',
|
|
736
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.AIRTABLE_TOKEN ?? "")' },
|
|
737
|
-
envKeys: ['AIRTABLE_TOKEN'],
|
|
738
|
-
homepage: 'https://support.airtable.com/articles/9897799762-using-the-airtable-mcp-server',
|
|
739
|
-
},
|
|
740
|
-
{
|
|
741
|
-
id: 'microsoft-learn',
|
|
742
|
-
label: 'Microsoft Learn',
|
|
743
|
-
summary: '微软官方文档与代码示例检索',
|
|
744
|
-
category: 'productivity',
|
|
745
|
-
vendor: 'Microsoft',
|
|
746
|
-
access: '完全免费,无需认证、无需账号',
|
|
747
|
-
auth: 'none',
|
|
748
|
-
transport: 'streamable-http',
|
|
749
|
-
url: 'https://learn.microsoft.com/api/mcp',
|
|
750
|
-
homepage: 'https://learn.microsoft.com/en-us/training/support/mcp',
|
|
751
|
-
},
|
|
752
|
-
{
|
|
753
|
-
id: 'time',
|
|
754
|
-
label: 'Time',
|
|
755
|
-
summary: '时间查询与时区换算',
|
|
756
|
-
category: 'productivity',
|
|
757
|
-
vendor: 'Anthropic',
|
|
758
|
-
access: '开源免费,纯本地计算',
|
|
759
|
-
auth: 'none',
|
|
760
|
-
transport: 'stdio',
|
|
761
|
-
command: 'uvx',
|
|
762
|
-
args: ['mcp-server-time'],
|
|
763
|
-
packages: ['mcp-server-time'],
|
|
764
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/time',
|
|
765
|
-
},
|
|
766
|
-
{
|
|
767
|
-
id: 'filesystem',
|
|
768
|
-
label: 'Filesystem',
|
|
769
|
-
summary: '受限目录内的文件读写',
|
|
770
|
-
category: 'files',
|
|
771
|
-
vendor: 'Anthropic',
|
|
772
|
-
access: '开源免费,仅能访问命令行中显式授权的目录',
|
|
773
|
-
auth: 'none',
|
|
774
|
-
transport: 'stdio',
|
|
775
|
-
command: 'npx',
|
|
776
|
-
args: ['-y', '@modelcontextprotocol/server-filesystem', '<允许访问的目录>'],
|
|
777
|
-
packages: ['@modelcontextprotocol/server-filesystem'],
|
|
778
|
-
placeholders: ['<允许访问的目录>'],
|
|
779
|
-
homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem',
|
|
780
|
-
},
|
|
781
|
-
{
|
|
782
|
-
id: 'slack',
|
|
783
|
-
label: 'Slack',
|
|
784
|
-
summary: '搜索消息、发消息与管理画板',
|
|
785
|
-
category: 'comms',
|
|
786
|
-
vendor: 'Slack',
|
|
787
|
-
access: '需先自建 Slack App 并走一次 OAuth 换出 xoxp- 用户令牌,再把该令牌配到这里;令牌本身可长期复用',
|
|
788
|
-
// 判 oauth-or-pat:OAuth 只发生在建 App 那一次,落到本宿主的是可长期复用的静态令牌
|
|
789
|
-
auth: 'oauth-or-pat',
|
|
790
|
-
authNote: '先在 Slack 建 App 走一次 OAuth 换出 xoxp- 用户令牌,填 SLACK_USER_TOKEN 即可长期复用',
|
|
791
|
-
transport: 'streamable-http',
|
|
792
|
-
url: 'https://mcp.slack.com/mcp',
|
|
793
|
-
headers: { 'Authorization': '!!js "Bearer " + (process.env.SLACK_USER_TOKEN ?? "")' },
|
|
794
|
-
envKeys: ['SLACK_USER_TOKEN'],
|
|
795
|
-
homepage: 'https://docs.slack.dev/ai/slack-mcp-server/developing',
|
|
796
|
-
},
|
|
797
|
-
]
|
|
798
|
-
|
|
799
|
-
/**
|
|
800
|
-
* 按 id 建索引。多个消费者(市场列表、详情页、安装路径)都用它,避免各自 `find`。
|
|
801
|
-
* @param {ReadonlyArray<object>} [catalog] - 目录,缺省用内置目录。
|
|
802
|
-
* @returns {Map<string, object>} id → 条目。
|
|
803
|
-
*/
|
|
804
|
-
export function catalogById(catalog = MCP_CATALOG) {
|
|
805
|
-
return new Map(catalog.map((entry) => [entry.id, entry]))
|
|
806
|
-
}
|