{
  "schemaVersion": "1.0",
  "item": {
    "slug": "serpapi-mcp",
    "name": "Serpapi Mcp",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/merlintxu/serpapi-mcp",
    "canonicalUrl": "https://clawhub.ai/merlintxu/serpapi-mcp",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/serpapi-mcp",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=serpapi-mcp",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/airtable_log.mjs",
      "scripts/fetch_ai_overview.mjs",
      "scripts/serp.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/serpapi-mcp"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/serpapi-mcp",
    "agentPageUrl": "https://openagent3.xyz/skills/serpapi-mcp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/serpapi-mcp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/serpapi-mcp/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "serpapi-mcp",
        "body": "A wrapper skill that calls SerpAPI’s MCP server (Model Context Protocol) via the mcporter CLI."
      },
      {
        "title": "What this skill provides",
        "body": "Runs SerpAPI searches from OpenClaw via MCP (HTTP).\nReturns the full SerpAPI JSON to stdout (the primary contract).\nOptionally persists each query + response into Airtable:\n\nraw JSON (full SerpAPI payload)\na structured “summary” (Top 10 organics, PAA/Related questions, videos, images, counts, flags)"
      },
      {
        "title": "/serp usage",
        "body": "Treat this skill as providing the /serp command.\n\nSyntax:\n\n/serp <query>\n/serp <query> [engine] [num] [mode]\n\nDefaults:\n\nengine=google_light\nnum=5\nmode=compact\n\nNotes:\n\nIf you want SERP features such as People also ask (PAA), video packs, knowledge graph, etc., prefer:\n\nengine=google\nmode=complete\n\nExamples:\n\n/serp site:cnmv.es \"educación financiera\"\n/serp \"AAPL stock\" google 3 compact\n/serp \"mortgage pay off vs invest\" google 10 complete"
      },
      {
        "title": "How it works",
        "body": "Main script (prints JSON to stdout):\n\nskills/serpapi-mcp/scripts/serp.sh \"<query>\" [engine] [num] [mode]\n\nIt calls this MCP tool endpoint:\n\nhttps://mcp.serpapi.com/$SERPAPI_API_KEY/mcp.search\n\nOptional Airtable logger:\n\nskills/serpapi-mcp/scripts/airtable_log.mjs"
      },
      {
        "title": "1) MCP client (mcporter)",
        "body": "This skill requires mcporter installed on the host.\n\nInstall:\n\nnpm install -g mcporter\n\nVerify:\n\nmcporter --help"
      },
      {
        "title": "2) SerpAPI key(s) + failover",
        "body": "You can configure either a single key or a failover pool:\n\nSingle key:\n\nSERPAPI_API_KEY\n\n\nFailover pool (comma-separated, tried in order):\n\nSERPAPI_API_KEYS\n\nRecommended placement (any of these is supported):\n\nSkill-scoped:\n\nskills.entries.serpapi-mcp.env.SERPAPI_API_KEY\nskills.entries.serpapi-mcp.env.SERPAPI_API_KEYS\n\n\nGlobal:\n\nenv.vars.SERPAPI_API_KEY\nenv.vars.SERPAPI_API_KEYS\n\nFailover behavior:\n\nThe script retries with the next key on common quota / auth / rate-limit errors (e.g. 429/401/403, “quota exceeded”, “rate limit”).\nFor other errors (e.g. malformed request), it stops early and returns the error."
      },
      {
        "title": "Enable / disable",
        "body": "Enable logging:\n\nSERP_LOG_AIRTABLE=1 (or true)\n\nYou can set this globally in the Gateway env (always on) or per-run when executing the script."
      },
      {
        "title": "Airtable configuration (Gateway env)",
        "body": "Set these environment variables (do not store secrets in the repo/workspace):\n\nAIRTABLE_TOKEN (Airtable Personal Access Token)\nAIRTABLE_BASE_ID\nAIRTABLE_TABLE (table name or table id)"
      },
      {
        "title": "Write behavior & compatibility",
        "body": "Airtable does not auto-create fields.\nThe logger is schema-aware:\n\nIt reads the table schema via Airtable Metadata API.\nIt only writes fields that already exist in your table (by name).\nIt coerces values to the Airtable field type when possible (checkbox/number/text/select/date)."
      },
      {
        "title": "Airtable table schema (recommended)",
        "body": "Field names must match exactly.\n\nCore:\n\nQuery → Single line text\nEngine → Single line text\nNum → Number (integer)\nMode → Single line text\nCreatedAt → Date/Time\n\nProvenance:\n\nSerpApiSearchId → Single line text\nSerpApiJsonEndpoint → URL\nGoogleUrl → URL\n\nRaw payload:\n\nResultJson → Long text\nResultJsonTruncatedFlag → Checkbox\n\n(Back-compat: the logger also supports ResultJsonTruncated if you prefer that name.)\n\nStructured summary:\n\nSummaryJson → Long text\nSummaryJsonTruncated → Checkbox\nOrganicTop10Json → Long text\nRelatedQuestionsTop10Json → Long text\nShortVideosTop10Json → Long text\nVideosTop10Json → Long text\nImagesTop10Json → Long text\n\nFlags + counts:\n\nHasAiOverview → Checkbox\nHasAnswerBox → Checkbox\nHasKnowledgeGraph → Checkbox\nOrganicCount → Number (integer)\nRelatedQuestionsCount → Number (integer)\nShortVideosCount → Number (integer)\nVideosCount → Number (integer)\nImagesCount → Number (integer)"
      },
      {
        "title": "Airtable size limits",
        "body": "Airtable has per-cell size limits. The logger truncates JSON strings if needed:\n\nAIRTABLE_MAX_JSON_CHARS (default: 90000)\nAIRTABLE_MAX_SUMMARY_CHARS (default: 90000)"
      },
      {
        "title": "Output",
        "body": "Returns SerpAPI JSON. Depending on engine and what Google shows, the payload may include keys like:\n\norganic_results\nshort_videos / videos_results\nimages_results\nrelated_questions\nknowledge_graph\nanswer_box / ai_overview\nads blocks (top_ads, bottom_ads, etc.)"
      }
    ],
    "body": "serpapi-mcp\n\nA wrapper skill that calls SerpAPI’s MCP server (Model Context Protocol) via the mcporter CLI.\n\nWhat this skill provides\nRuns SerpAPI searches from OpenClaw via MCP (HTTP).\nReturns the full SerpAPI JSON to stdout (the primary contract).\nOptionally persists each query + response into Airtable:\nraw JSON (full SerpAPI payload)\na structured “summary” (Top 10 organics, PAA/Related questions, videos, images, counts, flags)\n/serp usage\n\nTreat this skill as providing the /serp command.\n\nSyntax:\n\n/serp <query>\n/serp <query> [engine] [num] [mode]\n\nDefaults:\n\nengine=google_light\nnum=5\nmode=compact\n\nNotes:\n\nIf you want SERP features such as People also ask (PAA), video packs, knowledge graph, etc., prefer:\nengine=google\nmode=complete\n\nExamples:\n\n/serp site:cnmv.es \"educación financiera\"\n/serp \"AAPL stock\" google 3 compact\n/serp \"mortgage pay off vs invest\" google 10 complete\nHow it works\n\nMain script (prints JSON to stdout):\n\nskills/serpapi-mcp/scripts/serp.sh \"<query>\" [engine] [num] [mode]\n\nIt calls this MCP tool endpoint:\n\nhttps://mcp.serpapi.com/$SERPAPI_API_KEY/mcp.search\n\nOptional Airtable logger:\n\nskills/serpapi-mcp/scripts/airtable_log.mjs\nRequirements\n1) MCP client (mcporter)\n\nThis skill requires mcporter installed on the host.\n\nInstall:\n\nnpm install -g mcporter\n\nVerify:\n\nmcporter --help\n2) SerpAPI key(s) + failover\n\nYou can configure either a single key or a failover pool:\n\nSingle key:\nSERPAPI_API_KEY\nFailover pool (comma-separated, tried in order):\nSERPAPI_API_KEYS\n\nRecommended placement (any of these is supported):\n\nSkill-scoped:\nskills.entries.serpapi-mcp.env.SERPAPI_API_KEY\nskills.entries.serpapi-mcp.env.SERPAPI_API_KEYS\nGlobal:\nenv.vars.SERPAPI_API_KEY\nenv.vars.SERPAPI_API_KEYS\n\nFailover behavior:\n\nThe script retries with the next key on common quota / auth / rate-limit errors (e.g. 429/401/403, “quota exceeded”, “rate limit”).\nFor other errors (e.g. malformed request), it stops early and returns the error.\nOptional: store searches/results in Airtable\nEnable / disable\n\nEnable logging:\n\nSERP_LOG_AIRTABLE=1 (or true)\n\nYou can set this globally in the Gateway env (always on) or per-run when executing the script.\n\nAirtable configuration (Gateway env)\n\nSet these environment variables (do not store secrets in the repo/workspace):\n\nAIRTABLE_TOKEN (Airtable Personal Access Token)\nAIRTABLE_BASE_ID\nAIRTABLE_TABLE (table name or table id)\nWrite behavior & compatibility\nAirtable does not auto-create fields.\nThe logger is schema-aware:\nIt reads the table schema via Airtable Metadata API.\nIt only writes fields that already exist in your table (by name).\nIt coerces values to the Airtable field type when possible (checkbox/number/text/select/date).\nAirtable table schema (recommended)\n\nField names must match exactly.\n\nCore:\n\nQuery → Single line text\nEngine → Single line text\nNum → Number (integer)\nMode → Single line text\nCreatedAt → Date/Time\n\nProvenance:\n\nSerpApiSearchId → Single line text\nSerpApiJsonEndpoint → URL\nGoogleUrl → URL\n\nRaw payload:\n\nResultJson → Long text\nResultJsonTruncatedFlag → Checkbox\n(Back-compat: the logger also supports ResultJsonTruncated if you prefer that name.)\n\nStructured summary:\n\nSummaryJson → Long text\nSummaryJsonTruncated → Checkbox\nOrganicTop10Json → Long text\nRelatedQuestionsTop10Json → Long text\nShortVideosTop10Json → Long text\nVideosTop10Json → Long text\nImagesTop10Json → Long text\n\nFlags + counts:\n\nHasAiOverview → Checkbox\nHasAnswerBox → Checkbox\nHasKnowledgeGraph → Checkbox\nOrganicCount → Number (integer)\nRelatedQuestionsCount → Number (integer)\nShortVideosCount → Number (integer)\nVideosCount → Number (integer)\nImagesCount → Number (integer)\nAirtable size limits\n\nAirtable has per-cell size limits. The logger truncates JSON strings if needed:\n\nAIRTABLE_MAX_JSON_CHARS (default: 90000)\nAIRTABLE_MAX_SUMMARY_CHARS (default: 90000)\nOutput\n\nReturns SerpAPI JSON. Depending on engine and what Google shows, the payload may include keys like:\n\norganic_results\nshort_videos / videos_results\nimages_results\nrelated_questions\nknowledge_graph\nanswer_box / ai_overview\nads blocks (top_ads, bottom_ads, etc.)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/merlintxu/serpapi-mcp",
    "publisherUrl": "https://clawhub.ai/merlintxu/serpapi-mcp",
    "owner": "merlintxu",
    "version": "1.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/serpapi-mcp",
    "downloadUrl": "https://openagent3.xyz/downloads/serpapi-mcp",
    "agentUrl": "https://openagent3.xyz/skills/serpapi-mcp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/serpapi-mcp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/serpapi-mcp/agent.md"
  }
}