@danainnovations/cortex-mcp 1.0.73 → 1.0.74

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/cli.js CHANGED
@@ -399,6 +399,21 @@ function getWizardHtml() {
399
399
  .mcp-item.user-connected { border-color: rgba(76, 175, 80, 0.4); cursor: default; }
400
400
  .mcp-item.user-connected .mcp-check { background: #4CAF50; border-color: #4CAF50; }
401
401
  .mcp-item.user-connected .mcp-check-icon { display: block; }
402
+ .mcp-item.disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
403
+ .mcp-item.disabled .mcp-check { background: transparent; border-color: rgba(255,255,255,0.1); }
404
+ .mcp-coming-soon-label {
405
+ position: absolute;
406
+ top: 6px;
407
+ right: 8px;
408
+ font-size: 9px;
409
+ font-weight: 600;
410
+ text-transform: uppercase;
411
+ letter-spacing: 0.5px;
412
+ color: rgba(255, 255, 255, 0.35);
413
+ background: rgba(255, 255, 255, 0.06);
414
+ padding: 2px 6px;
415
+ border-radius: 4px;
416
+ }
402
417
  .mcp-connected-badge {
403
418
  display: block;
404
419
  font-size: 11px;
@@ -852,7 +867,8 @@ function getWizardHtml() {
852
867
  var data = await resp.json();
853
868
  state.credentials = data.credentials;
854
869
  state.availableMcps = data.availableMcps || [];
855
- state.selectedMcps = ['github', 'supabase', 'vercel'];
870
+ state.enabledMcps = data.enabledMcps || ['m365'];
871
+ state.selectedMcps = (data.enabledMcps || ['m365']).slice();
856
872
  state.detectedClients = data.detectedClients || [];
857
873
  state.configuredClients = (data.config && data.config.configuredClients) || [];
858
874
  } catch (err) {
@@ -1005,7 +1021,6 @@ function getWizardHtml() {
1005
1021
  }
1006
1022
 
1007
1023
  // \u2500\u2500 Step 3: Select MCPs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1008
- var REQUIRED_MCPS = ['github', 'supabase', 'vercel', 'databricks', 'bestbuy'];
1009
1024
 
1010
1025
  var MCP_TOOLTIPS = {
1011
1026
  asana: 'Manage projects, tasks, and team workflows',
@@ -1034,31 +1049,35 @@ function getWizardHtml() {
1034
1049
  state.connections = state.connections || [];
1035
1050
  }
1036
1051
 
1037
- var requiredMcps = state.availableMcps.filter(function(m) { return REQUIRED_MCPS.indexOf(m.name) !== -1; });
1038
- var optionalMcps = state.availableMcps.filter(function(m) { return REQUIRED_MCPS.indexOf(m.name) === -1; });
1052
+ var enabledList = (state.enabledMcps && state.enabledMcps.length > 0)
1053
+ ? state.enabledMcps : ['m365'];
1054
+ var enabledMcps = state.availableMcps.filter(function(m) { return enabledList.indexOf(m.name) !== -1; });
1055
+ var disabledMcps = state.availableMcps.filter(function(m) { return enabledList.indexOf(m.name) === -1; });
1039
1056
 
1040
1057
  var html = '';
1041
1058
 
1042
- // Core section
1043
- html += '<div class="mcp-section">';
1044
- html += '<div class="mcp-section-title">Core (always enabled)</div>';
1045
- html += '<div class="mcp-list">';
1046
- html += requiredMcps.map(function(mcp) { return renderMcpItem(mcp, true); }).join('');
1047
- html += '</div></div>';
1059
+ // Enabled section
1060
+ if (enabledMcps.length > 0) {
1061
+ html += '<div class="mcp-section">';
1062
+ html += '<div class="mcp-section-title">Available integrations</div>';
1063
+ html += '<div class="mcp-list">';
1064
+ html += enabledMcps.map(function(mcp) { return renderMcpItem(mcp, false, false); }).join('');
1065
+ html += '</div></div>';
1066
+ }
1048
1067
 
1049
- // Optional section
1050
- if (optionalMcps.length > 0) {
1068
+ // Disabled (coming soon) section
1069
+ if (disabledMcps.length > 0) {
1051
1070
  html += '<div class="mcp-section">';
1052
- html += '<div class="mcp-section-title">Optional integrations</div>';
1071
+ html += '<div class="mcp-section-title">Coming soon</div>';
1053
1072
  html += '<div class="mcp-list">';
1054
- html += optionalMcps.map(function(mcp) { return renderMcpItem(mcp, false); }).join('');
1073
+ html += disabledMcps.map(function(mcp) { return renderMcpItem(mcp, false, true); }).join('');
1055
1074
  html += '</div></div>';
1056
1075
  }
1057
1076
 
1058
1077
  container.innerHTML = html;
1059
1078
 
1060
- // Attach click handlers to optional items
1061
- container.querySelectorAll('.mcp-item:not(.required):not(.user-connected)').forEach(function(item) {
1079
+ // Attach click handlers to enabled items only (not disabled, not user-connected)
1080
+ container.querySelectorAll('.mcp-item:not(.disabled):not(.user-connected)').forEach(function(item) {
1062
1081
  item.addEventListener('click', function(e) {
1063
1082
  e.preventDefault();
1064
1083
  var cb = item.querySelector('input[type="checkbox"]');
@@ -1068,16 +1087,17 @@ function getWizardHtml() {
1068
1087
  });
1069
1088
  }
1070
1089
 
1071
- function renderMcpItem(mcp, isRequired) {
1090
+ function renderMcpItem(mcp, isRequired, isDisabled) {
1072
1091
  var icon = MCP_ICONS[mcp.name] || '';
1073
1092
  var conn = (state.connections || []).find(function(c) { return c.mcp_name === mcp.name; });
1074
- var isConnected = conn && !conn.is_company_default && conn.account_email;
1075
- var checked = isRequired || isConnected || state.selectedMcps.indexOf(mcp.name) !== -1;
1093
+ var isConnected = !isDisabled && conn && !conn.is_company_default && conn.account_email;
1094
+ var checked = !isDisabled && (isRequired || isConnected || state.selectedMcps.indexOf(mcp.name) !== -1);
1076
1095
  return (
1077
1096
  '<label class="mcp-item' + (checked ? ' checked' : '') + (isRequired ? ' required' : '') +
1078
- (isConnected ? ' user-connected' : '') + '" data-mcp="' + mcp.name + '">' +
1097
+ (isConnected ? ' user-connected' : '') +
1098
+ (isDisabled ? ' disabled' : '') + '" data-mcp="' + mcp.name + '">' +
1079
1099
  (MCP_TOOLTIPS[mcp.name] ? '<span class="mcp-tooltip">' + MCP_TOOLTIPS[mcp.name] + '</span>' : '') +
1080
- '<input type="checkbox" value="' + mcp.name + '"' + (checked ? ' checked' : '') + (isConnected ? ' disabled' : '') + '>' +
1100
+ '<input type="checkbox" value="' + mcp.name + '"' + (checked ? ' checked' : '') + ((isConnected || isDisabled) ? ' disabled' : '') + '>' +
1081
1101
  (icon ? '<div class="mcp-icon">' + icon + '</div>' : '') +
1082
1102
  '<div class="mcp-check"><span class="mcp-check-icon">&#10003;</span></div>' +
1083
1103
  '<div class="mcp-info">' +
@@ -1089,14 +1109,14 @@ function getWizardHtml() {
1089
1109
  '</div>' +
1090
1110
  (isRequired ? '<span class="mcp-required-label">Required</span>' : '') +
1091
1111
  (isConnected && !isRequired ? '<span class="mcp-connected-label">Connected</span>' : '') +
1112
+ (isDisabled ? '<span class="mcp-coming-soon-label">Coming Soon</span>' : '') +
1092
1113
  '</label>'
1093
1114
  );
1094
1115
  }
1095
1116
 
1096
1117
  function saveMcps() {
1097
- var checkboxes = document.querySelectorAll('.mcp-item input[type="checkbox"]');
1118
+ var checkboxes = document.querySelectorAll('.mcp-item:not(.disabled) input[type="checkbox"]');
1098
1119
  var selected = Array.from(checkboxes).filter(function(cb) { return cb.checked; }).map(function(cb) { return cb.value; });
1099
- REQUIRED_MCPS.forEach(function(name) { if (selected.indexOf(name) === -1) selected.push(name); });
1100
1120
  state.selectedMcps = selected;
1101
1121
  goToStep('clients');
1102
1122
  }
@@ -1876,11 +1896,25 @@ async function handleApiRoute(path, searchParams, req, res, options, onComplete)
1876
1896
  const creds = readCredentials();
1877
1897
  const config = readConfig();
1878
1898
  const clients = detectClients();
1899
+ let enabledMcps = ["m365"];
1900
+ try {
1901
+ const setupResp = await fetch(
1902
+ `${options.serverUrl}/api/v1/mcps/setup-enabled`
1903
+ );
1904
+ if (setupResp.ok) {
1905
+ const setupData = await setupResp.json();
1906
+ if (Array.isArray(setupData.enabled)) {
1907
+ enabledMcps = setupData.enabled;
1908
+ }
1909
+ }
1910
+ } catch {
1911
+ }
1879
1912
  json(res, {
1880
1913
  credentials: creds ? { email: creds.email, name: creds.name } : null,
1881
1914
  config,
1882
1915
  apiKey: getState().apiKey,
1883
1916
  defaultMcps: [...DEFAULT_MCPS],
1917
+ enabledMcps,
1884
1918
  availableMcps: AVAILABLE_MCPS.map((m) => ({
1885
1919
  name: m.name,
1886
1920
  displayName: m.displayName,