SaaSCity
What this MCP does
Audits website launch readiness, researches launch directories and competitors, and submits or monitors product listings in a launch directory.
Tools
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Site URL to scan (the listing URL; the homepage is read as well)'}}}
Output schema
{'type': 'object', 'required': ['found', 'code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'FOUND, BADGE_NOT_FOUND, UNREACHABLE, TIMEOUT, HTTP_ERROR, ...'}, 'found': {'type': 'boolean'}, 'message': {'type': 'string'}, 'badgeSnippet': {'type': 'string', 'description': 'The HTML to embed when not found'}}}
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Homepage URL; the https:// prefix is optional'}}}
Output schema
{'type': 'object', 'required': ['url', 'finalUrl', 'httpStatus', 'responseMs', 'score', 'verdict', 'saascityBadge', 'checks'], 'properties': {'url': {'type': 'string'}, 'score': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'checks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'status', 'detail'], 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'detail': {'type': 'string', 'description': 'Finding, and the fix when not passing'}, 'status': {'enum': ['pass', 'warn', 'fail'], 'type': 'string'}, 'critical': {'type': 'boolean', 'description': 'Blocks launch when failing'}}}}, 'verdict': {'enum': ['ready', 'almost_ready', 'not_ready'], 'type': 'string'}, 'finalUrl': {'type': 'string', 'description': 'After redirects'}, 'httpStatus': {'type': ['integer', 'null']}, 'responseMs': {'type': ['integer', 'null'], 'description': 'Time to response headers, from SaaSCity servers'}, 'saascityBadge': {'type': 'boolean', 'description': 'The SaaSCity badge is on the page'}}}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Slug of the listing to find alternatives for'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'How many to return'}}}
Output schema
{'type': 'object', 'required': ['listings'], 'properties': {'category': {'type': 'string'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'tagline', 'slug', 'category', 'points', 'pageUrl', 'websiteUrl'], 'properties': {'slug': {'type': 'string', 'description': 'Pass to get_listing or find_alternatives'}, 'title': {'type': 'string'}, 'points': {'type': 'integer', 'description': 'Community upvote points'}, 'pageUrl': {'type': 'string', 'description': 'SaaSCity listing page'}, 'tagline': {'type': 'string'}, 'category': {'type': 'string'}, 'websiteUrl': {'type': 'string', 'description': 'The product site'}}}}}}
Input schema
{'type': 'object', 'properties': {'sort': {'enum': ['dr', 'name'], 'type': 'string', 'default': 'dr', 'description': 'dr = strongest first'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Results per page'}, 'query': {'type': 'string', 'description': 'Match against directory name or domain, e.g. "hunt" or "betalist"'}, 'min_dr': {'type': 'integer', 'default': 0, 'maximum': 100, 'minimum': 0, 'description': 'Minimum Ahrefs Domain Rating'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Skip this many results (pagination)'}, 'pricing': {'enum': ['any', 'free', 'free_or_freemium', 'paid'], 'type': 'string', 'default': 'any', 'description': 'free_or_freemium = there is a no-cost route'}, 'category': {'enum': ['AI Tools', 'Community', 'Design Tools', 'Developer Tools', 'General Directory', 'Launchpad', 'Marketing Tools', 'Marketplace', 'Open Source', 'SaaS Tools', 'Software Discovery', 'Software Reviews', 'Tech / Startups'], 'type': 'string', 'description': 'Directory category'}, 'link_type': {'enum': ['any', 'dofollow', 'nofollow'], 'type': 'string', 'default': 'any', 'description': 'dofollow = verified followed link'}, 'exclude_badge_exchange': {'type': 'boolean', 'default': False, 'description': 'Drop directories whose free listing requires their badge on your site'}}}
Output schema
{'type': 'object', 'required': ['total', 'offset', 'directories', 'dataUpdatedAt', 'attribution'], 'properties': {'total': {'type': 'integer', 'description': 'Matches before pagination'}, 'offset': {'type': 'integer'}, 'attribution': {'type': 'string'}, 'directories': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'domain', 'submitUrl', 'dr', 'linkType', 'pricing', 'category', 'badgeExchange', 'drCheckedAt'], 'properties': {'dr': {'type': 'integer', 'description': 'Ahrefs Domain Rating; 0 means no data, not worthless'}, 'name': {'type': 'string'}, 'note': {'type': 'string', 'description': 'Hand-written verdict, present on curated picks only'}, 'domain': {'type': 'string'}, 'pricing': {'enum': ['free', 'freemium', 'paid', 'unknown'], 'type': 'string'}, 'category': {'type': 'string'}, 'linkType': {'enum': ['dofollow', 'nofollow', 'unknown'], 'type': 'string'}, 'submitUrl': {'type': 'string', 'description': 'Where to submit or list'}, 'drCheckedAt': {'type': ['string', 'null'], 'description': 'Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep'}, 'badgeExchange': {'type': 'boolean', 'description': 'The free listing asks for their badge on your site'}}}}, 'dataUpdatedAt': {'type': 'string', 'description': 'Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row.'}}}
Input schema
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'Directory domain or any URL on it, e.g. "uneed.best" or "https://www.producthunt.com/posts/new"'}}}
Output schema
{'type': 'object', 'required': ['found', 'dataUpdatedAt', 'attribution'], 'properties': {'found': {'type': 'boolean'}, 'directory': {'type': 'object', 'required': ['name', 'domain', 'submitUrl', 'dr', 'linkType', 'pricing', 'category', 'badgeExchange', 'drCheckedAt'], 'properties': {'dr': {'type': 'integer', 'description': 'Ahrefs Domain Rating; 0 means no data, not worthless'}, 'name': {'type': 'string'}, 'note': {'type': 'string', 'description': 'Hand-written verdict, present on curated picks only'}, 'domain': {'type': 'string'}, 'pricing': {'enum': ['free', 'freemium', 'paid', 'unknown'], 'type': 'string'}, 'category': {'type': 'string'}, 'linkType': {'enum': ['dofollow', 'nofollow', 'unknown'], 'type': 'string'}, 'submitUrl': {'type': 'string', 'description': 'Where to submit or list'}, 'drCheckedAt': {'type': ['string', 'null'], 'description': 'Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep'}, 'badgeExchange': {'type': 'boolean', 'description': 'The free listing asks for their badge on your site'}}}, 'attribution': {'type': 'string'}, 'dataUpdatedAt': {'type': 'string', 'description': 'Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row.'}}}
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'required': ['freeCapacityPerWeek', 'weeks'], 'properties': {'weeks': {'type': 'array', 'items': {'type': 'object', 'required': ['weekStart', 'freeRemaining', 'isCurrent'], 'properties': {'isCurrent': {'type': 'boolean'}, 'weekStart': {'type': 'string', 'description': 'Monday, YYYY-MM-DD'}, 'freeRemaining': {'type': 'integer'}}}}, 'freeCapacityPerWeek': {'type': 'integer'}}}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'How many to return'}, 'period': {'enum': ['week', 'month', 'all_time'], 'type': 'string', 'default': 'week', 'description': "week = this Monday's launch"}, 'category': {'enum': ['ai', 'saas', 'productivity', 'devtools', 'design', 'marketing', 'fintech', 'health', 'mobile', 'games', 'web3', 'molt', 'directories', 'other'], 'type': 'string', 'description': 'Listing category id'}}}
Output schema
{'type': 'object', 'required': ['listings', 'period'], 'properties': {'period': {'type': 'string'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'tagline', 'slug', 'category', 'points', 'pageUrl', 'websiteUrl'], 'properties': {'slug': {'type': 'string', 'description': 'Pass to get_listing or find_alternatives'}, 'title': {'type': 'string'}, 'points': {'type': 'integer', 'description': 'Community upvote points'}, 'pageUrl': {'type': 'string', 'description': 'SaaSCity listing page'}, 'tagline': {'type': 'string'}, 'category': {'type': 'string'}, 'websiteUrl': {'type': 'string', 'description': 'The product site'}}}}, 'weekStart': {'type': 'string', 'description': 'Present for period=week'}}}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Listing slug, the last part of saascity.io/live/<slug>'}}}
Output schema
{'type': 'object', 'required': ['found'], 'properties': {'found': {'type': 'boolean'}, 'listing': {'type': 'object', 'required': ['title', 'tagline', 'slug', 'category', 'points', 'pageUrl', 'websiteUrl', 'description', 'linkType'], 'properties': {'slug': {'type': 'string', 'description': 'Pass to get_listing or find_alternatives'}, 'title': {'type': 'string'}, 'points': {'type': 'integer', 'description': 'Community upvote points'}, 'pageUrl': {'type': 'string', 'description': 'SaaSCity listing page'}, 'tagline': {'type': 'string'}, 'category': {'type': 'string'}, 'linkType': {'enum': ['dofollow', 'nofollow'], 'type': 'string'}, 'websiteUrl': {'type': 'string', 'description': 'The product site'}, 'description': {'type': 'string'}}}}}
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'required': ['offers'], 'properties': {'offers': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'priceUsd', 'summary'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'summary': {'type': 'string'}, 'priceUsd': {'type': 'number'}}}}}}
Input schema
{'type': 'object', 'properties': {'slug': {'type': 'string', 'description': 'Slug of a live listing'}, 'claim_token': {'type': 'string', 'description': 'Token from submit_project (the mcp_... part of the claim URL)'}}}
Output schema
{'type': 'object', 'required': ['state'], 'properties': {'state': {'enum': ['not_found', 'unclaimed', 'claimed_in_review', 'expired', 'live'], 'type': 'string'}, 'listing': {'type': 'object', 'required': ['title', 'weekStart', 'badge', 'linkType', 'points'], 'properties': {'badge': {'type': 'string'}, 'title': {'type': 'string'}, 'points': {'type': 'integer'}, 'linkType': {'type': 'string'}, 'weekStart': {'type': ['string', 'null']}}}, 'expiresAt': {'type': 'string'}}}
Input schema
{'type': 'object', 'properties': {'free_only': {'type': 'boolean', 'default': False, 'description': 'Only picks with a free or freemium route'}, 'product_type': {'enum': ['any', 'saas', 'ai', 'devtools'], 'type': 'string', 'default': 'any', 'description': 'saas = B2B/B2C software, ai = AI tool or app, devtools = sold to developers, any = general'}}}
Output schema
{'type': 'object', 'required': ['productType', 'groups', 'dataUpdatedAt', 'attribution'], 'properties': {'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'advice', 'directories'], 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'advice': {'type': 'string'}, 'directories': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'domain', 'submitUrl', 'dr', 'linkType', 'pricing', 'category', 'badgeExchange', 'drCheckedAt'], 'properties': {'dr': {'type': 'integer', 'description': 'Ahrefs Domain Rating; 0 means no data, not worthless'}, 'name': {'type': 'string'}, 'note': {'type': 'string', 'description': 'Hand-written verdict, present on curated picks only'}, 'domain': {'type': 'string'}, 'pricing': {'enum': ['free', 'freemium', 'paid', 'unknown'], 'type': 'string'}, 'category': {'type': 'string'}, 'linkType': {'enum': ['dofollow', 'nofollow', 'unknown'], 'type': 'string'}, 'submitUrl': {'type': 'string', 'description': 'Where to submit or list'}, 'drCheckedAt': {'type': ['string', 'null'], 'description': 'Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep'}, 'badgeExchange': {'type': 'boolean', 'description': 'The free listing asks for their badge on your site'}}}}}}}, 'attribution': {'type': 'string'}, 'productType': {'type': 'string'}, 'dataUpdatedAt': {'type': 'string', 'description': 'Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row.'}}}
Input schema
{'type': 'object', 'properties': {'sort': {'enum': ['points', 'newest'], 'type': 'string', 'default': 'points', 'description': 'points = most upvoted first'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'Results per page'}, 'query': {'type': 'string', 'description': 'Keyword matched against title and tagline'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Skip this many results (pagination)'}, 'category': {'enum': ['ai', 'saas', 'productivity', 'devtools', 'design', 'marketing', 'fintech', 'health', 'mobile', 'games', 'web3', 'molt', 'directories', 'other'], 'type': 'string', 'description': 'Listing category id'}}}
Output schema
{'type': 'object', 'required': ['listings', 'offset'], 'properties': {'offset': {'type': 'integer'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'tagline', 'slug', 'category', 'points', 'pageUrl', 'websiteUrl'], 'properties': {'slug': {'type': 'string', 'description': 'Pass to get_listing or find_alternatives'}, 'title': {'type': 'string'}, 'points': {'type': 'integer', 'description': 'Community upvote points'}, 'pageUrl': {'type': 'string', 'description': 'SaaSCity listing page'}, 'tagline': {'type': 'string'}, 'category': {'type': 'string'}, 'websiteUrl': {'type': 'string', 'description': 'The product site'}}}}}}
Input schema
{'type': 'object', 'required': ['title', 'tagline', 'category', 'description', 'website_url'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40}, 'maxItems': 10, 'description': 'Up to 10 short keywords (optional)'}, 'title': {'type': 'string', 'maxLength': 60, 'minLength': 3, 'description': 'Product name'}, 'tagline': {'type': 'string', 'maxLength': 100, 'minLength': 10, 'description': 'One line on what it does and for whom'}, 'category': {'enum': ['ai', 'saas', 'productivity', 'devtools', 'design', 'marketing', 'fintech', 'health', 'mobile', 'games', 'web3', 'molt', 'directories', 'other'], 'type': 'string', 'description': 'Listing category id'}, 'github_url': {'type': 'string', 'maxLength': 200, 'description': 'Public repo URL (optional)'}, 'description': {'type': 'string', 'maxLength': 5000, 'minLength': 50, 'description': 'Plain text: the problem, who it is for, what makes it different'}, 'twitter_url': {'type': 'string', 'maxLength': 200, 'description': 'X/Twitter profile URL (optional)'}, 'website_url': {'type': 'string', 'maxLength': 500, 'description': 'Product homepage, https, on its own domain'}}}
Output schema
{'type': 'object', 'required': ['claimUrl', 'expiresAt', 'claimToken', 'badgeSnippet'], 'properties': {'claimUrl': {'type': 'string', 'description': 'The human must open this to publish the listing'}, 'expiresAt': {'type': 'string', 'description': 'ISO date after which the draft is discarded'}, 'claimToken': {'type': 'string', 'description': 'Pass to get_submission_status'}, 'badgeSnippet': {'type': 'string', 'description': 'HTML that earns a dofollow link once verified with check_badge'}}}
Recent tool changes
Similar MCP servers
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…
rankparse-mcp
Provides SEO and search marketing research including backlinks, authority, competitor gaps, Google Ads keyword metrics, and Googl…
VarynForge
Supports SEO research and content planning through niche analysis, competitor and keyword research, opportunity discovery, and wr…
AfterLaunch: the agentic growth marketing engine
Runs growth-marketing workflows covering SEO, AI-search visibility, competitor analysis, content planning, distribution channels,…
sonar
Provides app-store optimization tools for keyword research, rankings, reviews, competitor analysis, alerts, and ASO scoring on iO…
Prowlo — Reddit & X for AI agents
Indexes and searches Reddit and X-related social data, discovers communities, monitors keywords, finds engagement opportunities, …
AgentSEO
Provides SEO research and execution tools for SERP analysis, rankings, backlinks, content gaps, technical audits, and AI visibili…
NanoTools
Offers utility APIs alongside web search, scraping, browser rendering, screenshots, SERP data, and SEO audits.