Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/badges/virustotal.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"label": "VirusTotal",
"message": "clean · 5/5 bundles · v0.3.0",
"message": "clean · 5/5 bundles · v0.3.2",
"color": "brightgreen",
"namedLogo": "virustotal",
"logoColor": "white",
Expand Down
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.3.2] — 2026-05-02

> **Localized documentation release.** Adds Simplified Chinese,
> Japanese, and Korean documentation sets under `docs/i18n/`, and links
> them from the project README and docs index. No runtime behavior,
> schema, or tool-surface changes.

### Added

- **Localized docs:** `docs/i18n/zh-CN/`, `docs/i18n/ja/`, and
`docs/i18n/ko/` now include translated project README, roadmap,
changelog, architecture, wiki, examples, tools, security, testing,
environment, migration, and workspaces docs.
- **Locale index:** `docs/i18n/README.md` lists the available localized
documentation entry points.

### Changed

- Root `README.md` and `docs/README.md` now link directly to the
Chinese, Japanese, and Korean documentation.
- Release-facing version metadata in `package.json`, `manifest.json`,
and `server.json` is aligned at `0.3.2`.

## [0.3.1] — 2026-04-25

> **Tool Definition Quality Score (TDQS) sweep.** Description-only
Expand Down
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ You curate the sources; the LLM does the bookkeeping.
[**Tools**](#tool-surface) ·
[**Docs**](docs/README.md)

Docs: [简体中文](docs/i18n/zh-CN/README.md) / [日本語](docs/i18n/ja/README.md) / [한국어](docs/i18n/ko/README.md)

[![kObsidian MCP server](https://glama.ai/mcp/servers/bezata/kObsidian/badges/card.svg)](https://glama.ai/mcp/servers/bezata/kObsidian)

</div>
Expand Down Expand Up @@ -709,6 +711,10 @@ Every wiki tool also accepts a per-call `wikiRoot` override.

## Docs

Localized docs are available in **[简体中文](docs/i18n/zh-CN/README.md)**,
**[日本語](docs/i18n/ja/README.md)**, and
**[한국어](docs/i18n/ko/README.md)**.

| | |
|---|---|
| [architecture.md](docs/architecture.md) | Stack, module map, layering rules |
Expand All @@ -722,6 +728,26 @@ Every wiki tool also accepts a per-call `wikiRoot` override.

---

## Roadmap

The next two milestones are tracked in [`TODO.md`](TODO.md):

- **v0.4 — Obsidian LiveSync bridge.** Free, end-to-end-encrypted
vault access via the community
[Self-Hosted LiveSync](https://github.com/vrtmrz/obsidian-livesync)
plugin (CouchDB / S3 / R2 / WebRTC peer) — so an MCP client can
reach the same Obsidian vault from any machine the user owns,
without Obsidian itself being live.
- **v0.5 — Cross-semantic vault verification.** A `wiki.crossCheck`
tool that reconciles two or more LiveSync-paired vaults at the
wiki layer, gated by a new `schema_version` frontmatter field that
uses the project's semver discipline as the compatibility contract.

`TODO.md` carries the motivation, the per-milestone task breakdown,
and the rules for how items move from there into the CHANGELOG.

---

## Development

```bash
Expand Down
68 changes: 68 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# kObsidian — TODO / Roadmap

## Motivation

I built kObsidian for myself first. I needed an MCP server for my Obsidian
vaults that wouldn't lock me into one client, wouldn't require Obsidian
to be running for routine reads, and wouldn't bury my notes behind a
vendor's proprietary sync. Once it worked, I figured the same shape
would help anyone else running an Obsidian-first knowledge stack — so
I'm contributing it back to the open-source community.

This file is the public version of my own backlog. Items move from
here into a tagged release once they're shipped, then get pruned. The
CHANGELOG is the source of truth for what's done; this file is
forward-looking only.

## Roadmap

### v0.4 — Obsidian LiveSync bridge

Free, end-to-end-encrypted vault sync via the community
[**Self-Hosted LiveSync**](https://github.com/vrtmrz/obsidian-livesync)
plugin (`obsidian://show-plugin?id=obsidian-livesync`). LiveSync runs
on the user's own CouchDB / S3 / R2 / WebRTC peer, so the sync layer
is self-hostable with E2E encryption — no proprietary cloud, no
Obsidian Sync subscription. kObsidian will detect a LiveSync-enabled
vault and expose remote-vault tools so an MCP client can reach the
same Obsidian vault from any machine the user owns, via the API +
MCP, without the local Obsidian process being live.

- [ ] Detect LiveSync configuration in the vault (`.obsidian/plugins/obsidian-livesync/data.json`).
- [ ] Surface remote endpoints in `vault.list` with a new `livesync` source flag (alongside `env` / `obsidian-app` / `default`).
- [ ] New `vault.connectLiveSync` for session-time bring-up of a remote vault — wraps the LiveSync replication endpoint, never touches plaintext on the server side.
- [ ] E2E-encrypted read path through the LiveSync chunked store; writes deferred to v0.4.x.
- [ ] Docs: setup with CouchDB on fly.io / IBM Cloudant / Cloudflare R2 / WebRTC peer (mirroring LiveSync's own setup guide).

> Why LiveSync first: it's the only widely adopted Obsidian sync
> solution that is open-source, E2E-encrypted, AND self-hostable
> end-to-end — making it the right primitive to layer MCP on top of.
> Compatibility note: LiveSync explicitly does not co-exist with
> Obsidian Sync or iCloud; that constraint propagates here.

### v0.5 — Cross-semantic vault verification

A `wiki.crossCheck` (working name) tool that reconciles two or more
LiveSync-paired vaults at the **wiki layer**: same Source slugs across
vaults must point to compatible frontmatter, the canonical
`## [YYYY-MM-DD] <op> | <title>` log lines must replay deterministically,
and Concept / Entity pages must converge to the same wiki-link graph
modulo summary text.

The check uses the project's existing **semver discipline** as the
versioning system: every Source / Concept / Entity page gains a
`schema_version: 1` frontmatter field, and the cross-check refuses to
merge across incompatible majors. Bumping the schema major is the
same gate as bumping the package major.

- [ ] Add `schema_version` to canonical Source / Concept / Entity frontmatter (additive, defaults to `1`).
- [ ] `wiki.crossCheck` — diff one wiki tree against another, return divergences grouped by `{page, field, severity}`.
- [ ] Auto-replayable log merge: union of `## [YYYY-MM-DD]` entries, dedupe by `(op, title, date)`, preserve order.
- [ ] Conflict policy: `lastWriteWins` (default) and `manualResolve` (return `proposedEdits` for the agent to apply).
- [ ] Migration tool for pre-`schema_version` vaults — one-pass frontmatter rewrite gated behind an explicit `force:true`.

## Conventions

- Roadmap items follow project semver — anything tagged `vX.Y` lands in that version's CHANGELOG entry on release.
- Larger items get a tracking issue before implementation; this file points to the issue once it exists.
- Done items are removed (the CHANGELOG keeps them).
6 changes: 6 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

Deeper reading, grouped by what you want to do.

## Translations

- **简体中文:** [i18n/zh-CN/README.md](i18n/zh-CN/README.md)
- **日本語:** [i18n/ja/README.md](i18n/ja/README.md)
- **한국어:** [i18n/ko/README.md](i18n/ko/README.md)

## Workspaces (multi-vault)

- **[WORKSPACES.md](WORKSPACES.md)** — the only Obsidian MCP with in-session
Expand Down
11 changes: 11 additions & 0 deletions docs/i18n/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 多语言文档 / 多言語ドキュメント / 다국어 문서

| 语言 / 言語 / 언어 | 入口 |
|---|---|
| 简体中文 | [zh-CN/README.md](zh-CN/README.md) |
| 日本語 | [ja/README.md](ja/README.md) |
| 한국어 | [ko/README.md](ko/README.md) |

命令、工具名、环境变量、파일 경로、ファイルパス는 프로토콜 계약이므로 각 번역 문서에서도 원문 표기를 유지합니다.

Each locale includes translated project-level docs (`PROJECT_README.md`, `ROADMAP.md`, `CHANGELOG.md`) plus the human-written files from `docs/*.md`.
102 changes: 102 additions & 0 deletions docs/i18n/ja/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Changelog

これは [`../../../CHANGELOG.md`](../../../CHANGELOG.md) の日本語版です。version、tool name、environment variable、command は原文のままです。

## Unreleased

未リリース項目はありません。

## 0.3.2 - 2026-05-02

このリリースでは Simplified Chinese、日本語、韓国語の documentation を追加しました。runtime behavior、schema、tool surface の変更はありません。

### Added

- `docs/i18n/zh-CN/`、`docs/i18n/ja/`、`docs/i18n/ko/` を追加。
- 各 locale に project README、roadmap、changelog、architecture、wiki、examples、tools、security、testing、environment、migration、workspaces docs を追加。
- `docs/i18n/README.md` を多言語 index として追加。

### Changed

- root `README.md` と `docs/README.md` から Chinese、Japanese、Korean docs へ直接リンク。
- `package.json`、`manifest.json`、`server.json` の release version を `0.3.2` に統一。

## 0.3.1 - 2026-04-25

Tool definition quality の改善リリースです。説明文のみの変更で、behavior、schema、annotation の変更はありません。

### Changed

- `wiki.*` 7 tools の description を書き直し、parameter semantics、usage、return shape、examples を追加。
- `workspace.openFile`、`workspace.closeActiveFile`、`workspace.toggleEditMode` に return shape、edge case、UI-only contract を明記。
- `links.hubs` description に `links.health`、`links.graph` との使い分けを追加。
- `src/schema/wiki.ts` の wiki schema parameters に `.describe()` を追加。

## 0.3.0 - 2026-04-25

複数 vault support。単一 server session 内で複数の Obsidian vault を発見し、切り替えられるようになりました。

### Added

- `vault.*` namespace:`vault.list`、`vault.current`、`vault.select`、`vault.reset`。
- `OBSIDIAN_VAULT_<NAME>=path` による named vault。
- Obsidian の `obsidian.json` vault registry の experimental discovery。
- `KOBSIDIAN_VAULT_ALLOW` と `KOBSIDIAN_VAULT_DENY`。
- `pick-vault` server-side prompt。
- filesystem tools の description に session-active vault precedence を追加。
- Ubuntu、macOS、Windows の CI matrix。

### Changed

- `requireVaultPath` precedence は `arg > session > env > error`。
- `DomainContext` に `session` と `vaults` を追加。
- `AppEnv` に `namedVaults` を追加。

### Fixed

- `ingest-source` prompt が新しい `notes.edit` modes を参照するよう修正。

### Migration

0.2.5 から必須変更はありません。`OBSIDIAN_VAULT_PATH` のみの設定は引き続き動作します。

```bash
OBSIDIAN_VAULT_WORK=/absolute/path/to/work
OBSIDIAN_VAULT_SCRATCH=/absolute/path/to/scratch
```

その後 `vault.select { name: "work" }` で切り替えます。

## 0.2.5 - 2026-04-25

Tool surface consolidation。tool 数を約 90 から 62 に減らし、namespace と tool descriptions、MCP annotations を整理しました。

### Breaking

- `mermaid.*` は削除され、`blocks.*` が Mermaid fenced blocks を扱います。
- `stats.note` は削除され、`notes.read` with `include: ['stats']` を使います。
- 複数 tool が `notes.edit`、`tags.modify`、`kanban.card`、`canvas.edit`、`templates.use` などへ統合されました。

### Changed

- すべての tool description を outcome、constraints、return shape、safety hints を含む形に変更。
- annotation constants は 4 つの MCP hints を明示。
- per-namespace Zod schemas を `src/schema/<namespace>.ts` に配置。
- `ToolDefinition` に `inputExamples` を追加。

### Migration examples

```diff
- notes.append { filePath: "foo.md", content: "..." }
+ notes.edit { mode: "append", path: "foo.md", content: "..." }

- tags.add { path: "foo.md", tags: ["x"] }
+ tags.modify { path: "foo.md", op: "add", tags: ["x"] }

- mermaid.blocks.update { filePath, source, index }
+ blocks.update { filePath, source, index, language: "mermaid" }
```

## 0.2.x と 0.1.x

初期リリースでは TypeScript/Bun runtime、MCP server、stdio/HTTP transport、LLM Wiki layer、tool namespaces、Claude Code skills、release pipeline、security docs、test baseline が整備されました。完全な履歴は英語原文 [`../../../CHANGELOG.md`](../../../CHANGELOG.md) を参照してください。
76 changes: 76 additions & 0 deletions docs/i18n/ja/ENVIRONMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# 環境変数

ローカル設定には環境変数を使います。実際の値、API key、`.env` ファイルをコミットしないでください。

```bash
# 基本設定
OBSIDIAN_VAULT_PATH=/absolute/path/to/vault
OBSIDIAN_API_URL=https://127.0.0.1:27124
OBSIDIAN_API_VERIFY_TLS=false
OBSIDIAN_REST_API_KEY=your-local-rest-api-key

# HTTP transport
KOBSIDIAN_HTTP_HOST=127.0.0.1
KOBSIDIAN_HTTP_PORT=3000
KOBSIDIAN_HTTP_BEARER_TOKEN=optional-local-http-token
KOBSIDIAN_ALLOWED_ORIGINS=http://localhost,http://127.0.0.1

# 複数 vault
OBSIDIAN_VAULT_WORK=/absolute/path/to/work-vault
OBSIDIAN_VAULT_PERSONAL=/absolute/path/to/personal-vault
KOBSIDIAN_VAULT_DISCOVERY=on
KOBSIDIAN_VAULT_ALLOW=work,personal
KOBSIDIAN_VAULT_DENY=secrets
KOBSIDIAN_OBSIDIAN_CONFIG=
```

Obsidian Local REST API は既定で自己署名 HTTPS 証明書を使います。ローカル開発では通常 `OBSIDIAN_API_VERIFY_TLS=false` のままで問題ありません。証明書を OS 側で信頼した場合だけ `true` にします。

`OBSIDIAN_REST_API_KEY` は [Local REST API](obsidian://show-plugin?id=obsidian-local-rest-api) プラグインが発行する API key です。必要なのは `workspace.*`、`commands.*`、実行時 `dataview.query*`、`templates.use` の Templater 分岐だけです。ファイルシステム優先の多くのツールは不要です。

## 複数 vault

kObsidian は `vault.*` 名前空間で 1 つのサーバー内に複数 vault を扱えます。

1. 呼び出しごとの `vaultPath` が最優先。
2. `vault.select` で選んだセッション中の active vault。
3. `OBSIDIAN_VAULT_PATH` が既定値。
4. どれも無ければエラー。

### vault の検出元

| 検出元 | 読むもの | 状態 |
|---|---|---|
| `OBSIDIAN_VAULT_PATH` | 単一の既定 vault | 安定、文書化済み |
| `OBSIDIAN_VAULT_<NAME>=path` | 名前付き追加 vault | 安定、文書化済み |
| `obsidian.json` | Obsidian 自身の vault レジストリ | 実験的。`KOBSIDIAN_VAULT_DISCOVERY=on|off` で切り替え |

`obsidian-app` 検出は best-effort です。解析失敗は `vault.list` の `obsidianConfigError` に出し、サーバーは落としません。Obsidian 内部ファイルに依存したくない場合は `KOBSIDIAN_VAULT_DISCOVERY=off` にして環境変数だけを使います。

### OS ごとの `obsidian.json`

| OS | 既定パス |
|---|---|
| macOS | `~/Library/Application Support/obsidian/obsidian.json` |
| Windows | `%APPDATA%\obsidian\obsidian.json` |
| Linux | `$XDG_CONFIG_HOME/obsidian/obsidian.json` -> `~/.config/obsidian/obsidian.json` |
| Linux Flatpak | `~/.var/app/md.obsidian.Obsidian/config/obsidian/obsidian.json` |
| Linux Snap | `~/snap/obsidian/current/.config/obsidian/obsidian.json` |
| Portable / WSL / 非標準 | `KOBSIDIAN_OBSIDIAN_CONFIG=/absolute/path/obsidian.json` |

### セキュリティ制御

| 変数 | 既定 | 効果 |
|---|---|---|
| `KOBSIDIAN_VAULT_ALLOW` | 未設定、すべて許可 | 名前または絶対パスの allowlist |
| `KOBSIDIAN_VAULT_DENY` | 未設定 | allowlist の後に適用する denylist |

`OBSIDIAN_VAULT_PATH` は allow/deny の対象外です。操作者が明示した既定 vault を常に到達可能にし、誤設定によるロックアウトを避けます。

## ローカル確認

```bash
bun run dev:stdio
bun run dev:http
bun run test
```
Loading