我搭建了MCP服务器,这样我就再也不需要手动导入Excel数据了

发布: (2026年2月10日 GMT+8 12:55)
8 分钟阅读
原文: Dev.to

抱歉,我无法直接访问外部链接获取文章内容。请您把需要翻译的文本粘贴在这里,我会按照要求保留源链接并将正文翻译成简体中文。

开始的一切问题

想象一下:你在经营一家小咖啡馆。你的菜单保存在 Excel 表格中(因为大家都用这个,对吧?)。现在你需要把这些数据导入 MongoDB,以供新的网站应用使用。

你的选择

  • 手动复制粘贴每一项(令人崩溃)
  • 编写一次性的 Node.js 脚本(一次能用,下次就会出错)
  • 请 ChatGPT 编写脚本(帮你完成 80 % ,剩下的就得自己搞)

我想要的是选项 4:像和人对话一样和 Claude 交流,让它直接…工作。

这就是 MCP(Model Context Protocol) 出现的原因。

MCP 到底是什么?

MCP 基本上是一种让 Claude(或任何 AI)拥有超能力的方式。Claude 不再只是回答问题,而是可以实际做事——比如读取文件、调用 API,或者在我的案例中,将 Excel 数据导入数据库。

没有 MCP 时使用 MCP 时
Claude 是一个非常聪明的朋友,只能提供建议。Claude 是一个非常聪明的朋友,实际上可以 SSH 登录你的服务器并进行修复。

问题是?你必须自己构建执行实际工作的“服务器”。

构建 MindfulMapper

愿景

我希望能够说:

“嘿 Claude,把 menu.xlsx 导入我的 products 集合。将 ‘Name (EN)’ 映射到 name.en,将 ‘Name (TH)’ 映射到 name.th。还有,自动生成前缀为 ‘spb’ 的 ID。”

……并且它能直接工作。

现实(即痛点)

痛点 #1 – Dotenv 灾难

我的第一个版本使用 dotenv 来加载环境变量:

import dotenv from 'dotenv';
dotenv.config();

dotenv 会向 stdout 打印一条提示信息:

[dotenv@17.2.4] injecting env (4) from .env

Claude Desktop 看到这条信息后,尝试将其解析为 JSON(因为 MCP 使用 JSON‑RPC),于是立刻崩溃。花了我太久才弄清楚这件事。

解决方案: 抑制该信息或在 Claude Desktop 配置中硬编码环境变量。我选择了后者。

痛点 #2 – SDK 版本地狱

MCP SDK 更新速度极快——真的非常快。1.26.0 版本的语法与网上的示例完全不同。

示例中展示的(1.26.0 之前):

server.addTool({
  name: "my_tool",
  description: "Does a thing",
  parameters: z.object({ /* … */ }),
  execute: async ({ /* … */ }) => { /* … */ }
});

在 v1.26.0 实际可用的写法:

const server = new Server(
  { name: "my-server", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [/* … */]
}));

server.setRequestHandler(CallToolRequestSchema, async (request) => {
  // Handle tool calls
});

完全不同。为此花了好几个小时。

痛点 #3 – 自动生成 ID

我想要的 ID 形如 spb-0001spb-0002 等。关键在于在 MongoDB 中维护一个计数器:

async function getNextId(prefix = 'spb') {
  const counterCollection = db.collection('counters');
  const result = await counterCollection.findOneAndUpdate(
    { _id: 'item_id' },
    { $inc: { seq: 1 } },
    { upsert: true, returnDocument: 'after' }
  );
  const num = result.seq || 1;
  return `${prefix}-${String(num).padStart(4, '0')}`;
}

这可以确保:

  • 不会出现重复 ID(即使多次导入同一文件)
  • 编号是顺序的
  • 不同项目类型可以使用自定义前缀

The Cool Parts

1. Flexible Column Mapping

想把 Excel 列映射到嵌套的 MongoDB 对象吗?很简单:

