[{"data":1,"prerenderedAt":808},["ShallowReactive",2],{"blog-layout-\u002Fblog\u002Fknowledge-graph-obsidian-mcp":3,"blog-\u002Fblog\u002Fknowledge-graph-obsidian-mcp":491},{"id":4,"title":5,"body":6,"date":481,"description":482,"extension":483,"image":484,"meta":485,"navigation":486,"path":487,"seo":488,"stem":489,"__hash__":490},"blog\u002Fblog\u002Fknowledge-graph-obsidian-mcp.md","Building a Knowledge Graph with Obsidian and MCP",{"type":7,"value":8,"toc":471},"minimark",[9,13,17,22,25,33,37,40,68,71,75,92,108,122,326,329,333,340,343,347,350,353,373,377,380,383,387,390,417,420,424,427,450,453,456,467],[10,11,5],"h1",{"id":12},"building-a-knowledge-graph-with-obsidian-and-mcp",[14,15,16],"p",{},"Obsidian vaults are just folders of Markdown files. But when you connect them to an AI assistant through MCP, they become something more: a knowledge graph that your tools can navigate, search, and reason about.",[18,19,21],"h2",{"id":20},"the-problem-notes-without-structure","The Problem: Notes Without Structure",[14,23,24],{},"Most people dump notes into Obsidian without thinking about how they'll be used later. The result is a pile of files that's hard to search and impossible for an AI to make sense of.",[14,26,27,28,32],{},"The community has been clear about this: ",[29,30,31],"strong",{},"Obsidian MCP without structured note types just dumps notes wherever"," — no concept of \"this is a meeting note vs a project log.\" The structured approach is what makes the system actually usable.",[18,34,36],{"id":35},"step-1-define-your-note-types","Step 1: Define Your Note Types",[14,38,39],{},"Before connecting anything to MCP, decide what kinds of notes you'll create. Each type should have its own structure:",[41,42,43,50,56,62],"ul",{},[44,45,46,49],"li",{},[29,47,48],{},"Meeting notes"," — date, attendees, decisions, action items",[44,51,52,55],{},[29,53,54],{},"Project logs"," — project name, status, blockers, next steps",[44,57,58,61],{},[29,59,60],{},"Architecture decisions"," — context, options, decision, consequences",[44,63,64,67],{},[29,65,66],{},"Ideas"," — topic, related notes, status (seeded \u002F developing \u002F archived)",[14,69,70],{},"One developer in the community built an Obsidian plugin specifically for this: define note types with documented metadata, folder paths, templates, default values, and required vs optional fields. This schema layer is what separates a knowledge graph from a note graveyard.",[18,72,74],{"id":73},"step-2-connect-via-mcp","Step 2: Connect via MCP",[14,76,77,78,85,86,91],{},"The connection itself is straightforward. Install the ",[79,80,84],"a",{"href":81,"rel":82},"https:\u002F\u002Fgithub.com\u002Fcoddingtonbear\u002Fobsidian-local-rest-api",[83],"nofollow","Local REST API plugin",", enable it, copy the API key from the plugin settings, then add ",[79,87,90],{"href":88,"rel":89},"https:\u002F\u002Fgithub.com\u002FMarkusPfundstein\u002Fmcp-obsidian",[83],"Markus Pfundstein's mcp-obsidian server"," (the community default for talking to Obsidian over HTTP).",[14,93,94,97,98,102,103,107],{},[29,95,96],{},"Dataview"," — Install the ",[79,99,96],{"href":100,"rel":101},"https:\u002F\u002Fgithub.com\u002Fblacksmithgu\u002Fobsidian-dataview",[83]," community plugin as well. ",[104,105,106],"code",{},"mcp-obsidian"," relies on Dataview for structured queries over your vault; without it, graph-style retrieval and many tool paths will not behave as intended.",[14,109,110,113,114,117,118,121],{},[29,111,112],{},"TLS certificate"," — The Local REST API serves HTTPS by default with a plugin-generated certificate. For the default ",[104,115,116],{},"OBSIDIAN_HOST"," \u002F ",[104,119,120],{},"OBSIDIAN_PORT"," setup to work without TLS errors, install or trust that certificate using the plugin’s instructions (usually from the plugin settings: export or open the cert and add it to your OS trust store). Until the client trusts the cert, connections can fail even with the correct API key.",[123,124,129],"pre",{"className":125,"code":126,"language":127,"meta":128,"style":128},"language-json shiki shiki-themes material-theme-lighter github-light github-dark monokai","{\n  \"mcpServers\": {\n    \"mcp-obsidian\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-obsidian\"],\n      \"env\": {\n        \"OBSIDIAN_API_KEY\": \"\u003Cyour_api_key_here>\",\n        \"OBSIDIAN_HOST\": \"127.0.0.1\",\n        \"OBSIDIAN_PORT\": \"27124\"\n      }\n    }\n  }\n}\n","json","",[104,130,131,140,160,175,202,226,240,263,283,302,308,314,320],{"__ignoreMap":128},[132,133,136],"span",{"class":134,"line":135},"line",1,[132,137,139],{"class":138},"swvn1","{\n",[132,141,143,147,151,154,157],{"class":134,"line":142},2,[132,144,146],{"class":145},"saDeg","  \"",[132,148,150],{"class":149},"sEff5","mcpServers",[132,152,153],{"class":145},"\"",[132,155,156],{"class":138},":",[132,158,159],{"class":138}," {\n",[132,161,163,166,169,171,173],{"class":134,"line":162},3,[132,164,165],{"class":145},"    \"",[132,167,106],{"class":168},"s_MOj",[132,170,153],{"class":145},[132,172,156],{"class":138},[132,174,159],{"class":138},[132,176,178,181,185,187,189,193,197,199],{"class":134,"line":177},4,[132,179,180],{"class":145},"      \"",[132,182,184],{"class":183},"sTC9v","command",[132,186,153],{"class":145},[132,188,156],{"class":138},[132,190,192],{"class":191},"sh1VR"," \"",[132,194,196],{"class":195},"sINAO","uvx",[132,198,153],{"class":191},[132,200,201],{"class":138},",\n",[132,203,205,207,210,212,214,217,219,221,223],{"class":134,"line":204},5,[132,206,180],{"class":145},[132,208,209],{"class":183},"args",[132,211,153],{"class":145},[132,213,156],{"class":138},[132,215,216],{"class":138}," [",[132,218,153],{"class":191},[132,220,106],{"class":195},[132,222,153],{"class":191},[132,224,225],{"class":138},"],\n",[132,227,229,231,234,236,238],{"class":134,"line":228},6,[132,230,180],{"class":145},[132,232,233],{"class":183},"env",[132,235,153],{"class":145},[132,237,156],{"class":138},[132,239,159],{"class":138},[132,241,243,246,250,252,254,256,259,261],{"class":134,"line":242},7,[132,244,245],{"class":145},"        \"",[132,247,249],{"class":248},"sogGa","OBSIDIAN_API_KEY",[132,251,153],{"class":145},[132,253,156],{"class":138},[132,255,192],{"class":191},[132,257,258],{"class":195},"\u003Cyour_api_key_here>",[132,260,153],{"class":191},[132,262,201],{"class":138},[132,264,266,268,270,272,274,276,279,281],{"class":134,"line":265},8,[132,267,245],{"class":145},[132,269,116],{"class":248},[132,271,153],{"class":145},[132,273,156],{"class":138},[132,275,192],{"class":191},[132,277,278],{"class":195},"127.0.0.1",[132,280,153],{"class":191},[132,282,201],{"class":138},[132,284,286,288,290,292,294,296,299],{"class":134,"line":285},9,[132,287,245],{"class":145},[132,289,120],{"class":248},[132,291,153],{"class":145},[132,293,156],{"class":138},[132,295,192],{"class":191},[132,297,298],{"class":195},"27124",[132,300,301],{"class":191},"\"\n",[132,303,305],{"class":134,"line":304},10,[132,306,307],{"class":138},"      }\n",[132,309,311],{"class":134,"line":310},11,[132,312,313],{"class":138},"    }\n",[132,315,317],{"class":134,"line":316},12,[132,318,319],{"class":138},"  }\n",[132,321,323],{"class":134,"line":322},13,[132,324,325],{"class":138},"}\n",[14,327,328],{},"The MCP client exposes tools to list and search the vault, read files, patch and append content, and delete files. Your vault stays queryable through whatever folder Obsidian has open.",[18,330,332],{"id":331},"step-3-build-the-graph","Step 3: Build the Graph",[14,334,335,336,339],{},"The real value comes from linking. Obsidian's ",[104,337,338],{},"[[double bracket]]"," syntax creates connections between notes. Over time, these links form a graph — and an assistant connected via MCP can traverse it.",[14,341,342],{},"When you ask \"What decisions have I made about authentication?\", the model doesn't have to stop at the word \"authentication.\" It can follow links from your project notes to architecture decisions to meeting summaries and keep context aligned with how you structured the vault.",[18,344,346],{"id":345},"going-further-vector-search","Going Further: Vector Search",[14,348,349],{},"For larger vaults, semantic search becomes essential. Some users create a vault vector database with MCP to let AI perform similarity search across their knowledge base. That way assistants can surface relevant notes even when the exact keywords don't match.",[14,351,352],{},"The setup: run a local embedding model, index your vault, and expose it through MCP. Now \"find notes about my authentication decisions\" works even if the notes say \"OAuth implementation\" or \"login flow.\"",[14,354,355,356,361,362,365,366,365,369,372],{},"If you want that class of search without assembling pieces yourself, ",[79,357,360],{"href":358,"rel":359},"https:\u002F\u002Fgithub.com\u002Ftobi\u002Fqmd",[83],"QMD (Query Markup Documents)"," is worth a look: it indexes Markdown on-device, combines BM25 keyword search with vector semantic search and optional local re-ranking, and ships an MCP server (",[104,363,364],{},"query",", ",[104,367,368],{},"get",[104,370,371],{},"multi_get",", and friends) so your client can retrieve structured results and full documents in one workflow.",[18,374,376],{"id":375},"the-docker-mcp-toolkit","The Docker MCP Toolkit",[14,378,379],{},"If you want to run MCP servers in containers, the Docker MCP toolkit makes it easy. Add an Obsidian server through the catalog, paste your API key, and point any MCP-capable client at the gateway — Cursor, Claude Desktop, OpenCode, LM Studio, or others.",[14,381,382],{},"The gateway handles authentication, tool routing, and secret management. You describe the outcome; the client and tools do the rest.",[18,384,386],{"id":385},"what-this-looks-like-in-practice","What This Looks Like in Practice",[14,388,389],{},"Here's a typical workflow:",[391,392,393,399,405,411],"ol",{},[44,394,395,398],{},[29,396,397],{},"Morning"," — The assistant reads my daily note and picks up what I'm working on",[44,400,401,404],{},[29,402,403],{},"During work"," — I capture decisions and meeting notes as they happen",[44,406,407,410],{},[29,408,409],{},"End of day"," — The assistant summarizes, links related notes, updates project status",[44,412,413,416],{},[29,414,415],{},"Next morning"," — Context carries forward in the vault. Less re-explaining in the chat.",[14,418,419],{},"The vault becomes an extension of your thinking. Not just a place to store notes, but a knowledge graph that helps you notice patterns you'd miss otherwise.",[18,421,423],{"id":422},"getting-started","Getting Started",[14,425,426],{},"If you're starting from scratch:",[391,428,429,434,441,444,447],{},[44,430,431,432],{},"Install Obsidian, the Local REST API plugin, and ",[29,433,96],{},[44,435,436,437,440],{},"Trust the Local REST API ",[29,438,439],{},"SSL certificate"," so the default MCP env can connect over HTTPS",[44,442,443],{},"Define 3-4 note types with templates",[44,445,446],{},"Connect via MCP",[44,448,449],{},"Start writing. Link everything.",[14,451,452],{},"Your future self will thank you.",[454,455],"hr",{},[14,457,458],{},[459,460,461,462,466],"em",{},"For more on AI-assisted development, see my post on ",[79,463,465],{"href":464},"\u002Fblog\u002Fralph-loops","Ralph Loops",".",[468,469,470],"style",{},"html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .saDeg, html code.shiki .saDeg{--shiki-light:#39ADB5;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sEff5, html code.shiki .sEff5{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .s_MOj, html code.shiki .s_MOj{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sTC9v, html code.shiki .sTC9v{--shiki-light:#F76D47;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sh1VR, html code.shiki .sh1VR{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .sINAO, html code.shiki .sINAO{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .sogGa, html code.shiki .sogGa{--shiki-light:#E53935;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":128,"searchDepth":142,"depth":142,"links":472},[473,474,475,476,477,478,479,480],{"id":20,"depth":142,"text":21},{"id":35,"depth":142,"text":36},{"id":73,"depth":142,"text":74},{"id":331,"depth":142,"text":332},{"id":345,"depth":142,"text":346},{"id":375,"depth":142,"text":376},{"id":385,"depth":142,"text":386},{"id":422,"depth":142,"text":423},"2026-04-04T00:00:00.000Z","How to turn your Obsidian vault into a queryable knowledge graph that AI assistants can navigate, search, and learn from.","md",null,{},true,"\u002Fblog\u002Fknowledge-graph-obsidian-mcp",{"title":5,"description":482},"blog\u002Fknowledge-graph-obsidian-mcp","XXYXRIHPCprsdoiDX5YZIOd4JlfHdEi1lyoXEN64xbo",{"id":4,"title":5,"body":492,"date":481,"description":482,"extension":483,"image":484,"meta":806,"navigation":486,"path":487,"seo":807,"stem":489,"__hash__":490},{"type":7,"value":493,"toc":796},[494,496,498,500,502,506,508,510,528,530,532,540,549,557,707,709,711,715,717,719,721,723,734,736,738,740,742,744,762,764,766,768,784,786,788,794],[10,495,5],{"id":12},[14,497,16],{},[18,499,21],{"id":20},[14,501,24],{},[14,503,27,504,32],{},[29,505,31],{},[18,507,36],{"id":35},[14,509,39],{},[41,511,512,516,520,524],{},[44,513,514,49],{},[29,515,48],{},[44,517,518,55],{},[29,519,54],{},[44,521,522,61],{},[29,523,60],{},[44,525,526,67],{},[29,527,66],{},[14,529,70],{},[18,531,74],{"id":73},[14,533,77,534,85,537,91],{},[79,535,84],{"href":81,"rel":536},[83],[79,538,90],{"href":88,"rel":539},[83],[14,541,542,97,544,102,547,107],{},[29,543,96],{},[79,545,96],{"href":100,"rel":546},[83],[104,548,106],{},[14,550,551,113,553,117,555,121],{},[29,552,112],{},[104,554,116],{},[104,556,120],{},[123,558,559],{"className":125,"code":126,"language":127,"meta":128,"style":128},[104,560,561,565,577,589,607,627,639,657,675,691,695,699,703],{"__ignoreMap":128},[132,562,563],{"class":134,"line":135},[132,564,139],{"class":138},[132,566,567,569,571,573,575],{"class":134,"line":142},[132,568,146],{"class":145},[132,570,150],{"class":149},[132,572,153],{"class":145},[132,574,156],{"class":138},[132,576,159],{"class":138},[132,578,579,581,583,585,587],{"class":134,"line":162},[132,580,165],{"class":145},[132,582,106],{"class":168},[132,584,153],{"class":145},[132,586,156],{"class":138},[132,588,159],{"class":138},[132,590,591,593,595,597,599,601,603,605],{"class":134,"line":177},[132,592,180],{"class":145},[132,594,184],{"class":183},[132,596,153],{"class":145},[132,598,156],{"class":138},[132,600,192],{"class":191},[132,602,196],{"class":195},[132,604,153],{"class":191},[132,606,201],{"class":138},[132,608,609,611,613,615,617,619,621,623,625],{"class":134,"line":204},[132,610,180],{"class":145},[132,612,209],{"class":183},[132,614,153],{"class":145},[132,616,156],{"class":138},[132,618,216],{"class":138},[132,620,153],{"class":191},[132,622,106],{"class":195},[132,624,153],{"class":191},[132,626,225],{"class":138},[132,628,629,631,633,635,637],{"class":134,"line":228},[132,630,180],{"class":145},[132,632,233],{"class":183},[132,634,153],{"class":145},[132,636,156],{"class":138},[132,638,159],{"class":138},[132,640,641,643,645,647,649,651,653,655],{"class":134,"line":242},[132,642,245],{"class":145},[132,644,249],{"class":248},[132,646,153],{"class":145},[132,648,156],{"class":138},[132,650,192],{"class":191},[132,652,258],{"class":195},[132,654,153],{"class":191},[132,656,201],{"class":138},[132,658,659,661,663,665,667,669,671,673],{"class":134,"line":265},[132,660,245],{"class":145},[132,662,116],{"class":248},[132,664,153],{"class":145},[132,666,156],{"class":138},[132,668,192],{"class":191},[132,670,278],{"class":195},[132,672,153],{"class":191},[132,674,201],{"class":138},[132,676,677,679,681,683,685,687,689],{"class":134,"line":285},[132,678,245],{"class":145},[132,680,120],{"class":248},[132,682,153],{"class":145},[132,684,156],{"class":138},[132,686,192],{"class":191},[132,688,298],{"class":195},[132,690,301],{"class":191},[132,692,693],{"class":134,"line":304},[132,694,307],{"class":138},[132,696,697],{"class":134,"line":310},[132,698,313],{"class":138},[132,700,701],{"class":134,"line":316},[132,702,319],{"class":138},[132,704,705],{"class":134,"line":322},[132,706,325],{"class":138},[14,708,328],{},[18,710,332],{"id":331},[14,712,335,713,339],{},[104,714,338],{},[14,716,342],{},[18,718,346],{"id":345},[14,720,349],{},[14,722,352],{},[14,724,355,725,361,728,365,730,365,732,372],{},[79,726,360],{"href":358,"rel":727},[83],[104,729,364],{},[104,731,368],{},[104,733,371],{},[18,735,376],{"id":375},[14,737,379],{},[14,739,382],{},[18,741,386],{"id":385},[14,743,389],{},[391,745,746,750,754,758],{},[44,747,748,398],{},[29,749,397],{},[44,751,752,404],{},[29,753,403],{},[44,755,756,410],{},[29,757,409],{},[44,759,760,416],{},[29,761,415],{},[14,763,419],{},[18,765,423],{"id":422},[14,767,426],{},[391,769,770,774,778,780,782],{},[44,771,431,772],{},[29,773,96],{},[44,775,436,776,440],{},[29,777,439],{},[44,779,443],{},[44,781,446],{},[44,783,449],{},[14,785,452],{},[454,787],{},[14,789,790],{},[459,791,461,792,466],{},[79,793,465],{"href":464},[468,795,470],{},{"title":128,"searchDepth":142,"depth":142,"links":797},[798,799,800,801,802,803,804,805],{"id":20,"depth":142,"text":21},{"id":35,"depth":142,"text":36},{"id":73,"depth":142,"text":74},{"id":331,"depth":142,"text":332},{"id":345,"depth":142,"text":346},{"id":375,"depth":142,"text":376},{"id":385,"depth":142,"text":386},{"id":422,"depth":142,"text":423},{},{"title":5,"description":482},1777044040314]