{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github_mcp-cyanheads-obsidian-mcp-server","slug":"mcp-cyanheads-obsidian-mcp-server","name":"obsidian-mcp-server","type":"mcp","url":"https://github.com/cyanheads/obsidian-mcp-server","page_url":"https://unfragile.ai/mcp-cyanheads-obsidian-mcp-server","categories":["mcp-servers"],"tags":["ai-tools","knowledge-base","llm","llm-agent","mcp","model-context-protocol","note-taking","obsidian","typescript"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_0","uri":"capability://tool.use.integration.mcp.compliant.vault.bridging.via.stdio.and.http.transports","name":"mcp-compliant vault bridging via stdio and http transports","description":"Implements dual-transport MCP server architecture (stdio for local CLI/IDE integration, HTTP for remote agents) that translates MCP protocol messages into Obsidian Local REST API calls. Uses @modelcontextprotocol/sdk with a layered transport abstraction pattern, maintaining separate Server instances per transport mode while sharing a unified service layer for vault operations. Stdio transport creates persistent process-based communication for tools like Claude Desktop; HTTP transport exposes the same MCP tools over REST with configurable CORS and authentication.","intents":["Connect Claude Desktop or other MCP clients to my Obsidian vault without manual scripting","Enable remote AI agents to access my notes via HTTP while keeping the vault on a local machine","Integrate Obsidian vault operations into existing development workflows and CI/CD pipelines","Expose vault capabilities to multiple concurrent MCP clients with proper isolation and authentication"],"best_for":["AI agent developers building Claude/GPT-based knowledge management workflows","Teams integrating Obsidian as a centralized knowledge backend for LLM applications","Solo developers wanting local-first AI-assisted note management without cloud sync"],"limitations":["Requires Obsidian Local REST API plugin running on ports 27123/27124 — no direct file system access","HTTP transport adds network latency and requires explicit CORS configuration for cross-origin clients","Stdio transport is single-client per process — concurrent connections require multiple server instances","No built-in persistence or caching of vault state — relies entirely on Obsidian REST API for consistency"],"requires":["Obsidian Desktop Application (any recent version)","Obsidian Local REST API plugin installed and enabled","Node.js 18+ for running the MCP server","TypeScript runtime or compiled JavaScript output","API key or authentication token if HTTP transport is exposed beyond localhost"],"input_types":["MCP tool invocation messages (JSON-RPC 2.0 format)","HTTP POST requests with JSON payloads","Stdio-based MCP protocol messages"],"output_types":["MCP tool result messages (JSON-RPC 2.0 responses)","HTTP JSON responses with vault operation results","Structured metadata (frontmatter, tags, file listings)"],"categories":["tool-use-integration","mcp-server"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_1","uri":"capability://memory.knowledge.vault.aware.note.reading.with.metadata.extraction","name":"vault-aware note reading with metadata extraction","description":"Implements obsidian_read_note tool that retrieves file content and YAML frontmatter metadata via the Obsidian REST API's /vault/read endpoint, with automatic parsing of frontmatter using YAML deserialization. Supports reading by file path with optional directory filtering and returns structured output containing raw content, parsed frontmatter object, and file metadata (creation/modification timestamps). Uses schema validation to ensure path safety and prevent directory traversal attacks.","intents":["Retrieve the full content and metadata of a specific note for AI analysis or summarization","Extract YAML frontmatter fields (tags, properties, custom metadata) from notes programmatically","Build context for LLM agents by reading related notes with their structured metadata","Verify note existence and access permissions before performing write operations"],"best_for":["LLM agents building knowledge graphs from Obsidian vaults","Developers implementing note-aware search or recommendation systems","Knowledge workers automating metadata extraction from large note collections"],"limitations":["Returns entire file content in memory — large notes (>10MB) may cause performance degradation","YAML frontmatter parsing is strict — malformed YAML will cause the tool to fail rather than gracefully degrade","No streaming support — entire note must be loaded before returning to client","Metadata extraction is limited to YAML frontmatter — inline metadata or custom formats are not parsed"],"requires":["Obsidian Local REST API plugin with /vault/read endpoint enabled","Valid file path relative to vault root","Read permissions on the target file (enforced by Obsidian)"],"input_types":["file_path: string (relative to vault root, e.g., 'folder/note.md')"],"output_types":["JSON object with keys: content (string), frontmatter (object), metadata (timestamps, file size)"],"categories":["memory-knowledge","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_10","uri":"capability://safety.moderation.input.sanitization.and.schema.validation.with.redos.prevention","name":"input sanitization and schema validation with redos prevention","description":"Implements multi-layer input validation using JSON Schema validation for all MCP tool parameters, regex pattern analysis to detect ReDoS vulnerabilities, and path traversal prevention via path normalization and allowlist checking. Validates file paths against vault root to prevent directory traversal attacks, sanitizes regex patterns before passing to Obsidian's search engine, and enforces content size limits. Uses zod or similar schema validation library with custom validators for domain-specific constraints.","intents":["Prevent malicious or malformed inputs from corrupting the vault or causing denial-of-service","Detect and block regex patterns that could cause performance degradation (ReDoS attacks)","Prevent directory traversal attacks that could access files outside the vault","Validate all user inputs before passing to Obsidian REST API"],"best_for":["Security-conscious teams deploying obsidian-mcp-server with untrusted clients","Developers implementing HTTP transport exposed to the internet","Teams with compliance requirements (SOC 2, HIPAA) for input validation"],"limitations":["ReDoS detection is heuristic-based — complex patterns may not be detected","Path traversal prevention is based on path normalization — symlinks may bypass checks","Schema validation adds ~5-10ms latency per request — not suitable for ultra-low-latency scenarios","Content size limits are enforced by server — very large notes may be rejected"],"requires":["JSON Schema validator (zod, ajv, or similar)","Regex analysis library (safe-regex or similar)","Node.js 18+ for path normalization APIs"],"input_types":["MCP tool parameters (any type)"],"output_types":["Validation errors with detailed messages, or validated/sanitized parameters"],"categories":["safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_11","uri":"capability://memory.knowledge.vault.state.caching.with.invalidation.strategy","name":"vault state caching with invalidation strategy","description":"Implements VaultCacheService that maintains an in-memory cache of frequently accessed vault metadata (file listings, search results, frontmatter) with configurable TTL-based invalidation. Supports manual cache invalidation on write operations (note updates, deletions) to maintain consistency. Uses LRU eviction policy to prevent unbounded memory growth. Cache keys are based on operation parameters (path, search query, etc.) enabling fine-grained invalidation.","intents":["Reduce latency for repeated vault queries by caching results in memory","Improve performance of agents that repeatedly access the same notes or search results","Implement efficient vault state tracking without polling Obsidian REST API","Enable fast context building for LLM agents by caching vault structure"],"best_for":["High-throughput MCP servers handling many concurrent requests","Agents performing repeated queries on the same vault data","Deployments where Obsidian REST API latency is a bottleneck"],"limitations":["Cache is in-memory only — lost on server restart, no persistence","TTL-based invalidation may serve stale data if Obsidian is updated externally","LRU eviction is not aware of access patterns — frequently accessed items may be evicted","Cache invalidation is manual — write operations must explicitly invalidate related cache entries"],"requires":["Node.js 18+ for Map-based LRU implementation","Configurable cache TTL (default: 5-60 seconds)","Optional: external cache backend (Redis) for distributed caching"],"input_types":["Cache key (operation parameters: path, query, etc.)"],"output_types":["Cached result or cache miss (triggers fresh query)"],"categories":["memory-knowledge","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_12","uri":"capability://tool.use.integration.modular.tool.registration.and.extensibility.framework","name":"modular tool registration and extensibility framework","description":"Implements tool registration system where each MCP tool (obsidian_read_note, obsidian_update_note, etc.) is defined as a separate module with standardized interface: name, description, input schema, and handler function. Tools are registered with the MCP server via a registry pattern, enabling dynamic tool discovery and addition of custom tools without modifying core server code. Each tool module exports its schema and handler independently, allowing tools to be tested, versioned, and deployed separately.","intents":["Add custom tools to the MCP server without modifying core code","Test individual tools in isolation without running the full server","Version and deploy tools independently from the server","Enable community contributions of new tools via plugin-like architecture"],"best_for":["Teams extending obsidian-mcp-server with custom vault operations","Developers building tool plugins for specific workflows","Open-source communities contributing new tools to the project"],"limitations":["Tool registration is static at server startup — no runtime tool addition","No tool versioning — multiple versions of the same tool cannot coexist","Custom tools must follow the standard interface — incompatible tools require adapters","No tool dependency management — tools cannot declare dependencies on other tools"],"requires":["TypeScript knowledge for implementing tool modules","Understanding of MCP tool schema format (JSON Schema)","Node.js 18+ for module loading"],"input_types":["Tool module with: name, description, inputSchema, handler function"],"output_types":["Registered tool available to MCP clients"],"categories":["tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_2","uri":"capability://search.retrieval.vault.wide.full.text.search.with.regex.and.content.filtering","name":"vault-wide full-text search with regex and content filtering","description":"Implements obsidian_global_search tool that executes vault-wide content searches via Obsidian REST API's /search/simple endpoint, supporting both plain-text and regex pattern matching with optional result filtering by file type, path prefix, or tag. Returns ranked search results with file paths, matching line snippets, and match positions. Uses schema validation to sanitize regex patterns and prevent ReDoS attacks, with configurable result limits to prevent memory exhaustion.","intents":["Find all notes containing a specific concept or keyword across the entire vault","Locate notes matching a complex pattern (e.g., all notes with TODO items or specific metadata patterns)","Build context for LLM agents by retrieving relevant notes based on semantic queries","Implement vault-wide refactoring by finding all occurrences of a term before bulk replacement"],"best_for":["LLM agents performing knowledge retrieval for question-answering tasks","Developers building semantic search or note recommendation features","Knowledge workers performing bulk operations across large vault collections"],"limitations":["Regex patterns are evaluated by Obsidian's search engine (not Node.js) — regex dialect differences may cause unexpected behavior","Search results are limited to a configurable maximum (typically 100-1000) — very broad queries may truncate results","No ranking by relevance — results are returned in file system order, not semantic relevance","Search index may be stale if Obsidian hasn't finished indexing recent changes"],"requires":["Obsidian Local REST API plugin with /search/simple endpoint enabled","Vault must be indexed by Obsidian (automatic, but may take time for large vaults)","Valid regex pattern if using regex mode (must compile in Obsidian's regex engine)"],"input_types":["query: string (plain text or regex pattern)","useRegex: boolean (optional, defaults to false)","limit: number (optional, max results to return)"],"output_types":["JSON array of search results, each containing: file path, matching lines, match positions"],"categories":["search-retrieval","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_3","uri":"capability://text.generation.language.content.aware.note.updating.with.append.prepend.overwrite.modes","name":"content-aware note updating with append/prepend/overwrite modes","description":"Implements obsidian_update_note tool that modifies note content via Obsidian REST API's /vault/modify endpoint with three distinct modes: append (add content to end), prepend (add content to start), or overwrite (replace entire content). Preserves YAML frontmatter during updates and supports atomic multi-line insertions. Uses schema validation to prevent path traversal and enforces content size limits to prevent vault corruption.","intents":["Append new entries to a note (e.g., daily logs, task lists) without overwriting existing content","Prepend headers or metadata to notes while preserving the original content","Completely replace note content for refactoring or bulk updates","Implement AI-assisted note editing where agents modify notes based on user intent"],"best_for":["LLM agents implementing note-taking assistants or automated journaling","Developers building append-only logging systems on top of Obsidian","Knowledge workers automating bulk note updates or migrations"],"limitations":["Overwrite mode destroys existing content — no undo support beyond Obsidian's file history","No conflict detection — concurrent updates from multiple clients may cause data loss","Content size limits are enforced by Obsidian REST API — very large updates may fail","Frontmatter is preserved but not validated — malformed YAML in frontmatter may cause issues"],"requires":["Obsidian Local REST API plugin with /vault/modify endpoint enabled","Write permissions on the target file","Valid file path relative to vault root"],"input_types":["file_path: string (relative to vault root)","content: string (new content to add or replace)","mode: 'append' | 'prepend' | 'overwrite'"],"output_types":["JSON object with success status and updated file metadata"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_4","uri":"capability://text.generation.language.regex.based.search.and.replace.with.validation","name":"regex-based search and replace with validation","description":"Implements obsidian_search_replace tool that performs targeted text and regex replacements within a single note via Obsidian REST API's /vault/modify endpoint with search pattern validation. Supports both literal string and regex pattern matching with optional case-insensitive and global flags. Validates regex patterns before execution to prevent ReDoS attacks, and returns match count and preview of changes before applying. Uses atomic updates to ensure consistency.","intents":["Refactor note content by replacing specific text patterns or outdated terminology","Implement bulk find-and-replace operations for note migration or standardization","Correct formatting issues or normalize metadata across notes","Enable AI agents to make targeted edits to notes based on semantic understanding"],"best_for":["Developers automating note refactoring or bulk updates","LLM agents implementing note editing with pattern-based transformations","Knowledge workers standardizing note formatting or terminology"],"limitations":["Operates on single notes only — no cross-note replacements without multiple calls","Regex patterns are validated but complex patterns may have performance implications on large notes","No preview mode — replacements are applied immediately without user confirmation","Case-insensitive matching is limited to ASCII characters — Unicode case folding not supported"],"requires":["Obsidian Local REST API plugin with /vault/modify endpoint enabled","Write permissions on the target file","Valid regex pattern (validated by server before execution)"],"input_types":["file_path: string (relative to vault root)","search_pattern: string (literal or regex)","replacement: string (literal or regex backreferences)","use_regex: boolean (optional, defaults to false)","case_insensitive: boolean (optional, defaults to false)","global: boolean (optional, replace all occurrences)"],"output_types":["JSON object with match count, replaced content preview, and success status"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_5","uri":"capability://data.processing.analysis.yaml.frontmatter.crud.operations.with.schema.validation","name":"yaml frontmatter crud operations with schema validation","description":"Implements obsidian_manage_frontmatter tool that performs create, read, update, and delete operations on YAML frontmatter fields via Obsidian REST API. Parses existing frontmatter, applies field-level modifications (add, update, delete, or replace entire frontmatter), and re-serializes to YAML with proper formatting. Uses schema validation to ensure valid YAML structure and prevents injection attacks. Supports nested field access via dot notation (e.g., 'metadata.author').","intents":["Add or update metadata fields (tags, properties, custom fields) in note frontmatter","Extract specific frontmatter fields for use in downstream processing","Bulk update frontmatter across notes (e.g., add creation date, update status field)","Implement AI-assisted metadata tagging where agents assign properties based on note content"],"best_for":["LLM agents implementing metadata-aware note management","Developers building metadata-driven workflows on top of Obsidian","Knowledge workers automating metadata standardization across vaults"],"limitations":["Nested field access via dot notation is limited — complex YAML structures may not parse correctly","YAML formatting is normalized during updates — custom formatting (comments, ordering) is not preserved","No schema enforcement — any valid YAML is accepted, even if it violates application-specific constraints","Field deletion is permanent — no undo support beyond Obsidian's file history"],"requires":["Obsidian Local REST API plugin with /vault/modify endpoint enabled","Write permissions on the target file","Valid YAML syntax for new frontmatter values"],"input_types":["file_path: string (relative to vault root)","operation: 'read' | 'add' | 'update' | 'delete' | 'replace'","field: string (field name, supports dot notation for nested fields)","value: any (new value for add/update operations)"],"output_types":["JSON object with current frontmatter state, operation result, and updated file metadata"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_6","uri":"capability://data.processing.analysis.tag.management.across.frontmatter.and.inline.syntax","name":"tag management across frontmatter and inline syntax","description":"Implements obsidian_manage_tags tool that adds, removes, and lists tags in both YAML frontmatter ('tags' field) and inline Obsidian syntax (#tag). Automatically detects tag location (frontmatter vs inline) and applies modifications to the appropriate location. Supports bulk tag operations and tag normalization (lowercase, slug format). Uses schema validation to ensure valid tag format and prevents duplicate tags.","intents":["Add or remove tags from notes for categorization and discovery","Bulk update tags across notes (e.g., rename a tag, add a new category tag)","Extract all tags from a note for use in downstream processing","Implement AI-assisted tagging where agents assign tags based on note content analysis"],"best_for":["LLM agents implementing auto-tagging or note categorization","Developers building tag-based search or recommendation systems","Knowledge workers automating tag standardization across vaults"],"limitations":["Tag normalization is optional — inconsistent tag casing may cause duplicates if not normalized","Inline tag detection is regex-based — edge cases (tags in code blocks, comments) may be incorrectly identified","No tag hierarchy support — nested tags (e.g., 'project/active') are treated as single tags","Bulk operations are not atomic — partial failures may leave tags in inconsistent state"],"requires":["Obsidian Local REST API plugin with /vault/modify endpoint enabled","Write permissions on the target file","Valid tag format (alphanumeric, hyphens, underscores)"],"input_types":["file_path: string (relative to vault root)","operation: 'add' | 'remove' | 'list' | 'replace'","tags: string[] (array of tag names)","normalize: boolean (optional, convert to lowercase/slug format)"],"output_types":["JSON object with current tags (frontmatter and inline), operation result, and updated file metadata"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_7","uri":"capability://search.retrieval.directory.listing.with.recursive.traversal.and.filtering","name":"directory listing with recursive traversal and filtering","description":"Implements obsidian_list_notes tool that enumerates vault files via Obsidian REST API's /vault/list endpoint with support for recursive directory traversal, file type filtering (markdown, images, etc.), and path prefix filtering. Returns structured file metadata including paths, file types, creation/modification timestamps, and optional file sizes. Uses schema validation to prevent directory traversal attacks and supports pagination for large directories.","intents":["Discover all notes in a vault or specific folder for bulk processing","Build a vault structure map for navigation or context building","Filter notes by type or path pattern for targeted operations","Implement vault-aware agents that understand the note hierarchy"],"best_for":["LLM agents building knowledge graphs or vault structure understanding","Developers implementing vault navigation or file discovery features","Knowledge workers automating bulk operations on filtered note sets"],"limitations":["Recursive listing can be slow for large vaults (>10k files) — pagination is recommended","File type detection is based on extension — files without extensions may be misclassified","No sorting options — results are returned in file system order","Symlinks and aliases are not resolved — may return duplicate entries"],"requires":["Obsidian Local REST API plugin with /vault/list endpoint enabled","Read permissions on the target directory","Valid directory path relative to vault root"],"input_types":["path: string (directory path relative to vault root, optional)","recursive: boolean (optional, defaults to false)","file_types: string[] (optional, filter by extension: 'md', 'png', etc.)","limit: number (optional, max results to return)"],"output_types":["JSON array of file objects with: path, type, created_at, modified_at, size (optional)"],"categories":["search-retrieval","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_8","uri":"capability://automation.workflow.atomic.file.deletion.with.safety.validation","name":"atomic file deletion with safety validation","description":"Implements obsidian_delete_note tool that removes files from the vault via Obsidian REST API's /vault/delete endpoint with optional safety checks (confirmation flag, path validation). Supports deletion of individual files or entire directories with recursive flag. Uses schema validation to prevent accidental deletion of critical files and enforces path safety to prevent directory traversal attacks.","intents":["Remove notes that are no longer needed or have been archived","Implement cleanup workflows that delete notes matching specific criteria","Enable AI agents to manage vault size by removing obsolete content","Bulk delete notes as part of vault reorganization or migration"],"best_for":["Developers implementing vault cleanup or archival workflows","LLM agents managing vault size or implementing retention policies","Knowledge workers automating bulk deletion of archived or obsolete notes"],"limitations":["Deletion is permanent — no undo support beyond Obsidian's file history or system trash","Recursive deletion of directories is not atomic — partial failures may leave orphaned files","No confirmation dialog — deletions are applied immediately","Safety checks are optional — agents can bypass validation if not careful"],"requires":["Obsidian Local REST API plugin with /vault/delete endpoint enabled","Write permissions on the target file or directory","Valid file path relative to vault root"],"input_types":["file_path: string (relative to vault root)","recursive: boolean (optional, for directory deletion)","confirm: boolean (optional, safety flag)"],"output_types":["JSON object with success status and deleted file path"],"categories":["automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-cyanheads-obsidian-mcp-server__cap_9","uri":"capability://automation.workflow.request.scoped.context.and.observability.with.structured.logging","name":"request-scoped context and observability with structured logging","description":"Implements request context tracking via RequestContext class that assigns unique IDs to each MCP tool invocation and propagates context through the entire call stack (transport layer → services → Obsidian REST API calls). Integrates structured logging with context injection, enabling correlation of logs across multiple service calls. Uses async-local-storage pattern to maintain context without explicit parameter passing. Logs all Obsidian REST API calls with request/response details and error information.","intents":["Debug complex multi-step vault operations by tracing request flow through the system","Correlate logs from multiple service calls to understand failure modes","Monitor MCP server performance by tracking request latency and error rates","Implement observability dashboards that aggregate logs by request context"],"best_for":["DevOps engineers deploying obsidian-mcp-server in production","Developers debugging complex vault operations or integration issues","Teams implementing centralized logging and monitoring for MCP servers"],"limitations":["Async-local-storage has performance overhead (~1-2% latency per request) — not suitable for ultra-high-throughput scenarios","Context is lost across process boundaries — distributed tracing requires external correlation","Logging is synchronous — high-volume logging may block event loop","No built-in metrics collection — requires external tools (Prometheus, DataDog) for monitoring"],"requires":["Node.js 18+ with async-local-storage support","Structured logging library (winston, pino, or similar)","Optional: centralized logging backend (ELK, Datadog, CloudWatch)"],"input_types":["MCP tool invocation (automatic context generation)"],"output_types":["Structured log entries with context ID, timestamp, service name, and operation details"],"categories":["automation-workflow","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":46,"verified":false,"data_access_risk":"high","permissions":["Obsidian Desktop Application (any recent version)","Obsidian Local REST API plugin installed and enabled","Node.js 18+ for running the MCP server","TypeScript runtime or compiled JavaScript output","API key or authentication token if HTTP transport is exposed beyond localhost","Obsidian Local REST API plugin with /vault/read endpoint enabled","Valid file path relative to vault root","Read permissions on the target file (enforced by Obsidian)","JSON Schema validator (zod, ajv, or similar)","Regex analysis library (safe-regex or similar)"],"failure_modes":["Requires Obsidian Local REST API plugin running on ports 27123/27124 — no direct file system access","HTTP transport adds network latency and requires explicit CORS configuration for cross-origin clients","Stdio transport is single-client per process — concurrent connections require multiple server instances","No built-in persistence or caching of vault state — relies entirely on Obsidian REST API for consistency","Returns entire file content in memory — large notes (>10MB) may cause performance degradation","YAML frontmatter parsing is strict — malformed YAML will cause the tool to fail rather than gracefully degrade","No streaming support — entire note must be loaded before returning to client","Metadata extraction is limited to YAML frontmatter — inline metadata or custom formats are not parsed","ReDoS detection is heuristic-based — complex patterns may not be detected","Path traversal prevention is based on path normalization — symlinks may bypass checks","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.3545059063059051,"quality":0.6,"ecosystem":0.6000000000000001,"match_graph":0.25,"freshness":0.6,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:22.064Z","last_scraped_at":"2026-04-22T08:08:46.027Z","last_commit":"2025-10-24T18:05:31Z"},"community":{"stars":459,"forks":66,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=mcp-cyanheads-obsidian-mcp-server","compare_url":"https://unfragile.ai/compare?artifact=mcp-cyanheads-obsidian-mcp-server"}},"signature":"9496cq/9u1PgvhRbQv+2odyXuakn571uMMjns/V+ApGwicyk81eSwBifeQMiOE2zgPaXGfkZgBqSgEiK8tVRBg==","signedAt":"2026-06-23T00:34:52.664Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/mcp-cyanheads-obsidian-mcp-server","artifact":"https://unfragile.ai/mcp-cyanheads-obsidian-mcp-server","verify":"https://unfragile.ai/api/v1/verify?slug=mcp-cyanheads-obsidian-mcp-server","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}