yinxiang-mcp

yinxiang-mcp

非官方印象笔记MCP服务器,支持笔记本、原生超级笔记、原始ENML和资源附件操作。

Category
访问服务器

README

yinxiang-mcp

非官方印象笔记(Yinxiang / Evernote China)MCP Server。通过 stdio 暴露笔记本、原生超级笔记、原始 ENML 和资源附件相关操作。

本项目不是印象笔记或 Evernote 官方项目,也不代表官方背书。

安装

npx -y @yanghechuan/yinxiang-mcp

建议锁定版本:

npx -y @yanghechuan/yinxiang-mcp@0.7.0

认证

当前版本使用 Direct Token 认证,暂未实现 OAuth。

需要配置两个环境变量:

  • YINXIANG_DEV_TOKEN:在 https://dev.yinxiang.com 申请的 Developer Token
  • YINXIANG_NOTESTORE_URL:NoteStore URL,例如 https://app.yinxiang.com/shard/sXX/notestore

MCP 配置

{
  "mcpServers": {
    "yinxiang": {
      "command": "npx",
      "args": ["-y", "@yanghechuan/yinxiang-mcp@0.7.0"],
      "env": {
        "YINXIANG_DEV_TOKEN": "<your-token>",
        "YINXIANG_NOTESTORE_URL": "https://app.yinxiang.com/shard/sXX/notestore"
      }
    }
  }
}

工具列表

笔记本与笔记本组

  • list-notebooks:列出笔记本,包含 guidstack、默认笔记本标记和更新元数据。
  • get-notebook:按 guid 读取单个笔记本元数据。
  • create-notebook:创建笔记本,可选加入笔记本组。
  • update-notebook:重命名笔记本或更新所属笔记本组,需要 confirm=true
  • delete-notebook:删除笔记本,需要 confirm=trueconfirmGuid === guid;非空笔记本还需要 force=true
  • list-stacks:从笔记本的 stack 字段反推笔记本组列表。
  • create-stack:通过把一个已有笔记本放入 stack 来创建笔记本组,需要 confirm=true
  • rename-stack:批量更新组内笔记本的 stack 字段来重命名笔记本组,需要 confirm=true
  • delete-stack:清空组内笔记本的 stack 字段来删除笔记本组,不删除笔记本,需要 confirm=true
  • move-notebook-to-stack:将单个笔记本移入指定笔记本组,需要 confirm=true
  • remove-notebook-from-stack:将单个笔记本移出当前笔记本组,需要 confirm=true

笔记

  • find-notes:按 Evernote 搜索语法和/或笔记本 GUID 搜索笔记元数据。
  • get-note-raw:读取原始 ENML、笔记本 GUID、标签和属性,不经过 Markdown 转换。
  • create-super-note:使用原生块模型创建印象笔记超级笔记。
  • update-super-note:使用原生块模型覆盖笔记正文,需要 confirm=true
  • append-super-note-blocks:保留已有 ENML,在末尾追加原生块,需要 confirm=true
  • replace-super-note-block:按 blockId 替换一个原生块,需要 confirm=true
  • delete-super-note-block:按 blockId 删除一个原生块,需要 confirm=true
  • replace-note-enml:用完整 ENML 或 en-note 内部 body 直接覆盖正文,需要 confirm=true
  • clone-note:原样克隆 ENML 正文和笔记元数据,不经过 Markdown 转换。
  • attach-file:将本地文件追加为 Evernote Resource,并在正文追加匹配的 <en-media>,需要 confirm=true
  • export-note-resource:按 resourceGuid 或 MD5 hash 导出单个资源。
  • delete-note-resource:按 resourceGuid 或 MD5 hash 删除单个资源和匹配的 <en-media>,需要 confirm=true
  • move-note:移动笔记到另一个笔记本,不修改标题和正文,需要 confirm=true
  • clear-note-content:清空笔记正文,保留标题和所在笔记本,需要 confirm=true
  • delete-note:将笔记移入废纸篓,需要 confirm=true
  • expunge-note:永久删除笔记,需要 confirm=trueconfirmGuid === guid

原生块模型

create-super-noteupdate-super-noteappend-super-note-blocks 接收 blocks 数组。字符串会被当作普通段落;对象示例:

[
  {
    "type": "heading",
    "level": 2,
    "id": "stable-block-id",
    "runs": [
      { "text": "蓝色加粗标题", "bold": true, "color": "#1677ff" }
    ]
  },
  {
    "type": "paragraph",
    "runs": [
      { "text": "普通文字 " },
      { "text": "红色加粗", "bold": true, "color": "#d4380d" },
      { "text": " 大号文字", "fontSize": 22 },
      { "text": " 链接", "href": "https://example.com?a=1&b=2" }
    ]
  },
  {
    "type": "todo",
    "checked": false,
    "runs": [{ "text": "待办事项" }]
  },
  {
    "type": "table",
    "id": "table-1",
    "header": true,
    "rows": [
      [{ "text": "名称" }, { "text": "状态" }],
      [{ "text": "任务 A" }, { "text": "完成", "color": "#52c41a" }]
    ]
  }
]

支持的块类型:headingparagraphblockquotecodedividertodobulleted_listnumbered_listtable

支持的文字样式:bolditalicunderlinestrikecodecolorbackgroundColorfontSizehref

颜色必须使用 #RRGGBBfontSize 必须是 8 到 72 的整数。正文默认字号为 16px。标题默认使用客户端标题层级,只有显式传入 fontSize 时才覆盖标题内部文字。

表格块必须提供稳定 id,便于后续用 replace-super-note-blockdelete-super-note-block 编辑/删除整张表。

文件资源

attach-file 会读取本地文件、计算 MD5、创建 Evernote Resource,并在正文中追加匹配的 <en-media>。MIME 会根据扩展名自动推断,也可以显式传入。

{
  "guid": "note-guid",
  "filePath": "/tmp/demo.png",
  "fileName": "demo.png",
  "confirm": true
}

资源可以通过 resourceGuid 或 MD5 hash 导出和删除。

本地开发

npm install
cp .env.example .env
npm test
npm run verify
npm start

npm run verify 是只读验证:它会通过列出笔记本来验证 token 和 NoteStore URL 是否可用。

发布

npm test
npm pack --dry-run
npm publish --access public

发布前必须确认 npm tarball 中不包含 .env、真实 token、日志或私人笔记内容。

限制

  • 使用 evernote@2.0.5,底层是较旧的 EDAM API。
  • Evernote/印象笔记的笔记本组不是独立实体,本项目通过笔记本的 stack 字段实现组管理。
  • 原生超级笔记工具不经过 Markdown 中转,适合保留加粗、颜色、链接、待办、表格等富文本样式。
  • Markdown 兼容函数仍保留在内部,但不作为 MCP 工具暴露,避免误用导致富文本样式丢失。
  • 资源工具支持本地图片、音频和通用附件,可按单资源导出和删除。
  • 可折叠标题依赖印象笔记超级笔记的 other-props.blockIdyinxiang.superNoteyinxiang.noteLayout 标记;旧客户端可能只显示普通标题样式。

安全

不要提交真实 Developer Token、绑定私人账号的 NoteStore URL、请求日志或导出的笔记内容。更多说明见 SECURITY.md

开源协议

本项目使用 MIT License。完整协议内容见 LICENSE

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选