Skip to main content
Glama
Hint-Services

MCP Private GitHub Search

npm version

Obsidian GitHub MCP

A Model Context Protocol (MCP) server that connects AI assistants to GitHub repositories containing Obsidian vaults. This server enables seamless integration with your knowledge base stored on GitHub, allowing AI assistants to read, search, and analyze your Obsidian notes and documentation.

Why This Tool?

Many Obsidian users store their vaults in GitHub for backup, versioning, and collaboration. This MCP server bridges the gap between your GitHub-hosted Obsidian vault and AI assistants, enabling:

  • Knowledge Base Access: Retrieve specific notes and documents from your Obsidian vault

  • Intelligent Search: Find relevant content across your entire knowledge base

  • Evolution Tracking: See how your ideas and notes have developed over time

  • Task Integration: Connect with issues and project management workflows

Related MCP server: GitHub Integrated MCP Server

Features

  • GitHub Repository Access: Connect to any GitHub repository containing your Obsidian vault

  • Type-Safe Implementation: Written in TypeScript with comprehensive type definitions

  • Input Validation: Robust validation for all API inputs using Zod schemas

  • Error Handling: Graceful error handling with informative messages

  • MCP Integration: Full compatibility with Claude, Cursor, Windsurf, Cline, and other MCP hosts

Available Tools

Knowledge Base Access

  • getFileContents: Retrieve the contents of specific notes, documents, or files from your Obsidian vault

  • searchFiles: Enhanced search with multiple modes:

    • filename: Find files by exact filename (perfect for "OKR 2025" type searches)

    • path: Search anywhere in file paths

    • content: Search within file contents

    • all: Comprehensive search across filenames, paths, and content

Project Management Integration

  • searchIssues: Search for issues and discussions related to your knowledge base projects

  • getCommitHistory: Track how your knowledge base has evolved over time with detailed commit history and diffs

Use Cases

For Knowledge Workers

  • Research Assistant: AI can access your research notes and reference materials

  • Writing Support: Pull relevant background information from your knowledge base

  • Idea Development: Track how concepts have evolved across your notes

For Developers

  • Documentation Access: Retrieve project documentation and technical notes

  • Learning Journals: Access your learning notes and code examples

  • Project Planning: Integrate with GitHub issues for comprehensive project management

For Students & Academics

  • Study Materials: Access lecture notes and study guides

  • Research Papers: Retrieve research notes and citations

  • Collaboration: Work with shared knowledge bases stored in GitHub

Installation

The easiest way to install Obsidian GitHub MCP is using Smithery:

# For Claude Desktop
npx -y @smithery/cli install @Hint-Services/obsidian-github-mcp --client claude

# For Cursor
npx -y @smithery/cli install @Hint-Services/obsidian-github-mcp --client cursor

# For Windsurf
npx -y @smithery/cli install @Hint-Services/obsidian-github-mcp --client windsurf

# For Cline
npx -y @smithery/cli install @Hint-Services/obsidian-github-mcp --client cline

Manual Installation

npm install obsidian-github-mcp

Configuration

Add the server to your MCP settings file with the following configuration:

{
  "mcpServers": {
    "obsidianGithub": {
      "command": "npx",
      "args": ["-y", "obsidian-github-mcp"],
      "env": {
        "GITHUB_TOKEN": "your-github-token",
        "GITHUB_OWNER": "your-github-username",
        "GITHUB_REPO": "your-obsidian-vault-repo"
      }
    }
  }
}

Required Environment Variables

  • GITHUB_TOKEN: Your GitHub personal access token (create one here)

  • GITHUB_OWNER: The owner/organization of the GitHub repository

  • GITHUB_REPO: The name of the repository containing your Obsidian vault

GitHub Token Permissions

Your GitHub token needs the following permissions:

  • repo (for private repositories) or public_repo (for public repositories)

  • read:org (if accessing organization repositories)

Example Workflows

Accessing Your Daily Notes

{
  "tool": "getFileContents",
  "arguments": {
    "filePath": "Daily Notes/2024-01-15.md"
  }
}

Finding Files by Name (Perfect for "OKR 2025" example!)

