Skip to main content
Glama
huaqing0
by huaqing0

[!NOTE] このリポジトリはhuaqing0カスタムエディションであり、 cyanheads/obsidian-mcp-server v3.5.0 をApache-2.0ライセンスのもとでベースにしています。アップストリームのサーバーを維持しつつ、このエディションで使用されるローカルワークスペース、ボールト構造、ネイティブExcalidraw自動化を追加しています。以下のnpmおよびMCPBインストールリンクは引き続きアップストリームの配布物を指しています。このカスタムエディションは現在ソースのみの提供です。

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


ツール

31のツールが、ノートの内容、メタデータ、バックリンク、ネイティブExcalidraw自動化、ボールト構造の完全な管理をカバーし、さらにObsidianのコマンドパレットコマンド用の保護されたエスケープハッチも備えています。

ツール名

説明

obsidian_get_note

ノートを生のコンテンツ、完全な構造化形式(コンテンツ + frontmatter + タグ + stat、オプションで書かれたリンク、解決済みリンク、バックリンクを含む)、構造的なドキュメントマップ、または単一セクションとして読み取ります。

obsidian_list_notes

ボールトパス配下のノートとサブディレクトリを一覧表示します。再帰的ウォーク(デフォルト深さ2、最大深さ20、1000エントリ上限)で、オプションの extensionnameRegex フィルタに対応しています。

obsidian_list_tags

階層的な親を含む、使用回数付きのボールトタグを一覧表示します。カウント降順で並べ替えられ、limit(デフォルト200、最大10000)で上限が設定され、除外された残りが開示されます。オプションの nameRegexminCount で先にセットを絞り込みます。

obsidian_list_commands

Obsidianのコマンドパレットコマンドを一覧表示し、オプションで表示名の nameRegex でフィルタリングします。OBSIDIAN_ENABLE_COMMANDS=true によるオプトインが必要ですobsidian_execute_command と対になっています)。

obsidian_search_notes

テキスト、JSONLogic、またはBM25ランキングのOmnisearch(プラグインが到達可能な場合)でボールトを検索します。結果は不透明なカーソルでページネーションされます。

obsidian_get_scene

ネイティブの .excalidraw.md シーンから、生のJSON全体を返さずにコンパクトな意味論的サマリーを読み取ります。

obsidian_validate_drawing

Excalidrawのパース、安定した意味論的ID、ジオメトリ、リレーション参照を検証します。

obsidian_create_drawing

ノード、バインドされたリレーション、フレームの意味論的バッチとして、ネイティブのExcalidraw描画を作成します。

obsidian_add_elements

既存の描画に意味論的ノード、リレーション、またはフレームを冪等に追加します。

obsidian_update_elements

安定した意味論的IDで管理対象の描画要素を外科的に更新します。

obsidian_delete_elements

描画ファイルと無関係なコンテンツを保持しながら、選択した管理対象要素を削除します。

obsidian_layout_drawing

管理対象ノードを決定的なリレーション深度レイヤーに配置します。

obsidian_link_element

安定した意味論的IDで、管理対象の描画要素にObsidianリンクを添付または置換します。

obsidian_focus_elements

ライブのExcalidrawビューで選択した意味論的要素にフォーカスし、周囲の要素を暗くするか復元します。

obsidian_export_preview

プラグインのエクスポートAPIを通じて、ネイティブのExcalidraw描画を境界付きPNGプレビューにレンダリングします。

obsidian_embed_drawing

検証済みのExcalidraw wiki埋め込みを既存のMarkdownノートに冪等に追加します。

obsidian_write_note

ノートを作成し、単一セクションをその場で置換するか、overwrite: true で既存ファイルを上書きします。デフォルトでは既存パスへのファイル全体の書き込みを拒否します。

obsidian_append_to_note

ノートにコンテンツを追加します。section なしの場合、ファイルが存在しなければ作成します。section ありの場合、特定の見出し、ブロック、またはfrontmatterフィールドに追加します(ファイルが存在する必要があります)。

obsidian_patch_note

見出し、ブロック参照、またはfrontmatterフィールドに対する外科的な append / prepend / replace を行います。

obsidian_replace_in_note

単一ノート内の検索置換を行い、デフォルトでは本文にスコープされます。リテラルまたは正規表現マッチングで、完全一致、空白柔軟、大文字小文字の区別オプションに対応し、キャプチャグループ置換をサポートします。

obsidian_manage_frontmatter

単一のfrontmatterキーに対するアトミックな get / set / delete を行います。

