@lucianaib/mind-map-mcp
Version:
一个用于生成思维导图的 MCP 服务器
134 lines • 5.11 kB
JavaScript
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
import fetch from 'node-fetch';
// 思维导图生成工具
class MindMapMCPServer {
server;
constructor() {
this.server = new Server({
name: '@lucianaib/mind-map-mcp',
version: '1.0.0',
});
this.setupToolHandlers();
this.setupErrorHandling();
}
setupErrorHandling() {
this.server.onerror = (error) => {
console.error('[MCP错误]', error);
};
process.on('SIGINT', async () => {
await this.server.close();
process.exit(0);
});
}
setupToolHandlers() {
// 列出可用工具
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: 'generate_mindmap',
description: '根据输入内容生成思维导图',
inputSchema: {
type: 'object',
properties: {
content: {
type: 'string',
description: '要转换为思维导图的内容描述',
},
},
required: ['content'],
},
},
],
};
});
// 处理工具调用
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
if (name === 'generate_mindmap') {
return await this.generateMindMap(args);
}
throw new Error(`未知工具: ${name}`);
});
}
async generateMindMap(args) {
try {
const { content } = args;
if (!content || typeof content !== 'string') {
throw new Error('内容参数是必需的,且必须是字符串类型');
}
console.error(`[调试] 正在为内容生成思维导图: ${content}`);
const response = await fetch('https://api.coze.cn/v1/workflow/run', {
method: 'POST',
headers: {
'Authorization': 'Bearer pat_swgGk8nyAiDBtjGvKjFaa5kNbemCsf5TsQkO32rITfCxAQcLs3zeVNLFmjGbeROG',
'Content-Type': 'application/json',
},
body: JSON.stringify({
workflow_id: '7535494365978214438',
parameters: {
input: content,
},
app_id: '7535445185598308415',
is_async: false,
}),
});
if (!response.ok) {
throw new Error(`API请求失败: ${response.status} ${response.statusText}`);
}
const result = await response.json();
if (result.code !== 0) {
throw new Error(`API返回错误: ${result.msg || '未知错误'}`);
}
// 解析返回的数据
let outputData;
try {
outputData = JSON.parse(result.data);
}
catch (e) {
// 如果解析失败,直接使用原始数据
outputData = { output: result.data };
}
const mindmapUrl = outputData.output;
if (!mindmapUrl) {
throw new Error('API返回的数据中没有找到思维导图URL');
}
console.error(`[调试] 思维导图生成成功: ${mindmapUrl}`);
return {
content: [
{
type: 'text',
text: `思维导图生成成功!\n\n内容: ${content}\n\n思维导图链接: ${mindmapUrl}\n\n您可以点击链接查看生成的思维导图。`,
},
],
};
}
catch (error) {
console.error('[错误] 生成思维导图时出错:', error);
return {
content: [
{
type: 'text',
text: `生成思维导图时出错: ${error instanceof Error ? error.message : '未知错误'}`,
},
],
isError: true,
};
}
}
async run() {
const transport = new StdioServerTransport();
await this.server.connect(transport);
console.error('思维导图 MCP 服务器已启动');
}
}
// 启动服务器
const server = new MindMapMCPServer();
server.run().catch((error) => {
console.error('启动服务器失败:', error);
process.exit(1);
});
//# sourceMappingURL=index.js.map