AfterLaunch: the agentic growth marketing engine
Qué hace este MCP
Runs growth-marketing workflows covering SEO, AI-search visibility, competitor analysis, content planning, distribution channels, experiments, and performance measurement.
Herramientas
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'required': ['provider'], 'properties': {'provider': {'type': 'string', 'description': 'Which connector to disconnect: ga4, gsc, gbp, linkedin or reddit.'}}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'How many entries to return (1 to 200, default 50).'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1}, 'idea_id': {'type': 'string', 'format': 'uuid'}, 'experiment_id': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The page slug, from list_kb_pages.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'loop_type': {'type': 'string', 'description': 'Optional loop type, e.g. daily_brief or linkedin_post.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed or get_standup.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['output_id'], 'properties': {'output_id': {'type': 'string', 'description': 'The output id (uuid).'}}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'properties': {'include_pages': {'type': 'boolean', 'description': 'Include the per-page audit detail. Default false: the grouped issues only.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'required': ['poll_token'], 'properties': {'poll_token': {'type': 'string', 'description': 'The poll_token start_connection returned.'}}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 200, 'minLength': 10, 'description': 'The rule as approved, in one sentence.'}}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'required': ['move_id'], 'properties': {'move_id': {'type': 'string', 'description': 'Move id (uuid), from list_feed.'}}, 'additionalProperties': False}
Esquema de entrada
{'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}
Esquema de entrada
{'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}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Cambios recientes en herramientas
Servidores MCP similares
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…