obsidian-mcp-server
[!NOTE] このリポジトリはhuaqing0カスタムエディションであり、
cyanheads/obsidian-mcp-serverv3.5.0 をApache-2.0ライセンスのもとでベースにしています。アップストリームのサーバーを維持しつつ、このエディションで使用されるローカルワークスペース、ボールト構造、ネイティブExcalidraw自動化を追加しています。以下のnpmおよびMCPBインストールリンクは引き続きアップストリームの配布物を指しています。このカスタムエディションは現在ソースのみの提供です。
ツール
31のツールが、ノートの内容、メタデータ、バックリンク、ネイティブExcalidraw自動化、ボールト構造の完全な管理をカバーし、さらにObsidianのコマンドパレットコマンド用の保護されたエスケープハッチも備えています。
ツール名 | 説明 |
| ノートを生のコンテンツ、完全な構造化形式(コンテンツ + frontmatter + タグ + stat、オプションで書かれたリンク、解決済みリンク、バックリンクを含む)、構造的なドキュメントマップ、または単一セクションとして読み取ります。 |
| ボールトパス配下のノートとサブディレクトリを一覧表示します。再帰的ウォーク(デフォルト深さ2、最大深さ20、1000エントリ上限)で、オプションの |
| 階層的な親を含む、使用回数付きのボールトタグを一覧表示します。カウント降順で並べ替えられ、 |
| Obsidianのコマンドパレットコマンドを一覧表示し、オプションで表示名の |
| テキスト、JSONLogic、またはBM25ランキングのOmnisearch(プラグインが到達可能な場合)でボールトを検索します。結果は不透明なカーソルでページネーションされます。 |
| ネイティブの |
| Excalidrawのパース、安定した意味論的ID、ジオメトリ、リレーション参照を検証します。 |
| ノード、バインドされたリレーション、フレームの意味論的バッチとして、ネイティブのExcalidraw描画を作成します。 |
| 既存の描画に意味論的ノード、リレーション、またはフレームを冪等に追加します。 |
| 安定した意味論的IDで管理対象の描画要素を外科的に更新します。 |
| 描画ファイルと無関係なコンテンツを保持しながら、選択した管理対象要素を削除します。 |
| 管理対象ノードを決定的なリレーション深度レイヤーに配置します。 |
| 安定した意味論的IDで、管理対象の描画要素にObsidianリンクを添付または置換します。 |
| ライブのExcalidrawビューで選択した意味論的要素にフォーカスし、周囲の要素を暗くするか復元します。 |
| プラグインのエクスポートAPIを通じて、ネイティブのExcalidraw描画を境界付きPNGプレビューにレンダリングします。 |
| 検証済みのExcalidraw wiki埋め込みを既存のMarkdownノートに冪等に追加します。 |
| ノートを作成し、単一セクションをその場で置換するか、 |
| ノートにコンテンツを追加します。 |
| 見出し、ブロック参照、またはfrontmatterフィールドに対する外科的な |
| 単一ノート内の検索置換を行い、デフォルトでは本文にスコープされます。リテラルまたは正規表現マッチングで、完全一致、空白柔軟、大文字小文字の区別オプションに対応し、キャプチャグループ置換をサポートします。 |
| 単一のfrontmatterキーに対するアトミックな |
| タグを追加、削除、または一覧表示します。デフォルトではfrontmatterの |
| Obsidianを通じてボールトフォルダと不足している親フォルダを作成します。 |
| ObsidianのFileManagerを通じてボールトのファイルまたはフォルダを移動または名前変更し、内部リンクがリンク更新に参加できるようにします。 |
| ノートを完全に削除します。 |
| Obsidianのゴミ箱または完全削除を通じて、フォルダとそのすべての子孫を削除します。 |
|
|
| タブ、ペイン、サイドバー、アクティブファイル、Markdownエディタモードを検査します。 |
| 型付きアクションを通じて、サイドバー、タブ、分割、リーフのフォーカス/クローズ、Markdownエディタモード、組み込み検索を制御します。 |
| 視覚的検証のためにObsidianウィンドウを境界付きMCP画像ブロックとしてキャプチャします。フォルダスコープの権限がアクティブな場合は拒否されます。 |
| IDでObsidianコマンドパレットコマンドを実行します。 |
obsidian_get_note
ボールトパス、アクティブファイル、または定期ノート(daily、weekly、monthly、quarterly、yearly)で指定されたノートを、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で拒否されます)。jsonlogic—path、content、frontmatter.<key>、tags、stat.{ctime,mtime,size}に対して評価されるJSONLogicツリー。カスタムのglobとregexp演算子は、どちらも[PATTERN, VALUE]を受け取ります — パターンが先、次にフィールド参照:{"glob": ["Projects/*.md", {"var": "path"}]}。逆順にすると、ノート自身のフィールドがパターンとしてコンパイルされます:globは何もマッチせず、regexpはフィールドがパースされる内容に対して即座に失敗します。これはバックリンクを表現する方法でもあります。専用のツールや上流のエンドポイントがないためです:{"regexp": ["\\[\\[Target Note(\\||#|\\]\\])", {"var": "content"}]}は、本文がTarget Noteをウィキリンクしているすべてのノートを返します。omnisearch— コミュニティの Omnisearch プラグインによるBM25ランキング検索。引用符で囲まれたフレーズ、-exclusion、path:/ext:フィルタ、タイポ許容、PDF + OCRカバレッジ(Text Extractor 経由)、AI Image Analyzer インデックスが有効な場合の視覚的概念画像マッチをサポートします。プラグインのHTTPサーバーが起動時に到達可能な場合のみモード列挙に存在します。上流は結果を50件にハードキャップします — クエリを絞り込んでより多くを表示してください(キャップに達した可能性がある場合、レスポンスはtruncated: trueを運びます)。
結果のページネーションは、MCP 2025-11-25 仕様に従い、不透明なカーソルで行われます。最初のページでは cursor を省略し、以降は直前のレスポンスの nextCursor を渡します。すべての結果には totalCount(パス・ポリシー適用後、ページネーション前)が含まれ、最後のページでは nextCursor が省略されます。テキストモードのヒットはさらに、ファイルごとに maxMatchesPerHit(デフォルト 10)で切り詰められるため、マッチの多い単一のノートがレスポンス予算を超えることはありません。切り詰められたヒットには truncated: true と totalMatches が付与されます。
obsidian_write_note
ファイル全体の誤上書きに対する保護デフォルト付きで、新規作成または外科的置換を行います。
sectionなし — ファイル全体のPUT。overwrite: trueが設定されていない限り、既存ファイルの上書きを拒否します。file_exists(Conflict)エラーは、その場での編集にobsidian_patch_note/obsidian_append_to_note/obsidian_replace_in_noteを推奨します。sectionあり — 指定された見出し/ブロック/frontmatter フィールドに対する置換付きPATCHで、ファイルの残りの部分には触れません。overwriteフラグはセクションモードでは無視されます。
出力は、呼び出しによって新しいファイルが作成された場合は created: true を報告し、既存ファイルを置換した場合やセクションを対象にした場合は false を報告します。すべての変更ツールは previousSizeInBytes と currentSizeInBytes も返すため、エージェントは誤った上書き、予期しない上流の動作、または誤ったファイルに到達したタイポパスを検出できます。
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_note と obsidian_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[]はbodyCountとfrontmatterCountを別々に報告します。
frontmatter がスコープ内にある場合、書き換えられた YAML は何かを書き込む前に再パースされます。プロパティのマッピングとしてパースできなくなった場合、呼び出しは frontmatter_invalid で失敗し、ノートは元のバイトを保持します。このチェックは、壊れる YAML(スカラー内の引用符なしの :、エイリアスに書き換えられたリストマーカー、余分な引用符)を捕捉します。ただし、整形式のままで別の意味になる編集(キーを改名する部分文字列の衝突や、スカラーの引用符を削除して型を変える置換など)は捕捉できません。単一プロパティへの型付き編集には obsidian_manage_frontmatter を優先してください。
置換ごとのオプション:
useRegex—searchを ECMAScript 正規表現として扱います。useRegex: trueの場合、置換は$1/$&キャプチャグループ参照を尊重します。caseSensitive—falseの場合、大文字小文字を区別せずにマッチします。wholeWord— パターンを\b…\bでラップします。リテラルモードと正規表現モードの両方で機能します。flexibleWhitespace—search内の任意の空白の連続を\s+に置き換えます。リテラルモードのみ —useRegex: trueの場合は効果がありません(直接表現してください)。replaceAll—falseの場合、最初のマッチのみが置換されます。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/ は projects/a.md、projects/sub/b.md などにマッチします。
書き込みパスは暗黙的に読み取り可能です — 見えないものを編集することはできません。したがって、ターゲットが READ_PATHS または WRITE_PATHS にマッチする場合、読み取りは成功します。
OBSIDIAN_READ_ONLY=true はパスチェックの前に短絡します — すべての書き込みツールとコマンドパレットのペアは起動時に disabledTool() でラップされ(tools/list には存在しません)、サービスに到達する書き込みは WRITE_PATHS に関係なく実行時に拒否されます。
拒否は型付きの path_forbidden(JSON-RPC コード Forbidden)で、アクティブなスコープが data.recovery.hint と data.activeScope にエコーされるため、LLM はサーバーログを調べずに自己修正できます。obsidian_search_notes の検索結果は READ_PATHS に対して静かにフィルタリングされます — 「N 件のヒットを隠しました」というインジケーターを表示するとゲートの目的が損なわれます。
タグの一覧表示はヴォールト全体にわたります。 obsidian_list_tags と obsidian://tags リソースはヴォールト全体のタグ名を集約し、OBSIDIAN_READ_PATHS によって狭められません — ゲートするパスがないため、読み取りスコープ外のタグ名(ノートの内容ではなく)が表面化する可能性があります。
起動バナーはアクティブなスコープをログに記録するため、オペレーターは起動時に設定を検証できます。
リソース
型 | URI | 説明 |
リソース |
| ヴォールト内のノート — コンテンツ、frontmatter、タグ、ファイルメタデータ。 |
リソース |
| ヴォールト全体で見つかったすべてのタグと使用回数。 |
リソース |
| サーバーの到達可能性、認証ステータス、プラグイン/Obsidian のバージョン情報、プラグインマニフェスト。 |
すべてのリソースデータはツールからも到達可能です — obsidian://vault/{+path} には obsidian_get_note、obsidian://tags には obsidian_list_tags。リソースは、特定のノートやヴォールトのスナップショットを会話に添付することを好むクライアントのために存在します。タグのペアはミラーではありません。obsidian://tags はスナップショットセマンティクスを維持し、上流のペイロードを全体かつソートなしで返します。一方、obsidian_list_tags はカウント順に並べ、上限を設けます。
機能
@cyanheads/mcp-ts-core をベースに構築:
宣言的なツールとリソース定義 — プリミティブごとに単一ファイル、フレームワークが登録と検証を処理
統一されたエラー処理 — ハンドラーがスローし、フレームワークがキャッチ、分類、フォーマット。ツールは型付きの
errors[]コントラクトで失敗面を公開initializeでのサーバーレベルのinstructions— デプロイ固有のオリエンテーション(アクティブパスポリシー、読み取り専用モード、コマンドパレットの切り替え)を、静的なツール/リソースカタログとともに仕様準拠のクライアントに提示HTTP トランスポートでのプラグ可能な認証:
none、jwt、oauthオプションの 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_noteとobsidian_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(デフォルト)で処理されます。
インストール
リポジトリをクローン:
git clone https://github.com/cyanheads/obsidian-mcp-server.gitディレクトリに移動:
cd obsidian-mcp-server依存関係をインストール:
bun install環境を設定:
cp .env.example .env # edit .env and set OBSIDIAN_API_KEY
設定
変数 | 説明 | デフォルト |
| 必須。 Obsidian Local REST API プラグイン用の Bearer トークン。 | — |
| Local REST API プラグインのベース URL。常時稼働の HTTPS ポート(自己署名証明書)には |
|
| TLS 証明書を検証します。プラグインが自己署名証明書を使用するため、デフォルトは |
|
| リクエストごとのタイムアウト(ミリ秒)。 |
|
| ネイティブのファイル/フォルダ構造操作のための Obsidian CLI 実行ファイル。シェルを介さず直接呼び出されます。 |
|
| CLI 操作用のオプションの正確なボールト名。未設定の場合は、アクティブなボールトが使用されます。 | 未設定 |
| コマンドパレットのペア( |
|
| ノートとフォルダの削除用のオプトインフラグ。デフォルトはオフのため、両方の削除ツールは |
|
| 読み取り操作用のカンマ区切りのボールト相対フォルダ許可リスト。プレフィックスベースで暗黙的に再帰。大文字小文字を区別しません。末尾のスラッシュは正規化されます。未設定 = ボールト全体。書き込みパスは暗黙的に読み取り可能です。 | 未設定 |
| 書き込み操作用のカンマ区切りのボールト相対フォルダ許可リスト。 | 未設定 |
| グローバルなキルスイッチ。 |
|
| Omnisearch プラグインの HTTP サーバー用のオーバーライド URL。未設定の場合、 | 導出 |
| トランスポート: |
|
| HTTP サーバーのホスト。 |
|
| HTTP サーバーのポート。 |
|
| JSON-RPC ハンドラーのエンドポイントパス。 |
|
| TLS 終端リバースプロキシ展開用のパブリックオリジンオーバーライド(ランディングページ、Server Card、RFC 9728 メタデータ)。 | 未設定 |
| 認証モード: |
|
|
| — |
|
|
|
| ログレベル(RFC 5424)。 |
|
| ログファイル用のディレクトリ(Node.js のみ)。 |
|
| OpenTelemetry 計装(スパン、メトリクス、完了ログ)を有効にします。 |
|
オプションのオーバーライドの完全なリストについては、.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 specDocker
docker build -t obsidian-mcp-server .
docker run --rm -e OBSIDIAN_API_KEY=your-key -p 3010:3010 obsidian-mcp-serverDockerfile はデフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、/var/log/obsidian-mcp-server にログを出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます — それらを省略するには --build-arg OTEL_ENABLED=false でビルドしてください。
イメージはコンテナ内の0.0.0.0にバインドされます(Dockerのポートマッピングに必要)。自分のマシンの外から到達可能なデプロイでは、MCP_AUTH_MODE=jwt(MCP_AUTH_SECRET_KEY付き)またはoauthを設定してください。設定しない場合、リスナーはすべての呼び出し元に代わってOBSIDIAN_API_KEYをボールトに転送します。
プロジェクト構造
ディレクトリ | 目的 |
|
|
| Zodを使用したサーバー固有の環境変数解析( |
| ローカルREST APIクライアント、frontmatter操作、セクション抽出器、ドメイン型。 |
| ツール定義( |
| リソース定義( |
| プロンプト定義(現在は空 — CRUD/検索の形状は構造化テンプレートの恩恵を受けないため)。 |
|
|
| Local REST APIプラグインの上流OpenAPI仕様と生成された |
| バージョンごとのリリースノート。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、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を参照してください。
This server cannot be installed
Maintenance
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
- AlicenseBqualityDmaintenanceEnables 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.64,785MIT
- FlicenseAqualityDmaintenanceEnables comprehensive management of Obsidian vaults with full CRUD operations, advanced search, link/tag extraction, backlinks discovery, frontmatter editing, and template-based note creation through natural language.16
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to read, write, search, and navigate Obsidian vault notes with support for CRUD operations, full-text search, graph navigation, daily notes, and frontmatter management.4,785
- AlicenseNot gradedqualityDmaintenanceEnables 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
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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