obsidian-mcp-server 3.2.3 → 3.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +9 -3
- package/CLAUDE.md +9 -3
- package/README.md +5 -3
- package/changelog/3.2.x/3.2.4.md +29 -0
- package/changelog/3.2.x/3.2.5.md +22 -0
- package/dist/config/server-config.d.ts +5 -5
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +10 -13
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/manifest.json +25 -9
- package/package.json +11 -7
- package/server.json +15 -3
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** obsidian-mcp-server
|
|
4
|
-
**Version:** 3.2.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.
|
|
4
|
+
**Version:** 3.2.5
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.5`
|
|
6
6
|
**Engines:** Bun ≥1.3.11, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -181,7 +181,7 @@ Handlers receive a unified `ctx` object. Properties this server actually uses:
|
|
|
181
181
|
| `ctx.requestId` | Unique request ID — surfaces in log lines for correlation. |
|
|
182
182
|
| `ctx.tenantId` | Tenant ID from JWT or `'default'` for stdio. |
|
|
183
183
|
|
|
184
|
-
The framework also provides `ctx.state
|
|
184
|
+
The framework also provides `ctx.state` and `ctx.progress`. They aren't used by this server — Obsidian is single-vault and stateless from the server's perspective, so per-tenant KV and progress streams aren't needed. See the framework `CLAUDE.md` for the full surface.
|
|
185
185
|
|
|
186
186
|
---
|
|
187
187
|
|
|
@@ -301,6 +301,7 @@ Available skills:
|
|
|
301
301
|
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
|
|
302
302
|
| `release-and-publish` | Ship a release end-to-end across npm, MCP Registry, GitHub Releases (`.mcpb`), and GHCR |
|
|
303
303
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
304
|
+
| `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
|
|
304
305
|
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
305
306
|
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
306
307
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
@@ -315,6 +316,8 @@ Available skills:
|
|
|
315
316
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
316
317
|
| `api-workers` | Cloudflare Workers runtime |
|
|
317
318
|
|
|
319
|
+
**Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
|
|
320
|
+
|
|
318
321
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
319
322
|
|
|
320
323
|
---
|
|
@@ -400,4 +403,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
400
403
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
401
404
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports). Conditional registration (e.g. `commandToolDefinitions` behind `OBSIDIAN_ENABLE_COMMANDS`) happens in `src/index.ts`, not in the barrel
|
|
402
405
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
406
|
+
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
|
|
407
|
+
- [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
|
|
408
|
+
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
|
|
403
409
|
- [ ] `bun run devcheck` passes
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** obsidian-mcp-server
|
|
4
|
-
**Version:** 3.2.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.
|
|
4
|
+
**Version:** 3.2.5
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.5`
|
|
6
6
|
**Engines:** Bun ≥1.3.11, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -181,7 +181,7 @@ Handlers receive a unified `ctx` object. Properties this server actually uses:
|
|
|
181
181
|
| `ctx.requestId` | Unique request ID — surfaces in log lines for correlation. |
|
|
182
182
|
| `ctx.tenantId` | Tenant ID from JWT or `'default'` for stdio. |
|
|
183
183
|
|
|
184
|
-
The framework also provides `ctx.state
|
|
184
|
+
The framework also provides `ctx.state` and `ctx.progress`. They aren't used by this server — Obsidian is single-vault and stateless from the server's perspective, so per-tenant KV and progress streams aren't needed. See the framework `CLAUDE.md` for the full surface.
|
|
185
185
|
|
|
186
186
|
---
|
|
187
187
|
|
|
@@ -301,6 +301,7 @@ Available skills:
|
|
|
301
301
|
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
|
|
302
302
|
| `release-and-publish` | Ship a release end-to-end across npm, MCP Registry, GitHub Releases (`.mcpb`), and GHCR |
|
|
303
303
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
304
|
+
| `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
|
|
304
305
|
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
305
306
|
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
306
307
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
@@ -315,6 +316,8 @@ Available skills:
|
|
|
315
316
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
316
317
|
| `api-workers` | Cloudflare Workers runtime |
|
|
317
318
|
|
|
319
|
+
**Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
|
|
320
|
+
|
|
318
321
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
319
322
|
|
|
320
323
|
---
|
|
@@ -400,4 +403,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
400
403
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
401
404
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports). Conditional registration (e.g. `commandToolDefinitions` behind `OBSIDIAN_ENABLE_COMMANDS`) happens in `src/index.ts`, not in the barrel
|
|
402
405
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
406
|
+
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
|
|
407
|
+
- [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
|
|
408
|
+
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
|
|
403
409
|
- [ ] `bun run devcheck` passes
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/obsidian-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/obsidian-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -163,6 +163,8 @@ Three optional env vars gate which vault paths each tool can target. **Default u
|
|
|
163
163
|
|
|
164
164
|
Denies are typed `path_forbidden` (JSON-RPC code `Forbidden`) with the active scope echoed back in `data.recovery.hint` and `data.activeScope`, so the LLM can self-correct without inspecting server logs. Search results from `obsidian_search_notes` are filtered against `READ_PATHS` silently — surfacing a "we hid N hits" indicator would defeat the gate.
|
|
165
165
|
|
|
166
|
+
**Tag listing is vault-wide.** `obsidian_list_tags` and the `obsidian://tags` resource aggregate tag names across the whole vault and are *not* narrowed by `OBSIDIAN_READ_PATHS` — they take no path to gate, so tag names (never note contents) from outside the read scope can surface.
|
|
167
|
+
|
|
166
168
|
The startup banner logs the active scope so operators can verify their config at boot.
|
|
167
169
|
|
|
168
170
|
---
|
|
@@ -208,7 +210,7 @@ Add the following to your MCP client configuration file. The Obsidian Local REST
|
|
|
208
210
|
```json
|
|
209
211
|
{
|
|
210
212
|
"mcpServers": {
|
|
211
|
-
"obsidian": {
|
|
213
|
+
"obsidian-mcp-server": {
|
|
212
214
|
"type": "stdio",
|
|
213
215
|
"command": "bunx",
|
|
214
216
|
"args": ["obsidian-mcp-server@latest"],
|
|
@@ -227,7 +229,7 @@ Or with npx (no Bun required):
|
|
|
227
229
|
```json
|
|
228
230
|
{
|
|
229
231
|
"mcpServers": {
|
|
230
|
-
"obsidian": {
|
|
232
|
+
"obsidian-mcp-server": {
|
|
231
233
|
"type": "stdio",
|
|
232
234
|
"command": "npx",
|
|
233
235
|
"args": ["-y", "obsidian-mcp-server@latest"],
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "mcp-ts-core ^0.9.16 → ^0.9.21 (per-request log context, retryable auto-population, query-string redaction, devcheck gates); plugin marketplace support (.claude-plugin, .codex-plugin); MCP config key renamed to obsidian-mcp-server"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
agent-notes: |
|
|
6
|
+
New untracked directories now ship: `.claude-plugin/` (Claude Code plugin manifest) and `.codex-plugin/` (Codex plugin manifest + mcp.json). The MCP client config key in install snippets changed from `obsidian` to `obsidian-mcp-server` to match the server's declared name. New scripts: `scripts/release-github.ts` (invoked via `release:github`) and `scripts/check-skill-versions.ts`. Skills resynced from mcp-ts-core 0.9.21 — new: `api-mirror`, `orchestrations`. If running `maintenance` on this server after 3.2.4, copy skills from `node_modules/@cyanheads/mcp-ts-core/skills/` to `skills/` and `.claude/skills/` as usual.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 3.2.4 — 2026-06-02
|
|
10
|
+
|
|
11
|
+
## Added
|
|
12
|
+
|
|
13
|
+
- **Plugin marketplace manifests.** `.claude-plugin/plugin.json` (Claude Code marketplace) and `.codex-plugin/plugin.json` + `.codex-plugin/mcp.json` (Codex marketplace) — both declare the server's name, version, description, and env var config for one-click installs.
|
|
14
|
+
- **`release:github` script** (`scripts/release-github.ts`) — constructs the GitHub Release title from the tag subject, attaches the `.mcpb` bundle, and handles the "release already exists" fallback. Inherited from mcp-ts-core 0.9.19.
|
|
15
|
+
- **`api-mirror` skill** — documents the `@cyanheads/mcp-ts-core/mirror` API surface (MirrorService, SQLite + FTS5 backend). Added in mcp-ts-core 0.9.17.
|
|
16
|
+
- **`orchestrations` skill** — chains task skills into gated multi-phase pipelines. Added in mcp-ts-core 0.9.19 (promoted to `audience: external` in 0.9.21).
|
|
17
|
+
|
|
18
|
+
## Changed
|
|
19
|
+
|
|
20
|
+
- **MCP client config key renamed** from `obsidian` to `obsidian-mcp-server` in README install snippets — aligns with the server's declared name in manifests and `server.json`.
|
|
21
|
+
- **Skills resynced** from mcp-ts-core 0.9.21: `add-tool`, `add-service`, `api-canvas`, `api-context`, `api-linter`, `api-utils`, `design-mcp-server`, `release-and-publish` — picks up list-filtering guidance, updated retry semantics, skill-version enforcement gate details, and `release:github` adoption.
|
|
22
|
+
- **`scripts/devcheck.ts` updated** — adds the skill-version enforcement gate and open-indexed-named interface gate from mcp-ts-core 0.9.18.
|
|
23
|
+
- **CLAUDE.md / AGENTS.md** — `orchestrations` skill added to the skills table; pipeline-chaining guidance block added; plugin checklist items added for `.claude-plugin/plugin.json` and `.codex-plugin/` files.
|
|
24
|
+
|
|
25
|
+
## Dependency bumps
|
|
26
|
+
|
|
27
|
+
- `@cyanheads/mcp-ts-core` ^0.9.16 → ^0.9.21 — HTTP per-request log context fix ([#194](https://github.com/cyanheads/mcp-ts-core/issues/194)), `ctx.fail` auto-populates `data.retryable` ([#174](https://github.com/cyanheads/mcp-ts-core/issues/174)), `fetchWithTimeout` query-string redaction ([#190](https://github.com/cyanheads/mcp-ts-core/issues/190)), `error-contract` lint scoped to construction sites ([#191](https://github.com/cyanheads/mcp-ts-core/issues/191)), list-changed notifications routed under HTTP ([#135](https://github.com/cyanheads/mcp-ts-core/issues/135)), MirrorService (`/mirror` subpath), two devcheck gates (skill-version, open-indexed-named interfaces)
|
|
28
|
+
- `js-yaml` ^4.1.1 → ^4.2.0
|
|
29
|
+
- `vitest` ^4.1.7 → ^4.1.8 (dev)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "mcp-ts-core ^0.9.21 → ^0.10.5 (strict env-boolean parsing, server identity fields, .mcpbignore anchoring, OBSIDIAN_OMNISEARCH_URL in manifest/server.json, empty-string guards on URL fields)"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 3.2.5 — 2026-06-11
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **Env-boolean parsing is now strict.** `OBSIDIAN_VERIFY_SSL`, `OBSIDIAN_ENABLE_COMMANDS`, and `OBSIDIAN_READ_ONLY` accept `true/false/1/0/yes/no/on/off` (case-insensitive) and **reject unrecognized values at startup** instead of silently coercing them to `false`. Previously `maybe` or `enabled` would silently resolve to `false`; now they throw a `ConfigurationError` naming the variable. (`z.stringbool()` via mcp-ts-core 0.10.0.)
|
|
12
|
+
- **`OBSIDIAN_BASE_URL` and `OBSIDIAN_OMNISEARCH_URL` tolerate empty strings.** When an MCPB config field is left blank, the env var arrives as `""`. Both fields now treat blank/whitespace as unset and fall back to their defaults (`http://127.0.0.1:27123` and derived Omnisearch URL, respectively) rather than failing `.url()` validation at startup.
|
|
13
|
+
- **Server identity exposed on `initialize` and `/.well-known/mcp.json`.** `createApp()` now receives `description` (`"MCP server for Obsidian — read, write, search, and surgically edit notes, tags, and frontmatter."`) and `websiteUrl` (`https://github.com/cyanheads/obsidian-mcp-server`), consistent with `server.json`. (via mcp-ts-core 0.10.3 `CreateAppOptions`.)
|
|
14
|
+
- **`.mcpbignore` dev-dir patterns anchored to root.** `/skills/`, `/.agents/`, `/.claude/`, `/Dockerfile`, etc. now use leading `/` so they cannot accidentally match runtime paths nested inside the bundle. (via mcp-ts-core 0.10.1 scaffold fix.)
|
|
15
|
+
- **`OBSIDIAN_OMNISEARCH_URL` declared in `server.json` and `manifest.json`.** Previously absent from both, so install scaffolds silently omitted the override. Both configs now carry the entry; `manifest.json` `user_config` optional entries also gained `default: ""`.
|
|
16
|
+
- **vault-wide tag listing** (`obsidian://tags`, `obsidian_list_tags`): description and docs clarified that tag listing is vault-wide and is not narrowed by `OBSIDIAN_READ_PATHS`. (Docs-only; no behavioral change.) (HEAD commit `230cd81`)
|
|
17
|
+
|
|
18
|
+
## Dependency bumps
|
|
19
|
+
|
|
20
|
+
- `@cyanheads/mcp-ts-core` ^0.9.21 → ^0.10.5 — strict env-boolean via `z.stringbool()`, elicitation wired on the wire, server identity fields on `createApp()`, `.mcpbignore` anchor fix, platform-native utils (AbortSignal.any, Symbol.Dispose, performance.now delegation)
|
|
21
|
+
- `undici` 8.3.0 → 8.4.1
|
|
22
|
+
- `@types/node` ^25.9.1 → ^25.9.3
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
7
7
|
declare const ServerConfigSchema: z.ZodObject<{
|
|
8
8
|
apiKey: z.ZodString;
|
|
9
|
-
baseUrl: z.ZodDefault<z.ZodString
|
|
10
|
-
verifySsl: z.ZodDefault<z.
|
|
9
|
+
baseUrl: z.ZodPreprocess<z.ZodDefault<z.ZodString>>;
|
|
10
|
+
verifySsl: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCodec<z.ZodString, z.ZodBoolean>]>>;
|
|
11
11
|
requestTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
12
|
-
enableCommands: z.ZodDefault<z.
|
|
12
|
+
enableCommands: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCodec<z.ZodString, z.ZodBoolean>]>>;
|
|
13
13
|
readPaths: z.ZodPreprocess<z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>>;
|
|
14
14
|
writePaths: z.ZodPreprocess<z.ZodPipe<z.ZodOptional<z.ZodArray<z.ZodString>>, z.ZodTransform<string[] | undefined, string[] | undefined>>>;
|
|
15
|
-
readOnly: z.ZodDefault<z.
|
|
16
|
-
omnisearchUrl: z.ZodOptional<z.ZodString
|
|
15
|
+
readOnly: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCodec<z.ZodString, z.ZodBoolean>]>>;
|
|
16
|
+
omnisearchUrl: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
|
|
17
17
|
}, z.core.$strip>;
|
|
18
18
|
export type ServerConfig = z.infer<typeof ServerConfigSchema>;
|
|
19
19
|
export declare function getServerConfig(): ServerConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAgF3C,QAAA,MAAM,kBAAkB;;;;;;;;;;iBAsDtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAa9C;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -5,15 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
7
7
|
import { parseEnvConfig } from '@cyanheads/mcp-ts-core/config';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
return val;
|
|
16
|
-
}, z.boolean());
|
|
8
|
+
/**
|
|
9
|
+
* Boolean env flag parser. Accepts true/false/1/0/yes/no/on/off (case-insensitive);
|
|
10
|
+
* rejects unrecognized values at startup rather than silently coercing.
|
|
11
|
+
* Schema fields call `.default(false)` on top of this.
|
|
12
|
+
*/
|
|
13
|
+
const envBoolean = z.union([z.boolean(), z.stringbool()]);
|
|
17
14
|
/**
|
|
18
15
|
* Comma-separated path-list preprocessor. Semantics (see issue #40):
|
|
19
16
|
* - undefined / `''` / whitespace-only → undefined (treat as unset; default = full vault)
|
|
@@ -90,11 +87,11 @@ const ServerConfigSchema = z.object({
|
|
|
90
87
|
.string()
|
|
91
88
|
.min(1)
|
|
92
89
|
.describe('Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API).'),
|
|
93
|
-
baseUrl: z
|
|
90
|
+
baseUrl: z.preprocess((val) => (typeof val === 'string' && val.trim() === '' ? undefined : val), z
|
|
94
91
|
.string()
|
|
95
92
|
.url()
|
|
96
93
|
.default('http://127.0.0.1:27123')
|
|
97
|
-
.describe('Base URL of the Obsidian Local REST API. Defaults to http://127.0.0.1:27123 — enable "Non-encrypted (HTTP) Server" in the plugin settings to match. Use https://127.0.0.1:27124 to hit the always-on HTTPS port (self-signed cert; pair with OBSIDIAN_VERIFY_SSL=false).'),
|
|
94
|
+
.describe('Base URL of the Obsidian Local REST API. Defaults to http://127.0.0.1:27123 — enable "Non-encrypted (HTTP) Server" in the plugin settings to match. Use https://127.0.0.1:27124 to hit the always-on HTTPS port (self-signed cert; pair with OBSIDIAN_VERIFY_SSL=false).')),
|
|
98
95
|
verifySsl: envBoolean
|
|
99
96
|
.default(false)
|
|
100
97
|
.describe("Whether to verify the TLS certificate on the Obsidian endpoint. Defaults to false because the plugin uses a self-signed cert. On Node, the dispatcher's `rejectUnauthorized` option handles this without any process-wide change. On Bun, the runtime ignores that option, so the service additionally sets `NODE_TLS_REJECT_UNAUTHORIZED=0` — that fallback is scoped to Bun only."),
|
|
@@ -112,11 +109,11 @@ const ServerConfigSchema = z.object({
|
|
|
112
109
|
readOnly: envBoolean
|
|
113
110
|
.default(false)
|
|
114
111
|
.describe('Global kill switch. When true, denies every write regardless of OBSIDIAN_WRITE_PATHS, and suppresses the OBSIDIAN_ENABLE_COMMANDS pair (commands can mutate). Defaults to false.'),
|
|
115
|
-
omnisearchUrl: z
|
|
112
|
+
omnisearchUrl: z.preprocess((val) => (typeof val === 'string' && val.trim() === '' ? undefined : val), z
|
|
116
113
|
.string()
|
|
117
114
|
.url()
|
|
118
115
|
.optional()
|
|
119
|
-
.describe('Override URL for the Omnisearch plugin HTTP server. When unset, derives from OBSIDIAN_BASE_URL host with port 51361 (falling back to http://localhost:51361). Used to enable the optional `omnisearch` mode on `obsidian_search_notes`; if the URL is unreachable at startup, the mode is omitted from the tool schema.'),
|
|
116
|
+
.describe('Override URL for the Omnisearch plugin HTTP server. When unset, derives from OBSIDIAN_BASE_URL host with port 51361 (falling back to http://localhost:51361). Used to enable the optional `omnisearch` mode on `obsidian_search_notes`; if the URL is unreachable at startup, the mode is omitted from the tool schema.')),
|
|
120
117
|
});
|
|
121
118
|
let _config;
|
|
122
119
|
export function getServerConfig() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,UAAU,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -71,6 +71,8 @@ const commandTools = config.enableCommands && !config.readOnly
|
|
|
71
71
|
}));
|
|
72
72
|
const tools = [...readToolDefinitions, searchNotesTool, ...writeTools, ...commandTools];
|
|
73
73
|
const { services } = await createApp({
|
|
74
|
+
description: 'MCP server for Obsidian — read, write, search, and surgically edit notes, tags, and frontmatter.',
|
|
75
|
+
websiteUrl: 'https://github.com/cyanheads/obsidian-mcp-server',
|
|
74
76
|
tools,
|
|
75
77
|
resources: allResourceDefinitions,
|
|
76
78
|
prompts: allPromptDefinitions,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "obsidian-mcp-server",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.5",
|
|
5
5
|
"description": "MCP server for Obsidian vaults — read, write, search, and surgically edit notes, tags, and frontmatter via the Local REST API plugin. STDIO or Streamable HTTP.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "cyanheads"
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"OBSIDIAN_READ_PATHS": "${OBSIDIAN_READ_PATHS}",
|
|
31
31
|
"OBSIDIAN_WRITE_PATHS": "${OBSIDIAN_WRITE_PATHS}",
|
|
32
32
|
"OBSIDIAN_READ_ONLY": "${OBSIDIAN_READ_ONLY}",
|
|
33
|
+
"OBSIDIAN_OMNISEARCH_URL": "${OBSIDIAN_OMNISEARCH_URL}",
|
|
33
34
|
"MCP_LOG_LEVEL": "${MCP_LOG_LEVEL}"
|
|
34
35
|
}
|
|
35
36
|
}
|
|
@@ -52,49 +53,64 @@
|
|
|
52
53
|
"title": "Obsidian Base URL",
|
|
53
54
|
"description": "Base URL of the Obsidian Local REST API. Default: http://127.0.0.1:27123. Use https://127.0.0.1:27124 for the HTTPS port.",
|
|
54
55
|
"type": "string",
|
|
55
|
-
"required": false
|
|
56
|
+
"required": false,
|
|
57
|
+
"default": ""
|
|
56
58
|
},
|
|
57
59
|
"OBSIDIAN_VERIFY_SSL": {
|
|
58
60
|
"title": "Verify SSL",
|
|
59
61
|
"description": "Whether to verify the TLS certificate. Default false (plugin uses a self-signed cert).",
|
|
60
62
|
"type": "string",
|
|
61
|
-
"required": false
|
|
63
|
+
"required": false,
|
|
64
|
+
"default": ""
|
|
62
65
|
},
|
|
63
66
|
"OBSIDIAN_REQUEST_TIMEOUT_MS": {
|
|
64
67
|
"title": "Request Timeout (ms)",
|
|
65
68
|
"description": "Per-request timeout in milliseconds. Default: 30000.",
|
|
66
69
|
"type": "string",
|
|
67
|
-
"required": false
|
|
70
|
+
"required": false,
|
|
71
|
+
"default": ""
|
|
68
72
|
},
|
|
69
73
|
"OBSIDIAN_ENABLE_COMMANDS": {
|
|
70
74
|
"title": "Enable Commands",
|
|
71
75
|
"description": "Opt-in flag for the command-palette pair (obsidian_list_commands + obsidian_execute_command). Off by default.",
|
|
72
76
|
"type": "string",
|
|
73
|
-
"required": false
|
|
77
|
+
"required": false,
|
|
78
|
+
"default": ""
|
|
74
79
|
},
|
|
75
80
|
"OBSIDIAN_READ_PATHS": {
|
|
76
81
|
"title": "Read Path Allowlist",
|
|
77
82
|
"description": "Comma-separated vault-relative folder allowlist for reads. Unset = full vault. Example: 'public/,projects/'.",
|
|
78
83
|
"type": "string",
|
|
79
|
-
"required": false
|
|
84
|
+
"required": false,
|
|
85
|
+
"default": ""
|
|
80
86
|
},
|
|
81
87
|
"OBSIDIAN_WRITE_PATHS": {
|
|
82
88
|
"title": "Write Path Allowlist",
|
|
83
89
|
"description": "Comma-separated vault-relative folder allowlist for writes. Unset = full vault. Example: 'projects/,scratch/'.",
|
|
84
90
|
"type": "string",
|
|
85
|
-
"required": false
|
|
91
|
+
"required": false,
|
|
92
|
+
"default": ""
|
|
86
93
|
},
|
|
87
94
|
"OBSIDIAN_READ_ONLY": {
|
|
88
95
|
"title": "Read-Only Mode",
|
|
89
96
|
"description": "Global read-only kill switch. When true, every write is denied. Default: false.",
|
|
90
97
|
"type": "string",
|
|
91
|
-
"required": false
|
|
98
|
+
"required": false,
|
|
99
|
+
"default": ""
|
|
100
|
+
},
|
|
101
|
+
"OBSIDIAN_OMNISEARCH_URL": {
|
|
102
|
+
"title": "Omnisearch URL",
|
|
103
|
+
"description": "Override URL for the Omnisearch plugin HTTP server (port 51361 by default). Set only if the plugin is not on the default port.",
|
|
104
|
+
"type": "string",
|
|
105
|
+
"required": false,
|
|
106
|
+
"default": ""
|
|
92
107
|
},
|
|
93
108
|
"MCP_LOG_LEVEL": {
|
|
94
109
|
"title": "Log Level",
|
|
95
110
|
"description": "Minimum log level for output (debug, info, warn, error). Default: info.",
|
|
96
111
|
"type": "string",
|
|
97
|
-
"required": false
|
|
112
|
+
"required": false,
|
|
113
|
+
"default": ""
|
|
98
114
|
}
|
|
99
115
|
}
|
|
100
116
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-mcp-server",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.5",
|
|
4
4
|
"mcpName": "io.github.cyanheads/obsidian-mcp-server",
|
|
5
5
|
"description": "MCP server for Obsidian vaults — read, write, search, and surgically edit notes, tags, and frontmatter via the Local REST API plugin. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -39,18 +39,22 @@
|
|
|
39
39
|
"start": "node dist/index.js",
|
|
40
40
|
"start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
|
|
41
41
|
"start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js",
|
|
42
|
+
"release:github": "bun run scripts/release-github.ts",
|
|
42
43
|
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
|
|
43
44
|
},
|
|
44
45
|
"keywords": [
|
|
45
46
|
"mcp",
|
|
46
47
|
"mcp-server",
|
|
47
48
|
"model-context-protocol",
|
|
49
|
+
"stdio",
|
|
50
|
+
"streamable-http",
|
|
48
51
|
"obsidian",
|
|
49
52
|
"obsidian-vault",
|
|
50
53
|
"knowledge-base",
|
|
51
54
|
"note-taking",
|
|
52
55
|
"ai-tools",
|
|
53
|
-
"typescript"
|
|
56
|
+
"typescript",
|
|
57
|
+
"bun"
|
|
54
58
|
],
|
|
55
59
|
"author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/obsidian-mcp-server#readme)",
|
|
56
60
|
"funding": [
|
|
@@ -81,20 +85,20 @@
|
|
|
81
85
|
"access": "public"
|
|
82
86
|
},
|
|
83
87
|
"dependencies": {
|
|
84
|
-
"@cyanheads/mcp-ts-core": "^0.
|
|
88
|
+
"@cyanheads/mcp-ts-core": "^0.10.5",
|
|
85
89
|
"@types/js-yaml": "^4.0.9",
|
|
86
|
-
"js-yaml": "^4.
|
|
90
|
+
"js-yaml": "^4.2.0",
|
|
87
91
|
"pino-pretty": "^13.1.3",
|
|
88
|
-
"undici": "^8.
|
|
92
|
+
"undici": "^8.4.1",
|
|
89
93
|
"zod": "^4.4.3"
|
|
90
94
|
},
|
|
91
95
|
"devDependencies": {
|
|
92
96
|
"@biomejs/biome": "^2.4.16",
|
|
93
|
-
"@types/node": "^25.9.
|
|
97
|
+
"@types/node": "^25.9.3",
|
|
94
98
|
"depcheck": "^1.4.7",
|
|
95
99
|
"ignore": "^7.0.5",
|
|
96
100
|
"tsc-alias": "^1.8.17",
|
|
97
101
|
"typescript": "^6.0.3",
|
|
98
|
-
"vitest": "^4.1.
|
|
102
|
+
"vitest": "^4.1.8"
|
|
99
103
|
}
|
|
100
104
|
}
|
package/server.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/obsidian-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "3.2.
|
|
9
|
+
"version": "3.2.5",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
14
|
"identifier": "obsidian-mcp-server",
|
|
15
15
|
"runtimeHint": "node",
|
|
16
|
-
"version": "3.2.
|
|
16
|
+
"version": "3.2.5",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
19
19
|
"type": "positional",
|
|
@@ -78,6 +78,12 @@
|
|
|
78
78
|
"isRequired": false,
|
|
79
79
|
"default": "false"
|
|
80
80
|
},
|
|
81
|
+
{
|
|
82
|
+
"name": "OBSIDIAN_OMNISEARCH_URL",
|
|
83
|
+
"description": "Override URL for the Omnisearch plugin HTTP server. Unset derives from OBSIDIAN_BASE_URL host with port 51361. Required only if the Omnisearch plugin is not on the default port.",
|
|
84
|
+
"format": "string",
|
|
85
|
+
"isRequired": false
|
|
86
|
+
},
|
|
81
87
|
{
|
|
82
88
|
"name": "MCP_LOG_LEVEL",
|
|
83
89
|
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
@@ -95,7 +101,7 @@
|
|
|
95
101
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
96
102
|
"identifier": "obsidian-mcp-server",
|
|
97
103
|
"runtimeHint": "node",
|
|
98
|
-
"version": "3.2.
|
|
104
|
+
"version": "3.2.5",
|
|
99
105
|
"packageArguments": [
|
|
100
106
|
{
|
|
101
107
|
"type": "positional",
|
|
@@ -160,6 +166,12 @@
|
|
|
160
166
|
"isRequired": false,
|
|
161
167
|
"default": "false"
|
|
162
168
|
},
|
|
169
|
+
{
|
|
170
|
+
"name": "OBSIDIAN_OMNISEARCH_URL",
|
|
171
|
+
"description": "Override URL for the Omnisearch plugin HTTP server. Unset derives from OBSIDIAN_BASE_URL host with port 51361. Required only if the Omnisearch plugin is not on the default port.",
|
|
172
|
+
"format": "string",
|
|
173
|
+
"isRequired": false
|
|
174
|
+
},
|
|
163
175
|
{
|
|
164
176
|
"name": "MCP_HTTP_HOST",
|
|
165
177
|
"description": "The hostname for the HTTP server.",
|