// Excel columns: "Name (EN)", "Name (TH)"
// Mapping: { "name.en": "Name (EN)", "name.th": "Name (TH)" }

// Result in MongoDB:
{
  id: "spb-0001",
  name: {
    en: "Americano",
    th: "อเมริกาโน่"
  }
}

映射器会自动处理点号表示法。

2. Natural Language Interface

不必每次都写代码,我只需要对 Claude 说:

“将 menu.xlsx 导入 products 集合。使用前缀 ‘spb’。清除已有数据。”

Claude 会把它转换为正确的 MCP 工具调用并带上相应参数。这就像拥有一个永不疲倦、非常耐心的数据导入助理。

3. It Actually Works in Production

我在 MongoDB Atlas(云)上使用它来管理真实的咖啡馆菜单系统。它在生产环境中能够可靠运行,这一点仍然让我感到惊讶。

如何使用

1. 安装

git clone https://github.com/kie-sp/mindful-mapper.git
cd mindful-mapper
npm install

2. 配置 Claude Desktop

将以下内容添加到 ~/Library/Application Support/Claude/claude_desktop_config.json(根据你的环境调整路径/数值):

{
  "mcpServers": {
    "mindful-mapper": {
      "command": "node",
      "args": ["/full/path/to/mindful-mapper/upload-excel.js"],
      "env": {
        "MONGODB_URI": "your-mongodb-connection-string",
        "MONGODB_DB_NAME": "your_db",
        "ID_PREFIX": "spb"
      }
    }
  }
}

3. 使用它

  1. 重启 Claude Desktop。

  2. 说,例如:

    “将 /path/to/menu.xlsx 导入 products 集合。使用前缀 ‘spb’。”

就这么简单。

MindfulMapper 演示

![MCP 插图](https://media2.dev.to/dynamic/image/width=800,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldiawtvxe00od04t04xw.jpg)

教训

1. MCP 仍处于早期阶段

SDK 更新迅速。两个月前还能运行的代码今天可能会出错。始终检查你使用的版本。

2. 调试 MCP 服务器……很有意思

当你的服务器静默崩溃时,你在 Claude 中看不到堆栈跟踪。你的最佳帮手变成了:

node your-server.js 2>&1

以及位于以下位置的日志:

~/Library/Logs/Claude/mcp*.log

3. 收获值得

一旦成功,它就是魔法。我从害怕数据导入变成了真的享受它们(好吧,至少不再害怕了)。

接下来是什么?

我想要修复的当前限制:

  • No schema validation – 它会愉快地导入垃圾数据。
  • No update/upsert mode – 只能“插入”或“清除后插入”。
  • MongoDB only – 已有 PostgreSQL 支持,但需要完善。
  • No multi‑sheet support – 只处理第一张工作表。

但说实话,对于约 90 % 的使用场景,它已经完美运行。

亲自尝试

  • GitHub:
  • 需求: Node.js 18+, MongoDB, Claude Desktop
  • 许可证: MIT(随意使用)

如果你用它做出了很酷的东西,告诉我一声!或者如果你遇到了和我相同的痛点,至少现在你知道自己并不孤单。

最后思考

构建 MCP 服务器很奇怪。它既不像后端开发,也不像 AI 工程——它是一种全新的为 AI 代你使用的工具构建方式。

当它正常工作时,你可以随意让 Claude 处理你的数据导入,而你去泡咖啡。这相当酷。

如果你最终使用了它或构建了类似的东西,我很想听听你的经验!欢迎在 GitHub 上打开 issue 或直接联系我。

导入愉快! 🎉

构建使用:Node.js、MongoDB、MCP SDK,以及大量不合理的反复试验

0 浏览
Back to Blog

相关文章

阅读更多 »

新文章

您确定要隐藏此 comment 吗?它将在您的 post 中被隐藏,但仍可通过 comment 的 permalink 查看。Hide child comments 如我们……

设置 Ollama、NGROK 和 LangChain

!Breno A.https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...