@danainnovations/cortex-mcp 1.0.88 → 1.0.90
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/dist/{chunk-3X6WPEWI.js → chunk-RB5AKDLX.js} +8 -10
- package/dist/{chunk-3X6WPEWI.js.map → chunk-RB5AKDLX.js.map} +1 -1
- package/dist/cli.js +45 -124
- package/dist/cli.js.map +1 -1
- package/dist/{constants-76SAPZ3D.js → constants-66VQYSV7.js} +4 -6
- package/dist/index.d.ts +12 -6
- package/dist/index.js +30 -72
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- /package/dist/{constants-76SAPZ3D.js.map → constants-66VQYSV7.js.map} +0 -0
|
@@ -95,16 +95,15 @@ var AVAILABLE_MCPS = [
|
|
|
95
95
|
description: "Expense reports, entries, receipts, approvals (16 tools)",
|
|
96
96
|
serverName: "cortex-concur",
|
|
97
97
|
authMode: "personal"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: "sonance_brand",
|
|
101
|
+
displayName: "Sonance Brand",
|
|
102
|
+
description: "Brand guidelines, design tokens, component library, logos (28 tools)",
|
|
103
|
+
serverName: "cortex-sonance-brand",
|
|
104
|
+
authMode: "company"
|
|
98
105
|
}
|
|
99
106
|
];
|
|
100
|
-
var SONANCE_BRAND_CONFIG = {
|
|
101
|
-
name: "sonance-brand",
|
|
102
|
-
displayName: "Sonance Brand",
|
|
103
|
-
description: "Brand guidelines, design tokens, component library, logos (28 tools)",
|
|
104
|
-
serverName: "sonance-brand",
|
|
105
|
-
command: "npx",
|
|
106
|
-
args: ["-y", "sonance-brand-mcp@latest"]
|
|
107
|
-
};
|
|
108
107
|
var MCP_NAMES = AVAILABLE_MCPS.map((m) => m.name);
|
|
109
108
|
var DEFAULT_MCPS = [...MCP_NAMES];
|
|
110
109
|
var DEFAULT_API_KEY = "ctx_07d37a81_9f7be06af38d04753090a4034f907a65ec06cd675ed26f65653898388e2d1709";
|
|
@@ -116,7 +115,6 @@ export {
|
|
|
116
115
|
DEFAULT_SERVER_URL,
|
|
117
116
|
PROTOCOL_VERSION,
|
|
118
117
|
AVAILABLE_MCPS,
|
|
119
|
-
SONANCE_BRAND_CONFIG,
|
|
120
118
|
MCP_NAMES,
|
|
121
119
|
DEFAULT_MCPS,
|
|
122
120
|
DEFAULT_API_KEY,
|
|
@@ -124,4 +122,4 @@ export {
|
|
|
124
122
|
CONFIG_FILE_NAME,
|
|
125
123
|
CREDENTIALS_FILE_NAME
|
|
126
124
|
};
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-RB5AKDLX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/** Default Cortex server URL */\nexport const DEFAULT_SERVER_URL = \"https://cortex-bice.vercel.app\";\n\n/** MCP protocol version supported by Cortex (Streamable HTTP) */\nexport const PROTOCOL_VERSION = \"2025-03-26\";\n\n/** Available MCPs with their metadata */\nexport const AVAILABLE_MCPS = [\n {\n name: \"m365\",\n displayName: \"Microsoft 365\",\n description: \"Email, calendar, OneDrive, Teams, meetings, contacts, tasks, notes (33 tools)\",\n serverName: \"cortex-m365\",\n authMode: \"personal\" as const,\n },\n {\n name: \"asana\",\n displayName: \"Asana\",\n description: \"Projects, tasks, teams, workspaces (17 tools)\",\n serverName: \"cortex-asana\",\n authMode: \"personal\" as const,\n },\n {\n name: \"github\",\n displayName: \"GitHub\",\n description: \"Repos, PRs, issues, branches, code review (30 tools)\",\n serverName: \"cortex-github\",\n authMode: \"company\" as const,\n },\n {\n name: \"vercel\",\n displayName: \"Vercel\",\n description: \"Deployments, projects, env vars (15 tools)\",\n serverName: \"cortex-vercel\",\n authMode: \"company\" as const,\n },\n {\n name: \"supabase\",\n displayName: \"Supabase\",\n description: \"Database, migrations, edge functions (20+ tools)\",\n serverName: \"cortex-supabase\",\n authMode: \"company\" as const,\n },\n {\n name: \"bestbuy\",\n displayName: \"Best Buy\",\n description: \"Product search, pricing, reviews, store locations (7 tools)\",\n serverName: \"cortex-bestbuy\",\n authMode: \"company\" as const,\n },\n {\n name: \"mailchimp\",\n displayName: \"Mailchimp\",\n description: \"Audiences, contacts, campaigns, templates, analytics (28 tools)\",\n serverName: \"cortex-mailchimp\",\n authMode: \"personal\" as const,\n },\n {\n name: \"salesforce\",\n displayName: \"Salesforce\",\n description: \"CRM queries, records, reports, and org data (14 tools)\",\n serverName: \"cortex-salesforce\",\n authMode: \"personal\" as const,\n },\n {\n name: \"monday\",\n displayName: \"Monday.com\",\n description: \"Boards, items, groups, updates, workspaces (18 tools)\",\n serverName: \"cortex-monday\",\n authMode: \"personal\" as const,\n installUrl: \"https://auth.monday.com/oauth2/authorize?client_id=c8d2c70bd792a4c36c6f023c0b707517&response_type=install\",\n },\n {\n name: \"slack\",\n displayName: \"Slack\",\n description: \"Messaging, channels, search, reactions, bookmarks (22 tools)\",\n serverName: \"cortex-slack\",\n authMode: \"personal\" as const,\n },\n {\n name: \"powerbi\",\n displayName: \"Power BI\",\n description: \"Workspaces, datasets, push data, DAX queries, reports, dashboards (14 tools)\",\n serverName: \"cortex-powerbi\",\n authMode: \"personal\" as const,\n },\n {\n name: \"databricks\",\n displayName: \"Databricks\",\n description: \"Unity Catalog discovery, SQL queries, data dictionary, jobs (18 tools)\",\n serverName: \"cortex-databricks\",\n authMode: \"company\" as const,\n },\n {\n name: \"concur\",\n displayName: \"SAP Concur\",\n description: \"Expense reports, entries, receipts, approvals (16 tools)\",\n serverName: \"cortex-concur\",\n authMode: \"personal\" as const,\n },\n
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/** Default Cortex server URL */\nexport const DEFAULT_SERVER_URL = \"https://cortex-bice.vercel.app\";\n\n/** MCP protocol version supported by Cortex (Streamable HTTP) */\nexport const PROTOCOL_VERSION = \"2025-03-26\";\n\n/** Available MCPs with their metadata */\nexport const AVAILABLE_MCPS = [\n {\n name: \"m365\",\n displayName: \"Microsoft 365\",\n description: \"Email, calendar, OneDrive, Teams, meetings, contacts, tasks, notes (33 tools)\",\n serverName: \"cortex-m365\",\n authMode: \"personal\" as const,\n },\n {\n name: \"asana\",\n displayName: \"Asana\",\n description: \"Projects, tasks, teams, workspaces (17 tools)\",\n serverName: \"cortex-asana\",\n authMode: \"personal\" as const,\n },\n {\n name: \"github\",\n displayName: \"GitHub\",\n description: \"Repos, PRs, issues, branches, code review (30 tools)\",\n serverName: \"cortex-github\",\n authMode: \"company\" as const,\n },\n {\n name: \"vercel\",\n displayName: \"Vercel\",\n description: \"Deployments, projects, env vars (15 tools)\",\n serverName: \"cortex-vercel\",\n authMode: \"company\" as const,\n },\n {\n name: \"supabase\",\n displayName: \"Supabase\",\n description: \"Database, migrations, edge functions (20+ tools)\",\n serverName: \"cortex-supabase\",\n authMode: \"company\" as const,\n },\n {\n name: \"bestbuy\",\n displayName: \"Best Buy\",\n description: \"Product search, pricing, reviews, store locations (7 tools)\",\n serverName: \"cortex-bestbuy\",\n authMode: \"company\" as const,\n },\n {\n name: \"mailchimp\",\n displayName: \"Mailchimp\",\n description: \"Audiences, contacts, campaigns, templates, analytics (28 tools)\",\n serverName: \"cortex-mailchimp\",\n authMode: \"personal\" as const,\n },\n {\n name: \"salesforce\",\n displayName: \"Salesforce\",\n description: \"CRM queries, records, reports, and org data (14 tools)\",\n serverName: \"cortex-salesforce\",\n authMode: \"personal\" as const,\n },\n {\n name: \"monday\",\n displayName: \"Monday.com\",\n description: \"Boards, items, groups, updates, workspaces (18 tools)\",\n serverName: \"cortex-monday\",\n authMode: \"personal\" as const,\n installUrl: \"https://auth.monday.com/oauth2/authorize?client_id=c8d2c70bd792a4c36c6f023c0b707517&response_type=install\",\n },\n {\n name: \"slack\",\n displayName: \"Slack\",\n description: \"Messaging, channels, search, reactions, bookmarks (22 tools)\",\n serverName: \"cortex-slack\",\n authMode: \"personal\" as const,\n },\n {\n name: \"powerbi\",\n displayName: \"Power BI\",\n description: \"Workspaces, datasets, push data, DAX queries, reports, dashboards (14 tools)\",\n serverName: \"cortex-powerbi\",\n authMode: \"personal\" as const,\n },\n {\n name: \"databricks\",\n displayName: \"Databricks\",\n description: \"Unity Catalog discovery, SQL queries, data dictionary, jobs (18 tools)\",\n serverName: \"cortex-databricks\",\n authMode: \"company\" as const,\n },\n {\n name: \"concur\",\n displayName: \"SAP Concur\",\n description: \"Expense reports, entries, receipts, approvals (16 tools)\",\n serverName: \"cortex-concur\",\n authMode: \"personal\" as const,\n },\n {\n name: \"sonance_brand\",\n displayName: \"Sonance Brand\",\n description: \"Brand guidelines, design tokens, component library, logos (28 tools)\",\n serverName: \"cortex-sonance-brand\",\n authMode: \"company\" as const,\n },\n] as const;\n\n/** All available MCP names */\nexport const MCP_NAMES: string[] = AVAILABLE_MCPS.map((m) => m.name);\n\n/** Default MCPs enabled on fresh setup */\nexport const DEFAULT_MCPS: string[] = [...MCP_NAMES];\n\n/** Shared API key embedded in the package (no user prompt needed) */\nexport const DEFAULT_API_KEY =\n \"ctx_07d37a81_9f7be06af38d04753090a4034f907a65ec06cd675ed26f65653898388e2d1709\";\n\n/** Config directory name */\nexport const CONFIG_DIR_NAME = \".cortex-mcp\";\n\n/** Config file name */\nexport const CONFIG_FILE_NAME = \"config.json\";\n\n/** Credentials file name (stores personal API key from login) */\nexport const CREDENTIALS_FILE_NAME = \"credentials.json\";\n"],"mappings":";;;AACO,IAAM,qBAAqB;AAG3B,IAAM,mBAAmB;AAGzB,IAAM,iBAAiB;AAAA,EAC5B;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AACF;AAGO,IAAM,YAAsB,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI;AAG5D,IAAM,eAAyB,CAAC,GAAG,SAAS;AAG5C,IAAM,kBACX;AAGK,IAAM,kBAAkB;AAGxB,IAAM,mBAAmB;AAGzB,IAAM,wBAAwB;","names":[]}
|
package/dist/cli.js
CHANGED
|
@@ -8,9 +8,8 @@ import {
|
|
|
8
8
|
DEFAULT_MCPS,
|
|
9
9
|
DEFAULT_SERVER_URL,
|
|
10
10
|
MCP_NAMES,
|
|
11
|
-
PROTOCOL_VERSION
|
|
12
|
-
|
|
13
|
-
} from "./chunk-3X6WPEWI.js";
|
|
11
|
+
PROTOCOL_VERSION
|
|
12
|
+
} from "./chunk-RB5AKDLX.js";
|
|
14
13
|
import {
|
|
15
14
|
getAntigravityConfigPath,
|
|
16
15
|
getClaudeDesktopConfigPath,
|
|
@@ -878,7 +877,9 @@ function getWizardHtml() {
|
|
|
878
877
|
powerbi: '<svg viewBox="0 0 16 16"><rect x="2" y="8" width="3" height="6" rx="1"/><rect x="6.5" y="5" width="3" height="9" rx="1"/><rect x="11" y="2" width="3" height="12" rx="1"/></svg>',
|
|
879
878
|
bestbuy: '<svg viewBox="0 0 16 16"><path d="M2 3h12a1 1 0 011 1v8a1 1 0 01-1 1H2a1 1 0 01-1-1V4a1 1 0 011-1zm3 3v4h2V6H5zm4 0v4h2V6H9z"/></svg>',
|
|
880
879
|
mailchimp: '<svg viewBox="0 0 16 16"><path d="M8 2a6 6 0 100 12A6 6 0 008 2zM6.5 10.5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm3 0a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"/></svg>',
|
|
881
|
-
|
|
880
|
+
sonance_brand: '<svg viewBox="0 0 16 16"><path d="M2 3a1 1 0 011-1h2a1 1 0 011 1v10a1 1 0 01-1 1H3a1 1 0 01-1-1V3zm5 2a1 1 0 011-1h2a1 1 0 011 1v8a1 1 0 01-1 1H8a1 1 0 01-1-1V5zm5-3a1 1 0 011-1h1a1 1 0 011 1v11a1 1 0 01-1 1h-1a1 1 0 01-1-1V2z"/></svg>',
|
|
881
|
+
concur: '<svg viewBox="0 0 16 16"><path d="M8 1a7 7 0 100 14A7 7 0 008 1zM4 8.5a.5.5 0 010-1h3.5V5a.5.5 0 011 0v3a.5.5 0 01-.5.5H4z"/></svg>',
|
|
882
|
+
databricks: '<svg viewBox="0 0 16 16"><path d="M8 1L2 4.5v2L8 10l6-3.5v-2L8 1zM2 7.5v2L8 13l6-3.5v-2L8 10 2 7.5zM2 10.5v2L8 16l6-3.5v-2L8 13l-6-2.5z"/></svg>',
|
|
882
883
|
};
|
|
883
884
|
|
|
884
885
|
// \u2500\u2500 Client Icons (inline SVG) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
|
|
@@ -902,8 +903,6 @@ function getWizardHtml() {
|
|
|
902
903
|
state.availableMcps = data.availableMcps || [];
|
|
903
904
|
state.enabledMcps = data.enabledMcps || ['m365'];
|
|
904
905
|
state.selectedMcps = (data.enabledMcps || ['m365']).slice();
|
|
905
|
-
state.sonanceBrand = data.sonanceBrand || null;
|
|
906
|
-
state.includeSonanceBrand = true;
|
|
907
906
|
state.detectedClients = data.detectedClients || [];
|
|
908
907
|
state.configuredClients = (data.config && data.config.configuredClients) || [];
|
|
909
908
|
} catch (err) {
|
|
@@ -1070,12 +1069,16 @@ function getWizardHtml() {
|
|
|
1070
1069
|
powerbi: 'Build dashboards and run data queries on your reports',
|
|
1071
1070
|
bestbuy: 'Search products, compare prices, and find store locations',
|
|
1072
1071
|
databricks: 'Query data warehouses, explore Unity Catalog, and manage jobs',
|
|
1073
|
-
|
|
1072
|
+
sonance_brand: 'Brand guidelines, design tokens, component library, and logo assets for Sonance, IPORT, and Blaze Audio',
|
|
1074
1073
|
};
|
|
1075
1074
|
|
|
1076
1075
|
function renderMcpList(container) {
|
|
1077
1076
|
var enabledList = (state.enabledMcps && state.enabledMcps.length > 0)
|
|
1078
1077
|
? state.enabledMcps : ['m365'];
|
|
1078
|
+
// Sonance Brand is always enabled for all users
|
|
1079
|
+
if (enabledList.indexOf('sonance_brand') === -1) {
|
|
1080
|
+
enabledList.push('sonance_brand');
|
|
1081
|
+
}
|
|
1079
1082
|
var enabledMcps = state.availableMcps.filter(function(m) { return enabledList.indexOf(m.name) !== -1; });
|
|
1080
1083
|
var disabledMcps = state.availableMcps.filter(function(m) { return enabledList.indexOf(m.name) === -1; });
|
|
1081
1084
|
|
|
@@ -1103,28 +1106,6 @@ function getWizardHtml() {
|
|
|
1103
1106
|
html += '</div></div>';
|
|
1104
1107
|
}
|
|
1105
1108
|
|
|
1106
|
-
// Sonance Brand \u2014 internal design system MCP (always available)
|
|
1107
|
-
if (state.sonanceBrand) {
|
|
1108
|
-
var sbChecked = state.includeSonanceBrand !== false;
|
|
1109
|
-
html += '<div class="mcp-section">';
|
|
1110
|
-
html += '<div class="mcp-section-title">Internal Tools</div>';
|
|
1111
|
-
html += '<div class="mcp-section-subtitle">Standalone tools bundled with setup</div>';
|
|
1112
|
-
html += '<div class="mcp-list">';
|
|
1113
|
-
html += '<label class="mcp-item' + (sbChecked ? ' checked' : '') + '" data-mcp="sonance-brand">' +
|
|
1114
|
-
(MCP_TOOLTIPS['sonance-brand'] ? '<span class="mcp-tooltip">' + MCP_TOOLTIPS['sonance-brand'] + '</span>' : '') +
|
|
1115
|
-
'<input type="checkbox" value="sonance-brand"' + (sbChecked ? ' checked' : '') + '>' +
|
|
1116
|
-
(MCP_ICONS['sonance-brand'] ? '<div class="mcp-icon">' + MCP_ICONS['sonance-brand'] + '</div>' : '') +
|
|
1117
|
-
'<div class="mcp-check"><span class="mcp-check-icon">✓</span></div>' +
|
|
1118
|
-
'<div class="mcp-info">' +
|
|
1119
|
-
'<span class="mcp-name">' + escapeHtml(state.sonanceBrand.displayName) +
|
|
1120
|
-
'<span class="mcp-badge company">internal</span>' +
|
|
1121
|
-
'</span>' +
|
|
1122
|
-
'<span class="mcp-desc">' + escapeHtml(state.sonanceBrand.description) + '</span>' +
|
|
1123
|
-
'</div>' +
|
|
1124
|
-
'</label>';
|
|
1125
|
-
html += '</div></div>';
|
|
1126
|
-
}
|
|
1127
|
-
|
|
1128
1109
|
if (disabledMcps.length > 0) {
|
|
1129
1110
|
html += '<div class="mcp-section">';
|
|
1130
1111
|
html += '<div class="mcp-section-title">Coming Soon</div>';
|
|
@@ -1203,18 +1184,8 @@ function getWizardHtml() {
|
|
|
1203
1184
|
|
|
1204
1185
|
function saveMcps() {
|
|
1205
1186
|
var checkboxes = document.querySelectorAll('.mcp-item:not(.disabled) input[type="checkbox"]');
|
|
1206
|
-
var selected =
|
|
1207
|
-
var includeBrand = false;
|
|
1208
|
-
Array.from(checkboxes).forEach(function(cb) {
|
|
1209
|
-
if (!cb.checked) return;
|
|
1210
|
-
if (cb.value === 'sonance-brand') {
|
|
1211
|
-
includeBrand = true;
|
|
1212
|
-
} else {
|
|
1213
|
-
selected.push(cb.value);
|
|
1214
|
-
}
|
|
1215
|
-
});
|
|
1187
|
+
var selected = Array.from(checkboxes).filter(function(cb) { return cb.checked; }).map(function(cb) { return cb.value; });
|
|
1216
1188
|
state.selectedMcps = selected;
|
|
1217
|
-
state.includeSonanceBrand = includeBrand;
|
|
1218
1189
|
goToStep('clients');
|
|
1219
1190
|
}
|
|
1220
1191
|
|
|
@@ -1264,9 +1235,12 @@ function getWizardHtml() {
|
|
|
1264
1235
|
|
|
1265
1236
|
el.innerHTML = html;
|
|
1266
1237
|
|
|
1238
|
+
var manualTypes = ['perplexity', 'stdio'];
|
|
1267
1239
|
el.querySelectorAll('.client-item:not(.disabled):not(.already-configured)').forEach(function(item) {
|
|
1268
|
-
// Auto-select
|
|
1269
|
-
item.
|
|
1240
|
+
// Auto-select detected clients, but NOT manual/additional ones (Perplexity, OpenClaw)
|
|
1241
|
+
if (manualTypes.indexOf(item.dataset.client) === -1) {
|
|
1242
|
+
item.classList.add('checked');
|
|
1243
|
+
}
|
|
1270
1244
|
item.addEventListener('click', function(e) {
|
|
1271
1245
|
e.preventDefault();
|
|
1272
1246
|
item.classList.toggle('checked');
|
|
@@ -1303,7 +1277,7 @@ function getWizardHtml() {
|
|
|
1303
1277
|
var resp = await fetch('/api/clients/configure', {
|
|
1304
1278
|
method: 'POST',
|
|
1305
1279
|
headers: { 'Content-Type': 'application/json' },
|
|
1306
|
-
body: JSON.stringify({ clients: state.selectedClients, mcps: state.selectedMcps
|
|
1280
|
+
body: JSON.stringify({ clients: state.selectedClients, mcps: state.selectedMcps }),
|
|
1307
1281
|
});
|
|
1308
1282
|
var data = await resp.json();
|
|
1309
1283
|
|
|
@@ -1661,10 +1635,6 @@ function detectClients() {
|
|
|
1661
1635
|
});
|
|
1662
1636
|
return clients;
|
|
1663
1637
|
}
|
|
1664
|
-
function buildSonanceBrandEntry() {
|
|
1665
|
-
const isWindowsTarget = getPlatform() === "windows" || isWSL();
|
|
1666
|
-
return isWindowsTarget ? { command: "cmd", args: ["/c", ...SONANCE_BRAND_CONFIG.args] } : { command: SONANCE_BRAND_CONFIG.command, args: [...SONANCE_BRAND_CONFIG.args] };
|
|
1667
|
-
}
|
|
1668
1638
|
function buildHttpEntries(serverUrl, apiKey, mcps) {
|
|
1669
1639
|
const entries = {};
|
|
1670
1640
|
for (const mcp of AVAILABLE_MCPS) {
|
|
@@ -1676,7 +1646,7 @@ function buildHttpEntries(serverUrl, apiKey, mcps) {
|
|
|
1676
1646
|
}
|
|
1677
1647
|
return entries;
|
|
1678
1648
|
}
|
|
1679
|
-
function configureClaudeDesktop(_serverUrl, apiKey, _mcps
|
|
1649
|
+
function configureClaudeDesktop(_serverUrl, apiKey, _mcps) {
|
|
1680
1650
|
const configPath = getClaudeDesktopConfigPath();
|
|
1681
1651
|
const dir = dirname(configPath);
|
|
1682
1652
|
if (!existsSync(dir)) {
|
|
@@ -1712,14 +1682,11 @@ function configureClaudeDesktop(_serverUrl, apiKey, _mcps, includeSonanceBrand =
|
|
|
1712
1682
|
}
|
|
1713
1683
|
const servers = config.mcpServers;
|
|
1714
1684
|
for (const key of Object.keys(servers)) {
|
|
1715
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1685
|
+
if (key.startsWith("cortex-") || key === "cortex") {
|
|
1716
1686
|
delete servers[key];
|
|
1717
1687
|
}
|
|
1718
1688
|
}
|
|
1719
1689
|
servers["cortex"] = cortexEntry;
|
|
1720
|
-
if (includeSonanceBrand) {
|
|
1721
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1722
|
-
}
|
|
1723
1690
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1724
1691
|
if (getPlatform() === "windows") {
|
|
1725
1692
|
const storePath = getStoreClaudePath();
|
|
@@ -1743,12 +1710,9 @@ function configureClaudeDesktop(_serverUrl, apiKey, _mcps, includeSonanceBrand =
|
|
|
1743
1710
|
}
|
|
1744
1711
|
const altServers = altConfig.mcpServers;
|
|
1745
1712
|
for (const key of Object.keys(altServers)) {
|
|
1746
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1713
|
+
if (key.startsWith("cortex-") || key === "cortex") delete altServers[key];
|
|
1747
1714
|
}
|
|
1748
1715
|
altServers["cortex"] = cortexEntry;
|
|
1749
|
-
if (includeSonanceBrand) {
|
|
1750
|
-
altServers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1751
|
-
}
|
|
1752
1716
|
writeFileSync(altPath, JSON.stringify(altConfig, null, 2) + "\n");
|
|
1753
1717
|
} catch {
|
|
1754
1718
|
}
|
|
@@ -1783,7 +1747,7 @@ function configureClaudeDesktop(_serverUrl, apiKey, _mcps, includeSonanceBrand =
|
|
|
1783
1747
|
`Failed to write config to ${configPath}. Claude Desktop may be overwriting the file. Please close Claude Desktop completely (quit from the system tray), then re-run setup.`
|
|
1784
1748
|
);
|
|
1785
1749
|
}
|
|
1786
|
-
function configureClaudeCode(serverUrl, apiKey, mcps
|
|
1750
|
+
function configureClaudeCode(serverUrl, apiKey, mcps) {
|
|
1787
1751
|
for (const mcp of AVAILABLE_MCPS) {
|
|
1788
1752
|
if (!mcps.includes(mcp.name)) continue;
|
|
1789
1753
|
const url = `${serverUrl}/mcp/${mcp.name}`;
|
|
@@ -1796,18 +1760,8 @@ function configureClaudeCode(serverUrl, apiKey, mcps, includeSonanceBrand = true
|
|
|
1796
1760
|
{ stdio: "pipe" }
|
|
1797
1761
|
);
|
|
1798
1762
|
}
|
|
1799
|
-
if (includeSonanceBrand) {
|
|
1800
|
-
try {
|
|
1801
|
-
execSync(`claude mcp remove ${SONANCE_BRAND_CONFIG.name}`, { stdio: "pipe" });
|
|
1802
|
-
} catch {
|
|
1803
|
-
}
|
|
1804
|
-
execSync(
|
|
1805
|
-
`claude mcp add ${SONANCE_BRAND_CONFIG.name} -- ${SONANCE_BRAND_CONFIG.command} ${SONANCE_BRAND_CONFIG.args.join(" ")}`,
|
|
1806
|
-
{ stdio: "pipe" }
|
|
1807
|
-
);
|
|
1808
|
-
}
|
|
1809
1763
|
}
|
|
1810
|
-
function configureCursor(serverUrl, apiKey, mcps
|
|
1764
|
+
function configureCursor(serverUrl, apiKey, mcps) {
|
|
1811
1765
|
const configPath = getCursorConfigPath();
|
|
1812
1766
|
const dir = dirname(configPath);
|
|
1813
1767
|
if (!existsSync(dir)) {
|
|
@@ -1825,18 +1779,15 @@ function configureCursor(serverUrl, apiKey, mcps, includeSonanceBrand = true) {
|
|
|
1825
1779
|
}
|
|
1826
1780
|
const servers = config.mcpServers;
|
|
1827
1781
|
for (const key of Object.keys(servers)) {
|
|
1828
|
-
if (key.startsWith("cortex-")
|
|
1782
|
+
if (key.startsWith("cortex-")) {
|
|
1829
1783
|
delete servers[key];
|
|
1830
1784
|
}
|
|
1831
1785
|
}
|
|
1832
1786
|
const entries = buildHttpEntries(serverUrl, apiKey, mcps);
|
|
1833
1787
|
Object.assign(servers, entries);
|
|
1834
|
-
if (includeSonanceBrand) {
|
|
1835
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1836
|
-
}
|
|
1837
1788
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1838
1789
|
}
|
|
1839
|
-
function configureVSCode(serverUrl, apiKey, mcps
|
|
1790
|
+
function configureVSCode(serverUrl, apiKey, mcps) {
|
|
1840
1791
|
const configPath = getVSCodeMcpConfigPath();
|
|
1841
1792
|
const dir = dirname(configPath);
|
|
1842
1793
|
if (!existsSync(dir)) {
|
|
@@ -1854,18 +1805,15 @@ function configureVSCode(serverUrl, apiKey, mcps, includeSonanceBrand = true) {
|
|
|
1854
1805
|
}
|
|
1855
1806
|
const servers = config.mcpServers;
|
|
1856
1807
|
for (const key of Object.keys(servers)) {
|
|
1857
|
-
if (key.startsWith("cortex-")
|
|
1808
|
+
if (key.startsWith("cortex-")) {
|
|
1858
1809
|
delete servers[key];
|
|
1859
1810
|
}
|
|
1860
1811
|
}
|
|
1861
1812
|
const entries = buildHttpEntries(serverUrl, apiKey, mcps);
|
|
1862
1813
|
Object.assign(servers, entries);
|
|
1863
|
-
if (includeSonanceBrand) {
|
|
1864
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1865
|
-
}
|
|
1866
1814
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1867
1815
|
}
|
|
1868
|
-
function configureAntigravity(serverUrl, apiKey, mcps
|
|
1816
|
+
function configureAntigravity(serverUrl, apiKey, mcps) {
|
|
1869
1817
|
const configPath = getAntigravityConfigPath();
|
|
1870
1818
|
const dir = dirname(configPath);
|
|
1871
1819
|
if (!existsSync(dir)) {
|
|
@@ -1883,18 +1831,15 @@ function configureAntigravity(serverUrl, apiKey, mcps, includeSonanceBrand = tru
|
|
|
1883
1831
|
}
|
|
1884
1832
|
const servers = config.mcpServers;
|
|
1885
1833
|
for (const key of Object.keys(servers)) {
|
|
1886
|
-
if (key.startsWith("cortex-")
|
|
1834
|
+
if (key.startsWith("cortex-")) {
|
|
1887
1835
|
delete servers[key];
|
|
1888
1836
|
}
|
|
1889
1837
|
}
|
|
1890
1838
|
const entries = buildHttpEntries(serverUrl, apiKey, mcps);
|
|
1891
1839
|
Object.assign(servers, entries);
|
|
1892
|
-
if (includeSonanceBrand) {
|
|
1893
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1894
|
-
}
|
|
1895
1840
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1896
1841
|
}
|
|
1897
|
-
function configureCodex(serverUrl, apiKey, mcps
|
|
1842
|
+
function configureCodex(serverUrl, apiKey, mcps) {
|
|
1898
1843
|
const configPath = getCodexConfigPath();
|
|
1899
1844
|
const dir = dirname(configPath);
|
|
1900
1845
|
if (!existsSync(dir)) {
|
|
@@ -1908,7 +1853,7 @@ function configureCodex(serverUrl, apiKey, mcps, includeSonanceBrand = true) {
|
|
|
1908
1853
|
}
|
|
1909
1854
|
}
|
|
1910
1855
|
const cleaned = existingContent.replace(
|
|
1911
|
-
/\[mcp_servers\.
|
|
1856
|
+
/\[mcp_servers\.cortex-[^\]]*\][^[]*(?=\[|$)/g,
|
|
1912
1857
|
""
|
|
1913
1858
|
).trim();
|
|
1914
1859
|
const tomlEntries = [];
|
|
@@ -1920,17 +1865,10 @@ url = "${serverUrl}/mcp/${mcp.name}"
|
|
|
1920
1865
|
http_headers = { "x-api-key" = "${apiKey}" }`
|
|
1921
1866
|
);
|
|
1922
1867
|
}
|
|
1923
|
-
if (includeSonanceBrand) {
|
|
1924
|
-
tomlEntries.push(
|
|
1925
|
-
`[mcp_servers.${SONANCE_BRAND_CONFIG.name}]
|
|
1926
|
-
command = "${SONANCE_BRAND_CONFIG.command}"
|
|
1927
|
-
args = [${SONANCE_BRAND_CONFIG.args.map((a) => `"${a}"`).join(", ")}]`
|
|
1928
|
-
);
|
|
1929
|
-
}
|
|
1930
1868
|
const newContent = (cleaned ? cleaned + "\n\n" : "") + tomlEntries.join("\n\n") + "\n";
|
|
1931
1869
|
writeFileSync(configPath, newContent);
|
|
1932
1870
|
}
|
|
1933
|
-
function configurePerplexity(serverUrl, _apiKey, mcps
|
|
1871
|
+
function configurePerplexity(serverUrl, _apiKey, mcps) {
|
|
1934
1872
|
const lines = [
|
|
1935
1873
|
"Add each MCP as a separate connector in Perplexity:",
|
|
1936
1874
|
" Settings \u2192 Connectors \u2192 Add custom connector",
|
|
@@ -1947,11 +1885,9 @@ function configurePerplexity(serverUrl, _apiKey, mcps, _includeSonanceBrand = tr
|
|
|
1947
1885
|
lines.push(` Transport: Streamable HTTP`);
|
|
1948
1886
|
lines.push("");
|
|
1949
1887
|
}
|
|
1950
|
-
lines.push("Note: Sonance Brand MCP requires stdio transport (npx sonance-brand-mcp).");
|
|
1951
|
-
lines.push("Perplexity may not support stdio \u2014 use Claude Desktop or Claude Code for brand tools.");
|
|
1952
1888
|
return lines.join("\n");
|
|
1953
1889
|
}
|
|
1954
|
-
function generateStdioSnippet(_apiKey
|
|
1890
|
+
function generateStdioSnippet(_apiKey) {
|
|
1955
1891
|
const isWindowsTarget = getPlatform() === "windows" || isWSL();
|
|
1956
1892
|
const config = {
|
|
1957
1893
|
mcpServers: {
|
|
@@ -1964,9 +1900,6 @@ function generateStdioSnippet(_apiKey, includeSonanceBrand = true) {
|
|
|
1964
1900
|
}
|
|
1965
1901
|
}
|
|
1966
1902
|
};
|
|
1967
|
-
if (includeSonanceBrand) {
|
|
1968
|
-
config.mcpServers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1969
|
-
}
|
|
1970
1903
|
return JSON.stringify(config, null, 2);
|
|
1971
1904
|
}
|
|
1972
1905
|
function resetClaudeDesktop() {
|
|
@@ -1978,7 +1911,7 @@ function resetClaudeDesktop() {
|
|
|
1978
1911
|
const servers = config.mcpServers;
|
|
1979
1912
|
let removed = false;
|
|
1980
1913
|
for (const key of Object.keys(servers)) {
|
|
1981
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1914
|
+
if (key.startsWith("cortex-") || key === "cortex") {
|
|
1982
1915
|
delete servers[key];
|
|
1983
1916
|
removed = true;
|
|
1984
1917
|
}
|
|
@@ -2000,7 +1933,7 @@ function resetCursor() {
|
|
|
2000
1933
|
const servers = config.mcpServers;
|
|
2001
1934
|
let removed = false;
|
|
2002
1935
|
for (const key of Object.keys(servers)) {
|
|
2003
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1936
|
+
if (key.startsWith("cortex-") || key === "cortex") {
|
|
2004
1937
|
delete servers[key];
|
|
2005
1938
|
removed = true;
|
|
2006
1939
|
}
|
|
@@ -2022,11 +1955,6 @@ function resetClaudeCode() {
|
|
|
2022
1955
|
} catch {
|
|
2023
1956
|
}
|
|
2024
1957
|
}
|
|
2025
|
-
try {
|
|
2026
|
-
execSync(`claude mcp remove ${SONANCE_BRAND_CONFIG.name}`, { stdio: "pipe" });
|
|
2027
|
-
removed = true;
|
|
2028
|
-
} catch {
|
|
2029
|
-
}
|
|
2030
1958
|
return removed;
|
|
2031
1959
|
}
|
|
2032
1960
|
function resetCodex() {
|
|
@@ -2035,7 +1963,7 @@ function resetCodex() {
|
|
|
2035
1963
|
try {
|
|
2036
1964
|
const content = readFileSync(configPath, "utf-8");
|
|
2037
1965
|
const cleaned = content.replace(
|
|
2038
|
-
/\[mcp_servers\.
|
|
1966
|
+
/\[mcp_servers\.cortex-[^\]]*\][^[]*(?=\[|$)/g,
|
|
2039
1967
|
""
|
|
2040
1968
|
).trim();
|
|
2041
1969
|
if (cleaned !== content.trim()) {
|
|
@@ -2047,31 +1975,31 @@ function resetCodex() {
|
|
|
2047
1975
|
return false;
|
|
2048
1976
|
}
|
|
2049
1977
|
}
|
|
2050
|
-
function configureClient(clientType, serverUrl, apiKey, mcps
|
|
1978
|
+
function configureClient(clientType, serverUrl, apiKey, mcps) {
|
|
2051
1979
|
switch (clientType) {
|
|
2052
1980
|
case "claude-desktop": {
|
|
2053
|
-
const path = configureClaudeDesktop(serverUrl, apiKey, mcps
|
|
1981
|
+
const path = configureClaudeDesktop(serverUrl, apiKey, mcps);
|
|
2054
1982
|
return `Claude Desktop configured (${path})`;
|
|
2055
1983
|
}
|
|
2056
1984
|
case "claude-code":
|
|
2057
|
-
configureClaudeCode(serverUrl, apiKey, mcps
|
|
1985
|
+
configureClaudeCode(serverUrl, apiKey, mcps);
|
|
2058
1986
|
return "Claude Code configured";
|
|
2059
1987
|
case "cursor":
|
|
2060
|
-
configureCursor(serverUrl, apiKey, mcps
|
|
1988
|
+
configureCursor(serverUrl, apiKey, mcps);
|
|
2061
1989
|
return "Cursor configured";
|
|
2062
1990
|
case "vscode":
|
|
2063
|
-
configureVSCode(serverUrl, apiKey, mcps
|
|
1991
|
+
configureVSCode(serverUrl, apiKey, mcps);
|
|
2064
1992
|
return "VS Code configured";
|
|
2065
1993
|
case "antigravity":
|
|
2066
|
-
configureAntigravity(serverUrl, apiKey, mcps
|
|
1994
|
+
configureAntigravity(serverUrl, apiKey, mcps);
|
|
2067
1995
|
return "Antigravity configured";
|
|
2068
1996
|
case "codex":
|
|
2069
|
-
configureCodex(serverUrl, apiKey, mcps
|
|
1997
|
+
configureCodex(serverUrl, apiKey, mcps);
|
|
2070
1998
|
return "Codex configured";
|
|
2071
1999
|
case "perplexity":
|
|
2072
|
-
return configurePerplexity(serverUrl, apiKey, mcps
|
|
2000
|
+
return configurePerplexity(serverUrl, apiKey, mcps);
|
|
2073
2001
|
case "stdio":
|
|
2074
|
-
return "Add this to your client config:\n\n" + generateStdioSnippet(apiKey
|
|
2002
|
+
return "Add this to your client config:\n\n" + generateStdioSnippet(apiKey);
|
|
2075
2003
|
}
|
|
2076
2004
|
}
|
|
2077
2005
|
|
|
@@ -2213,11 +2141,6 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
|
|
|
2213
2141
|
description: m.description,
|
|
2214
2142
|
authMode: m.authMode
|
|
2215
2143
|
})),
|
|
2216
|
-
sonanceBrand: {
|
|
2217
|
-
name: SONANCE_BRAND_CONFIG.name,
|
|
2218
|
-
displayName: SONANCE_BRAND_CONFIG.displayName,
|
|
2219
|
-
description: SONANCE_BRAND_CONFIG.description
|
|
2220
|
-
},
|
|
2221
2144
|
detectedClients: clients
|
|
2222
2145
|
});
|
|
2223
2146
|
return true;
|
|
@@ -2311,7 +2234,6 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
|
|
|
2311
2234
|
const body = await parseBody(req);
|
|
2312
2235
|
const clients = body.clients || [];
|
|
2313
2236
|
const mcps = body.mcps || [...DEFAULT_MCPS];
|
|
2314
|
-
const includeSonanceBrand = body.includeSonanceBrand !== false;
|
|
2315
2237
|
const apiKey = getState().apiKey;
|
|
2316
2238
|
const results = [];
|
|
2317
2239
|
for (const clientType of clients) {
|
|
@@ -2320,8 +2242,7 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
|
|
|
2320
2242
|
clientType,
|
|
2321
2243
|
options.serverUrl,
|
|
2322
2244
|
apiKey,
|
|
2323
|
-
mcps
|
|
2324
|
-
includeSonanceBrand
|
|
2245
|
+
mcps
|
|
2325
2246
|
);
|
|
2326
2247
|
results.push({ client: clientType, success: true, message: msg });
|
|
2327
2248
|
} catch (err2) {
|
|
@@ -4345,7 +4266,7 @@ program.command("disconnect <provider>").description("Remove your personal OAuth
|
|
|
4345
4266
|
}
|
|
4346
4267
|
});
|
|
4347
4268
|
program.command("connect-mobile").description("Connect Cortex to Claude on mobile \u2014 opens setup page in browser").action(async () => {
|
|
4348
|
-
const { DEFAULT_SERVER_URL: DEFAULT_SERVER_URL3 } = await import("./constants-
|
|
4269
|
+
const { DEFAULT_SERVER_URL: DEFAULT_SERVER_URL3 } = await import("./constants-66VQYSV7.js");
|
|
4349
4270
|
const { openBrowser: openBrowser2 } = await import("./browser-AJPM6AK7.js");
|
|
4350
4271
|
const url = `${DEFAULT_SERVER_URL3}/connect`;
|
|
4351
4272
|
console.log("\nOpening Cortex connect page...");
|