SEO MCP POC
一个使用模型上下文协议(MCP)服务器进行SEO分析的概念验证应用程序,集成了DataForSEO和谷歌搜索控制台。
特性
- 聊天界面:简单的基于Streamlit的聊天界面,用于与SEO代理进行交互
- 流输出:代理响应的实时流式传输
- LLM思维:展示代理人的推理和思维过程
- MCP集成:通过MCP服务器连接到DataForSEO和谷歌搜索控制台
设置
- 安装依赖项:
pip install -r requirements.txt- 在中设置环境变量
.env:
OPENAI_API_KEY=your_openai_api_key
DATAFORSEO_USERNAME=your_dataforseo_username
DATAFORSEO_PASSWORD=your_dataforseo_password
GSC_CREDENTIALS_PATH=/path/to/service_account_credentials.json
DATAFORSEO_URL=http://localhost:3000/mcp # Optional, for HTTP server
MODEL=gpt-4o-mini # Optional, default model- 在中配置GSC服务器路径
src/agents/seo_agent.py或通过环境变量:
GSC_CREDENTIALS_PATH:服务帐户凭据的路径(默认为/Users/Hemant/Downloads/service_account_credentials.json)- 更新中的GSC服务器命令路径
SEOAgent.get_mcp_client()如有需要
运行应用程序
Streamlit聊天界面
运行Streamlit应用程序:
streamlit run app.py该应用程序将在您的浏览器中打开 http://localhost:8501
聊天界面的功能
- 简单的聊天界面:干净、直观的聊天界面
- 实时流媒体:代理处理您的请求时,实时响应流
- 工具调用指示器:查看代理何时调用带有视觉指示器的工具
- 错误处理:强大的工具错误处理,用户友好的消息
- 模型选择:通过侧边栏从不同的OpenAI模型中进行选择
- 聊天历史记录:在会话期间维护对话历史记录
- 清除聊天:清除聊天记录的按钮
用法
- 启动Streamlit应用程序
- 在聊天输入中输入您的SEO问题
- 实时查看代理的响应流:
- 查看发生的工具调用(🔧 指示器) - 观察响应逐个字符显示 - 代理将使用适当的工具(DataForSEO、GSC) - 优雅地处理错误 - 提供SEO见解和分析
- 使用侧边栏更改模型或清除聊天记录
项目结构
seo-mcp-poc/
├── app.py # Main Streamlit application entry point
├── app.ipynb # Jupyter notebook for testing
├── src/
│ ├── agents/
│ │ └── seo_agent.py # SEO Agent class with MCP integration
│ ├── instructions/
│ │ └── seo_agent_instruction.py # Agent system prompts
│ ├── middleware/
│ │ └── tool_error_handler.py # Tool error handling middleware
│ ├── ui/
│ │ └── app_ui.py # Streamlit UI components
│ ├── sample.py # Example script
│ └── sample.ipynb # Jupyter notebook examples
├── requirements.txt # Python dependencies
├── pyproject.toml # Project configuration
└── README.md # This fileMCP服务器
DataForSEO
- 提供关键字研究、SERP分析和SEO数据
- 可以使用HTTP服务器(如果可用)或stdio传输
谷歌搜索控制台(GSC)
- 提供网站性能和搜索分析
- 使用stdio传输
- 需要服务帐户凭据
备注
- 代理在首次使用时初始化,并缓存在Streamlit会话状态中
- MCP服务器是自动管理的
- 工具错误通过用户友好的消息得到妥善处理
- 代理人使用LangChain的
create_agent使用错误处理中间件 - 模型选择更改将重新初始化代理
错误处理
该应用程序包括用于工具执行的稳健错误处理:
- 工具错误被捕获并转换为用户友好的消息
- 代理可以在适当的时候重试操作
- 显示错误消息以帮助用户了解问题所在