{
  "tool": "searchFiles",
  "arguments": {
    "query": "OKR 2025",
    "searchIn": "filename"
  }
}

Finding Files by Path

{
  "tool": "searchFiles",
  "arguments": {
    "query": "Daily Notes",
    "searchIn": "path"
  }
}
{
  "tool": "searchFiles",
  "arguments": {
    "query": "machine learning algorithms",
    "searchIn": "content",
    "perPage": 10
  }
}

Comprehensive Search (Filename, Path, and Content)

{
  "tool": "searchFiles",
  "arguments": {
    "query": "project planning",
    "searchIn": "all"
  }
}

Advanced GitHub Search Syntax

{
  "tool": "searchFiles",
  "arguments": {
    "query": "path:*.md extension:md",
    "searchIn": "content"
  }
}

Tracking Knowledge Evolution

{
  "tool": "getCommitHistory",
  "arguments": {
    "days": 30,
    "includeDiffs": true,
    "maxCommits": 10
  }
}

Search Tips & Troubleshooting

Can't Find Your File by Name?

Problem: Searching for "OKR 2025" doesn't find your file named "OKR 2025.md"

Solution: Use the searchIn: "filename" parameter:

{
  "tool": "searchFiles",
  "arguments": {
    "query": "OKR 2025",
    "searchIn": "filename"
  }
}

Advanced Search Techniques

  1. Exact Phrases: Use quotes for multi-word searches

    {
      "query": "\"project planning 2025\"",
      "searchIn": "content"
    }
  2. File Extensions: Find specific file types

    {
      "query": "path:*.md",
      "searchIn": "content"
    }
  3. Directory Specific: Search within folders

    {
      "query": "path:\"Daily Notes/\"",
      "searchIn": "content"
    }

Project Structure

obsidian-github-mcp/
├── src/
│   ├── index.ts          # Main MCP server entry point
│   └── github/           # GitHub API integration
│       ├── client.ts     # GitHub client implementation
│       └── types.ts      # TypeScript type definitions
├── docs/                 # Documentation
├── package.json          # Project configuration
└── tsconfig.json         # TypeScript configuration

For Developers

If you're interested in contributing to this project or developing your own tools with this server, please see the Development Guide.

Development Commands

  • pnpm install - Install dependencies

  • pnpm run build - Build the project

  • pnpm run dev - Run in development mode with inspector

  • pnpm run inspector - Launch MCP inspector for testing

If you're migrating from the older mcp-private-github-search package:

  1. Update your package name in configuration:

    {
      "mcpServers": {
        "obsidianGithub": {
          "command": "npx",
          "args": ["-y", "obsidian-github-mcp"]
        }
      }
    }
  2. The functionality remains the same - all existing tools work identically

  3. Consider the new Obsidian-focused use cases and workflows

Learn More

For further information on the MCP ecosystem, refer to:

About Hint Services

"The future is already here, it's just unevenly distributed"

— William Gibson, Author

Hint Services is a boutique consultancy with a mission to develop and expand how user interfaces leverage artificial intelligence technology. We architect ambition at the intersection of AI and User Experience, founded and led by Ben Hofferber.

We offer specialized AI workshops for design teams looking to embrace AI tools without becoming developers. Learn more about our training and workshops.

Available Tools

4 tools
getCommitHistoryB

Track the evolution of your Obsidian vault knowledge base by retrieving commit history from GitHub (johndoe-org/obsidian-vault). See how your notes and ideas have developed over time with detailed diffs.

