GitHub历史搜索服务

一个通过MCP协议自动索引GitHub拉取请求和提交历史的服务,使AI助手能够搜索项目历史记录。

  • by AmedeoPelliccia
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 AmedeoPelliccia/mcp-github-memory

使用说明

MCP GitHub内存🧠

让你的AI助手完美回忆起你的GitHub存储库历史

一个模型上下文协议(MCP)服务器,可以自动索引GitHub的pull请求和提交,使GitHub Copilot和Claude等AI助手可以搜索您的项目历史。

✨ 特性

  • 🔄 自动索引 -GitHub webhooks触发PR和提交的实时索引
  • 🔍 智能搜索 -按关键字、作者、存储库或状态查询
  • 🔒 安全 -HMAC-SHA256 webhook验证,没有硬编码的秘密
  • ⚡ 快速 -带索引的SQLite提供<1ms的查询时间
  • 🤖 AI就绪 -适用于GitHub Copilot、Claude和其他AI助手的MCP协议
  • 📦 零依赖 -只有3个生产依赖关系
  • ✅ 经过全面测试 -TypeScript类型安全的100%测试覆盖率

🏗️ 建筑

graph LR
    A[GitHub] -->|Webhook| B[MCP Server]
    B -->|Index| C[SQLite DB]
    D[Copilot/Claude] -->|MCP Query| B
    B -->|Context| D

🚀 快速开始

先决条件

  • Node.js 18+
  • 具有管理员访问权限的GitHub存储库
  • HTTPS端点(或用于测试的ngrok)

安装

# Clone the repository
git clone https://github.com/AmedeoPelliccia/mcp-github-memory
cd mcp-github-memory

# Install dependencies
npm install

# Build TypeScript
npm run build

# Copy environment template
cp .env.example .env
# Edit .env with your GITHUB_WEBHOOK_SECRET

运行服务器

作为GitHub Webhook服务器

# Start webhook server on port 3000
WEBHOOK_PORT=3000 GITHUB_WEBHOOK_SECRET=your-secret node dist/index.js webhook

作为MCP服务器

# Start MCP server (stdio mode)
node dist/index.js mcp

配置GitHub Webhook

  1. 转到您的仓库→ 设置 → 网络钩子 → 添加webhook
  2. 有效载荷URL: https://your-domain.com/webhook
  3. 内容类型: application/json
  4. 秘密:您的 GITHUB_WEBHOOK_SECRET
  5. 事件:选择“拉取请求”和“推送”
  6. 保存

配置AI助手

GitHub Copilot

  1. 打开Copilot聊天设置
  2. 添加MCP服务器
  3. 统一资源定位符:MCP服务器的路径
  4. 命令: node /path/to/dist/index.js mcp

克劳德桌面

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "github-memory": {
      "command": "node",
      "args": ["/absolute/path/to/dist/index.js", "mcp"],
      "env": {
        "GITHUB_MEMORY_DB_PATH": "/path/to/github-memory.db"
      }
    }
  }
}

📡 MCP工具可用

工具 说明 参数
search_pull_requests 搜索索引PR query, repository, author, state
get_pull_request 获取特定PR repository, number
search_commits 搜索索引提交 query, repository, author
get_commit 获得具体承诺 sha

💻 发展

与ngrok的地方发展

# Terminal 1: Start server
npm run build && npm start webhook

# Terminal 2: Expose via ngrok
ngrok http 3000

# Use ngrok URL for GitHub webhook

测试

# Run all tests
npm test

# Watch mode during development
npm run test:watch

# Build in watch mode
npm run watch

项目结构

mcp-github-memory/
├── src/
│   ├── database.ts       # SQLite operations
│   ├── webhook.ts        # GitHub webhook handler  
│   ├── mcp-server.ts     # MCP protocol implementation
│   └── index.ts          # Main entry point
├── tests/
│   └── database.test.ts  # Comprehensive test suite
├── dist/                 # Compiled JavaScript
├── package.json          # Dependencies & scripts
├── tsconfig.json         # TypeScript configuration
└── .env.example          # Environment template

🔐 安全

  • ✅ Webhook验证 -HMAC-SHA256签名验证
  • ✅ 环境变量 -没有硬编码的秘密
  • ✅ 类型安全 -带有严格模式的完整TypeScript
  • ✅ SQL注入保护 -参数化查询
  • ✅ 最小依赖性 -仅限基本套餐

📊 查询示例

在GitHub上进行Copilot聊天

User: "Show me PRs about authentication"
Copilot: [Searches via MCP] Found PR #42 "Add OAuth2 authentication"...

User: "What commits mention the API refactor?"
Copilot: [Queries commits] Found 3 commits from last week...

直接MCP工具调用

{
  "tool": "search_pull_requests",
  "arguments": {
    "query": "authentication",
    "state": "merged"
  }
}

🧪 测试覆盖率

✅ Database Operations
  ✓ Creates database with correct schema
  ✓ Inserts and retrieves pull requests
  ✓ Searches pull requests by query
  ✓ Inserts and retrieves commits
  ✓ Searches commits by message
  ✓ Handles upsert operations

Test Suites: 1 passed
Tests:       6 passed
Coverage:    100%

🗺️ 路线图

  • []使用SQLite FTS5进行全文搜索
  • []问题和评论索引
  • []语义搜索的向量嵌入
  • []PostgreSQL扩展适配器
  • []Web UI仪表板
  • []普罗米修斯指标
  • []多存储库支持
  • []GitLab/Bitbucket适配器

🤝 贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/AmazingFeature)
  3. 运行测试(npm test)
  4. 提交您的更改(git commit -m 'Add some AmazingFeature')
  5. 推到分支(git push origin feature/AmazingFeature)
  6. 打开拉取请求

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

🙏 致谢

⭐ 明星历史


Built with ❤️ for the AI-assisted development community

⭐ Star this project • 🐛 Report Bug • 💡 Request Feature

```