{"name":"io.github.bezata/kobsidian-mcp","slug":"bezata-kobsidian-mcp","title":"kObsidian","description":"Filesystem-first MCP for Obsidian — an LLM-maintained wiki inspired by Karpathy's LLM Wiki.","url":"https://mcp.market/server/bezata-kobsidian-mcp","rating":null,"grade":"B","score":75,"certified":false,"status":"active","category":"productivity","tags":["productivity","ai"],"presence":{"score":38,"stars":8,"forks":1,"downloads_week":119,"last_push_at":"2026-09-09T11:56:27.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/bezata/kObsidian","website":"https://github.com/bezata/kObsidian","version":"0.2.1","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"kobsidian-mcp","version":"0.2.1","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Absolute path to the Obsidian vault this server should operate on.","isRequired":true,"format":"filepath","name":"OBSIDIAN_VAULT_PATH"},{"description":"Base URL of the Obsidian Local REST API plugin. Only required for workspace.* / commands.* / live dataview.query* tools.","default":"https://127.0.0.1:27124","name":"OBSIDIAN_API_URL"},{"description":"Set to 'true' if you've trusted the Local REST API's self-signed certificate.","default":"false","choices":["true","false"],"name":"OBSIDIAN_API_VERIFY_TLS"},{"description":"Bearer key for the Obsidian Local REST API plugin (only needed for REST-bridged tools).","isSecret":true,"name":"OBSIDIAN_REST_API_KEY"}]}],"tools":[{"name":"canvas.addEdge","description":"Connect two nodes in a canvas.","write_action":false,"price_micros":0,"input_schema":null},{"name":"canvas.addNode","description":"Add a text or file node to an Obsidian canvas.","write_action":false,"price_micros":0,"input_schema":null},{"name":"canvas.connections","description":"Get incoming and outgoing edges for a canvas node.","write_action":false,"price_micros":0,"input_schema":null},{"name":"canvas.create","description":"Create a new empty Obsidian canvas (.canvas) file.","write_action":true,"price_micros":0,"input_schema":null},{"name":"canvas.parse","description":"Parse an Obsidian canvas file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"canvas.removeNode","description":"Remove a node and its edges from a canvas.","write_action":true,"price_micros":0,"input_schema":null},{"name":"commands.execute","description":"Execute an Obsidian command by ID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"commands.list","description":"List all available Obsidian commands.","write_action":false,"price_micros":0,"input_schema":null},{"name":"commands.search","description":"Search Obsidian commands by ID or name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dataview.fields.add","description":"Insert a Dataview field into a note.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.fields.extract","description":"Extract scoped Dataview fields from a note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dataview.fields.remove","description":"Remove a Dataview field from a note.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.fields.search","description":"Search notes by Dataview field key and optional value.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dataview.index.read","description":"Read page, list-item, task, DQL, and DataviewJS metadata from a note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dataview.js.read","description":"Extract fenced dataviewjs blocks from a note without executing them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dataview.js.update","description":"Replace one fenced dataviewjs block source-preservingly.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.listByFolder","description":"Run a DQL LIST query for a folder.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.listByTag","description":"Run a DQL LIST query for a tag.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.query","description":"Execute a Dataview Query Language (DQL) query through the Obsidian API.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.query.read","description":"Extract fenced dataview DQL blocks from a note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dataview.query.update","description":"Replace one fenced dataview DQL block source-preservingly.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dataview.table","description":"Run a DQL TABLE query.","write_action":true,"price_micros":0,"input_schema":null},{"name":"kanban.addCard","description":"Add a card to a Kanban column.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kanban.moveCard","description":"Move a card between Kanban columns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kanban.parse","description":"Parse a markdown Kanban board file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kanban.stats","description":"Get card counts and completion rates for a Kanban board.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kanban.toggleCard","description":"Toggle a Kanban card complete/incomplete.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.backlinks","description":"Find notes that link to a target note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.broken","description":"Find broken note links in the vault or a folder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.connections","description":"Explore direct and multi-hop note connections.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.graph","description":"Build the vault link graph.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.health","description":"Summarize link density and broken-link metrics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.hubs","description":"Find notes with many outgoing links.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.orphaned","description":"Find notes with no incoming or outgoing links.","write_action":false,"price_micros":0,"input_schema":null},{"name":"links.outgoing","description":"Extract links referenced by a note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"marp.deck.read","description":"Read Marp deck frontmatter, slides, directives, and source spans.","write_action":false,"price_micros":0,"input_schema":null},{"name":"marp.frontmatter.update","description":"Update selected Marp deck frontmatter fields while preserving unrelated source.","write_action":true,"price_micros":0,"input_schema":null},{"name":"marp.slides.list","description":"List Marp slides with separator and directive metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"marp.slides.read","description":"Read one Marp slide source-preservingly.","write_action":false,"price_micros":0,"input_schema":null},{"name":"marp.slides.update","description":"Replace one Marp slide body without rewriting neighboring slides.","write_action":true,"price_micros":0,"input_schema":null},{"name":"mermaid.blocks.list","description":"List fenced Mermaid blocks in a note or across the vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mermaid.blocks.read","description":"Read one Mermaid block with source spans, directives, and config metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mermaid.blocks.update","description":"Replace one fenced Mermaid block source-preservingly.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.append","description":"Append content to the end of a note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.create","description":"Create a new note using filesystem-first behavior.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.createFolder","description":"Create a folder in the vault.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.delete","description":"Delete a note from the vault.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.info","description":"Get note metadata and lightweight statistics without loading the result into a client-specific schema.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.insertAfterBlock","description":"Insert content after a block reference.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.insertAfterHeading","description":"Insert content immediately after a markdown heading.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.list","description":"List notes in the vault or a folder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.listFolders","description":"List folders in the vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.move","description":"Move a note and optionally update links that reference it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.moveFolder","description":"Move a folder and optionally update links inside the vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.read","description":"Read a note from the vault with parsed metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.search","description":"Search notes by text with lightweight support for tag: and path: filters.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.searchByDate","description":"List notes by created or modified date.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notes.update","description":"Update an existing note, replacing or appending content.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notes.updateFrontmatter","description":"Create or update a frontmatter field.","write_action":true,"price_micros":0,"input_schema":null},{"name":"stats.note","description":"Get statistics for a single note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stats.vault","description":"Get aggregate statistics for the whole vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"system.version","description":"Return the running kObsidian server name, version, and host runtime.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tags.add","description":"Add tags to a note frontmatter block.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tags.analyze","description":"Extract frontmatter and inline tags from a note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tags.list","description":"List unique tags used across the vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tags.remove","description":"Remove tags from frontmatter.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tags.search","description":"Find notes that contain a tag in frontmatter or inline content.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tags.update","description":"Replace or merge a note's frontmatter tags.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tasks.create","description":"Append a task line to a note.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tasks.search","description":"Search Tasks-plugin style markdown tasks across the vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tasks.stats","description":"Get aggregate task statistics for the vault.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tasks.toggle","description":"Toggle a task complete/incomplete by file and line number.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tasks.updateMetadata","description":"Update task dates, priority, or recurrence in place.","write_action":true,"price_micros":0,"input_schema":null},{"name":"templates.createNote","description":"Create a note from a filesystem template.","write_action":true,"price_micros":0,"input_schema":null},{"name":"templates.createNoteTemplater","description":"Create a note from a Templater template via the Obsidian API.","write_action":true,"price_micros":0,"input_schema":null},{"name":"templates.expand","description":"Expand filesystem template variables into content.","write_action":false,"price_micros":0,"input_schema":null},{"name":"templates.insertTemplater","description":"Insert a Templater template into the active note.","write_action":true,"price_micros":0,"input_schema":null},{"name":"templates.list","description":"List markdown templates in a folder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"templates.renderTemplater","description":"Render a Templater template via the Obsidian API.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.indexRebuild","description":"Regenerate the wiki index.md from the current state of Sources/, Concepts/, and Entities/. Groups entries by category; supports optional per-category counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.ingest","description":"File a new source into the wiki: create Sources/<slug>.md with canonical frontmatter, append a log entry, and return proposedEdits for index + related concept/entity pages for the LLM to apply via notes.update.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.init","description":"Scaffold the wiki layout: Sources/, Concepts/, Entities/ folders plus seed index.md, log.md, and wiki-schema.md. Idempotent; use force:true to re-seed index/log/schema files.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.lint","description":"Health-check the wiki: orphans, broken links, stale sources, missing concept pages, singleton tags, and index.md parity. Read-only; returns grouped findings with totals.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.logAppend","description":"Append a typed chronological entry to the wiki log using the convention '## [YYYY-MM-DD] <op> | <title>'. Initializes the wiki if needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.query","description":"Rank wiki pages relevant to a topic using filename, alias, tag, summary and body hits. Returns the top pages so the LLM can drill in with notes.read.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wiki.summaryMerge","description":"Add a cited section into an existing concept or entity page (or create the page with canonical frontmatter if missing). Bumps 'updated' on existing pages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"workspace.activeFile","description":"Get the currently active file in Obsidian.","write_action":false,"price_micros":0,"input_schema":null},{"name":"workspace.closeActiveFile","description":"Close the active file in Obsidian.","write_action":false,"price_micros":0,"input_schema":null},{"name":"workspace.navigateBack","description":"Go back in Obsidian history.","write_action":false,"price_micros":0,"input_schema":null},{"name":"workspace.navigateForward","description":"Go forward in Obsidian history.","write_action":false,"price_micros":0,"input_schema":null},{"name":"workspace.openFile","description":"Open a file in Obsidian.","write_action":false,"price_micros":0,"input_schema":null},{"name":"workspace.toggleEditMode","description":"Toggle edit/preview mode in Obsidian.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":75,"grade":"B","scanned_at":"2026-09-27T21:52:31.431Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T21:52:31.370Z","components":{"code":{"score":20,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 18 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/server/http.js: …eCode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"kobsidian-mcp","version":"0.2.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-04-23T21:29:39.708Z","repositoryUrl":"git+https://github.com/bezata/kObsidian.git","weeklyDownloads":119}],"repo":{"found":true,"owner":"bezata","repo":"kObsidian","archived":false,"pushedAt":"2026-09-09T11:56:27Z","stars":8,"forks":1,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/61169260?v=4","ownerCreatedAt":"2020-02-17T23:50:41Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/61169260?v=4&s=128","source":"github"},"presence":{"stars":8,"forks":1,"downloadsWeek":119,"license":"Apache-2.0","lastPushAt":"2026-09-09T11:56:27.000Z","score":38}}}},"grade_history":[],"reviews":[]}