seekstone
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SEEKSTONE_VAULT | Yes | Absolute path to your Obsidian vault. | |
| SEEKSTONE_LOG_FILE | No | Absolute path; when set, JSON-line logs are appended here (size-rotated). | |
| SEEKSTONE_LOG_LEVEL | No | Log level: error | warn | info (default) | debug. | |
| SEEKSTONE_WATCH_POLL | No | Set to '1' to stat-poll for changes instead of native OS events. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| searchA | Full-text search across the vault. Returns ranked excerpts (~120 chars, tunable) — not full notes — to minimise context usage. Supports fuzzy matching and prefix search; with SEEKSTONE_SEMANTIC=1, mode "semantic"/"hybrid" searches by meaning via a local embedding model. |
| query_notesA | Structured metadata query — filter notes by frontmatter key/value predicates, tag, folder, modified time, and size. Returns compact rows (path + title by default; opt into more via select), not note content. Use this instead of search when filtering by properties rather than text. |
| context_packA | Assemble everything needed to ANSWER a natural-language question in one call, under a strict byte budget (default 2048): ranked excerpts, linked neighbor notes (backlinks/outlinks) with one-line summaries, and follow-up source paths. Use search to locate notes and query_notes for metadata filters; use context_pack when you want answer-ready context without multiple round-trips. Empty excerpts with confidence "none" or "low" means the vault lacks coverage — do not infer content. |
| read_noteA | Read a note or a span of it — by heading section, block reference, or line range. Returns structured JSON with the content, bytes returned, total note size, and a contentHash to pass as prevHash to edit tools for compare-and-swap. Use search or outline_note first to find the right path and section names. |
| list_notesB | List notes, optionally filtered by folder prefix or tag. |
| list_tagsA | List all tags in the vault with usage counts. Supports substring filtering, minimum count threshold, and sort order. Nested tags (e.g. area/work) include a parent field. |
| create_noteA | Create a new note at a vault-relative path. Optionally sets frontmatter and body content. Parent directories are created automatically. Fails if the note already exists unless overwrite is true (prevHash may guard the overwrite). |
| delete_noteA | Delete a note. By default it is moved to the vault .trash/ folder (recoverable by moving it back); pass permanent: true to remove it outright. |
| move_noteA | Move or rename a note to a new vault-relative path, rewriting wikilinks and markdown links in other notes that point at it so nothing breaks (links inside fenced code blocks are left alone). Parent directories at the destination are created automatically. Fails if the destination already exists unless overwrite is true. |
| rename_headingA | Rename a heading in a note and rewrite every [[note#heading]] wikilink and embed across the vault so references keep working — aliases preserved, fenced code blocks left alone. Served from the warm backlink index, no vault scan. Heading matching is case-insensitive; with duplicate headings the first match wins, mirroring Obsidian link resolution. |
| append_noteA | Append text to a note body without touching the frontmatter. Safe for meeting notes, daily logs, and append-only workflows. |
| patch_frontmatterA | Set, update, or delete frontmatter keys without reordering existing keys or changing quote style. Pass null as a value to delete a key. |
| outline_noteA | Return a note's structure — heading tree with offsets, block-reference anchors, and frontmatter key list — without returning any prose. Use this before section reads or patches to discover what sections exist at a fraction of the cost of reading the full note. |
| patch_noteA | Surgically edit a section of a note — targeted by heading or block reference — without rewriting the whole file. Operations: append (add after section), prepend (add after heading line), replace (swap section content). Frontmatter is never touched. |
| get_backlinksA | Return every note that links to the target note, with the source line and an optional excerpt. Results come from the pre-built reverse-link index so this is a fast, pure index lookup. Sort order: source path ascending. |
| get_linksA | Return all outgoing wikilinks and embeds from a note. Each link is marked resolved (with target path) or unresolved. Duplicate targets are de-duplicated; results sorted by line number. |
| replace_in_noteA | Find and replace text within a note body. Supports literal and regex search, case sensitivity, whole-word matching, and a replacement limit. Frontmatter is never touched. Use dryRun to preview matches before writing. |
| get_periodic_noteA | Get the path and existence status of a periodic note (daily, weekly, monthly, quarterly, or yearly) for a given date. Reads folder/format config from .obsidian/daily-notes.json (daily) or the periodic-notes plugin data.json. Optionally creates the note from the configured template if it is missing. |
| append_periodic_noteA | Append text to a periodic note (daily, weekly, monthly, quarterly, or yearly). Preserves existing frontmatter exactly. Creates the note first (from template if configured) when createIfMissing is true (default). |
| list_writesA | List recent writes from the journal — every write tool records the pre-image of each file it touches, so any of them can be reverted with undo_write. Returns compact metadata rows (seq, timestamp, tool, paths, undoable), never note content. |
| undo_writeA | Revert a journaled write: restores every file it touched to its byte-identical pre-write state (a multi-file move or heading rename is restored whole; a delete is restored even if it was permanent). Defaults to the most recent undoable write. Refuses with undo_conflict if a file changed since that write, unless force: true. The undo is itself journaled — undo it to redo. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Most tools have clearly distinct purposes — search vs. query_notes vs. list_notes are separated by text, metadata, and folder/tag listing, and the edit tools are differentiated by scope. A few pairs like list_notes/query_notes and append_note/patch_note/replace_in_note could require careful reading, but the descriptions mostly resolve the ambiguity.
The set largely follows a verb_noun snake_case convention: get_*, list_*, append_*, patch_*, and create/delete/move/rename are all predictable. Exceptions like search, context_pack, and replace_in_note introduce minor inconsistency but do not undermine readability.
21 tools is on the heavier side, but the count is justified by the broad scope of vault operations: searching, reading, linking, editing, periodic notes, and undo/journaling. Each tool has a real job, so the set feels comprehensive rather than padded.
The surface covers the full note lifecycle — create, read, update via multiple surgical edit tools, delete, move, rename, search, metadata querying, link management, periodic notes, and journaled undo. No critical dead ends or obvious missing operations are apparent for an Obsidian-style note vault.