github_issue_searcher.mp4
A powerful Model Context Protocol (MCP) Server that combines FAISS (Facebook AI Similarity Search) with OpenAI embeddings to provide semantic search capabilities for GitHub repository issues. Perfect for building RAG (Retrieval-Augmented Generation) systems and knowledge bases focused on GitHub issue tracking!
- π Semantic Search: Generate embeddings using OpenAI and search with FAISS
- π Document Storage: Store text with rich metadata for organized retrieval
- π GitHub Integration: Automatically sync and search GitHub repository issues
- β‘ Fast Similarity Search: Powered by Facebook's FAISS library
- π§ MCP Compatible: Works seamlessly with Claude and other MCP clients
- πΎ Persistent Storage: Automatic saving and loading of indexes and metadata
- Python 3.8 or higher
- OpenAI API key
- (Optional) GitHub Personal Access Token for GitHub integration
-
Clone the repository
git clone https://github.com/calumjs/github-issue-searcher-mcp.git cd github-issue-searcher-mcp
-
Set up virtual environment (recommended)
cd faiss_mcp_server python -m venv .venv # Activate virtual environment # On Windows: .venv\Scripts\activate # On macOS/Linux: source .venv/bin/activate
-
Install dependencies
pip install -r requirements.txt
-
Set up environment variables Create a
.env
file in thefaiss_mcp_server
directory:OPENAI_API_KEY=your_openai_api_key_here GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token_here # Optional
-
Sync a GitHub repository (Essential First Step)
# Sync your first repository to populate the search index python sync_github.py owner/repo --clear # Examples: python sync_github.py microsoft/vscode --clear python sync_github.py facebook/react --clear python sync_github.py SSWConsulting/SSW.YakShaver --clear
-
Configure your MCP client
Add the server to your MCP client configuration. For Claude Desktop, add this to your MCP settings:
{ "mcpServers": { "github-issue-searcher": { "command": "python", "args": ["/path/to/your/faiss_mcp_server/main.py"], "env": { "OPENAI_API_KEY": "your-openai-api-key-here" } } } }
Note: Replace
/path/to/your/faiss_mcp_server/main.py
with the actual path to your installation.Alternative: You can also run the server directly for testing:
python main.py
This is the essential first step! The GitHub Issue Searcher MCP needs repository data to search through. You have two options:
Option 1: Standalone sync script (Recommended)
cd faiss_mcp_server
# Sync a single repository (clears existing data)
python sync_github.py owner/repo --clear
# Add multiple repositories (append to existing data)
python sync_github.py microsoft/vscode
python sync_github.py facebook/react
python sync_github.py vercel/next.js
Option 2: Sync during server startup
cd faiss_mcp_server
# Start server and sync repository
python main.py --sync-repo owner/repo --clear
Important Notes:
- Use
--clear
flag to replace existing data with new repository - Omit
--clear
flag to add repository data to existing index - Syncing can take several minutes depending on repository size
- The server remains responsive during standalone sync operations
Once you have synced repository data, you can use the MCP tools:
Search for similar content using natural language:
search_embeddings(
query_text="How to fix memory leaks in React components?",
k=5 # Number of results to return
)
Check what data is currently indexed:
get_index_status()
# Returns: {"initialized": true, "dimension": 1536, "vector_count": 4490, ...}
Add More Repositories:
# Add additional repositories without clearing existing data
python sync_github.py tensorflow/tensorflow
python sync_github.py pytorch/pytorch
Replace All Data:
# Clear everything and sync a new repository
python sync_github.py new-owner/new-repo --clear
Check Current Data:
Use the get_index_status
tool to see how many issues are currently indexed and from which repositories.
faiss_mcp_server/
βββ main.py # Entry point and argument parsing
βββ sync_github.py # Standalone GitHub sync script
βββ server.py # MCP server initialization
βββ requirements.txt # Python dependencies
βββ pyproject.toml # Project configuration
βββ tools/
β βββ faiss_tools.py # FAISS search tools
β βββ github_tools.py # GitHub integration utilities
βββ utils/
βββ faiss_handler.py # Core FAISS operations
βββ github_syncer.py # GitHub API integration
Variable | Description | Required |
---|---|---|
OPENAI_API_KEY |
Your OpenAI API key for embeddings | β Yes |
GITHUB_PERSONAL_ACCESS_TOKEN |
GitHub token for repository access | β Optional |
- FAISS Index: Stored as
faiss_index.bin
- Metadata: Stored as
metadata.json
- Location:
data/
directory (created automatically)
- π GitHub Issue Search: Semantically search through GitHub repository issues
- π Issue Knowledge Base: Build searchable knowledge bases from GitHub issues
- π€ RAG Systems: Enhance AI responses with relevant GitHub issue context
- π Research: Find similar issues, bug reports, or feature requests
- π¬ Developer Support: Search through issue history for troubleshooting
- π Project Management: Discover related issues and track patterns
The server includes comprehensive error handling:
- Automatic retry for API failures
- Graceful degradation when services are unavailable
- Detailed logging for debugging
- Input validation and sanitization
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Add tests if applicable
- Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Facebook Research for the amazing FAISS library
- OpenAI for the embedding models
- Anthropic for the Model Context Protocol
- GitHub for the excellent API
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed information
- Include logs and error messages when possible
Made with β€οΈ for the GitHub community
Happy issue searching! πβ¨