MCP服务器实现

一个基于NodeJS的MCP服务器实现,提供用户和消息资源管理功能,支持REST API和MCP协议访问。

  • by moises-paschoalick
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 moises-paschoalick/ai-agent-with-mcp

使用说明

使用NodeJS创建MCP服务器(ai-agent-with-mcp)

该项目实现了一个AI代理,该代理使用模型上下文协议(MCP)与外部资源进行交互。

仓库包括:

功能强大的 MCP 服务器,具有用户和消息的 REST 功能。

通过协议消耗这些资源的 MCP 客户端。

如何通过终端、REST API 或直接在 Cursor 中访问资源的实际示例。

可用资源

MCP 服务器提供以下功能:

用户资源

  • api://users列出系统中所有注册的用户
    • 返回 ID、姓名、电话号码和线程 ID 等信息
    • 格式:JSON
    • 答案示例 :
      {
        "content": [
          {
            "id": 1,
            "phoneNumber": "553496341404",
            "name": "Moisés Paschoalick",
            "threadId": "thread_bZEPVYVBvHxY9Ok6WqR63M2D"
          },
          {
            "id": 2,
            "phoneNumber": "553496338888",
            "name": "José Silva",
            "threadId": "1thread_t8SFjKio6yN9pppqypilwGoR__"
          },
          {
            "id": 3,
            "phoneNumber": "553496338889",
            "name": "Maria Antonia",
            "threadId": "1thread_t8SFjKio6yN9pppqypilwGoR__"
          }
        ],
        "pageable": {
          "pageNumber": 0,
          "pageSize": 12,
          "sort": {
            "empty": false,
            "sorted": true,
            "unsorted": false
          },
          "offset": 0,
          "paged": true,
          "unpaged": false
        },
        "last": true,
        "totalPages": 1,
        "totalElements": 3,
        "first": true,
        "size": 12,
        "number": 0,
        "sort": {
          "empty": false,
          "sorted": true,
          "unsorted": false
        },
        "numberOfElements": 3,
        "empty": false
      }
      

消息资源

  • hello://world返回简单的问候消息
    • 格式:texto plano(文本/纯文本)
    • Exemplo de resposta:“你好,世界!这是我的第一个MCP资源。”

Cursor 安装

首先,请确保您在系统上安装了光标并配置了npm。

选项1:通过终端安装

在终端中运行以下命令 :

npx -y @smithery/cli@latest install @wonderwhy-er/desktop-commander --client cursor --key dda23bec-caa6-4487-a1e9-eb74e22e33eb

注意:上面提到的关键只是为了示例,您需要添加自己的。

如果游标正在运行, 请重新启动 。

选项2:手动安装

将相应条目添加到您的 mcp.json 文件:

Mac/Linux:

没有Linux: ~/.config/cursor.json

{
  "mcpServers": {
    "desktop-commander": {
      "command": "npx",
      "args": [
        "-y",
        "@smithery/cli@latest",
        "run",
        "@wonderwhy-er/desktop-commander",
        "--key",
        "dda23bec-caa6-4487-a1e9-eb74e22e33eb"
      ]
    }
  }
}

窗户旁:

{
  "mcpServers": {
    "desktop-commander": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "@smithery/cli@latest",
        "run",
        "@wonderwhy-er/desktop-commander",
        "--key",
        "dda23bec-caa6-4487-a1e9-eb74e22e33eb"
      ]
    }
  }
}

如果游标正在运行, 请重新启动 。

选项 3:本地克隆

克隆和构建:

git clone https://github.com/moises-paschoalick/ai-agent-with-mcp.git
cd ai-agent-with-mcp
npm run setup

如果游标正在运行, 请重新启动 。

配置命令将 :

  • 安装依赖关系
  • 构建服务器
  • 配置光标
  • 必要时将 MCP 服务器添加到光标配置

如何使用

MCP 客户端

该项目包括一个MCP客户端,可用于访问可用资源:

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

async function main() {
  const client = new Client({
    name: "hello-mcp-client",
    version: "1.0.0"
  });
  const transport = new StdioClientTransport({
    command: "node",
    args: ["build/index.js"]
  });
  
  try {
    await client.connect(transport);
    
    // Listar recursos disponíveis
    const resources = await client.listResources();
    console.log("Recursos disponíveis:", resources);
    
    // Ler o recurso de usuários
    const content = await client.readResource({ uri: "api://users" });
    console.log("\nLista de Usuários:", content);
  } catch (error) {
    console.error("Erro ao executar o cliente:", error);
  }
}

main().catch(console.error);

API REST Direta

您也可以直接通过 REST API 访问资源:

# Listar todos os usuários
curl http://3.238.149.189:8080/users

安装和运行

# Instalar dependências
npm install

# Compilar o projeto
npm run build

# Executar o servidor
npm start

# Executar em modo de desenvolvimento
npm run dev

要求

  • Node.js(与 AbortController 兼容的版本)
  • TypeScript
  • @模型上下文协议/sdk