mcpField
D
Datanotes

Datanotes

本地服务
datanotes.dev数据库03 天前更新

关于 Datanotes

Datanotes 是面向以 Markdown 笔记管理结构化数据的用户和 Agent 的开源数据库引擎。它在保留每行可编辑文件的同时验证类型化表格,并记录变更以供撤销。

主要功能

  1. 01将 Markdown 笔记作为类型化表格
  2. 02验证类型、链接、唯一值和检查约束
  3. 03将每行保留为可编辑的纯文件
  4. 04记录写入并撤销变更
  5. 05从 Git 仓库安装固定版本扩展

适用场景

  1. 01查询或更新结构化 Markdown 笔记
  2. 02校验 Agent 写入的数据
  3. 03撤销已记录的变更
  4. 04通过扩展添加表格和 MCP 工具

MCP 相关

`datanotes mcp` 服务允许 MCP 客户端通过运行于笔记文件夹上的引擎查询和写入数据,也可为该文件夹启动引擎。它还支持 HTTP 访问。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"davidefornelli-datanotes": {
"command": "npx",
"args": [
"-y",
"datanotes"
]
}
}
}
启动命令npx -y datanotes

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmdatanotes3.0.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Datanotes

Datanotes 是一款面向 Markdown 的开源数据库引擎:它会将一个笔记文件夹作为带类型且经过验证的表运行,让你的程序和 AI Agent 通过 MCP 或 HTTP 查询、写入和撤销数据,同时每一行仍是由你掌控的普通文件。

npm version CI License: Apache-2.0

文档:datanotes.dev

为什么选择 Datanotes

  • Agent 无法写入垃圾数据。 每次写入都会根据所属表进行检查:类型、链接、唯一值和 CHECK 约束。被拒绝的写入不会造成任何更改。响应会说明哪个值违反了哪条规则,以及如何修复。
  • 每项更改都可以撤销。 引擎会记录自己执行的每次写入,并记录操作人:Agent、会话及其令牌。undo_migration 可以撤销任何更改。
  • 它仍然只是 Markdown。 一行可以是一条笔记,也可以是一个组合笔记中的一个章节;其 front matter 键就是列。你可以阅读、编辑、grep 或将其提交到 Git。引擎也会读取并检查你手动编辑的内容。
  • 扩展。 从 Git 仓库安装表和 MCP 工具,并固定版本且确认后再安装(datanotes extension install)。
  • 本地优先。 Datanotes 采用 Apache-2.0 许可,可在你的机器上运行。除非你启用相关功能,否则不会有任何内容离开本机。

不适用场景

Datanotes 会将每一行保存为一个文件,因此不能替代 SQLite 或 Postgres。以下场景应选择传统数据库:

  • 大型分析数据集
  • 高写入吞吐量
  • 多个写入者同时操作同一个文件夹

Datanotes 适用于 10,000 条笔记。在 50,000 条笔记时,引擎首次启动约需 15 秒,重启需 2 到 3 秒。

快速开始

你需要 Node.js 22 或更高版本。在 Windows 上,请使用 Node.js 24.16 或更高版本,或 26.1 或更高版本。

在一个文件夹上启动引擎,该文件夹将成为你的数据库。文件夹可以为空,也可以已经包含笔记:

npx -y datanotes serve --database your_database_folder

在你的笔记上运行 Datanotes 将引导你创建第一个表。

连接你的 Agent

Agent 通过其 Model Context Protocol(MCP)服务 datanotes mcp 访问引擎。该服务会使用在文件夹上运行的引擎,或启动一个引擎。所有客户端都运行相同的命令:

npx -y datanotes mcp --database your_database_folder
Claude Code
claude mcp add datanotes -- \
  npx -y datanotes mcp --database your_database_folder
Claude Desktop

将服务添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "datanotes": {
      "command": "npx",
      "args": [
        "-y", "datanotes", "mcp", "--database", "your_database_folder"
      ]
    }
  }
}
Cursor

将服务添加到项目中的 .cursor/mcp.json,或添加到 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "datanotes": {
      "command": "npx",
      "args": [
        "-y", "datanotes", "mcp", "--database", "your_database_folder"
      ]
    }
  }
}
VS Code

将服务添加到工作区中的 .vscode/mcp.json:

{
  "servers": {
    "datanotes": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y", "datanotes", "mcp", "--database", "your_database_folder"
      ]
    }
  }
}
Codex

将服务添加到 ~/.codex/config.toml:

[mcp_servers.datanotes]
command = "npx"
args = ["-y", "datanotes", "mcp", "--database", "your_database_folder"]
Windows

在 Windows 上,客户端会通过 cmd /c 启动 npx。对于 Claude Code,在 Windows Subsystem for Linux(WSL)以外的环境中:

claude mcp add datanotes -- cmd /c npx -y datanotes mcp --database C:\Notes

在 JSON 文件中,命令为 cmd,反斜杠需要转义:

{
  "mcpServers": {
    "datanotes": {
      "command": "cmd",
      "args": [
        "/c", "npx", "-y", "datanotes", "mcp", "--database", "C:\\Notes"
      ]
    }
  }
}

连接你的 Agent 介绍了 HTTP 传输和命名令牌。

在 TypeScript 中使用

使用 npm install datanotes 安装软件包。此脚本会在你的文件夹上查找引擎,创建一个表并查询数据:

import { DatanotesClient } from "datanotes/client";
import { localEngine } from "datanotes/local";

const engine = localEngine("your_database_folder");
if (!engine) throw new Error("Start the engine on the folder first");
const db = new DatanotesClient({ url: engine.url, token: engine.token });

const created = await db.call("create_table", {
  name: "film",
  description: "Classic films I watched or want to watch",
  filename: "{title}",
  columns: [
    {
      name: "title",
      type: "string",
      required: true,
      unique: true,
      description: "The film's title, as on its poster",
    },
    {
      name: "minutes",
      type: "integer",
      min: 1,
      description: "Running time in minutes",
    },
  ],
});
if (!created.ok) throw new Error(String(created.value));

await db.call("insert_row", {
  table: "film",
  values: { title: "Nosferatu", minutes: 94 },
});

// Refused: nothing is written, and the answer explains why
const bad = await db.call("insert_row", {
  table: "film",
  values: { title: "Metropolis", minutes: 0 },
});
if (!bad.ok) console.log(bad.value);

const films = await db.call("select_rows", {
  table: "film",
  where: { minutes: { gt: 90 } },
});
console.log(films.value);

现在,每部电影都是一条笔记,位于 main/public/film/Nosferatu.md,其值保存在 front matter 中。JavaScript 客户端页面介绍了客户端的其他内容。

了解更多

许可证

Apache License 2.0:请参阅 LICENSE 和 NOTICE。版权所有 2026 Davide Fornelli。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。