Yoschanin Sasiwat9 downloadsServe your notes to AI agents over MCP as Open Knowledge Format bundles, with provenance, trust and freshness.
Serve your Obsidian notes to AI agents over MCP as Open Knowledge Format bundles, with provenance, trust and freshness.
Read the usage guide »
Report Bug
·
Request Feature
OKF Wiki serves folders of your vault to AI agents over MCP as Open Knowledge Format (OKF) v0.2 bundles: plain Markdown with YAML frontmatter that records where knowledge came from, who checked it and when it goes stale. Agents read, search and write through OKF-aware tools; you stay in charge of what counts as reviewed.
Here's why:
Desktop only. Status: 0.6.3, early.
log.md and an audit logstatus or verified changed outside the plugin are reported as not attestedokf CLI: lint any OKF bundle in CI127.0.0.1 (port 27150 by default, changeable in the
settings). It listens on the loopback interface only, so other machines cannot reach it. It
starts only once you create an access token.fs module for one thing only: resolving a file's real path (realpath), so
that a symlink inside a bundle cannot expose files outside the vault or in its configuration
folder. It reads and writes notes only through Obsidian's vault API.*
*
*
*
*
*
main.js, manifest.json and styles.css from the
latest release into
<vault>/.obsidian/plugins/okf-wiki/, then enable the plugin.git clone https://github.com/ysasiwat/obsidian-okf-wiki.git
cd obsidian-okf-wiki
npm ci
npm run build
node scripts/install-plugin.mjs <path-to-vault>
In the plugin settings under Bundles, add a folder to serve. Any folder works; it becomes an
OKF bundle (an index.md, a log.md and optionally a .okf.yaml policy). Folders that
already look like OKF bundles are offered for you to enable.
Under Access tokens, create a token. New tokens can read; tick Write to let agents write drafts. Publish, Replace raw sources and Edit computations are for trusted automation only.
Copy the command shown for Claude Code (or the .mcp.json snippet for other clients), for
example:
claude mcp add --transport http okf-wiki http://127.0.0.1:27150/mcp/ --header "Authorization: Bearer okf_…"
Ask your agent something about the notes in the bundle.
okf_bundles, okf_browse, okf_read, okf_read_file (non-markdown text such as attester code), okf_search, okf_graph,
okf_history, okf_lint. Writing (Write scope): okf_create, okf_update, okf_move,
okf_deprecate, okf_describe_directory, okf_ingest_raw, okf_request_review. Prompts:
okf_author_concept and okf_distill_raw.draft. Only you, in Obsidian, can
approve a note (Approve this note, or the Review queue); no token can mark knowledge as
reviewed by a person. In the review queue you can tick several notes, or Select all without
errors, and Approve selected in one go.process:auto-approve: it becomes
stable and machine-confirmed, not reviewed by a person. Notes you approved yourself always come
back to you after an agent edits them.log.md, where agents read it.index.md and
log.md up to date, and, once you set Your ID, records your own edits when you leave a note
(turn this off with Record your edits). Approving needs Your ID too.status or verified outside the plugin (another
device, a script), the note is reported as not attested instead of trusted.references/raw/ and cited with footnotes.Other commands: Open review queue, Accept edits to this raw source, Convert links in this bundle to OKF form, Reload OKF bundles, Copy MCP endpoint URL, Restart MCP server.
A bundle may carry a .okf.yaml file:
okf_version: "0.2"
content_language: en
raw_dirs: [references/raw]
non_english_threshold: 0.05
auto_index: true
auto_log: true
agent_initial_status: draft
okf CLIChecks any OKF bundle directory, in or out of Obsidian, for example in CI:
npm install
npm run build:cli
node dist/okf.cjs lint path/to/bundle # conformance and policy; exit 1 on errors
node dist/okf.cjs lint path/to/bundle --strict # also fail on warnings
node dist/okf.cjs index path/to/bundle # exit 1 if index.md files are out of date
node dist/okf.cjs index path/to/bundle --write # regenerate them
Other plugins can read the wiki and follow its changes, but not write to it:
const api = (this.app as any).plugins.plugins["okf-wiki"]?.api;
if (api?.apiVersion === 1) {
const off = api.onCommit((e) => {
// e: { commitId, at, bundle, actor, tool, conceptId, reason?, reverts?,
// changes: [{ path, change: "created" | "modified" | "deleted" }] }
});
this.register(off);
const hits = api.search({ bundle: "Knowledge", query: "remote sensing" }).hits;
const note = api.read({ bundle: "Knowledge", concept_id: hits[0].concept_id });
}
bundles(), search(args) and read(args) take the same arguments as the okf_bundles,
okf_search and okf_read tools and return copies.onCommit is called after every commit is on disk: agent writes, your own approvals and edits, and
reverts (a revert lists the files it restored). Listeners run after the write and cannot slow or
break it.api object throws; get
it again once OKF Wiki is enabled. The types are in src/api.ts.okf CLISee the open issues for a full list of proposed features (and known issues).
Contributions are welcome. Read CONTRIBUTING.md for the project's rules, then:
git checkout -b feature/AmazingFeature)npm run typecheck, npm run lint and npm testgit commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Development commands:
npm test # vitest
npm run typecheck
npm run lint # eslint-plugin-obsidianmd
npm run build # main.js
npm run bench # UI-thread cost on large synthetic bundles
Like this project? A coffee keeps it going — every cup funds issues, fixes, and new features.
Distributed under the Apache-2.0 License. See LICENSE for more information. Includes material from Open Knowledge Format (Apache-2.0); the design of the server follows obsidian-local-rest-api (MIT) without using its code. See NOTICE.