MCP 集成
模型上下文协议(MCP)使 GPT Researcher 能够通过一个标准化接口连接到各种数据源和工具。GPT Researcher 采用了一种智能的两阶段 MCP 方法,可以自动选择最佳工具并生成上下文相关的研究报告,该方法由 LangChain 的 MCP 适配器 提供支持,以实现无缝集成。
MCP 在 GPT Researcher 中的工作原理
GPT Researcher 使用一种智能两阶段方法进行 MCP 集成
- 第一阶段:智能工具选择 - LLM 分析您的查询和可用的 MCP 服务器,以选择最相关的工具
- 第二阶段:上下文研究 - LLM 使用选定的工具和动态生成的、针对特定查询的参数
这一切都在后台自动发生,经过优化,以在速度、成本和研究质量之间取得最佳平衡。该集成利用了 langchain-mcp-adapters 库,确保与不断增长的 MCP 工具服务器生态系统兼容。
MCP 研究流程
下图以 RETRIEVER=tavily,mcp 为例,说明了混合策略
流程分解:
- 配置:设置
RETRIEVER环境变量以启用 MCP - 策略选择:选择纯 MCP 或混合方法
- 初始化:GPT Researcher 加载您的
mcp_configs - 第一阶段:LLM 智能地从可用的 MCP 服务器中选择最相关的工具
- 第二阶段:LLM 使用选定的工具和针对特定查询的参数执行研究
- 混合处理:如果使用混合策略,将 MCP 结果与网络搜索相结合
- 报告生成:将所有发现综合成一份全面的报告
先决条件
GPT Researcher 安装时已包含 MCP 支持
pip install gpt-researcher
# All MCP dependencies are included automatically
基本配置:启用 MCP
重要提示:要在 GPT Researcher 中使用 MCP,您必须设置 RETRIEVER 环境变量
纯 MCP 研究
export RETRIEVER=mcp
混合策略(推荐)
# Combines web search with MCP for comprehensive research
export RETRIEVER=tavily,mcp
# Alternative hybrid combinations
export RETRIEVER=tavily,mcp
export RETRIEVER=google,mcp,arxiv
快速入门
from gpt_researcher import GPTResearcher
import os
# Set retriever to enable MCP
os.environ["RETRIEVER"] = "tavily,mcp" # Hybrid approach
# Simple MCP configuration - works automatically
researcher = GPTResearcher(
query="How does React's useState hook work?",
mcp_configs=[
{
"name": "github_api"
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {"GITHUB_TOKEN": os.getenv("GITHUB_TOKEN")}
}
]
)
context = await researcher.conduct_research()
report = await researcher.write_report()
配置结构
每个 MCP 配置字典都支持以下键
| 键 | 描述 | 示例 | 是否必须 |
|---|---|---|---|
name | MCP 服务器的标识符 | "github" | 是 |
command | 启动服务器的命令 | "python" | 是* |
args | 服务器命令的参数 | ["-m", "my_server"] | 是* |
env | 服务器的环境变量 | {"API_KEY": "key"} | 否 |
connection_url | 用于远程连接的 URL | "wss://api.example.com" | 是** |
connection_type | 连接类型(自动检测) | "websocket" | 否 |
connection_token | 认证令牌 | "bearer_token" | 否 |
本地服务器:需要 name、command 和 args
远程服务器:需要 name 和 connection_url
示例
使用 Tavily 进行新闻和网络研究
非常适合时事、市场研究和一般信息收集
from gpt_researcher import GPTResearcher
import os
# Enable hybrid research: web search + MCP
os.environ["RETRIEVER"] = "tavily,mcp"
researcher = GPTResearcher(
query="What are the latest updates in the NBA playoffs?",
mcp_configs=[
{
"name": "tavily",
"command": "npx",
"args": ["-y", "tavily-mcp@0.1.2"],
"env": {
"TAVILY_API_KEY": os.getenv("TAVILY_API_KEY")
}
}
]
)
context = await researcher.conduct_research()
report = await researcher.write_report()
使用 GitHub 进行代码研究
非常适合技术文档、代码示例和软件开发研究
# Pure MCP research for technical queries
os.environ["RETRIEVER"] = "mcp"
researcher = GPTResearcher(
query="What are the key features and implementation of React's useState hook? How has it evolved in recent versions?",
mcp_configs=[
{
"name": "github",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": os.getenv("GITHUB_PERSONAL_ACCESS_TOKEN")
}
}
]
)
使用混合策略进行学术研究
将学术论文与 MCP 工具相结合
# Academic + MCP hybrid approach
os.environ["RETRIEVER"] = "arxiv,semantic_scholar,mcp"
researcher = GPTResearcher(
query="Analyze the latest developments in quantum error correction algorithms",
mcp_configs=[
{
"name": "quantum_research",
"command": "python",
"args": ["quantum_mcp_server.py"],
"env": {
"ARXIV_API_KEY": os.getenv("ARXIV_API_KEY"),
"RESEARCH_DB_PATH": "/path/to/quantum_papers.db"
}
}
]
)
多服务器研究:综合市场分析
这是一个结合多个 MCP 服务器进行全面商业情报的真实案例
from gpt_researcher import GPTResearcher
import os
# Multi-retriever hybrid strategy for comprehensive coverage
os.environ["RETRIEVER"] = "tavily,google,mcp"
# Multi-domain research combining news, code, and financial data
researcher = GPTResearcher(
query="Analyze Tesla's Q4 2024 performance, including stock trends, recent innovations, and market sentiment",
mcp_configs=[
# Financial data and stock analysis
{
"name": "financial_data",
"command": "python",
"args": ["financial_mcp_server.py"],
"env": {
"ALPHA_VANTAGE_KEY": os.getenv("ALPHA_VANTAGE_KEY"),
"YAHOO_FINANCE_KEY": os.getenv("YAHOO_FINANCE_KEY")
}
},
# News and market sentiment
{
"name": "news_research",
"command": "npx",
"args": ["-y", "tavily-mcp@0.1.2"],
"env": {
"TAVILY_API_KEY": os.getenv("TAVILY_API_KEY")
}
},
# Technical innovations and patents
{
"name": "github_research",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": os.getenv("GITHUB_PERSONAL_ACCESS_TOKEN")
}
},
# Academic research and papers
{
"name": "academic_papers",
"command": "python",
"args": ["arxiv_mcp_server.py"],
"env": {
"ARXIV_API_KEY": os.getenv("ARXIV_API_KEY")
}
}
]
)
# GPT Researcher automatically orchestrates all servers
context = await researcher.conduct_research()
report = await researcher.write_report()
print(f"Generated comprehensive report using {len(researcher.mcp_configs)} MCP servers")
print(f"Research cost: ${researcher.get_costs():.4f}")
此示例演示了 GPT Researcher 如何智能地
- 根据查询从每个服务器选择相关工具
- 协调跨领域研究,涵盖金融、新闻、技术和学术来源
- 将来自不同领域的信息综合成一个有凝聚力的分析
- 通过仅使用每个服务器最相关的工具来优化性能
电子商务竞争分析
另一个用于商业研究的实用多服务器场景
# Comprehensive hybrid strategy
os.environ["RETRIEVER"] = "tavily,bing,exa,mcp"
researcher = GPTResearcher(
query="Comprehensive competitive analysis of sustainable fashion brands in 2024",
mcp_configs=[
# Web trends and consumer sentiment
{
"name": "web_trends",
"command": "npx",
"args": ["-y", "tavily-mcp@0.1.2"],
"env": {"TAVILY_API_KEY": os.getenv("TAVILY_API_KEY")}
},
# Social media analytics
{
"name": "social_analytics",
"command": "python",
"args": ["social_mcp_server.py"],
"env": {
"TWITTER_BEARER_TOKEN": os.getenv("TWITTER_BEARER_TOKEN"),
"INSTAGRAM_ACCESS_TOKEN": os.getenv("INSTAGRAM_ACCESS_TOKEN")
}
},
# Patent and innovation research
{
"name": "patent_research",
"command": "python",
"args": ["patent_mcp_server.py"],
"env": {"USPTO_API_KEY": os.getenv("USPTO_API_KEY")}
}
]
)
远程 MCP 服务器
# Enable MCP with web search fallback
os.environ["RETRIEVER"] = "tavily,mcp"
researcher = GPTResearcher(
query="Latest AI research papers on transformer architectures",
mcp_configs=[
{
"name": "arxiv_api",
"connection_url": "wss://mcp.arxiv.org/ws", # Auto-detects WebSocket
"connection_token": os.getenv("ARXIV_TOKEN"),
}
]
)
将 MCP 与网络搜索相结合
MCP 与传统网络搜索无缝协作,以进行全面的研究
from gpt_researcher import GPTResearcher
# Hybrid strategy: combines web search with MCP automatically
os.environ["RETRIEVER"] = "tavily,mcp"
researcher = GPTResearcher(
query="Impact of AI on software development practices",
# MCP will be used alongside web search automatically
mcp_configs=[
{
"name": "github",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {"GITHUB_TOKEN": os.getenv("GITHUB_TOKEN")}
}
]
)
# This uses both MCP (for code examples) and web search (for articles/news)
context = await researcher.conduct_research()
完整的工作示例
这是一个演示 MCP 集成的生产就绪示例
import asyncio
import os
from gpt_researcher import GPTResearcher
async def main():
# Set up environment
os.environ["GITHUB_PERSONAL_ACCESS_TOKEN"] = "your_github_token"
os.environ["OPENAI_API_KEY"] = "your_openai_key"
os.environ["TAVILY_API_KEY"] = "your_tavily_key"
# Enable hybrid research strategy
os.environ["RETRIEVER"] = "tavily,mcp"
# Create researcher with multi-server MCP configuration
researcher = GPTResearcher(
query="How are leading tech companies implementing AI safety measures in 2024?",
mcp_configs=[
# Code repositories and technical implementations
{
"name": "github",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": os.getenv("GITHUB_PERSONAL_ACCESS_TOKEN")
}
},
# Current news and industry reports
{
"name": "tavily",
"command": "npx",
"args": ["-y", "tavily-mcp@0.1.2"],
"env": {
"TAVILY_API_KEY": os.getenv("TAVILY_API_KEY")
}
}
],
verbose=True # See the intelligent research process
)
print("🔍 Starting multi-source research...")
# Intelligent tool selection and research happens automatically
context = await researcher.conduct_research()
print("📝 Generating comprehensive report...")
report = await researcher.write_report()
print("✅ Research complete!")
print(f"📊 Report length: {len(report)} characters")
print(f"💰 Total cost: ${researcher.get_costs():.4f}")
# Save the report
with open("ai_safety_research.md", "w") as f:
f.write(report)
if __name__ == "__main__":
asyncio.run(main())
检索器策略比较
| 策略 | 用例 | 性能 | 覆盖范围 |
|---|---|---|---|
RETRIEVER=mcp | 特定领域、结构化数据 | ⚡ 快速 | 🎯 专注 |
RETRIEVER=tavily,mcp | 使用专业工具进行通用研究 | ⚖️ 平衡 | 🌐 全面 |
RETRIEVER=google,arxiv,tavily,mcp | 最大覆盖范围,冗余 | 🐌 较慢 | 🌍 广泛 |
RETRIEVER=arxiv,mcp | 学术 + 专业研究 | ⚡ 快速 | 🎓 专注学术 |
高级配置
研究策略
适用于需要更精细控制 MCP 研究执行方式的高级用户
| 策略 | 描述 | 用例 | 性能 |
|---|---|---|---|
"fast" | 使用主查询运行一次 MCP(默认) | 大多数研究需求 | ⚡ 最佳 |
"deep" | 为所有子查询运行 MCP | 全面分析 | 🔍 深入 |
"disabled" | 完全跳过 MCP | 仅限网络研究 | ⚡ 最快 |
# Default behavior (recommended for most use cases)
os.environ["RETRIEVER"] = "tavily,mcp"
researcher = GPTResearcher(
query="Analyze Tesla's performance",
mcp_configs=[...]
)
# For comprehensive analysis (advanced)
os.environ["MCP_STRATEGY"] = "deep"
researcher = GPTResearcher(
query="Comprehensive renewable energy analysis",
mcp_configs=[...]
)
# For web-only research (advanced)
os.environ["RETRIEVER"] = "tavily" # Excludes MCP entirely
环境变量配置
使用环境变量设置全局默认值
# Essential: Enable MCP
export RETRIEVER=tavily,mcp
# Advanced: Set MCP strategy
export MCP_STRATEGY=deep
# Or in .env file
RETRIEVER=tavily,mcp
MCP_STRATEGY=fast
MCP_AUTO_TOOL_SELECTION=true
自定义工具选择
为具有多个工具的服务器启用自动工具选择
# Environment variable approach
os.environ["MCP_AUTO_TOOL_SELECTION"] = "true"
os.environ["RETRIEVER"] = "mcp"
researcher = GPTResearcher(
query="your query",
mcp_configs=[
{
"command": "python",
"args": ["multi_tool_server.py"]
# AI will choose the best tool automatically
}
]
)
连接类型检测
GPT Researcher 自动检测连接类型
# WebSocket (detected from wss:// prefix)
{"connection_url": "wss://api.example.com/mcp"}
# HTTP (detected from https:// prefix)
{"connection_url": "https://api.example.com/mcp"}
# Stdio (default when no URL provided)
{"command": "python", "args": ["server.py"]}
故障排除
常见问题
“未指定检索器”或“MCP 不工作”
- 解决方法: 设置
RETRIEVER=mcp或RETRIEVER=tavily,mcp - 验证环境变量是否已设置:
echo $RETRIEVER
“发现无效的检索器”
- 检查可用的检索器:
tavily、mcp、google、bing、arxiv等。 - 确保检索器名称没有拼写错误
“未找到 MCP 服务器配置”
- 确保
mcp_configs是一个字典列表 - 验证至少提供了一个配置
- 检查配置格式是否与示例匹配
“MCP 服务器连接失败”
- 验证服务器命令和参数
- 检查环境变量是否设置正确
- 独立测试 MCP 服务器
- 确保已安装所需的依赖项
“MCP 服务器没有可用的工具”
- 验证服务器是否正确公开了工具
- 检查服务器启动日志中是否有错误
- 尝试启用
MCP_AUTO_TOOL_SELECTION=true
“工具执行失败”
- 检查身份验证令牌和 API 密钥
- 验证工具参数是否有效
- 查看服务器日志以获取详细错误
- 启用调试日志以获取更多信息
调试模式
启用详细日志记录以诊断问题
import logging
logging.basicConfig(level=logging.DEBUG)
# Your research code here - will show detailed MCP operations
测试您的设置
快速测试以验证 MCP 配置
import os
from gpt_researcher import GPTResearcher
# Test retriever configuration
os.environ["RETRIEVER"] = "mcp"
# Test basic configuration
researcher = GPTResearcher(
query="test query",
mcp_configs=[
{
"name": "test",
"command": "echo",
"args": ["hello world"]
}
]
)
print(f"✅ RETRIEVER set to: {os.environ.get('RETRIEVER')}")
print(f"✅ MCP configs loaded: {len(researcher.mcp_configs)}")
最佳实践
- 始终设置 RETRIEVER 环境变量 - 这是 MCP 功能所必需的
- 使用混合策略 (
tavily,mcp) 进行全面研究 - 使用描述性的服务器名称以便于调试
- 将敏感数据存储在环境变量中
- 在集成前独立测试 MCP 服务器
- 在开发期间启用详细模式
- 根据您的研究领域选择合适的检索器组合
- 对于大多数用例,让默认设置处理优化
有关更多示例和高级用例,请查看 GPT Researcher 示例库。 :-)