πŸ“„ File detail

components/MCPServerDesktopImportDialog.tsx

🧩 .tsxπŸ“ 203 linesπŸ’Ύ 21,016 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œcomponents/”, which covers shared React UI pieces. On the API surface it exposes MCPServerDesktopImportDialog β€” mainly types, interfaces, or factory objects. Dependencies touch React UI and src. It composes internal code from ink, services, utils, ConfigurableShortcutHint, and CustomSelect (relative imports).

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

import { c as _c } from "react/compiler-runtime"; import React, { useCallback, useEffect, useState } from 'react'; import { gracefulShutdown } from 'src/utils/gracefulShutdown.js'; import { writeToStdout } from 'src/utils/process.js'; import { Box, color, Text, useTheme } from '../ink.js';

πŸ“€ Exports (heuristic)

  • MCPServerDesktopImportDialog

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • react
  • src

πŸ–₯️ Source preview

import { c as _c } from "react/compiler-runtime";
import React, { useCallback, useEffect, useState } from 'react';
import { gracefulShutdown } from 'src/utils/gracefulShutdown.js';
import { writeToStdout } from 'src/utils/process.js';
import { Box, color, Text, useTheme } from '../ink.js';
import { addMcpConfig, getAllMcpConfigs } from '../services/mcp/config.js';
import type { ConfigScope, McpServerConfig, ScopedMcpServerConfig } from '../services/mcp/types.js';
import { plural } from '../utils/stringUtils.js';
import { ConfigurableShortcutHint } from './ConfigurableShortcutHint.js';
import { SelectMulti } from './CustomSelect/SelectMulti.js';
import { Byline } from './design-system/Byline.js';
import { Dialog } from './design-system/Dialog.js';
import { KeyboardShortcutHint } from './design-system/KeyboardShortcutHint.js';
type Props = {
  servers: Record<string, McpServerConfig>;
  scope: ConfigScope;
  onDone(): void;
};
export function MCPServerDesktopImportDialog(t0) {
  const $ = _c(36);
  const {
    servers,
    scope,
    onDone
  } = t0;
  let t1;
  if ($[0] !== servers) {
    t1 = Object.keys(servers);
    $[0] = servers;
    $[1] = t1;
  } else {
    t1 = $[1];
  }
  const serverNames = t1;
  let t2;
  if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
    t2 = {};
    $[2] = t2;
  } else {
    t2 = $[2];
  }
  const [existingServers, setExistingServers] = useState(t2);
  let t3;
  let t4;
  if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
    t3 = () => {
      getAllMcpConfigs().then(t5 => {
        const {
          servers: servers_0
        } = t5;
        return setExistingServers(servers_0);
      });
    };
    t4 = [];
    $[3] = t3;
    $[4] = t4;
  } else {
    t3 = $[3];
    t4 = $[4];
  }
  useEffect(t3, t4);
  let t5;
  if ($[5] !== existingServers || $[6] !== serverNames) {
    t5 = serverNames.filter(name => existingServers[name] !== undefined);
    $[5] = existingServers;
    $[6] = serverNames;
    $[7] = t5;
  } else {
    t5 = $[7];
  }
  const collisions = t5;
  const onSubmit = async function onSubmit(selectedServers) {
    let importedCount = 0;
    for (const serverName of selectedServers) {
      const serverConfig = servers[serverName];
      if (serverConfig) {
        let finalName = serverName;
        if (existingServers[finalName] !== undefined) {
          let counter = 1;
          while (existingServers[`${serverName}_${counter}`] !== undefined) {
            counter++;
          }
          finalName = `${serverName}_${counter}`;
        }
        await addMcpConfig(finalName, serverConfig, scope);
        importedCount++;
      }
    }
    done(importedCount);
  };
  const [theme] = useTheme();
  let t6;
  if ($[8] !== onDone || $[9] !== scope || $[10] !== theme) {
    t6 = importedCount_0 => {
      if (importedCount_0 > 0) {
        writeToStdout(`\n${color("success", theme)(`Successfully imported ${importedCount_0} MCP ${plural(importedCount_0, "server")} to ${scope} config.`)}\n`);
      } else {
        writeToStdout("\nNo servers were imported.");
      }
      onDone();
      gracefulShutdown();
    };
    $[8] = onDone;
    $[9] = scope;
    $[10] = theme;
    $[11] = t6;
  } else {
    t6 = $[11];
  }
  const done = t6;
  let t7;
  if ($[12] !== done) {
    t7 = () => {
      done(0);
    };
    $[12] = done;
    $[13] = t7;
  } else {
    t7 = $[13];
  }
  done;
  const handleEscCancel = t7;
  const t8 = serverNames.length;
  let t9;
  if ($[14] !== serverNames.length) {
    t9 = plural(serverNames.length, "server");
    $[14] = serverNames.length;
    $[15] = t9;
  } else {
    t9 = $[15];
  }
  const t10 = `Found ${t8} MCP ${t9} in Claude Desktop.`;
  let t11;
  if ($[16] !== collisions.length) {
    t11 = collisions.length > 0 && <Text color="warning">Note: Some servers already exist with the same name. If selected, they will be imported with a numbered suffix.</Text>;
    $[16] = collisions.length;
    $[17] = t11;
  } else {
    t11 = $[17];
  }
  let t12;
  if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
    t12 = <Text>Please select the servers you want to import:</Text>;
    $[18] = t12;
  } else {
    t12 = $[18];
  }
  let t13;
  let t14;
  if ($[19] !== collisions || $[20] !== serverNames) {
    t13 = serverNames.map(server => ({
      label: `${server}${collisions.includes(server) ? " (already exists)" : ""}`,
      value: server
    }));
    t14 = serverNames.filter(name_0 => !collisions.includes(name_0));
    $[19] = collisions;
    $[20] = serverNames;
    $[21] = t13;
    $[22] = t14;
  } else {
    t13 = $[21];
    t14 = $[22];
  }
  let t15;
  if ($[23] !== handleEscCancel || $[24] !== onSubmit || $[25] !== t13 || $[26] !== t14) {
    t15 = <SelectMulti options={t13} defaultValue={t14} onSubmit={onSubmit} onCancel={handleEscCancel} hideIndexes={true} />;
    $[23] = handleEscCancel;
    $[24] = onSubmit;
    $[25] = t13;
    $[26] = t14;
    $[27] = t15;
  } else {
    t15 = $[27];
  }
  let t16;
  if ($[28] !== handleEscCancel || $[29] !== t10 || $[30] !== t11 || $[31] !== t15) {
    t16 = <Dialog title="Import MCP Servers from Claude Desktop" subtitle={t10} color="success" onCancel={handleEscCancel} hideInputGuide={true}>{t11}{t12}{t15}</Dialog>;
    $[28] = handleEscCancel;
    $[29] = t10;
    $[30] = t11;
    $[31] = t15;
    $[32] = t16;
  } else {
    t16 = $[32];
  }
  let t17;
  if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
    t17 = <Box paddingX={1}><Text dimColor={true} italic={true}><Byline><KeyboardShortcutHint shortcut="Space" action="select" /><KeyboardShortcutHint shortcut="Enter" action="confirm" /><ConfigurableShortcutHint action="confirm:no" context="Confirmation" fallback="Esc" description="cancel" /></Byline></Text></Box>;
    $[33] = t17;
  } else {
    t17 = $[33];
  }
  let t18;
  if ($[34] !== t16) {
    t18 = <>{t16}{t17}</>;
    $[34] = t16;
    $[35] = t18;
  } else {
    t18 = $[35];
  }
  return t18;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJncmFjZWZ1bFNodXRkb3duIiwid3JpdGVUb1N0ZG91dCIsIkJveCIsImNvbG9yIiwiVGV4dCIsInVzZVRoZW1lIiwiYWRkTWNwQ29uZmlnIiwiZ2V0QWxsTWNwQ29uZmlncyIsIkNvbmZpZ1Njb3BlIiwiTWNwU2VydmVyQ29uZmlnIiwiU2NvcGVkTWNwU2VydmVyQ29uZmlnIiwicGx1cmFsIiwiQ29uZmlndXJhYmxlU2hvcnRjdXRIaW50IiwiU2VsZWN0TXVsdGkiLCJCeWxpbmUiLCJEaWFsb2ciLCJLZXlib2FyZFNob3J0Y3V0SGludCIsIlByb3BzIiwic2VydmVycyIsIlJlY29yZCIsInNjb3BlIiwib25Eb25lIiwiTUNQU2VydmVyRGVza3RvcEltcG9ydERpYWxvZyIsInQwIiwiJCIsIl9jIiwidDEiLCJPYmplY3QiLCJrZXlzIiwic2VydmVyTmFtZXMiLCJ0MiIsIlN5bWJvbCIsImZvciIsImV4aXN0aW5nU2VydmVycyIsInNldEV4aXN0aW5nU2VydmVycyIsInQzIiwidDQiLCJ0aGVuIiwidDUiLCJzZXJ2ZXJzXzAiLCJmaWx0ZXIiLCJuYW1lIiwidW5kZWZpbmVkIiwiY29sbGlzaW9ucyIsIm9uU3VibWl0Iiwic2VsZWN0ZWRTZXJ2ZXJzIiwiaW1wb3J0ZWRDb3VudCIsInNlcnZlck5hbWUiLCJzZXJ2ZXJDb25maWciLCJmaW5hbE5hbWUiLCJjb3VudGVyIiwiZG9uZSIsInRoZW1lIiwidDYiLCJpbXBvcnRlZENvdW50XzAiLCJ0NyIsImhhbmRsZUVzY0NhbmNlbCIsInQ4IiwibGVuZ3RoIiwidDkiLCJ0MTAiLCJ0MTEiLCJ0MTIiLCJ0MTMiLCJ0MTQiLCJtYXAiLCJzZXJ2ZXIiLCJsYWJlbCIsImluY2x1ZGVzIiwidmFsdWUiLCJuYW1lXzAiLCJ0MTUiLCJ0MTYiLCJ0MTciLCJ0MTgiXSwic291cmNlcyI6WyJNQ1BTZXJ2ZXJEZXNrdG9wSW1wb3J0RGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdyYWNlZnVsU2h1dGRvd24gfSBmcm9tICdzcmMvdXRpbHMvZ3JhY2VmdWxTaHV0ZG93bi5qcydcbmltcG9ydCB7IHdyaXRlVG9TdGRvdXQgfSBmcm9tICdzcmMvdXRpbHMvcHJvY2Vzcy5qcydcbmltcG9ydCB7IEJveCwgY29sb3IsIFRleHQsIHVzZVRoZW1lIH0gZnJvbSAnLi4vaW5rLmpzJ1xuaW1wb3J0IHsgYWRkTWNwQ29uZmlnLCBnZXRBbGxNY3BDb25maWdzIH0gZnJvbSAnLi4vc2VydmljZXMvbWNwL2NvbmZpZy5qcydcbmltcG9ydCB0eXBlIHtcbiAgQ29uZmlnU2NvcGUsXG4gIE1jcFNlcnZlckNvbmZpZyxcbiAgU2NvcGVkTWNwU2VydmVyQ29uZmlnLFxufSBmcm9tICcuLi9zZXJ2aWNlcy9tY3AvdHlwZXMuanMnXG5pbXBvcnQgeyBwbHVyYWwgfSBmcm9tICcuLi91dGlscy9zdHJpbmdVdGlscy5qcydcbmltcG9ydCB7IENvbmZpZ3VyYWJsZVNob3J0Y3V0SGludCB9IGZyb20gJy4vQ29uZmlndXJhYmxlU2hvcnRjdXRIaW50LmpzJ1xuaW1wb3J0IHsgU2VsZWN0TXVsdGkgfSBmcm9tICcuL0N1c3RvbVNlbGVjdC9TZWxlY3RNdWx0aS5qcydcbmltcG9ydCB7IEJ5bGluZSB9IGZyb20gJy4vZGVzaWduLXN5c3RlbS9CeWxpbmUuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vRGlhbG9nLmpzJ1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dEhpbnQgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vS2V5Ym9hcmRTaG9ydGN1dEhpbnQuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNlcnZlcnM6IFJlY29yZDxzdHJpbmcsIE1jcFNlcnZlckNvbmZpZz5cbiAgc2NvcGU6IENvbmZpZ1Njb3BlXG4gIG9uRG9uZSgpOiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNQ1BTZXJ2ZXJEZXNrdG9wSW1wb3J0RGlhbG9nKHtcbiAgc2VydmVycyxcbiAgc2NvcGUsXG4gIG9uRG9uZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3Qgc2VydmVyTmFtZXMgPSBPYmplY3Qua2V5cyhzZXJ2ZXJzKVxuICBjb25zdCBbZXhpc3RpbmdTZXJ2ZXJzLCBzZXRFeGlzdGluZ1NlcnZlcnNdID0gdXNlU3RhdGU8XG4gICAgUmVjb3JkPHN0cmluZywgU2NvcGVkTWNwU2VydmVyQ29uZmlnPlxuICA+KHt9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBnZXRBbGxNY3BDb25maWdzKCkudGhlbigoeyBzZXJ2ZXJzIH0pID0+IHNldEV4aXN0aW5nU2VydmVycyhzZXJ2ZXJzKSlcbiAgfSwgW10pXG5cbiAgY29uc3QgY29sbGlzaW9ucyA9IHNlcnZlck5hbWVzLmZpbHRlcihcbiAgICBuYW1lID0+IGV4aXN0aW5nU2VydmVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkLFxuICApXG5cbiAgYXN5bmMgZnVuY3Rpb24gb25TdWJtaXQoc2VsZWN0ZWRTZXJ2ZXJzOiBzdHJpbmdbXSkge1xuICAgIGxldCBpbXBvcnRlZENvdW50ID0gMFxuXG4gICAgZm9yIChjb25zdCBzZXJ2ZXJOYW1lIG9mIHNlbGVjdGVkU2VydmVycykge1xuICAgICAgY29uc3Qgc2VydmVyQ29uZmlnID0gc2VydmVyc1tzZXJ2ZXJOYW1lXVxuICAgICAgaWYgKHNlcnZlckNvbmZpZykge1xuICAgICAgICAvLyBJZiB0aGUgc2VydmVyIG5hbWUgYWxyZWFkeSBleGlzdHMsIGZpbmQgYSBuZXcgbmFtZSB3aXRoIF8xLCBfMiwgZXRjLlxuICAgICAgICBsZXQgZmluYWxOYW1lID0gc2VydmVyTmFtZVxuICAgICAgICBpZiAoZXhpc3RpbmdTZXJ2ZXJzW2ZpbmFsTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBjb3VudGVyID0gMVxuICAgICAgICAgIHdoaWxlIChleGlzdGluZ1NlcnZlcnNbYCR7c2VydmVyTmFtZX1fJHtjb3VudGVyfWBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaW5hbE5hbWUgPSBgJHtzZXJ2ZXJOYW1lfV8ke2NvdW50ZXJ9YFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYWRkTWNwQ29uZmlnKGZpbmFsTmFtZSwgc2VydmVyQ29uZmlnLCBzY29wZSlcbiAgICAgICAgaW1wb3J0ZWRDb3VudCsrXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9uZShpbXBvcnRlZENvdW50KVxuICB9XG5cbiAgY29uc3QgW3RoZW1lXSA9IHVzZVRoZW1lKClcblxuICAvLyBEZWZpbmUgZG9uZSBiZWZvcmUgdXNpbmcgaW4gdXNlQ2FsbGJhY2tcbiAgY29uc3QgZG9uZSA9IHVzZUNhbGxiYWNrKFxuICAgIChpbXBvcnRlZENvdW50OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpbXBvcnRlZENvdW50ID4gMCkge1xuICAgICAgICB3cml0ZVRvU3Rkb3V0KFxuICAgICAgICAgIGBcXG4ke2NvbG9yKCdzdWNjZXNzJywgdGhlbWUpKGBTdWNjZXNzZnVsbHkgaW1wb3J0ZWQgJHtpbXBvcnRlZENvdW50fSBNQ1AgJHtwbHVyYWwoaW1wb3J0ZWRDb3VudCwgJ3NlcnZlcicpfSB0byAke3Njb3BlfSBjb25maWcuYCl9XFxuYCxcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVUb1N0ZG91dCgnXFxuTm8gc2VydmVycyB3ZXJlIGltcG9ydGVkLicpXG4gICAgICB9XG4gICAgICBvbkRvbmUoKVxuXG4gICAgICB2b2lkIGdyYWNlZnVsU2h1dGRvd24oKVxuICAgIH0sXG4gICAgW3RoZW1lLCBzY29wZSwgb25Eb25lXSxcbiAgKVxuXG4gIC8vIEhhbmRsZSBFU0MgdG8gY2FuY2VsIChpbXBvcnQgMCBzZXJ2ZXJzKVxuICBjb25zdCBoYW5kbGVFc2NDYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZG9uZSgwKVxuICB9LCBbZG9uZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERpYWxvZ1xuICAgICAgICB0aXRsZT1cIkltcG9ydCBNQ1AgU2VydmVycyBmcm9tIENsYXVkZSBEZXNrdG9wXCJcbiAgICAgICAgc3VidGl0bGU9e2BGb3VuZCAke3NlcnZlck5hbWVzLmxlbmd0aH0gTUNQICR7cGx1cmFsKHNlcnZlck5hbWVzLmxlbmd0aCwgJ3NlcnZlcicpfSBpbiBDbGF1ZGUgRGVza3RvcC5gfVxuICAgICAgICBjb2xvcj1cInN1Y2Nlc3NcIlxuICAgICAgICBvbkNhbmNlbD17aGFuZGxlRXNjQ2FuY2VsfVxuICAgICAgICBoaWRlSW5wdXRHdWlkZVxuICAgICAgPlxuICAgICAgICB7Y29sbGlzaW9ucy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8VGV4dCBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICAgIE5vdGU6IFNvbWUgc2VydmVycyBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS4gSWYgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgd2l0aCBhIG51bWJlcmVkIHN1ZmZpeC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICAgIDxUZXh0PlBsZWFzZSBzZWxlY3QgdGhlIHNlcnZlcnMgeW91IHdhbnQgdG8gaW1wb3J0OjwvVGV4dD5cblxuICAgICAgICA8U2VsZWN0TXVsdGlcbiAgICAgICAgICBvcHRpb25zPXtzZXJ2ZXJOYW1lcy5tYXAoc2VydmVyID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogYCR7c2VydmVyfSR7Y29sbGlzaW9ucy5pbmNsdWRlcyhzZXJ2ZXIpID8gJyAoYWxyZWFkeSBleGlzdHMpJyA6ICcnfWAsXG4gICAgICAgICAgICB2YWx1ZTogc2VydmVyLFxuICAgICAgICAgIH0pKX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3NlcnZlck5hbWVzLmZpbHRlcihuYW1lID0+ICFjb2xsaXNpb25zLmluY2x1ZGVzKG5hbWUpKX0gLy8gT25seSBwcmVzZWxlY3Qgbm9uLWNvbGxpZGluZyBzZXJ2ZXJzXG4gICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgIG9uQ2FuY2VsPXtoYW5kbGVFc2NDYW5jZWx9XG4gICAgICAgICAgaGlkZUluZGV4ZXNcbiAgICAgICAgLz5cbiAgICAgIDwvRGlhbG9nPlxuICAgICAgPEJveCBwYWRkaW5nWD17MX0+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yIGl0YWxpYz5cbiAgICAgICAgICA8QnlsaW5lPlxuICAgICAgICAgICAgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwiU3BhY2VcIiBhY3Rpb249XCJzZWxlY3RcIiAvPlxuICAgICAgICAgICAgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwiRW50ZXJcIiBhY3Rpb249XCJjb25maXJtXCIgLz5cbiAgICAgICAgICAgIDxDb25maWd1cmFibGVTaG9ydGN1dEhpbnRcbiAgICAgICAgICAgICAgYWN0aW9uPVwiY29uZmlybTpub1wiXG4gICAgICAgICAgICAgIGNvbnRleHQ9XCJDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgICBmYWxsYmFjaz1cIkVzY1wiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiY2FuY2VsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9CeWxpbmU+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUMvRCxTQUFTQyxnQkFBZ0IsUUFBUSwrQkFBK0I7QUFDaEUsU0FBU0MsYUFBYSxRQUFRLHNCQUFzQjtBQUNwRCxTQUFTQyxHQUFHLEVBQUVDLEtB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