MCP Private GitHub Search
The MCP Private GitHub Search server enables seamless integration between GitHub-hosted Obsidian vaults and AI assistants, providing tools for accessing, searching, and analyzing your knowledge base content.
Key capabilities:
Retrieve File Contents: Access specific notes or documents by their path
Enhanced File Search: Search across filenames, paths, and content using GitHub's code search syntax
Issue Search: Find GitHub issues and discussions related to your vault's repository
Commit History Analysis: Track knowledge base evolution over time, with options to filter by days, author, and include detailed diffs
Enables searching private GitHub repositories, retrieving file contents, accessing commit history with optional diffs, and searching issues based on various criteria.
Implements type-safe interactions with GitHub APIs through comprehensive TypeScript type definitions.
Utilizes Zod schemas for robust input validation of all API inputs to ensure data integrity when interacting with GitHub resources.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Private GitHub Searchsearch for 'project roadmap' in my private repo files"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 pathscontent: Search within file contentsall: 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
Using Smithery (Recommended)
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 clineManual Installation
npm install obsidian-github-mcpConfiguration
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 repositoryGITHUB_REPO: The name of the repository containing your Obsidian vault
GitHub Token Permissions
Your GitHub token needs the following permissions:
repo(for private repositories) orpublic_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"
}
}Finding Research on a Topic (Content Search)
{
"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
Exact Phrases: Use quotes for multi-word searches
{ "query": "\"project planning 2025\"", "searchIn": "content" }File Extensions: Find specific file types
{ "query": "path:*.md", "searchIn": "content" }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 configurationFor 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 dependenciespnpm run build- Build the projectpnpm run dev- Run in development mode with inspectorpnpm run inspector- Launch MCP inspector for testing
Migration from mcp-private-github-search
If you're migrating from the older mcp-private-github-search package:
Update your package name in configuration:
{ "mcpServers": { "obsidianGithub": { "command": "npx", "args": ["-y", "obsidian-github-mcp"] } } }The functionality remains the same - all existing tools work identically
Consider the new Obsidian-focused use cases and workflows
Learn More
For further information on the MCP ecosystem, refer to:
Model Context Protocol Documentation: Detailed coverage of MCP architecture and design principles
Smithery - MCP Server Registry: Guidelines for publishing MCP servers
MCP TypeScript SDK Documentation: Comprehensive TypeScript SDK documentation
Obsidian: The knowledge management app that inspired this tool
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 toolsgetCommitHistoryB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| author | No | Filter commits by author username | |
| days | Yes | Number of days to look back for commits | |
| includeDiffs | No | Whether to include actual file changes/diffs (default: true) | |
| maxCommits | No | Maximum number of commits to return | |
| page | No | Page number for pagination (0-indexed) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Path to the file within the repository. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve (0-indexed) | |
| perPage | No | Number of results per page | |
| query | Yes | Search query - can be a simple term or use GitHub search qualifiers | |
| searchIn | No | Where to search: 'filename' (exact filename match), 'path' (anywhere in file path), 'content' (file contents), or 'all' (comprehensive search) | all |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (uses GitHub Issue Search syntax) |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.0.0- First observed
getCommitHistory - First observed
getFileContents - First observed
searchFiles - First observed
searchIssues
TDQS
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.
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.
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.
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
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
An MCP server that gives your AI access to the source code and docs of all public github repos
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Access the GitHub API, enabling file operations, repository management, search functionality, and…
A Model Context Protocol (MCP) application for automated GitHub PR analysis and issue management.…
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceModel Context Protocol server that enables interaction with GitHub repositories, issues, pull requests, and search functionality through natural language.1-
- -licenseCqualityNot gradedmaintenanceA Model Context Protocol server with GitHub API integration that enables interaction with repositories, issues, pull requests, and file management through a standardized interface.1-
- AlicenseBqualityDmaintenanceMCP (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.1514MIT
- AlicenseBqualityBmaintenanceA 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.26118MIT
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/Hint-Services/obsidian-github-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server