Audit your site, pick from 1,600+ launch directories by DR and link type, and list on SaaSCity.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check whether the SaaSCity badge is live on a site. Reads the given URL and, for a deep page, the site homepage too, rendering JavaScript if the static HTML misses it. A verified badge turns the listing link dofollow.
Site URL to scan (the listing URL; the homepage is read as well)
Check whether the SaaSCity badge is live on a site. Reads the given URL and, for a deep page, the site homepage too, rendering JavaScript if the static HTML misses it. A verified badge turns the listing link dofollow.
| Argument | Type | Description |
|---|---|---|
| url* | string | Site URL to scan (the listing URL; the homepage is read as well) |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Site URL to scan (the listing URL; the homepage is read as well)"
}
}
}Audit a product homepage before launching it: HTTPS, noindex, title and meta description, og:image (fetched to confirm it loads), X card, favicon, canonical, mobile viewport, h1, JSON-LD, robots.txt, sitemap, parked or 404 pages, response time, and whether the page is empty without JavaScript. Returns a 0-100 score, a verdict and a fix for every problem. Reads the static HTML the way directory scrapers and link-preview bots do.
| Argument | Type | Description |
|---|---|---|
| url* | string | Homepage URL; the https:// prefix is optional |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Homepage URL; the https:// prefix is optional"
}
}
}Other SaaSCity listings in the same category as a given listing, most upvoted first. Useful for competitor research and positioning.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Slug of the listing to find alternatives for |
| limit | integer | How many to return |
{
"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"
}
}
}Filter 1,666 startup, SaaS and AI directories by category, minimum Ahrefs DR, link type (dofollow/nofollow), price and badge-swap requirement. Returns submit URLs. Link type and price are "unknown" where nobody has verified them yet - treat those as unverified, not as free or dofollow.
| Argument | Type | Description |
|---|---|---|
| sort | string | dr = strongest first |
| limit | integer | Results per page |
| query | string | Match against directory name or domain, e.g. "hunt" or "betalist" |
| min_dr | integer | Minimum Ahrefs Domain Rating |
| offset | integer | Skip this many results (pagination) |
| pricing | string | free_or_freemium = there is a no-cost route |
| category | string | Directory category |
| link_type | string | dofollow = verified followed link |
| exclude_badge_exchange | boolean |
Look up one directory by domain or URL: Ahrefs DR, dofollow or nofollow, price, whether it wants a badge swap, the submit URL, and a human verdict where one exists. Use it to vet a directory before paying for a listing.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Directory domain or any URL on it, e.g. "uneed.best" or "https://www.producthunt.com/posts/new" |
{
"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\""
}
}
}SaaSCity launch-week queue: the next 12 Mondays, how many free slots each has left, and which are full. Use it to tell a founder when a free listing would go live.
No arguments.
{
"type": "object",
"properties": {}
}SaaSCity's most upvoted launches for this week's launch, the last 30 days, or all time, optionally within one category.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many to return |
| period | string | week = this Monday's launch |
| category | string | Listing category id |
{
"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"
}
}
}One live SaaSCity listing by slug: title, tagline, full description, category, upvote points, link type (dofollow/nofollow), listing page and product site.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Listing slug, the last part of saascity.io/live/<slug> |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Listing slug, the last part of saascity.io/live/<slug>"
}
}
}SaaSCity listing offers with real prices - free queue, Quick Pass, Premium - and exactly what each buys (queue position, dofollow link, city-map building, launch post). Only a human can pay, on the claim page.
No arguments.
{
"type": "object",
"properties": {}
}Where a SaaSCity submission stands. By claim token: unclaimed, expired, claimed but the form not submitted yet, submitted and in review, rejected, archived, or live. By slug: a live listing (launch week, badge, link type, points).
| Argument | Type | Description |
|---|---|---|
| slug | string | Slug of a live listing |
| claim_token | string | Token from submit_project (the mcp_... part of the claim URL) |
{
"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)"
}
}
}Hand-picked launch directories for a product type, grouped by when to submit (launch day first, evergreen after). Every pick carries a human-written verdict, including the ones that are not worth paying for, plus Ahrefs DR, link type and price. Start here; use find_launch_directories to go wider across all 1,666 sites.
| Argument | Type | Description |
|---|---|---|
| free_only | boolean | Only picks with a free or freemium route |
| product_type | string | saas = B2B/B2C software, ai = AI tool or app, devtools = sold to developers, any = general |
{
"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"
}
}
}Search products listed on SaaSCity by keyword and/or category. Returns title, tagline, category, upvote points, the listing page and the product site. Useful for market research ("what else exists in this space?") before a launch.
| Argument | Type | Description |
|---|---|---|
| sort | string | points = most upvoted first |
| limit | integer | Results per page |
| query | string | Keyword matched against title and tagline |
| offset | integer | Skip this many results (pagination) |
| category | string | Listing category id |
{
"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"
}
}
}List a product on the SaaSCity launch directory. Creates an inert draft and returns a claim URL; the human opens it to sign in, gets the submit form prefilled with the draft, picks a launch Monday and submits the form. Nothing is submitted, published or charged until they submit that form, and every listing is reviewed by a person. Free to submit. Free subdomain hosts (github.io, netlify.app...) and domains that already have a listing are refused.
| Argument | Type | Description |
|---|---|---|
| tags | array | Up to 10 short keywords (optional) |
| title* | string | Product name |
| tagline* | string | One line on what it does and for whom |
| category* | string | Listing category id |
| github_url | string | Public repo URL (optional) |
| description* | string | Plain text: the problem, who it is for, what makes it different |
| twitter_url | string | X/Twitter profile URL (optional) |
| website_url* | string | Product homepage, https, on its own domain |
| Drop directories whose free listing requires their badge on your site |
{
"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"
}
}
}{
"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"
}
}
}