<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Robert Johansson</title>
    <description>The latest articles on DEV Community by Robert Johansson (@robert_j_evc).</description>
    <link>https://dev.to/robert_j_evc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3949004%2F2ff775c4-bb75-4d3a-8cb3-8e29c0e0dff6.png</url>
      <title>DEV Community: Robert Johansson</title>
      <link>https://dev.to/robert_j_evc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robert_j_evc"/>
    <language>en</language>
    <item>
      <title>Wiring Claude Code to Your Obsidian Vault via MCP</title>
      <dc:creator>Robert Johansson</dc:creator>
      <pubDate>Sun, 24 May 2026 12:22:19 +0000</pubDate>
      <link>https://dev.to/robert_j_evc/wiring-claude-code-to-your-obsidian-vault-via-mcp-4k9f</link>
      <guid>https://dev.to/robert_j_evc/wiring-claude-code-to-your-obsidian-vault-via-mcp-4k9f</guid>
      <description>&lt;p&gt;Every time you start a new Claude Code session, you start from zero. Your agent reads the files you point it to — and nothing else. If your project notes, ADRs, and task lists live in Obsidian, your agent has no idea they exist.&lt;/p&gt;

&lt;p&gt;This tutorial wires Claude Code directly to your Obsidian vault. After setup, your agent can read your existing notes, create new ones, and write session summaries that persist between runs — all without you copying anything manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/entire-vc/evc-team-relay" rel="noopener noreferrer"&gt;Team Relay&lt;/a&gt; is a self-hosted server that syncs your Obsidian vault in real-time via Yjs CRDTs. The &lt;a href="https://github.com/entire-vc/evc-team-relay-mcp" rel="noopener noreferrer"&gt;&lt;code&gt;evc-team-relay-mcp&lt;/code&gt;&lt;/a&gt; package wraps its REST API as MCP tools — so any MCP-compatible agent (Claude Code, Codex CLI, OpenCode) can call &lt;code&gt;read_file&lt;/code&gt; and &lt;code&gt;upsert_file&lt;/code&gt; on your vault.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code - MCP -&amp;gt;  evc-team-relay-mcp - REST -&amp;gt; Team Relay - Yjs -&amp;gt; Obsidian
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Changes appear in Obsidian instantly. Notes you create from Claude appear in your sidebar within seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Run the Team Relay backend
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Option A: self-hosted (Docker)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/entire-vc/evc-team-relay.git
&lt;span class="nb"&gt;cd &lt;/span&gt;evc-team-relay
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env        &lt;span class="c"&gt;# edit: set RELAY_SECRET, DB path, etc.&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The control plane runs on port &lt;code&gt;8888&lt;/code&gt; by default. Create a user account via the web UI at &lt;code&gt;http://localhost:8888&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B: hosted&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you'd rather skip ops, a hosted instance is available at &lt;a href="https://entire.vc" rel="noopener noreferrer"&gt;entire.vc&lt;/a&gt;. Create an account there and skip the Docker step. Either way, you'll end up with a control-plane URL, email, and password — that's all the MCP server needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Share your vault folder
&lt;/h2&gt;

&lt;p&gt;In Obsidian, open the Team Relay plugin settings and create a &lt;strong&gt;folder share&lt;/strong&gt; for the vault folder you want the agent to access. Copy the share ID — you'll need it in a moment.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you haven't installed the Obsidian plugin yet: &lt;a href="https://github.com/entire-vc/evc-team-relay-obsidian-plugin" rel="noopener noreferrer"&gt;evc-team-relay-obsidian-plugin&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 3 — Configure Claude Code
&lt;/h2&gt;

&lt;p&gt;Create or edit &lt;code&gt;.mcp.json&lt;/code&gt; in your project root (or &lt;code&gt;~/.claude/.mcp.json&lt;/code&gt; for global access):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"evc-relay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"evc-team-relay-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"RELAY_CP_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://cp.yourdomain.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"RELAY_EMAIL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your@email.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"RELAY_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-password"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No install step needed — &lt;code&gt;uvx&lt;/code&gt; pulls the package from PyPI on first run. Restart Claude Code and the &lt;code&gt;evc-relay&lt;/code&gt; tools will appear.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4 — Try it
&lt;/h2&gt;

&lt;p&gt;Here are three prompts that demonstrate the agent working with your vault. Replace &lt;code&gt;&amp;lt;share_id&amp;gt;&lt;/code&gt; with the UUID from Step 2.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt 1: discover what's in the vault
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List the files in my Obsidian share &amp;lt;share_id&amp;gt; and tell me which ones look like project notes or task lists.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude calls &lt;code&gt;list_shares&lt;/code&gt;, then &lt;code&gt;list_files&lt;/code&gt;, and returns a summary of your vault structure. It does not read any content yet — just the&lt;br&gt;
file tree.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt 2: read existing context
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read "Projects/active-sprint.md" from share &amp;lt;share_id&amp;gt; and summarize what's in progress.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude calls &lt;code&gt;read_file&lt;/code&gt; with &lt;code&gt;file_path="Projects/active-sprint.md"&lt;/code&gt;&lt;br&gt;
and returns a summary. The file content is pulled live from your vault — if you edited it in Obsidian five seconds ago, the agent sees the latest version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt 3: write a session summary
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Based on what we've done this session, create a session log at "AI-sessions/2026-05-15.md" in share &amp;lt;share_id&amp;gt;. Include: what we changed, any open questions, and next steps.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude calls &lt;code&gt;upsert_file&lt;/code&gt;. If the file doesn't exist, it creates it. If it does, it updates in place. Open Obsidian — the note appears in your sidebar within a few seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tools reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;authenticate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logs in and manages JWT tokens internally (auto-called)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_shares&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lists accessible shares; filter by &lt;code&gt;kind="folder"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;or &lt;code&gt;kind="doc"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_files&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns the file tree of a folder share&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads a file by path from a folder share&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;upsert_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates or updates a file by path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_document&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Low-level: reads by doc_id (for doc shares)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;write_document&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Low-level: writes by doc_id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;delete_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deletes a file from a folder share&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The typical flow is: &lt;code&gt;list_shares&lt;/code&gt; → &lt;code&gt;list_files&lt;/code&gt; → &lt;code&gt;read_file&lt;/code&gt; /&lt;br&gt;
&lt;code&gt;upsert_file&lt;/code&gt;. Authentication is automatic — you never pass tokens to&lt;br&gt;
the agent manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  A few things worth knowing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nothing is shell-executed.&lt;/strong&gt; All operations are Python function calls over JSON-RPC. Credentials are env vars, never CLI arguments. There is no command injection surface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agent doesn't see your whole vault by default.&lt;/strong&gt; It only accesses shares you explicitly create. You can share one folder per project and keep the rest private.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Works with other MCP clients too.&lt;/strong&gt; The same &lt;code&gt;.mcp.json&lt;/code&gt; config works for Codex CLI and OpenCode. The session-summary workflow is identical.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MCP server repo (MIT):
&lt;a href="https://github.com/entire-vc/evc-team-relay-mcp" rel="noopener noreferrer"&gt;github.com/entire-vc/evc-team-relay-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Team Relay backend (MIT):
&lt;a href="https://github.com/entire-vc/evc-team-relay" rel="noopener noreferrer"&gt;github.com/entire-vc/evc-team-relay&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something breaks or a tool behaves unexpectedly, open an issue on the MCP repo. Feedback on the tool API is especially welcome — we're still shaping which operations are most useful for AI agent workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
