前端的AI路其之二:初试MCP Server

前言

在前文MCP与Function Calling中,已经大概聊过了MCP的定义,并顺便梳理了我理解中的MCP与Function Calling的定义。接下来,肯定就是尝试咯。今天我们就尝试一下MCP开发一个 Tool

第一个MCP Server

这里我们将使用 @modelcontextprotocol/sdk 进行开发。

项目准备

首先检查我们的环境

js 复制代码
// 注意这里需要 node ≥ 16  最好≥ 20
node --version 

初始化项目

js 复制代码
// 创建项目的文件夹
mkdir mcp-test
cd mcp-test

// 初始化项目
npm init -y

// 创建开发目录
mkdir src
touch src/index.ts

配置package.json 然后npm install

js 复制代码
{
    "name": "mcp_test",
    "version": "1.0.0",
    "description": "A MCP server test",
    "type": "module",
    "bin": {
      "mcp_test": "./build/index.js"
    },
    "scripts": {
      "build": "tsc && chmod +x build/index.js",
      "prepublishOnly": "npm run build"
    },
    "files": [
      "build"
    ],
    "dependencies": {
      "@modelcontextprotocol/sdk": "^1.0.4",
      "axios": "^1.7.9",
      "form-data": "^4.0.1",
      "fs": "^0.0.1-security",
      "os": "^0.1.2",
      "path": "^0.12.7",
      "zod": "^3.24.1",
      "zod-to-json-schema": "^3.24.1"
    },
    "devDependencies": {
      "@types/node": "^22.10.2",
      "typescript": "^5.7.2"
    },
    "publishConfig": {
      "access": "public"
    },
    "keywords": [
      "mcp",
      "test"
    ]
  }

配置 tsconfig.json

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

这时候项目结构如下

开始开发

我们本次搞一个简单的数学函数

js 复制代码
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 创建MCP服务
const server = new McpServer({
  name: "Demo",
  version: "1.0.0"
});

// 定义MCP Tool
server.tool("add",
    '自定义映射LS',  // 描述一下这个tool是做什么的,可以方便模型理解
    { a: z.number(), b: z.number() },
  async ({ a, b }) => ({
    content: [{ type: "text", text: String(a * 3 + b * 5) }]
  })
);

// 创建
const transport = new StdioServerTransport();
await server.connect(transport);

打包部署

运行命令

js 复制代码
npm run build

这时候可以在build目录下有打包好的js文件

导入IDE

我这里使用的是windsurf,以windsurf举例

cmd + shift + p 然后输入MCP

选择 MCP Configuration Panel。然后选择右上角的 Add custon server

js 复制代码
{
    "mcpServers": {
      "add_mac_calendar": {
        "command": "node",
        "args": [
        // 这是输入自己的文件路径
		"/Users/JustDoIt521/Desktop/projects/learn/mcp_test/build/index.js"
	]
      }
    }
  }

然后就发现添加上了。如果没有的话 可以点一下refresh

接下来我们试一下

完结撒花

总结

这里只是MCP Tool的简单用法。除此之外还有Resource以及其他方式,我还在探索中。顺便提一句,在现在AI的时代,这些代码其实都可以让AI来生成,并不需要我们全部下手去写。各位也可以多做尝试。 愿各位都能在AI的道路上一帆风顺。祝好。

参考

MCP Typescript SDK

相关推荐
前端一课2 分钟前
【vue高频面试题】第9题:Vue3 的响应式原理是什么?和 Vue2 的响应式有什么区别?为什么 Vue3 改用了 Proxy?
前端·面试
Demon--hx2 分钟前
[C++]迭代器失效问题
前端·c++
GISer_Jing4 分钟前
前端架构学习
前端·学习·架构
前端一课4 分钟前
【vue高频面试题】第4题:Vue 3 中的 setup() 是什么?它的执行时机是什么?能做什么?
前端·面试
前端一课5 分钟前
【vue高频面试题】第5题:Vue3 的父子组件通信方式有哪些?分别适用于什么场景?
前端·面试
Funny Valentine-js5 分钟前
web实验后端php测试文本
前端·javascript·php·html5·cookie·telnet·session
前端一课8 分钟前
【vue高频面试题】第6题:Vue3 中 Composition API 和 Options API 有什么区别?为什么 Composition API 更推荐
前端·面试
前端一课12 分钟前
【vue高频面试题】第7题:Vue3 中 `v-model` 的工作原理是什么?为什么 Vue3 支持多个 v-model?如何在子组件中实现?
前端·面试
luguocaoyuan13 分钟前
前端沙箱隔离技术详解:从原理到实践
前端
前端一课14 分钟前
【vue高频面试题】第3题:Vue 3 中的 computed 是什么?和 watch 有什么区别?什么时候用哪一个?
前端·面试