obsidian_manage_tags

タグを追加、削除、または一覧表示します。デフォルトではfrontmatterの tags: 配列を対象とし、location: 'inline' または 'both' でノート本文の変更を選択できます。

obsidian_create_folder

Obsidianを通じてボールトフォルダと不足している親フォルダを作成します。

obsidian_move_path

ObsidianのFileManagerを通じてボールトのファイルまたはフォルダを移動または名前変更し、内部リンクがリンク更新に参加できるようにします。

obsidian_delete_note

ノートを完全に削除します。OBSIDIAN_ENABLE_DELETE=true によるオプトインが必要です。削除前に常にユーザーに確認を求めます。

obsidian_delete_folder

Obsidianのゴミ箱または完全削除を通じて、フォルダとそのすべての子孫を削除します。OBSIDIAN_ENABLE_DELETE=true によるオプトインが必要です。正確な影響範囲を報告し、常に確認を求めます。

obsidian_open_in_ui

failIfMissingnewLeaf トグル付きで、ObsidianアプリUIでファイルを開きます。

obsidian_inspect_workspace

タブ、ペイン、サイドバー、アクティブファイル、Markdownエディタモードを検査します。

obsidian_control_workspace

型付きアクションを通じて、サイドバー、タブ、分割、リーフのフォーカス/クローズ、Markdownエディタモード、組み込み検索を制御します。

obsidian_capture_workspace

視覚的検証のためにObsidianウィンドウを境界付きMCP画像ブロックとしてキャプチャします。フォルダスコープの権限がアクティブな場合は拒否されます。

obsidian_execute_command

IDでObsidianコマンドパレットコマンドを実行します。OBSIDIAN_ENABLE_COMMANDS=true によるオプトインが必要です。

obsidian_get_note

ボールトパス、アクティブファイル、または定期ノート(dailyweeklymonthlyquarterlyyearly)で指定されたノートを、4つの投影形式のいずれかで読み取ります。

  • format: "content" — 生のMarkdown本文

  • format: "full" — コンテンツ、frontmatter、タグ、ファイルメタデータ。includeLinks: true を渡すと、書かれた外部参照に加えて、Obsidianが解決した外部リンクとバックリンク(ボールト内部のみ — 外部URLはフィルタリングされます)を含めます

  • format: "document-map" — 見出し、ブロック参照、frontmatterフィールドのカタログ

  • format: "section" — 単一の見出し/ブロック/frontmatterセクション値(section が必要です)。見出しセクションにはその見出し配下の完全なサブツリーが含まれます

document-map投影を obsidian_patch_note と組み合わせて、パッチ適用前に編集対象を発見します。


obsidian_search_notes

mode で選択される最大3つの検索モード:

  • text — 周囲のコンテキストウィンドウ付きの部分文字列マッチ。contextLength は各マッチの両側のコンテキスト文字数を制御します(デフォルト100。ヒットごとにより多くのコンテキストが必要な場合は増やしてください)。オプションの pathPrefix フィルタ(テキストモードのみ — 他のモードで pathPrefix を渡すと path_prefix_invalid_mode で拒否されます)。

  • jsonlogicpathcontentfrontmatter.<key>tagsstat.{ctime,mtime,size} に対して評価されるJSONLogicツリー。カスタムの globregexp 演算子は、どちらも [PATTERN, VALUE] を受け取ります — パターンが先、次にフィールド参照:{"glob": ["Projects/*.md", {"var": "path"}]}。逆順にすると、ノート自身のフィールドがパターンとしてコンパイルされます:glob は何もマッチせず、regexp はフィールドがパースされる内容に対して即座に失敗します。これはバックリンクを表現する方法でもあります。専用のツールや上流のエンドポイントがないためです:{"regexp": ["\\[\\[Target Note(\\||#|\\]\\])", {"var": "content"}]} は、本文が Target Note をウィキリンクしているすべてのノートを返します。

  • omnisearch — コミュニティの Omnisearch プラグインによるBM25ランキング検索。引用符で囲まれたフレーズ、-exclusionpath: / ext: フィルタ、タイポ許容、PDF + OCRカバレッジ(Text Extractor 経由)、AI Image Analyzer インデックスが有効な場合の視覚的概念画像マッチをサポートします。プラグインのHTTPサーバーが起動時に到達可能な場合のみモード列挙に存在します。上流は結果を50件にハードキャップします — クエリを絞り込んでより多くを表示してください(キャップに達した可能性がある場合、レスポンスは truncated: true を運びます)。

