笔记管理服务器

一个与Evernote无缝集成的模型上下文协议服务器,使AI助手能够通过标准化接口创建、读取、更新和管理笔记及笔记本。

  • by SqREL
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 sqrel/evernote_mcp

使用说明

Evernote MCP服务器

一个模型上下文协议(MCP)服务器,与Evernote无缝集成,使AI助手能够通过标准化的界面创建、阅读、更新和管理笔记和笔记本电脑。

特性

  • 📝 创建笔记 -创建内容丰富的新笔记、标签和笔记本作业
  • 🔍 搜索笔记 -使用强大的查询功能搜索您的笔记
  • 📖 阅读笔记 -按ID检索特定笔记,有或没有内容
  • ✏️ 更新备注 -修改现有注释,包括标题、内容和标记
  • 📚 管理笔记本 -列出所有笔记本并创建新笔记本
  • 🏷️ 标签支持 -用标签组织笔记,以便更好地分类
  • 🔒 安全 -使用环境变量进行API密钥管理
  • ✅ 经过全面测试 -通过全面的测试套件实现100%的测试覆盖率

先决条件

安装

  1. 克隆存储库:
git clone https://github.com/yourusername/evernote-mcp-server.git
cd evernote-mcp-server
  1. 安装依赖项:
yarn install
# or
npm install
  1. 设置环境变量:
export EVERNOTE_API_KEY="your-evernote-api-key"
  1. 构建TypeScript代码:
yarn build

用法

启动服务器

使用stdio传输运行服务器:

yarn start

准备就绪后,服务器将输出“Evernote MCP服务器在stdio上运行”。

使用Claude Desktop进行配置

要将此MCP服务器与Claude Desktop一起使用,请将以下内容添加到您的Claude Desktop配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "evernote": {
      "command": "node",
      "args": ["/path/to/evernote-mcp-server/dist/index.js"],
      "env": {
        "EVERNOTE_API_KEY": "your-evernote-api-key"
      }
    }
  }
}

可用工具

1.create_note

在Evernote中创建新笔记。

参数:

  • title (必填):备注标题
  • content (必填):备注内容(支持HTML)
  • notebook (可选):应在其中创建笔记的笔记本GUID
  • tags (可选):标记名数组

例子:

{
  "title": "Meeting Notes",
  "content": "<p>Important points from today's meeting...</p>",
  "notebook": "notebook-guid-123",
  "tags": ["meetings", "important"]
}

2.搜索_注释

使用Evernote的搜索语法搜索笔记。

参数:

  • query (必填):搜索查询字符串
  • notebook (可选):将搜索限制到特定笔记本
  • limit (可选):最大结果数(默认值:10)

例子:

{
  "query": "project proposal",
  "notebook": "Work",
  "limit": 20
}

3.get_note

通过ID检索特定笔记。

参数:

  • noteId (必需):注意GUID
  • includeContent (可选):是否包含备注内容(默认:true)

例子:

{
  "noteId": "note-guid-456",
  "includeContent": true
}

4.update_note

更新现有注释。

参数:

  • noteId (必需):注意GUID
  • title (可选):新标题
  • content (可选):新内容
  • tags (可选):新标签(替换现有标签)

例子:

{
  "noteId": "note-guid-456",
  "title": "Updated Meeting Notes",
  "tags": ["meetings", "completed"]
}

5.list_notebooks

列出用户帐户中的所有笔记本。

参数: 无

退货: 带有id、名称和创建日期的笔记本数组。

6.创建笔记本

创建新笔记本。

参数:

  • name (必填):笔记本名称

例子:

{
  "name": "Project Ideas"
}

发展

项目结构

evernote-mcp-server/
├── src/
│   ├── index.ts           # Main server implementation
│   ├── index.test.ts      # Main test suite
│   └── index.apikey.test.ts # API key validation tests
├── dist/                  # Compiled JavaScript output
├── package.json          # Project dependencies and scripts
├── tsconfig.json         # TypeScript configuration
├── jest.config.js        # Jest testing configuration
├── CLAUDE.md            # Claude-specific documentation
└── README.md            # This file

运行测试

# Run main test suite
yarn test

# Run API key validation tests
yarn test:apikey

# Run all tests
yarn test:all

# Run tests with coverage report
yarn test:coverage

# Run tests in watch mode
yarn test:watch

建筑

# Build TypeScript to JavaScript
yarn build

Evernote API集成

此服务器使用Evernote API与笔记和笔记本进行交互。内容使用ENML(Evernote标记语言)格式化,由服务器自动处理。

ENML内容

在创建或更新笔记时,服务器会自动以适当的ENML格式包装内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>Your content here</en-note>

搜索语法

搜索功能支持Evernote的高级搜索语法:

  • intitle:keyword -在标题中搜索
  • notebook:"Notebook Name" -在特定笔记本中搜索
  • tag:tagname -按标签搜索
  • created:20230101 -按创建日期搜索
  • 将多个条件与空格组合(AND)或 any: 前缀(OR)

错误处理

服务器实现了全面的错误处理:

  • API密钥错误:未配置API键时返回清除错误
  • 网络错误:用描述性消息包装网络错误
  • 无效工具错误:返回未知工具名称的错误
  • API错误:正确转发Evernote API错误消息

所有错误均遵循MCP错误格式,并带有相应的错误代码。

安全考虑

  • 使用环境变量安全地存储Evernote API密钥
  • 永远不要将API密钥提交到版本控制
  • 使用 .env 本地开发文件(记得添加到 .gitignore)
  • 定期旋转API键
  • 通过Evernote开发者门户监控API的使用情况

故障排除

常见问题

  1. “Evernote API密钥未配置”

    • 确保 EVERNOTE_API_KEY 环境变量已设置
    • 检查密钥是否有效且未过期
  2. “404 Not Found”错误

    • 验证API端点URL是否正确
    • 检查您是否使用了正确的沙盒/生产环境
  3. “权限被拒绝”错误

    • 确保您的API密钥具有必要的权限
    • 查看Evernote开发者帐户的费率限制
  4. 连接超时

    • 检查您的互联网连接
    • 验证Evernote API服务状态

调试模式

要启用调试日志记录,请设置 DEBUG 环境变量:

DEBUG=* yarn start

贡献

欢迎投稿!请按照以下步骤操作:

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

开发指南

  • 为新功能编写测试
  • 保持100%的测试覆盖率
  • 遵循TypeScript的最佳实践
  • 更新API变更文档
  • 使用常规提交消息

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

致谢

支持

对于问题、疑问或贡献:

  • 在GitHub上打开一个问题
  • 在创建新问题之前检查现有问题
  • 为错误报告提供详细信息
  • 包括功能请求示例