mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-10 18:02:55 +00:00
fix: load fastmcp via dynamic import in electron MCP
This commit is contained in:
parent
fe0b8aed20
commit
be860f9968
34
electron/lib/mcp.js
vendored
34
electron/lib/mcp.js
vendored
@ -80,12 +80,33 @@
|
||||
* - "把所有未读报告标记为已读"
|
||||
*/
|
||||
|
||||
const { FastMCP } = require('fastmcp');
|
||||
let FastMCP = null;
|
||||
const { z } = require('zod');
|
||||
const loger = require("electron-log");
|
||||
const TurndownService = require('turndown');
|
||||
const { marked } = require('marked');
|
||||
|
||||
async function loadFastMCP() {
|
||||
if (FastMCP) {
|
||||
return FastMCP;
|
||||
}
|
||||
|
||||
// Prefer require for environments that still support CJS entry, fall back to ESM import when exports block it.
|
||||
try {
|
||||
const maybeModule = require('fastmcp');
|
||||
FastMCP = maybeModule.FastMCP || maybeModule.default || maybeModule;
|
||||
return FastMCP;
|
||||
} catch (error) {
|
||||
if (error.code && !['ERR_PACKAGE_PATH_NOT_EXPORTED', 'ERR_REQUIRE_ESM'].includes(error.code)) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
const moduleExports = await import('fastmcp');
|
||||
FastMCP = moduleExports.FastMCP || moduleExports.default || moduleExports;
|
||||
return FastMCP;
|
||||
}
|
||||
|
||||
let mcpServer = null;
|
||||
|
||||
// 初始化 HTML 转 Markdown 工具
|
||||
@ -141,7 +162,14 @@ function markdownToHtml(markdown) {
|
||||
class DooTaskMCP {
|
||||
constructor(mainWindow) {
|
||||
this.mainWindow = mainWindow;
|
||||
this.mcp = new FastMCP({
|
||||
this.mcp = null;
|
||||
this.readyPromise = this.initMCP();
|
||||
}
|
||||
|
||||
async initMCP() {
|
||||
const FastMCPClass = await loadFastMCP();
|
||||
|
||||
this.mcp = new FastMCPClass({
|
||||
name: 'DooTask MCP Server',
|
||||
version: '1.0.0',
|
||||
description: 'DooTask 任务管理 MCP 接口',
|
||||
@ -1862,6 +1890,7 @@ class DooTaskMCP {
|
||||
// 启动 MCP 服务器
|
||||
async start(port = 22224) {
|
||||
try {
|
||||
await this.readyPromise;
|
||||
await this.mcp.start({
|
||||
transportType: 'httpStream',
|
||||
httpStream: {
|
||||
@ -1875,6 +1904,7 @@ class DooTaskMCP {
|
||||
|
||||
// 停止服务器
|
||||
async stop() {
|
||||
await this.readyPromise;
|
||||
if (this.mcp && typeof this.mcp.stop === 'function') {
|
||||
await this.mcp.stop();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user