Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/renderer/src/components/PluginMarketplaceView.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ describe('PluginMarketplaceView MCP config helpers', () => {
'sequential-thinking',
'memory',
'brave-search',
'parallel-search',
'vercel'
]))
expect(recommendedMarketplaceItemIds()).not.toContain('google-workspace')
Expand Down Expand Up @@ -64,6 +65,39 @@ describe('PluginMarketplaceView MCP config helpers', () => {
})
})

it('builds the Parallel Search remote MCP config without secrets', () => {
const config = buildRemoteMcpConfig({
'parallel-search': 'https://search.parallel.ai/mcp'
})

expect(config).toEqual({
servers: {
'parallel-search': {
enabled: true,
transport: 'streamable-http',
url: 'https://search.parallel.ai/mcp',
headers: {},
env: {},
trustScope: 'user',
timeoutMs: 30_000
}
}
})
expect(auditMarketplaceInstall({
id: 'parallel-search',
kind: 'mcp',
title: 'Parallel Search',
description: 'Search the live web and fetch clean Markdown.',
group: 'recommended',
mcpConfig: () => config,
supplyChain: { source: 'remote-mcp', permissions: ['network'] }
}, '/workspace')).toEqual({
ok: true,
permissions: ['network'],
errors: []
})
})

it('rejects non-https remote MCP server URLs', () => {
expect(() => buildRemoteMcpConfig({ evil: 'http://mcp.vercel.com' })).toThrow(/https/i)
expect(() => buildRemoteMcpConfig({ evil: 'file:///etc/passwd' })).toThrow(/https/i)
Expand Down
12 changes: 12 additions & 0 deletions src/renderer/src/components/PluginMarketplaceView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,18 @@ const RECOMMENDED_ITEMS: MarketplaceItem[] = [
),
supplyChain: { source: 'mcp', packageName: '@modelcontextprotocol/server-brave-search', version: '0.6.2', permissions: ['command', 'network', 'secret'] }
},
{
id: 'parallel-search',
kind: 'mcp',
titleKey: 'pluginMcpParallelSearchTitle',
descriptionKey: 'pluginMcpParallelSearchDesc',
group: 'recommended',
mcpConfig: () =>
buildRemoteMcpConfig({
'parallel-search': 'https://search.parallel.ai/mcp'
}),
supplyChain: { source: 'remote-mcp', permissions: ['network'] }
},
{
id: 'code-review',
kind: 'skill',
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "Keep reusable project facts and preferences available across tasks.",
"pluginMcpBraveSearchTitle": "Brave Search",
"pluginMcpBraveSearchDesc": "Search the web through Brave Search. Requires your own API key.",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "Search the live web and fetch clean Markdown with no account or API key required.",
"pluginMcpVercelTitle": "Vercel",
"pluginMcpVercelDesc": "Manage Vercel projects, deployments, logs, and docs through the official remote MCP server.",
"pluginMcpGoogleWorkspaceTitle": "Google Workspace",
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/hi/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "पुन: प्रयोज्य परियोजना तथ्यों और प्राथमिकताओं को सभी कार्यों में उपलब्ध रखें।",
"pluginMcpBraveSearchTitle": "बहादुर खोज",
"pluginMcpBraveSearchDesc": "ब्रेव सर्च के माध्यम से वेब पर खोजें। आपकी अपनी API कुंजी की आवश्यकता है.",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "लाइव वेब पर खोजें और साफ़ Markdown प्राप्त करें—किसी खाते या API कुंजी की आवश्यकता नहीं।",
"pluginMcpVercelTitle": "वर्सेल",
"pluginMcpVercelDesc": "आधिकारिक रिमोट एमसीपी सर्वर के माध्यम से वर्सेल प्रोजेक्ट्स, परिनियोजन, लॉग और दस्तावेज़ प्रबंधित करें।",
"pluginMcpGoogleWorkspaceTitle": "गूगल कार्यक्षेत्र",
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/ja/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "再利用可能なプロジェクトの事実と設定をタスク間で利用できるようにします。",
"pluginMcpBraveSearchTitle": "ブレイブサーチ",
"pluginMcpBraveSearchDesc": "Brave Search でウェブを検索します。独自の API キーが必要です。",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "アカウントや API キーなしで、最新のウェブを検索し、整形された Markdown を取得します。",
"pluginMcpVercelTitle": "ヴェルセル",
"pluginMcpVercelDesc": "公式リモート MCP サーバーを通じて Vercel プロジェクト、デプロイメント、ログ、ドキュメントを管理します。",
"pluginMcpGoogleWorkspaceTitle": "Google ワークスペース",
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/ko/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "작업 전반에 걸쳐 재사용 가능한 프로젝트 정보와 기본 설정을 유지하세요.",
"pluginMcpBraveSearchTitle": "용감한 검색",
"pluginMcpBraveSearchDesc": "Brave Search를 통해 웹을 검색해보세요. 자체 API 키가 필요합니다.",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "계정이나 API 키 없이 실시간 웹을 검색하고 정리된 Markdown을 가져옵니다.",
"pluginMcpVercelTitle": "베르셀",
"pluginMcpVercelDesc": "공식 원격 MCP 서버를 통해 Vercel 프로젝트, 배포, 로그 및 문서를 관리하세요.",
"pluginMcpGoogleWorkspaceTitle": "Google 작업공간",
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/ru/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "Сохраняйте повторно используемые факты и настройки проекта доступными для разных задач.",
"pluginMcpBraveSearchTitle": "Смелый поиск",
"pluginMcpBraveSearchDesc": "Выполняйте поиск в Интернете с помощью Brave Search. Требуется собственный ключ API.",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "Ищите актуальную информацию в интернете и извлекайте чистый Markdown без учётной записи или API-ключа.",
"pluginMcpVercelTitle": "Версель",
"pluginMcpVercelDesc": "Управляйте проектами Vercel, развертываниями, журналами и документами через официальный удаленный сервер MCP.",
"pluginMcpGoogleWorkspaceTitle": "Google Рабочая область",
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/th/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "เก็บข้อเท็จจริงและการตั้งค่าของโครงการที่นำมาใช้ซ้ำได้ในงานต่างๆ",
"pluginMcpBraveSearchTitle": "การค้นหาที่กล้าหาญ",
"pluginMcpBraveSearchDesc": "ค้นหาเว็บผ่าน Brave Search ต้องใช้คีย์ API ของคุณเอง",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "ค้นหาเว็บแบบเรียลไทม์และดึง Markdown ที่สะอาด โดยไม่ต้องมีบัญชีหรือคีย์ API",
"pluginMcpVercelTitle": "เวอร์เซล",
"pluginMcpVercelDesc": "จัดการโปรเจ็กต์ Vercel การปรับใช้ บันทึก และเอกสารผ่านเซิร์ฟเวอร์ MCP ระยะไกลอย่างเป็นทางการ",
"pluginMcpGoogleWorkspaceTitle": "Google เวิร์คสเปซ",
Expand Down
2 changes: 2 additions & 0 deletions src/renderer/src/locales/zh/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,8 @@
"pluginMcpMemoryDesc": "在任务之间保留可复用的项目事实和偏好。",
"pluginMcpBraveSearchTitle": "Brave Search",
"pluginMcpBraveSearchDesc": "通过 Brave Search 搜索网页,需要使用你自己的 API Key。",
"pluginMcpParallelSearchTitle": "Parallel Search",
"pluginMcpParallelSearchDesc": "搜索实时网页并提取整洁的 Markdown,无需账号或 API Key。",
"pluginMcpVercelTitle": "Vercel",
"pluginMcpVercelDesc": "通过官方远程 MCP 管理 Vercel 项目、部署、日志和文档。",
"pluginMcpGoogleWorkspaceTitle": "Google Workspace",
Expand Down