@iflow-mcp/doc-tools-mcp
Version:
Word 文档处理 MCP 服务器 - 基于 TypeScript 的文档处理工具
212 lines • 7.82 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = __importStar(require("express"));
const DocumentService_1 = require("./services/DocumentService");
const app = (0, express_1.default)();
const router = (0, express_1.Router)();
const port = 8765; // 使用不常用端口避免冲突
const docService = DocumentService_1.DocumentService.getInstance();
app.use(express_1.default.json());
// 定义所有支持的工具
const tools = [
{
name: 'create_document',
description: '创建新的 Word 文档',
parameters: {
properties: {
filePath: { type: 'string', description: '文档保存路径' },
title: { type: 'string', description: '文档标题' },
author: { type: 'string', description: '文档作者' },
},
required: ['filePath'],
type: 'object',
},
},
{
name: 'open_document',
description: '打开 Word 文档',
parameters: {
properties: {
filePath: { type: 'string', description: '文档路径' },
},
required: ['filePath'],
type: 'object',
},
},
{
name: 'add_paragraph',
description: '向文档添加段落',
parameters: {
properties: {
filePath: { type: 'string', description: '文档路径' },
text: { type: 'string', description: '段落文本' },
style: { type: 'string', description: '段落样式' },
alignment: { type: 'string', description: '对齐方式' },
},
required: ['filePath', 'text'],
type: 'object',
},
},
{
name: 'add_table',
description: '向文档添加表格',
parameters: {
properties: {
filePath: { type: 'string', description: '文档路径' },
rows: { type: 'number', description: '行数' },
cols: { type: 'number', description: '列数' },
headers: { type: 'array', description: '表头' },
data: { type: 'array', description: '表格数据' },
},
required: ['filePath', 'rows', 'cols'],
type: 'object',
},
},
{
name: 'search_and_replace',
description: '查找并替换文本',
parameters: {
properties: {
filePath: { type: 'string', description: '文档路径' },
searchText: { type: 'string', description: '要查找的文本' },
replaceText: { type: 'string', description: '替换为的文本' },
matchCase: { type: 'boolean', description: '是否区分大小写' },
},
required: ['filePath', 'searchText', 'replaceText'],
type: 'object',
},
},
{
name: 'set_page_margins',
description: '设置页面边距',
parameters: {
properties: {
filePath: { type: 'string', description: '文档路径' },
top: { type: 'number', description: '上边距' },
right: { type: 'number', description: '右边距' },
bottom: { type: 'number', description: '下边距' },
left: { type: 'number', description: '左边距' },
},
required: ['filePath'],
type: 'object',
},
},
{
name: 'get_document_info',
description: '获取文档信息',
parameters: {
properties: {
filePath: { type: 'string', description: '文档路径' },
},
required: ['filePath'],
type: 'object',
},
},
];
// MCP 工具列表端点
router.get('/tools/list', (req, res) => {
res.json(tools);
});
// MCP 工具调用端点
router.post('/tools/call', async (req, res) => {
const { name, parameters } = req.body;
try {
let result;
switch (name) {
case 'create_document':
result = await docService.createDocument(parameters.filePath, {
title: parameters.title,
author: parameters.author,
});
break;
case 'open_document':
result = await docService.openDocument(parameters.filePath);
break;
case 'add_paragraph':
result = await docService.addParagraph(parameters.filePath, {
text: parameters.text,
style: parameters.style,
alignment: parameters.alignment,
});
break;
case 'add_table':
result = await docService.addTable(parameters.filePath, {
rows: parameters.rows,
cols: parameters.cols,
headers: parameters.headers,
data: parameters.data,
});
break;
case 'search_and_replace':
result = await docService.searchAndReplace(parameters.filePath, {
searchText: parameters.searchText,
replaceText: parameters.replaceText,
matchCase: parameters.matchCase,
});
break;
case 'set_page_margins':
result = await docService.setPageMargins(parameters.filePath, {
top: parameters.top,
right: parameters.right,
bottom: parameters.bottom,
left: parameters.left,
});
break;
case 'get_document_info':
result = await docService.getDocumentInfo(parameters.filePath);
break;
default:
return res.status(400).json({
success: false,
error: `不支持的工具: ${name}`,
});
}
res.json(result);
}
catch (error) {
res.status(500).json({
success: false,
error: `工具执行失败: ${error.message}`,
});
}
});
// 使用路由
app.use('/', router);
// 启动服务器
app.listen(port, () => {
console.log(`Word MCP 服务器运行在端口 ${port}`);
});
//# sourceMappingURL=server.js.map