Skip to content

Commit 8d16829

Browse files
committed
chore(release): 3.2.3 — mcp-ts-core ^0.9.6 → ^0.9.16, AGENTS.md, skill sync
@cyanheads/mcp-ts-core ^0.9.6 → ^0.9.16 (enrichment, HTTP body-size limit, earlier fixes). @biomejs/biome ^2.4.15 → ^2.4.16. AGENTS.md added, byte-identical to CLAUDE.md. format script safe-by-default; format:unsafe added. .mcpbignore excludes skills/ and .agents/. server.json description aligned. skills/migrate-mcp-ts-template removed (pruned upstream). code-simplifier and git-wrapup skills added. Remaining skills and framework scripts resynced. README.md spec version updated to 2025-11-25. manifest.json gains repository/homepage/license. package.json keywords trimmed. Install badge configs normalized (fd256e9, d56e003). Version bumped to 3.2.3.
1 parent 9214c46 commit 8d16829

36 files changed

Lines changed: 1729 additions & 423 deletions

File tree

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# MCP_HTTP_HOST=127.0.0.1 # HTTP host (default: 127.0.0.1)
55
# MCP_HTTP_ENDPOINT_PATH=/mcp # HTTP endpoint path (default: /mcp)
66
# MCP_PUBLIC_URL= # Public origin behind a TLS-terminating proxy (e.g. https://mcp.example.com)
7+
# MCP_HTTP_MAX_BODY_BYTES=1048576 # Max inbound request body size (default: 1 MiB). Bump for large note writes; set 0 to defer to runtime/proxy.
78

89
# ── Auth ──────────────────────────────────────────────────────────────
910
# MCP_AUTH_MODE=none # none | jwt | oauth (default: none)

.mcpbignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
.env*
22
.mcpregistry_*
33
.claude/
4+
.agents/
5+
skills/
46
Dockerfile
57
bun.lock
68
bunfig.toml

AGENTS.md

Lines changed: 403 additions & 0 deletions
Large diffs are not rendered by default.

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
All notable changes to this project. Each entry links to its full per-version file in [changelog/](changelog/).
44

5+
## [3.2.3](changelog/3.2.x/3.2.3.md) — 2026-05-29
6+
7+
Enrichment block on search/list tools, mcp-ts-core ^0.9.6 → ^0.9.16, skill sync, format script safe-by-default
8+
59
## [3.2.2](changelog/3.2.x/3.2.2.md) — 2026-05-23
610

711
mcp-ts-core ^0.9.1 → ^0.9.6; format-parity fixes on search_notes and get_note; manifest.json + .mcpbignore scaffolded for MCPB bundle support; install badges added to README.

CLAUDE.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Agent Protocol
22

33
**Server:** obsidian-mcp-server
4-
**Version:** 3.2.2
5-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.6`
4+
**Version:** 3.2.3
5+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.16`
66
**Engines:** Bun ≥1.3.11, Node ≥24.0.0
77
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
88
**Zod:** ^4.4.3
@@ -39,6 +39,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
3939
- **Secrets in env vars only.** `OBSIDIAN_API_KEY` is required; never hardcoded.
4040
- **Command-palette tools are opt-in.** `obsidian_list_commands` and `obsidian_execute_command` are callable only when `OBSIDIAN_ENABLE_COMMANDS=true` — Obsidian commands are opaque and can be destructive. When the flag is unset, the entry point wraps both with `disabledTool()` so they're absent from `tools/list` (LLM can't invoke) but visible in the operator-facing manifest with a hint to enable them.
4141
- **Path-policy gating goes through `PathPolicy`.** Every path-taking method on `ObsidianService` calls `policy.assertReadable` / `assertWritable` before the upstream HTTP call; `obsidian_search_notes` post-filters hits via `svc.policy.filterReadable`. Don't bypass this — `OBSIDIAN_READ_PATHS` / `OBSIDIAN_WRITE_PATHS` / `OBSIDIAN_READ_ONLY` are the single chokepoint, and `path_forbidden` is declared on every path-taking tool's `errors[]` contract.
42+
- **Close the loop on issues.** When implementing work tracked by a GitHub issue, comment on the issue with what landed and close it. Do both — a comment without a close leaves stale issues open; a close without a comment leaves no record of what shipped. The comment is for future readers — state the concrete changes, not the conversation that produced them.
4243

4344
---
4445