結果のページネーションは、MCP 2025-11-25 仕様に従い、不透明なカーソルで行われます。最初のページでは cursor を省略し、以降は直前のレスポンスの nextCursor を渡します。すべての結果には totalCount(パス・ポリシー適用後、ページネーション前)が含まれ、最後のページでは nextCursor が省略されます。テキストモードのヒットはさらに、ファイルごとに maxMatchesPerHit(デフォルト 10)で切り詰められるため、マッチの多い単一のノートがレスポンス予算を超えることはありません。切り詰められたヒットには truncated: truetotalMatches が付与されます。


obsidian_write_note

ファイル全体の誤上書きに対する保護デフォルト付きで、新規作成または外科的置換を行います。

  • section なし — ファイル全体の PUToverwrite: true が設定されていない限り、既存ファイルの上書きを拒否します。 file_existsConflict)エラーは、その場での編集に obsidian_patch_note / obsidian_append_to_note / obsidian_replace_in_note を推奨します。

  • section あり — 指定された見出し/ブロック/frontmatter フィールドに対する置換付き PATCH で、ファイルの残りの部分には触れません。overwrite フラグはセクションモードでは無視されます。

出力は、呼び出しによって新しいファイルが作成された場合は created: true を報告し、既存ファイルを置換した場合やセクションを対象にした場合は false を報告します。すべての変更ツールは previousSizeInBytescurrentSizeInBytes も返すため、エージェントは誤った上書き、予期しない上流の動作、または誤ったファイルに到達したタイポパスを検出できます。


obsidian_append_to_note

アップサートとセクション追記を組み合わせたプリミティブで、上流の Local REST API の動作を反映しています。

  • section なし — /vault/{path} への POST。ファイルが存在する場合は追記し、存在しない場合はコンテンツ全体を本文としてファイルを作成します。 出力の created: true は後者の分岐を示すため、エージェントはタイポパスや未作成のデイリーノートが静かに新しいファイルに変わったことに気づけます。

  • section あり — 指定された見出し、ブロック参照、または frontmatter フィールドに対する追記付き PATCH。ファイルが存在している必要があります(存在しない場合、PATCH の事前チェックで note_missing がスローされます)。createTargetIfMissing: true を渡すと、既存ファイル内にセクション自体を作成できます。ブロック参照ターゲットは、区切り文字なしでブロック行に隣接して連結されます。区切りを入れたい場合は、content の先頭に改行を含めてください。

previousSizeInBytes は、アップサート作成分岐では 0、それ以外では実際のファイルサイズです。currentSizeInBytes は、操作後に上流から読み取った書き込み後のサイズです。差分を Buffer.byteLength(content) と比較すると、自動改行の注入や並行ライターを検出できます。


obsidian_patch_note

単一のドキュメントターゲットに対する外科的編集。

  • operation: "append" — セクションの後に追加

  • operation: "prepend" — セクションの前に追加

  • operation: "replace" — セクションを置換

  • ターゲット: 見出しパス、ブロック参照 ID、または frontmatter フィールド

見出しターゲットは、完全な Parent::Child パスまたは単独のリーフ名のいずれかを受け入れます。正確に 1 つの見出しに一致する単独のリーフは、書き込み前に完全なパスに展開され、レスポンスは編集が着地したロケーターをエコーします。複数の見出しに一致するリーフは ambiguous_section で拒否され、そのエラーデータには候補パスがリストされます。同じ解決は、section を指定した obsidian_write_noteobsidian_append_to_note にも適用されます。

パッチを適用する前に、format: "document-map" を指定した obsidian_get_note を使用して、存在するターゲットを発見してください。


obsidian_replace_in_note

obsidian_patch_note の構造的ターゲットに適合しない編集のための検索置換。ノートが取得され、置換が順次適用され(各置換は前の出力を参照)、結果が単一の PUT で書き戻されます。

scope は置換が実行される範囲を選択します。

  • body(デフォルト)— YAML frontmatter ブロックの後のテキスト。ブロックは元のバイトから再添付されるため、バイト単位で同一に戻ります。

  • frontmatter--- フェンスの間の YAML のみ。フェンス自体は決してマッチしません。

  • both — 各置換は frontmatter に対して実行され、次に body に対して実行されます。perReplacement[]bodyCountfrontmatterCount を別々に報告します。

