AI对话笔记管理服务

一个MCP服务器,用于将AI对话转化为结构化、可搜索的笔记、书签和提醒。

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

使用说明

Nemo-MCP服务器

将您的AI对话转化为结构化、可搜索的笔记。

一 MCP(模型上下文协议) 该服务器允许您直接从Claude、ChatGPT或任何兼容MCP的AI助手保存笔记、对话摘要、想法、代码片段、书签和提醒。

免责声明

该项目是实验性的,尚未准备好投入生产使用。

MCP端点尚未得到保护:身份验证和授权尚未实现,因此默认情况下访问不受保护。不要按原样公开此服务器。

在将其用于生产环境之前,您至少应该在HTTP端点周围添加身份验证、访问控制、适当的秘密管理、速率限制和基本的安全强化。

仓库的规划

  • src/ --运行时服务器代码
  • db/ --公共数据库模式和迁移
  • docs/ --面向产品的公共文档
  • notes/ --公共工程进展笔记、模型和实验

它做什么

你正在用手机和克劳德聊天,谈话很精彩。而不是失去它,你说:

“将此保存在DevOps下的Nemo中,标记为docker和kubernetes”

Claude调用您的MCP服务器,稍后您的笔记将被存储、分类和搜索。

可用工具

工具 说明
nemo_save_note 保存对话、想法、片段或笔记
nemo_search_notes 搜索您保存的笔记
nemo_get_note 按ID检索特定钞票
nemo_delete_note 删除注释
nemo_list_categories 列出所有有计数的类别
nemo_add_reminder 添加带有截止日期和优先级的提醒
nemo_list_reminders 列出待处理(或所有)提醒
nemo_complete_reminder 将提醒标记为已完成
nemo_save_bookmark 保存带有标签和描述的URL
nemo_search_bookmarks 搜索已保存的书签
nemo_list_bookmarks 按类别列出书签
nemo_stats 带有计数和类别的仪表板

两种部署选项

选项A:Supabase(推荐)

如果你想要一个带有免费层的托管数据库,那么最好是为未来的应用程序(Flutter、web)提供REST API,并且零数据库维护。

Your Phone → Claude App → Your VPS (MCP Server) → Supabase Cloud (PostgreSQL)

选项B:自托管(Docker)

如果你想要完全的数据所有权,一切都在你的VPS上,没有外部依赖关系,那就最好了。

Your Phone → Claude App → Your VPS (Docker: MCP Server + PostgreSQL)

搜索语言

默认情况下,注释的全文搜索配置为法语。

如果你的大部分笔记都是另一种语言的,请更新文本搜索配置,使其与你的目标语言相匹配 db/schema.sql, db/migrations/003_add_notes_search_vector.sql, src/services/supabase-adapter.ts,以及 src/services/postgres-adapter.ts.


快速入门--选项A:Supabase

1.创建一个Supabase项目

  1. 首选 网站 supabase.com 并创建一个免费项目
  2. 首选 SQL编辑器 并运行以下内容 db/schema.sql
  3. 首选 设置→ API 并复制您的:
    • 项目URL(例如。, https://abc123.supabase.co)
    • 服务角色密钥(保密!)

2.在您的VPS上部署

# Clone the repo
git clone https://github.com/gabriellangon/nemo-mcp.git
cd nemo-mcp

# Install dependencies
npm install

# Build
npm run build

# Configure
cp .env.example .env
# Edit .env with your Supabase credentials:
#   STORAGE_TYPE=supabase
#   SUPABASE_URL=https://your-project.supabase.co
#   SUPABASE_SERVICE_KEY=your-service-role-key

# Test it
node dist/index.js
# Should see: Nemo MCP server running on http://0.0.0.0:3100/mcp

3.保持pm2运行

npm install -g pm2
pm2 start dist/index.js --name nemo-mcp
pm2 save
pm2 startup  # Auto-start on reboot

4.使用Nginx设置HTTPS

# Install certbot if not already done
sudo apt install certbot python3-certbot-nginx

# Get SSL certificate
sudo certbot --nginx -d nemo.yourdomain.com

# Copy nginx config
sudo cp nginx.conf /etc/nginx/sites-available/nemo-mcp
# Edit the domain name in the file
sudo ln -s /etc/nginx/sites-available/nemo-mcp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

快速入门——选项B:自托管(Docker)

# Clone the repo
git clone https://github.com/gabriellangon/nemo-mcp.git
cd nemo-mcp

# Configure
cp .env.example .env
# Edit .env:
#   STORAGE_TYPE=postgres
#   DB_PASSWORD=your-secure-password

# Launch everything
docker compose up -d

# Check logs
docker compose logs -f mcp

然后按照选项A的方式设置nginx+HTTPS。


联系克劳德

Claude.ai(网络和移动)

  1. 首选 设置→ 集成→ MCP
  2. 添加新集成:
    • 统一资源定位符: https://nemo.yourdomain.com/mcp
  3. 开始聊天,说以下话:
    • “将此对话保存在我的大脑中的‘devops’类别下”
    • “我为Docker节省了什么?”
    • “添加下周五的提醒以查看PR”
    • “将此链接加入书签:https://..."

克劳德桌面(本地)

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "nemo": {
      "command": "node",
      "args": ["/path/to/nemo-mcp/dist/index.js"],
      "env": {
        "TRANSPORT": "stdio",
        "STORAGE_TYPE": "supabase",
        "SUPABASE_URL": "https://your-project.supabase.co",
        "SUPABASE_SERVICE_KEY": "your-service-role-key"
      }
    }
  }
}

