mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-19 03:41:40 +08:00
176 lines
7.0 KiB
TypeScript
176 lines
7.0 KiB
TypeScript
export type MCPFieldState = 'required' | 'optional' | 'fixed';
|
|
|
|
export interface MCPFieldGuide {
|
|
key: string;
|
|
titleKey: string;
|
|
summaryKey: string;
|
|
detailKey: string;
|
|
fillKey: string;
|
|
avoidKey: string;
|
|
fieldState: MCPFieldState;
|
|
example?: string;
|
|
exampleKey?: string;
|
|
}
|
|
|
|
export interface MCPFillStep {
|
|
key: string;
|
|
step: string;
|
|
titleKey: string;
|
|
detailKey: string;
|
|
}
|
|
|
|
export interface MCPTroubleshootingGuide {
|
|
key: string;
|
|
symptomKey: string;
|
|
likelyCauseKey: string;
|
|
fixKey: string;
|
|
example?: string;
|
|
exampleKey?: string;
|
|
}
|
|
|
|
export const MCP_COMMAND_EXAMPLES = [
|
|
'npx -y @modelcontextprotocol/server-filesystem --stdio',
|
|
'uvx mcp-server-fetch',
|
|
'node server.js --stdio',
|
|
'python -m your_mcp_server',
|
|
'docker run --rm -i mcp/server-fetch:latest',
|
|
];
|
|
|
|
export const MCP_COMMAND_PARSE_EXAMPLE = '$env:GITHUB_TOKEN=...; uvx mcp-server-github --stdio';
|
|
|
|
export const MCP_SERVER_FILL_STEPS: MCPFillStep[] = [
|
|
{ key: 'template', step: '1', titleKey: 'ai_settings.mcp_server.guide.step.template.title', detailKey: 'ai_settings.mcp_server.guide.step.template.detail' },
|
|
{ key: 'name', step: '2', titleKey: 'ai_settings.mcp_server.guide.step.name.title', detailKey: 'ai_settings.mcp_server.guide.step.name.detail' },
|
|
{ key: 'command', step: '3', titleKey: 'ai_settings.mcp_server.guide.step.command.title', detailKey: 'ai_settings.mcp_server.guide.step.command.detail' },
|
|
{ key: 'args', step: '4', titleKey: 'ai_settings.mcp_server.guide.step.args.title', detailKey: 'ai_settings.mcp_server.guide.step.args.detail' },
|
|
{ key: 'env-timeout', step: '5', titleKey: 'ai_settings.mcp_server.guide.step.env_timeout.title', detailKey: 'ai_settings.mcp_server.guide.step.env_timeout.detail' },
|
|
];
|
|
|
|
export const MCP_FIELD_GUIDES: MCPFieldGuide[] = [
|
|
{
|
|
key: 'name',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.name.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.name.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.name.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.name.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.name.avoid',
|
|
fieldState: 'required',
|
|
example: 'Filesystem / Browser / GitHub',
|
|
},
|
|
{
|
|
key: 'enabled',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.enabled.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.enabled.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.enabled.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.enabled.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.enabled.avoid',
|
|
fieldState: 'optional',
|
|
exampleKey: 'ai_settings.mcp_server.guide.field.enabled.example',
|
|
},
|
|
{
|
|
key: 'transport',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.transport.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.transport.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.transport.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.transport.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.transport.avoid',
|
|
fieldState: 'fixed',
|
|
example: 'stdio',
|
|
},
|
|
{
|
|
key: 'command',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.command.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.command.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.command.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.command.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.command.avoid',
|
|
fieldState: 'required',
|
|
example: 'npx / node / uvx / python / docker',
|
|
},
|
|
{
|
|
key: 'args',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.args.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.args.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.args.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.args.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.args.avoid',
|
|
fieldState: 'optional',
|
|
example: '-y / @modelcontextprotocol/server-filesystem / --stdio / server.js / run / --rm / -i / image',
|
|
},
|
|
{
|
|
key: 'env',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.env.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.env.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.env.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.env.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.env.avoid',
|
|
fieldState: 'optional',
|
|
example: 'OPENAI_API_KEY=... / GITHUB_TOKEN=...',
|
|
},
|
|
{
|
|
key: 'timeout',
|
|
titleKey: 'ai_settings.mcp_server.guide.field.timeout.title',
|
|
summaryKey: 'ai_settings.mcp_server.guide.field.timeout.summary',
|
|
detailKey: 'ai_settings.mcp_server.guide.field.timeout.detail',
|
|
fillKey: 'ai_settings.mcp_server.guide.field.timeout.fill',
|
|
avoidKey: 'ai_settings.mcp_server.guide.field.timeout.avoid',
|
|
fieldState: 'optional',
|
|
example: '20 / 45 / 60',
|
|
},
|
|
];
|
|
|
|
export const MCP_AUTHORING_NOTES = [
|
|
'ai_settings.mcp_server.guide.note.command_only',
|
|
'ai_settings.mcp_server.guide.note.npx',
|
|
'ai_settings.mcp_server.guide.note.docker',
|
|
'ai_settings.mcp_server.guide.note.full_command',
|
|
'ai_settings.mcp_server.guide.note.env_lines',
|
|
'ai_settings.mcp_server.guide.note.secrets',
|
|
'ai_settings.mcp_server.guide.note.test_discovery',
|
|
];
|
|
|
|
export const MCP_TROUBLESHOOTING_GUIDES: MCPTroubleshootingGuide[] = [
|
|
{
|
|
key: 'command-not-found',
|
|
symptomKey: 'ai_settings.mcp_server.guide.troubleshooting.command_not_found.symptom',
|
|
likelyCauseKey: 'ai_settings.mcp_server.guide.troubleshooting.command_not_found.cause',
|
|
fixKey: 'ai_settings.mcp_server.guide.troubleshooting.command_not_found.fix',
|
|
example: 'command=npx, args=-y / @modelcontextprotocol/server-filesystem / --stdio',
|
|
},
|
|
{
|
|
key: 'timeout-or-no-tools',
|
|
symptomKey: 'ai_settings.mcp_server.guide.troubleshooting.timeout_or_no_tools.symptom',
|
|
likelyCauseKey: 'ai_settings.mcp_server.guide.troubleshooting.timeout_or_no_tools.cause',
|
|
fixKey: 'ai_settings.mcp_server.guide.troubleshooting.timeout_or_no_tools.fix',
|
|
example: 'args=--stdio / docker run --rm -i image, timeout=45',
|
|
},
|
|
{
|
|
key: 'auth-failed',
|
|
symptomKey: 'ai_settings.mcp_server.guide.troubleshooting.auth_failed.symptom',
|
|
likelyCauseKey: 'ai_settings.mcp_server.guide.troubleshooting.auth_failed.cause',
|
|
fixKey: 'ai_settings.mcp_server.guide.troubleshooting.auth_failed.fix',
|
|
example: 'GITHUB_TOKEN=... / KEY=VALUE',
|
|
},
|
|
{
|
|
key: 'stdio-only',
|
|
symptomKey: 'ai_settings.mcp_server.guide.troubleshooting.stdio_only.symptom',
|
|
likelyCauseKey: 'ai_settings.mcp_server.guide.troubleshooting.stdio_only.cause',
|
|
fixKey: 'ai_settings.mcp_server.guide.troubleshooting.stdio_only.fix',
|
|
example: 'stdio',
|
|
},
|
|
];
|
|
|
|
const quoteCommandPart = (value: string): string => {
|
|
const text = String(value || '').trim();
|
|
if (!text) {
|
|
return '';
|
|
}
|
|
return /[\s"]/u.test(text) ? `"${text.replace(/"/g, '\\"')}"` : text;
|
|
};
|
|
|
|
export const buildMCPLaunchPreview = (command: string, args?: string[]): string =>
|
|
[command, ...(Array.isArray(args) ? args : [])]
|
|
.map((item) => quoteCommandPart(item))
|
|
.filter(Boolean)
|
|
.join(' ');
|