frontmatter がスコープ内にある場合、書き換えられた YAML は何かを書き込む前に再パースされます。プロパティのマッピングとしてパースできなくなった場合、呼び出しは frontmatter_invalid で失敗し、ノートは元のバイトを保持します。このチェックは、壊れる YAML(スカラー内の引用符なしの :、エイリアスに書き換えられたリストマーカー、余分な引用符)を捕捉します。ただし、整形式のままで別の意味になる編集(キーを改名する部分文字列の衝突や、スカラーの引用符を削除して型を変える置換など)は捕捉できません。単一プロパティへの型付き編集には obsidian_manage_frontmatter を優先してください。

置換ごとのオプション:

  • useRegexsearch を ECMAScript 正規表現として扱います。useRegex: true の場合、置換は $1 / $& キャプチャグループ参照を尊重します。

  • caseSensitivefalse の場合、大文字小文字を区別せずにマッチします。

  • wholeWord — パターンを \b…\b でラップします。リテラルモードと正規表現モードの両方で機能します。

  • flexibleWhitespacesearch 内の任意の空白の連続を \s+ に置き換えます。リテラルモードのみ — useRegex: true の場合は効果がありません(直接表現してください)。

  • replaceAllfalse の場合、最初のマッチのみが置換されます。scope: 'both' の下では、その 1 つの置換は frontmatter でマッチした場合は frontmatter に、それ以外の場合は body に適用されます。

リテラルモードは置換内の $1 / $& をそのまま保持します — キャプチャグループ参照を展開するのは useRegex: true のみです。


obsidian_manage_tags

ノートのタグを追加、削除、または一覧表示します。2 つの表現のいずれかで動作し、デフォルトは標準の Obsidian frontmatter の場所です。

  • location: 'frontmatter'(デフォルト)— frontmatter の tags: 配列のみ。ノート本文には触れません。

  • location: 'inline' — 本文のインライン #tag 構文のみ。add はファイル末尾に #tag を追加します。

  • location: 'both' — 両方の表現にわたるオプトインの調整。

add はタグが要求された場所に存在することを保証し、remove はタグを削除し、list は入力の tags 配列を無視します。フェンスで囲まれたコードブロック内のインライン #tag の出現は意図的にそのまま残されます。

インラインモードはノート本文のみを読み書きします — YAML スカラー内の # は frontmatter なので、インラインタグとしてリストされず、削除によって書き換えられることもありません。インラインタグの削除では、正確に 1 つの隣接する水平スペース(タグの前のスペース、または前にスペースがない場合はタグの後のスペース)だけが一緒に削除されます。ネストされたリストのインデント、4 スペースのインデントされたコードブロック、末尾の 2 スペースのハード改行、テーブルセルのパディングなど、他のすべてのバイトは保持されます。


obsidian_delete_note

ノートを完全に削除します。デフォルトではオフです。 tools/list に公開するには OBSIDIAN_ENABLE_DELETE=true を設定します。最初の呼び出しは削除ではなく確認リクエストで応答します — プロンプトにはファイルのバイトサイズが含まれるため、破壊的な影響範囲はユーザーが確認する前に見えます — そしてツールは回答とともに再試行されます。拒否またはキャンセルすると、呼び出しは cancelled で失敗し、DELETE は発行されません。destructiveHint アノテーションは、ホストの承認フローでも操作を表面化します。出力は previousSizeInBytes(削除時点のサイズ)と currentSizeInBytes: 0 を報告します。

確認は必須であり、フォールバックパスはありません。入力の往復を提供できないクライアントは削除を完了できません。他のすべてのツールは影響を受けません。

ヴォールト構造ツール

obsidian_create_folder はネストされたフォルダを冪等に作成します。obsidian_move_path は Obsidian のネイティブ FileManager を通じてファイルまたはフォルダを移動・名前変更し、欠落している宛先の親を作成し、Obsidian が内部リンクを更新できるようにします。obsidian_delete_folder はフォルダを再帰的に削除し、デフォルトでは Obsidian の設定済みゴミ箱動作を使用し、明示的に要求された場合は完全削除を行います。ノート削除と同様に OBSIDIAN_ENABLE_DELETE=true によってゲートされます。


obsidian_execute_command

ID によって Obsidian のコマンドパレットコマンドをディスパッチします(obsidian_list_commands で発見可能)。動作はコマンドに依存します — UI を開くコマンドもあれば、ファイルを削除したりヴォールトを閉じたりするコマンドもあります。

デフォルトではオフです。 OBSIDIAN_ENABLE_COMMANDS が未設定の場合、obsidian_execute_command とその発見パートナーである obsidian_list_commands の両方が disabledTool() でラップされます — tools/list には存在しませんが(LLM は呼び出せません)、オペレーター向けマニフェストには有効化のヒントとともに表示されます。


