dsh-mcp-connector 0.2.2 → 0.2.3
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/CHANGELOG.md +12 -1
- package/README.en.md +12 -0
- package/README.md +12 -0
- package/package.json +1 -1
- package/ui/index.html +17 -42
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.2.3] - 2026-08-21
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- 新增 4 张由无真实凭据 UI harness 生成的核心界面截图,以及约 30 秒的演示 GIF;中英文 README 均可直接预览市场、详情 Prompt、工具发现和 JSON 导入体验。
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- 面向中国市场将 MCP 连接器运行界面固定为中文,移除顶部 `EN` 按钮、英文 UI 字典、语言偏好持久化和切换事件;英文 README 继续作为项目文档保留。
|
|
16
|
+
|
|
7
17
|
## [0.2.2] - 2026-08-21
|
|
8
18
|
|
|
9
19
|
### Added
|
|
@@ -92,7 +102,8 @@
|
|
|
92
102
|
- 外部 URL 与导入 Header 执行安全校验。
|
|
93
103
|
- iframe 消息校验同源和消息来源。
|
|
94
104
|
|
|
95
|
-
[Unreleased]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.
|
|
105
|
+
[Unreleased]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.3...HEAD
|
|
106
|
+
[0.2.3]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.2...v0.2.3
|
|
96
107
|
[0.2.2]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.1...v0.2.2
|
|
97
108
|
[0.2.1]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.2.0...v0.2.1
|
|
98
109
|
[0.2.0]: https://github.com/duhu2000/dsh-mcp-connector/compare/v0.1.0...v0.2.0
|
package/README.en.md
CHANGED
|
@@ -26,6 +26,18 @@ Browse and install MCP connectors from different providers in DeepSeek Harness D
|
|
|
26
26
|
|
|
27
27
|
The first four bundled cards are Qichacha connectors. The public catalog also includes PKULaw and Wind connectors; the architecture is provider-neutral.
|
|
28
28
|
|
|
29
|
+
## Interface and demo
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
| Marketplace overview | Connector details and curated prompts |
|
|
34
|
+
|---|---|
|
|
35
|
+
|  |  |
|
|
36
|
+
| Tool discovery, descriptions, and scrolling | JSON import |
|
|
37
|
+
|  |  |
|
|
38
|
+
|
|
39
|
+
The assets are captured from the credential-free local UI harness. See [`docs/screenshots/README.md`](docs/screenshots/README.md) for provenance.
|
|
40
|
+
|
|
29
41
|
## Installation
|
|
30
42
|
|
|
31
43
|
Requirements: DeepSeek Harness Desktop or web profile, and Node.js 20 or later.
|
package/README.md
CHANGED
|
@@ -28,6 +28,18 @@
|
|
|
28
28
|
|
|
29
29
|
当前市场前 4 张为企查查连接器,第 5 张为“北大法宝·法律检索”,第 6 张为“Wind·股票数据”;插件架构不限定厂商。
|
|
30
30
|
|
|
31
|
+
## 界面与演示
|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
| 市场总览 | 连接器详情与精选 Prompt |
|
|
36
|
+
|---|---|
|
|
37
|
+
|  |  |
|
|
38
|
+
| 工具发现、描述与独立滚动 | JSON 导入 |
|
|
39
|
+
|  |  |
|
|
40
|
+
|
|
41
|
+
素材由无真实凭据的本地 UI harness 生成,详见 [`docs/screenshots/README.md`](docs/screenshots/README.md)。
|
|
42
|
+
|
|
31
43
|
## 安装
|
|
32
44
|
|
|
33
45
|
要求:DeepSeek Harness Desktop/web profile,Node.js 20 或更高版本。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-mcp-connector",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "General-purpose MCP Connector Marketplace for DeepSeek Harness with OAuth 2.0 PKCE, API key/URL, JSON import, tool discovery, prompt templates, and connection management.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
package/ui/index.html
CHANGED
|
@@ -355,17 +355,16 @@
|
|
|
355
355
|
<div class="app">
|
|
356
356
|
<header>
|
|
357
357
|
<div class="tabs" id="tabs">
|
|
358
|
-
<button data-view="market"
|
|
359
|
-
<button data-view="installed"
|
|
358
|
+
<button data-view="market" class="active">市场</button>
|
|
359
|
+
<button data-view="installed">已安装</button>
|
|
360
360
|
</div>
|
|
361
361
|
<div class="header-spacer"></div>
|
|
362
362
|
<div class="search-box">
|
|
363
363
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="color:var(--muted);flex-shrink:0"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
|
|
364
|
-
<input id="search" type="text" placeholder="搜索连接器…"
|
|
364
|
+
<input id="search" type="text" placeholder="搜索连接器…" />
|
|
365
365
|
</div>
|
|
366
|
-
<button class="icon-btn primary" id="add-connection" type="button"
|
|
367
|
-
<button class="icon-btn" id="
|
|
368
|
-
<button class="icon-btn" id="refresh" data-i18n="refresh">刷新</button>
|
|
366
|
+
<button class="icon-btn primary" id="add-connection" type="button">+ 添加连接</button>
|
|
367
|
+
<button class="icon-btn" id="refresh">刷新</button>
|
|
369
368
|
</header>
|
|
370
369
|
<main id="main"></main>
|
|
371
370
|
|
|
@@ -384,17 +383,17 @@
|
|
|
384
383
|
<div class="detail-desc" id="detail-desc"></div>
|
|
385
384
|
<div class="detail-section">
|
|
386
385
|
<div class="detail-section-head">
|
|
387
|
-
<div class="detail-section-title"><span class="emoji">💡</span> <span
|
|
386
|
+
<div class="detail-section-title"><span class="emoji">💡</span> <span>试试这样用</span> <span class="detail-section-meta" id="prompt-meta"></span></div>
|
|
388
387
|
<div class="detail-section-spacer"></div>
|
|
389
|
-
<button class="text-btn" id="prompt-next" type="button"
|
|
388
|
+
<button class="text-btn" id="prompt-next" type="button" hidden>换一批</button>
|
|
390
389
|
</div>
|
|
391
390
|
<div class="prompt-list" id="detail-prompts"></div>
|
|
392
391
|
</div>
|
|
393
392
|
<details class="tools-disclosure" id="tools-disclosure">
|
|
394
|
-
<summary><span>🧰 <span
|
|
393
|
+
<summary><span>🧰 <span>工具详情</span></span><span class="tools-summary" id="tools-summary">加载中…</span></summary>
|
|
395
394
|
<div class="tools-panel">
|
|
396
395
|
<div class="tools-toolbar">
|
|
397
|
-
<input class="tools-search" id="tools-search" type="search" placeholder="搜索工具名称或描述…"
|
|
396
|
+
<input class="tools-search" id="tools-search" type="search" placeholder="搜索工具名称或描述…" autocomplete="off" />
|
|
398
397
|
</div>
|
|
399
398
|
<div class="tools-list" id="detail-tools">
|
|
400
399
|
<div class="tools-loading">加载中...</div>
|
|
@@ -403,7 +402,7 @@
|
|
|
403
402
|
</details>
|
|
404
403
|
<div class="detail-actions">
|
|
405
404
|
<button class="btn-primary" id="detail-try-btn">💬 去试试</button>
|
|
406
|
-
<button class="btn-danger" id="detail-disconnect-btn"
|
|
405
|
+
<button class="btn-danger" id="detail-disconnect-btn">断开连接</button>
|
|
407
406
|
</div>
|
|
408
407
|
</div>
|
|
409
408
|
</div>
|
|
@@ -423,23 +422,13 @@
|
|
|
423
422
|
const main = $('#main');
|
|
424
423
|
const toast = $('#toast');
|
|
425
424
|
const searchInput = $('#search');
|
|
426
|
-
const
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
send: '发送', fillSend: '填写并发送', connectToUse: '连接后使用', try: '💬 去试试', connectTry: '🔗 连接后试用', configureConnect: '🔑 录入凭据并连接', reconfigureCredential: '🔑 重新配置凭据', loading: '加载中…',
|
|
432
|
-
},
|
|
433
|
-
en: {
|
|
434
|
-
market: 'Marketplace', installed: 'Installed', search: 'Search connectors…', add: '+ Add connector', refresh: 'Refresh',
|
|
435
|
-
tryExamples: 'Try these prompts', next: 'Next', tools: 'Tool details', toolSearch: 'Search tool name or description…',
|
|
436
|
-
disconnect: 'Disconnect', details: 'Details', connect: 'Connect', connected: 'Connected', configure: 'Configure',
|
|
437
|
-
send: 'Send', fillSend: 'Fill & send', connectToUse: 'Connect to use', try: '💬 Try it', connectTry: '🔗 Connect to try', configureConnect: '🔑 Add key & connect', reconfigureCredential: '🔑 Reconfigure key', loading: 'Loading…',
|
|
438
|
-
},
|
|
425
|
+
const LABELS = {
|
|
426
|
+
details: '详情', connect: '连接', connected: '已连接', configure: '配置',
|
|
427
|
+
send: '发送', fillSend: '填写并发送', connectToUse: '连接后使用', try: '💬 去试试',
|
|
428
|
+
connectTry: '🔗 连接后试用', configureConnect: '🔑 录入凭据并连接',
|
|
429
|
+
reconfigureCredential: '🔑 重新配置凭据', loading: '加载中…',
|
|
439
430
|
};
|
|
440
|
-
|
|
441
|
-
try { locale = localStorage.getItem('mcp-connector:locale') === 'en' ? 'en' : 'zh'; } catch {}
|
|
442
|
-
const t = (key) => I18N[locale]?.[key] || I18N.zh[key] || key;
|
|
431
|
+
const t = (key) => LABELS[key] || key;
|
|
443
432
|
const MCP_JSON_EXAMPLE = JSON.stringify({
|
|
444
433
|
mcpServers: {
|
|
445
434
|
'my-server': {
|
|
@@ -450,12 +439,6 @@
|
|
|
450
439
|
},
|
|
451
440
|
}, null, 2);
|
|
452
441
|
|
|
453
|
-
function applyLocale() {
|
|
454
|
-
document.documentElement.lang = locale === 'en' ? 'en' : 'zh-CN';
|
|
455
|
-
document.querySelectorAll('[data-i18n]').forEach((node) => { node.textContent = t(node.dataset.i18n); });
|
|
456
|
-
document.querySelectorAll('[data-i18n-placeholder]').forEach((node) => { node.placeholder = t(node.dataset.i18nPlaceholder); });
|
|
457
|
-
$('#locale-toggle').textContent = locale === 'zh' ? 'EN' : '中';
|
|
458
|
-
}
|
|
459
442
|
let view = 'market';
|
|
460
443
|
let marketItems = {};
|
|
461
444
|
let searchQuery = '';
|
|
@@ -510,7 +493,7 @@
|
|
|
510
493
|
button.disabled = pending;
|
|
511
494
|
if (pending) {
|
|
512
495
|
button.dataset.idleLabel = button.textContent;
|
|
513
|
-
button.textContent =
|
|
496
|
+
button.textContent = '正在发送…';
|
|
514
497
|
} else if (button.dataset.idleLabel) {
|
|
515
498
|
button.textContent = button.dataset.idleLabel;
|
|
516
499
|
delete button.dataset.idleLabel;
|
|
@@ -1162,13 +1145,6 @@
|
|
|
1162
1145
|
}
|
|
1163
1146
|
|
|
1164
1147
|
$('#add-connection').addEventListener('click', () => openAddConnection('json'));
|
|
1165
|
-
$('#locale-toggle').addEventListener('click', () => {
|
|
1166
|
-
locale = locale === 'zh' ? 'en' : 'zh';
|
|
1167
|
-
try { localStorage.setItem('mcp-connector:locale', locale); } catch {}
|
|
1168
|
-
applyLocale();
|
|
1169
|
-
refresh();
|
|
1170
|
-
if ($('#detail-overlay').classList.contains('active')) renderPromptPage();
|
|
1171
|
-
});
|
|
1172
1148
|
main.addEventListener('click', (event) => {
|
|
1173
1149
|
if (!event.target.closest('#catalog-more')) return;
|
|
1174
1150
|
catalogRenderLimit += 60;
|
|
@@ -1195,7 +1171,6 @@
|
|
|
1195
1171
|
refresh();
|
|
1196
1172
|
});
|
|
1197
1173
|
|
|
1198
|
-
applyLocale();
|
|
1199
1174
|
refresh();
|
|
1200
1175
|
})();
|
|
1201
1176
|
</script>
|