项目简介

该项目是一个基于 Model Context Protocol (MCP) 的后端服务,旨在以标准化的方式为大型语言模型(LLM)客户端提供上下文信息和功能。它核心功能是托管和管理粘滞便笺数据,并提供工具供LLM调用,实现便笺的添加、删除、查看和列表展示。服务器支持将便笺存储在Azure Table Storage或内存中,并能生成便笺的PNG视觉渲染图。

主要功能点

  • 便笺管理: 支持添加、删除、获取和列出粘滞便笺。
  • 分类与颜色: 便笺可以按逻辑键(如“工作”、“个人”、“想法”)进行分组和颜色编码。
  • 视觉渲染: 能够为单个便笺和整个便笺板生成精美的PNG图像,提供丰富的视觉上下文。
  • 持久化存储: 支持Azure Table Storage作为主要存储,并提供内存存储作为备用方案。
  • 多种传输协议: 支持HTTP和STDIO两种传输协议与MCP客户端通信。
  • 日志控制: 提供MCP工具来控制服务器日志级别。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/microsoft/mcp-sticky-notes.git
    cd mcp-sticky-notes
  2. 安装依赖:
    npm install
  3. 构建 (可选): 如果您计划在生产环境或没有TypeScript运行时的环境中使用,可以运行构建命令:
    npm run build

服务器配置

MCP客户端需要配置服务器信息才能连接。以下是一个示例JSON配置,您需要根据实际服务器启动方式调整。

MCP客户端配置示例:

{
  "servers": {
    "mcp-sticky-notes": {
      // 方式一:如果服务器以 HTTP 模式运行,客户端配置如下:
      "url": "http://localhost:3000/mcp?userId=your_unique_user_id"
      // URL参数 'userId' 是可选的,用于持久化您的便笺数据。
      // 如果不提供,服务器会自动生成一个临时的用户ID。
      // 您可以将 'your_unique_user_id' 替换为任何您想用于识别用户的字符串。

      // 方式二:如果服务器以 STDIO 模式运行,客户端配置如下:
      // "command": "npx",
      // "args": ["ts-node", "server.ts"],
      // "env": { "TRANSPORT_TYPE": "stdio", "MCP_USER_ID": "your_unique_user_id" }
      // 'MCP_USER_ID' 环境变量是可选的,用于在STDIO模式下持久化用户便笺。
      // 如果您已运行 'npm run build',可以使用编译后的JavaScript文件:
      // "command": "node",
      // "args": ["dist/server.js"],
      // "env": { "TRANSPORT_TYPE": "stdio", "MCP_USER_ID": "your_unique_user_id" }
    }
  }
}

启动服务器命令示例 (在项目根目录下运行):

  • HTTP 模式:

    npx ts-node server.ts

    服务器将在 'http://localhost:3000' 响应。您可以通过设置 'PORT' 和 'HOST' 环境变量来改变监听地址和端口,例如:'PORT=8080 HOST=127.0.0.1 npx ts-node server.ts'。

  • STDIO 模式:

    TRANSPORT_TYPE=stdio npx ts-node server.ts

    (在生产环境中,通常会先 'npm run build' 生成 'dist/server.js',然后用 'node dist/server.js' 启动,配合环境变量 'TRANSPORT_TYPE=stdio'。)

基本使用方法

MCP客户端连接到此服务器后,LLM可以通过调用服务器暴露的工具与其交互。这些工具允许LLM管理和获取粘滞便笺信息:

  • 'addNote(text: string, key?: string)': 添加一个新的粘滞便笺。'text'是便笺内容,'key'是可选的分类名称(如"work"、"personal"、"ideas"),用于分组和生成不同颜色的便笺。
  • 'removeNote(key: string)': 根据便笺的'key'删除便笺。
  • 'getNote(key?: string)': 根据'key'获取并查看一个或一组便笺的详细内容和视觉图像。
  • 'listNotes()': 列出所有粘滞便笺,并展示所有便笺组成的便笺板视觉图像。
  • 'clearNotes()': 清除所有粘滞便笺(此操作不可逆,请谨慎使用)。
  • 'logging/setLevel(level: string)': 设置服务器的日志输出级别(例如:"info", "debug", "error", "warn", "trace", "off")。
  • 'logging/getLevel()': 获取当前服务器的日志级别。

LLM客户端会根据用户的指令,智能地选择并调用这些工具来完成任务,例如:“给我添加一个名为‘购物清单’的便笺,内容是‘牛奶、鸡蛋、面包’。”或者“显示我所有的工作便笺。”

信息

分类

AI与计算