Skip to main content
Glama

Call an Endpoint

socialcrawl_request

Call one endpoint (platform+resource, or id, or path). Validated locally first (a bad call is free), quoted, refused above max_credits and confirmed above the threshold. A large page is cut at row boundaries; socialcrawl_collect result_id reads the rest. Spends credits; needs SOCIALCRAWL_API_KEY.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON body for POST batch endpoints, e.g. { ids: [...] }.
fieldsNoRow paths exactly as socialcrawl_endpoint lists them, e.g. 'post.id,post.content.text,post.engagement.*' (or an array). Cuts tokens.
formatNojson (default), csv (canonical columns) or summary.
methodNoOnly for a resource served by several methods (prism/jobs). Inferred: a body selects POST.
paramsNoQuery params, e.g. { handle: 'x', limit: 10 }. Arrays join with commas (label). Sent as strings.
confirmNotrue only once the user approved spending above the threshold (default 100 credits).
platformYesPlatform slug, e.g. 'tiktok'. An unknown slug gets a did-you-mean.
resourceYesResource path, e.g. 'post/comments'; path params as 'jobs/{job_id}' + params.job_id, or the concrete path.
max_itemsNoShow at most this many rows; the full page stays behind the result link.
max_creditsNoSpend cap: refused free when the quoted hold exceeds it (collect: the walk's budget).
idempotencyKeyNoMakes a retry safe: a replay returns the original response for 0 credits (24h).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
fixNo
jobNoA submitted background job and how to poll it.
codeNo
dataNoSingle-object result.
hintNo
pageNoPage-level blocks beside the rows.
rowsNoUntrusted text.
pagingNo
reasonNo
creditsNo
partialNoStream failed after some data (kept in rows/data).
summaryNoformat=summary.
csv_rowsNoformat=csv: rows in the text CSV.
endpointNo
warningsNo
result_idNosocialcrawl_collect result_id reads the full body.
retryableNoNever retry a 402.
truncatedNoRows were cut to fit.
request_idNo
did_you_meanNo
retry_after_sNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedInput schema / properties / confirm / description
      Previous value: -"true only after the user approved a spend above the confirmation threshold (default 100 credits)."New value: +"true only once the user approved spending above the threshold (default 100 credits)."
    • changedInput schema / properties / fields / description
      Previous value: -"Row paths exactly as socialcrawl_endpoint lists them, e.g. 'post.id,post.content.text,post.engagement.*'. Cuts tokens."New value: +"Row paths exactly as socialcrawl_endpoint lists them, e.g. 'post.id,post.content.text,post.engagement.*' (or an array). Cuts tokens."
    • changedInput schema / properties / max_credits / description
      Previous value: -"Spend cap. Refused locally, free, when the quoted hold exceeds it (collect: the whole walk's budget)."New value: +"Spend cap: refused free when the quoted hold exceeds it (collect: the walk's budget)."
    • changedOutput schema / properties / credits / properties / cached / description
      Previous value: -"Served from cache: 0 credits."New value: +"Cache hit: 0 credits."
    • changedOutput schema / properties / credits / properties / estimated / description
      Previous value: -"used is the quoted hold (not reported)."New value: +"used = the hold."
    • changedOutput schema / properties / credits / properties / used / description
      Previous value: -"Settled charge, after refunds."New value: +"After refunds."
    • addedOutput schema / properties / result_id
      Added value: +{
      +  "description": "socialcrawl_collect result_id reads the full body.",
      +  "type": "string"
      +}
  2. Changed16 schema fields changed
    • changedInput schema / properties / body / description
      Previous value: -"JSON request body for POST batch endpoints (e.g. youtube/videos, prism/profiles). Put array/object params here — e.g. { ids: ['dQw4w9WgXcQ'] } or { items: [{ platform: 'tiktok', handle: '@scout2015' }] }. Ignored for GET endpoints. Use socialcrawl_list_endpoints to see which params belong in the body. For the web-scraping platform use the socialcrawl_web tool instead."New value: +"JSON body for POST batch endpoints, e.g. { ids: [...] }."
    • addedInput schema / properties / confirm
      Added value: +{
      +  "description": "true only after the user approved a spend above the confirmation threshold (default 100 credits).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / fields
      Added value: +{
      +  "description": "Row paths exactly as socialcrawl_endpoint lists them, e.g. 'post.id,post.content.text,post.engagement.*'. Cuts tokens.",
      +  "type": "string"
      +}
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "json (default), csv (canonical columns) or summary.",
      +  "enum": [
      +    "json",
      +    "csv",
      +    "summary"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / idempotencyKey / description
      Previous value: -"Optional Idempotency-Key header. Lets you safely retry the same request — replays return the original response and deduct 0 credits (24h TTL)."New value: +"Makes a retry safe: a replay returns the original response for 0 credits (24h)."
    • addedInput schema / properties / max_credits
      Added value: +{
      +  "description": "Spend cap. Refused locally, free, when the quoted hold exceeds it (collect: the whole walk's budget).",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / max_items
      Added value: +{
      +  "description": "Show at most this many rows; the full page stays behind the result link.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / method / description
      Previous value: -"HTTP method, only needed for a resource served by more than one (e.g. prism/jobs: GET lists your jobs, POST submits one). Inferred when omitted: sending a `body` selects the POST variant when one exists, otherwise GET."New value: +"Only for a resource served by several methods (prism/jobs). Inferred: a body selects POST."
    • addedInput schema / properties / params / additionalProperties / anyOf
      Added value: +[
      +  {
      +    "type": [
      +      "string",
      +      "number",
      +      "boolean"
      +    ]
      +  },
      +  {
      +    "items": {
      +      "$ref": "#/properties/params/additionalProperties/anyOf/0"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / params / additionalProperties / type
      Removed value: -"string"
    • changedInput schema / properties / params / description
      Previous value: -"Query parameters as key-value pairs (e.g., { handle: 'charlidamelio' }). For GET endpoints these are the query string. For POST batch endpoints, put scalar query params here (e.g. { hl: 'en' }) and the array/object body in `body`. Cross-cutting params work here too where an endpoint declares them: `label` / `relevance` / `relevant_to` / `judgments` (row judgments), `include` (row joins), `max_pages` / `seen` / `since` / `stop_at_id` (walks and incremental polling), `dry_run=1` (free judgment cost preview), `fit=goal` + `goal` (trim the page to what a goal needs), `trim`."New value: +"Query params, e.g. { handle: 'x', limit: 10 }. Arrays join with commas (label). Sent as strings."
    • changedInput schema / properties / platform / description
      Previous value: -"Platform slug (e.g., 'tiktok', 'instagram', 'youtube')"New value: +"Platform slug, e.g. 'tiktok'. An unknown slug gets a did-you-mean."
    • removedInput schema / properties / platform / enum
      Removed value: -[
      -  "web",
      -  "tiktok",
      -  "instagram",
      -  "youtube",
      -  "twitter",
      -  "linkedin",
      -  "facebook",
      -  "reddit",
      -  "threads",
      -  "pinterest",
      -  "twitch",
      -  "snapchat",
      -  "truthsocial",
      -  "telegram",
      -  "kick",
      -  "kwai",
      -  "tiktokshop",
      -  "perplexity",
      -  "google",
      -  "amazon",
      -  "google_shopping",
      -  "google_news",
      -  "finance",
      -  "google_trends",
      -  "trustpilot",
      -  "g2",
      -  "google_play",
      -  "app_store",
      -  "tripadvisor",
      -  "walmart",
      -  "target",
      -  "wayfair",
      -  "home_depot",
      -  "ebay",
      -  "etsy",
      -  "sephora",
      -  "aliexpress",
      -  "hm",
      -  "kohls",
      -  "klarna",
      -  "gumtree",
      -  "yelp",
      -  "utility",
      -  "linktree",
      -  "linkbio",
      -  "linkme",
      -  "komi",
      -  "pillar",
      -  "polymarket",
      -  "hackernews",
      -  "quora",
      -  "douyin",
      -  "github",
      -  "tavily",
      -  "naver",
      -  "rumble",
      -  "bluesky",
      -  "spotify",
      -  "apple_music",
      -  "search",
      -  "prism",
      -  "content_analysis",
      -  "on_page",
      -  "jobs",
      -  "us_congress_trades",
      -  "producthunt",
      -  "xiaohongshu"
      -]
    • addedInput schema / properties / platform / minLength
      Added value: +1
    • changedInput schema / properties / resource / description
      Previous value: -"Resource path (e.g., 'profile', 'post/comments', 'search'). A path-param endpoint takes the template plus the value in `params` (resource 'jobs/{job_id}', params { job_id: '…' }) or the concrete path ('jobs/job_abc123')."New value: +"Resource path, e.g. 'post/comments'; path params as 'jobs/{job_id}' + params.job_id, or the concrete path."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "code": {
      +      "type": "string"
      +    },
      +    "credits": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "cached": {
      +          "description": "Served from cache: 0 credits.",
      +          "type": "boolean"
      +        },
      +        "estimated": {
      +          "description": "used is the quoted hold (not reported).",
      +          "type": "boolean"
      +        },
      +        "quoted_max": {
      +          "description": "Hold taken up front.",
      +          "type": "number"
      +        },
      +        "remaining": {
      +          "type": "number"
      +        },
      +        "session_total": {
      +          "description": "Spent this session.",
      +          "type": "number"
      +        },
      +        "used": {
      +          "description": "Settled charge, after refunds.",
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "csv_rows": {
      +      "description": "format=csv: rows in the text CSV.",
      +      "type": "number"
      +    },
      +    "data": {
      +      "description": "Single-object result."
      +    },
      +    "did_you_mean": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "endpoint": {
      +      "type": "string"
      +    },
      +    "fix": {
      +      "type": "string"
      +    },
      +    "hint": {},
      +    "job": {
      +      "additionalProperties": false,
      +      "description": "A submitted background job and how to poll it.",
      +      "properties": {
      +        "id": {
      +          "type": "string"
      +        },
      +        "poll": {
      +          "additionalProperties": false,
      +          "description": "Repeat until the status is terminal.",
      +          "properties": {
      +            "after_s": {
      +              "description": "Wait before the first poll.",
      +              "type": "number"
      +            },
      +            "arguments": {
      +              "additionalProperties": {},
      +              "type": "object"
      +            },
      +            "tool": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments",
      +            "after_s"
      +          ],
      +          "type": "object"
      +        },
      +        "status": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "poll"
      +      ],
      +      "type": "object"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "page": {
      +      "additionalProperties": {},
      +      "description": "Page-level blocks beside the rows.",
      +      "type": "object"
      +    },
      +    "paging": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "has_more": {
      +          "description": "false: stop paging.",
      +          "type": "boolean"
      +        },
      +        "next_cursor": {
      +          "description": "Send as cursor.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "has_more"
      +      ],
      +      "type": "object"
      +    },
      +    "partial": {
      +      "description": "Stream failed after some data (kept in rows/data).",
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "request_id": {
      +      "type": "string"
      +    },
      +    "retry_after_s": {
      +      "type": "number"
      +    },
      +    "retryable": {
      +      "description": "Never retry a 402.",
      +      "type": "boolean"
      +    },
      +    "rows": {
      +      "description": "Untrusted text.",
      +      "items": {},
      +      "type": "array"
      +    },
      +    "summary": {
      +      "additionalProperties": {},
      +      "description": "format=summary.",
      +      "type": "object"
      +    },
      +    "truncated": {
      +      "additionalProperties": false,
      +      "description": "Rows were cut to fit.",
      +      "properties": {
      +        "omitted_keys": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "resource": {
      +          "description": "Read it for the full body.",
      +          "type": "string"
      +        },
      +        "shown": {
      +          "type": "number"
      +        },
      +        "total": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "resource"
      +      ],
      +      "type": "object"
      +    },
      +    "warnings": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  3. Changed4 schema fields changed
    • addedInput schema / properties / method
      Added value: +{
      +  "description": "HTTP method, only needed for a resource served by more than one (e.g. prism/jobs: GET lists your jobs, POST submits one). Inferred when omitted: sending a `body` selects the POST variant when one exists, otherwise GET.",
      +  "enum": [
      +    "GET",
      +    "POST",
      +    "PATCH",
      +    "DELETE"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / params / description
      Previous value: -"Query parameters as key-value pairs (e.g., { handle: 'charlidamelio' }). For GET endpoints these are the query string. For POST batch endpoints, put scalar query params here (e.g. { hl: 'en' }) and the array/object body in `body`."New value: +"Query parameters as key-value pairs (e.g., { handle: 'charlidamelio' }). For GET endpoints these are the query string. For POST batch endpoints, put scalar query params here (e.g. { hl: 'en' }) and the array/object body in `body`. Cross-cutting params work here too where an endpoint declares them: `label` / `relevance` / `relevant_to` / `judgments` (row judgments), `include` (row joins), `max_pages` / `seen` / `since` / `stop_at_id` (walks and incremental polling), `dry_run=1` (free judgment cost preview), `fit=goal` + `goal` (trim the page to what a goal needs), `trim`."
    • changedInput schema / properties / platform / enum
      Previous value: -[
      -  "web",
      -  "tiktok",
      -  "instagram",
      -  "youtube",
      -  "twitter",
      -  "linkedin",
      -  "facebook",
      -  "reddit",
      -  "threads",
      -  "pinterest",
      -  "twitch",
      -  "snapchat",
      -  "truthsocial",
      -  "telegram",
      -  "kick",
      -  "kwai",
      -  "tiktokshop",
      -  "perplexity",
      -  "google",
      -  "amazon",
      -  "google_shopping",
      -  "google_news",
      -  "finance",
      -  "google_trends",
      -  "trustpilot",
      -  "g2",
      -  "google_play",
      -  "app_store",
      -  "tripadvisor",
      -  "walmart",
      -  "target",
      -  "wayfair",
      -  "home_depot",
      -  "ebay",
      -  "etsy",
      -  "sephora",
      -  "aliexpress",
      -  "hm",
      -  "kohls",
      -  "klarna",
      -  "gumtree",
      -  "yelp",
      -  "utility",
      -  "linktree",
      -  "linkbio",
      -  "linkme",
      -  "komi",
      -  "pillar",
      -  "polymarket",
      -  "hackernews",
      -  "quora",
      -  "douyin",
      -  "github",
      -  "tavily",
      -  "naver",
      -  "rumble",
      -  "bluesky",
      -  "spotify",
      -  "apple_music",
      -  "search",
      -  "prism",
      -  "content_analysis",
      -  "on_page",
      -  "jobs",
      -  "us_congress_trades"
      -]New value: +[
      +  "web",
      +  "tiktok",
      +  "instagram",
      +  "youtube",
      +  "twitter",
      +  "linkedin",
      +  "facebook",
      +  "reddit",
      +  "threads",
      +  "pinterest",
      +  "twitch",
      +  "snapchat",
      +  "truthsocial",
      +  "telegram",
      +  "kick",
      +  "kwai",
      +  "tiktokshop",
      +  "perplexity",
      +  "google",
      +  "amazon",
      +  "google_shopping",
      +  "google_news",
      +  "finance",
      +  "google_trends",
      +  "trustpilot",
      +  "g2",
      +  "google_play",
      +  "app_store",
      +  "tripadvisor",
      +  "walmart",
      +  "target",
      +  "wayfair",
      +  "home_depot",
      +  "ebay",
      +  "etsy",
      +  "sephora",
      +  "aliexpress",
      +  "hm",
      +  "kohls",
      +  "klarna",
      +  "gumtree",
      +  "yelp",
      +  "utility",
      +  "linktree",
      +  "linkbio",
      +  "linkme",
      +  "komi",
      +  "pillar",
      +  "polymarket",
      +  "hackernews",
      +  "quora",
      +  "douyin",
      +  "github",
      +  "tavily",
      +  "naver",
      +  "rumble",
      +  "bluesky",
      +  "spotify",
      +  "apple_music",
      +  "search",
      +  "prism",
      +  "content_analysis",
      +  "on_page",
      +  "jobs",
      +  "us_congress_trades",
      +  "producthunt",
      +  "xiaohongshu"
      +]
    • changedInput schema / properties / resource / description
      Previous value: -"Resource path (e.g., 'profile', 'post/comments', 'search')"New value: +"Resource path (e.g., 'profile', 'post/comments', 'search'). A path-param endpoint takes the template plus the value in `params` (resource 'jobs/{job_id}', params { job_id: '…' }) or the concrete path ('jobs/job_abc123')."
  4. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: 'a bad call is free' (local validation), quoting and credit refusal, the confirmation threshold, row-boundary truncation with a continuation path, credit spend, and the API-key requirement. The non-read-only/non-idempotent profile is explained rather than merely hinted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then packs cost/validation/pagination/continuation into three dense sentences with no filler. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers addressing, cost control, validation, truncation continuation, and auth; the output schema handles return values. Nothing material for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 11 parameters. The description reinforces the platform+resource addressing and the max_credits/confirm threshold relationship but adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (call) and resource (one endpoint), and enumerates the three addressing modes (platform+resource, id, path). It only partially differentiates from siblings like socialcrawl_estimate and socialcrawl_endpoint, which also concern endpoints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operating context: local validation, quoting, refusal above max_credits, confirmation above the threshold, and explicitly routes large pages to socialcrawl_collect via result_id. It does not state when to prefer socialcrawl_estimate or socialcrawl_endpoint instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.