doc-tools-mcp

doc-tools-mcp

在 Node.js 中实现 Word 文档的读取和写入 MCP (Message Communication Protocol) 协议,需要分解成几个部分,并使用合适的库来处理 Word 文档和网络通信。 由于 MCP 通常指的是消息通信协议,与 Word 文档本身没有直接关系,因此我将假设你需要: 1. **读取和写入 Word 文档 (docx 格式)** 2. **使用 MCP 协议发送和接收 Word 文档的内容或相关信息** 以下是一个概念性的实现方案,包含代码示例和解释。 **1. 读取和写入 Word 文档 (docx 格式)** 可以使用 `docx` 库来处理 Word 文档。 ```bash npm install docx ``` ```javascript const { Document, Packer, Paragraph, TextRun } = require("docx"); const fs = require("fs"); // 创建一个新的 Word 文档 async function createWordDocument(data) { const doc = new Document({ sections: [{ children: [ new Paragraph({ children: [ new TextRun(data), ], }), ], }], }); // 将文档保存到文件 const buffer = await Packer.toBuffer(doc); fs.writeFileSync("my-document.docx", buffer); console.log("Word document created successfully!"); } // 读取 Word 文档 (需要额外的库,例如 mammoth.js) async function readWordDocument(filePath) { const mammoth = require("mammoth"); // 需要安装: npm install mammoth try { const result = await mammoth.extractRawText({ path: filePath }); const text = result.value; console.log("Word document content:", text); return text; } catch (error) { console.error("Error reading Word document:", error); return null; } } // 示例用法 async function main() { await createWordDocument("Hello, this is a test document created with Node.js!"); const content = await readWordDocument("my-document.docx"); if (content) { console.log("Successfully read the document."); } } main(); ``` **解释:** * **`docx` 库:** 用于创建和修改 Word 文档。 `Document`, `Paragraph`, `TextRun` 是 `docx` 库提供的类,用于构建文档结构。 * **`mammoth` 库:** 用于读取 Word 文档的内容。 `mammoth.extractRawText` 提取文档中的文本。 * **`fs` 模块:** Node.js 的文件系统模块,用于读写文件。 * **`createWordDocument` 函数:** 创建一个包含指定文本的 Word 文档,并将其保存到 `my-document.docx` 文件中。 * **`readWordDocument` 函数:** 读取指定路径的 Word 文档,并返回其文本内容。 **2. 使用 MCP 协议发送和接收 Word 文档的内容或相关信息** 这里需要定义 MCP 协议的具体格式。 假设 MCP 协议包含以下字段: * `type`: 消息类型 (例如 "document_content", "document_metadata") * `data`: 消息数据 (例如 Word 文档的内容,文档的元数据) 可以使用 Node.js 的 `net` 模块创建 TCP 服务器和客户端,并使用自定义的 MCP 协议进行通信。 ```javascript const net = require("net"); // MCP 协议编码函数 function encodeMCP(type, data) { const message = JSON.stringify({ type, data }); const length = Buffer.byteLength(message, 'utf8'); const lengthBuffer = Buffer.alloc(4); // 4 字节表示消息长度 lengthBuffer.writeInt32BE(length, 0); return Buffer.concat([lengthBuffer, Buffer.from(message, 'utf8')]); } // MCP 协议解码函数 function decodeMCP(buffer) { const length = buffer.readInt32BE(0); const message = buffer.slice(4, 4 + length).toString('utf8'); return JSON.parse(message); } // 服务器端 function startServer(port) { const server = net.createServer((socket) => { console.log("Client connected."); let receivedData = Buffer.alloc(0); socket.on("data", (data) => { receivedData = Buffer.concat([receivedData, data]); while (receivedData.length >= 4) { const length = receivedData.readInt32BE(0); if (receivedData.length >= 4 + length) { const messageBuffer = receivedData.slice(0, 4 + length); const message = decodeMCP(messageBuffer); console.log("Received message:", message); // 处理消息 if (message.type === "document_content") { console.log("Received document content:", message.data); } receivedData = receivedData.slice(4 + length); // 移除已处理的消息 } else { break; // 等待更多数据 } } }); socket.on("end", () => { console.log("Client disconnected."); }); socket.on("error", (err) => { console.error("Socket error:", err); }); }); server.listen(port, () => { console.log(`Server listening on port ${port}`); }); } // 客户端 function connectToServer(port, message) { const client = net.createConnection({ port: port }, () => { console.log("Connected to server."); const encodedMessage = encodeMCP(message.type, message.data); client.write(encodedMessage); }); client.on("data", (data) => { console.log("Received data from server:", data.toString()); client.end(); }); client.on("end", () => { console.log("Disconnected from server."); }); client.on("error", (err) => { console.error("Client error:", err); }); } // 示例用法 async function main() { const port = 8080; // 启动服务器 startServer(port); // 等待服务器启动 await new Promise(resolve => setTimeout(resolve, 1000)); // 读取 Word 文档内容 const documentContent = await readWordDocument("my-document.docx"); if (documentContent) { // 创建 MCP 消息 const message = { type: "document_content", data: documentContent, }; // 连接到服务器并发送消息 connectToServer(port, message); } } main(); ``` **解释:** * **`net` 模块:** Node.js 的网络模块,用于创建 TCP 服务器和客户端。 * **`encodeMCP` 函数:** 将消息编码为 MCP 协议格式。 它将消息类型和数据转换为 JSON 字符串,然后计算字符串的长度,并将长度作为 4 字节的大端整数添加到消息的前面。 * **`decodeMCP` 函数:** 将 MCP 协议格式的消息解码为 JavaScript 对象。 它首先读取消息长度,然后读取消息内容,并将其解析为 JSON 对象。 * **`startServer` 函数:** 启动一个 TCP 服务器,监听指定端口。 当客户端连接时,它会接收数据,解码 MCP 消息,并处理消息。 * **`connectToServer` 函数:** 连接到指定端口的 TCP 服务器,并发送 MCP 消息。 * **示例用法:** 首先启动服务器,然后读取 Word 文档的内容,创建一个包含文档内容的 MCP 消息,并将其发送到服务器。 **关键点:** * **MCP 协议定义:** 你需要根据实际需求定义 MCP 协议的格式。 上面的示例使用 JSON 格式,并添加了消息长度字段。 * **错误处理:** 在实际应用中,需要添加更完善的错误处理机制,例如处理网络连接错误,数据解析错误等。 * **数据分块:** 如果 Word 文档非常大,可能需要将文档内容分成多个块进行传输。 * **安全性:** 如果需要传输敏感数据,需要考虑使用加密技术,例如 TLS/SSL。 * **库的选择:** `docx` 和 `mammoth` 只是处理 Word 文档的其中两种库。 还有其他的库,例如 `officegen`,可以用于创建更复杂的 Word 文档。 选择合适的库取决于你的具体需求。 **总结:** 这个方案提供了一个基本的框架,用于在 Node.js 中实现 Word 文档的读取和写入,并使用 MCP 协议进行通信。 你需要根据实际需求调整代码,并添加必要的错误处理和安全性措施。 记住安装所需的 npm 包:`npm install docx mammoth`。 如果需要更复杂的 Word 文档处理功能,可以考虑使用其他的 Word 文档处理库。

