MCP cover image

模型上下文协议(MCP)服务器专为LLMS与黑曜石库相互作用。通过标准化的接口为无缝知识基础管理提供安全的,令牌感知的工具。

1

Github Watches

12

Github Forks

55

Github Stars

Obsidian MCP Server

TypeScript Model Context Protocol Version License Status GitHub

A Model Context Protocol server designed for LLMs to interact with Obsidian vaults. Built with TypeScript and featuring secure API communication, efficient file operations, and comprehensive search capabilities, it enables AI assistants to seamlessly manage knowledge bases through a clean, flexible tool interface.

The Model Context Protocol (MCP) enables AI models to interact with external tools and resources through a standardized interface.

Requires the Local REST API plugin in Obsidian.

Features

File Operations

  • Atomic file/directory operations with validation
  • Resource monitoring and cleanup
  • Error handling and graceful failure

Search System

  • Full-text search with configurable context
  • Advanced JsonLogic queries for files, tags, and metadata
  • Support for glob patterns and frontmatter fields

Property Management

  • YAML frontmatter parsing and intelligent merging
  • Automatic timestamps (created by Obsidian, modified by server)
  • Custom field support

Security & Performance

  • API key auth with rate limiting and SSL options
  • Resource monitoring and health checks
  • Graceful shutdown handling

Installation

Note: Requires Node.js

  1. Enable Local REST API plugin in Obsidian
  2. Clone and build:
git clone git@github.com:cyanheads/obsidian-mcp-server.git
cd obsidian-mcp-server
npm install
npm run build

Or install from npm:

npm install obsidian-mcp-server

Configuration

Add to your MCP client settings (e.g., claude_desktop_config.json or cline_mcp_settings.json):

{
  "mcpServers": {
    "obsidian-mcp-server": {
      "command": "node",
      "args": ["/path/to/obsidian-mcp-server/build/index.js"],
      "env": {
        "OBSIDIAN_API_KEY": "your_api_key_here",
        "VERIFY_SSL": "false",
        "OBSIDIAN_PROTOCOL": "https",
        "OBSIDIAN_HOST": "127.0.0.1",
        "OBSIDIAN_PORT": "27124",
        "REQUEST_TIMEOUT": "5000",
        "MAX_CONTENT_LENGTH": "52428800",
        "MAX_BODY_LENGTH": "52428800",
        "RATE_LIMIT_WINDOW_MS": "900000",
        "RATE_LIMIT_MAX_REQUESTS": "200",
        "TOOL_TIMEOUT_MS": "60000"
      }
    }
  }
}

Environment Variables:

Required:

  • OBSIDIAN_API_KEY: Your API key from Obsidian's Local REST API plugin settings

Connection Settings:

  • VERIFY_SSL: Enable SSL certificate verification (default: false) # This must be set to false for self-signed certificates. If you are running locally or don't understand what this means, this should be set to false.
  • OBSIDIAN_PROTOCOL: Protocol to use (default: "https")
  • OBSIDIAN_HOST: Host address (default: "127.0.0.1")
  • OBSIDIAN_PORT: Port number (default: 27124)

Request Limits:

  • REQUEST_TIMEOUT: Request timeout in milliseconds (default: 5000)
  • MAX_CONTENT_LENGTH: Maximum response content length in bytes (default: 52428800 [50MB])
  • MAX_BODY_LENGTH: Maximum request body length in bytes (default: 52428800 [50MB])

Rate Limiting:

  • RATE_LIMIT_WINDOW_MS: Rate limit window in milliseconds (default: 900000 [15 minutes])
  • RATE_LIMIT_MAX_REQUESTS: Maximum requests per window (default: 200)

Tool Execution:

  • TOOL_TIMEOUT_MS: Tool execution timeout in milliseconds (default: 60000 [1 minute])

Project Structure

The project follows a modular architecture with clear separation of concerns:

src/
  ├── index.ts          # Main entry point
  ├── mcp/              # MCP server implementation
  ├── obsidian/         # Obsidian API client and types
  ├── resources/        # MCP resource implementations
  ├── tools/            # MCP tool implementations
  │   ├── files/        # File operations tools
  │   ├── search/       # Search tools
  │   └── properties/   # Property management tools
  └── utils/            # Shared utilities

Tools

File Management

// List vault contents
obsidian_list_files_in_vault: {
}

// List directory contents
obsidian_list_files_in_dir: {
  dirpath: string; // Path relative to vault root
}

// Get file contents
obsidian_get_file_contents: {
  filepath: string; // Path relative to vault root
}

Search Operations

// Text search with context
obsidian_find_in_file: {
  query: string,
  contextLength?: number  // Default: 10
}

// Advanced search with JsonLogic
obsidian_complex_search: {
  query: JsonLogicQuery
  // Examples:
  // Find by tag:
  // {"in": ["#mytag", {"var": "frontmatter.tags"}]}
  //
  // Find markdown files in a directory:
  // {"glob": ["docs/*.md", {"var": "path"}]}
  //
  // Combine conditions:
  // {"and": [
  //   {"glob": ["*.md", {"var": "path"}]},
  //   {"in": ["#mytag", {"var": "frontmatter.tags"}]}
  // ]}
}

