跳转到主内容

MCP 集成

模型上下文协议(MCP)使 GPT Researcher 能够通过一个标准化接口连接到各种数据源和工具。GPT Researcher 采用了一种智能的两阶段 MCP 方法,可以自动选择最佳工具并生成上下文相关的研究报告,该方法由 LangChain 的 MCP 适配器 提供支持,以实现无缝集成。

MCP 在 GPT Researcher 中的工作原理

GPT Researcher 使用一种智能两阶段方法进行 MCP 集成

  1. 第一阶段:智能工具选择 - LLM 分析您的查询和可用的 MCP 服务器,以选择最相关的工具
  2. 第二阶段:上下文研究 - LLM 使用选定的工具和动态生成的、针对特定查询的参数

这一切都在后台自动发生,经过优化,以在速度、成本和研究质量之间取得最佳平衡。该集成利用了 langchain-mcp-adapters 库,确保与不断增长的 MCP 工具服务器生态系统兼容。

MCP 研究流程

下图以 RETRIEVER=tavily,mcp 为例,说明了混合策略

Screenshot 2025-06-06 at 14 38 04

流程分解:

  1. 配置:设置 RETRIEVER 环境变量以启用 MCP
  2. 策略选择:选择纯 MCP 或混合方法
  3. 初始化:GPT Researcher 加载您的 mcp_configs
  4. 第一阶段:LLM 智能地从可用的 MCP 服务器中选择最相关的工具
  5. 第二阶段:LLM 使用选定的工具和针对特定查询的参数执行研究
  6. 混合处理:如果使用混合策略,将 MCP 结果与网络搜索相结合
  7. 报告生成:将所有发现综合成一份全面的报告

先决条件

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 配置字典都支持以下键

描述示例是否必须
nameMCP 服务器的标识符"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"

本地服务器:需要 namecommandargs
远程服务器:需要 nameconnection_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 与传统网络搜索无缝协作,以进行全面的研究

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=mcpRETRIEVER=tavily,mcp
  • 验证环境变量是否已设置:echo $RETRIEVER

“发现无效的检索器”

  • 检查可用的检索器:tavilymcpgooglebingarxiv 等。
  • 确保检索器名称没有拼写错误

“未找到 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)}")

最佳实践

  1. 始终设置 RETRIEVER 环境变量 - 这是 MCP 功能所必需的
  2. 使用混合策略 (tavily,mcp) 进行全面研究
  3. 使用描述性的服务器名称以便于调试
  4. 将敏感数据存储在环境变量中
  5. 在集成前独立测试 MCP 服务器
  6. 在开发期间启用详细模式
  7. 根据您的研究领域选择合适的检索器组合
  8. 对于大多数用例,让默认设置处理优化

有关更多示例和高级用例,请查看 GPT Researcher 示例库 :-)