Markdown笔记服务器

一个支持创建Markdown文件并发送至Discord的服务器,具备本地文件保存和任务管理功能。

  • by devonfox
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 devonfox/notes-mcp

使用说明

Markdown Notes MCP服务器

MCP(模型上下文协议)服务器,创建markdown文件并将其发送到Discord,支持本地文件保存和任务管理。

特性

  • 发送Markdown注释:创建markdown文件并将其作为文件附件发送到Discord
  • 任务管理:将任务添加到每周待办事项列表(本地文件或Discord)
  • 本地文件保存:除了Discord之外,还可以选择在本地保存文件
  • MCP协议:通过HTTP完全支持MCP协议
  • Docker支持:使用Docker轻松部署

需求

  • Node.js 18+(用于原生FormData和Blob支持)
  • Docker(可选,用于容器化部署)

设置

1.安装依赖项

npm install

2.创建Discord Webhook

  1. 转到您的Discord服务器
  2. 导航到要接收笔记的频道
  3. 点击频道设置(齿轮图标)
  4. 转到“集成”→ “Webhooks”
  5. 点击“新建Webhook”或“创建Webhook
  6. 给它起个名字(例如“AI Notes”)
  7. 复制webhook URL

3.配置环境变量

创建一个 .env 项目根目录中的文件(您可以从以下位置复制 .env.example):

cp .env.example .env

然后编辑 .env 并配置您的设置:

# Required: Discord webhook URL
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token

# Optional: Local file path to save markdown files
# If set, files will be saved to this directory in addition to being sent to Discord
LOCAL_FILE_PATH=/Users/yourname/Documents/notes

# Optional: Path to tasks.md file for weekly todo list
# If set, tasks will be appended to this file when running locally
# If not set, tasks will be sent to Discord with a timestamped filename
TASKS_FILE_PATH=/Users/yourname/Documents/tasks.md

或者将它们导出到您的shell中:

export DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token
export LOCAL_FILE_PATH=/Users/yourname/Documents/notes
export TASKS_FILE_PATH=/Users/yourname/Documents/tasks.md

4.建设项目

npm run build

用法

运行MCP服务器

服务器在HTTP(默认端口3000)上运行,并公开MCP协议端点。

npm start

发展:

npm run dev

服务器将于启动 http://localhost:3000 (或指定的端口 PORT 环境变量)。

连接MCP客户端

使用MCP端点连接到服务器:

  • MCP检查员: npx @modelcontextprotocol/inspector 并连接到 http://localhost:3000/mcp
  • 光标:使用URL添加MCP服务器 http://localhost:3000/mcp
  • ChatGPT:打开开发模式,并使用URL创建新连接器 http://localhost:3000/mcp
  • 克劳德桌面:使用URL在设置中配置 http://localhost:3000/mcp
  • VS Code:添加MCP服务器配置

API终点

GET /

API信息终结点。

GET /health

健康检查端点。

答复:

{
  "status": "ok"
}

POST /mcp

MCP协议端点。这是MCP客户端的主要端点。

MCP工具

服务器公开了两个工具:

1. send_markdown_to_discord

创建一个标记注释/文档,并将其作为文件附件发送给Discord。

何时使用: 一般注释、文档、摘要或任何应另存为markdown文件的内容。

参数:

  • prompt (必填):要转换为降价注释的内容
  • title (可选):标记注释的标题
  • webhookUrl (可选):Discord webhook URL。如果未提供,则使用 DISCORD_WEBHOOK_URL 从环境

行为:

  • 使用内容创建一个markdown文件
  • 作为文件附件发送到Discord
  • 如果 LOCAL_FILE_PATH 已设置,也将文件保存在本地

MCP客户端中的示例用法:

"Create a markdown note about today's meeting: We discussed the new feature..."
"Save this summary as a markdown file: [content]"

2. add_tasks

将任务或待办事项添加到每周待办事项列表中。

何时使用: 当你想添加任务、待办事项、行动项或清单项时。

参数:

  • items (必填):任务项数组。以空格或破折号开头的项目将被视为子任务并缩进。

