π File detail
components/mcp/MCPToolListView.tsx
π― Use case
This file lives under βcomponents/β, which covers shared React UI pieces. On the API surface it exposes MCPToolListView β mainly types, interfaces, or factory objects. Dependencies touch React UI. It composes internal code from ink, services, state, Tool, and utils (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 from 'react'; import { Text } from '../../ink.js'; import { extractMcpToolDisplayName, getMcpDisplayName } from '../../services/mcp/mcpStringUtils.js'; import { filterToolsByServer } from '../../services/mcp/utils.js';
π€ Exports (heuristic)
MCPToolListView
π External import roots
Package roots from from "β¦" (relative paths omitted).
react
π₯οΈ Source preview
import { c as _c } from "react/compiler-runtime";
import React from 'react';
import { Text } from '../../ink.js';
import { extractMcpToolDisplayName, getMcpDisplayName } from '../../services/mcp/mcpStringUtils.js';
import { filterToolsByServer } from '../../services/mcp/utils.js';
import { useAppState } from '../../state/AppState.js';
import type { Tool } from '../../Tool.js';
import { plural } from '../../utils/stringUtils.js';
import { ConfigurableShortcutHint } from '../ConfigurableShortcutHint.js';
import { Select } from '../CustomSelect/index.js';
import { Byline } from '../design-system/Byline.js';
import { Dialog } from '../design-system/Dialog.js';
import { KeyboardShortcutHint } from '../design-system/KeyboardShortcutHint.js';
import type { ServerInfo } from './types.js';
type Props = {
server: ServerInfo;
onSelectTool: (tool: Tool, index: number) => void;
onBack: () => void;
};
export function MCPToolListView(t0) {
const $ = _c(21);
const {
server,
onSelectTool,
onBack
} = t0;
const mcpTools = useAppState(_temp);
let t1;
bb0: {
if (server.client.type !== "connected") {
let t2;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t2 = [];
$[0] = t2;
} else {
t2 = $[0];
}
t1 = t2;
break bb0;
}
let t2;
if ($[1] !== mcpTools || $[2] !== server.name) {
t2 = filterToolsByServer(mcpTools, server.name);
$[1] = mcpTools;
$[2] = server.name;
$[3] = t2;
} else {
t2 = $[3];
}
t1 = t2;
}
const serverTools = t1;
let t2;
if ($[4] !== server.name || $[5] !== serverTools) {
let t3;
if ($[7] !== server.name) {
t3 = (tool, index) => {
const toolName = getMcpDisplayName(tool.name, server.name);
const fullDisplayName = tool.userFacingName ? tool.userFacingName({}) : toolName;
const displayName = extractMcpToolDisplayName(fullDisplayName);
const isReadOnly = tool.isReadOnly?.({}) ?? false;
const isDestructive = tool.isDestructive?.({}) ?? false;
const isOpenWorld = tool.isOpenWorld?.({}) ?? false;
const annotations = [];
if (isReadOnly) {
annotations.push("read-only");
}
if (isDestructive) {
annotations.push("destructive");
}
if (isOpenWorld) {
annotations.push("open-world");
}
return {
label: displayName,
value: index.toString(),
description: annotations.length > 0 ? annotations.join(", ") : undefined,
descriptionColor: isDestructive ? "error" : isReadOnly ? "success" : undefined
};
};
$[7] = server.name;
$[8] = t3;
} else {
t3 = $[8];
}
t2 = serverTools.map(t3);
$[4] = server.name;
$[5] = serverTools;
$[6] = t2;
} else {
t2 = $[6];
}
const toolOptions = t2;
const t3 = `Tools for ${server.name}`;
const t4 = serverTools.length;
let t5;
if ($[9] !== serverTools.length) {
t5 = plural(serverTools.length, "tool");
$[9] = serverTools.length;
$[10] = t5;
} else {
t5 = $[10];
}
const t6 = `${t4} ${t5}`;
let t7;
if ($[11] !== onBack || $[12] !== onSelectTool || $[13] !== serverTools || $[14] !== toolOptions) {
t7 = serverTools.length === 0 ? <Text dimColor={true}>No tools available</Text> : <Select options={toolOptions} onChange={value => {
const index_0 = parseInt(value);
const tool_0 = serverTools[index_0];
if (tool_0) {
onSelectTool(tool_0, index_0);
}
}} onCancel={onBack} />;
$[11] = onBack;
$[12] = onSelectTool;
$[13] = serverTools;
$[14] = toolOptions;
$[15] = t7;
} else {
t7 = $[15];
}
let t8;
if ($[16] !== onBack || $[17] !== t3 || $[18] !== t6 || $[19] !== t7) {
t8 = <Dialog title={t3} subtitle={t6} onCancel={onBack} inputGuide={_temp2}>{t7}</Dialog>;
$[16] = onBack;
$[17] = t3;
$[18] = t6;
$[19] = t7;
$[20] = t8;
} else {
t8 = $[20];
}
return t8;
}
function _temp2(exitState) {
return exitState.pending ? <Text>Press {exitState.keyName} again to exit</Text> : <Byline><KeyboardShortcutHint shortcut={"\u2191\u2193"} action="navigate" /><KeyboardShortcutHint shortcut="Enter" action="select" /><ConfigurableShortcutHint action="confirm:no" context="Confirmation" fallback="Esc" description="back" /></Byline>;
}
function _temp(s) {
return s.mcp.tools;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlRleHQiLCJleHRyYWN0TWNwVG9vbERpc3BsYXlOYW1lIiwiZ2V0TWNwRGlzcGxheU5hbWUiLCJmaWx0ZXJUb29sc0J5U2VydmVyIiwidXNlQXBwU3RhdGUiLCJUb29sIiwicGx1cmFsIiwiQ29uZmlndXJhYmxlU2hvcnRjdXRIaW50IiwiU2VsZWN0IiwiQnlsaW5lIiwiRGlhbG9nIiwiS2V5Ym9hcmRTaG9ydGN1dEhpbnQiLCJTZXJ2ZXJJbmZvIiwiUHJvcHMiLCJzZXJ2ZXIiLCJvblNlbGVjdFRvb2wiLCJ0b29sIiwiaW5kZXgiLCJvbkJhY2siLCJNQ1BUb29sTGlzdFZpZXciLCJ0MCIsIiQiLCJfYyIsIm1jcFRvb2xzIiwiX3RlbXAiLCJ0MSIsImJiMCIsImNsaWVudCIsInR5cGUiLCJ0MiIsIlN5bWJvbCIsImZvciIsIm5hbWUiLCJzZXJ2ZXJUb29scyIsInQzIiwidG9vbE5hbWUiLCJmdWxsRGlzcGxheU5hbWUiLCJ1c2VyRmFjaW5nTmFtZSIsImRpc3BsYXlOYW1lIiwiaXNSZWFkT25seSIsImlzRGVzdHJ1Y3RpdmUiLCJpc09wZW5Xb3JsZCIsImFubm90YXRpb25zIiwicHVzaCIsImxhYmVsIiwidmFsdWUiLCJ0b1N0cmluZyIsImRlc2NyaXB0aW9uIiwibGVuZ3RoIiwiam9pbiIsInVuZGVmaW5lZCIsImRlc2NyaXB0aW9uQ29sb3IiLCJtYXAiLCJ0b29sT3B0aW9ucyIsInQ0IiwidDUiLCJ0NiIsInQ3IiwiaW5kZXhfMCIsInBhcnNlSW50IiwidG9vbF8wIiwidDgiLCJfdGVtcDIiLCJleGl0U3RhdGUiLCJwZW5kaW5nIiwia2V5TmFtZSIsInMiLCJtY3AiLCJ0b29scyJdLCJzb3VyY2VzIjpbIk1DUFRvb2xMaXN0Vmlldy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7XG4gIGV4dHJhY3RNY3BUb29sRGlzcGxheU5hbWUsXG4gIGdldE1jcERpc3BsYXlOYW1lLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tY3AvbWNwU3RyaW5nVXRpbHMuanMnXG5pbXBvcnQgeyBmaWx0ZXJUb29sc0J5U2VydmVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWNwL3V0aWxzLmpzJ1xuaW1wb3J0IHsgdXNlQXBwU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB0eXBlIHsgVG9vbCB9IGZyb20gJy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBwbHVyYWwgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmdVdGlscy5qcydcbmltcG9ydCB7IENvbmZpZ3VyYWJsZVNob3J0Y3V0SGludCB9IGZyb20gJy4uL0NvbmZpZ3VyYWJsZVNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL0N1c3RvbVNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IEJ5bGluZSB9IGZyb20gJy4uL2Rlc2lnbi1zeXN0ZW0vQnlsaW5lLmpzJ1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAnLi4vZGVzaWduLXN5c3RlbS9EaWFsb2cuanMnXG5pbXBvcnQgeyBLZXlib2FyZFNob3J0Y3V0SGludCB9IGZyb20gJy4uL2Rlc2lnbi1zeXN0ZW0vS2V5Ym9hcmRTaG9ydGN1dEhpbnQuanMnXG5pbXBvcnQgdHlwZSB7IFNlcnZlckluZm8gfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBzZXJ2ZXI6IFNlcnZlckluZm9cbiAgb25TZWxlY3RUb29sOiAodG9vbDogVG9vbCwgaW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICBvbkJhY2s6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1DUFRvb2xMaXN0Vmlldyh7XG4gIHNlcnZlcixcbiAgb25TZWxlY3RUb29sLFxuICBvbkJhY2ssXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IG1jcFRvb2xzID0gdXNlQXBwU3RhdGUocyA9PiBzLm1jcC50b29scylcblxuICBjb25zdCBzZXJ2ZXJUb29scyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChzZXJ2ZXIuY2xpZW50LnR5cGUgIT09ICdjb25uZWN0ZWQnKSByZXR1cm4gW11cbiAgICByZXR1cm4gZmlsdGVyVG9vbHNCeVNlcnZlcihtY3BUb29scywgc2VydmVyLm5hbWUpXG4gIH0sIFtzZXJ2ZXIsIG1jcFRvb2xzXSlcblxuICBjb25zdCB0b29sT3B0aW9ucyA9IHNlcnZlclRvb2xzLm1hcCgodG9vbCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB0b29sTmFtZSA9IGdldE1jcERpc3BsYXlOYW1lKHRvb2wubmFtZSwgc2VydmVyLm5hbWUpXG4gICAgY29uc3QgZnVsbERpc3BsYXlOYW1lID0gdG9vbC51c2VyRmFjaW5nTmFtZVxuICAgICAgPyB0b29sLnVzZXJGYWNpbmdOYW1lKHt9KVxuICAgICAgOiB0b29sTmFtZVxuICAgIC8vIEV4dHJhY3QganVzdCB0aGUgdG9vbCBkaXNwbGF5IG5hbWUgd2l0aG91dCBzZXJ2ZXIgcHJlZml4XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBleHRyYWN0TWNwVG9vbERpc3BsYXlOYW1lKGZ1bGxEaXNwbGF5TmFtZSlcblxuICAgIGNvbnN0IGlzUmVhZE9ubHkgPSB0b29sLmlzUmVhZE9ubHk/Lih7fSkgPz8gZmFsc2VcbiAgICBjb25zdCBpc0Rlc3RydWN0aXZlID0gdG9vbC5pc0Rlc3RydWN0aXZlPy4oe30pID8/IGZhbHNlXG4gICAgY29uc3QgaXNPcGVuV29ybGQgPSB0b29sLmlzT3BlbldvcmxkPy4oe30pID8/IGZhbHNlXG5cbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IFtdXG4gICAgaWYgKGlzUmVhZE9ubHkpIGFubm90YXRpb25zLnB1c2goJ3JlYWQtb25seScpXG4gICAgaWYgKGlzRGVzdHJ1Y3RpdmUpIGFubm90YXRpb25zLnB1c2goJ2Rlc3RydWN0aXZlJylcbiAgICBpZiAoaXNPcGVuV29ybGQpIGFubm90YXRpb25zLnB1c2goJ29wZW4td29ybGQnKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBkaXNwbGF5TmFtZSxcbiAgICAgIHZhbHVlOiBpbmRleC50b1N0cmluZygpLFxuICAgICAgZGVzY3JpcHRpb246IGFubm90YXRpb25zLmxlbmd0aCA+IDAgPyBhbm5vdGF0aW9ucy5qb2luKCcsICcpIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb25Db2xvcjogaXNEZXN0cnVjdGl2ZVxuICAgICAgICA/ICdlcnJvcidcbiAgICAgICAgOiBpc1JlYWRPbmx5XG4gICAgICAgICAgPyAnc3VjY2VzcydcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nXG4gICAgICB0aXRsZT17YFRvb2xzIGZvciAke3NlcnZlci5uYW1lfWB9XG4gICAgICBzdWJ0aXRsZT17YCR7c2VydmVyVG9vbHMubGVuZ3RofSAke3BsdXJhbChzZXJ2ZXJUb29scy5sZW5ndGgsICd0b29sJyl9YH1cbiAgICAgIG9uQ2FuY2VsPXtvbkJhY2t9XG4gICAgICBpbnB1dEd1aWRlPXtleGl0U3RhdGUgPT5cbiAgICAgICAgZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgICAgPFRleHQ+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC9UZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxCeWxpbmU+XG4gICAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCLihpHihpNcIiBhY3Rpb249XCJuYXZpZ2F0ZVwiIC8+XG4gICAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCJFbnRlclwiIGFjdGlvbj1cInNlbGVjdFwiIC8+XG4gICAgICAgICAgICA8Q29uZmlndXJhYmxlU2hvcnRjdXRIaW50XG4gICAgICAgICAgICAgIGFjdGlvbj1cImNvbmZpcm06bm9cIlxuICAgICAgICAgICAgICBjb250ZXh0PVwiQ29uZmlybWF0aW9uXCJcbiAgICAgICAgICAgICAgZmFsbGJhY2s9XCJFc2NcIlxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cImJhY2tcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0J5bGluZT5cbiAgICAgICAgKVxuICAgICAgfVxuICAgID5cbiAgICAgIHtzZXJ2ZXJUb29scy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPk5vIHRvb2xzIGF2YWlsYWJsZTwvVGV4dD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXt0b29sT3B0aW9uc31cbiAgICAgICAgICBvbkNoYW5nZT17dmFsdWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCh2YWx1ZSlcbiAgICAgICAgICAgIGNvbnN0IHRvb2wgPSBzZXJ2ZXJUb29sc1tpbmRleF1cbiAgICAgICAgICAgIGlmICh0b29sKSB7XG4gICAgICAgICAgICAgIG9uU2VsZWN0VG9vbCh0b29sLCBpbmRleClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkJhY2t9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixTQUFTQyxJQUFJLFFBQVEsY0FBYztBQUNuQyxTQUNFQyx5QkFBeUIsRUFDekJDLGlCQUFpQixRQUNaLHNDQUFzQztBQUM3QyxTQUFTQyxtQkFBbUIsUUFBUSw2QkFBNkI7QUFDakUsU0FBU0MsV0FBVyxRQUFRLHlCQUF5QjtBQUNyRCxjQUFjQyxJQUFJLFFBQVEsZUFBZTtBQUN6QyxTQUFTQyxNQUFNLFFBQVEsNEJBQTRCO0FBQ25ELFNBQVNDLHdCQUF3QixRQUFRLGdDQUFnQztBQUN6RSxTQUFTQyxNQUFNLFFBQVEsMEJBQTBCO0FB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