mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-14 04:32:49 +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 { z } = require('zod');
|
||||||
const loger = require("electron-log");
|
const loger = require("electron-log");
|
||||||
const TurndownService = require('turndown');
|
const TurndownService = require('turndown');
|
||||||
const { marked } = require('marked');
|
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;
|
let mcpServer = null;
|
||||||
|
|
||||||
// 初始化 HTML 转 Markdown 工具
|
// 初始化 HTML 转 Markdown 工具
|
||||||
@ -141,7 +162,14 @@ function markdownToHtml(markdown) {
|
|||||||
class DooTaskMCP {
|
class DooTaskMCP {
|
||||||
constructor(mainWindow) {
|
constructor(mainWindow) {
|
||||||
this.mainWindow = 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',
|
name: 'DooTask MCP Server',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
description: 'DooTask 任务管理 MCP 接口',
|
description: 'DooTask 任务管理 MCP 接口',
|
||||||
@ -1862,6 +1890,7 @@ class DooTaskMCP {
|
|||||||
// 启动 MCP 服务器
|
// 启动 MCP 服务器
|
||||||
async start(port = 22224) {
|
async start(port = 22224) {
|
||||||
try {
|
try {
|
||||||
|
await this.readyPromise;
|
||||||
await this.mcp.start({
|
await this.mcp.start({
|
||||||
transportType: 'httpStream',
|
transportType: 'httpStream',
|
||||||
httpStream: {
|
httpStream: {
|
||||||
@ -1875,6 +1904,7 @@ class DooTaskMCP {
|
|||||||
|
|
||||||
// 停止服务器
|
// 停止服务器
|
||||||
async stop() {
|
async stop() {
|
||||||
|
await this.readyPromise;
|
||||||
if (this.mcp && typeof this.mcp.stop === 'function') {
|
if (this.mcp && typeof this.mcp.stop === 'function') {
|
||||||
await this.mcp.stop();
|
await this.mcp.stop();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user