Serpapi Mcp

Run SerpAPI searches via SerpAPI's MCP server using mcporter. Use when the user asks to search the web with SerpAPI/SerpAPI MCP, wants SerpAPI inside Clawdbot, or to use the /serp command.

Install
$clawhub install serpapi-mcp

serpapi-mcp

A wrapper skill that calls SerpAPI’s MCP server (Model Context Protocol) via the mcporter CLI.

What this skill provides

  • Runs SerpAPI searches from OpenClaw via MCP (HTTP).

  • Returns the full SerpAPI JSON to stdout (the primary contract).

  • Optionally persists each query + response into Airtable:

    • raw JSON (full SerpAPI payload)
    • a structured “summary” (Top 10 organics, PAA/Related questions, videos, images, counts, flags)

/serp usage

Treat this skill as providing the /serp command.

Syntax:

  • /serp <query>

  • /serp <query> [engine] [num] [mode]

Defaults:

  • engine=google_light

  • num=5

  • mode=compact

Notes:

  • If you want SERP features such as People also ask (PAA), video packs, knowledge graph, etc., prefer:
    • engine=google
    • mode=complete

Examples:

  • /serp site:cnmv.es "educación financiera"

  • /serp "AAPL stock" google 3 compact

  • /serp "mortgage pay off vs invest" google 10 complete

How it works

Main script (prints JSON to stdout):

  • skills/serpapi-mcp/scripts/serp.sh "<query>" [engine] [num] [mode]

It calls this MCP tool endpoint:

  • https://mcp.serpapi.com/$SERPAPI_API_KEY/mcp.search

Optional Airtable logger:

  • skills/serpapi-mcp/scripts/airtable_log.mjs

Requirements

1) MCP client (mcporter)

This skill requires mcporter installed on the host.

Install:

  • npm install -g mcporter

Verify:

  • mcporter --help

2) SerpAPI key(s) + failover

You can configure either a single key or a failover pool:

  • Single key:

    • SERPAPI_API_KEY
  • Failover pool (comma-separated, tried in order):

    • SERPAPI_API_KEYS

Recommended placement (any of these is supported):

  • Skill-scoped:

    • skills.entries.serpapi-mcp.env.SERPAPI_API_KEY
    • skills.entries.serpapi-mcp.env.SERPAPI_API_KEYS
  • Global:

    • env.vars.SERPAPI_API_KEY
    • env.vars.SERPAPI_API_KEYS

Failover behavior:

  • The script retries with the next key on common quota / auth / rate-limit errors (e.g. 429/401/403, “quota exceeded”, “rate limit”).

  • For other errors (e.g. malformed request), it stops early and returns the error.

Optional: store searches/results in Airtable

Enable / disable

Enable logging:

  • SERP_LOG_AIRTABLE=1 (or true)

You can set this globally in the Gateway env (always on) or per-run when executing the script.

Airtable configuration (Gateway env)

Set these environment variables (do not store secrets in the repo/workspace):

  • AIRTABLE_TOKEN (Airtable Personal Access Token)

  • AIRTABLE_BASE_ID

  • AIRTABLE_TABLE (table name or table id)

Write behavior & compatibility

  • Airtable does not auto-create fields.

  • The logger is schema-aware:

    • It reads the table schema via Airtable Metadata API.
    • It only writes fields that already exist in your table (by name).
    • It coerces values to the Airtable field type when possible (checkbox/number/text/select/date).

Field names must match exactly.

Core:

  • Query → Single line text

  • Engine → Single line text

  • Num → Number (integer)

  • Mode → Single line text

  • CreatedAt → Date/Time

Provenance:

  • SerpApiSearchId → Single line text

  • SerpApiJsonEndpoint → URL

  • GoogleUrl → URL

Raw payload:

  • ResultJson → Long text

  • ResultJsonTruncatedFlag → Checkbox

    • (Back-compat: the logger also supports ResultJsonTruncated if you prefer that name.)

Structured summary:

  • SummaryJson → Long text

  • SummaryJsonTruncated → Checkbox

  • OrganicTop10Json → Long text

  • RelatedQuestionsTop10Json → Long text

  • ShortVideosTop10Json → Long text

  • VideosTop10Json → Long text

  • ImagesTop10Json → Long text

Flags + counts:

  • HasAiOverview → Checkbox

  • HasAnswerBox → Checkbox

  • HasKnowledgeGraph → Checkbox

  • OrganicCount → Number (integer)

  • RelatedQuestionsCount → Number (integer)

  • ShortVideosCount → Number (integer)

  • VideosCount → Number (integer)

  • ImagesCount → Number (integer)

Airtable size limits

Airtable has per-cell size limits. The logger truncates JSON strings if needed:

  • AIRTABLE_MAX_JSON_CHARS (default: 90000)

  • AIRTABLE_MAX_SUMMARY_CHARS (default: 90000)

Output

Returns SerpAPI JSON. Depending on engine and what Google shows, the payload may include keys like:

  • organic_results

  • short_videos / videos_results

  • images_results

  • related_questions

  • knowledge_graph

  • answer_box / ai_overview

  • ads blocks (top_ads, bottom_ads, etc.)