ParametersJSON Schema
NameRequiredDescriptionDefault
authorNoFilter commits by author username
daysYesNumber of days to look back for commits
includeDiffsNoWhether to include actual file changes/diffs (default: true)
maxCommitsNoMaximum number of commits to return
pageNoPage number for pagination (0-indexed)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions retrieving commit history with detailed diffs, which hints at read-only behavior, but does not specify authentication needs, rate limits, error handling, or pagination details. For a tool with no annotations, this leaves significant gaps in understanding its operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with two sentences that are front-loaded with the core purpose. It avoids unnecessary fluff, but the second sentence could be slightly more concise by integrating the diff detail into the first sentence without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a 5-parameter tool with no annotations and no output schema, the description is moderately complete. It covers the purpose and high-level behavior but lacks details on authentication, error handling, and return format, which are important for effective use. It compensates somewhat by specifying the repository and context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by implying the tool retrieves commits over time with diffs, but it does not provide additional syntax, format details, or usage examples for parameters. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('retrieve', 'track') and resources ('commit history from GitHub'), and distinguishes it from sibling tools by focusing on commit history rather than file contents, file search, or issue search. It explicitly mentions the specific repository (johndoe-org/obsidian-vault) and the context of an Obsidian vault knowledge base.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for tracking evolution of notes/ideas over time with diffs, which provides some context, but it does not explicitly state when to use this tool versus alternatives like getFileContents or searchFiles, nor does it mention any prerequisites or exclusions. The guidance is present but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getFileContentsC

Retrieve the contents of a specific note, document, or file from your Obsidian vault stored in GitHub (johndoe-org/obsidian-vault). Perfect for accessing your knowledge base content.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to the file within the repository.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions retrieving contents but doesn't specify behavioral traits such as read-only nature (implied by 'retrieve'), error handling (e.g., what happens if the file doesn't exist), rate limits, or authentication needs. The description adds some context about the GitHub repository ('johndoe-org/obsidian-vault'), but overall, it lacks detailed behavioral information for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with two sentences that directly state the purpose and context. The first sentence clearly defines the action and resource, while the second adds value by highlighting the use case ('Perfect for accessing your knowledge base content'). There's no unnecessary fluff, making it efficient, though it could be slightly more structured to differentiate from siblings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is somewhat complete but has gaps. It covers the basic purpose and context but lacks details on behavioral traits, usage guidelines, and output expectations. Without annotations or an output schema, the description should do more to compensate, but it remains minimal, making it adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the parameter 'filePath' documented as 'Path to the file within the repository.' The description doesn't add any parameter-specific details beyond what the schema provides, such as format examples or constraints. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retrieve the contents of a specific note, document, or file from your Obsidian vault stored in GitHub.' It specifies the verb ('retrieve'), resource ('contents of a specific note, document, or file'), and context ('Obsidian vault stored in GitHub'). However, it doesn't explicitly differentiate from sibling tools like 'searchFiles' or 'getCommitHistory' beyond mentioning 'Perfect for accessing your knowledge base content,' which is somewhat generic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal usage guidance. It implies use for accessing knowledge base content but doesn't specify when to choose this tool over alternatives like 'searchFiles' (which might list files) or 'getCommitHistory' (which tracks changes). No explicit when/when-not instructions or prerequisites are given, leaving the agent to infer usage based on the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchFilesB

Search for notes, documents, and files within your Obsidian vault on GitHub (johndoe-org/obsidian-vault). Find specific knowledge base content using GitHub's powerful search syntax. Supports searching in filenames, paths, and content.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to retrieve (0-indexed)
perPageNoNumber of results per page
queryYesSearch query - can be a simple term or use GitHub search qualifiers
searchInNoWhere to search: 'filename' (exact filename match), 'path' (anywhere in file path), 'content' (file contents), or 'all' (comprehensive search)all

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'supports searching in filenames, paths, and content' and references 'GitHub's powerful search syntax,' which adds some context about search capabilities. However, it lacks details on critical behaviors such as pagination (implied by parameters but not described), rate limits, authentication needs, error handling, or the format of search results. For a search tool with no annotation coverage, this leaves significant gaps in understanding its operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with three sentences that are front-loaded: the first sentence states the core purpose, the second adds context about GitHub search, and the third specifies search scopes. There's no wasted text, and each sentence contributes meaningfully, though it could be slightly more structured for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (search functionality with 4 parameters) and the absence of annotations and output schema, the description is moderately complete. It covers the basic purpose and search scopes but lacks details on behavioral aspects like result format, pagination behavior, or error conditions. Without an output schema, the description doesn't explain return values, which is a gap. It's adequate for a simple search tool but could be more comprehensive to fully guide an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, providing clear documentation for all parameters (query, searchIn, page, perPage). The description adds minimal value beyond the schema, mentioning 'search query' and 'searching in filenames, paths, and content' which aligns with the schema's details for 'query' and 'searchIn'. It doesn't provide additional syntax examples or usage nuances, so it meets the baseline for high schema coverage without compensating with extra insights.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search for notes, documents, and files within your Obsidian vault on GitHub.' It specifies the resource (Obsidian vault on GitHub) and the action (search), though it doesn't explicitly differentiate from sibling tools like searchIssues, which might search different content types. The mention of 'find specific knowledge base content' adds context but doesn't fully distinguish from potential alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning 'search for notes, documents, and files' and 'find specific knowledge base content,' suggesting it's for retrieving files in a knowledge base. However, it doesn't explicitly state when to use this tool versus alternatives like getFileContents (for reading specific files) or searchIssues (for issue tracking), nor does it provide exclusions or prerequisites. The guidance is present but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchIssuesB

