MCP服务器实现

一个基于Node.js/TypeScript的Model Context Protocol (MCP)服务器实现,支持用户待办事项、日志文件读取和AI应用提示模板。

  • by Sofiukl
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 sofiukl/my-mcp-server

使用说明

我的mcp服务器

Node.js/TypeScript中的模型上下文协议(MCP)服务器实现。该项目为MCP提供了多个服务器实现,支持用户待办事项、日志文件读取和AI应用程序的提示模板。

特性

  • 获取并添加用户todo(伪API)
  • 将应用程序日志文件作为资源读取
  • 为代码解释和git提交消息提供提示模板
  • 使用MCP兼容服务器 @modelcontextprotocol/sdk
  • 多种服务器传输:stdio和HTTP流式传输

服务器实现

1.标准MCP服务器(src/index.ts)

  • 作为基于stdio的MCP服务器运行(用于CLI/桌面集成)
  • 支持待办事项、日志读取和提示功能

2.HTTP流式MCP服务器(src/index-http-streamable-server.ts)

  • 作为HTTP服务器运行(默认端口:7171)
  • 支持与stdio服务器相同的功能
  • 适用于需要HTTP传输的集成

3.自定义HTTP服务器(src/server.ts)

  • 实现一组不同的功能(有关详细信息,请参阅代码)
  • 作为HTTP服务器运行(默认端口:7171)

设置

  1. 安装依赖项:
    npm install
    
  2. 构建项目:
    • 构建所有服务器:
      npm run build
      
    • 或者单独构建:
      npm run build:stdio   # For stdio MCP server
      npm run build:http    # For HTTP streamable MCP server
      npm run build:custom  # For custom HTTP server
      

运行服务器

标准MCP服务器

npm run start:stdio

HTTP流式MCP服务器

npm run start:http

自定义HTTP服务器

npm run start:custom

您还可以使用相应的 inspect, inspect:http,以及 inspect:custom 使用模型上下文协议检查器进行调试的脚本。

在VS代码中使用MCP服务器

示例 mcp.json 对于stdio:

{
  "servers": [
    {
      "name": "My MCP Stdio Server",
      "transport": "stdio",
      "command": "node",
      "args": [
        "/Users/sofikulmallick/Documents/pprojects/GenAI/my-mcp-server/build/index.js"
      ]
    }
  ]
}

示例 mcp.json 对于HTTP:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "AUTHORIZATION_TOKEN",
      "description": "MCP Server Authorization JWT",
      "password": true
    }
  ],
  "servers": {
    "my-mcp-server-d959f687": {
      "transport": "http",
      "url": "http://localhost:7171/mcp",
      "headers": {
        "Authorization": "Bearer ${input:AUTHORIZATION_TOKEN}"
      }
    }
  }
}

在Claude Desktop中使用MCP服务器

{
  "servers": [
    {
      "name": "My MCP Stdio Server",
      "transport": "stdio",
      "command": "node",
      "args": [
        "/Users/sofikulmallick/Documents/pprojects/GenAI/my-mcp-server/build/index.js"
      ]
    }
  ]
}

Claude还不支持HTTP流式MCP服务器。

项目结构

  • src/ -TypeScript源文件
  • build/ -编译的JavaScript输出
  • sample_logs.txt -资源读取的示例日志文件

API概述

  • 获取用户待办事项: 使用dummyjson.com为用户获取待办事项
  • 添加用户待办事项: 使用dummyjson.com为用户添加todo
  • 计算BMI: 根据体重(kg)和身高(m)计算体重指数
  • 读取日志: 阅读来源 sample_logs.txt
  • 提示: 提供代码解释和git提交消息的提示模板

使用Postman测试MCP HTTP API

您可以使用Postman测试MCP HTTP API。提供可直接导入的Postman收藏:

  • 文件: mcp-server-postman-collection.json

步骤:

  1. 导入收藏 成为邮差。
  2. 获取令牌:使用“获取令牌”请求获取JWT。
  3. 初始化MCP会话:使用“MCP HTTP服务器初始化”请求。替换 <token> 你的JWT。
  4. 通话工具(例如,计算BMI):使用“计算BMI工具”请求。替换 <token> 和 <session-id> 使用您之前步骤中的值。

cURL命令示例

获取令牌:

curl --location 'http://localhost:7171/login' \
--header 'Content-Type: application/json' \
--data '{"username":"user1","password":"password1"}'

MCP HTTP服务器初始化:

curl --location 'http://localhost:7171/mcp' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json, text/event-stream' \
--header 'Authorization: Bearer <token>' \
--data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": { "interactive": true },
      "clientInfo": { "name": "example-client", "version": "1.0.0" }
    }
  }'

计算BMI工具:

curl --location 'http://localhost:7171/mcp' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json, text/event-stream' \
--header 'mcp-session-id: <session-id>' \
--header 'Authorization: Bearer <token>' \
--data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "calculate-bmi",
      "arguments": { "weightKg": 70, "heightM": 1.75 }
    }
  }'