使用说明
代理分析MCP服务器
蟒蛇 模型上下文协议(MCP) 服务器 代理分析 这使人工智能助手能够通过自然语言管理活动、用户、反向链接、关键字和SEO排名。
适用于: Claude Desktop、Claude Code、Cursor、Windsurf、Cline、Continue、Zed和任何兼容MCP的客户端。
由您呈现 奥舍尔数字 -专业的人工智能顾问帮助企业利用人工智能的力量。
特性
- 21工具 覆盖整个AgentAnalytics API表面
- 活动管理 -创建、读取、更新和删除活动(客户端)
- 用户管理 -为平台用户提供完整的CRUD操作,包括角色和访问控制
- 反向链接跟踪 -使用域/页面权限管理每个活动的自定义反向链接
- SEO排名 -在谷歌、谷歌移动、谷歌地点和必应上拉取关键字级别和活动级别的排名数据
- 关键字监控 -读取每个广告系列的跟踪关键字
- 竞争对手跟踪 -将竞争对手的URL添加到广告系列中以进行排名比较
- SSO登录授权 -为客户端门户访问生成一次性登录令牌
- 标签管理 -创建组织标签
先决条件
- Python 3.10+
- 紫外线 (推荐)或pip
- 上的AgencyAnalytics帐户 卓越计划 (需要API访问权限)
- API密钥(仅限管理员用户)
获取API密钥
- 以管理员身份登录AgencyAnalytics 管理员 用户
- 首选 管理员设置>公司详细信息
- 您的API密钥位于页面的右下角
备注:只有帐户管理员用户才能访问API密钥。API访问仅适用于卓越理财计划。API密钥未过期。
安装
1.克隆存储库
git clone https://github.com/osherai/mcp-agencyanalytics-python.git
cd mcp-agencyanalytics-python
2.安装依赖项
使用紫外线(推荐):
uv venv && uv pip install -e .
或者使用pip:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e .
3.配置凭据
复制示例环境文件并添加您的API密钥:
cp .env.example .env
编辑 .env:
AGENCYANALYTICS_API_KEY=your_api_key_here
4.测试连接
uv run agencyanalytics-mcp
服务器应无错误启动(它将等待stdin上的输入)。
客户端配置
此MCP服务器可与任何兼容MCP的客户端配合使用。以下是常见客户端的设置说明。
备注:替换
/path/to/mcp-agencyanalytics-python在下面的所有示例中使用您的实际安装路径。
克劳德桌面版
添加到您的Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"agencyanalytics": {
"command": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"],
"cwd": "/path/to/mcp-agencyanalytics-python"
}
}
}
重新启动Claude Desktop(完全退出并重新打开)以使更改生效。
克劳德代码(CLI)
使用Claude Code CLI添加服务器:
claude mcp add agencyanalytics \
-e AGENCYANALYTICS_API_KEY=your_api_key_here \
-- /path/to/mcp-agencyanalytics-python/.venv/bin/python -m agencyanalytics_mcp.server
或添加到您的 ~/.claude/settings.json:
{
"mcpServers": {
"agencyanalytics": {
"command": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"],
"cwd": "/path/to/mcp-agencyanalytics-python"
}
}
}
光标
添加到光标MCP配置中:
macOS: ~/.cursor/mcp.json
视窗: %USERPROFILE%\.cursor\mcp.json
{
"mcpServers": {
"agencyanalytics": {
"command": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"],
"cwd": "/path/to/mcp-agencyanalytics-python"
}
}
}
重新启动Cursor以使更改生效。
风帆冲浪(Codeium)
添加到您的Windsurf MCP配置中:
macOS: ~/.codeium/windsurf/mcp_config.json
视窗: %USERPROFILE%\.codeium\windsurf\mcp_config.json
{
"mcpServers": {
"agencyanalytics": {
"command": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"],
"cwd": "/path/to/mcp-agencyanalytics-python"
}
}
}
重新启动Windsurf以使更改生效。
带有Cline扩展的VS代码
添加到您的Cline MCP设置中:
macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
视窗: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
{
"mcpServers": {
"agencyanalytics": {
"command": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"],
"cwd": "/path/to/mcp-agencyanalytics-python"
}
}
}
带有Continue扩展名的VS代码
添加到您的继续配置 ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"],
"cwd": "/path/to/mcp-agencyanalytics-python"
}
}
]
}
}
Zed编辑
添加到您的Zed设置 ~/.config/zed/settings.json:
{
"context_servers": {
"agencyanalytics": {
"command": {
"path": "/path/to/mcp-agencyanalytics-python/.venv/bin/python",
"args": ["-m", "agencyanalytics_mcp.server"]
},
"settings": {}
}
}
}
查询示例
配置后,您可以就AgencyAnalytics数据提出自然语言问题:
- “列出我的所有活动”
- “显示广告系列123的关键字排名”
- “为创建新的客户端用户jane@acme.com"
- “Acme Corp活动有哪些反向链接?”
- “为用户456生成SSO登录链接”
- “将竞争对手example.com添加到活动123”
工具参考
活动工具
活动在AgentAnalytics UI(更名为2025年2月)中被称为“客户”,但API仍然使用“活动”一词。
list_campaigns
按页码列出活动。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
offset |
integer | 否 | 0 | 分页偏移 |
limit |
integer | 否 | 50 | 每页最大结果数 |
get_campaign
按ID获取单个活动。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
campaign_id |
integer | 是 | 活动ID |
create_campaign
创建新活动。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url |
string | 是 | 活动的网站URL |
company |
string | 是 | 公司/客户名称 |
update_campaign
更新现有活动。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
campaign_id |
integer | 是 | 要更新的活动ID |
url |
string | 否 | 新网站URL |
company |
string | 否 | 新公司名称 |
delete_campaign
按ID删除活动。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
campaign_id |
integer | 是 | 要删除的活动ID |
用户工具
list_users
列出所有分页的平台用户。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
offset |
integer | 否 | 0 | 分页偏移 |
limit |
integer | 否 | 50 | 每页最大结果数 |
返回的字段: id, date_created, date_modified, email, username, first_name, last_name, role, campaign_access, status, account_id, campaign_id
get_user
按ID获取单个用户。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id |
integer | 是 | 用户ID |
create_user
创建新用户。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
email |
string | 是 | - | 用户电子邮件地址 |
first_name |
string | 是 | - | 名字 |
last_name |
string | 是 | - | 姓氏 |
role |
string | 否 | client |
用户角色 |
campaign_access |
string | 否 | restricted |
restricted 或 all |
campaign_id |
integer | 否 | - | 要授予访问权限的活动 |
update_user
更新现有用户。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id |
integer | 是 | 要更新的用户ID |
email |
string | 否 | 新电子邮件 |
first_name |
string | 否 | 新名字 |
last_name |
string | 否 | 新姓氏 |
role |
string | 否 | 新角色 |
campaign_access |
string | 否 | 新的访问级别 |
delete_user
按ID删除用户。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id |
integer | 是 | 要删除的用户ID |
反向链接工具
list_backlinks
列出带有可选活动过滤的反向链接。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
campaign_id |
integer | 否 | - | 按活动筛选 |
offset |
integer | 否 | 0 | 分页偏移 |
limit |
integer | 否 | 50 | 每页最大结果数 |
返回的字段: id, title, status, date_created, date_published, url, link_type, target_anchor, target_url, notes, campaign_id, domain_authority, page_authority
create_backlink
创建新的反向链接。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
campaign_id |
integer | 是 | 要关联的活动 |
title |
string | 是 | 反向链接标题 |
url |
string | 是 | 显示链接的页面URL |
target_url |
string | 是 | 链接指向的URL |
target_anchor |
string | 否 | 锚文本 |
link_type |
string | 否 | 链接类型 |
status |
string | 否 | 反向链接状态 |
notes |
string | 否 | 其他注释 |
update_backlink
更新现有的反向链接。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
backlink_id |
integer | 是 | 要更新的反向链接ID |
title |
string | 否 | 新标题 |
url |
string | 否 | 新页面URL |
target_url |
string | 否 | 新目标URL |
target_anchor |
string | 否 | 新锚点文本 |
status |
string | 否 | 新状态 |
notes |
string | 否 | 新注释 |
delete_backlink
按ID删除反向链接。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
backlink_id |
integer | 是 | 要删除的反向链接ID |
关键字和排名工具
list_keywords
列出活动的跟踪关键字。关键字一次只能查询一个活动。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
campaign_id |
integer | 是 | - | 活动ID |
offset |
integer | 否 | 0 | 分页偏移 |
limit |
integer | 否 | 50 | 每页最大结果数 |
get_keyword_rankings
获取活动的关键字级别排名数据。返回Google、Google Mobile、Google Places和Bing的位置,包括更改跟踪、SERP URL和每月搜索量。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
campaign_id |
integer | 是 | - | 活动ID |
offset |
integer | 否 | 0 | 分页偏移 |
limit |
integer | 否 | 50 | 每页最大结果数 |
返回的字段包括: keywordId, keywordPhrase, googleRanking, googleRankingChange, googleRankingUrl, googleMobileRanking, googleMobileRankingChange, googlePlacesRanking, bingRanking, bingRankingChange, localMonthlySearches以及更多。
get_campaign_rankings
获取一段时间内的活动排名汇总数据。返回历史趋势和排名分布(位置1-3、4-10、11-20、21-50、51+)以及竞争对手数据。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
campaign_id |
integer | 是 | - | 活动ID |
offset |
integer | 否 | 0 | 分页偏移 |
limit |
integer | 否 | 50 | 每页最大结果数 |
其他工具
create_competitor
将竞争对手URL添加到活动中以进行排名比较。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
campaign_id |
integer | 是 | 要添加竞争对手的活动 |
url |
string | 是 | 竞争对手网站URL |
create_tag
创建组织标签。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
string | 是 | 标记名称 |
create_login_grant
为用户生成一次性SSO登录URL。该令牌允许在没有密码的情况下登录AgencyAnalytics。可用于嵌入报告或构建自定义登录页面。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id |
integer | 是 | 要为生成登录令牌的用户 |
退货: token, login_url, time, user_id, origin_user_id
建筑
代理分析API的工作原理
与传统的REST API不同,AgentAnalytics API使用 单个POST端点 (https://apirequest.app/query)对于所有操作。每个请求都包含一个JSON正文,指定:
provider-总是"agency-analytics-v2"asset-资源类型(campaign,user,backlink,keyword等等)operation-行动(create,read,update,delete)fields-返回哪些字段(用于读取操作)rows-用于创建/更新/删除操作的数据offset/limit-分页
身份验证使用空用户名和API密钥作为密码的HTTP基本身份验证。
API资产和支持的操作
| 资产 | 创建 | 读取 | 更新 | 删除 | 注释 |
|---|---|---|---|---|---|
campaign |
是 | 是 | 是 | Yes | 是 |
user |
是 | 是 | 是 | Yes | 是 |
backlink |
是 | 是 | 是 | Yes | 是 |
keyword |
- | 是 | - | - | 只读;需要 campaign_id |
keyword-rankings |
- | 是 | - | - | 只读;对提要数据进行排名 |
campaign-rankings |
- | 是 | - | - | 只读;聚合排名提要 |
competitor |
是 | - | - | ||
tag |
是 | - | - | ||
login-grant |
是 | - | - |
API限制
AgentyAnalytics API专为 平台管理与SEO数据检索确实如此 不 提供以下访问权限:
- 第三方集成数据(谷歌广告、脸书广告、GA4、社交媒体等)
- 报告生成或导出
- 仪表板/小部件数据
- PPC、电子邮件营销或电子商务指标
虽然AgencyAnalytics在其UI中连接到90多个集成,但这些数据都不会通过API公开。
请求的生命周期
MCP Tool Call
-> AgencyAnalyticsClient._build_payload() (construct JSON body)
-> AgencyAnalyticsClient._request() (POST to https://apirequest.app/query)
-> Parse response { metadata, data }
-> format_response() (JSON with summary)
-> Return to MCP client
项目结构
mcp-agencyanalytics-python/
├── pyproject.toml # Project config, dependencies, entry point
├── .env.example # Environment variables template
├── .gitignore # Python/IDE/OS ignores
├── README.md # This file
├── src/
│ └── agencyanalytics_mcp/
│ ├── __init__.py # Package version
│ ├── server.py # MCP server with 21 tool definitions
│ ├── config.py # Dataclass config loaded from environment
│ └── client.py # AgencyAnalytics API client wrapper
└── tests/
├── __init__.py
├── conftest.py # Shared pytest fixtures
├── test_config.py # Configuration tests
├── test_client.py # API client tests
└── test_server.py # MCP tool tests
关键设计决策
- 延迟客户端初始化 -API客户端在首次使用时创建并全局缓存,避免了启动时不必要的身份验证
- 同步HTTP -用途
httpx.Client(同步),因为AgentAnalytics API是一个没有并行优势的单一端点 - 错误字符串 -工具归还
"ERROR: ..."字符串,而不是引发异常,遵循MCP约定进行优雅的错误处理 - JSON响应 -所有工具响应均使用
json.dumps(data, indent=2, default=str)以获得一致、可读的输出
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
AGENCYANALYTICS_API_KEY |
是 | - | 您的AgentAnalytics API密钥(管理设置>公司详细信息) |
AGENCYANALYTICS_BASE_URL |
没有 | https://apirequest.app/query |
API端点URL(用于测试的覆盖) |
测试
运行测试
# Install dev dependencies
uv pip install -e ".[dev]"
# Run all tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Run a specific test file
uv run pytest tests/test_client.py
# Run a specific test class
uv run pytest tests/test_server.py::TestListCampaigns
测试结构
tests/
├── conftest.py # Fixtures: sample_config, sample_campaign, sample_user,
│ # sample_backlink, sample_keyword_ranking, sample_api_response
├── test_config.py # Tests for environment loading and validation (5 tests)
├── test_client.py # Tests for auth headers, payload building, HTTP requests,
│ # and client methods (15 tests)
└── test_server.py # Tests for each MCP tool with mocked client (14 tests)
所有测试均使用 unittest.mock 以模拟API客户端。在测试过程中没有进行真正的API调用。
故障排除
“缺少所需的环境变量:AGENCYANALYTICS_API_KEY”
确保您的 .env 文件存在于项目根目录中,并且包含您的API密钥:
AGENCYANALYTICS_API_KEY=your_api_key_here
“身份验证失败。请检查您的API密钥。”
- 验证API密钥是否正确(管理设置>公司详细信息)
- 确认您的帐户在具有API访问权限的卓越理财计划中
- 确保您是管理员用户
“API错误”响应
AgentyAnalytics API可能会返回以下错误:
- 无效的资产名称或操作
- 创建/更新操作中缺少必填字段
- 无效的筛选值(例如,不存在的活动ID)
- 利率限制(具体限额未公开披露)
MCP服务器未出现在您的客户端中
- 确保客户端的配置文件路径正确(请参阅客户端配置部分)
- 验证配置中的Python路径是否指向
.venv目录 - 完全退出并重新启动客户端应用程序
- 检查客户日志中的错误消息
- 手动测试服务器:服务器应无错误启动(它将等待stdin上的输入)
cd /path/to/mcp-agencyanalytics-python .venv/bin/python -m agencyanalytics_mcp.server
返回空结果的关键字
关键字一次只能查询一个活动。您必须提供 campaign_id:
list_keywords(campaign_id=123)
贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
致谢
关于奥舍数码
该项目由以下人员维护 奥舍尔数字,澳大利亚的专业人工智能顾问。我们帮助企业整合人工智能解决方案,以简化运营并推动增长。
需要人工智能集成方面的帮助吗? 联系
免责声明
这是一个非官方的、由社区维护的项目。它不隶属于AgencyAnalytics,也不由AgencyAnalytics官方维护或认可。
