serpapi-mcp
v1.1.1Run 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.
Installation
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).
Airtable table schema (recommended)
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.)