yinxiang-mcp
非官方印象笔记MCP服务器,支持笔记本、原生超级笔记、原始ENML和资源附件操作。
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 TokenYINXIANG_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:列出笔记本,包含guid、stack、默认笔记本标记和更新元数据。get-notebook:按guid读取单个笔记本元数据。create-notebook:创建笔记本,可选加入笔记本组。update-notebook:重命名笔记本或更新所属笔记本组,需要confirm=true。delete-notebook:删除笔记本,需要confirm=true且confirmGuid === 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或 MD5hash导出单个资源。delete-note-resource:按resourceGuid或 MD5hash删除单个资源和匹配的<en-media>,需要confirm=true。move-note:移动笔记到另一个笔记本,不修改标题和正文,需要confirm=true。clear-note-content:清空笔记正文,保留标题和所在笔记本,需要confirm=true。delete-note:将笔记移入废纸篓,需要confirm=true。expunge-note:永久删除笔记,需要confirm=true且confirmGuid === guid。
原生块模型
create-super-note、update-super-note 和 append-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" }]
]
}
]
支持的块类型:heading、paragraph、blockquote、code、divider、todo、bulleted_list、numbered_list、table。
支持的文字样式:bold、italic、underline、strike、code、color、backgroundColor、fontSize、href。
颜色必须使用 #RRGGBB;fontSize 必须是 8 到 72 的整数。正文默认字号为 16px。标题默认使用客户端标题层级,只有显式传入 fontSize 时才覆盖标题内部文字。
表格块必须提供稳定 id,便于后续用 replace-super-note-block 或 delete-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.blockId、yinxiang.superNote与yinxiang.noteLayout标记;旧客户端可能只显示普通标题样式。
安全
不要提交真实 Developer Token、绑定私人账号的 NoteStore URL、请求日志或导出的笔记内容。更多说明见 SECURITY.md。
开源协议
本项目使用 MIT License。完整协议内容见 LICENSE。
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.