Related MCP server: Obsidian Tools MCP Server

パスポリシー(フォルダスコープの権限)

3 つのオプションの環境変数が、各ツールがターゲットにできるヴォールトパスをゲートします。デフォルト未設定 = 読み取りと書き込みの両方で全ヴォールト — 後方互換です。

目標

設定

デフォルト(現在の動作)

すべて未設定

どこでも読み取り、projects/scratch/ のみ書き込み

OBSIDIAN_WRITE_PATHS=projects/,scratch/

public/ のみ読み取り、public/inbox/ のみ書き込み

OBSIDIAN_READ_PATHS=public/OBSIDIAN_WRITE_PATHS=public/inbox/

読み取り専用デプロイ — どこにも書き込み不可

OBSIDIAN_READ_ONLY=true

マッチングは暗黙の再帰を伴うプレフィックスベースで、大文字小文字を区別せず、末尾のスラッシュは正規化されます。projects/projects/a.mdprojects/sub/b.md などにマッチします。

書き込みパスは暗黙的に読み取り可能です — 見えないものを編集することはできません。したがって、ターゲットが READ_PATHS または WRITE_PATHS にマッチする場合、読み取りは成功します。

OBSIDIAN_READ_ONLY=true はパスチェックの前に短絡します — すべての書き込みツールとコマンドパレットのペアは起動時に disabledTool() でラップされ(tools/list には存在しません)、サービスに到達する書き込みは WRITE_PATHS に関係なく実行時に拒否されます。

拒否は型付きの path_forbidden(JSON-RPC コード Forbidden)で、アクティブなスコープが data.recovery.hintdata.activeScope にエコーされるため、LLM はサーバーログを調べずに自己修正できます。obsidian_search_notes の検索結果は READ_PATHS に対して静かにフィルタリングされます — 「N 件のヒットを隠しました」というインジケーターを表示するとゲートの目的が損なわれます。

タグの一覧表示はヴォールト全体にわたります。 obsidian_list_tagsobsidian://tags リソースはヴォールト全体のタグ名を集約し、OBSIDIAN_READ_PATHS によって狭められません — ゲートするパスがないため、読み取りスコープ外のタグ名(ノートの内容ではなく)が表面化する可能性があります。

起動バナーはアクティブなスコープをログに記録するため、オペレーターは起動時に設定を検証できます。


リソース

URI

説明

リソース

obsidian://vault/{+path}

ヴォールト内のノート — コンテンツ、frontmatter、タグ、ファイルメタデータ。

リソース

obsidian://tags

ヴォールト全体で見つかったすべてのタグと使用回数。

リソース

obsidian://status

サーバーの到達可能性、認証ステータス、プラグイン/Obsidian のバージョン情報、プラグインマニフェスト。

すべてのリソースデータはツールからも到達可能です — obsidian://vault/{+path} には obsidian_get_noteobsidian://tags には obsidian_list_tags。リソースは、特定のノートやヴォールトのスナップショットを会話に添付することを好むクライアントのために存在します。タグのペアはミラーではありません。obsidian://tags はスナップショットセマンティクスを維持し、上流のペイロードを全体かつソートなしで返します。一方、obsidian_list_tags はカウント順に並べ、上限を設けます。

機能

@cyanheads/mcp-ts-core をベースに構築:

  • 宣言的なツールとリソース定義 — プリミティブごとに単一ファイル、フレームワークが登録と検証を処理

  • 統一されたエラー処理 — ハンドラーがスローし、フレームワークがキャッチ、分類、フォーマット。ツールは型付きの errors[] コントラクトで失敗面を公開

  • initialize でのサーバーレベルの instructions — デプロイ固有のオリエンテーション(アクティブパスポリシー、読み取り専用モード、コマンドパレットの切り替え)を、静的なツール/リソースカタログとともに仕様準拠のクライアントに提示

  • HTTP トランスポートでのプラグ可能な認証: nonejwtoauth

  • オプションの OpenTelemetry トレーシングを備えた構造化ロギング

  • STDIO および Streamable HTTP トランスポート

サーバー自体はステートレスです — すべてのツール呼び出しはローカル REST API に直接アクセスします。フレームワークのストレージバックエンド、リクエスト状態 KV、進行状況ストリームはここでは使用されません。Obsidian は単一ボールトであり、呼び出し間で永続化するものはありません。