Category
访问服务器

README

Word Tools MCP 服务器

一个模型上下文协议 (MCP) 服务器,提供 AI 驱动的 Word 文档操作功能。该服务器实现了 MCP 协议,使 AI 应用程序能够通过自然语言交互来创建、编辑和管理 Word 文档。

smithery badge

<a href="https://glama.ai/mcp/servers/q9e176vq7l"> <img width="380" height="200" src="https://glama.ai/mcp/servers/q9e176vq7l/badge" /> </a>

功能

  • 完整的 MCP 协议实现
  • Word 文档创建和管理
  • 丰富的文本内容操作
  • 表格创建和格式化
  • 文档布局控制
  • 文档元数据管理
  • 实时文档状态监控

前提条件

  • Node.js 14 或更高版本
  • Microsoft Word(可选,用于高级功能)

安装

npx @puchunjie/doc-tools-mcp

或者全局安装:

npm install -g @puchunjie/doc-tools-mcp

在你的项目中作为依赖项使用:

npm install @puchunjie/doc-tools-mcp

用法

  1. 启动 MCP 服务器:
npx @puchunjie/doc-tools-mcp
  1. 服务器默认在 8765 端口启动

  2. 配置你的 AI 应用程序(例如,Cursor、VSCode)以使用 MCP 服务器:

    http://localhost:8765
    

MCP 工具

服务器提供以下 MCP 功能:

  • create_document - 创建一个新的 Word 文档

    • 参数:filePath (必需), title, author
  • open_document - 打开一个现有的 Word 文档

    • 参数:filePath (必需)
  • add_paragraph - 向文档添加一个段落

    • 参数:filePath (必需), text (必需), style, alignment
  • add_table - 向文档添加一个表格

    • 参数:filePath (必需), rows (必需), cols (必需), headers, data
  • search_and_replace - 在文档中查找和替换文本

    • 参数:filePath (必需), searchText (必需), replaceText (必需), matchCase
  • set_page_margins - 设置文档页面边距

    • 参数:filePath (必需), top, right, bottom, left
  • get_document_info - 获取文档元数据

    • 参数:filePath (必需)

与 AI 应用程序集成

Cursor

  1. 打开 Cursor 配置文件 ~/.cursor/mcp.json
  2. 添加以下配置:
{
  "mcpServers": {
    "doc-tools-mcp": {
      "command": "npx",
      "args": [
        "@puchunjie/doc-tools-mcp"
      ]
    }
  }
}

或者对于本地开发版本:

{
  "mcpServers": {
    "doc-tools-mcp": {
      "command": "node",
      "args": [
        "/path/to/your/doc-tools-mcp/dist/mcp-server.js"
      ]
    }
  }
}

配置完成后,你可以使用自然语言来操作 Word 文档:

"创建一个名为 report.docx 的新文档"
"向 report.docx 添加一个标题 '月度报告'"
"插入一个包含销售数据的 4x3 表格"

VSCode 和其他 MCP 兼容工具

类似的集成步骤适用于其他支持 MCP 协议的工具。请查阅你的工具的文档以获取具体的 MCP 服务器配置步骤。

开发

要扩展或修改此 MCP 服务器:

  1. 克隆存储库:
git clone <repository-url>
cd doc-tools-mcp
  1. 安装依赖项:
npm install
  1. 在开发模式下启动:
npm run start
  1. 构建用于生产环境:
npm run build

添加新的 MCP 功能

  1. src/services/DocumentService.ts 中添加新方法
  2. src/mcp-server.ts 中注册新函数
  3. 根据需要更新类型定义

配置

  • 默认端口:8765(可配置)
  • 支持的文件类型:.docx
  • 所有文件路径应该是绝对路径或相对于当前工作目录的相对路径

许可证

MIT

支持

如果您遇到任何问题或有改进建议,请在我们的 GitHub 存储库上提交 issue。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选