@@ -293,19 +294,21 @@ Available skills:
293294
| `add-test` | Scaffold test file for a tool, resource, or service |
294295
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
295296
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
296-
| `tool-defs-analysis` | Audit MCP definition language across tools/resources/prompts — voice, leaks, defaults, recovery hints, sparsity, structure |
297+
| `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
298+
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
299+
| `devcheck` | Lint, format, typecheck, audit |
297300
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
301+
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
298302
| `release-and-publish` | Ship a release end-to-end across npm, MCP Registry, GitHub Releases (`.mcpb`), and GHCR |
299303
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
300-
| `migrate-mcp-ts-template` | Migrate a `mcp-ts-template` fork to depend on `@cyanheads/mcp-ts-core` as a package |
301304
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
302305
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
303306
| `api-auth` | Auth modes, scopes, JWT/OAuth |
304307
| `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
305308
| `api-config` | AppConfig, parseConfig, env vars |
306309
| `api-context` | Context interface, logger, state, progress |
307310
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
308-
| `api-linter` | MCP definition linter rule reference (`bun run lint:mcp` failures) |
311+
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
309312
| `api-services` | LLM, Speech, Graph services |
310313
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
311314
| `api-testing` | createMockContext, test patterns |
@@ -326,10 +329,11 @@ When you complete a skill's checklist, check the boxes and add a completion time
326329
| `bun run rebuild` | Clean + build |
327330
| `bun run clean` | Remove build artifacts |
328331
| `bun run devcheck` | Lint + format + typecheck + security + changelog sync |
329-
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit. Use when `devcheck` flags a transitive advisory — stale lockfile can mask already-patched deps. If advisory survives, it's real. |
332+
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, and re-run `bun audit`. Use when `devcheck` flags a transitive advisory — Bun's `update` is sticky on transitive resolutions, so the advisory may be a stale-lockfile false positive. If it survives the refresh, it's real. |
330333
| `bun run tree` | Generate `docs/tree.md` |
331334
| `bun run list-skills` | Print project skill index (name, version, description) |
332-
| `bun run format` | Auto-fix formatting (Biome) |
335+
| `bun run format` | Auto-fix formatting (safe fixes only) |
336+
| `bun run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
333337
| `bun run lint:mcp` | Validate MCP definitions against the linter rules |
334338
| `bun run lint:packaging` | Validate env var alignment between `manifest.json` and `server.json` |
335339
| `bun run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<div align="center">
99

10-
[![Version](https://img.shields.io/badge/Version-3.2.2-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/obsidian-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/obsidian-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/obsidian-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.11-blueviolet.svg?style=flat-square)](https://bun.sh/)
10+
[![Version](https://img.shields.io/badge/Version-3.2.3-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/obsidian-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/obsidian-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/obsidian-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.11-blueviolet.svg?style=flat-square)](https://bun.sh/)
1111

1212
</div>
1313

@@ -63,7 +63,7 @@ Up to three search modes selected by `mode`:
6363
- `jsonlogic` — JSONLogic tree evaluated against `path`, `content`, `frontmatter.<key>`, `tags`, and `stat.{ctime,mtime,size}`; custom `glob` and `regexp` operators
6464
- `omnisearch` — BM25-ranked search via the community [Omnisearch](https://github.com/scambier/obsidian-omnisearch) plugin. Supports quoted phrases, `-exclusion`, `path:` / `ext:` filters, typo tolerance, and PDF + OCR coverage (via [Text Extractor](https://github.com/scambier/obsidian-text-extractor)). Only present in the mode enum when the plugin's HTTP server is reachable at startup; the upstream hard-caps results at 50 — narrow the query to surface more (the response carries `truncated: true` when the cap was likely hit).
6565

66-
Results paginate via opaque cursors per the [MCP 2025-06-18 spec](https://modelcontextprotocol.io/specification/2025-06-18/utils/pagination): omit `cursor` for the first page, then pass `nextCursor` from the prior response. Every result carries `totalCount` (post-path-policy, pre-pagination); `nextCursor` is omitted on the last page. Text-mode hits are additionally clipped per file at `maxMatchesPerHit` (default 10) so a single match-heavy note can't blow the response budget — clipped hits carry `truncated: true` and `totalMatches`.
66+
Results paginate via opaque cursors per the [MCP 2025-11-25 spec](https://modelcontextprotocol.io/specification/2025-11-25/utils/pagination): omit `cursor` for the first page, then pass `nextCursor` from the prior response. Every result carries `totalCount` (post-path-policy, pre-pagination); `nextCursor` is omitted on the last page. Text-mode hits are additionally clipped per file at `maxMatchesPerHit` (default 10) so a single match-heavy note can't blow the response budget — clipped hits carry `truncated: true` and `totalMatches`.
6767

6868
---
6969

@@ -195,7 +195,7 @@ Obsidian-specific:
195195
- Wraps the [Obsidian Local REST API](https://github.com/coddingtonbear/obsidian-local-rest-api) plugin — typed client, deterministic error mapping
196196
- Section-aware editing across headings, block references, and frontmatter fields via `PATCH`-with-target operations
197197
- Tag reconciliation across both representations: frontmatter `tags:` array and inline `#tag` syntax (skipping fenced code blocks)
198-
- Search across up to three modes: text, JSONLogic, and (when the plugin is reachable) BM25-ranked Omnisearch — cursor-paginated per the MCP 2025-06-18 spec, with per-file match clipping in text mode
198+
- Search across up to three modes: text, JSONLogic, and (when the plugin is reachable) BM25-ranked Omnisearch — cursor-paginated per the MCP 2025-11-25 spec, with per-file match clipping in text mode
199199
- Optional human-in-the-loop confirmation for destructive deletes via `ctx.elicit`
200200
- Folder-scoped read/write permissions via `OBSIDIAN_READ_PATHS` / `OBSIDIAN_WRITE_PATHS` and a global `OBSIDIAN_READ_ONLY` kill switch — denies are typed `path_forbidden` with the active scope echoed back in the error data
201201
- Opt-in command-palette pair (`obsidian_list_commands` + `obsidian_execute_command`) — registered only when `OBSIDIAN_ENABLE_COMMANDS=true`

0 commit comments

Comments
 (0)