Obsidian 固有:

  • Obsidian Local REST API プラグインをラップ — 型付きクライアント、決定的なエラーマッピング

  • 見出し、ブロック参照、frontmatter フィールドをまたぐセクション認識編集を、PATCH-with-target 操作で実現

  • 両方の表現にわたるタグ調整: frontmatter の tags: 配列とインラインの #tag 構文(フェンスで囲まれたコードブロックはスキップ)

  • 最大3つのモードでの検索: テキスト、JSONLogic、および(プラグインが到達可能な場合)BM25 ランキングの Omnisearch — MCP 2025-11-25 仕様に従ったカーソルページネーション、テキストモードではファイルごとのマッチクリッピング

  • 破壊的な削除には必須の人間参加確認 — 両方のプロトコルリビジョンで提供されるマルチラウンドトリップの input_required ラウンドで、未確認のパスはツールを通じて存在しない

  • ネイティブなボールト構造管理: フォルダの作成、Obsidian リンク更新を伴うファイル/フォルダの移動・名前変更、ゴミ箱または完全削除によるフォルダ削除

  • ネイティブな Excalidraw Automation API 統合: 意味論的な作成/読み取り/追加/更新/削除、決定的なレイアウト、整合性検証、PNG プレビューエクスポート、冪等なノート埋め込み

  • OBSIDIAN_READ_PATHS / OBSIDIAN_WRITE_PATHS によるフォルダスコープの読み書き権限と、グローバルな OBSIDIAN_READ_ONLY キルスイッチ — 拒否は型付きの path_forbidden で、アクティブなスコープがエラーデータにエコーバックされる

  • オプトインのコマンドパレットペア (obsidian_list_commands + obsidian_execute_command) — OBSIDIAN_ENABLE_COMMANDS=true の場合のみ登録

  • obsidian_get_noteobsidian_open_in_ui での寛容なパス解決 — 大文字小文字が一致しないパスを正規のファイル名に対して静かに再試行し、曖昧な大文字小文字の一致では Conflict をスローし、NotFound には近い一致のみが存在する場合に Did you mean: …? の提案を追加。obsidian_delete_note は意図的に除外 — 破壊的な操作はターゲットパスを静かに書き換えるべきではない。

はじめに

以下を MCP クライアント設定ファイルに追加してください。Obsidian Local REST API プラグインがボールトにインストールされ、有効化されている必要があります — 前提条件 を参照してください。

{
  "mcpServers": {
    "obsidian-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["obsidian-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "OBSIDIAN_API_KEY": "your-local-rest-api-key"
      }
    }
  }
}

または npx を使用(Bun は不要):

{
  "mcpServers": {
    "obsidian-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "obsidian-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "OBSIDIAN_API_KEY": "your-local-rest-api-key"
      }
    }
  }
}

Streamable HTTP の場合は、トランスポートを設定してサーバーを起動します。インラインの環境変数は一度きりの実行に有効です。繰り返し使用する場合は、値を .env にコピーして(.env.example を参照)、bun run start:http を実行してください。

MCP_TRANSPORT_TYPE=http OBSIDIAN_API_KEY=... bun run start:http
# Server listens at http://127.0.0.1:3010/mcp by default

前提条件

  • Bun v1.3.0 以上(または Node.js v24+)。

  • Obsidian Local REST API プラグイン、v4.0.0 から v5.x までをボールトにインストールし、有効化。設定 → コミュニティプラグイン → Local REST API で API キーを生成し、OBSIDIAN_API_KEY にコピーしてください。プラグイン v6.0 では、このサーバーがセクションターゲット書き込みとドキュメントマップに固定している markdown-patch 1.x ワイヤーフォーマットが削除されます。

  • 定期ノートターゲット(target: { "type": "periodic" })には、さらにプラグイン v5.0.1 以前 が必要です — v5.0.2 で組み込みの /periodic/ ルートが削除されました。他のすべてのターゲットタイプは影響を受けません。

  • 入力リクエスト(elicitation)に応答できる MCP クライアント。obsidian_delete_note は削除前に常に確認を求めるため、そのサポートがないクライアントはノートの読み書きはできますが、削除はできません。

  • オプション: 11 の描画ツールを使用するには、Obsidian Excalidraw プラグインをインストールして有効化。他のノートおよびボールトツールには必要ありません。

  • このサーバーはデフォルトで http://127.0.0.1:27123 を使用します。使用するには、プラグイン設定で 「非暗号化(HTTP)サーバー」 を有効にしてください。常時オン HTTPS ポートを使用する場合は、OBSIDIAN_BASE_URL=https://127.0.0.1:27124 を設定します。プラグインの自己署名証明書は OBSIDIAN_VERIFY_SSL=false(デフォルト)で処理されます。

