@danainnovations/cortex-mcp 1.0.88 → 1.0.89
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 +39 -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,7 @@ 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>',
|
|
882
881
|
};
|
|
883
882
|
|
|
884
883
|
// \u2500\u2500 Client Icons (inline SVG) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
|
|
@@ -902,8 +901,6 @@ function getWizardHtml() {
|
|
|
902
901
|
state.availableMcps = data.availableMcps || [];
|
|
903
902
|
state.enabledMcps = data.enabledMcps || ['m365'];
|
|
904
903
|
state.selectedMcps = (data.enabledMcps || ['m365']).slice();
|
|
905
|
-
state.sonanceBrand = data.sonanceBrand || null;
|
|
906
|
-
state.includeSonanceBrand = true;
|
|
907
904
|
state.detectedClients = data.detectedClients || [];
|
|
908
905
|
state.configuredClients = (data.config && data.config.configuredClients) || [];
|
|
909
906
|
} catch (err) {
|
|
@@ -1070,7 +1067,7 @@ function getWizardHtml() {
|
|
|
1070
1067
|
powerbi: 'Build dashboards and run data queries on your reports',
|
|
1071
1068
|
bestbuy: 'Search products, compare prices, and find store locations',
|
|
1072
1069
|
databricks: 'Query data warehouses, explore Unity Catalog, and manage jobs',
|
|
1073
|
-
|
|
1070
|
+
sonance_brand: 'Brand guidelines, design tokens, component library, and logo assets for Sonance, IPORT, and Blaze Audio',
|
|
1074
1071
|
};
|
|
1075
1072
|
|
|
1076
1073
|
function renderMcpList(container) {
|
|
@@ -1103,28 +1100,6 @@ function getWizardHtml() {
|
|
|
1103
1100
|
html += '</div></div>';
|
|
1104
1101
|
}
|
|
1105
1102
|
|
|
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
1103
|
if (disabledMcps.length > 0) {
|
|
1129
1104
|
html += '<div class="mcp-section">';
|
|
1130
1105
|
html += '<div class="mcp-section-title">Coming Soon</div>';
|
|
@@ -1203,18 +1178,8 @@ function getWizardHtml() {
|
|
|
1203
1178
|
|
|
1204
1179
|
function saveMcps() {
|
|
1205
1180
|
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
|
-
});
|
|
1181
|
+
var selected = Array.from(checkboxes).filter(function(cb) { return cb.checked; }).map(function(cb) { return cb.value; });
|
|
1216
1182
|
state.selectedMcps = selected;
|
|
1217
|
-
state.includeSonanceBrand = includeBrand;
|
|
1218
1183
|
goToStep('clients');
|
|
1219
1184
|
}
|
|
1220
1185
|
|
|
@@ -1264,9 +1229,12 @@ function getWizardHtml() {
|
|
|
1264
1229
|
|
|
1265
1230
|
el.innerHTML = html;
|
|
1266
1231
|
|
|
1232
|
+
var manualTypes = ['perplexity', 'stdio'];
|
|
1267
1233
|
el.querySelectorAll('.client-item:not(.disabled):not(.already-configured)').forEach(function(item) {
|
|
1268
|
-
// Auto-select
|
|
1269
|
-
item.
|
|
1234
|
+
// Auto-select detected clients, but NOT manual/additional ones (Perplexity, OpenClaw)
|
|
1235
|
+
if (manualTypes.indexOf(item.dataset.client) === -1) {
|
|
1236
|
+
item.classList.add('checked');
|
|
1237
|
+
}
|
|
1270
1238
|
item.addEventListener('click', function(e) {
|
|
1271
1239
|
e.preventDefault();
|
|
1272
1240
|
item.classList.toggle('checked');
|
|
@@ -1303,7 +1271,7 @@ function getWizardHtml() {
|
|
|
1303
1271
|
var resp = await fetch('/api/clients/configure', {
|
|
1304
1272
|
method: 'POST',
|
|
1305
1273
|
headers: { 'Content-Type': 'application/json' },
|
|
1306
|
-
body: JSON.stringify({ clients: state.selectedClients, mcps: state.selectedMcps
|
|
1274
|
+
body: JSON.stringify({ clients: state.selectedClients, mcps: state.selectedMcps }),
|
|
1307
1275
|
});
|
|
1308
1276
|
var data = await resp.json();
|
|
1309
1277
|
|
|
@@ -1661,10 +1629,6 @@ function detectClients() {
|
|
|
1661
1629
|
});
|
|
1662
1630
|
return clients;
|
|
1663
1631
|
}
|
|
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
1632
|
function buildHttpEntries(serverUrl, apiKey, mcps) {
|
|
1669
1633
|
const entries = {};
|
|
1670
1634
|
for (const mcp of AVAILABLE_MCPS) {
|
|
@@ -1676,7 +1640,7 @@ function buildHttpEntries(serverUrl, apiKey, mcps) {
|
|
|
1676
1640
|
}
|
|
1677
1641
|
return entries;
|
|
1678
1642
|
}
|
|
1679
|
-
function configureClaudeDesktop(_serverUrl, apiKey, _mcps
|
|
1643
|
+
function configureClaudeDesktop(_serverUrl, apiKey, _mcps) {
|
|
1680
1644
|
const configPath = getClaudeDesktopConfigPath();
|
|
1681
1645
|
const dir = dirname(configPath);
|
|
1682
1646
|
if (!existsSync(dir)) {
|
|
@@ -1712,14 +1676,11 @@ function configureClaudeDesktop(_serverUrl, apiKey, _mcps, includeSonanceBrand =
|
|
|
1712
1676
|
}
|
|
1713
1677
|
const servers = config.mcpServers;
|
|
1714
1678
|
for (const key of Object.keys(servers)) {
|
|
1715
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1679
|
+
if (key.startsWith("cortex-") || key === "cortex") {
|
|
1716
1680
|
delete servers[key];
|
|
1717
1681
|
}
|
|
1718
1682
|
}
|
|
1719
1683
|
servers["cortex"] = cortexEntry;
|
|
1720
|
-
if (includeSonanceBrand) {
|
|
1721
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1722
|
-
}
|
|
1723
1684
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1724
1685
|
if (getPlatform() === "windows") {
|
|
1725
1686
|
const storePath = getStoreClaudePath();
|
|
@@ -1743,12 +1704,9 @@ function configureClaudeDesktop(_serverUrl, apiKey, _mcps, includeSonanceBrand =
|
|
|
1743
1704
|
}
|
|
1744
1705
|
const altServers = altConfig.mcpServers;
|
|
1745
1706
|
for (const key of Object.keys(altServers)) {
|
|
1746
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1707
|
+
if (key.startsWith("cortex-") || key === "cortex") delete altServers[key];
|
|
1747
1708
|
}
|
|
1748
1709
|
altServers["cortex"] = cortexEntry;
|
|
1749
|
-
if (includeSonanceBrand) {
|
|
1750
|
-
altServers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1751
|
-
}
|
|
1752
1710
|
writeFileSync(altPath, JSON.stringify(altConfig, null, 2) + "\n");
|
|
1753
1711
|
} catch {
|
|
1754
1712
|
}
|
|
@@ -1783,7 +1741,7 @@ function configureClaudeDesktop(_serverUrl, apiKey, _mcps, includeSonanceBrand =
|
|
|
1783
1741
|
`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
1742
|
);
|
|
1785
1743
|
}
|
|
1786
|
-
function configureClaudeCode(serverUrl, apiKey, mcps
|
|
1744
|
+
function configureClaudeCode(serverUrl, apiKey, mcps) {
|
|
1787
1745
|
for (const mcp of AVAILABLE_MCPS) {
|
|
1788
1746
|
if (!mcps.includes(mcp.name)) continue;
|
|
1789
1747
|
const url = `${serverUrl}/mcp/${mcp.name}`;
|
|
@@ -1796,18 +1754,8 @@ function configureClaudeCode(serverUrl, apiKey, mcps, includeSonanceBrand = true
|
|
|
1796
1754
|
{ stdio: "pipe" }
|
|
1797
1755
|
);
|
|
1798
1756
|
}
|
|
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
1757
|
}
|
|
1810
|
-
function configureCursor(serverUrl, apiKey, mcps
|
|
1758
|
+
function configureCursor(serverUrl, apiKey, mcps) {
|
|
1811
1759
|
const configPath = getCursorConfigPath();
|
|
1812
1760
|
const dir = dirname(configPath);
|
|
1813
1761
|
if (!existsSync(dir)) {
|
|
@@ -1825,18 +1773,15 @@ function configureCursor(serverUrl, apiKey, mcps, includeSonanceBrand = true) {
|
|
|
1825
1773
|
}
|
|
1826
1774
|
const servers = config.mcpServers;
|
|
1827
1775
|
for (const key of Object.keys(servers)) {
|
|
1828
|
-
if (key.startsWith("cortex-")
|
|
1776
|
+
if (key.startsWith("cortex-")) {
|
|
1829
1777
|
delete servers[key];
|
|
1830
1778
|
}
|
|
1831
1779
|
}
|
|
1832
1780
|
const entries = buildHttpEntries(serverUrl, apiKey, mcps);
|
|
1833
1781
|
Object.assign(servers, entries);
|
|
1834
|
-
if (includeSonanceBrand) {
|
|
1835
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1836
|
-
}
|
|
1837
1782
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1838
1783
|
}
|
|
1839
|
-
function configureVSCode(serverUrl, apiKey, mcps
|
|
1784
|
+
function configureVSCode(serverUrl, apiKey, mcps) {
|
|
1840
1785
|
const configPath = getVSCodeMcpConfigPath();
|
|
1841
1786
|
const dir = dirname(configPath);
|
|
1842
1787
|
if (!existsSync(dir)) {
|
|
@@ -1854,18 +1799,15 @@ function configureVSCode(serverUrl, apiKey, mcps, includeSonanceBrand = true) {
|
|
|
1854
1799
|
}
|
|
1855
1800
|
const servers = config.mcpServers;
|
|
1856
1801
|
for (const key of Object.keys(servers)) {
|
|
1857
|
-
if (key.startsWith("cortex-")
|
|
1802
|
+
if (key.startsWith("cortex-")) {
|
|
1858
1803
|
delete servers[key];
|
|
1859
1804
|
}
|
|
1860
1805
|
}
|
|
1861
1806
|
const entries = buildHttpEntries(serverUrl, apiKey, mcps);
|
|
1862
1807
|
Object.assign(servers, entries);
|
|
1863
|
-
if (includeSonanceBrand) {
|
|
1864
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1865
|
-
}
|
|
1866
1808
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1867
1809
|
}
|
|
1868
|
-
function configureAntigravity(serverUrl, apiKey, mcps
|
|
1810
|
+
function configureAntigravity(serverUrl, apiKey, mcps) {
|
|
1869
1811
|
const configPath = getAntigravityConfigPath();
|
|
1870
1812
|
const dir = dirname(configPath);
|
|
1871
1813
|
if (!existsSync(dir)) {
|
|
@@ -1883,18 +1825,15 @@ function configureAntigravity(serverUrl, apiKey, mcps, includeSonanceBrand = tru
|
|
|
1883
1825
|
}
|
|
1884
1826
|
const servers = config.mcpServers;
|
|
1885
1827
|
for (const key of Object.keys(servers)) {
|
|
1886
|
-
if (key.startsWith("cortex-")
|
|
1828
|
+
if (key.startsWith("cortex-")) {
|
|
1887
1829
|
delete servers[key];
|
|
1888
1830
|
}
|
|
1889
1831
|
}
|
|
1890
1832
|
const entries = buildHttpEntries(serverUrl, apiKey, mcps);
|
|
1891
1833
|
Object.assign(servers, entries);
|
|
1892
|
-
if (includeSonanceBrand) {
|
|
1893
|
-
servers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1894
|
-
}
|
|
1895
1834
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
1896
1835
|
}
|
|
1897
|
-
function configureCodex(serverUrl, apiKey, mcps
|
|
1836
|
+
function configureCodex(serverUrl, apiKey, mcps) {
|
|
1898
1837
|
const configPath = getCodexConfigPath();
|
|
1899
1838
|
const dir = dirname(configPath);
|
|
1900
1839
|
if (!existsSync(dir)) {
|
|
@@ -1908,7 +1847,7 @@ function configureCodex(serverUrl, apiKey, mcps, includeSonanceBrand = true) {
|
|
|
1908
1847
|
}
|
|
1909
1848
|
}
|
|
1910
1849
|
const cleaned = existingContent.replace(
|
|
1911
|
-
/\[mcp_servers\.
|
|
1850
|
+
/\[mcp_servers\.cortex-[^\]]*\][^[]*(?=\[|$)/g,
|
|
1912
1851
|
""
|
|
1913
1852
|
).trim();
|
|
1914
1853
|
const tomlEntries = [];
|
|
@@ -1920,17 +1859,10 @@ url = "${serverUrl}/mcp/${mcp.name}"
|
|
|
1920
1859
|
http_headers = { "x-api-key" = "${apiKey}" }`
|
|
1921
1860
|
);
|
|
1922
1861
|
}
|
|
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
1862
|
const newContent = (cleaned ? cleaned + "\n\n" : "") + tomlEntries.join("\n\n") + "\n";
|
|
1931
1863
|
writeFileSync(configPath, newContent);
|
|
1932
1864
|
}
|
|
1933
|
-
function configurePerplexity(serverUrl, _apiKey, mcps
|
|
1865
|
+
function configurePerplexity(serverUrl, _apiKey, mcps) {
|
|
1934
1866
|
const lines = [
|
|
1935
1867
|
"Add each MCP as a separate connector in Perplexity:",
|
|
1936
1868
|
" Settings \u2192 Connectors \u2192 Add custom connector",
|
|
@@ -1947,11 +1879,9 @@ function configurePerplexity(serverUrl, _apiKey, mcps, _includeSonanceBrand = tr
|
|
|
1947
1879
|
lines.push(` Transport: Streamable HTTP`);
|
|
1948
1880
|
lines.push("");
|
|
1949
1881
|
}
|
|
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
1882
|
return lines.join("\n");
|
|
1953
1883
|
}
|
|
1954
|
-
function generateStdioSnippet(_apiKey
|
|
1884
|
+
function generateStdioSnippet(_apiKey) {
|
|
1955
1885
|
const isWindowsTarget = getPlatform() === "windows" || isWSL();
|
|
1956
1886
|
const config = {
|
|
1957
1887
|
mcpServers: {
|
|
@@ -1964,9 +1894,6 @@ function generateStdioSnippet(_apiKey, includeSonanceBrand = true) {
|
|
|
1964
1894
|
}
|
|
1965
1895
|
}
|
|
1966
1896
|
};
|
|
1967
|
-
if (includeSonanceBrand) {
|
|
1968
|
-
config.mcpServers[SONANCE_BRAND_CONFIG.name] = buildSonanceBrandEntry();
|
|
1969
|
-
}
|
|
1970
1897
|
return JSON.stringify(config, null, 2);
|
|
1971
1898
|
}
|
|
1972
1899
|
function resetClaudeDesktop() {
|
|
@@ -1978,7 +1905,7 @@ function resetClaudeDesktop() {
|
|
|
1978
1905
|
const servers = config.mcpServers;
|
|
1979
1906
|
let removed = false;
|
|
1980
1907
|
for (const key of Object.keys(servers)) {
|
|
1981
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1908
|
+
if (key.startsWith("cortex-") || key === "cortex") {
|
|
1982
1909
|
delete servers[key];
|
|
1983
1910
|
removed = true;
|
|
1984
1911
|
}
|
|
@@ -2000,7 +1927,7 @@ function resetCursor() {
|
|
|
2000
1927
|
const servers = config.mcpServers;
|
|
2001
1928
|
let removed = false;
|
|
2002
1929
|
for (const key of Object.keys(servers)) {
|
|
2003
|
-
if (key.startsWith("cortex-") || key === "cortex"
|
|
1930
|
+
if (key.startsWith("cortex-") || key === "cortex") {
|
|
2004
1931
|
delete servers[key];
|
|
2005
1932
|
removed = true;
|
|
2006
1933
|
}
|
|
@@ -2022,11 +1949,6 @@ function resetClaudeCode() {
|
|
|
2022
1949
|
} catch {
|
|
2023
1950
|
}
|
|
2024
1951
|
}
|
|
2025
|
-
try {
|
|
2026
|
-
execSync(`claude mcp remove ${SONANCE_BRAND_CONFIG.name}`, { stdio: "pipe" });
|
|
2027
|
-
removed = true;
|
|
2028
|
-
} catch {
|
|
2029
|
-
}
|
|
2030
1952
|
return removed;
|
|
2031
1953
|
}
|
|
2032
1954
|
function resetCodex() {
|
|
@@ -2035,7 +1957,7 @@ function resetCodex() {
|
|
|
2035
1957
|
try {
|
|
2036
1958
|
const content = readFileSync(configPath, "utf-8");
|
|
2037
1959
|
const cleaned = content.replace(
|
|
2038
|
-
/\[mcp_servers\.
|
|
1960
|
+
/\[mcp_servers\.cortex-[^\]]*\][^[]*(?=\[|$)/g,
|
|
2039
1961
|
""
|
|
2040
1962
|
).trim();
|
|
2041
1963
|
if (cleaned !== content.trim()) {
|
|
@@ -2047,31 +1969,31 @@ function resetCodex() {
|
|
|
2047
1969
|
return false;
|
|
2048
1970
|
}
|
|
2049
1971
|
}
|
|
2050
|
-
function configureClient(clientType, serverUrl, apiKey, mcps
|
|
1972
|
+
function configureClient(clientType, serverUrl, apiKey, mcps) {
|
|
2051
1973
|
switch (clientType) {
|
|
2052
1974
|
case "claude-desktop": {
|
|
2053
|
-
const path = configureClaudeDesktop(serverUrl, apiKey, mcps
|
|
1975
|
+
const path = configureClaudeDesktop(serverUrl, apiKey, mcps);
|
|
2054
1976
|
return `Claude Desktop configured (${path})`;
|
|
2055
1977
|
}
|
|
2056
1978
|
case "claude-code":
|
|
2057
|
-
configureClaudeCode(serverUrl, apiKey, mcps
|
|
1979
|
+
configureClaudeCode(serverUrl, apiKey, mcps);
|
|
2058
1980
|
return "Claude Code configured";
|
|
2059
1981
|
case "cursor":
|
|
2060
|
-
configureCursor(serverUrl, apiKey, mcps
|
|
1982
|
+
configureCursor(serverUrl, apiKey, mcps);
|
|
2061
1983
|
return "Cursor configured";
|
|
2062
1984
|
case "vscode":
|
|
2063
|
-
configureVSCode(serverUrl, apiKey, mcps
|
|
1985
|
+
configureVSCode(serverUrl, apiKey, mcps);
|
|
2064
1986
|
return "VS Code configured";
|
|
2065
1987
|
case "antigravity":
|
|
2066
|
-
configureAntigravity(serverUrl, apiKey, mcps
|
|
1988
|
+
configureAntigravity(serverUrl, apiKey, mcps);
|
|
2067
1989
|
return "Antigravity configured";
|
|
2068
1990
|
case "codex":
|
|
2069
|
-
configureCodex(serverUrl, apiKey, mcps
|
|
1991
|
+
configureCodex(serverUrl, apiKey, mcps);
|
|
2070
1992
|
return "Codex configured";
|
|
2071
1993
|
case "perplexity":
|
|
2072
|
-
return configurePerplexity(serverUrl, apiKey, mcps
|
|
1994
|
+
return configurePerplexity(serverUrl, apiKey, mcps);
|
|
2073
1995
|
case "stdio":
|
|
2074
|
-
return "Add this to your client config:\n\n" + generateStdioSnippet(apiKey
|
|
1996
|
+
return "Add this to your client config:\n\n" + generateStdioSnippet(apiKey);
|
|
2075
1997
|
}
|
|
2076
1998
|
}
|
|
2077
1999
|
|
|
@@ -2213,11 +2135,6 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
|
|
|
2213
2135
|
description: m.description,
|
|
2214
2136
|
authMode: m.authMode
|
|
2215
2137
|
})),
|
|
2216
|
-
sonanceBrand: {
|
|
2217
|
-
name: SONANCE_BRAND_CONFIG.name,
|
|
2218
|
-
displayName: SONANCE_BRAND_CONFIG.displayName,
|
|
2219
|
-
description: SONANCE_BRAND_CONFIG.description
|
|
2220
|
-
},
|
|
2221
2138
|
detectedClients: clients
|
|
2222
2139
|
});
|
|
2223
2140
|
return true;
|
|
@@ -2311,7 +2228,6 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
|
|
|
2311
2228
|
const body = await parseBody(req);
|
|
2312
2229
|
const clients = body.clients || [];
|
|
2313
2230
|
const mcps = body.mcps || [...DEFAULT_MCPS];
|
|
2314
|
-
const includeSonanceBrand = body.includeSonanceBrand !== false;
|
|
2315
2231
|
const apiKey = getState().apiKey;
|
|
2316
2232
|
const results = [];
|
|
2317
2233
|
for (const clientType of clients) {
|
|
@@ -2320,8 +2236,7 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
|
|
|
2320
2236
|
clientType,
|
|
2321
2237
|
options.serverUrl,
|
|
2322
2238
|
apiKey,
|
|
2323
|
-
mcps
|
|
2324
|
-
includeSonanceBrand
|
|
2239
|
+
mcps
|
|
2325
2240
|
);
|
|
2326
2241
|
results.push({ client: clientType, success: true, message: msg });
|
|
2327
2242
|
} catch (err2) {
|
|
@@ -4345,7 +4260,7 @@ program.command("disconnect <provider>").description("Remove your personal OAuth
|
|
|
4345
4260
|
}
|
|
4346
4261
|
});
|
|
4347
4262
|
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-
|
|
4263
|
+
const { DEFAULT_SERVER_URL: DEFAULT_SERVER_URL3 } = await import("./constants-66VQYSV7.js");
|
|
4349
4264
|
const { openBrowser: openBrowser2 } = await import("./browser-AJPM6AK7.js");
|
|
4350
4265
|
const url = `${DEFAULT_SERVER_URL3}/connect`;
|
|
4351
4266
|
console.log("\nOpening Cortex connect page...");
|