Search for issues and discussions in your Obsidian vault repository (johndoe-org/obsidian-vault). Great for tracking tasks, project management, and collaborative knowledge work.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (uses GitHub Issue Search syntax)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the repository (johndoe-org/obsidian-vault) and general use cases, but lacks details on behavioral traits like pagination, rate limits, authentication needs, or what 'discussions' entails. For a search tool with zero annotation coverage, this is insufficient, though it's not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by use cases. It's efficient with minimal waste, though the use-case list could be slightly trimmed for optimal conciseness, preventing a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (search with one parameter), no annotations, and no output schema, the description is adequate but incomplete. It covers purpose and context but lacks details on behavior, return values, or error handling, making it just viable for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'query' documented as using 'GitHub Issue Search syntax.' The description adds no additional parameter information beyond this, so it meets the baseline of 3 where the schema does the heavy lifting without compensating for gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for 'issues and discussions' in a specific repository, with the verb 'search' and resource 'issues and discussions' identified. It distinguishes from sibling tools like getCommitHistory and searchFiles by focusing on issues rather than commits or files. However, it doesn't explicitly differentiate from potential issue-specific siblings (none listed), so it's not a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for 'tracking tasks, project management, and collaborative knowledge work,' suggesting context but not explicit when-to-use guidance. It doesn't mention when to use this vs. alternatives like searchFiles or provide exclusions. The guidance is helpful but not comprehensive enough for a higher score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.0
    • First observedgetCommitHistory
    • First observedgetFileContents
    • First observedsearchFiles
    • First observedsearchIssues

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: getCommitHistory retrieves commit history, getFileContents fetches specific file contents, searchFiles searches for files, and searchIssues searches for issues. There is no overlap in functionality, making tool selection unambiguous.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern (getCommitHistory, getFileContents, searchFiles, searchIssues) with all tools using camelCase. However, 'searchFiles' and 'searchIssues' use plural nouns while 'getCommitHistory' and 'getFileContents' use singular or compound nouns, showing a minor deviation in noun consistency.

Tool Count4/5

With 4 tools, the count is appropriate for the server's purpose of interacting with a specific GitHub repository for an Obsidian vault. It covers key operations like retrieving history, files, and searching, though it might benefit from additional tools for actions like creating or updating issues or files to be more comprehensive.

Completeness3/5

The tool set provides good read/search capabilities for commits, files, and issues, but lacks write operations (e.g., create/update issues, commit changes, modify files). For a GitHub-focused server, this is a notable gap that could limit agent workflows, especially for collaborative or dynamic tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • -
    license
    C
    quality
    Not graded
    maintenance
    A Model Context Protocol server with GitHub API integration that enables interaction with repositories, issues, pull requests, and file management through a standardized interface.
    1
    -
  • A
    license
    B
    quality
    D
    maintenance
    MCP (Model Context Protocol) server for GitHub API integration. This server provides comprehensive tools for interacting with GitHub repositories, issues, pull requests, branches, and code search through a unified interface.
    15
    14
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    A Model Context Protocol server that enables Claude to directly interact with GitHub, including repos, files, branches, issues, pull requests, Actions, and code search using a personal access token.
    26
    118
    MIT

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/Hint-Services/obsidian-github-mcp'

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