インストール

  1. リポジトリをクローン:

    git clone https://github.com/cyanheads/obsidian-mcp-server.git
  2. ディレクトリに移動:

    cd obsidian-mcp-server
  3. 依存関係をインストール:

    bun install
  4. 環境を設定:

    cp .env.example .env
    # edit .env and set OBSIDIAN_API_KEY

設定

変数

説明

デフォルト

OBSIDIAN_API_KEY

必須。 Obsidian Local REST API プラグイン用の Bearer トークン。

OBSIDIAN_BASE_URL

Local REST API プラグインのベース URL。常時稼働の HTTPS ポート(自己署名証明書)には https://127.0.0.1:27124 を使用します。

http://127.0.0.1:27123

OBSIDIAN_VERIFY_SSL

TLS 証明書を検証します。プラグインが自己署名証明書を使用するため、デフォルトは false です。Node では、ディスパッチャの rejectUnauthorized オプションがプロセス全体の変更なしでこれを処理します。Bun では、ランタイムがそのオプションを無視するため、サービスは追加で NODE_TLS_REJECT_UNAUTHORIZED=0 を設定します — このフォールバックは Bun のみに適用されます。

false

OBSIDIAN_REQUEST_TIMEOUT_MS

リクエストごとのタイムアウト(ミリ秒)。

30000

OBSIDIAN_CLI_PATH

ネイティブのファイル/フォルダ構造操作のための Obsidian CLI 実行ファイル。シェルを介さず直接呼び出されます。

obsidian

OBSIDIAN_VAULT_NAME

CLI 操作用のオプションの正確なボールト名。未設定の場合は、アクティブなボールトが使用されます。

未設定

OBSIDIAN_ENABLE_COMMANDS

コマンドパレットのペア(obsidian_list_commands + obsidian_execute_command)用のオプトインフラグ。デフォルトはオフ — Obsidian コマンドは不透明で、破壊的な操作が可能です。

false

OBSIDIAN_ENABLE_DELETE

ノートとフォルダの削除用のオプトインフラグ。デフォルトはオフのため、両方の削除ツールは tools/list に含まれません。

false

OBSIDIAN_READ_PATHS

読み取り操作用のカンマ区切りのボールト相対フォルダ許可リスト。プレフィックスベースで暗黙的に再帰。大文字小文字を区別しません。末尾のスラッシュは正規化されます。未設定 = ボールト全体。書き込みパスは暗黙的に読み取り可能です。

未設定

OBSIDIAN_WRITE_PATHS

書き込み操作用のカンマ区切りのボールト相対フォルダ許可リスト。OBSIDIAN_READ_PATHS と同じ構文。未設定 = ボールト全体。

未設定

OBSIDIAN_READ_ONLY

グローバルなキルスイッチ。true の場合、OBSIDIAN_WRITE_PATHS に関係なくすべての書き込みを拒否し、OBSIDIAN_ENABLE_COMMANDS のペアを無効にします(コマンドは変更を加える可能性があります)。

false

OBSIDIAN_OMNISEARCH_URL

