当前位置: 首页 > article >正文

【MCP】如何解决duckduckgo MCP 命令执行错误

在软件开发的道路上,我们常常会遇到一些看似简单却又难以捉摸的问题。今天,我想分享一次解决MCP(Model Context Protocol)服务执行错误的经历,希望能给正在面临类似挑战的你带来一些启发。

问题的开始

一切始于我配置MCP服务器时遇到的错误。当时,我的配置文件如下:

{
  "mcpServers": {
    "duckduckgo-web-search": {
      "isActive": true,
      "command": "/Users/eulerblind/mcp/duckduckgo-web-search/build/index.js"
    }
  }
}

看起来很简单,对吧?但系统却给了我一个令人费解的错误提示:

code: 'Unknown system error -8',
syscall: 'spawn'

这是典型的"机器在说什么,人类听不懂"的场景。

探索与发现

带着好奇与疑惑,我开始了调查。第一步,自然是查看项目结构,了解文件布局:

[dir]  .git/ (? items) - Mar 21, 01:56 AM
[dir]  build/ (? items) - Mar 21, 01:37 AM
[file] package-lock.json (9.7KB, 281 lines) - Mar 21, 01:37 AM
[file] .DS_Store (6.0KB, 1 lines) - Mar 21, 01:36 AM
[dir]  node_modules/ (? items) - Mar 20, 09:22 AM
[file] package.json (1.2KB, 48 lines) - Mar 20, 09:22 AM
[dir]  src/ (? items) - Mar 20, 09:22 AM
[file] tsconfig.json (340B, 16 lines) - Mar 20, 09:22 AM
[file] .gitignore (32B, 4 lines) - Mar 20, 09:22 AM
[file] README.md (1.6KB, 71 lines) - Mar 20, 09:22 AM

接着检查build目录,确认index.js确实存在:

[file] index.js (5.2KB, 166 lines) - Mar 21, 01:38 AM

我还通过命令行检查了文件权限:

-rwxr-xr-x  1 eulerblind  staff  5332 Mar 21 09:38 build/index.js

看来文件是有执行权限的(755),这不是问题所在。

突破口

继续深入,我检查了index.js文件的内容:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
import fetch from "node-fetch";
// ...其余代码

啊哈!发现问题了 - 文件缺少了关键的shebang行。在类Unix系统中,可执行脚本需要在第一行指定解释器,即所谓的"shebang"行。对于Node.js脚本,这通常是:

#!/usr/bin/env node

这行代码告诉系统使用node来执行这个JavaScript文件。没有这一行,系统就不知道如何解释和执行这个文件,即使它有执行权限!这就是导致"spawn"错误的原因。

解决方案

了解问题所在后,解决方案就变得清晰了:我需要修改源文件,在编译前添加shebang行。

检查源文件src/index.ts:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// ...其余代码

确实也缺少shebang行。于是我在src/index.ts文件最开始添加了:

#!/usr/bin/env node

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
// ...其余代码

然后重新编译项目:

npm run build

构建完成后,我确认新的index.js文件确实包含了shebang行:

#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";

同时,执行权限也得到了保留:

-rwxr-xr-x  1 eulerblind  staff  5352 Mar 21 09:58 build/index.js

反思与启示

这个看似简单的问题揭示了在开发中常常被忽视的细节:

  1. 系统执行机制的理解:了解操作系统如何执行文件的机制是解决问题的关键。
  2. 权限与解释器的区别:文件有执行权限并不意味着系统知道如何执行它。
  3. 构建过程的重要性:在编译和构建过程中,确保生成的文件包含所有必要的元素。

结语

开发路上,我们会遇到各种各样的挑战,有些看起来微不足道,却能阻碍整个项目的进展。保持好奇,细心观察,不放过任何线索,是解决问题的关键。

希望这个小故事能给你带来一些启发,让你在面对类似问题时能够更加从容。记住,有时候最大的突破就藏在最微小的细节中。

编程,就是这样一场充满惊喜的冒险。


http://www.kler.cn/a/595683.html

相关文章:

  • 数据库—sql语法基础
  • 深入解读《白帽子讲 Web 安全》之业务逻辑安全
  • zephyr-中国跨国并购数据(1997-2024.3.8)
  • 虚幻统一管理创建的标签
  • 蓝桥与力扣刷题(蓝桥 三角形面积)
  • wps字符很分散
  • 来源于胡椒的亚甲二氧桥CYP450-文献精读119
  • mapper.xml中 “http://mybatis.org/dtd/mybatis-3-mapper.dtd“> 报错的解决方法
  • NAT和VPN的联系
  • uni-app——网络API
  • 《深度学习》——YOLOv3详解
  • fastapi+mysql律师系统
  • 智见未来:多大模型协同的数据分析新范式
  • django设置admin的排列顺序,耗3小时【躲坑指南】
  • 【WRF模拟】WPS预处理设置生成文件地址
  • Visual Studio2022发布web到浏览器可查看
  • 输电线路专业英语词汇
  • vulnhub靶场【billu系列】之billu_b0x2靶机
  • 【漫话机器学习系列】152.ReLU激活函数(ReLU Activation Function)
  • ffmpeg库视频硬解码使用流程