// Get all tags in vault or directory
obsidian_get_tags: {
  path?: string  // Optional: limit to specific directory
}

Content Modification

// Append to file
obsidian_append_content: {
  filepath: string,  // Path relative to vault root
  content: string    // Content to append
}

// Update file content
obsidian_patch_content: {
  filepath: string,  // Path relative to vault root
  content: string    // New content (replaces existing)
}

Property Management

// Get note properties
obsidian_get_properties: {
  filepath: string  // Path relative to vault root
}

// Update note properties
obsidian_update_properties: {
  filepath: string,  // Path relative to vault root
  properties: {
    title?: string,
    author?: string,
    // Note: created/modified timestamps are managed automatically
    type?: Array<"concept" | "architecture" | "specification" |
      "protocol" | "api" | "research" | "implementation" |
      "guide" | "reference">,
    tags?: string[],  // Must start with #
    status?: Array<"draft" | "in-progress" | "review" | "complete">,
    version?: string,
    platform?: string,
    repository?: string,  // URL
    dependencies?: string[],
    sources?: string[],
    urls?: string[],      // URLs
    papers?: string[],
    custom?: Record<string, unknown>
  }
}

Best Practices

File Operations

  • Use atomic operations with validation
  • Handle errors and monitor performance

Search Implementation

  • Use appropriate search tool for the task:
    • obsidian_find_in_file for text search
    • obsidian_complex_search for metadata/tag filtering
  • Keep context size reasonable (default: 10 chars)

Property Management

  • Use appropriate types and validate updates
  • Handle arrays and custom fields properly
  • Never set timestamps (managed automatically)

Error Prevention

  • Validate inputs and handle errors gracefully
  • Monitor patterns and respect rate limits

Resources

The MCP server exposes the following resources:

obsidian://tags  # List of all tags used across the vault

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Submit a Pull Request

For bugs and features, create an issue at https://github.com/cyanheads/obsidian-mcp-server/issues.

Publishing

The package is automatically published to npm when version tags are pushed:

# Update version in package.json
npm version patch  # or minor, or major
git push --follow-tags

This will trigger the GitHub Action to build and publish the package.

License

Apache License 2.0


Built with the Model Context Protocol

相关推荐

  • https://suefel.com
  • Latest advice and best practices for custom GPT development.

  • Yusuf Emre Yeşilyurt
  • I find academic articles and books for research and literature reviews.

  • https://maiplestudio.com
  • Find Exhibitors, Speakers and more

  • Carlos Ferrin
  • Encuentra películas y series en plataformas de streaming.

  • Joshua Armstrong
  • Confidential guide on numerology and astrology, based of GG33 Public information

  • Emmet Halm
  • Converts Figma frames into front-end code for various mobile frameworks.

  • Elijah Ng Shi Yi
  • Advanced software engineer GPT that excels through nailing the basics.

  • Alexandru Strujac
  • Efficient thumbnail creator for YouTube videos

  • lumpenspace
  • Take an adjectivised noun, and create images making it progressively more adjective!

  • Lists Tailwind CSS classes in monospaced font

  • https://appia.in
  • Siri Shortcut Finder – your go-to place for discovering amazing Siri Shortcuts with ease

  • apappascs
  • 发现市场上最全面,最新的MCP服务器集合。该存储库充当集中式枢纽,提供了广泛的开源和专有MCP服务器目录,并提供功能,文档链接和贡献者。

  • ShrimpingIt
  • MCP系列GPIO Expander的基于Micropython I2C的操作,源自ADAFRUIT_MCP230XX

  • jae-jae
  • MCP服务器使用剧作《无头浏览器》获取网页内容。

  • Mintplex-Labs
  • 带有内置抹布,AI代理,无代理构建器,MCP兼容性等的多合一桌面和Docker AI应用程序。

  • ravitemer
  • 一个功能强大的Neovim插件,用于管理MCP(模型上下文协议)服务器

  • patruff
  • Ollama和MCP服务器之间的桥梁,使本地LLMS可以使用模型上下文协议工具

  • pontusab
  • 光标与风浪冲浪社区,查找规则和MCP

  • WangRongsheng
  • 🧑‍🚀 llm 资料总结(数据处理、模型训练、模型部署、 o1 模型、mcp 、小语言模型、视觉语言模型)|摘要世界上最好的LLM资源。

  • n8n-io
  • 具有本机AI功能的公平代码工作流程自动化平台。将视觉构建与自定义代码,自宿主或云相结合,400+集成。

  • av
  • 毫不费力地使用一个命令运行LLM后端,API,前端和服务。

    Reviews

    3 (1)
    Avatar
    user_bizfTVm5
    2025-04-17

    As an avid user of the obsidian-mcp-server by cyanheads, I must say that it's a remarkable tool for managing multiple Minecraft servers efficiently. The seamless integration and user-friendly interface make server management a breeze. Highly recommend it to any Minecraft server admin looking for a reliable solution! Check it out on GitHub: https://github.com/cyanheads/obsidian-mcp-server.