行为:

  • 如果 TASKS_FILE_PATH 已设置(本地模式):

    • 读取现有 tasks.md 文件
    • 将新任务附加到底部
    • 将任务格式化为标记复选框(- [ ] task)
    • 子任务缩进2个空格
  • 如果 TASKS_FILE_PATH 未设置(远程模式):

    • 将任务作为文件附件发送到Discord
    • 文件名格式: tasks_to_add_YYYYMMDD_HHMMSS.md (UTC-8时间戳)

MCP客户端中的示例用法:

"Add these tasks to my todo list: Review the PR, Write documentation, Test the feature"
"Add these items to my checklist: [list items]"

运作原理

Markdown注释(send_markdown_to_discord)

  1. 接收内容和可选标题
  2. 格式为markdown(添加标题为 # Title 如果提供)
  3. 在内存中创建markdown文件
  4. 作为文件附件发送到Discord
  5. 如果满足以下条件,则可选择在本地保存 LOCAL_FILE_PATH 已配置

任务管理(add_tasks)

  1. 接收一系列任务项
  2. 格式化为标记复选框(- [ ] task)
  3. 检测子任务(带有前导空格/制表符的项目)并缩进它们
  4. 本地模式 (如果 TASKS_FILE_PATH 已设置):
    • 从文件中读取现有任务
    • 添加新任务
    • 写回文件
  5. 远程模式 (如果 TASKS_FILE_PATH 未设置):
    • 生成带时间戳的文件名(UTC-8)
    • 作为文件附件发送到Discord

环境变量

变量 必填 描述
DISCORD_WEBHOOK_URL 是 取消发送文件的webhook URL
PORT 无 服务器端口(默认值:3000)
LOCAL_FILE_PATH 否 本地保存markdown文件的目录路径
TASKS_FILE_PATH 否 用于本地任务管理的tasks.md文件的完整路径

Docker部署

使用Docker Compose(推荐)

  1. 创建一个 .env 配置文件(见上文)

  2. 使用Docker Compose构建和运行:

docker-compose up -d
  1. 查看日志:
docker-compose logs -f
  1. 停止容器:
docker-compose down

直接使用Docker

  1. 构建Docker镜像:
docker build -t discord-markdown-notes-mcp .
  1. 运行容器:
docker run -it --rm \
  -e DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token \
  -e LOCAL_FILE_PATH=/app/notes \
  -e TASKS_FILE_PATH=/app/tasks.md \
  -p 3000:3000 \
  discord-markdown-notes-mcp

或者使用 .env 文件:

docker run -it --rm \
  --env-file .env \
  -p 3000:3000 \
  discord-markdown-notes-mcp

Docker笔记

  • HTTP服务器在容器内的端口3000上运行
  • 端口3000已暴露并映射到您的主机
  • 环境变量可以通过以下方式传递 -e 旗帜, --env-file,或在 docker-compose.yml
  • 容器从以下位置运行构建的TypeScript代码 dist 目录
  • 您可以访问服务器 http://localhost:3000 使用Docker运行时

示例用法

使用MCP客户端(推荐)

当通过Cursor或Claude Desktop等MCP客户端连接时,您可以使用自然语言:

关于降价备注:

  • “创建关于今天会议的标记注释”
  • “将此摘要另存为markdown文件”
  • “将此文档发送到Discord”

对于任务:

  • “将这些任务添加到我的待办事项列表中:[list tasks]”
  • “将这些项目添加到我的清单中:[列出项目]”
  • “添加这些操作项:[列表项]”

使用curl(用于测试)

# Send a markdown note
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "send_markdown_to_discord",
      "arguments": {
        "prompt": "This is a test note with **markdown** formatting.",
        "title": "Test Note"
      }
    },
    "id": 1
  }'

# Add tasks
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "add_tasks",
      "arguments": {
        "items": ["Review PR", "Write docs", "Test feature"]
      }
    },
    "id": 2
  }'

发展

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run in development mode
npm run dev

许可证

ISC