SocialCrawl
Server Details
One API for 65 platforms and 572 endpoints: social, commerce, retail, jobs, finance, web scraping.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- RidioDevelopment/socialcrawl-mcp
- GitHub Stars
- 0
- Server Listing
- socialcrawl-mcp
TDQS
Scored across 10 tools
The five meta/discovery tools (discover, get_docs, list_endpoints, list_platforms, pricing) heavily overlap: pricing info appears in list_endpoints, pricing, discover 'catalog', and get_docs 'pricing'; endpoint contracts appear in both list_endpoints and discover 'endpoint'. The descriptions do draw distinctions (live registry vs bundled docs vs cost tables), but an agent can easily misselect among them. The operational tools (cohorts, monitors, request, web, check_balance) are clearly distinct.
All tools share the socialcrawl_ prefix in snake_case, a clear, predictable convention. Verb_noun forms dominate (check_balance, get_docs, list_endpoints, list_platforms), though several are bare nouns (cohorts, monitors, pricing, web) which is a minor deviation. Still highly readable and consistent overall.
Ten tools is an excellent facade over a 575-endpoint/65-platform API, collapsing a huge surface into a small, well-scoped set. Each tool owns a coherent area (billing, discovery, docs, catalog, platforms, pricing, generic request, web, cohorts, monitors) with no filler.
The surface covers auth/balance, live discovery, bundled docs, endpoint and platform catalogs, pricing, a generic request escape hatch, the web-scraping/browser surface, and stateful cohorts and monitors. For an API-gateway server this is essentially full lifecycle coverage with no obvious dead ends.
Available Tools
10 toolssocialcrawl_cohortsSocialCrawl Cohorts — Audience-Filtered Mention SearchADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | create: human-readable label, up to 120 characters. | |
| limit | No | query_results: page size, 1-500 (default 100). It governs the coverage list too. | |
| action | Yes | Cohort 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. | |
| cursor | No | query_results: pass `next_cursor` back verbatim. Keep going until it is null. | |
| date_to | No | query: optional RFC3339 upper bound on the window. | |
| members | No | add_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. | |
| keywords | No | query (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_id | No | Query id from 'query'. Required for query_status/query_results/query_cancel. | |
| cohort_id | No | Cohort id from 'create'. Required for get/delete/add_members/query. | |
| date_from | No | query (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. | |
| platforms | No | query: restrict the run to a subset of the platforms present in the cohort. Omit to query them all. | |
| max_credits | No | query (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. | |
| idempotencyKey | No | UUIDv4 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_days | No | create: 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_counts | No | estimate_cost: the panel's platform mix as { instagram: 4000, youtube: 1000, ... } when you want a ceiling without passing the identities themselves. | |
| max_items_per_identity | No | query (required, no default): item budget per member, 1-1,000. | |
| max_pages_per_identity | No | query (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. |
TDQS
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.
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.
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.
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.
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.
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.
socialcrawl_discoverSocialCrawl API Self-Discovery (utility endpoints)ARead-onlyIdempotentInspect
The API describing itself, live, at 0 credits — the /v1/utility/* family. 'quickstart': everything needed for a first successful call (auth, base URL, response envelope, billing model, the full error taxonomy, rate limits, paging). 'catalog': every endpoint with its live metered-aware price, params, and paging flag — filter by platform/search/method. 'endpoint': one endpoint's complete usage guide — every parameter with type and example, the exact pricing rule, cache TTL, paging recipe, an example response, a copy-paste curl, and related endpoints. 'llms': the agent context corpus for the whole API or one platform. 'freshness': compare the live registry against this server's bundled catalogue to check whether this MCP version has fallen behind the API. 'status': every platform's live circuit-breaker state from the public GET /v1/status meta route — read it before retrying a persistent 502/503, since a degraded platform is the breaker holding traffic off a failing upstream. These answer from the live registry at request time, so unlike bundled data they can never drift from what is actually callable — use them when correctness matters more than latency, or when an endpoint looks unknown. Without an API key everything except 'llms' still answers from bundled data ('status' needs no key at all).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | endpoint (required): the endpoint id as 'platform/resource' (e.g. 'tiktok/profile'), a path ('/v1/tiktok/profile'), or a full URL. | |
| live | No | Set false to answer from this server's bundled catalogue instead of calling the live API. Default is live whenever an API key is configured; without a key everything except 'llms' falls back to bundled data automatically. | |
| page | No | Page number (default 1). Long output is paged, not truncated. | |
| action | No | 'quickstart' (default): auth, base URL, envelope, billing, the error taxonomy, limits, and a first call — GET /v1/utility/quickstart. 'catalog': the machine-readable list of every endpoint with live metered-aware prices — GET /v1/utility/endpoints. 'endpoint': one endpoint's complete usage guide, params, pricing rule, cache, paging, example response, curl, and related endpoints — GET /v1/utility/endpoint. 'llms': the agent context corpus for the whole API or one platform — GET /v1/utility/llms. 'freshness': compare the live registry against this server's bundled catalogue to see whether this MCP version is current. 'status': every platform's live circuit-breaker state — GET /v1/status, the public meta route to read before retrying a persistent 502 or 503. | |
| format | No | llms: 'markdown' (default) returns the corpus text; 'json' returns a structured context object. | |
| method | No | catalog: filter by HTTP method. endpoint: disambiguate a resource registered under more than one method (the stateful `web` family). | |
| search | No | catalog: case-insensitive substring filter over endpoint paths and summaries. | |
| platform | No | Scope to one platform slug (e.g. 'tiktok'). Applies to quickstart, catalog, and llms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds substantial context beyond those: live registry answers avoid drift, bundled fallback behavior without an API key, status requiring no key, zero-credit utility access, and paged rather than truncated output. This richly discloses operational behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but organized around the six action modes, and it front-loads the core purpose: the API describing itself live at zero credits. Every sentence contributes useful behavioral or usage context, though the density makes it somewhat heavy as a single block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explains what each action returns, including quickstart content, catalog format, endpoint guides, llms corpus options, freshness comparison, and status circuit-breaker data. It also covers auth fallback, paging behavior, and billing context, making the tool effectively self-sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage with detailed descriptions, including enums and per-action explanations. The description adds high-level context around live versus bundled data and when to use actions, but it does not add significant per-parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as live self-discovery of the SocialCrawl API at zero credits, covering the /v1/utility/* family and enumerating each action mode. It is specific about the resource and behavior, though it does not explicitly differentiate itself from sibling tools like socialcrawl_get_docs or socialcrawl_list_endpoints by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable guidance: use these live endpoints when correctness matters more than latency, when an endpoint looks unknown, and read 'status' before retrying persistent 502/503 errors. It does not explicitly name sibling alternatives or state when not to use the tool, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_get_docsGet SocialCrawl DocumentationARead-onlyIdempotentInspect
Retrieve SocialCrawl API documentation. Topics: 'overview' (compact intro), 'full' (comprehensive reference for all 575 endpoints), 'authentication', 'credits', 'pricing' (per-endpoint cost for every endpoint), 'errors', 'idempotency', 'pagination' (universal cursor contract), 'caching' (TTLs and free hits), 'hydration' (the opt-in include= row joins, what each fills and what it costs), 'response-schema' (the canonical envelope and unified objects), 'limits' (rate, concurrency, timeouts), 'monitors' (scheduled-recipe wrapper), 'cohorts' (audience-filtered mention search over a panel you supply), 'discovery' (the free self-describing utility endpoints), or any platform slug (e.g., 'tiktok', or 'web' for the web-scraping/browser-automation surface). No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for long topics (default 1). Topics longer than one response are paged rather than truncated — the footer tells you how many pages there are. 'full' and the largest platform topics span several pages. | |
| topic | No | Documentation topic: 'overview', 'full', 'authentication', 'credits', 'pricing' (per-endpoint costs), 'errors', 'idempotency', 'pagination', 'caching', 'hydration' (opt-in `include=` row joins), 'response-schema', 'limits', 'monitors', 'discovery', or a platform slug (e.g., 'tiktok', or 'web' for the scraping/browser surface). | overview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description still adds real context: no authentication required and the fact that long topics are paged rather than truncated with a page-count footer. It omits any note on response size or topic-recency, but the incremental value is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by a single dense topic enumeration and a one-line access note. The topic list is long but each item earns its place as a selection aid; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of explaining that content is paged with a footer indicating page count, and it gives the full topic vocabulary. Complete enough to invoke correctly, though it could say more about the shape of the returned documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description's topic list largely mirrors the schema's enum (even dropping a couple of entries), so it adds little for 'topic'. The paging contract it mentions is also already stated in the 'page' schema description, meaning the description largely restates structured data. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve SocialCrawl API documentation') and enumerates the exact topic space, so an agent knows precisely what comes back. It does not, however, differentiate itself from overlapping siblings such as socialcrawl_pricing (also a documented topic), socialcrawl_discover, or socialcrawl_list_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage (fetch docs before calling the API) and adds a practical access note ('No API key required'), which is genuinely useful for a cold-start agent. It never states when to prefer this tool over the doc-adjacent siblings (pricing, discover, list_endpoints), and gives no explicit when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_list_endpointsList Endpoints for a PlatformARead-onlyIdempotentInspect
List endpoints with their full parameter contract — required + optional params, types, integer ranges, enum values, parameter couplings, CSV limits, pagination style, cache TTL, and per-endpoint pricing (including metered bands). Pass a platform for that platform's reference, or a search term to find an endpoint across all 65 platforms / 575 endpoints. Filter with method, maxCost, and hydrating (endpoints that can fill their own rows in one call via include=). No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). Output longer than one response is paged, not truncated — the footer says how many pages there are and repeats your filters. | |
| detail | No | 'full' (default for a single platform) prints every parameter with its type, range, enum values, and couplings. 'compact' prints the summary table only — use it when searching broadly. | |
| method | No | Only show endpoints served with this HTTP method. | |
| search | No | Free-text search over endpoint names, summaries, descriptions, archetypes, and tags (e.g. 'transcript', 'reviews', 'followers'). Works with or without `platform` — without one it searches all platforms. | |
| maxCost | No | Only show endpoints that cost at most this many credits per call (metered endpoints are judged by their ceiling). | |
| platform | No | Platform slug (e.g., 'tiktok', 'instagram', 'youtube'). Omit it and pass `search` to look for an endpoint across all platforms. | |
| hydrating | No | Only show endpoints that can fill their own rows in the same call via an `include=` row join (e.g. a search page that can carry engagement counts). Use it to find the one call that answers a question instead of a page plus one lookup per row. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds useful behavioral context beyond that: 'No API key required' (auth profile) and the shape of what a listing contains (pricing incl. metered bands, cache TTL, pagination style). It stops short of describing result ordering or size limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and its payload, then the selection modes and filters. Dense but each clause carries information; the long enumeration of contract fields is the only mild bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden and does so reasonably: it tells the agent the listing includes parameter contracts, pricing bands, pagination style, and cache TTL. For a discovery tool with 7 optional params and full schema coverage, this is nearly sufficient; only the response envelope/format specifics are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 seven parameters in detail, including hydrating's include= semantics. The description restates method/maxCost/hydrating and adds a small gloss on hydrating ('can fill their own rows in one call'), but contributes little meaning not already present in the schema. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (endpoints) with scope detail: 'full parameter contract' across '65 platforms / 575 endpoints'. An agent can tell it is the endpoint-level reference tool. It does not, however, explicitly distinguish itself from nearby siblings like socialcrawl_list_platforms, socialcrawl_get_docs, or socialcrawl_discover, leaving the boundary to be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the two selection modes ('Pass a platform for that platform's reference, or a search term to find an endpoint across all platforms') and names the three filters (method, maxCost, hydrating). Missing explicit when-not-to-use guidance relative to siblings such as list_platforms or discover, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_list_platformsList SocialCrawl PlatformsARead-onlyIdempotentInspect
List all 65 platforms available through SocialCrawl (575 endpoints — social media, commerce, marketplaces & product reviews, retail (Amazon, Walmart, Target, Home Depot, eBay, Klarna, AliExpress, Etsy, Sephora, H&M, Kohl's, Wayfair, Gumtree, Google Shopping), app stores, places, travel & local (Tripadvisor, Yelp, Google Business), business & software reputation (Trustpilot, G2), jobs & salaries, markets & finance, US congressional trading, news, web research and full scraping/browser automation, on-page SEO audits, prediction markets, search trends, Korean search (Naver), content analysis, and cross-platform Prism composites). Grouped by category, with each platform's endpoint count, credit range, and available data. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the response is grouped by category, includes endpoint counts and credit ranges, and no API key is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the long parenthetical enumeration of dozens of categories and platform names is bloated and partly duplicates what the tool's output should provide. It is information-dense but not tightly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description needs to convey return contents; it does so reasonably well by stating the grouped-by-category format and the metrics included per platform. It also confirms no API key is required, though pagination and ordering remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 by rule. There are no parameter semantics to clarify, and the description correctly does not invent any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List all 65 platforms available through SocialCrawl.' The scope (all platforms, grouped by category) and sibling differentiation from endpoint-level tools is clear from the contrast between platforms and 575 endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or alternative tool is named. The phrase 'List all platforms' only implies discovery usage, and it does not route the agent relative to socialcrawl_list_endpoints, socialcrawl_discover, or socialcrawl_get_docs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_monitorsManage SocialCrawl MonitorsADestructiveInspect
Create and manage stateful monitors that re-run any SocialCrawl recipe (a registry endpoint or a Prism composite) on a cadence (hourly/daily/weekly/cron), deliver each result to a signed webhook, raise alerts on metric thresholds/changes, and accumulate a per-run time-series. 'Prism answers once; monitors watch it for you.' Actions: create, list, get, runs, timeseries, pause, resume, delete. Managing monitors costs 0 credits; each scheduled run bills the underlying recipe's normal cost plus a 1-credit scheduling premium. Requires a valid SOCIALCRAWL_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Monitor id. Required for get/runs/timeseries/pause/resume/delete. | |
| to | No | runs/timeseries: ISO end of the time window. | |
| from | No | runs/timeseries: ISO start of the time window. | |
| name | No | create: optional human-readable label. | |
| limit | No | list/runs: page size (1-100, default 20). | |
| action | Yes | Monitor operation: 'create' a scheduled monitor, 'list' your monitors, 'get' one, 'runs' for its run history, 'timeseries' for its metric series, 'pause'/'resume' it, or 'delete' it. | |
| cursor | No | list/runs: pagination cursor. | |
| metric | No | timeseries: comma-separated metric keys to project (defaults to all stable computed keys). | |
| params | No | create: parameters passed to the recipe on every run (e.g., { keyword: 'acme' }). | |
| recipe | No | create: the recipe to run each cadence — any registered endpoint or Prism composite as 'platform/resource' (e.g., 'prism/brand-mentions', 'tiktok/profile'). | |
| status | No | Filter. For list: 'active' | 'paused' | 'all'. For runs: 'ok' | 'partial' | 'failed' | 'skipped'. | |
| cadence | No | create: 'hourly', 'daily', 'weekly', or a cron expression (e.g., '0 9 * * 1'). | |
| include | No | runs: set to 'result' to include each run's full stored result envelope. | |
| alert_rules | No | create: optional alert rules on the recipe's computed metrics — e.g., [{ metric: 'negative_share', op: 'pct_change_gt', value: 25 }]. | |
| webhook_url | No | create: HTTPS URL that receives each run's signed (HMAC-SHA256) result. | |
| output_schema | No | create: optional JSON schema to shape the delivered payload. | |
| webhook_secret | No | create: optional signing secret (8-200 chars); otherwise one is generated and returned once. | |
| suppress_webhook_unless_alert | No | create: only fire the webhook when an alert rule trips (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as mutable/destructive and non-idempotent, and the description adds substantial behavioral context: monitors are stateful, management costs 0 credits while scheduled runs add a 1-credit premium, webhook delivery is signed, alerts and time-series accumulation exist, and a valid API key is required. This goes well beyond the annotation hints and gives the agent important operational expectations. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: core purpose, tagline, action enumeration, billing model, and auth requirement. The description is compact relative to an 18-parameter multi-action tool and front-loads the primary function before operational details. There is no fluff or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-action tool with no output schema, the description provides strong operational context including billing, auth, stateful behavior, and webhook signing. The parameter schema handles the detailed field semantics. The only notable gap is that the description does not explain the return shapes for list/get/runs/timeseries, which would be useful given no output schema is declared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 18 parameters with descriptions, so the baseline is 3. The tool description reinforces high-level concepts like cadence, webhook delivery, alerts, and time-series, but it does not add per-parameter meaning beyond what the schema already provides. The schema itself carries the full semantic load for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Create and manage stateful monitors') and immediately scopes the behavior: re-running recipes on cadence, delivering signed webhook results, raising alerts, and storing time-series. It lists all eight actions explicitly and distinguishes the tool from one-shot recipe execution via the tagline 'Prism answers once; monitors watch it for you.' This is clearly differentiated from siblings like socialcrawl_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when a recipe must be re-run on a cadence, delivered to a webhook, or monitored for metric changes. It contrasts with one-shot execution using the tagline, and it clarifies billing implications. It does not explicitly name sibling alternatives or state hard exclusions, but the usage context is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_pricingSocialCrawl Pricing & Credit CostsARead-onlyIdempotentInspect
Exact credit pricing for every one of the 575 SocialCrawl endpoints. 'overview' returns the tier ladder (329 standard / 211 advanced / 35 premium), every free endpoint, every flat override, all 71 metered endpoints with their min-max band and exact charging rule, cache TTLs, and the full refund matrix. 'endpoint' gives one endpoint's price, metered rule, price-driving parameters, paging cost, and worst case. 'platform' gives a platform's whole cost table. 'list' ranks and filters endpoints by cost (maxCost/minCost/model/search/sort) — e.g. "everything I can call for 1 credit" or "the most expensive endpoints". 'hydration' catalogues every opt-in include= row join — what each fills, its per-row rate, its row cap, and what a fully-joined page holds. On 'endpoint', pass the include (and rows) you intend to send and the band becomes the exact upfront hold, itemised per join. Use this before spending credits. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | endpoint: the row cap you intend to send alongside `include` (the endpoint's own `limit`). A row join holds per row, so capping the rows caps the credits — quote it before you spend it. | |
| sort | No | list: sort order (default 'cost_desc' — most expensive first). | |
| limit | No | list: maximum rows to return (1-200, default 40). | |
| model | No | list: filter by billing model — 'ladder' (tier rate per request), 'flat' (per-endpoint override), 'metered' (query-dependent, ceiling deducted then refunded down), or 'free' (0 credits). | |
| action | No | 'overview' (default): the tier ladder, every free endpoint, every flat override, every metered band with its rule, cache TTLs, and the refund matrix. 'endpoint': one endpoint's exact price, metered rule, price-driving params, row joins, and worst case (needs platform + resource) — add `include`/`rows` for an exact quote instead of a band. 'platform': the cost table for one platform (needs platform). 'list': rank/filter endpoints by price across platforms. 'hydration': every `include=` row join in the API, what each one fills, what it costs per row and what a fully-joined page holds (optionally scoped with `platform`). | |
| method | No | HTTP method. Disambiguates the `web` platform, where one resource is served by several methods; also filters the 'list' action. | |
| search | No | list: free-text filter over platform, resource, summary, and archetype. | |
| include | No | endpoint: the `include=` row-join tokens you intend to send (comma-separated, e.g. 'engagement' or 'engagement,channel'). Turns the quoted band into the exact hold for that call, itemised per join. Costs nothing to ask. | |
| maxCost | No | list: only endpoints that can cost at most this many credits (metered judged by their ceiling). | |
| minCost | No | list: only endpoints that cost at least this many credits (metered judged by their floor). | |
| platform | No | Platform slug. Required for 'endpoint' and 'platform' actions; filters the 'list' action. | |
| resource | No | Resource path for the 'endpoint' action (e.g., 'profile', 'comments', 'jobs/{job_id}'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces with 'No API key required' and 'Costs nothing to ask' — useful context beyond the annotation bar. It explains the metered ceiling-then-refund mechanic, which is genuine behavioral detail. No rate limits or error behavior disclosed, keeping it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then action-by-action detail plus a workflow hint. Dense but well-organized; only mild redundancy between the description and the `action` enum prose keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-param, 5-action read-only pricing tool with no output schema, the description covers action selection, parameter interaction, and the cost-quoting workflow completely. Missing only the shape of returned data, but output_schema absence makes that a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3, but the description adds cross-parameter semantics: how `include`+`rows` convert a band into an exact hold, what `endpoint` requires (platform+resource), and how `method` disambiguates the web platform. This meaningfully exceeds the schema's field-by-field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource — exact credit pricing across 575 endpoints — and enumerates the five actions with their distinct outputs. The distinction from siblings (check_balance, list_endpoints) is implicit but strong: this is the cost-quoting tool, not a balance reader or endpoint lister.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Use this before spending credits', names the intended workflow (pass `include`/`rows` to turn a band into an upfront hold), and provides concrete usage examples like 'everything I can call for 1 credit'. When-to-use and how-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_requestMake a SocialCrawl API RequestARead-onlyIdempotentInspect
Make an API request to any of the 575 SocialCrawl endpoints. Fetches real-time data (profiles, posts, comments, transcripts, search results, products, offers and price history, reviews, apps, places and stores, jobs and salary ranges, news, market quotes and financial statements, congressional trade disclosures, SEO audits, trends, analytics, and cross-platform Prism composites) from 65 platforms. Most endpoints are GET (pass query params in params); batch endpoints (e.g. youtube/videos, prism/profiles) are POST — pass the array/object body in body. For web scraping/crawling/browser automation use the socialcrawl_web tool instead. Requires a valid SOCIALCRAWL_API_KEY. Validates the platform, resource, required params, oneOf groups, enum values, integer ranges, parameter couplings, and CSV limits locally first, so a malformed call fails free instead of burning credits. Reports the endpoint's price (and metered rule) with every response, and on an endpoint that supports row joins it either quotes the exact hold for the include= you sent or tells you the join is available and what it costs. Pass an optional idempotencyKey to make the request retry-safe (replays return the original response and deduct 0 credits).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | 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. | |
| params | No | 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`. | |
| platform | Yes | Platform slug (e.g., 'tiktok', 'instagram', 'youtube') | |
| resource | Yes | Resource path (e.g., 'profile', 'post/comments', 'search') | |
| idempotencyKey | No | Optional Idempotency-Key header. Lets you safely retry the same request — replays return the original response and deduct 0 credits (24h TTL). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly/openWorld/idempotent/no-destructive) by disclosing local validation of platform/resource/params/oneOf/enums/CSV limits, credit pricing reported per response, join hold quoting via include=, and idempotencyKey replay semantics. These are exactly the cost/safety traits an agent needs and cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core routing rule is front-loaded, but the long parenthetical enumerating data categories and the multi-clause final sentence about pricing/joins/idempotency are dense and mix several distinct behaviors into one paragraph. Useful content, but not tightly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic passthrough tool over 575 endpoints with no output schema, the description covers the essential contract: GET vs POST, auth requirement, local validation, cost reporting, and idempotency. It omits response shape and error format, but those are largely unknowable per-endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds useful routing logic (scalars to params, arrays/objects to body; body ignored for GET) but restates what the schema's own property descriptions already say, so the marginal value over structured data is limited.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (make an API request to any of 575 SocialCrawl endpoints) and enumerates the data categories and 65 platforms. It explicitly distinguishes itself from socialcrawl_web for scraping/crawling/browser automation, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context (GET vs POST batch endpoints, which param goes where) and an explicit exclusion pointing to socialcrawl_web. It does not, however, direct the agent to list_endpoints/list_platforms/pricing for discovery, which would complete the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socialcrawl_webSocialCrawl Web Scraping & Browser AutomationADestructiveInspect
Full web scraping, search, and browser automation (Firecrawl-backed). Sync reads: 'scrape' (URL → markdown/HTML/screenshot/links), 'search' (web search with page content), 'map' (discover a site's URLs), 'extract' (LLM structured data from a page). Async jobs (submit, then poll with job_get/job_list, stop with job_cancel): 'crawl' a whole site, 'batch_scrape' many URLs, 'agent' (autonomous multi-step web task). Change detection: monitor_create/list/get/update/delete/checks (re-check a URL on a cadence → webhook). Interactive browser: session_create/get/list, session_execute (run code in the live page), session_close. Pricing varies by action (scrape 1cr, search 2cr, extract/session_create 5cr, agent 25cr; jobs/monitors/sessions management 0cr) — see the 'web' get_docs topic. Requires a valid SOCIALCRAWL_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Job / monitor / session id. Required for *_get, *_cancel, *_delete, *_update, *_checks, *_execute, and job_errors actions. Returned by the matching *_create / *_list action. | |
| input | No | Operation parameters. For sync/GET actions these are query params (e.g. { url: 'https://example.com', formats: 'markdown,screenshot' } for scrape; { query: 'ai agents', limit: 10 } for search). For POST/PATCH actions this is the JSON body (e.g. { url, prompt, model } for agent; { url, cadence_minutes, webhook_url } for monitor_create; { code, language } for session_execute). Use socialcrawl_list_endpoints for platform 'web', or the 'web' get_docs topic, for the full per-action parameter list. | |
| action | Yes | Web operation. Sync (returns data now): scrape, search, map, extract. Async jobs: crawl, batch_scrape, agent → then job_get/job_list/job_cancel to poll, and job_errors for a job's per-page failure feed. crawl_preview dry-runs a crawl's parameters for free before you pay for it. Change detection: monitor_create/list/get/update/delete/checks. Interactive browser: session_create/list/get/execute/close. | |
| idempotencyKey | No | Optional Idempotency-Key for the async job submitters (crawl, batch_scrape). Replays return the original job and deduct 0 credits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the bar is lower. The description adds valuable behavioral context beyond them: API key requirement, per-action credit costs, async submit-then-poll behavior, monitor re-check cadence, and idempotency semantics. It does not detail destructive consequences, but destructiveHint and action names like delete/cancel/close provide the baseline warning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: it front-loads the purpose, organizes 23 actions into sync, async, monitor, and browser groups, and attaches pricing, docs pointer, and auth requirements. For the breadth of this tool, the length is justified and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and a large action surface, the description is remarkably complete: it covers workflows, auth, costs, and points to get_docs for the full per-action parameter list. It leaves response shapes and detailed error semantics to the docs, which is a reasonable trade-off given the scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter information in the tool description. The description enriches action semantics but does not add per-parameter detail beyond what the input schema already provides for action, id, input, and idempotencyKey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, agent-facing purpose: 'Full web scraping, search, and browser automation (Firecrawl-backed),' then enumerates the action groups and their outputs. It is specific enough about what the tool does, though it does not explicitly contrast itself with sibling tools like socialcrawl_request or socialcrawl_monitors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong internal routing guidance: sync reads vs. async jobs, monitor cadence with webhook, interactive browser sessions, and even a free crawl_preview dry-run. It does not state explicit 'when not to use' conditions or compare against sibling alternatives, but for this broad umbrella tool the action-level guidance is quite usable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
socialcrawl_get_docs1 field changed- changed
Input schema / properties / topic / descriptionPrevious value: -"Documentation topic: 'overview', 'full', 'authentication', 'credits', 'pricing' (per-endpoint costs), 'errors', 'idempotency', 'pagination', 'caching', 'response-schema', 'limits', 'monitors', 'discovery', or a platform slug (e.g., 'tiktok', or 'web' for the scraping/browser surface)."New value: +"Documentation topic: 'overview', 'full', 'authentication', 'credits', 'pricing' (per-endpoint costs), 'errors', 'idempotency', 'pagination', 'caching', 'hydration' (opt-in `include=` row joins), 'response-schema', 'limits', 'monitors', 'discovery', or a platform slug (e.g., 'tiktok', or 'web' for the scraping/browser surface)."
- Changed
socialcrawl_list_endpoints1 field changed- added
Input schema / properties / hydratingAdded value: +{ + "description": "Only show endpoints that can fill their own rows in the same call via an `include=` row join (e.g. a search page that can carry engagement counts). Use it to find the one call that answers a question instead of a page plus one lookup per row.", + "type": "boolean" +}
- Changed
socialcrawl_pricing4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'overview' (default): the tier ladder, every free endpoint, every flat override, every metered band with its rule, cache TTLs, and the refund matrix. 'endpoint': one endpoint's exact price, metered rule, price-driving params, and worst case (needs platform + resource). 'platform': the cost table for one platform (needs platform). 'list': rank/filter endpoints by price across platforms."New value: +"'overview' (default): the tier ladder, every free endpoint, every flat override, every metered band with its rule, cache TTLs, and the refund matrix. 'endpoint': one endpoint's exact price, metered rule, price-driving params, row joins, and worst case (needs platform + resource) — add `include`/`rows` for an exact quote instead of a band. 'platform': the cost table for one platform (needs platform). 'list': rank/filter endpoints by price across platforms. 'hydration': every `include=` row join in the API, what each one fills, what it costs per row and what a fully-joined page holds (optionally scoped with `platform`)." - changed
Input schema / properties / action / enumPrevious value: -[ - "overview", - "endpoint", - "platform", - "list" -]New value: +[ + "overview", + "endpoint", + "platform", + "list", + "hydration" +] - added
Input schema / properties / includeAdded value: +{ + "description": "endpoint: the `include=` row-join tokens you intend to send (comma-separated, e.g. 'engagement' or 'engagement,channel'). Turns the quoted band into the exact hold for that call, itemised per join. Costs nothing to ask.", + "type": "string" +} - added
Input schema / properties / rowsAdded value: +{ + "description": "endpoint: the row cap you intend to send alongside `include` (the endpoint's own `limit`). A row join holds per row, so capping the rows caps the credits — quote it before you spend it.", + "minimum": 1, + "type": "integer" +}
10 tool updates
- First observed
socialcrawl_check_balance - First observed
socialcrawl_cohorts - First observed
socialcrawl_discover - First observed
socialcrawl_get_docs - First observed
socialcrawl_list_endpoints - First observed
socialcrawl_list_platforms - First observed
socialcrawl_monitors - First observed
socialcrawl_pricing - First observed
socialcrawl_request - First observed
socialcrawl_web
Related MCP Connectors
Search, extract, crawl, map, research, scrape 16 platforms, browser automation, proxy — one API key.
One API for public web data across social, directories and real estate, as clean JSON.
Hundreds of scraping & data APIs through one key. USD pay-per-request, normalized schemas, failover.
Give your AI agent live public data from 70+ platforms: profiles, posts, comments, transcripts, products, prices, reviews, listings, jobs, ads and search results from TikTok, Instagram, YouTube, LinkedIn, X, Reddit, Amazon, Google and more, plus website crawls and live browser sessions. One key, one response format, 1,000 free credits every month.
Related MCP Servers
- -licenseNot gradedqualityCmaintenanceTwitter/X, YouTube, Reddit, Google and more - 100+ endpoints in total. No account, no OAuth, no subscription. Pay per call in USDC, or top up once and spend one balance across all of them.1-
- AlicenseAqualityNot gradedmaintenanceUnified API for Government Data and Web Scraping100-

SocialCrawlofficial
AlicenseAqualityDmaintenanceSocialCrawl provides the "best" quality public web data on the internet. Access 65+ real-time social media, e-commerce and public web data from a single API with a single schema.5382 npm23MIT
Crawlora MCPofficial
AlicenseCqualityAmaintenanceHosted MCP server for 3,093 structured public web-data tools across 420 platform groups, returning clean JSON for search, maps, commerce, social, and finance.6500536 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
socialcrawl_check_balanceCheck SocialCrawl Credit BalanceARead-onlyIdempotent Inspect
Check the credit balance and the credit ledger for the authenticated SocialCrawl account. Default view calls GET /v1/credits/balance (balance + recent-deduction summary);
view: "transactions"calls GET /v1/credits/transactions for dispute-grade itemised receipts — every deduction and refund with its amount, balance_after, endpoint, and request_id, which is how you confirm what a metered endpoint actually charged after its upfront hold was refunded down. Both cost 0 credits. Requires a valid SOCIALCRAWL_API_KEY.TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses meaningful behavior: the exact GET endpoints, that "both cost 0 credits," that a valid SOCIALCRAWL_API_KEY is required, and the ledger semantics including upfront holds being refunded down. This goes well beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. It front-loads the core purpose, then delivers endpoint details, use-case guidance, cost, and authentication requirements in a compact, readable structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description covers what each view returns, when to use each, cost, authentication, and the purpose of the ledger. The schema covers pagination details via cursor and limit, so nothing essential for calling the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already well documented. The description adds value by explaining the purpose of the view switch and how request_id relates to confirming actual metered charges, but it does not add additional semantics for limit or cursor beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific action: "Check the credit balance and the credit ledger for the authenticated SocialCrawl account." It additionally names the two underlying endpoints, making the tool's scope unmistakable and easily distinguishable from siblings like socialcrawl_request or socialcrawl_pricing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains when to use the balance view versus the transactions view, especially for "dispute-grade itemised receipts" and confirming what a metered endpoint actually charged. It does not explicitly contrast this tool with sibling tools, but the siblings are functionally distinct enough that the internal view guidance is the main decision point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.