手把手教你如何开发MCP服务:获取本地电脑安装软件清单

人工智能 潘老师 2周前 (04-09) 52 ℃ (0) 扫码查看

在日常使用电脑的过程中,你是否曾想过,要是能快速知道自己电脑里都装了哪些软件就好了?今天,咱们就来学习开发一个MCP服务,专门用来获取本地电脑安装的软件信息。接下来,跟着我的节奏,一步步来实现吧。

一、为啥要开发这个MCP服务?

在常见的AI Agent客户端里,像文件操作、系统操作这类指令往往是受限的。但接入MCP服务后,这些操作就变得轻松简单。今天我们开发的这个MCP服务,主要功能就是获取本地电脑安装的软件,通过它可以让AI Agent客户端的功能更强大,能处理更多复杂场景。

二、前期准备工作

(一)开发环境选择

对于前端开发工程师来说,Javascript和Typescript是常用的开发语言。MCP官方也提供了Typescript版本的SDK,所以我们选择在Node环境下开发。开发前,需要确保你的电脑满足以下条件:

  1. Node版本:Node 16及以上版本。
  2. 安装Claude桌面客户端:这是后续验证服务是否正常运行的关键工具。
  3. 演示环境:本文以MacOS系统为例进行演示,其他系统操作步骤可能略有差异。

(二)初始化项目

准备好开发环境后,就要开始初始化项目了。具体操作步骤如下:

# 创建项目目录
mkdir mcp-get-installed-apps
cd mcp-get-installed-apps

# npm初始化
npm init -y

# 安装依赖
npm install @modelcontextprotocol/sdk zod
npm install -D @types/node typescript

# 创建文件
mkdir src
touch src/index.ts

在这段代码中,mkdir用于创建目录,cd用来切换目录,npm init -y会快速初始化一个npm项目,npm install用于安装项目所需的依赖包,最后创建了src目录和index.ts文件,后续的业务逻辑代码就写在这个文件里。

(三)更新配置文件

项目初始化完成后,还需要更新package.jsontsconfig.json这两个配置文件。

package.json配置如下:

{
  "type": "module",
  "bin": {
    "weather": "./build/index.js"
  },
  "scripts": {
    "build": "tsc && chmod 755 build/index.js"
  },
  "files": [
    "build"
  ]
}

"type": "module"表示项目使用ES模块规范;"bin"字段指定了可执行文件的入口;"scripts"里的"build"脚本用于编译TypeScript代码并设置可执行权限;"files"指定了发布时包含的文件目录。

tsconfig.json配置如下:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "moduleResolution": "Node16",
    "outDir": "./build",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

compilerOptions里的各项配置用于指定TypeScript编译器的行为,比如目标ES版本、模块系统、输出目录等。includeexclude分别指定了需要编译的文件和需要排除的文件目录。

三、构建MCP服务

完成前面的准备工作,就进入到构建MCP服务的核心环节了。整体代码不到50行,虽然简短,但功能强大。代码如下:

// 引入必要的模块
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { getInstalledApps } from "get-installed-apps";

// 创建McpServer实例,配置服务名称、版本和能力
const server = new McpServer({
  name: "mcp-get-installed-apps",
  version: "1.0.0",
  capabilities: {
    resources: {},
    tools: {}
  }
});

// 定义一个工具,用于获取电脑安装的软件
server.tool(
  "get-installed-apps",
  "Get my computer's installed apps",
  async () => {
    const apps = await getInstalledApps();
    return {
      content: [
        {
          type: "text",
          text: JSON.stringify(apps, null, 2)
        }
      ]
    };
  }
);

// 程序入口函数
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("Weather MCP Server running on stdio");
}

main().catch((error) => {
  console.error("Fatal error in main():", error);
  process.exit(1);
});

这段代码主要做了三件事:

  1. 创建McpServer实例:给服务取名为mcp-get-installed-apps,版本设为1.0.0 ,并初始化了服务的能力。
  2. 定义工具:使用server.tool()方法定义了一个名为get-installed-apps的工具,描述为“Get my computer’s installed apps”,在工具的实现函数里,通过getInstalledApps()方法获取安装的软件信息,并进行格式化返回。这里的get-installed-apps是一个npm库,需要额外安装。
npm install get-installed-apps
  1. 程序入口main()函数是整个程序的入口,创建了StdioServerTransport实例作为通信传输,然后将服务连接到这个传输上,启动服务。如果在启动过程中出现错误,会捕获并打印错误信息,同时退出程序。

四、打包服务

服务构建完成后,需要进行打包,方便后续使用。打包操作很简单,在项目目录下执行以下命令即可:

npm run build

这个命令会执行package.json里定义的build脚本,将TypeScript代码编译成JavaScript代码,并设置可执行权限。

五、与Claude桌面客户端结合验证

打包完成后,还需要和Claude桌面客户端结合,来验证服务是否能正常工作。具体步骤如下:

  1. 添加或编辑配置文件:找到claude_desktop_config.json文件,它的路径在/Users/xxx/Library/Application Support/Claude/claude_desktop_config.json 。在文件中添加如下配置:
{
    "mcpServers": {
        "get-installed-apps": {
            "command": "node",
            "args": [
                "/Users/xxx/Documents/git/mcp-get-installed-apps/build/index.js"
            ]
        }
    }
}

注意,/Users/xxx/Documents/git/mcp-get-installed-apps/build/index.js要替换成你实际构建后的服务运行路径。
2. 重启Claude桌面客户端:重启的目的是让客户端重载配置,成功导入我们开发的服务。

重启后,如果一切正常,Claude就能使用我们开发的get-installed-apps工具了。当你在Claude里询问获取电脑安装软件相关问题时,就能看到类似下面这样的结果:

六、服务工作原理

可能你会好奇,这个服务是怎么运作的呢?其实流程并不复杂:

  1. 用户提问:客户端把你输入的问题发送给Claude。
  2. 工具选择:Claude接收到问题后,会分析可用的工具,判断哪个工具能解决这个问题,这里就会选择我们开发的get-installed-apps工具。
  3. 工具执行:客户端通过MCP服务器执行选定的工具。
  4. 结果返回:工具执行完成后,将结果返回给Claude。
  5. 生成回答:Claude把返回的结果组织成自然语言,呈现给用户。

七、写在最后

通过这个教程,我们成功开发了一个简单的MCP服务,实现了获取本地电脑安装软件的功能。从这个小服务中,我们也能感受到MCP服务的强大之处。以后,随着更多MCP服务的出现,AI Agent客户端将会有更丰富的功能,能应对各种复杂的使用场景。希望大家在学习这个教程的过程中有所收获,也期待大家能基于此开发出更多有趣、实用的MCP服务。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/ai/17033.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】