The searchIn parameter is the thing to learn first: a content search for 'OKR 2025' will not find a file called OKR 2025.md, so pass searchIn: filename when you are after a note by name. Because everything rides on GitHub's search index, a large repository can fall outside what GitHub indexes — run diagnoseSearch when results come back empty and the query looked right.
A read-only bridge between an AI client and a GitHub-hosted Obsidian vault. Everything goes through the GitHub API, so nothing has to be checked out locally and Obsidian never has to be open.
- getFileContents to read one note, document or file from the vault by path
- searchFiles with a searchIn mode that decides where to look: filename for exact file names, path for anywhere in the path, content for the text inside, or all for every one of them — with paging and GitHub's own search syntax available
- searchIssues across the repository's issues and discussions, for vaults where tasks are tracked alongside notes
- getCommitHistory over a window of days with an author filter, a commit cap and optional diffs, so you can watch a note develop
- diagnoseSearch to check repository connectivity and whether the repository is within GitHub's indexing limits
A GitHub personal access token in GITHUB_TOKEN, plus GITHUB_OWNER and GITHUB_REPO naming the repository the vault lives in. The token needs repo for a private repository or public_repo for a public one, and read:org when the repository belongs to an organisation. Run it over stdio with npx -y obsidian-github-mcp.
One command plus a key — npm install obsidian-github-mcp, then supply credentials
