Skip to main content
Glama

SocialCrawl

SocialCrawl Cohorts — Audience-Filtered Mention Search

socialcrawl_cohorts
Destructive

Answer 'which of THESE specific public identities is talking about my keywords?' — the opposite of open social listening. You upload a panel of up to 10,000 platform-qualified public handles (instagram, tiktok, youtube, twitter, threads, bluesky, truth-social, kwai, twitch, linkedin), submit a keyword query bounded to a recent window, and read back the matching posts per member PLUS a coverage record for every member, including the ones that matched nothing — so a partial crawl can never read as 'nobody talked about you'. Actions: create, add_members (1,000 per call, upsert on external_id so a nightly re-push is safe), estimate_cost (local, no API call — sizes the reservation before you commit), query (async, returns 202), query_status, query_results (paged, carries items + coverage), query_cancel, get, delete. Matching is deterministic: literal, whole-word, Unicode-normalized — no stemming, fuzzy matching, or alias inference. Every lifecycle call costs 0 credits; only the query is metered — it reserves a worst-case ceiling at submission and refunds down to the pages that actually succeeded. SocialCrawl only ever receives platform + handle + your opaque external_id, encrypted at rest. Requires a valid SOCIALCRAWL_API_KEY.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNocreate: human-readable label, up to 120 characters.
limitNoquery_results: page size, 1-500 (default 100). It governs the coverage list too.
actionYesCohort operation. Lifecycle order: 'create' a cohort → 'add_members' (up to 1,000 per call, 10,000 per cohort) → 'estimate_cost' locally to size max_credits → 'query' (async, 202) → 'query_status' until it succeeds → 'query_results' (page with cursor). Also 'get' a cohort, 'query_cancel' a running query, and 'delete' a cohort with everything under it. Everything except 'query' costs 0 credits.
cursorNoquery_results: pass `next_cursor` back verbatim. Keep going until it is null.
date_toNoquery: optional RFC3339 upper bound on the window.
membersNoadd_members (or estimate_cost): up to 1,000 identities per call, 10,000 per cohort. Rows are FLAT — a member with identities on several platforms is several rows sharing one external_id, not a nested array. Re-sending an external_id updates its identity rather than adding a row, so a nightly full re-push is safe. LinkedIn takes the full profile URL, not a bare handle.
keywordsNoquery (required): up to 20 terms. Matching is literal and whole-word after Unicode NFKC case-folding — no stemming, fuzzy matching, or brand-alias inference. Pass 'Acme' and 'AcmeCo' separately if you want both.
query_idNoQuery id from 'query'. Required for query_status/query_results/query_cancel.
cohort_idNoCohort id from 'create'. Required for get/delete/add_members/query.
date_fromNoquery (required): a full RFC3339 timestamp (e.g. '2026-08-01T00:00:00.000Z'), not a bare calendar date. It bounds how far back each crawl reaches.
platformsNoquery: restrict the run to a subset of the platforms present in the cohort. Omit to query them all.
max_creditsNoquery (required, no default): your own safety limit. Submission fails with a 400 before any credit is held if the computed ceiling exceeds it — run action 'estimate_cost' first to size it.
idempotencyKeyNoUUIDv4 for the write actions (create/add_members/query), which the API requires. Omit it and one is generated and echoed back — but supply your own (or reuse the echoed one) to make a retry replay the original call instead of creating a second cohort or reserving a second query.
retention_daysNocreate: 7-90, default 30. When it elapses the cohort and everything under it is purged. Uploading members or submitting a query renews the clock.
platform_countsNoestimate_cost: the panel's platform mix as { instagram: 4000, youtube: 1000, ... } when you want a ceiling without passing the identities themselves.
max_items_per_identityNoquery (required, no default): item budget per member, 1-1,000.
max_pages_per_identityNoquery (required, no default) and estimate_cost: page budget per member, 1-20. Twitter, Bluesky, Threads and Twitch serve one fixed page per identity and ignore anything above 1.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: lifecycle calls cost 0 credits while queries are metered with reservation and refunds, query is async and returns 202, matching is literal and deterministic with no stemming or fuzzy inference, and coverage is returned even for members with zero matches so partial crawls are not misread. It also discloses privacy handling and the API key requirement. No contradiction with annotations.

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?

The description is long but dense and front-loaded. The first sentence states the core purpose and differentiation, the action list embeds lifecycle order, and separate sentences address matching behavior, credit costs, and privacy. Every sentence contributes useful decision or invocation signal; there is no filler.

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?

Despite having no output schema, the description covers the essential return shape (items plus coverage), the asynchronous query flow via query_status, the credit reservation model, and the required API key. Combined with the highly detailed input schema and action enum, an agent has enough context to select, invoke, and interpret this multi-action tool correctly.

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

Parameters4/5

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

Schema coverage is 100% and the schema already documents each parameter in detail, so the baseline is 3. The description adds meaningful cross-parameter context: estimate_cost is local and sizes max_credits, add_members upserts on external_id, query_results carries items plus coverage, and matching semantics clarify keywords/date constraints. It does not individually elaborate every parameter, but the schema already carries that weight.

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

Purpose5/5

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

The description opens with a concrete question and explicitly positions the tool as 'the opposite of open social listening'. It states the resource (a cohort of up to 10,000 public handles), the action (keyword mention search), and the result (matching posts plus coverage), making it easy to distinguish from open-listening siblings.

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?

The description clearly tells an agent when to use this tool: when the target set is a known panel of specific identities rather than the open social graph. It also provides a helpful lifecycle order for the actions. However, it does not explicitly name sibling alternatives like socialcrawl_discover or socialcrawl_monitors, so the exclusion guidance is implied rather than direct.

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.