Webhooks——连接到制造,Zapier,n8n

每当有事情发生时,Nemo都可以向外部服务发送事件。这使您可以构建以下自动化:

  • 保存到Notion --每个新笔记都会在您的Notion数据库中创建一个页面
  • Google 日历 --新提醒会自动创建日历事件
  • 松弛通知 --保存重要内容时被ping到
  • 谷歌表格 --将所有书签记录到电子表格中
  • 电子邮件摘要 --通过n8n触发每日摘要

使用Make快速设置

  1. 在Make中,使用 网络钩子 触发
  2. 复制webhook URL(例如。 https://hook.eu2.make.com/abc123...)
  3. 将其添加到您的 .env:
    WEBHOOK_URL=https://hook.eu2.make.com/abc123...
    
  4. 重新启动MCP服务器
  5. 现在,每次你通过克劳德保存东西时,Make都会收到事件

Webhook事件

事件 触发时间 包含数据
note.saved 已保存新笔记 id、标题、类别、标签、content_preview、来源
note.deleted 注释已删除 id
reminder.created 新增提醒 id、标题、到期日期、优先级、描述
reminder.completed 标记为已完成的提醒 id
bookmark.saved 已保存新书签 id、url、标题、标签、类别、描述

负载格式

每个webhook都会收到一个具有以下结构的JSON POST:

{
  "event": "note.saved",
  "timestamp": "2025-03-15T14:30:00.000Z",
  "data": {
    "id": "uuid-here",
    "title": "Docker multi-stage builds",
    "category": "devops",
    "tags": ["docker", "ci-cd"],
    "content_preview": "First 300 characters...",
    "source": "claude-chat"
  }
}

多个Webhooks

您可以将不同的事件发送到不同的服务:

WEBHOOKS_JSON='[
  {
    "url": "https://hook.eu2.make.com/xxx",
    "events": ["note.saved", "bookmark.saved"],
    "name": "Make - Notion sync"
  },
  {
    "url": "https://hooks.zapier.com/yyy",
    "events": ["reminder.created"],
    "name": "Zapier - Google Calendar"
  },
  {
    "url": "https://n8n.yourdomain.com/webhook/zzz",
    "events": ["*"],
    "name": "n8n - Log everything"
  }
]'

安全

添加用于HMAC签名验证的共享密钥:

WEBHOOK_SECRET=your-secret-here

每个请求都包含一个 X-Nemo-Signature 带有a的标题 sha256= 有效载荷主体的HMAC。在自动化中验证这一点,以确保请求来自您的Nemo服务器。


未来想法

  • Flutter应用程序 浏览您的笔记(直接连接到Supabase)
  • 向量搜索 使用pgvector进行语义“查找与…相似的内容”
  • 图像存储 通过Supabase存储
  • 出口 转Markdown/黑曜石
  • 每日摘要 通过电子邮件发送提醒

发展

# Install dependencies
npm install

# Development mode (auto-reload)
npm run dev

# Build for production
npm run build

# Run tests (coming soon)
npm test

许可证

麻省理工学院——使用它,分叉它,让它成为你的。