统一搜索服务器

一个生产级的MCP服务器,提供Google Scholar、Google Web Search和YouTube的集成搜索功能,支持学术论文、网页和视频的多源同时检索。

  • by JDeun
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 JDeun/unified-search-mcp-server

使用说明

统一搜索MCP服务器🔍

生产级 通过模型上下文协议(MCP)服务器,您可以综合搜索Google Scholar、Google Web Search和YouTube。

🚀 主要功能

核心搜索功能

  • 🎓 谷歌学术:学术论文搜索(作者,年度过滤)
  • 🌐 谷歌网络搜索:使用Google Custom Search API进行Web搜索
  • 📺 YouTube搜索:视频搜索(长度、上传日期、对齐选项)
  • 🔄 集成搜索:在所有源中同时搜索

企业功能

  • 🔐 保安:API密钥加密、输入值验证、XSS/SQL注入防护
  • 💾 分布式缓存:基于Redis的缓存和TTL管理
  • ⚡ 速率限制:基于Redis后端的可配置rate limit
  • 📊 监视:Prometheus度量、健康检查、结构化记录
  • 🔄 复原力:重试逻辑、电路中断、优雅的性能下降
  • 📝 审核日志记录:全面的审计跟踪以实现法规遵从性

📋 要求

  • Python 3.11+
  • Redis(可选,用于分布式功能)
  • API密钥:
    • Google Custom Search API(用于Web搜索)
    • YouTube Data API v3(用于YouTube搜索)

🛠️ 设置

通过Smithery快速安装

通过Smithery平台直接部署时自动设置。

手动安装

  1. 存储库克隆:
git clone https://github.com/JDeun/unified-search-mcp-server.git
cd unified-search-mcp-server
  1. 创建虚拟环境:
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
  1. 依赖性安装:
pip install -r requirements.txt
  1. 首选参数:
cp .env.example .env
# .env 파일을 편집하여 API 키와 설정 입력

设置⚙ENT

环境变量

# API 키
GOOGLE_API_KEY=your-google-api-key
GOOGLE_CUSTOM_SEARCH_ENGINE_ID=your-cse-id
YOUTUBE_API_KEY=your-youtube-api-key

# 보안
MCP_ENCRYPTION_KEY=your-256-bit-key
MCP_RATE_LIMIT_SECRET=your-secret

# Redis (선택사항)
MCP_REDIS_URL=redis://localhost:6379/0

# 설정
MCP_ENV=production
MCP_LOG_LEVEL=INFO
MCP_CACHE_TTL=3600

如何发放API密钥

  1. 谷歌自定义搜索API:

  2. YouTube数据API v3:

    • 使用相同的Google Cloud Console项目
    • 启用“YouTube Data API v3”
    • 使用相同的API密钥或创建新的API密钥

🚀 使用方法

运行服务器

# 개발 모드 (stdio)
python unified_search_server.py

# 프로덕션 모드 (HTTP)
python unified_search_server.py --transport streamable-http

# 커스텀 포트
MCP_PORT=8080 python unified_search_server.py --transport streamable-http

部署Docker

# 이미지 빌드
docker build -t unified-search-mcp .

# 컨테이너 실행
docker run -p 8000:8000 \
  -e GOOGLE_API_KEY=your-key \
  -e GOOGLE_CUSTOM_SEARCH_ENGINE_ID=your-cse \
  -e YOUTUBE_API_KEY=your-key \
  unified-search-mcp

Claude桌面集成

claude_desktop_config.json添加到:

{
  "mcpServers": {
    "unified-search": {
      "command": "python",
      "args": ["/path/to/unified_search_server.py"],
      "env": {
        "GOOGLE_API_KEY": "your-key",
        "GOOGLE_CUSTOM_SEARCH_ENGINE_ID": "your-cse",
        "YOUTUBE_API_KEY": "your-key"
      }
    }
  }
}

📖 可用工具

统一搜索

同时搜索所有源。

results = await unified_search(
    query="인공지능",
    sources=["scholar", "web", "youtube"],
    num_results=10
)

搜索_谷歌_学者

搜索学术论文。

results = await search_google_scholar(
    query="머신러닝",
    author="Yann LeCun",
    year_start=2020,
    year_end=2024,
    num_results=10
)

search_google_web

搜索Web。

results = await search_google_web(
    query="ChatGPT",
    language="ko",
    safe_search="medium",
    num_results=10
)

搜索youtube

搜索YouTube视频。

results = await search_youtube(
    query="파이썬 튜토리얼",
    video_duration="medium",
    upload_date="month",
    order="viewCount",
    num_results=20
)

获取作者信息

从Google Scholar获取作者信息。

info = await get_author_info("Geoffrey Hinton")

clear_cache

删除缓存的搜索结果。

await clear_cache(source="web")  # 또는 None으로 전체 삭제

get_api_usage_stats

监控API使用情况和限制。

stats = await get_api_usage_stats()

🏗️ 体系结构

模块化设计

src/
├── config/       # 설정 및 보안
├── models/       # 데이터 모델 및 검증
├── services/     # 검색 서비스 구현
├── cache/        # 캐싱 레이어
├── utils/        # 유틸리티 (로깅, rate limiting)
├── monitoring/   # 메트릭 및 헬스 체크
└── mcp_server.py # 메인 서버 구현

安全层

  • 验证输入值并杀菌
  • 保存API密钥加密
  • 每个客户端/端点的rate限制
  • 用于法规遵从性的审核日志记录
  • 跟踪CORS和请求ID

性能优化

  • 基于Redis的分布式缓存
  • HTTP客户端连接池
  • 运行并行搜索
  • 通过指数回退进行智能重试
  • 用于外部API的电路中断器

📊 监视

健康检查端点

리소스: health://status

度量端点

리소스: metrics://stats

主要度量

  • 搜索请求数量和延迟
  • 缓存命中率
  • API配额使用情况
  • 每个源的错误率
  • 违反Rate limit

🔒 保安

最佳实践

  • 使用所有API密钥Fernet进行加密
  • 验证输入以防止XSS/SQL注入
  • 防止滥用的rate limit
  • 无敏感数据的结构化记录
  • 定期安全更新

法规遵从性

  • 准备不保存PII的GDPR
  • 跟踪所有搜索的审核
  • 可设置的数据保留
  • 跟踪API使用情况

🧪 测试

运行测试:

pytest tests/ -v --cov=src

🤝 贡献

  1. 存储库叉
  2. 创建功能分支(git checkout -b feature/amazing)
  3. 提交更改(git commit -m 'Add feature')
  4. 推送到分支(git push origin feature/amazing)
  5. 打开Pull Request

📝 许可证

MIT许可证-详细信息 许可证 文件引用

🙏 感谢的话

重要事项

API限制

  • 谷歌网络搜索:100查询/天(免费方案)
  • YouTube API:10000单位/天(约100次搜索)
  • 谷歌学术:没有官方API,有rate限制

生产注意事项

  • 使用Redis进行分布式部署
  • 设置适当的API密钥轮换
  • 监控Rate limit和配额
  • 设置API错误的通知
  • 定期备份设置

📞 支持

问题和问题:

  • GitHub问题: 创建问题
  • Smithery支持:部署问题

为MCP社区制作❤