SaaSCity
Audit your site, pick from 1,600+ launch directories by DR and link type, and list on SaaSCity.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"saascity": {
"url": "https://saascity.io/api/mcp"
}
}
}Puntos de conexión remotos
https://saascity.io/api/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (13)
🟢check_launch_readiness(url)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Homepage URL; the https:// prefix is optional"
}
},
"required": [
"url"
]
}Esquema de salida
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"finalUrl": {
"type": "string",
"description": "After redirects"
},
"httpStatus": {
"type": [
"integer",
"null"
]
},
"responseMs": {
"type": [
"integer",
"null"
],
"description": "Time to response headers, from SaaSCity servers"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"verdict": {
"type": "string",
"enum": [
"ready",
"almost_ready",
"not_ready"
]
},
"saascityBadge": {
"type": "boolean",
"description": "The SaaSCity badge is on the page"
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pass",
"warn",
"fail"
]
},
"detail": {
"type": "string",
"description": "Finding, and the fix when not passing"
},
"critical": {
"type": "boolean",
"description": "Blocks launch when failing"
}
},
"required": [
"id",
"label",
"status",
"detail"
]
}
}
},
"required": [
"url",
"finalUrl",
"httpStatus",
"responseMs",
"score",
"verdict",
"saascityBadge",
"checks"
]
}🟢recommend_launch_directories(product_type, free_only)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"product_type": {
"type": "string",
"enum": [
"any",
"saas",
"ai",
"devtools"
],
"default": "any",
"description": "saas = B2B/B2C software, ai = AI tool or app, devtools = sold to developers, any = general"
},
"free_only": {
"type": "boolean",
"default": false,
"description": "Only picks with a free or freemium route"
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"productType": {
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"advice": {
"type": "string"
},
"directories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"submitUrl": {
"type": "string",
"description": "Where to submit or list"
},
"dr": {
"type": "integer",
"description": "Ahrefs Domain Rating; 0 means no data, not worthless"
},
"linkType": {
"type": "string",
"enum": [
"dofollow",
"nofollow",
"unknown"
]
},
"pricing": {
"type": "string",
"enum": [
"free",
"freemium",
"paid",
"unknown"
]
},
"category": {
"type": "string"
},
"badgeExchange": {
"type": "boolean",
"description": "The free listing asks for their badge on your site"
},
"drCheckedAt": {
"type": [
"string",
"null"
],
"description": "Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep"
},
"note": {
"type": "string",
"description": "Hand-written verdict, present on curated picks only"
}
},
"required": [
"name",
"domain",
"submitUrl",
"dr",
"linkType",
"pricing",
"category",
"badgeExchange",
"drCheckedAt"
]
}
}
},
"required": [
"id",
"label",
"advice",
"directories"
]
}
},
"dataUpdatedAt": {
"type": "string",
"description": "Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row."
},
"attribution": {
"type": "string"
}
},
"required": [
"productType",
"groups",
"dataUpdatedAt",
"attribution"
]
}🟢find_launch_directories(query, category, min_dr, link_type, pricing, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Match against directory name or domain, e.g. \"hunt\" or \"betalist\""
},
"category": {
"type": "string",
"enum": [
"AI Tools",
"Community",
"Design Tools",
"Developer Tools",
"General Directory",
"Launchpad",
"Marketing Tools",
"Marketplace",
"Open Source",
"SaaS Tools",
"Software Discovery",
"Software Reviews",
"Tech / Startups"
],
"description": "Directory category"
},
"min_dr": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"default": 0,
"description": "Minimum Ahrefs Domain Rating"
},
"link_type": {
"type": "string",
"enum": [
"any",
"dofollow",
"nofollow"
],
"default": "any",
"description": "dofollow = verified followed link"
},
"pricing": {
"type": "string",
"enum": [
"any",
"free",
"free_or_freemium",
"paid"
],
"default": "any",
"description": "free_or_freemium = there is a no-cost route"
},
"exclude_badge_exchange": {
"type": "boolean",
"default": false,
"description": "Drop directories whose free listing requires their badge on your site"
},
"sort": {
"type": "string",
"enum": [
"dr",
"name"
],
"default": "dr",
"description": "dr = strongest first"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Results per page"
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Skip this many results (pagination)"
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"total": {
"type": "integer",
"description": "Matches before pagination"
},
"offset": {
"type": "integer"
},
"directories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"submitUrl": {
"type": "string",
"description": "Where to submit or list"
},
"dr": {
"type": "integer",
"description": "Ahrefs Domain Rating; 0 means no data, not worthless"
},
"linkType": {
"type": "string",
"enum": [
"dofollow",
"nofollow",
"unknown"
]
},
"pricing": {
"type": "string",
"enum": [
"free",
"freemium",
"paid",
"unknown"
]
},
"category": {
"type": "string"
},
"badgeExchange": {
"type": "boolean",
"description": "The free listing asks for their badge on your site"
},
"drCheckedAt": {
"type": [
"string",
"null"
],
"description": "Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep"
},
"note": {
"type": "string",
"description": "Hand-written verdict, present on curated picks only"
}
},
"required": [
"name",
"domain",
"submitUrl",
"dr",
"linkType",
"pricing",
"category",
"badgeExchange",
"drCheckedAt"
]
}
},
"dataUpdatedAt": {
"type": "string",
"description": "Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row."
},
"attribution": {
"type": "string"
}
},
"required": [
"total",
"offset",
"directories",
"dataUpdatedAt",
"attribution"
]
}🟢get_launch_directory(domain)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Directory domain or any URL on it, e.g. \"uneed.best\" or \"https://www.producthunt.com/posts/new\""
}
},
"required": [
"domain"
]
}Esquema de salida
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"directory": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"submitUrl": {
"type": "string",
"description": "Where to submit or list"
},
"dr": {
"type": "integer",
"description": "Ahrefs Domain Rating; 0 means no data, not worthless"
},
"linkType": {
"type": "string",
"enum": [
"dofollow",
"nofollow",
"unknown"
]
},
"pricing": {
"type": "string",
"enum": [
"free",
"freemium",
"paid",
"unknown"
]
},
"category": {
"type": "string"
},
"badgeExchange": {
"type": "boolean",
"description": "The free listing asks for their badge on your site"
},
"drCheckedAt": {
"type": [
"string",
"null"
],
"description": "Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep"
},
"note": {
"type": "string",
"description": "Hand-written verdict, present on curated picks only"
}
},
"required": [
"name",
"domain",
"submitUrl",
"dr",
"linkType",
"pricing",
"category",
"badgeExchange",
"drCheckedAt"
]
},
"dataUpdatedAt": {
"type": "string",
"description": "Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row."
},
"attribution": {
"type": "string"
}
},
"required": [
"found",
"dataUpdatedAt",
"attribution"
]
}🟡submit_project(title, tagline, category, description, website_url, ...)
List a product on the SaaSCity launch directory. Creates an inert draft and returns a claim URL; the human opens it to sign in, confirm the listing and pick a launch Monday. Nothing is published or charged until they do, 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.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3,
"maxLength": 60,
"description": "Product name"
},
"tagline": {
"type": "string",
"minLength": 10,
"maxLength": 100,
"description": "One line on what it does and for whom"
},
"category": {
"type": "string",
"enum": [
"ai",
"saas",
"productivity",
"devtools",
"design",
"marketing",
"fintech",
"health",
"mobile",
"games",
"web3",
"molt",
"directories",
"other"
],
"description": "Listing category id"
},
"description": {
"type": "string",
"minLength": 50,
"maxLength": 5000,
"description": "Plain text: the problem, who it is for, what makes it different"
},
"website_url": {
"type": "string",
"maxLength": 500,
"description": "Product homepage, https, on its own domain"
},
"twitter_url": {
"type": "string",
"maxLength": 200,
"description": "X/Twitter profile URL (optional)"
},
"github_url": {
"type": "string",
"maxLength": 200,
"description": "Public repo URL (optional)"
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 10,
"description": "Up to 10 short keywords (optional)"
}
},
"required": [
"title",
"tagline",
"category",
"description",
"website_url"
]
}Esquema de salida
{
"type": "object",
"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"
}
},
"required": [
"claimUrl",
"expiresAt",
"claimToken",
"badgeSnippet"
]
}🟢check_badge(url)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Site URL to scan (the listing URL; the homepage is read as well)"
}
},
"required": [
"url"
]
}Esquema de salida
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "FOUND, BADGE_NOT_FOUND, UNREACHABLE, TIMEOUT, HTTP_ERROR, ..."
},
"message": {
"type": "string"
},
"badgeSnippet": {
"type": "string",
"description": "The HTML to embed when not found"
}
},
"required": [
"found",
"code",
"message"
]
}🟢get_submission_status(claim_token, slug)
Where a SaaSCity submission stands: a draft by claim token (unclaimed, claimed and in review, or expired) or a live listing by slug (launch week, badge, link type, points).
Esquema de entrada
{
"type": "object",
"properties": {
"claim_token": {
"type": "string",
"description": "Token from submit_project (the mcp_... part of the claim URL)"
},
"slug": {
"type": "string",
"description": "Slug of a live listing"
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"state": {
"type": "string",
"enum": [
"not_found",
"unclaimed",
"claimed_in_review",
"expired",
"live"
]
},
"expiresAt": {
"type": "string"
},
"listing": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"weekStart": {
"type": [
"string",
"null"
]
},
"badge": {
"type": "string"
},
"linkType": {
"type": "string"
},
"points": {
"type": "integer"
}
},
"required": [
"title",
"weekStart",
"badge",
"linkType",
"points"
]
}
},
"required": [
"state"
]
}🟢get_launch_weeks
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.
Esquema de entrada
{
"type": "object",
"properties": {}
}Esquema de salida
{
"type": "object",
"properties": {
"freeCapacityPerWeek": {
"type": "integer"
},
"weeks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"weekStart": {
"type": "string",
"description": "Monday, YYYY-MM-DD"
},
"freeRemaining": {
"type": "integer"
},
"isCurrent": {
"type": "boolean"
}
},
"required": [
"weekStart",
"freeRemaining",
"isCurrent"
]
}
}
},
"required": [
"freeCapacityPerWeek",
"weeks"
]
}🟢get_offers
SaaSCity listing offers with real prices - free queue, Quick Pass, Premium - and exactly what each buys (queue position, dofollow link, launch post). Only a human can pay, on the claim page.
Esquema de entrada
{
"type": "object",
"properties": {}
}Esquema de salida
{
"type": "object",
"properties": {
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"priceUsd": {
"type": "number"
},
"summary": {
"type": "string"
}
},
"required": [
"id",
"name",
"priceUsd",
"summary"
]
}
}
},
"required": [
"offers"
]
}🟢search_listings(query, category, sort, limit, offset)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Keyword matched against title and tagline"
},
"category": {
"type": "string",
"enum": [
"ai",
"saas",
"productivity",
"devtools",
"design",
"marketing",
"fintech",
"health",
"mobile",
"games",
"web3",
"molt",
"directories",
"other"
],
"description": "Listing category id"
},
"sort": {
"type": "string",
"enum": [
"points",
"newest"
],
"default": "points",
"description": "points = most upvoted first"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10,
"description": "Results per page"
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Skip this many results (pagination)"
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"listings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Pass to get_listing or find_alternatives"
},
"category": {
"type": "string"
},
"points": {
"type": "integer",
"description": "Community upvote points"
},
"pageUrl": {
"type": "string",
"description": "SaaSCity listing page"
},
"websiteUrl": {
"type": "string",
"description": "The product site"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl"
]
}
},
"offset": {
"type": "integer"
}
},
"required": [
"listings",
"offset"
]
}🟢get_listing(slug)
One live SaaSCity listing by slug: title, tagline, full description, category, upvote points, link type (dofollow/nofollow), listing page and product site.
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Listing slug, the last part of saascity.io/live/<slug>"
}
},
"required": [
"slug"
]
}Esquema de salida
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"listing": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Pass to get_listing or find_alternatives"
},
"category": {
"type": "string"
},
"points": {
"type": "integer",
"description": "Community upvote points"
},
"pageUrl": {
"type": "string",
"description": "SaaSCity listing page"
},
"websiteUrl": {
"type": "string",
"description": "The product site"
},
"description": {
"type": "string"
},
"linkType": {
"type": "string",
"enum": [
"dofollow",
"nofollow"
]
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl",
"description",
"linkType"
]
}
},
"required": [
"found"
]
}🟢get_leaderboard(period, category, limit)
SaaSCity's most upvoted launches for this week's launch, the last 30 days, or all time, optionally within one category.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"week",
"month",
"all_time"
],
"default": "week",
"description": "week = this Monday's launch"
},
"category": {
"type": "string",
"enum": [
"ai",
"saas",
"productivity",
"devtools",
"design",
"marketing",
"fintech",
"health",
"mobile",
"games",
"web3",
"molt",
"directories",
"other"
],
"description": "Listing category id"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10,
"description": "How many to return"
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"listings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Pass to get_listing or find_alternatives"
},
"category": {
"type": "string"
},
"points": {
"type": "integer",
"description": "Community upvote points"
},
"pageUrl": {
"type": "string",
"description": "SaaSCity listing page"
},
"websiteUrl": {
"type": "string",
"description": "The product site"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl"
]
}
},
"period": {
"type": "string"
},
"weekStart": {
"type": "string",
"description": "Present for period=week"
}
},
"required": [
"listings",
"period"
]
}🟢find_alternatives(slug, limit)
Other SaaSCity listings in the same category as a given listing, most upvoted first. Useful for competitor research and positioning.
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Slug of the listing to find alternatives for"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10,
"description": "How many to return"
}
},
"required": [
"slug"
]
}Esquema de salida
{
"type": "object",
"properties": {
"listings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"slug": {
"type": "string",
"description": "Pass to get_listing or find_alternatives"
},
"category": {
"type": "string"
},
"points": {
"type": "integer",
"description": "Community upvote points"
},
"pageUrl": {
"type": "string",
"description": "SaaSCity listing page"
},
"websiteUrl": {
"type": "string",
"description": "The product site"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl"
]
}
},
"category": {
"type": "string"
}
},
"required": [
"listings"
]
}Comunidad
Evidencia