Omnigraph
그래프 엔진으로 컨텍스트를 조립하고, 객체 저장소 기반에서 에이전트가 코드처럼 그래프 데이터를 분기·타입·검토·병합·감사·거버넌스합니다
Datanotes가 마크다운 노트 폴더를 타입별 데이터베이스 테이블로 전환해 사용 및 에이전트가 활용하도록 합니다
Datanotes runs your vault, a folder of Markdown notes, as typed database tables for you and your agents.
데이터TypeScript · JavaScriptGitHub @davidefornelli온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Engine that runs a folder of Markdown notes as typed, validated database tables, with an HTTP API and an MCP server for AI agents.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Datanotes is the open-source database engine for Markdown: it runs a folder of notes as typed, validated tables that your programs and AI agents query, write and undo over MCP or HTTP, while every row stays a plain file you own.
Documentation: datanotes.dev
undo_migration takes any change back.datanotes extension install).Datanotes keeps every row as a file, so it isn't a replacement for SQLite or Postgres. Choose a classic database for:
Datanotes is comfortable at 10,000 notes. At 50,000 notes, the engine takes about 15 seconds for its first start, and 2 to 3 seconds to restart.
You need Node.js 22 or newer. On Windows, use Node.js 24.16 or newer, or 26.1 or newer.
Start the engine on a folder, which becomes your database. It can be empty, or hold notes already:
npx -y datanotes serve --database your_database_folder
Run Datanotes on your notes walks you through your first table.
Agents reach the engine through its Model Context Protocol (MCP) server, datanotes mcp. It uses the engine that runs on the folder, or starts one. Every client runs the same command:
npx -y datanotes mcp --database your_database_folder
claude mcp add datanotes -- \
npx -y datanotes mcp --database your_database_folder
Add the server to claude_desktop_config.json:
{
"mcpServers": {
"datanotes": {
"command": "npx",
"args": [
"-y", "datanotes", "mcp", "--database", "your_database_folder"
]
}
}
}
Add the server to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json:
{
"mcpServers": {
"datanotes": {
"command": "npx",
"args": [
"-y", "datanotes", "mcp", "--database", "your_database_folder"
]
}
}
}
Add the server to .vscode/mcp.json in your workspace:
{
"servers": {
"datanotes": {
"type": "stdio",
"command": "npx",
"args": [
"-y", "datanotes", "mcp", "--database", "your_database_folder"
]
}
}
}
Add the server to ~/.codex/config.toml:
[mcp_servers.datanotes]
command = "npx"
args = ["-y", "datanotes", "mcp", "--database", "your_database_folder"]
On Windows, clients start npx through cmd /c. For Claude Code, outside Windows Subsystem for Linux (WSL):
claude mcp add datanotes -- cmd /c npx -y datanotes mcp --database C:\Notes
In a JSON file, the command is cmd and the backslashes are escaped:
{
"mcpServers": {
"datanotes": {
"command": "cmd",
"args": [
"/c", "npx", "-y", "datanotes", "mcp", "--database", "C:\\Notes"
]
}
}
}
Connect your agents covers HTTP transport and named tokens.
Install the package with npm install datanotes. This script finds the engine on your folder, creates a table and queries it:
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);
Each film is now a note, main/public/film/Nosferatu.md, with the values in its front matter. The JavaScript client page covers the rest of the client.
Apache License 2.0: see LICENSE and NOTICE. Copyright 2026 Davide Fornelli.