Omnisearch プラグインの HTTP サーバー用のオーバーライド URL。未設定の場合、OBSIDIAN_BASE_URL のホストからポート 51361 で導出されます(http://localhost:51361 にフォールバック)。起動時に一度だけプローブされ、到達可能な場合は omnisearch モードが obsidian_search_notes に追加されます。それ以外の場合はツールスキーマから省略されます。再プローブするにはサーバーを再起動してください。

導出

MCP_TRANSPORT_TYPE

トランスポート: stdio または http

stdio

MCP_HTTP_HOST

HTTP サーバーのホスト。

127.0.0.1

MCP_HTTP_PORT

HTTP サーバーのポート。

3010

MCP_HTTP_ENDPOINT_PATH

JSON-RPC ハンドラーのエンドポイントパス。

/mcp

MCP_PUBLIC_URL

TLS 終端リバースプロキシ展開用のパブリックオリジンオーバーライド(ランディングページ、Server Card、RFC 9728 メタデータ)。

未設定

MCP_AUTH_MODE

認証モード: nonejwt、または oauth

none

MCP_AUTH_SECRET_KEY

MCP_AUTH_MODE=jwt の場合は必須。 受信 JWT の検証に使用される 32 文字以上の共有シークレット。

MCP_AUTH_DISABLE_SCOPE_CHECKS

true の場合、認証コンテキストの存在チェック後にツールごとのスコープ強制をバイパスします。トークンの署名、オーディエンス、発行者、有効期限の検証はそのまま維持されます。カスタムクレームを注入できない場合にのみ使用し、アクセス制御には OBSIDIAN_READ_PATHS / OBSIDIAN_WRITE_PATHS / OBSIDIAN_READ_ONLY と組み合わせてください。バイパスが有効な場合、起動時に WARNING がログに記録されます。

false

MCP_LOG_LEVEL

ログレベル(RFC 5424)。

info

LOGS_DIR

ログファイル用のディレクトリ(Node.js のみ)。

<project-root>/logs

OTEL_ENABLED

OpenTelemetry 計装(スパン、メトリクス、完了ログ)を有効にします。

false

オプションのオーバーライドの完全なリストについては、.env.example を参照してください。

サーバーの実行

ローカル開発

  • 本番バージョンのビルドと実行:

# One-time build
bun run rebuild

# Run the built server
bun run start:stdio
# or
bun run start:http
  • チェックとテストの実行:

bun run devcheck   # Lint, format, typecheck, security, changelog sync
bun run test       # Vitest test suite
bun run lint:mcp   # Validate MCP definitions against spec

Docker

docker build -t obsidian-mcp-server .
docker run --rm -e OBSIDIAN_API_KEY=your-key -p 3010:3010 obsidian-mcp-server

Dockerfile はデフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、/var/log/obsidian-mcp-server にログを出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます — それらを省略するには --build-arg OTEL_ENABLED=false でビルドしてください。

イメージはコンテナ内の0.0.0.0にバインドされます(Dockerのポートマッピングに必要)。自分のマシンの外から到達可能なデプロイでは、MCP_AUTH_MODE=jwtMCP_AUTH_SECRET_KEY付き)またはoauthを設定してください。設定しない場合、リスナーはすべての呼び出し元に代わってOBSIDIAN_API_KEYをボールトに転送します。

プロジェクト構造

ディレクトリ

目的

src/index.ts

createApp()エントリポイント — ツール/リソースを登録し、Obsidianサービスを初期化します。

src/config

Zodを使用したサーバー固有の環境変数解析(OBSIDIAN_*)。

src/services/obsidian

ローカルREST APIクライアント、frontmatter操作、セクション抽出器、ドメイン型。

src/mcp-server/tools

ツール定義(*.tool.ts)と共有入力スキーマ。

src/mcp-server/resources

リソース定義(*.resource.ts)。

src/mcp-server/prompts

プロンプト定義(現在は空 — CRUD/検索の形状は構造化テンプレートの恩恵を受けないため)。

tests/

src/をミラーリングするVitestテスト。

docs/

Local REST APIプラグインの上流OpenAPI仕様と生成されたtree.md

changelog/

バージョンごとのリリースノート。CHANGELOG.mdは再生成されたロールアップです。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.mdを参照してください。要約は以下のとおりです:

  • ハンドラーがスローし、フレームワークがキャッチする — ツールロジック内でtry/catchを使用しない

  • リクエストスコープのロギングにはctx.logを、テナントスコープのストレージにはctx.stateを使用する

  • 新しいツールとリソースはsrc/mcp-server/*/definitions/index.tsのバレルを介して登録する

  • 外部API呼び出しをラップする:生データを検証 → ドメイン型に正規化 → 出力スキーマを返す。欠落フィールドを捏造しない

コントリビューション

バグ、機能リクエスト、ドキュメントの不足はissueで報告してください — 何がアクション可能なissueになるかはCONTRIBUTING.mdを、私たちの協働方法についてはCODE_OF_CONDUCT.mdを参照してください。セキュリティレポートはSECURITY.mdを通じて送信し、公開issueには決して投稿しないでください。

小さく自己完結した修正のプルリクエストは歓迎します。提出前にチェックとテストを実行してください:

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細はLICENSEを参照してください。

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables direct file system access to Obsidian vaults with auto-discovery, full-text search, and note operations. Supports reading, writing, and searching across Obsidian notes without requiring plugins or REST API.
    6
    4,785
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to manage Obsidian vaults through full CRUD operations, wikilink management, and section-level manipulation. It supports frontmatter editing, tag-based searching, and automated link updates to maintain vault integrity.
    MIT

View all related MCP servers

Related MCP Connectors

  • Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…

  • Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.

  • Create, validate, edit, export (markdown/svg/png/mermaid), and search JSON Canvas files.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/huaqing0/obsidian-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server