이 MCP로 할 수 있는 일
Runs growth-marketing workflows covering SEO, AI-search visibility, competitor analysis, content planning, distribution channels, experiments, and performance measurement.
도구
입력 스키마
{'type': 'object', 'required': ['move_id', 'target'], 'properties': {'note': {'type': ['string', 'null'], 'maxLength': 2000}, 'target': {'enum': ['agent_pull', 'share', 'open', 'claude_cloud', 'cursor', 'codex'], 'type': 'string'}, 'move_id': {'type': 'string', 'description': 'Move id (uuid).'}, 'operation': {'enum': ['accept', 'retry'], 'type': 'string', 'description': 'Defaults to accept. Retry requires expected_attempt_id; use null only with the exact legacy state and updated_at.'}, 'expected_attempt_id': {'type': ['string', 'null'], 'description': 'Required for retry. Pass the exact managed attempt, or null for a legacy job.'}, 'expected_legacy_state': {'type': ['string', 'null'], 'description': 'get_move: prepared_result.legacy_state ?? state.'}, 'expected_legacy_updated_at': {'type': ['string', 'null']}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['pack_id'], 'properties': {'pack_id': {'enum': ['small', 'medium', 'large'], 'type': 'string', 'description': 'The refill pack size: small, medium or large. The founder sees the price on the checkout page.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['provider'], 'properties': {'provider': {'type': 'string', 'description': 'Which connector to disconnect: ga4, gsc, gbp, linkedin or reddit.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['prompt_id', 'prompt_text'], 'properties': {'reason': {'enum': ['not_relevant', 'wrong_voice', 'wrong_angle', 'wrong_timing', 'low_quality', 'duplicate', 'other'], 'type': 'string', 'description': 'Why it is being set aside. Closed vocabulary; unknown keys are ignored by the learning loop.'}, 'prompt_id': {'type': 'string', 'description': 'The tracked question id, from get_visibility.'}, 'prompt_text': {'type': 'string', 'description': 'The tracked question text, from get_visibility. Both fields are required: together they identify the gap.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'How many entries to return (1 to 200, default 50).'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1}, 'idea_id': {'type': 'string', 'format': 'uuid'}, 'experiment_id': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The page slug, from list_kb_pages.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'loop_type': {'type': 'string', 'description': 'Optional loop type, e.g. daily_brief or linkedin_post.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed or get_standup.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['output_id'], 'properties': {'output_id': {'type': 'string', 'description': 'The output id (uuid).'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'window_days': {'type': 'integer', 'maximum': 90, 'minimum': 7, 'description': 'How many days the scoreboard covers (7 to 90, default 14). Out-of-range values are clamped, never rejected.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'include_pages': {'type': 'boolean', 'description': 'Include the per-page audit detail. Default false: the grouped issues only.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'prompt_id': {'type': 'string', 'description': 'Drill into one tracked question by its id (from the prompts list) for the engine answer text and citations.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'register': {'enum': ['brand', 'personal', 'imported'], 'type': 'string', 'description': "Which voice to read. Omit for the current one. Use 'personal' for anything the founder posts in their own name."}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {'since': {'type': 'string', 'description': 'ISO-8601. Returns only moves first seen after it. Pass the newest first_seen_at you already hold so a move is never returned twice.'}, 'verbosity': {'enum': ['compact', 'full'], 'type': 'string', 'description': "Default 'compact': no material bodies, so a long board stays cheap to read; has_draft and draft_kind say whether each move carries an inspectable artefact, an assignment, or nothing readable. Use 'full' only when you need every body at once."}, 'include_resolved': {'type': 'boolean', 'description': 'Include resolved moves (shipped, skipped, archived, expired) as well as the live ones. Default false.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['job_id', 'attempt_id'], 'properties': {'job_id': {'type': 'string', 'description': 'Job id (uuid), from list_queue.'}, 'attempt_id': {'type': ['string', 'null'], 'description': 'Exact attempt id from list_queue; null only for a stored legacy job.'}, 'session_url': {'type': 'string', 'description': 'Your own session URL, if you have one, so the founder can open where the work is happening.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['poll_token'], 'properties': {'poll_token': {'type': 'string', 'description': 'The poll_token start_connection returned.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['title', 'why', 'kind', 'target'], 'properties': {'why': {'type': 'string', 'maxLength': 600, 'minLength': 20, 'description': 'Why it is worth their time, in one or two sentences.'}, 'kind': {'enum': ['community_reply', 'community_answer'], 'type': 'string', 'description': 'community_answer for a question thread; otherwise community_reply.'}, 'draft': {'type': 'string', 'maxLength': 8000, 'description': 'Optional: your drafted reply.'}, 'title': {'type': 'string', 'maxLength': 140, 'minLength': 10, 'description': 'The thread, as the founder would name it.'}, 'target': {'type': 'string', 'description': 'The https address of the thread itself.'}, 'sources': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'Optional: up to five https addresses behind the why.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['text', 'trigger', 'number', 'caveat'], 'properties': {'held': {'type': 'boolean', 'description': 'True to record it and block its use.'}, 'text': {'type': 'string', 'maxLength': 300, 'minLength': 10, 'description': 'The claim in one sentence.'}, 'caveat': {'type': 'string', 'maxLength': 500, 'minLength': 10, 'description': 'What it does not prove, against your own interest.'}, 'number': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'The measurement, with its unit and comparison.'}, 'trigger': {'type': 'array', 'items': {'type': 'string', 'maxLength': 60, 'minLength': 2}, 'maxItems': 10, 'minItems': 1, 'description': 'Keywords saying when this claim is relevant.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['operation'], 'properties': {'why': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'text': {'type': 'string', 'maxLength': 20000, 'minLength': 1}, 'title': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'channel': {'enum': ['x'], 'type': 'string'}, 'idea_id': {'type': 'string', 'format': 'uuid'}, 'run_key': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'research': {'type': 'object', 'required': ['outcome', 'summary', 'method', 'limitations', 'sources'], 'properties': {'method': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'outcome': {'enum': ['supported', 'not_supported', 'inconclusive'], 'type': 'string'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'url', 'observed_at'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 2048}, 'title': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'observed_at': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'limitations': {'type': 'string', 'maxLength': 5000, 'minLength': 1}}, 'additionalProperties': False}, 'claim_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid'}, 'maxItems': 20}, 'operation': {'enum': ['idea', 'draft', 'research'], 'type': 'string'}, 'source_url': {'type': 'string', 'format': 'uri', 'maxLength': 2048}, 'action_kind': {'enum': ['social_post'], 'type': 'string'}, 'source_idea': {'type': 'object', 'required': ['title', 'needs_data'], 'properties': {'kind': {'enum': ['opinion', 'educational', 'amplify'], 'type': 'string'}, 'link': {'type': 'string', 'format': 'uri', 'maxLength': 2048}, 'angle': {'type': 'string', 'maxLength': 3000, 'minLength': 1}, 'score': {'type': 'number', 'maximum': 10, 'minimum': 0}, 'title': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'channels': {'type': 'array', 'items': {'enum': ['x', 'linkedin', 'article', 'seo'], 'type': 'string'}, 'maxItems': 4, 'minItems': 1, 'uniqueItems': True}, 'needs_data': {'type': 'boolean'}}, 'additionalProperties': False}, 'adopt_legacy': {'type': 'object', 'required': ['output_id', 'action_kind'], 'properties': {'output_id': {'type': 'string', 'format': 'uuid'}, 'action_kind': {'enum': ['social_post', 'community_reply'], 'type': 'string'}}, 'additionalProperties': False}, 'expected_updated_at': {'type': 'string', 'format': 'date-time'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['insight', 'kind'], 'properties': {'kind': {'enum': ['preference', 'voice', 'fact', 'outcome'], 'type': 'string', 'description': 'preference = a standing choice about how they work. voice = how they write (a rule they approved goes to record_voice_rule). fact = something true about the product. outcome = what a shipped move earned.'}, 'insight': {'type': 'string', 'maxLength': 500, 'minLength': 10, 'description': "The durable insight, as one plain sentence in the founder's own terms."}, 'source_move_id': {'type': 'string', 'description': 'Optional growth move id (uuid), from list_feed, when the insight surfaced while working one.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 200, 'minLength': 10, 'description': 'The rule as approved, in one sentence.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['output_id', 'draft'], 'properties': {'draft': {'type': 'string', 'description': 'The replacement draft body, 1 to 20000 characters.'}, 'output_id': {'type': 'string', 'description': 'Output id (uuid), from list_outputs.'}, 'draft_fence': {'type': 'object', 'required': ['move_id', 'move_state', 'move_updated_at', 'job_id', 'attempt_id', 'job_state', 'job_updated_at', 'candidate_id', 'draft'], 'properties': {'draft': {'type': 'string', 'maxLength': 20000}, 'job_id': {'type': ['string', 'null'], 'format': 'uuid'}, 'move_id': {'type': 'string', 'format': 'uuid'}, 'job_state': {'type': ['string', 'null']}, 'attempt_id': {'type': ['string', 'null'], 'format': 'uuid'}, 'move_state': {'type': 'string'}, 'candidate_id': {'type': 'string', 'format': 'uuid'}, 'job_updated_at': {'type': ['string', 'null'], 'format': 'date-time'}, 'move_updated_at': {'type': 'string', 'format': 'date-time'}}, 'description': 'For a content pilot edit, return draft_fence unchanged from get_move or get_output. Refresh after a conflict.', 'additionalProperties': False}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['scan', 'idempotency_key'], 'properties': {'scan': {'enum': ['ai_visibility'], 'type': 'string', 'description': "The scan to refresh. Only 'ai_visibility' today."}, 'idempotency_key': {'type': 'string', 'description': 'Client-minted key (1-200 chars). Reuse the same key on a retry.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['idempotency_key'], 'properties': {'idempotency_key': {'type': 'string', 'description': 'Client-minted key (1-200 chars). Reuse the same key on a retry.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['job_id', 'attempt_id', 'state'], 'properties': {'state': {'enum': ['running', 'ready_for_review', 'shipped', 'failed'], 'type': 'string'}, 'job_id': {'type': 'string', 'description': 'Job id (uuid), from list_queue.'}, 'asset_url': {'type': 'string', 'description': 'URL of the prepared asset. This does not claim publication.'}, 'attempt_id': {'type': ['string', 'null'], 'description': 'Exact attempt id; null only when list_queue identified a legacy job.'}, 'fail_reason': {'type': 'string', 'maxLength': 500, 'description': "Required with 'failed': what stopped you."}, 'receipt_url': {'type': 'string', 'description': 'A permalink to the proof.'}, 'session_url': {'type': 'string', 'description': 'Your own session URL, if you have one.'}, 'prepared_content': {'type': 'string', 'maxLength': 20000, 'description': 'Prepared result body for ready_for_review.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id', 'operation', 'job_id', 'expected_attempt_id'], 'properties': {'note': {'type': ['string', 'null'], 'maxLength': 2000}, 'job_id': {'type': ['string', 'null']}, 'move_id': {'type': 'string'}, 'asset_url': {'type': ['string', 'null']}, 'operation': {'enum': ['revise', 'withdraw', 'adopt_legacy_result', 'correct_publication'], 'type': 'string', 'description': 'adopt_legacy_result requires a null expected attempt, exact move CAS, exact legacy job CAS when job_id is present, and inspected prepared content or asset URL.'}, 'prepared_content': {'type': ['string', 'null'], 'maxLength': 20000}, 'expected_attempt_id': {'type': ['string', 'null'], 'description': 'Exact managed attempt. Null identifies legacy work and requires exact move CAS plus legacy job CAS when job_id is present.'}, 'expected_move_state': {'enum': ['pending', 'taken_on', 'shipped', 'skipped', 'archived', 'expired', None], 'type': ['string', 'null']}, 'expected_legacy_state': {'type': ['string', 'null'], 'description': 'get_move: prepared_result.legacy_state ?? state.'}, 'expected_move_updated_at': {'type': ['string', 'null']}, 'expected_legacy_updated_at': {'type': ['string', 'null']}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['output_id', 'action'], 'properties': {'action': {'enum': ['ship', 'skip'], 'type': 'string', 'description': "'ship' resolves it as done / posted without publishing; 'skip' dismisses it."}, 'output_id': {'type': 'string', 'description': 'Output id (uuid), from list_outputs.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['axes'], 'properties': {'axes': {'type': 'object', 'description': "Keyed by axis id, each { lean, strength }. lean is 'a' or 'b', the pole this voice sits nearer; strength is the share of that axis's observations that fell on the leaning side, so 0.5 is an even split and 1 is every observation one way.", 'additionalProperties': {'type': 'object', 'required': ['lean', 'strength'], 'properties': {'lean': {'enum': ['a', 'b'], 'type': 'string'}, 'strength': {'type': 'number', 'maximum': 1, 'minimum': 0.5}}, 'additionalProperties': False}}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id', 'completion_kind', 'job_id', 'attempt_id', 'founder_confirmed'], 'properties': {'note': {'type': ['string', 'null'], 'maxLength': 2000}, 'job_id': {'type': ['string', 'null']}, 'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}, 'attempt_id': {'type': ['string', 'null']}, 'planned_url': {'type': ['string', 'null'], 'description': "Future address of a prepared page on the founder's own site."}, 'published_url': {'type': ['string', 'null'], 'description': 'The actual public URL, when the completed task has one. This is distinct from a prepared asset.'}, 'completion_kind': {'enum': ['prepared_result', 'independent_work'], 'type': 'string'}, 'founder_confirmed': {'type': 'boolean', 'const': True}, 'expected_move_state': {'enum': ['pending', 'taken_on', 'shipped', 'skipped', 'archived', 'expired', None], 'type': ['string', 'null'], 'description': 'Required with expected_move_updated_at for independent_work.'}, 'expected_legacy_state': {'type': ['string', 'null'], 'description': 'get_move: prepared_result.legacy_state ?? state.'}, 'expected_move_updated_at': {'type': ['string', 'null'], 'description': 'Required with expected_move_state for independent_work.'}, 'expected_legacy_updated_at': {'type': ['string', 'null']}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}, 'feedback_key': {'enum': ['not_relevant', 'wrong_voice', 'wrong_angle', 'wrong_timing', 'low_quality', 'duplicate', 'other'], 'type': 'string', 'description': 'Why it was dismissed. Closed vocabulary; unknown keys are ignored by the learning loop.'}, 'feedback_note': {'type': 'string', 'maxLength': 500, 'description': 'Optional free-text detail alongside feedback_key.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['provider'], 'properties': {'provider': {'type': 'string', 'description': 'Which connector to connect. Use a provider id from list_connections: ga4, gsc, gbp, linkedin or reddit.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 200, 'minLength': 10, 'description': 'The customer question to track, as a person would ask an AI assistant, e.g. "What is the best invoicing tool for UK freelancers?".'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The tracked question to remove, from list_tracked_prompts. Matched ignoring case and punctuation.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'required': ['move_id', 'draft_content'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}, 'draft_fence': {'type': 'object', 'required': ['move_id', 'move_state', 'move_updated_at', 'job_id', 'attempt_id', 'job_state', 'job_updated_at', 'candidate_id', 'draft'], 'properties': {'draft': {'type': 'string', 'maxLength': 20000}, 'job_id': {'type': ['string', 'null'], 'format': 'uuid'}, 'move_id': {'type': 'string', 'format': 'uuid'}, 'job_state': {'type': ['string', 'null']}, 'attempt_id': {'type': ['string', 'null'], 'format': 'uuid'}, 'move_state': {'type': 'string'}, 'candidate_id': {'type': 'string', 'format': 'uuid'}, 'job_updated_at': {'type': ['string', 'null'], 'format': 'date-time'}, 'move_updated_at': {'type': 'string', 'format': 'date-time'}}, 'description': 'For a content pilot edit, return draft_fence unchanged from get_move or get_output. Refresh after a conflict.', 'additionalProperties': False}, 'draft_content': {'type': 'string', 'description': 'The replacement draft body, 1 to 20000 characters.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
최근 도구 변경
유사한 MCP 서버
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…
VarynForge
Supports SEO research and content planning through niche analysis, competitor and keyword research, opportunity discovery, and wr…
Jargon Translator
Provides corporate-jargon translation, AI brand visibility checks, AI crawler indexing files, and routed research across structur…
particle-pro
Searches and analyzes podcast episodes, transcripts, speakers, companies, topics, clips, rankings, sponsorships, and entity menti…
Niche — Editorial Intelligence
Discovers and ranks emerging stories, proposes editorial angles, generates platform-specific content, renders media, and supports…
BetterPost
Gathers timely stories from news, web, and social sources and generates, transforms, and manages publishable content.
agents
Offers paid agents for brand visibility checks, web data extraction, webpage reading, marketing video production, and deliverable…
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…