Screenrove
What this MCP does
Provides captured product screens, screenshots, measured design guides, UI comparisons, and implementation handoff prompts.
Tools
Input schema
{'type': 'object', 'required': ['referenceId'], 'properties': {'goal': {'type': 'string', 'description': 'What you want to build. Goes at the top of the prompt.'}, 'stack': {'type': 'string', 'description': 'Preferred stack, e.g. Next.js and Tailwind.'}, 'screens': {'type': 'string', 'description': 'Comma-separated screen ids to keep. Omit to include every screen in the reference.'}, 'referenceId': {'type': 'string', 'description': 'e.g. linear-onboarding, stripe-collection or vercel-marketing-pricing.'}, 'includeDesign': {'type': 'boolean', 'default': True, 'description': "Include the observed design guide. Set false to use your project's own design system."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'prompt': {'type': 'string', 'description': 'Markdown prompt to follow or paste into an agent.'}, 'manifest': {'type': 'object', 'description': 'Versioned reference manifest'}}}
Input schema
{'type': 'object', 'required': ['description'], 'properties': {'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'Only compare with this kind of capture.'}, 'limit': {'type': 'number', 'default': 4, 'description': 'How many references to return, 1 to 5.'}, 'product': {'type': 'string', 'description': 'Only compare with this product id.'}, 'flowType': {'enum': ['signup-onboarding', 'search', 'checkout', 'booking', 'marketplace'], 'type': 'string', 'description': 'What the flow does, so step counts are only compared with flows of the same kind. Inferred from screenType when omitted.'}, 'sections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Page sections top to bottom, e.g. ["Hero", "Plan cards", "FAQ"].'}, 'flowSteps': {'type': 'array', 'items': {'type': 'string'}, 'description': 'For a multi-screen flow, each step\'s title in order, e.g. ["Sign up", "Verify email", "Create workspace"].'}, 'planCount': {'type': 'number', 'description': 'For pricing screens, how many plans are shown.'}, 'screenType': {'enum': ['landing', 'pricing', 'feature-page', 'sign-up', 'sign-in', 'verification', 'onboarding-step', 'plan-picker', 'empty-state', 'dashboard', 'list', 'detail', 'create-form', 'search', 'picker', 'booking', 'checkout', 'marketplace', 'settings', 'docs', 'menu', 'lesson'], 'type': 'string', 'description': 'What kind of screen it is.'}, 'description': {'type': 'string', 'description': 'One or two sentences on what the screen is for and how it is laid out, e.g. "Pricing page with three plan cards, a monthly/yearly toggle and a feature table".'}, 'primaryAction': {'type': 'string', 'description': 'The main button or action, e.g. "Start free trial".'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'next': {'type': 'string'}, 'report': {'type': 'string', 'description': 'Markdown summary of the comparison.'}, 'references': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'why': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'facts': {'type': 'array', 'items': {'type': 'string'}}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string'}, 'screenType': {'type': 'string'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}}}}
Input schema
{'type': 'object', 'required': ['screenA'], 'properties': {'focus': {'enum': ['layout', 'sections', 'actions', 'dimensions', 'typography', 'all'], 'type': 'string', 'default': 'all', 'description': 'What aspects to emphasize in the comparison.'}, 'screenA': {'type': 'string', 'description': 'First screen id to compare, e.g. linear-marketing-pricing.'}, 'screenB': {'type': 'string', 'description': 'Second screen id to compare. If omitted, provide targetDescription instead.'}, 'targetDescription': {'type': 'string', 'description': 'Instead of screenB, describe what you\'re building to see how screenA matches, e.g. "Pricing page with 3 tiers and a feature comparison table".'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'report': {'type': 'string', 'description': 'Markdown summary of the comparison between the two screens.'}, 'screenA': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'title': {'type': 'string'}, 'width': {'type': 'integer'}, 'height': {'type': 'integer'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string'}, 'screenType': {'type': 'string'}, 'actionCount': {'type': 'integer'}, 'productName': {'type': 'string'}, 'sectionCount': {'type': 'integer'}}, 'description': 'Details about the first screen.'}, 'screenB': {'type': 'object', 'nullable': True, 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'title': {'type': 'string'}, 'width': {'type': 'integer'}, 'height': {'type': 'integer'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string'}, 'screenType': {'type': 'string'}, 'actionCount': {'type': 'integer'}, 'productName': {'type': 'string'}, 'sectionCount': {'type': 'integer'}}, 'description': 'Details about the second screen (null if comparing against targetDescription).'}, 'differences': {'type': 'array', 'items': {'type': 'string'}, 'description': 'How the two screens differ.'}, 'observations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Design observations and takeaways from the comparison.'}, 'similarities': {'type': 'array', 'items': {'type': 'string'}, 'description': 'What the two screens have in common.'}, 'targetDescription': {'type': 'string', 'description': 'The target description if comparing against text instead of screenB.'}}}
Input schema
{'type': 'object', 'required': ['productId'], 'properties': {'context': {'enum': ['marketing', 'product'], 'type': 'string', 'description': 'Which surface to return. Omit for both.'}, 'productId': {'type': 'string', 'description': 'Product id from listProducts, e.g. linear, stripe or airbnb.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'font': {'type': 'string'}, 'product': {'type': 'string'}, 'summary': {'type': 'string'}, 'contexts': {'type': 'object', 'additionalProperties': {'type': 'object', 'properties': {'type': {'type': 'array', 'items': {'type': 'object'}}, 'theme': {'type': 'string'}, 'layout': {'type': 'array', 'items': {'type': 'string'}}, 'palette': {'type': 'array', 'items': {'type': 'object'}}, 'components': {'type': 'array', 'items': {'type': 'string'}}}}}}}
Input schema
{'type': 'object', 'required': ['productId'], 'properties': {'productId': {'type': 'string', 'description': 'Product id from listProducts, e.g. linear, stripe or airbnb.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'steps': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'branch': {'type': 'boolean', 'description': 'True if this step is an alternate path'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string'}, 'transitions': {'type': 'array', 'items': {'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'Where this action leads.'}, 'action': {'type': 'string', 'description': 'The button or link text.'}}}}}}}, 'captured': {'type': 'string', 'format': 'date'}, 'flowType': {'enum': ['signup-onboarding', 'search', 'checkout', 'booking', 'marketplace'], 'type': 'string'}, 'flowTitle': {'type': 'string'}, 'handoffId': {'type': 'string', 'description': 'Use with buildHandoff to get the full prompt.'}, 'productId': {'type': 'string'}, 'productName': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['productId'], 'properties': {'productId': {'type': 'string', 'description': 'Product id from listProducts, e.g. linear, stripe or airbnb.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'counts': {'type': 'object', 'properties': {'flow': {'type': 'integer'}, 'product': {'type': 'integer'}, 'marketing': {'type': 'integer'}}}, 'source': {'type': 'string'}, 'screens': {'type': 'object', 'properties': {'flow': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string', 'description': 'Screen-sized preview (the top of long pages). Present on pick options.'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}}, 'product': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string', 'description': 'Screen-sized preview (the top of long pages). Present on pick options.'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}}, 'marketing': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string', 'description': 'Screen-sized preview (the top of long pages). Present on pick options.'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}}}}, 'captured': {'type': 'string', 'format': 'date'}, 'coverage': {'type': 'string'}, 'handoffs': {'type': 'array', 'items': {'type': 'string'}}, 'flowTitle': {'type': 'string'}, 'captureNote': {'type': 'string'}, 'description': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['screenId'], 'properties': {'screenId': {'type': 'string', 'description': 'Screen id from searchScreens or getProduct, e.g. linear-signup.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'width': {'type': 'integer'}, 'branch': {'type': 'boolean'}, 'height': {'type': 'integer'}, 'source': {'type': 'string'}, 'actions': {'type': 'array', 'items': {'type': 'object', 'properties': {'to': {'type': 'string'}, 'label': {'type': 'string'}, 'region': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}}, 'description': 'Hotspot position as percentages of the image.'}}}}, 'product': {'type': 'string'}, 'captured': {'type': 'string', 'format': 'date'}, 'imageUrl': {'type': 'string'}, 'sections': {'type': 'array', 'items': {'type': 'object', 'properties': {'y': {'type': 'integer'}, 'title': {'type': 'string'}}}}, 'previewUrl': {'type': 'string'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}
Input schema
{'type': 'object', 'required': ['screenId'], 'properties': {'size': {'enum': ['preview', 'full'], 'type': 'string', 'default': 'preview', 'description': 'preview (default) keeps images small enough to view; full returns the original capture.'}, 'screenId': {'type': 'string', 'description': 'Screen id from searchScreens or getProduct, e.g. linear-signup.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': [], 'properties': {'flowType': {'enum': ['signup-onboarding', 'search', 'checkout', 'booking', 'marketplace'], 'type': 'string', 'description': 'Only return flows of this type.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'flows': {'type': 'array', 'items': {'type': 'object', 'properties': {'flowType': {'enum': ['signup-onboarding', 'search', 'checkout', 'booking', 'marketplace'], 'type': 'string', 'description': 'What the flow accomplishes.'}, 'flowTitle': {'type': 'string', 'description': 'Human-readable title for the flow'}, 'handoffId': {'type': 'string', 'description': 'Use with buildHandoff'}, 'productId': {'type': 'string'}, 'stepCount': {'type': 'integer', 'description': 'Total steps including branches.'}, 'branchCount': {'type': 'integer', 'description': 'Steps that are alternate branches (not the main path).'}, 'productName': {'type': 'string'}}}}, 'total': {'type': 'integer'}}}
Input schema
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'products': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'counts': {'type': 'object', 'properties': {'flow': {'type': 'integer'}, 'product': {'type': 'integer'}, 'marketing': {'type': 'integer'}}}, 'source': {'type': 'string'}, 'captured': {'type': 'string', 'format': 'date'}, 'description': {'type': 'string'}}}}}}
Input schema
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'description': 'Search words, e.g. "pricing page", "onboarding", "empty state". The best matches become the options.'}, 'goal': {'type': 'string', 'description': 'What the user is building, shown on the page and used in the build prompt, e.g. "NSDR premium upgrade page".'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'Only search this kind of screen.'}, 'count': {'type': 'number', 'default': 3, 'description': 'How many options to show when searching, 2 to 6.'}, 'stack': {'type': 'string', 'description': 'Preferred stack for the build prompt.'}, 'product': {'type': 'string', 'description': 'Only search this product id.'}, 'screens': {'type': 'string', 'description': 'Comma-separated screen ids to show instead of searching, e.g. from an earlier searchScreens.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Open this for the user.'}, 'next': {'type': 'string', 'description': 'What to do next.'}, 'pickId': {'type': 'string'}, 'status': {'enum': ['pending'], 'type': 'string'}, 'options': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string', 'description': 'Screen-sized preview (the top of long pages). Present on pick options.'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}}, 'canvasUrl': {'type': 'string', 'description': 'Experimental pan-and-zoom canvas view of the same pick.'}}}
Input schema
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'description': 'Keywords to match, e.g. "pricing page", "empty state", "onboarding". Omit to list everything that matches the filters.'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'Only return this kind of screen.'}, 'limit': {'type': 'number', 'default': 20, 'description': 'Maximum results, 1 to 50.'}, 'product': {'type': 'string', 'description': 'Only return screens from this product id, e.g. linear, stripe, airbnb.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'total': {'type': 'integer'}, 'screens': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'product': {'type': 'string'}, 'imageUrl': {'type': 'string'}, 'previewUrl': {'type': 'string', 'description': 'Screen-sized preview (the top of long pages). Present on pick options.'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}}}}
Input schema
{'type': 'object', 'required': ['pickId'], 'properties': {'wait': {'type': 'number', 'default': 45, 'description': 'Seconds to wait for a choice, 0 to 50.'}, 'pickId': {'type': 'string', 'description': 'The pickId returned by pickReference.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'choice': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['flow', 'marketing', 'product'], 'type': 'string', 'description': 'flow is an onboarding step, marketing a public web page, product an in-app screen.'}, 'notes': {'type': 'string'}, 'title': {'type': 'string'}, 'width': {'type': 'integer'}, 'branch': {'type': 'boolean'}, 'height': {'type': 'integer'}, 'source': {'type': 'string'}, 'actions': {'type': 'array', 'items': {'type': 'object', 'properties': {'to': {'type': 'string'}, 'label': {'type': 'string'}, 'region': {'type': 'object', 'properties': {'x': {'type': 'number'}, 'y': {'type': 'number'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}}, 'description': 'Hotspot position as percentages of the image.'}}}}, 'product': {'type': 'string'}, 'captured': {'type': 'string', 'format': 'date'}, 'imageUrl': {'type': 'string'}, 'sections': {'type': 'array', 'items': {'type': 'object', 'properties': {'y': {'type': 'integer'}, 'title': {'type': 'string'}}}}, 'previewUrl': {'type': 'string'}, 'productName': {'type': 'string', 'description': 'Present on pick options.'}}}, 'pickId': {'type': 'string'}, 'prompt': {'type': 'string', 'description': 'Build prompt for the chosen reference.'}, 'status': {'enum': ['pending', 'chosen', 'dismissed'], 'type': 'string'}, 'message': {'type': 'string'}}}
Recent tool changes
Similar MCP servers
GripForge
Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.
spriteship
Generates and manages 2D game characters, assets, animations, tilesets, UI packs, maps, and engine-ready exports for multiple gam…
Blixtworks
Offers pay-per-call utilities for text, image processing and analysis, data conversion, validation, web inspection, cryptography,…
Compose Preview Catalogs
Browses, renders, compares, audits, and edits Jetpack Compose preview catalogs and associated UI designs.
arch-tools-mcp
Provides general-purpose agent APIs for browser automation, web and PDF extraction, data conversion, email operations, fact check…
kernelcad
Authors, evaluates, reviews, simulates, edits, and exports parametric CAD assemblies and geometry from editable TypeScript-based …
floot
Creates, edits, previews, databases, and publishes full-stack web and mobile applications with hosted resources and deployment wo…
Raven
Supports coding agents with design audits, design-system guidance, and a configurable visual preference profile.