AfterLaunch: the agentic growth marketing engine
この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…