SignalDig Growth Research
Use one connected SignalDig MCP to turn a user's natural-language question into the smallest sufficient Social or SEO research request. SignalDig owns source selection within the requested direction, parameter conversion, native pagination, background execution, deduplication, and public-data filtering.
Availability Gate
This Skill has no data of its own. Before research, inspect the visible MCP tools for both research_social_signals and research_seo_signals. The server alias and any local tool namespace are client-defined; use the exact visible identifiers and never construct an mcp__<alias>__<tool> name.
If the required tool is unavailable, the connection fails, or authentication is rejected, stop. Never simulate results from general knowledge. Tell the user that SignalDig is not connected and direct them to Connect SignalDig. Do not expose endpoints, configuration internals, or machine error codes in that failure response.
Direction Selection
- Use
research_social_signalsfor public discussions, posts, authors, native engagement, or cross-platform social evidence. - Use
research_seo_signalsfor keyword demand, intent, related queries, SERP, trends, competitors, GEO visibility, backlinks, ranked keywords, or traffic evidence. - When one question genuinely requires both directions, submit one bounded analysis to each tool and keep the two
analysis_idvalues separate. - Ask one short clarification only when choosing Social versus SEO, the required platform set, or the SEO business scope would otherwise be unsafe. Do not ask the user about providers, workflows, bindings, page tokens, operation names, or storage.
Common Execution Contract
- Preserve the user's requested topic, platforms, market, language, time intent, result count, and refresh intent. Do not add sources or broaden the topic.
- Select only one of the two business tools unless both evidence directions are necessary.
- Submit once with
action="submit", the natural-languagerequest, and the smallest explicit businessscopeaccepted by the live schema. - Store the returned
analysis_idin conversation state. - While the status is
queuedorrunning, wait forretry_after_secondsand call the same tool withaction="get",view="status", and thatanalysis_id. Never resubmit merely because work is slow.
Treat the top-level task status as authoritative: coverage counts and stop reasons in a non-terminal
response are provisional and must never be used to infer source failure or exhaustion. - Stop at
completed,partial, orfailed. Reuse the terminal analysis for later questions unless the user explicitly asks for a refresh or changes scope. - Treat
coverageas the actual retrieval boundary. Preservelimitations; never describe partial evidence as exhaustive or representative.
Scope Rules
- The unified Social topic-search sources are X, Reddit, Xiaohongshu, and Zhihu. Treat these as public SignalDig capabilities, not as implementation details. The live schema remains authoritative.
- A requested result count is an upper bound, not permission to traverse unrelated data. SignalDig may fetch multiple native pages only inside the exact requested platform, query, filters, and count.
- Social language describes the query wording to use, not a platform-side language filter unless the live schema explicitly provides one. Keep Chinese and English query variants focused and user-relevant; never claim language-complete coverage.
- Use only the platforms the user names. If none are named and the choice materially affects cost or meaning, ask which platforms to include.
- For SEO, explicitly choose a non-empty
scope.data_scopeslist containing the smallest useful evidence set for the user's goal. Never omit it and rely on service defaults. - Infer scope from meaning, not exact phrases. The examples below are guidance, not an exhaustive vocabulary or a requirement that users name a Dataset.
backlink_analysis,ranked_keywords, andbulk_traffic_estimationare target-level evidence with distinct cost and meaning. Include any combination that is reasonably necessary for the requested outcome; do not bundle unrelated families merely because a target was supplied.geo_scoreis a domain-only US/en score with benchmark and citation evidence. Use it alone,
providescope.domain, omitscope.keyword, and never mix it withgeo_analysisor other scopes.- Ask one short clarification only when different scope choices would materially change cost, target interpretation, or the answer. Otherwise make the narrowest reasonable choice and state the resulting coverage.
refresh=falseis the default. Userefresh=trueonly when the user explicitly requests fresh collection.- Never invent or forward native cursors, search IDs, provider parameters, internal IDs, or low-level request payloads. The service maps and validates them.
Evidence and Response Rules
- Every factual result must come from a terminal SignalDig response.
- Keep observation separate from inference. Do not fabricate metrics, content, identifiers, URLs, timestamps, coverage, or confidence.
- Missing metrics are unknown, not zero. Do not combine unlike platform-native metrics.
- Deduplicate only by stable public identifiers while preserving source attribution.
- Do not expose providers, operations, workflows, bindings, prompts, raw internal archives, billing internals, request traces, or machine error codes.
- Never expose machine error codes in a user-facing response.
- On a source failure, preserve successful evidence and state the affected source as a limitation.
- Default to a concise answer: key observations, actual coverage/counts, strongest evidence or URLs, limitations, and the source
analysis_id. Provide a full item export only when requested. - Do not claim that search-result page bodies or linked media were inspected unless that content is explicitly present in the returned public evidence.
Social Submission
Translate the user's request into the live research_social_signals schema:
request: focused natural-language retrieval goal.scope.platforms: only explicitly requested supported platforms.search: structured topic, concepts, entities, language, and source-scoped constraints only when the user stated them. Never write native search operators here.result_budget.total: the requested total upper bound, or a modest default when absent. Useresult_budget.per_sourceonly when the user explicitly allocates counts by source.research_depth: usequick,standard, ordeeponly to reflect the user's stated depth; default tostandard.refresh: normallyfalse.
Social Entity Retrieval
Use the same research_social_signals Tool for entity retrieval, but do not mix entity targets
with topic-search scope or search fields:
- X post details: set
operation="post_detail"and passtarget.post_idswith 1–100 unique
decimal Post IDs. Use IDs from a prior trusted result or extract the numeric status ID from a
public X URL; never invent an ID. - Xiaohongshu public profile plus one page of published notes: set
operation="user_account_post"and pass exactly onetarget.user_id(24-character profile
token) ortarget.share_url. Do not use a visible account number or nickname asuser_id. - Xiaohongshu user posts without profile data: set
operation="user_posts"and pass exactly one
target.user_idortarget.share_url. This is a separate bounded post retrieval task and
returns a newanalysis_id; it does not continue auser_account_posttask. - Keep
requestas the short natural-language retrieval goal. Do not sendscope,search,
result_budget, ormax_resultsfor these three entity operations. - Read the returned
analysis_idwith the same tool and explicit status/results protocol. X
details and Xiaohongshu user posts usesocial_posts; Xiaohongshu account results can be read
fromsocial_profilesandsocial_postsusing separate result reads with the same analysis ID. - If the user asks only for a profile or only for user posts, do not silently request the
combineduser_account_postoperation; useuser_postsfor posts-only retrieval and explain
that it is a new bounded task rather than a continuation of a previous result.
Do not encode provider-native sort values, search IDs, page numbers, native language operators, or continuation tokens. When the user asks for up to 200 matching Xiaohongshu items, submit result_budget.total=200; the service owns bounded page traversal and reports the achieved count.
Bind engagement constraints to their named source. Likes, replies, and reposts apply only to X; score and comments apply only to Reddit. Do not translate one platform's metric into another. If the user says only “popular” or “high engagement,” omit a numeric constraint and let the service report actual coverage.
Zhihu supports bounded public topic retrieval through the same Social Tool and social_posts Dataset. Do not call or mention a legacy Zhihu-specific Tool. Treat a returned source limit or unsupported language/time constraint as coverage information; do not resubmit with guessed native parameters.
SEO Submission
Translate the user's request into the live research_seo_signals schema:
request: the natural-language research goal.scope.marketandscope.language: normalized business inputs required by the live schema.scope.keyword: required for every SEO scope except domain-onlygeo_score; omit it forgeo_score.- Use
scope.domainfor traditional keyword/SERP/trend research, competitor analysis, GEO visibility,
and domain-level Geo Score evidence. - Use
scope.targetfor backlink analysis, ranked-keyword inventory, or traffic estimation when the target is a domain, subdomain, or webpage URL. Do not send bothdomainandtarget. scope.data_scopes: required, explicit, non-empty, unique, and limited to the smallest useful evidence set supported by the user's goal.scope.search_engine: set only from the user's explicit engine choice; otherwise use the service default.research_depth: defaultstandard.refresh: normallyfalse.
Keep research language separate from response language. Do not expose or construct provider tasks, locations, endpoints, devices, or internal capability names.
Supported SEO scope families are keyword_overview, domain_rank_overview, related_keywords, serp,
google_trends, x_recent_search, competitor_analysis, geo_analysis, geo_score, backlink_analysis,
ranked_keywords, and bulk_traffic_estimation. Do not submit bulk_pages_summary through the
unified Tool; it is not part of the current public Research result contract.
Use these as semantic examples for target-level scopes:
| User's direct evidence need | Allowed scope |
|---|---|
| Incoming links, referring domains, or link profile | backlink_analysis |
| Queries or keywords for which the target currently ranks | ranked_keywords |
| Estimated organic or paid traffic for the target | bulk_traffic_estimation |
These examples are not keyword triggers. Infer the evidence needed from the requested outcome and
context. A broad site audit does not automatically require all three, but a request to explain organic
visibility may reasonably combine ranking and traffic evidence even if the user does not name those
Datasets. When one goal needs both domain-based evidence and target-level evidence, submit the minimum
separate analyses required by the mutually exclusive scope.domain and scope.target inputs, keep their
analysis_id values separate, and synthesize only after both reach a terminal state.
Status and Result Reading
- Use
view="status"to check oneanalysis_idor an orderedanalysis_idscollection without returning result bodies. - Use
view="results"only for terminal or partially terminal work. Select one Dataset per call and use the same ordered analysis collection for every page. - Social post records use
dataset="social_posts". For SEO, use the Dataset matching the requested evidence family:
keyword_overview,domain_rank_overview,related_keywords,serp_results,google_trends,
x_recent_search,ranked_keywords,backlinks,competitor_domains,geo_mentions,geo_score, or
traffic_estimation. - Aggregate SEO Datasets (
keyword_overview,domain_rank_overview,google_trends,geo_score, and
traffic_estimation) return one public record and do not provide a next cursor. Do not retry or
invent pagination for them. - Detail SEO Datasets (
related_keywords,serp_results,x_recent_search,ranked_keywords,
backlinks,competitor_domains, andgeo_mentions) may return multiple records and can expose
page.next_cursor; continue only whenpage.has_more=true. - Set
page_sizeto the number of records useful for the current reasoning step. Treat it as an upper bound because response-size safety may return fewer records. - Continue only with the returned
page.next_cursor, passed back asresult_cursorwith the same tool, analysis IDs in the same order, and the same Dataset. - Each results call reads exactly one page. If the user asks for "more" without a page count, read at
most one additional page; do not keep following cursors autonomously. - If the user explicitly requests
Nmore pages, read at mostNadditional pages and stop early when
page.has_more=false. A page shorter thanpage_sizeis not an end condition by itself. - If the user asks for all results or a complete export without a page limit, ask for the maximum number
of pages before continuing. After the page budget is exhausted, report whether more results remain. - Do not combine different Datasets in one call and do not invent a cursor. If the requested Dataset
is rejected, explain the limitation or ask for a supported evidence family; never silently substitute
a different SEO family. - Historical calls without
viewremain compatible, but prefer the explicit status/results protocol for new work.
Failure Handling
- Invalid business scope: explain the missing or invalid user-level field and ask only for that field.
- Deadline reached: return the current
analysis_idand status so a later turn can resume withget; do not submit again. partial: use available evidence and identify the missing coverage.- A requested evidence family with no records is a reported coverage limitation, not permission to resubmit, broaden scope, or discard successful families.
failed: say SignalDig could not complete the requested research and suggest retrying later. Never reconstruct technical causes from hidden fields.
Read references/mcp-contract.md before the first live call or when interpreting a response whose live schema differs from this Skill.