负面关键词建议工具

一个基于Google Ads API的负面关键词建议工具,用于分析搜索词并推荐负面关键词,适用于广告优化和成本控制。

  • by uLytics
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 uLytics/google-ads-mcp

使用说明

Google Ads 负向关键词 MCP 服务器

一个用于在Netlify Functions上运行模型上下文协议(MCP)工具服务器的初始仓库。该服务器提供了Google Ads搜索词实用工具,这些工具既可以连接到实时的Google Ads API,也可以在本地开发时回退到确定性的模拟数据。

特点/特性

  • ✅ 表示“正确”或“已确认”。 Netlify 函数 入口点位于 /netlify/functions/mcp.ts (从……开始)提供/服务 /mcp。
  • ✅ 实现了两个MCP工具的使用 @modelcontextprotocol/sdk:
    • fetch_search_terms – 为构建GAQL(Google Analytics Query Language,谷歌分析查询语言) search_term_view 并返回实时或模拟的行数据。
    • suggest_negative_keywords – 分析行数据,推荐精确/短语否定关键词,并附上易于理解的原因。
  • ✅ 用途 fetch-to-node 以适应Netlify的 Request/Response 用于MCP传输的对象。
  • ✅ 共享TypeScript类型,使用Zod进行验证,并为MCP-aware客户端和平凡客户端提供JSON/文本双输出。

入门指南

1. 安装依赖项

npm install

如果你处于离线状态或无法访问 npm 注册表,请在网络连接可用时安装包。

2. 配置环境变量

复制 .env.example 到;朝;对于;在……方面;向 .env 并填写您的Google Ads API凭据。当缺少任何凭据时,服务器会记录一条消息并返回打包的模拟搜索词数据集。

cp .env.example .env
# Edit .env as needed

3. 使用Netlify Dev在本地运行

npm run dev

Netlify Dev 提供以下功能: http://localhost:8888/mcp该函数仅响应遵循MCP HTTP规范的POST请求。

4. 使用MCP工具进行检查

你可以使用以下方法将HTTP端点代理到MCP Inspector中: mcp-remote 适配器;调整器;改编者(根据上下文,此词可有多种翻译)

npx @modelcontextprotocol/inspector npx mcp-remote@next http://localhost:8888/mcp

当部署到Netlify时:

npx @modelcontextprotocol/inspector npx mcp-remote@next https://<your-site>.netlify.app/mcp

项目结构

├── netlify/functions/mcp.ts   # Netlify handler registering MCP tools
├── src/
│   ├── googleAds.ts           # GAQL builder + live/mock data fetcher
│   ├── types.ts               # Shared Row & Candidate interfaces
│   └── util/mcp.ts            # Helper to format MCP tool results
├── .env.example               # Required Google Ads credentials
├── netlify.toml               # Netlify configuration (Node 20 + esbuild)
├── package.json               # Scripts & dependencies (TypeScript + linting)
├── tsconfig.json              # Strict ESM configuration targeting ES2022
└── README.md                  # This file

可用脚本

  • npm run dev – 在本地启动 Netlify Dev。
  • npm run build – 类型检查并生成JS到 dist/。
  • npm run typecheck – 运行 TypeScript 而不生成文件。
  • npm run lint – 使用 ESLint 对仓库进行代码检查 + @typescript-eslint。

工具合同

fetch_search_terms

  • 输入
    {
      "customerId": "1234567890",
      "start": "2024-05-01",
      "end": "2024-05-07",
      "campaignId": "optional",
      "adGroupId": "optional"
    }
    
  • 输出
    {
      "rows": [
        {
          "searchTerm": "free resume template",
          "date": "2024-05-01",
          "campaignId": "1234567890",
          "adGroupId": "1111111111",
          "impressions": 120,
          "clicks": 25,
          "costMicros": 1750000,
          "conversions": 0
        }
      ]
    }
    

suggest_negative_keywords

  • 输入
    {
      "rows": [ /* output from fetch_search_terms */ ],
      "minClicks": 5,
      "maxConvRate": 0.005,
      "badPhrases": ["free", "job", "jobs", "hiring", "how to", "what is", "review", "reviews"]
    }
    
  • 输出
    {
      "summary": "Identified 2 negative keyword candidates from 5 rows (minClicks=5, maxConvRate=0.50%).",
      "candidates": [
        {
          "text": "free resume template",
          "match_types": ["EXACT", "PHRASE"],
          "reasons": [
            "Low conv-rate (0.00%) on 25 clicks; cost ~$1.75",
            "Search term contains phrase \"free\"."
          ]
        }
      ]
    }
    

这两个工具都会自动为MCP客户端格式化响应,使用纯文本JSON和结构化内容。

部署

  1. 确保 netlify.toml 已承诺/已下定决心。
  2. 将存储库连接到Netlify。
  3. 在 Netlify 的用户界面中设置您的环境变量。
  4. 使用以下方式部署 netlify deploy 或者通过CI(持续集成)访问。MCP(可能指某种管理控制面板或服务端点)端点将可用在 https://<site>.netlify.app/mcp。

测试说明

该存储库旨在用于无状态的、请求/响应式MCP(可能是指某种通信协议或中间件组件)交互。不需要也不支持长时间保持的SSE(Server-Sent Events)连接。