cowork-os 0.3.21 → 0.3.25
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 +372 -10
- package/connectors/README.md +20 -0
- package/connectors/asana-mcp/README.md +24 -0
- package/connectors/asana-mcp/dist/index.js +427 -0
- package/connectors/asana-mcp/package.json +15 -0
- package/connectors/asana-mcp/src/index.ts +553 -0
- package/connectors/asana-mcp/tsconfig.json +13 -0
- package/connectors/hubspot-mcp/README.md +35 -0
- package/connectors/hubspot-mcp/dist/index.js +454 -0
- package/connectors/hubspot-mcp/package.json +15 -0
- package/connectors/hubspot-mcp/src/index.ts +562 -0
- package/connectors/hubspot-mcp/tsconfig.json +13 -0
- package/connectors/jira-mcp/README.md +49 -0
- package/connectors/jira-mcp/dist/index.js +588 -0
- package/connectors/jira-mcp/package.json +15 -0
- package/connectors/jira-mcp/src/index.ts +711 -0
- package/connectors/jira-mcp/tsconfig.json +13 -0
- package/connectors/linear-mcp/README.md +22 -0
- package/connectors/linear-mcp/dist/index.js +402 -0
- package/connectors/linear-mcp/package.json +15 -0
- package/connectors/linear-mcp/src/index.ts +522 -0
- package/connectors/linear-mcp/tsconfig.json +13 -0
- package/connectors/okta-mcp/README.md +24 -0
- package/connectors/okta-mcp/dist/index.js +411 -0
- package/connectors/okta-mcp/package.json +15 -0
- package/connectors/okta-mcp/src/index.ts +520 -0
- package/connectors/okta-mcp/tsconfig.json +13 -0
- package/connectors/salesforce-mcp/README.md +47 -0
- package/connectors/salesforce-mcp/dist/index.js +584 -0
- package/connectors/salesforce-mcp/package.json +15 -0
- package/connectors/salesforce-mcp/src/index.ts +722 -0
- package/connectors/salesforce-mcp/tsconfig.json +13 -0
- package/connectors/servicenow-mcp/README.md +26 -0
- package/connectors/servicenow-mcp/dist/index.js +400 -0
- package/connectors/servicenow-mcp/package.json +15 -0
- package/connectors/servicenow-mcp/src/index.ts +500 -0
- package/connectors/servicenow-mcp/tsconfig.json +13 -0
- package/connectors/templates/mcp-connector/README.md +31 -0
- package/connectors/templates/mcp-connector/package.json +15 -0
- package/connectors/templates/mcp-connector/src/index.ts +330 -0
- package/connectors/templates/mcp-connector/tsconfig.json +13 -0
- package/connectors/zendesk-mcp/README.md +40 -0
- package/connectors/zendesk-mcp/dist/index.js +431 -0
- package/connectors/zendesk-mcp/package.json +15 -0
- package/connectors/zendesk-mcp/src/index.ts +543 -0
- package/connectors/zendesk-mcp/tsconfig.json +13 -0
- package/dist/electron/electron/agent/custom-skill-loader.js +31 -1
- package/dist/electron/electron/agent/daemon.js +189 -13
- package/dist/electron/electron/agent/executor.js +895 -78
- package/dist/electron/electron/agent/llm/anthropic-compatible-provider.js +177 -0
- package/dist/electron/electron/agent/llm/azure-openai-provider.js +328 -0
- package/dist/electron/electron/agent/llm/bedrock-provider.js +49 -9
- package/dist/electron/electron/agent/llm/github-copilot-provider.js +97 -0
- package/dist/electron/electron/agent/llm/groq-provider.js +33 -0
- package/dist/electron/electron/agent/llm/index.js +13 -1
- package/dist/electron/electron/agent/llm/kimi-provider.js +33 -0
- package/dist/electron/electron/agent/llm/openai-compatible-provider.js +116 -0
- package/dist/electron/electron/agent/llm/openai-compatible.js +111 -0
- package/dist/electron/electron/agent/llm/openai-oauth.js +2 -1
- package/dist/electron/electron/agent/llm/openrouter-provider.js +1 -1
- package/dist/electron/electron/agent/llm/provider-factory.js +350 -4
- package/dist/electron/electron/agent/llm/types.js +66 -1
- package/dist/electron/electron/agent/llm/xai-provider.js +33 -0
- package/dist/electron/electron/agent/search/provider-factory.js +38 -2
- package/dist/electron/electron/agent/tools/box-tools.js +231 -0
- package/dist/electron/electron/agent/tools/builtin-settings.js +28 -0
- package/dist/electron/electron/agent/tools/dropbox-tools.js +237 -0
- package/dist/electron/electron/agent/tools/file-tools.js +66 -3
- package/dist/electron/electron/agent/tools/google-drive-tools.js +227 -0
- package/dist/electron/electron/agent/tools/grep-tools.js +90 -10
- package/dist/electron/electron/agent/tools/image-tools.js +11 -1
- package/dist/electron/electron/agent/tools/notion-tools.js +312 -0
- package/dist/electron/electron/agent/tools/onedrive-tools.js +217 -0
- package/dist/electron/electron/agent/tools/registry.js +548 -10
- package/dist/electron/electron/agent/tools/search-tools.js +28 -10
- package/dist/electron/electron/agent/tools/sharepoint-tools.js +243 -0
- package/dist/electron/electron/agent/tools/shell-tools.js +12 -3
- package/dist/electron/electron/agent/tools/x-tools.js +1 -1
- package/dist/electron/electron/agents/agent-dispatch.js +63 -0
- package/dist/electron/electron/database/repositories.js +19 -5
- package/dist/electron/electron/database/schema.js +8 -0
- package/dist/electron/electron/gateway/channels/whatsapp.js +55 -0
- package/dist/electron/electron/gateway/index.js +75 -1
- package/dist/electron/electron/gateway/router.js +209 -154
- package/dist/electron/electron/ipc/canvas-handlers.js +5 -0
- package/dist/electron/electron/ipc/handlers.js +763 -267
- package/dist/electron/electron/main.js +63 -0
- package/dist/electron/electron/mcp/oauth/connector-oauth.js +333 -0
- package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +503 -154
- package/dist/electron/electron/memory/MemoryService.js +2 -1
- package/dist/electron/electron/preload.js +78 -1
- package/dist/electron/electron/settings/appearance-manager.js +18 -1
- package/dist/electron/electron/settings/box-manager.js +54 -0
- package/dist/electron/electron/settings/dropbox-manager.js +54 -0
- package/dist/electron/electron/settings/google-drive-manager.js +54 -0
- package/dist/electron/electron/settings/notion-manager.js +56 -0
- package/dist/electron/electron/settings/onedrive-manager.js +54 -0
- package/dist/electron/electron/settings/sharepoint-manager.js +54 -0
- package/dist/electron/electron/utils/box-api.js +153 -0
- package/dist/electron/electron/utils/dropbox-api.js +144 -0
- package/dist/electron/electron/utils/env-migration.js +19 -0
- package/dist/electron/electron/utils/google-drive-api.js +152 -0
- package/dist/electron/electron/utils/notion-api.js +103 -0
- package/dist/electron/electron/utils/onedrive-api.js +113 -0
- package/dist/electron/electron/utils/sharepoint-api.js +109 -0
- package/dist/electron/electron/utils/validation.js +98 -3
- package/dist/electron/electron/utils/x-cli.js +1 -1
- package/dist/electron/shared/channelMessages.js +284 -3
- package/dist/electron/shared/llm-provider-catalog.js +198 -0
- package/dist/electron/shared/types.js +90 -1
- package/package.json +14 -3
- package/resources/skills/nano-banana-pro.json +4 -4
- package/resources/skills/openai-image-gen.json +3 -3
- package/resources/skills/scripts/gen.py +163 -0
- package/resources/skills/scripts/generate_image.py +91 -0
- package/src/electron/agent/custom-skill-loader.ts +34 -1
- package/src/electron/agent/daemon.ts +210 -14
- package/src/electron/agent/executor.ts +1124 -85
- package/src/electron/agent/llm/anthropic-compatible-provider.ts +214 -0
- package/src/electron/agent/llm/azure-openai-provider.ts +388 -0
- package/src/electron/agent/llm/bedrock-provider.ts +62 -9
- package/src/electron/agent/llm/github-copilot-provider.ts +117 -0
- package/src/electron/agent/llm/groq-provider.ts +39 -0
- package/src/electron/agent/llm/index.ts +6 -0
- package/src/electron/agent/llm/kimi-provider.ts +39 -0
- package/src/electron/agent/llm/openai-compatible-provider.ts +153 -0
- package/src/electron/agent/llm/openai-compatible.ts +133 -0
- package/src/electron/agent/llm/openai-oauth.ts +2 -1
- package/src/electron/agent/llm/openrouter-provider.ts +2 -1
- package/src/electron/agent/llm/provider-factory.ts +459 -6
- package/src/electron/agent/llm/types.ts +95 -1
- package/src/electron/agent/llm/xai-provider.ts +39 -0
- package/src/electron/agent/search/provider-factory.ts +43 -2
- package/src/electron/agent/tools/box-tools.ts +239 -0
- package/src/electron/agent/tools/builtin-settings.ts +36 -0
- package/src/electron/agent/tools/dropbox-tools.ts +237 -0
- package/src/electron/agent/tools/file-tools.ts +66 -3
- package/src/electron/agent/tools/gmail-tools.ts +240 -0
- package/src/electron/agent/tools/google-calendar-tools.ts +258 -0
- package/src/electron/agent/tools/google-drive-tools.ts +228 -0
- package/src/electron/agent/tools/grep-tools.ts +97 -12
- package/src/electron/agent/tools/image-tools.ts +11 -1
- package/src/electron/agent/tools/notion-tools.ts +330 -0
- package/src/electron/agent/tools/onedrive-tools.ts +217 -0
- package/src/electron/agent/tools/registry.ts +794 -10
- package/src/electron/agent/tools/search-tools.ts +29 -11
- package/src/electron/agent/tools/sharepoint-tools.ts +247 -0
- package/src/electron/agent/tools/shell-tools.ts +11 -3
- package/src/electron/agent/tools/x-tools.ts +1 -1
- package/src/electron/agents/agent-dispatch.ts +79 -0
- package/src/electron/database/SecureSettingsRepository.ts +7 -1
- package/src/electron/database/repositories.ts +58 -6
- package/src/electron/database/schema.ts +8 -0
- package/src/electron/gateway/channels/discord.ts +4 -0
- package/src/electron/gateway/channels/google-chat.ts +3 -0
- package/src/electron/gateway/channels/line.ts +3 -0
- package/src/electron/gateway/channels/matrix-client.ts +15 -0
- package/src/electron/gateway/channels/matrix.ts +31 -0
- package/src/electron/gateway/channels/mattermost.ts +3 -0
- package/src/electron/gateway/channels/signal.ts +3 -0
- package/src/electron/gateway/channels/slack.ts +9 -4
- package/src/electron/gateway/channels/teams.ts +4 -0
- package/src/electron/gateway/channels/telegram.ts +2 -0
- package/src/electron/gateway/channels/twitch.ts +2 -0
- package/src/electron/gateway/channels/types.ts +8 -0
- package/src/electron/gateway/channels/whatsapp.ts +66 -0
- package/src/electron/gateway/index.ts +95 -2
- package/src/electron/gateway/router.ts +231 -161
- package/src/electron/gateway/security.ts +21 -9
- package/src/electron/ipc/canvas-handlers.ts +10 -0
- package/src/electron/ipc/handlers.ts +848 -292
- package/src/electron/main.ts +35 -0
- package/src/electron/mcp/oauth/connector-oauth.ts +448 -0
- package/src/electron/mcp/registry/MCPRegistryManager.ts +343 -12
- package/src/electron/memory/MemoryService.ts +7 -1
- package/src/electron/preload.ts +200 -5
- package/src/electron/settings/appearance-manager.ts +20 -2
- package/src/electron/settings/box-manager.ts +58 -0
- package/src/electron/settings/dropbox-manager.ts +58 -0
- package/src/electron/settings/google-workspace-manager.ts +59 -0
- package/src/electron/settings/notion-manager.ts +60 -0
- package/src/electron/settings/onedrive-manager.ts +58 -0
- package/src/electron/settings/sharepoint-manager.ts +58 -0
- package/src/electron/utils/box-api.ts +184 -0
- package/src/electron/utils/dropbox-api.ts +171 -0
- package/src/electron/utils/env-migration.ts +22 -0
- package/src/electron/utils/gmail-api.ts +121 -0
- package/src/electron/utils/google-calendar-api.ts +115 -0
- package/src/electron/utils/google-workspace-api.ts +228 -0
- package/src/electron/utils/google-workspace-auth.ts +109 -0
- package/src/electron/utils/google-workspace-oauth.ts +232 -0
- package/src/electron/utils/notion-api.ts +126 -0
- package/src/electron/utils/onedrive-api.ts +137 -0
- package/src/electron/utils/sharepoint-api.ts +132 -0
- package/src/electron/utils/validation.ts +128 -1
- package/src/electron/utils/x-cli.ts +1 -1
- package/src/renderer/App.tsx +119 -8
- package/src/renderer/components/ActivityFeedItem.tsx +34 -17
- package/src/renderer/components/AgentWorkingStatePanel.tsx +7 -5
- package/src/renderer/components/AppearanceSettings.tsx +37 -2
- package/src/renderer/components/BlueBubblesSettings.tsx +18 -7
- package/src/renderer/components/BoxSettings.tsx +203 -0
- package/src/renderer/components/BrowserView.tsx +101 -0
- package/src/renderer/components/BuiltinToolsSettings.tsx +105 -0
- package/src/renderer/components/CanvasPreview.tsx +68 -1
- package/src/renderer/components/ConnectorEnvModal.tsx +116 -0
- package/src/renderer/components/ConnectorSetupModal.tsx +566 -0
- package/src/renderer/components/ConnectorsSettings.tsx +397 -0
- package/src/renderer/components/ControlPlaneSettings.tsx +2 -0
- package/src/renderer/components/DiscordSettings.tsx +18 -7
- package/src/renderer/components/DropboxSettings.tsx +202 -0
- package/src/renderer/components/EmailSettings.tsx +18 -7
- package/src/renderer/components/FileViewer.tsx +21 -13
- package/src/renderer/components/GoogleChatSettings.tsx +17 -7
- package/src/renderer/components/GoogleWorkspaceSettings.tsx +332 -0
- package/src/renderer/components/ImessageSettings.tsx +22 -11
- package/src/renderer/components/LineIcons.tsx +376 -0
- package/src/renderer/components/LineSettings.tsx +18 -7
- package/src/renderer/components/MCPSettings.tsx +56 -0
- package/src/renderer/components/MainContent.tsx +740 -76
- package/src/renderer/components/MatrixSettings.tsx +18 -7
- package/src/renderer/components/MattermostSettings.tsx +18 -7
- package/src/renderer/components/NodesSettings.tsx +58 -99
- package/src/renderer/components/NotificationPanel.tsx +25 -11
- package/src/renderer/components/NotionSettings.tsx +231 -0
- package/src/renderer/components/Onboarding/Onboarding.tsx +13 -1
- package/src/renderer/components/OnboardingModal.tsx +70 -1
- package/src/renderer/components/OneDriveSettings.tsx +212 -0
- package/src/renderer/components/RightPanel.tsx +141 -28
- package/src/renderer/components/ScheduledTasksSettings.tsx +10 -62
- package/src/renderer/components/SearchSettings.tsx +118 -114
- package/src/renderer/components/Settings.tsx +1425 -651
- package/src/renderer/components/SharePointSettings.tsx +224 -0
- package/src/renderer/components/Sidebar.tsx +94 -19
- package/src/renderer/components/SignalSettings.tsx +18 -7
- package/src/renderer/components/SkillHubBrowser.tsx +144 -185
- package/src/renderer/components/SlackSettings.tsx +18 -7
- package/src/renderer/components/TaskQuickActions.tsx +11 -6
- package/src/renderer/components/TaskTimeline.tsx +58 -26
- package/src/renderer/components/TeamsSettings.tsx +18 -7
- package/src/renderer/components/TelegramSettings.tsx +18 -7
- package/src/renderer/components/ThemeIcon.tsx +16 -0
- package/src/renderer/components/TwitchSettings.tsx +18 -7
- package/src/renderer/components/VoiceSettings.tsx +30 -74
- package/src/renderer/components/WhatsAppSettings.tsx +48 -37
- package/src/renderer/components/WorkingStateHistory.tsx +7 -5
- package/src/renderer/components/WorkspaceSelector.tsx +42 -13
- package/src/renderer/hooks/useOnboardingFlow.ts +21 -0
- package/src/renderer/styles/index.css +2333 -209
- package/src/shared/channelMessages.ts +367 -4
- package/src/shared/llm-provider-catalog.ts +217 -0
- package/src/shared/types.ts +251 -2
|
@@ -8,11 +8,47 @@
|
|
|
8
8
|
* - Install servers from the registry
|
|
9
9
|
* - Check for updates to installed servers
|
|
10
10
|
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
11
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
45
|
exports.MCPRegistryManager = void 0;
|
|
13
46
|
const uuid_1 = require("uuid");
|
|
14
47
|
const child_process_1 = require("child_process");
|
|
15
48
|
const util_1 = require("util");
|
|
49
|
+
const electron_1 = require("electron");
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
16
52
|
const settings_1 = require("../settings");
|
|
17
53
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
18
54
|
// Cache duration in milliseconds (15 minutes)
|
|
@@ -20,209 +56,518 @@ const REGISTRY_CACHE_DURATION = 15 * 60 * 1000;
|
|
|
20
56
|
// Built-in registry of common MCP servers
|
|
21
57
|
// This is used as a fallback when the remote registry is unavailable
|
|
22
58
|
// Package versions verified against npm registry as of 2026-01
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
59
|
+
const BASE_BUILTIN_SERVERS = [
|
|
60
|
+
{
|
|
61
|
+
id: 'filesystem',
|
|
62
|
+
name: 'Filesystem',
|
|
63
|
+
description: 'Provides secure file system access with configurable root directories',
|
|
64
|
+
version: '2026.1.14',
|
|
65
|
+
author: 'Anthropic',
|
|
66
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
67
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
68
|
+
license: 'MIT',
|
|
69
|
+
installMethod: 'npm',
|
|
70
|
+
installCommand: 'npx',
|
|
71
|
+
packageName: '@modelcontextprotocol/server-filesystem',
|
|
72
|
+
transport: 'stdio',
|
|
73
|
+
defaultCommand: 'npx',
|
|
74
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-filesystem'],
|
|
75
|
+
tools: [
|
|
76
|
+
{ name: 'read_file', description: 'Read complete file contents' },
|
|
77
|
+
{ name: 'read_multiple_files', description: 'Read multiple files at once' },
|
|
78
|
+
{ name: 'write_file', description: 'Write content to file' },
|
|
79
|
+
{ name: 'edit_file', description: 'Edit file with line-based operations' },
|
|
80
|
+
{ name: 'create_directory', description: 'Create a new directory' },
|
|
81
|
+
{ name: 'list_directory', description: 'List directory contents' },
|
|
82
|
+
{ name: 'directory_tree', description: 'Get recursive directory tree' },
|
|
83
|
+
{ name: 'move_file', description: 'Move or rename files and directories' },
|
|
84
|
+
{ name: 'search_files', description: 'Search for files matching pattern' },
|
|
85
|
+
{ name: 'get_file_info', description: 'Get file metadata' },
|
|
86
|
+
],
|
|
87
|
+
tags: ['filesystem', 'files', 'official'],
|
|
88
|
+
category: 'filesystem',
|
|
89
|
+
verified: true,
|
|
90
|
+
featured: true,
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'github',
|
|
94
|
+
name: 'GitHub',
|
|
95
|
+
description: 'Provides GitHub API integration for repository management. Requires GITHUB_PERSONAL_ACCESS_TOKEN.',
|
|
96
|
+
version: '2025.4.8',
|
|
97
|
+
author: 'Anthropic',
|
|
98
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
99
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
100
|
+
license: 'MIT',
|
|
101
|
+
installMethod: 'npm',
|
|
102
|
+
installCommand: 'npx',
|
|
103
|
+
packageName: '@modelcontextprotocol/server-github',
|
|
104
|
+
transport: 'stdio',
|
|
105
|
+
defaultCommand: 'npx',
|
|
106
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-github'],
|
|
107
|
+
defaultEnv: {
|
|
108
|
+
GITHUB_PERSONAL_ACCESS_TOKEN: '',
|
|
109
|
+
},
|
|
110
|
+
tools: [
|
|
111
|
+
{ name: 'create_or_update_file', description: 'Create or update a file in a repository' },
|
|
112
|
+
{ name: 'search_repositories', description: 'Search GitHub repositories' },
|
|
113
|
+
{ name: 'create_repository', description: 'Create a new repository' },
|
|
114
|
+
{ name: 'get_file_contents', description: 'Get contents of a file in a repository' },
|
|
115
|
+
{ name: 'push_files', description: 'Push multiple files to a repository' },
|
|
116
|
+
{ name: 'create_issue', description: 'Create a new issue' },
|
|
117
|
+
{ name: 'create_pull_request', description: 'Create a pull request' },
|
|
118
|
+
{ name: 'fork_repository', description: 'Fork a repository' },
|
|
119
|
+
{ name: 'create_branch', description: 'Create a new branch' },
|
|
120
|
+
],
|
|
121
|
+
tags: ['github', 'git', 'version-control', 'official'],
|
|
122
|
+
category: 'development',
|
|
123
|
+
verified: true,
|
|
124
|
+
featured: true,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
id: 'puppeteer',
|
|
128
|
+
name: 'Puppeteer',
|
|
129
|
+
description: 'Browser automation and web scraping using Puppeteer',
|
|
130
|
+
version: '2025.5.12',
|
|
131
|
+
author: 'Anthropic',
|
|
132
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
133
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
134
|
+
license: 'MIT',
|
|
135
|
+
installMethod: 'npm',
|
|
136
|
+
installCommand: 'npx',
|
|
137
|
+
packageName: '@modelcontextprotocol/server-puppeteer',
|
|
138
|
+
transport: 'stdio',
|
|
139
|
+
defaultCommand: 'npx',
|
|
140
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-puppeteer'],
|
|
141
|
+
tools: [
|
|
142
|
+
{ name: 'puppeteer_navigate', description: 'Navigate to a URL' },
|
|
143
|
+
{ name: 'puppeteer_screenshot', description: 'Take a screenshot of the page' },
|
|
144
|
+
{ name: 'puppeteer_click', description: 'Click an element on the page' },
|
|
145
|
+
{ name: 'puppeteer_fill', description: 'Fill out an input field' },
|
|
146
|
+
{ name: 'puppeteer_select', description: 'Select an option from a dropdown' },
|
|
147
|
+
{ name: 'puppeteer_hover', description: 'Hover over an element' },
|
|
148
|
+
{ name: 'puppeteer_evaluate', description: 'Execute JavaScript in the page' },
|
|
149
|
+
],
|
|
150
|
+
tags: ['browser', 'automation', 'web', 'official'],
|
|
151
|
+
category: 'automation',
|
|
152
|
+
verified: true,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'memory',
|
|
156
|
+
name: 'Memory',
|
|
157
|
+
description: 'Knowledge graph-based persistent memory system',
|
|
158
|
+
version: '2026.1.26',
|
|
159
|
+
author: 'Anthropic',
|
|
160
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
161
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
162
|
+
license: 'MIT',
|
|
163
|
+
installMethod: 'npm',
|
|
164
|
+
installCommand: 'npx',
|
|
165
|
+
packageName: '@modelcontextprotocol/server-memory',
|
|
166
|
+
transport: 'stdio',
|
|
167
|
+
defaultCommand: 'npx',
|
|
168
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-memory'],
|
|
169
|
+
tools: [
|
|
170
|
+
{ name: 'create_entities', description: 'Create new entities in the knowledge graph' },
|
|
171
|
+
{ name: 'create_relations', description: 'Create relations between entities' },
|
|
172
|
+
{ name: 'add_observations', description: 'Add observations to entities' },
|
|
173
|
+
{ name: 'delete_entities', description: 'Delete entities from the graph' },
|
|
174
|
+
{ name: 'delete_observations', description: 'Delete observations from entities' },
|
|
175
|
+
{ name: 'delete_relations', description: 'Delete relations between entities' },
|
|
176
|
+
{ name: 'read_graph', description: 'Read the entire knowledge graph' },
|
|
177
|
+
{ name: 'search_nodes', description: 'Search for nodes in the graph' },
|
|
178
|
+
{ name: 'open_nodes', description: 'Open specific nodes by name' },
|
|
179
|
+
],
|
|
180
|
+
tags: ['memory', 'knowledge-graph', 'persistence', 'official'],
|
|
181
|
+
category: 'memory',
|
|
182
|
+
verified: true,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
id: 'postgres',
|
|
186
|
+
name: 'PostgreSQL',
|
|
187
|
+
description: 'PostgreSQL database read-only queries. Requires POSTGRES_CONNECTION_STRING.',
|
|
188
|
+
version: '0.6.2',
|
|
189
|
+
author: 'Anthropic',
|
|
190
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
191
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
192
|
+
license: 'MIT',
|
|
193
|
+
installMethod: 'npm',
|
|
194
|
+
installCommand: 'npx',
|
|
195
|
+
packageName: '@modelcontextprotocol/server-postgres',
|
|
196
|
+
transport: 'stdio',
|
|
197
|
+
defaultCommand: 'npx',
|
|
198
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-postgres'],
|
|
199
|
+
defaultEnv: {
|
|
200
|
+
POSTGRES_CONNECTION_STRING: '',
|
|
201
|
+
},
|
|
202
|
+
tools: [
|
|
203
|
+
{ name: 'query', description: 'Execute a read-only SQL query' },
|
|
204
|
+
],
|
|
205
|
+
tags: ['database', 'postgres', 'sql', 'official'],
|
|
206
|
+
category: 'database',
|
|
207
|
+
verified: true,
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: 'sequential-thinking',
|
|
211
|
+
name: 'Sequential Thinking',
|
|
212
|
+
description: 'MCP server for sequential thinking and problem solving',
|
|
213
|
+
version: '2025.12.18',
|
|
214
|
+
author: 'Anthropic',
|
|
215
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
216
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
217
|
+
license: 'MIT',
|
|
218
|
+
installMethod: 'npm',
|
|
219
|
+
installCommand: 'npx',
|
|
220
|
+
packageName: '@modelcontextprotocol/server-sequential-thinking',
|
|
221
|
+
transport: 'stdio',
|
|
222
|
+
defaultCommand: 'npx',
|
|
223
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-sequential-thinking'],
|
|
224
|
+
tools: [
|
|
225
|
+
{ name: 'sequentialthinking', description: 'Sequential thinking and problem solving' },
|
|
226
|
+
],
|
|
227
|
+
tags: ['thinking', 'reasoning', 'official'],
|
|
228
|
+
category: 'reasoning',
|
|
229
|
+
verified: true,
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: 'everything',
|
|
233
|
+
name: 'Everything (Demo)',
|
|
234
|
+
description: 'MCP server that exercises all features of the MCP protocol. Useful for testing.',
|
|
235
|
+
version: '2026.1.26',
|
|
236
|
+
author: 'Anthropic',
|
|
237
|
+
homepage: 'https://modelcontextprotocol.io',
|
|
238
|
+
repository: 'https://github.com/modelcontextprotocol/servers',
|
|
239
|
+
license: 'MIT',
|
|
240
|
+
installMethod: 'npm',
|
|
241
|
+
installCommand: 'npx',
|
|
242
|
+
packageName: '@modelcontextprotocol/server-everything',
|
|
243
|
+
transport: 'stdio',
|
|
244
|
+
defaultCommand: 'npx',
|
|
245
|
+
defaultArgs: ['-y', '@modelcontextprotocol/server-everything'],
|
|
246
|
+
tools: [
|
|
247
|
+
{ name: 'echo', description: 'Echo back the input' },
|
|
248
|
+
{ name: 'add', description: 'Add two numbers' },
|
|
249
|
+
{ name: 'longRunningOperation', description: 'Test long-running operations' },
|
|
250
|
+
{ name: 'sampleLLM', description: 'Sample from an LLM' },
|
|
251
|
+
{ name: 'getTinyImage', description: 'Get a tiny test image' },
|
|
252
|
+
],
|
|
253
|
+
tags: ['demo', 'testing', 'official'],
|
|
254
|
+
category: 'testing',
|
|
255
|
+
verified: true,
|
|
256
|
+
},
|
|
257
|
+
];
|
|
258
|
+
const LOCAL_CONNECTOR_VERSION = '0.1.0';
|
|
259
|
+
function getConnectorScriptPath(connectorName) {
|
|
260
|
+
const baseDir = electron_1.app.isPackaged
|
|
261
|
+
? path.join(process.resourcesPath, 'connectors')
|
|
262
|
+
: path.join(process.cwd(), 'connectors');
|
|
263
|
+
return path.join(baseDir, connectorName, 'dist', 'index.js');
|
|
264
|
+
}
|
|
265
|
+
function getConnectorCommandArgs(connectorName) {
|
|
266
|
+
const scriptPath = getConnectorScriptPath(connectorName);
|
|
267
|
+
return {
|
|
268
|
+
// Use Electron's bundled Node runtime when possible
|
|
269
|
+
command: process.execPath,
|
|
270
|
+
args: ['--runAsNode', scriptPath],
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function getConnectorEntries() {
|
|
274
|
+
const salesforceCommand = getConnectorCommandArgs('salesforce-mcp');
|
|
275
|
+
const jiraCommand = getConnectorCommandArgs('jira-mcp');
|
|
276
|
+
const hubspotCommand = getConnectorCommandArgs('hubspot-mcp');
|
|
277
|
+
const zendeskCommand = getConnectorCommandArgs('zendesk-mcp');
|
|
278
|
+
const servicenowCommand = getConnectorCommandArgs('servicenow-mcp');
|
|
279
|
+
const linearCommand = getConnectorCommandArgs('linear-mcp');
|
|
280
|
+
const asanaCommand = getConnectorCommandArgs('asana-mcp');
|
|
281
|
+
const oktaCommand = getConnectorCommandArgs('okta-mcp');
|
|
282
|
+
return [
|
|
27
283
|
{
|
|
28
|
-
id: '
|
|
29
|
-
name: '
|
|
30
|
-
description: '
|
|
31
|
-
version:
|
|
32
|
-
author: '
|
|
33
|
-
homepage: 'https://
|
|
34
|
-
repository: 'https://github.com/
|
|
284
|
+
id: 'salesforce',
|
|
285
|
+
name: 'Salesforce',
|
|
286
|
+
description: 'Salesforce CRM connector for CoWork OS. Requires SALESFORCE_INSTANCE_URL and an access token.',
|
|
287
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
288
|
+
author: 'CoWork OS',
|
|
289
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
290
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
35
291
|
license: 'MIT',
|
|
36
|
-
installMethod: '
|
|
37
|
-
installCommand: 'npx',
|
|
38
|
-
packageName: '@modelcontextprotocol/server-filesystem',
|
|
292
|
+
installMethod: 'manual',
|
|
39
293
|
transport: 'stdio',
|
|
40
|
-
defaultCommand:
|
|
41
|
-
defaultArgs:
|
|
294
|
+
defaultCommand: salesforceCommand.command,
|
|
295
|
+
defaultArgs: salesforceCommand.args,
|
|
296
|
+
defaultEnv: {
|
|
297
|
+
SALESFORCE_INSTANCE_URL: '',
|
|
298
|
+
SALESFORCE_ACCESS_TOKEN: '',
|
|
299
|
+
SALESFORCE_CLIENT_ID: '',
|
|
300
|
+
SALESFORCE_CLIENT_SECRET: '',
|
|
301
|
+
SALESFORCE_REFRESH_TOKEN: '',
|
|
302
|
+
SALESFORCE_LOGIN_URL: 'https://login.salesforce.com',
|
|
303
|
+
SALESFORCE_API_VERSION: '60.0',
|
|
304
|
+
},
|
|
42
305
|
tools: [
|
|
43
|
-
{ name: '
|
|
44
|
-
{ name: '
|
|
45
|
-
{ name: '
|
|
46
|
-
{ name: '
|
|
47
|
-
{ name: '
|
|
48
|
-
{ name: '
|
|
49
|
-
{ name: '
|
|
50
|
-
{ name: 'move_file', description: 'Move or rename files and directories' },
|
|
51
|
-
{ name: 'search_files', description: 'Search for files matching pattern' },
|
|
52
|
-
{ name: 'get_file_info', description: 'Get file metadata' },
|
|
306
|
+
{ name: 'salesforce.health', description: 'Check connector health and auth status' },
|
|
307
|
+
{ name: 'salesforce.list_objects', description: 'List available Salesforce objects' },
|
|
308
|
+
{ name: 'salesforce.describe_object', description: 'Describe an object and its fields' },
|
|
309
|
+
{ name: 'salesforce.get_record', description: 'Fetch a record by id' },
|
|
310
|
+
{ name: 'salesforce.search_records', description: 'Run a SOQL query' },
|
|
311
|
+
{ name: 'salesforce.create_record', description: 'Create a record' },
|
|
312
|
+
{ name: 'salesforce.update_record', description: 'Update a record' },
|
|
53
313
|
],
|
|
54
|
-
tags: ['
|
|
55
|
-
category: '
|
|
314
|
+
tags: ['salesforce', 'crm', 'enterprise', 'connector'],
|
|
315
|
+
category: 'enterprise',
|
|
56
316
|
verified: true,
|
|
57
317
|
featured: true,
|
|
58
318
|
},
|
|
59
319
|
{
|
|
60
|
-
id: '
|
|
61
|
-
name: '
|
|
62
|
-
description: '
|
|
63
|
-
version:
|
|
64
|
-
author: '
|
|
65
|
-
homepage: 'https://
|
|
66
|
-
repository: 'https://github.com/
|
|
320
|
+
id: 'jira',
|
|
321
|
+
name: 'Jira',
|
|
322
|
+
description: 'Jira Cloud connector for CoWork OS. Requires JIRA_BASE_URL and auth (token or API token).',
|
|
323
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
324
|
+
author: 'CoWork OS',
|
|
325
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
326
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
67
327
|
license: 'MIT',
|
|
68
|
-
installMethod: '
|
|
69
|
-
installCommand: 'npx',
|
|
70
|
-
packageName: '@modelcontextprotocol/server-github',
|
|
328
|
+
installMethod: 'manual',
|
|
71
329
|
transport: 'stdio',
|
|
72
|
-
defaultCommand:
|
|
73
|
-
defaultArgs:
|
|
330
|
+
defaultCommand: jiraCommand.command,
|
|
331
|
+
defaultArgs: jiraCommand.args,
|
|
74
332
|
defaultEnv: {
|
|
75
|
-
|
|
333
|
+
JIRA_BASE_URL: '',
|
|
334
|
+
JIRA_ACCESS_TOKEN: '',
|
|
335
|
+
JIRA_EMAIL: '',
|
|
336
|
+
JIRA_API_TOKEN: '',
|
|
337
|
+
JIRA_CLIENT_ID: '',
|
|
338
|
+
JIRA_CLIENT_SECRET: '',
|
|
339
|
+
JIRA_REFRESH_TOKEN: '',
|
|
340
|
+
JIRA_API_VERSION: '3',
|
|
76
341
|
},
|
|
77
342
|
tools: [
|
|
78
|
-
{ name: '
|
|
79
|
-
{ name: '
|
|
80
|
-
{ name: '
|
|
81
|
-
{ name: '
|
|
82
|
-
{ name: '
|
|
83
|
-
{ name: '
|
|
84
|
-
{ name: 'create_pull_request', description: 'Create a pull request' },
|
|
85
|
-
{ name: 'fork_repository', description: 'Fork a repository' },
|
|
86
|
-
{ name: 'create_branch', description: 'Create a new branch' },
|
|
343
|
+
{ name: 'jira.health', description: 'Check connector health and auth status' },
|
|
344
|
+
{ name: 'jira.list_projects', description: 'List Jira projects' },
|
|
345
|
+
{ name: 'jira.get_issue', description: 'Fetch an issue by id or key' },
|
|
346
|
+
{ name: 'jira.search_issues', description: 'Run a JQL query' },
|
|
347
|
+
{ name: 'jira.create_issue', description: 'Create an issue' },
|
|
348
|
+
{ name: 'jira.update_issue', description: 'Update an issue' },
|
|
87
349
|
],
|
|
88
|
-
tags: ['
|
|
89
|
-
category: '
|
|
350
|
+
tags: ['jira', 'issue-tracking', 'enterprise', 'connector'],
|
|
351
|
+
category: 'enterprise',
|
|
90
352
|
verified: true,
|
|
91
353
|
featured: true,
|
|
92
354
|
},
|
|
93
355
|
{
|
|
94
|
-
id: '
|
|
95
|
-
name: '
|
|
96
|
-
description: '
|
|
97
|
-
version:
|
|
98
|
-
author: '
|
|
99
|
-
homepage: 'https://
|
|
100
|
-
repository: 'https://github.com/
|
|
356
|
+
id: 'hubspot',
|
|
357
|
+
name: 'HubSpot',
|
|
358
|
+
description: 'HubSpot CRM connector for CoWork OS. Requires HUBSPOT_ACCESS_TOKEN.',
|
|
359
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
360
|
+
author: 'CoWork OS',
|
|
361
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
362
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
101
363
|
license: 'MIT',
|
|
102
|
-
installMethod: '
|
|
103
|
-
installCommand: 'npx',
|
|
104
|
-
packageName: '@modelcontextprotocol/server-puppeteer',
|
|
364
|
+
installMethod: 'manual',
|
|
105
365
|
transport: 'stdio',
|
|
106
|
-
defaultCommand:
|
|
107
|
-
defaultArgs:
|
|
366
|
+
defaultCommand: hubspotCommand.command,
|
|
367
|
+
defaultArgs: hubspotCommand.args,
|
|
368
|
+
defaultEnv: {
|
|
369
|
+
HUBSPOT_ACCESS_TOKEN: '',
|
|
370
|
+
HUBSPOT_CLIENT_ID: '',
|
|
371
|
+
HUBSPOT_CLIENT_SECRET: '',
|
|
372
|
+
HUBSPOT_REFRESH_TOKEN: '',
|
|
373
|
+
HUBSPOT_BASE_URL: 'https://api.hubapi.com',
|
|
374
|
+
},
|
|
108
375
|
tools: [
|
|
109
|
-
{ name: '
|
|
110
|
-
{ name: '
|
|
111
|
-
{ name: '
|
|
112
|
-
{ name: '
|
|
113
|
-
{ name: '
|
|
114
|
-
{ name: 'puppeteer_hover', description: 'Hover over an element' },
|
|
115
|
-
{ name: 'puppeteer_evaluate', description: 'Execute JavaScript in the page' },
|
|
376
|
+
{ name: 'hubspot.health', description: 'Check connector health and auth status' },
|
|
377
|
+
{ name: 'hubspot.search_objects', description: 'Search CRM objects' },
|
|
378
|
+
{ name: 'hubspot.get_object', description: 'Fetch a CRM object by id' },
|
|
379
|
+
{ name: 'hubspot.create_object', description: 'Create a CRM object' },
|
|
380
|
+
{ name: 'hubspot.update_object', description: 'Update a CRM object' },
|
|
116
381
|
],
|
|
117
|
-
tags: ['
|
|
118
|
-
category: '
|
|
382
|
+
tags: ['hubspot', 'crm', 'enterprise', 'connector'],
|
|
383
|
+
category: 'enterprise',
|
|
119
384
|
verified: true,
|
|
120
385
|
},
|
|
121
386
|
{
|
|
122
|
-
id: '
|
|
123
|
-
name: '
|
|
124
|
-
description: '
|
|
125
|
-
version:
|
|
126
|
-
author: '
|
|
127
|
-
homepage: 'https://
|
|
128
|
-
repository: 'https://github.com/
|
|
387
|
+
id: 'zendesk',
|
|
388
|
+
name: 'Zendesk',
|
|
389
|
+
description: 'Zendesk Support connector for CoWork OS. Requires ZENDESK credentials.',
|
|
390
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
391
|
+
author: 'CoWork OS',
|
|
392
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
393
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
129
394
|
license: 'MIT',
|
|
130
|
-
installMethod: '
|
|
131
|
-
installCommand: 'npx',
|
|
132
|
-
packageName: '@modelcontextprotocol/server-memory',
|
|
395
|
+
installMethod: 'manual',
|
|
133
396
|
transport: 'stdio',
|
|
134
|
-
defaultCommand:
|
|
135
|
-
defaultArgs:
|
|
397
|
+
defaultCommand: zendeskCommand.command,
|
|
398
|
+
defaultArgs: zendeskCommand.args,
|
|
399
|
+
defaultEnv: {
|
|
400
|
+
ZENDESK_SUBDOMAIN: '',
|
|
401
|
+
ZENDESK_EMAIL: '',
|
|
402
|
+
ZENDESK_API_TOKEN: '',
|
|
403
|
+
ZENDESK_ACCESS_TOKEN: '',
|
|
404
|
+
ZENDESK_CLIENT_ID: '',
|
|
405
|
+
ZENDESK_CLIENT_SECRET: '',
|
|
406
|
+
ZENDESK_REFRESH_TOKEN: '',
|
|
407
|
+
},
|
|
136
408
|
tools: [
|
|
137
|
-
{ name: '
|
|
138
|
-
{ name: '
|
|
139
|
-
{ name: '
|
|
140
|
-
{ name: '
|
|
141
|
-
{ name: '
|
|
142
|
-
{ name: 'delete_relations', description: 'Delete relations between entities' },
|
|
143
|
-
{ name: 'read_graph', description: 'Read the entire knowledge graph' },
|
|
144
|
-
{ name: 'search_nodes', description: 'Search for nodes in the graph' },
|
|
145
|
-
{ name: 'open_nodes', description: 'Open specific nodes by name' },
|
|
409
|
+
{ name: 'zendesk.health', description: 'Check connector health and auth status' },
|
|
410
|
+
{ name: 'zendesk.search_tickets', description: 'Search Zendesk tickets' },
|
|
411
|
+
{ name: 'zendesk.get_ticket', description: 'Fetch a ticket by id' },
|
|
412
|
+
{ name: 'zendesk.create_ticket', description: 'Create a ticket' },
|
|
413
|
+
{ name: 'zendesk.update_ticket', description: 'Update a ticket' },
|
|
146
414
|
],
|
|
147
|
-
tags: ['
|
|
148
|
-
category: '
|
|
415
|
+
tags: ['zendesk', 'support', 'enterprise', 'connector'],
|
|
416
|
+
category: 'enterprise',
|
|
149
417
|
verified: true,
|
|
150
418
|
},
|
|
151
419
|
{
|
|
152
|
-
id: '
|
|
153
|
-
name: '
|
|
154
|
-
description: '
|
|
155
|
-
version:
|
|
156
|
-
author: '
|
|
157
|
-
homepage: 'https://
|
|
158
|
-
repository: 'https://github.com/
|
|
420
|
+
id: 'servicenow',
|
|
421
|
+
name: 'ServiceNow',
|
|
422
|
+
description: 'ServiceNow connector for CoWork OS. Requires instance URL and credentials.',
|
|
423
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
424
|
+
author: 'CoWork OS',
|
|
425
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
426
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
159
427
|
license: 'MIT',
|
|
160
|
-
installMethod: '
|
|
161
|
-
installCommand: 'npx',
|
|
162
|
-
packageName: '@modelcontextprotocol/server-postgres',
|
|
428
|
+
installMethod: 'manual',
|
|
163
429
|
transport: 'stdio',
|
|
164
|
-
defaultCommand:
|
|
165
|
-
defaultArgs:
|
|
430
|
+
defaultCommand: servicenowCommand.command,
|
|
431
|
+
defaultArgs: servicenowCommand.args,
|
|
166
432
|
defaultEnv: {
|
|
167
|
-
|
|
433
|
+
SERVICENOW_INSTANCE_URL: '',
|
|
434
|
+
SERVICENOW_INSTANCE: '',
|
|
435
|
+
SERVICENOW_USERNAME: '',
|
|
436
|
+
SERVICENOW_PASSWORD: '',
|
|
437
|
+
SERVICENOW_ACCESS_TOKEN: '',
|
|
168
438
|
},
|
|
169
439
|
tools: [
|
|
170
|
-
{ name: '
|
|
440
|
+
{ name: 'servicenow.health', description: 'Check connector health and auth status' },
|
|
441
|
+
{ name: 'servicenow.list_records', description: 'List records from a table' },
|
|
442
|
+
{ name: 'servicenow.get_record', description: 'Fetch a record by sys_id' },
|
|
443
|
+
{ name: 'servicenow.create_record', description: 'Create a record in a table' },
|
|
444
|
+
{ name: 'servicenow.update_record', description: 'Update a record in a table' },
|
|
171
445
|
],
|
|
172
|
-
tags: ['
|
|
173
|
-
category: '
|
|
446
|
+
tags: ['servicenow', 'itsm', 'enterprise', 'connector'],
|
|
447
|
+
category: 'enterprise',
|
|
174
448
|
verified: true,
|
|
175
449
|
},
|
|
176
450
|
{
|
|
177
|
-
id: '
|
|
178
|
-
name: '
|
|
179
|
-
description: '
|
|
180
|
-
version:
|
|
181
|
-
author: '
|
|
182
|
-
homepage: 'https://
|
|
183
|
-
repository: 'https://github.com/
|
|
451
|
+
id: 'linear',
|
|
452
|
+
name: 'Linear',
|
|
453
|
+
description: 'Linear GraphQL connector for CoWork OS. Requires LINEAR_API_KEY.',
|
|
454
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
455
|
+
author: 'CoWork OS',
|
|
456
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
457
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
184
458
|
license: 'MIT',
|
|
185
|
-
installMethod: '
|
|
186
|
-
installCommand: 'npx',
|
|
187
|
-
packageName: '@modelcontextprotocol/server-sequential-thinking',
|
|
459
|
+
installMethod: 'manual',
|
|
188
460
|
transport: 'stdio',
|
|
189
|
-
defaultCommand:
|
|
190
|
-
defaultArgs:
|
|
461
|
+
defaultCommand: linearCommand.command,
|
|
462
|
+
defaultArgs: linearCommand.args,
|
|
463
|
+
defaultEnv: {
|
|
464
|
+
LINEAR_API_KEY: '',
|
|
465
|
+
},
|
|
191
466
|
tools: [
|
|
192
|
-
{ name: '
|
|
467
|
+
{ name: 'linear.health', description: 'Check connector health and auth status' },
|
|
468
|
+
{ name: 'linear.list_projects', description: 'List Linear projects' },
|
|
469
|
+
{ name: 'linear.search_issues', description: 'Search issues by title' },
|
|
470
|
+
{ name: 'linear.get_issue', description: 'Fetch an issue by id' },
|
|
193
471
|
],
|
|
194
|
-
tags: ['
|
|
195
|
-
category: '
|
|
472
|
+
tags: ['linear', 'project', 'enterprise', 'connector'],
|
|
473
|
+
category: 'enterprise',
|
|
196
474
|
verified: true,
|
|
197
475
|
},
|
|
198
476
|
{
|
|
199
|
-
id: '
|
|
200
|
-
name: '
|
|
201
|
-
description: '
|
|
202
|
-
version:
|
|
203
|
-
author: '
|
|
204
|
-
homepage: 'https://
|
|
205
|
-
repository: 'https://github.com/
|
|
477
|
+
id: 'asana',
|
|
478
|
+
name: 'Asana',
|
|
479
|
+
description: 'Asana connector for CoWork OS. Requires ASANA_ACCESS_TOKEN.',
|
|
480
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
481
|
+
author: 'CoWork OS',
|
|
482
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
483
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
206
484
|
license: 'MIT',
|
|
207
|
-
installMethod: '
|
|
208
|
-
installCommand: 'npx',
|
|
209
|
-
packageName: '@modelcontextprotocol/server-everything',
|
|
485
|
+
installMethod: 'manual',
|
|
210
486
|
transport: 'stdio',
|
|
211
|
-
defaultCommand:
|
|
212
|
-
defaultArgs:
|
|
487
|
+
defaultCommand: asanaCommand.command,
|
|
488
|
+
defaultArgs: asanaCommand.args,
|
|
489
|
+
defaultEnv: {
|
|
490
|
+
ASANA_ACCESS_TOKEN: '',
|
|
491
|
+
},
|
|
213
492
|
tools: [
|
|
214
|
-
{ name: '
|
|
215
|
-
{ name: '
|
|
216
|
-
{ name: '
|
|
217
|
-
{ name: '
|
|
218
|
-
{ name: '
|
|
493
|
+
{ name: 'asana.health', description: 'Check connector health and auth status' },
|
|
494
|
+
{ name: 'asana.list_projects', description: 'List projects in a workspace' },
|
|
495
|
+
{ name: 'asana.get_task', description: 'Fetch a task by id' },
|
|
496
|
+
{ name: 'asana.search_tasks', description: 'Search tasks in a workspace' },
|
|
497
|
+
{ name: 'asana.create_task', description: 'Create a task' },
|
|
498
|
+
{ name: 'asana.update_task', description: 'Update a task' },
|
|
219
499
|
],
|
|
220
|
-
tags: ['
|
|
221
|
-
category: '
|
|
500
|
+
tags: ['asana', 'project', 'enterprise', 'connector'],
|
|
501
|
+
category: 'enterprise',
|
|
222
502
|
verified: true,
|
|
223
503
|
},
|
|
224
|
-
|
|
225
|
-
|
|
504
|
+
{
|
|
505
|
+
id: 'okta',
|
|
506
|
+
name: 'Okta',
|
|
507
|
+
description: 'Okta connector for CoWork OS. Requires OKTA_BASE_URL and OKTA_API_TOKEN.',
|
|
508
|
+
version: LOCAL_CONNECTOR_VERSION,
|
|
509
|
+
author: 'CoWork OS',
|
|
510
|
+
homepage: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
511
|
+
repository: 'https://github.com/CoWork-OS/CoWork-OS',
|
|
512
|
+
license: 'MIT',
|
|
513
|
+
installMethod: 'manual',
|
|
514
|
+
transport: 'stdio',
|
|
515
|
+
defaultCommand: oktaCommand.command,
|
|
516
|
+
defaultArgs: oktaCommand.args,
|
|
517
|
+
defaultEnv: {
|
|
518
|
+
OKTA_BASE_URL: '',
|
|
519
|
+
OKTA_API_TOKEN: '',
|
|
520
|
+
},
|
|
521
|
+
tools: [
|
|
522
|
+
{ name: 'okta.health', description: 'Check connector health and auth status' },
|
|
523
|
+
{ name: 'okta.list_users', description: 'List users' },
|
|
524
|
+
{ name: 'okta.get_user', description: 'Fetch a user by id' },
|
|
525
|
+
{ name: 'okta.create_user', description: 'Create a user' },
|
|
526
|
+
{ name: 'okta.update_user', description: 'Update a user' },
|
|
527
|
+
],
|
|
528
|
+
tags: ['okta', 'identity', 'enterprise', 'connector'],
|
|
529
|
+
category: 'enterprise',
|
|
530
|
+
verified: true,
|
|
531
|
+
},
|
|
532
|
+
];
|
|
533
|
+
}
|
|
534
|
+
function getBuiltinRegistry() {
|
|
535
|
+
return {
|
|
536
|
+
version: '1.1.0',
|
|
537
|
+
lastUpdated: new Date().toISOString(),
|
|
538
|
+
servers: [...BASE_BUILTIN_SERVERS, ...getConnectorEntries()],
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
function mergeLocalConnectors(registry) {
|
|
542
|
+
const localConnectors = getConnectorEntries();
|
|
543
|
+
const existingIds = new Set(registry.servers.map((s) => s.id));
|
|
544
|
+
const existingNames = new Set(registry.servers.map((s) => s.name.toLowerCase()));
|
|
545
|
+
const mergedServers = [...registry.servers];
|
|
546
|
+
for (const connector of localConnectors) {
|
|
547
|
+
if (existingIds.has(connector.id) || existingNames.has(connector.name.toLowerCase())) {
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
550
|
+
mergedServers.push(connector);
|
|
551
|
+
}
|
|
552
|
+
return {
|
|
553
|
+
...registry,
|
|
554
|
+
servers: mergedServers,
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
function validateManualEntry(entry) {
|
|
558
|
+
if (entry.installMethod !== 'manual')
|
|
559
|
+
return;
|
|
560
|
+
const command = entry.defaultCommand || entry.installCommand;
|
|
561
|
+
if (!command) {
|
|
562
|
+
throw new Error(`Manual server ${entry.name} is missing a command`);
|
|
563
|
+
}
|
|
564
|
+
const args = entry.defaultArgs || [];
|
|
565
|
+
const scriptPath = args.find((arg) => /\.(c|m)?js$/i.test(arg));
|
|
566
|
+
if (scriptPath && !fs.existsSync(scriptPath)) {
|
|
567
|
+
throw new Error(`Connector script not found at ${scriptPath}. ` +
|
|
568
|
+
`Build connectors first (npm run build:connectors) or reinstall.`);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
226
571
|
class MCPRegistryManager {
|
|
227
572
|
/**
|
|
228
573
|
* Fetch the MCP server registry
|
|
@@ -235,7 +580,7 @@ class MCPRegistryManager {
|
|
|
235
580
|
const settings = settings_1.MCPSettingsManager.loadSettings();
|
|
236
581
|
if (!settings.registryEnabled) {
|
|
237
582
|
console.log('[MCPRegistryManager] Registry disabled, using built-in registry');
|
|
238
|
-
return
|
|
583
|
+
return getBuiltinRegistry();
|
|
239
584
|
}
|
|
240
585
|
try {
|
|
241
586
|
console.log(`[MCPRegistryManager] Fetching registry from ${settings.registryUrl}`);
|
|
@@ -253,11 +598,13 @@ class MCPRegistryManager {
|
|
|
253
598
|
if (!registry.version || !Array.isArray(registry.servers)) {
|
|
254
599
|
throw new Error('Invalid registry format');
|
|
255
600
|
}
|
|
601
|
+
// Merge local connectors into remote registry
|
|
602
|
+
const mergedRegistry = mergeLocalConnectors(registry);
|
|
256
603
|
// Update cache
|
|
257
|
-
this.registryCache =
|
|
604
|
+
this.registryCache = mergedRegistry;
|
|
258
605
|
this.cacheTimestamp = Date.now();
|
|
259
|
-
console.log(`[MCPRegistryManager] Fetched ${
|
|
260
|
-
return
|
|
606
|
+
console.log(`[MCPRegistryManager] Fetched ${mergedRegistry.servers.length} servers from registry (with local connectors)`);
|
|
607
|
+
return mergedRegistry;
|
|
261
608
|
}
|
|
262
609
|
catch (error) {
|
|
263
610
|
// Only log on first failure or after cache expires
|
|
@@ -265,9 +612,9 @@ class MCPRegistryManager {
|
|
|
265
612
|
console.warn('[MCPRegistryManager] Failed to fetch registry, using built-in:', error.message);
|
|
266
613
|
}
|
|
267
614
|
// Cache the built-in registry to prevent repeated fetch attempts
|
|
268
|
-
this.registryCache =
|
|
615
|
+
this.registryCache = getBuiltinRegistry();
|
|
269
616
|
this.cacheTimestamp = Date.now();
|
|
270
|
-
return
|
|
617
|
+
return this.registryCache;
|
|
271
618
|
}
|
|
272
619
|
}
|
|
273
620
|
/**
|
|
@@ -349,6 +696,8 @@ class MCPRegistryManager {
|
|
|
349
696
|
if (existingIndex !== -1) {
|
|
350
697
|
throw new Error(`Server ${entry.name} is already installed`);
|
|
351
698
|
}
|
|
699
|
+
// Validate manual entries (local connectors)
|
|
700
|
+
validateManualEntry(entry);
|
|
352
701
|
// Verify the npm package exists before installing
|
|
353
702
|
if (entry.packageName && entry.installMethod === 'npm') {
|
|
354
703
|
const verification = await this.verifyNpmPackage(entry.packageName);
|