SaaSCity MCP
A Model Context Protocol server that allows AI agents to audit homepage launch readiness, discover and recommend launch directories from a database of 1,600+ options based on Ahrefs DR and link type, submit projects for human review, check launch queues, verify badges, and search the directory.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://saascity.io/api/mcpWhat its tools do
22 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (21)
check_launch_readinessrecommend_launch_directoriesfind_launch_directoriesget_launch_directorycheck_badgeget_submission_statusget_launch_weeksget_offerssearch_listingsget_listingget_leaderboardfind_alternativescalculate_arrcalculate_arr_bridgecalculate_churncalculate_nrrrule_of_40calculate_npsab_test_significancemarkup_marginuptime_downtime
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to saascity.io ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Audit homepage launch readiness
- Recommend launch directories by DR
- Submit project for human review
- Search directory listings
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- saascity 2.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 22 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
22 advertised
check_launch_readiness — Check launch readiness
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.
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Homepage URL; the https:// prefix is optional"
}
}
}{
"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"
}
}
}{
"title": "Check launch readiness",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}recommend_launch_directories — Recommend launch directories
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,667 sites.
{
"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"
}
}
}{
"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."
}
}
}{
"title": "Recommend launch directories",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}find_launch_directories — Find launch directories
Filter 1,667 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.
{
"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": [
"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."
}
}
}{
"title": "Find launch directories",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_launch_directory — Look up a launch directory
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.
{
"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\""
}
}
}{
"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."
}
}
}{
"title": "Look up a launch directory",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}submit_project — Submit a project to SaaSCity
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 plan and 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. Every new listing is paid (see get_offers), and only the human pays. Free subdomain hosts (github.io, netlify.app...) and domains that already have a listing are refused.
{
"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"
}
}
}{
"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"
}
}
}{
"title": "Submit a project to SaaSCity",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}check_badge — Check the SaaSCity badge
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 keeps a free listing booked before November 6, 2026 on a dofollow link. A paid listing needs no badge.
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Site URL to scan (the listing URL; the homepage is read as well)"
}
}
}{
"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"
}
}
}{
"title": "Check the SaaSCity badge",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}get_submission_status — Get submission status
Where a SaaSCity submission stands. By claim token: unclaimed, expired, claimed but the form not submitted yet, submitted and waiting for payment, submitted and in review, rejected, archived, or live. By slug: a live listing (launch week, badge, link type, points).
{
"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)"
}
}
}{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"enum": [
"not_found",
"unclaimed",
"expired",
"claimed_not_submitted",
"awaiting_payment",
"claimed_in_review",
"rejected",
"archived",
"live"
],
"type": "string",
"description": "claimed_not_submitted: the human opened the claim link but has not submitted the form, so nothing is in review. awaiting_payment: the form was submitted and nothing happens until the human pays. claimed_in_review: paid for, and the listing waits for manual review."
},
"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"
}
}
}{
"title": "Get submission status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_launch_weeks — Get launch weeks
SaaSCity launch weeks: the next 12 Mondays. A round opens each Monday at 00:00 UTC, and a paid listing can take any of them.
{
"type": "object",
"properties": {}
}{
"type": "object",
"required": [
"weeks"
],
"properties": {
"weeks": {
"type": "array",
"items": {
"type": "object",
"required": [
"weekStart",
"isCurrent"
],
"properties": {
"isCurrent": {
"type": "boolean"
},
"weekStart": {
"type": "string",
"description": "Monday, YYYY-MM-DD"
}
}
}
}
}
}{
"title": "Get launch weeks",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_offers — Get listing offers
SaaSCity listing offers with real prices - Basic listing and Premium listing - and exactly what each buys (dofollow link, city-map building, launch review). Every new listing is paid. Only a human can pay, on the claim page.
{
"type": "object",
"properties": {}
}{
"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"
}
}
}
}
}
}{
"title": "Get listing offers",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}search_listings — Search SaaSCity listings
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.
{
"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"
}
}
}{
"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"
}
}
}
}
}
}{
"title": "Search SaaSCity listings",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_listing — Get a SaaSCity listing
One live SaaSCity listing by slug: title, tagline, full description, category, upvote points, link type (dofollow/nofollow), listing page and product site.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Listing slug, the last part of saascity.io/live/<slug>"
}
}
}{
"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"
}
}
}
}
}{
"title": "Get a SaaSCity listing",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_leaderboard — Get the launch leaderboard
SaaSCity's most upvoted launches for this week's launch, the last 30 days, or all time, optionally within one category.
{
"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"
}
}
}{
"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"
}
}
}{
"title": "Get the launch leaderboard",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}find_alternatives — Find alternatives to a listing
Other SaaSCity listings in the same category as a given listing, most upvoted first. Useful for competitor research and positioning.
{
"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"
}
}
}{
"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"
}
}
}
}
}
}{
"title": "Find alternatives to a listing",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}calculate_arr — Calculate ARR from MRR
Turn monthly recurring revenue into annual recurring revenue (ARR = MRR x 12), with ARPU when the customer count is given and the months to $100k, $1M and $10M ARR at a monthly growth rate. Count annual plans at their yearly price divided by 12 and leave one-time fees out of MRR. Full calculator: https://saascity.io/free-tools/arr-calculator
{
"type": "object",
"required": [
"mrr"
],
"properties": {
"mrr": {
"type": "number",
"description": "Monthly recurring revenue in any currency"
},
"customers": {
"type": "number",
"description": "Paying customers, for ARPU (optional)"
},
"monthly_growth_pct": {
"type": "number",
"description": "Expected MRR growth per month in percent, e.g. 8 (optional)"
}
}
}{
"type": "object",
"required": [
"arr",
"arpu_monthly",
"arpu_annual",
"milestones",
"calculator_url"
],
"properties": {
"arr": {
"type": "number",
"minimum": 0
},
"milestones": {
"type": "array",
"items": {
"type": "object",
"required": [
"target_arr",
"months"
],
"properties": {
"months": {
"type": [
"integer",
"null"
],
"description": "0 when reached, null when not within 20 years"
},
"target_arr": {
"type": "number"
}
}
}
},
"arpu_annual": {
"type": [
"number",
"null"
]
},
"arpu_monthly": {
"type": [
"number",
"null"
]
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "Calculate ARR from MRR",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}calculate_arr_bridge — ARR bridge: new, expansion, contraction, churn
Explain how ARR moved over a period: ending ARR = starting ARR + new + expansion - contraction - churned. Returns net new ARR, growth, the SaaS quick ratio ((new + expansion) / (contraction + churned)), and net and gross revenue retention of the starting base. Full calculator: https://saascity.io/free-tools/arr-calculator
{
"type": "object",
"required": [
"start_arr"
],
"properties": {
"new_arr": {
"type": "number",
"description": "ARR from customers who started paying in the period"
},
"start_arr": {
"type": "number",
"description": "ARR at the start of the period"
},
"churned_arr": {
"type": "number",
"description": "ARR lost to customers who cancelled"
},
"expansion_arr": {
"type": "number",
"description": "ARR added by existing customers (upgrades, seats, add-ons)"
},
"contraction_arr": {
"type": "number",
"description": "ARR lost to downgrades from customers who stayed"
}
}
}{
"type": "object",
"required": [
"end_arr",
"net_new_arr",
"growth_pct",
"quick_ratio",
"nrr_pct",
"grr_pct",
"calculator_url"
],
"properties": {
"end_arr": {
"type": "number"
},
"grr_pct": {
"type": [
"number",
"null"
]
},
"nrr_pct": {
"type": [
"number",
"null"
]
},
"growth_pct": {
"type": [
"number",
"null"
]
},
"net_new_arr": {
"type": "number"
},
"quick_ratio": {
"type": [
"number",
"null"
]
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "ARR bridge: new, expansion, contraction, churn",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}calculate_churn — Customer churn rate
Customer churn and retention for a period, its monthly and annual equivalents (compounded, so 5% a month is about 46% a year, not 60%), and the average customer lifetime. Full calculator: https://saascity.io/free-tools/churn-rate-calculator
{
"type": "object",
"required": [
"customers_at_start",
"customers_lost"
],
"properties": {
"period": {
"enum": [
"month",
"quarter",
"year"
],
"type": "string",
"description": "month, quarter or year"
},
"customers_lost": {
"type": "number",
"description": "Customers from that base who cancelled during the period"
},
"customers_at_start": {
"type": "number",
"description": "Customers at the start of the period"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "Customer churn rate",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}calculate_nrr — Net and gross revenue retention
Net revenue retention (NRR) and gross revenue retention (GRR) of a group of customers from their starting MRR, expansion, contraction and churned MRR, with annualised figures. Full calculator: https://saascity.io/free-tools/net-revenue-retention-calculator
{
"type": "object",
"required": [
"start_mrr"
],
"properties": {
"period": {
"enum": [
"month",
"quarter",
"year"
],
"type": "string",
"description": "month, quarter or year"
},
"start_mrr": {
"type": "number",
"description": "MRR of the customers at the start of the period"
},
"churned_mrr": {
"type": "number",
"description": "MRR lost to cancellations"
},
"expansion_mrr": {
"type": "number",
"description": "MRR added by those customers"
},
"contraction_mrr": {
"type": "number",
"description": "MRR lost to downgrades"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "Net and gross revenue retention",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}rule_of_40 — Rule of 40 and SaaS efficiency
Rule of 40 score (revenue growth % + profit margin %), plus the magic number, burn multiple and SaaS quick ratio when their inputs are given. Full calculator: https://saascity.io/free-tools/rule-of-40-calculator
{
"type": "object",
"required": [
"growth_pct",
"margin_pct"
],
"properties": {
"new_mrr": {
"type": "number",
"description": "Optional: new MRR, for the quick ratio"
},
"net_burn": {
"type": "number",
"description": "Optional: net burn over a period, for the burn multiple"
},
"growth_pct": {
"type": "number",
"description": "Year-over-year revenue growth in percent"
},
"margin_pct": {
"type": "number",
"description": "Profit margin in percent (EBITDA or free cash flow); negative when losing money"
},
"churned_mrr": {
"type": "number",
"description": "Optional: churned MRR"
},
"net_new_arr": {
"type": "number",
"description": "Optional: net new ARR over the same period"
},
"expansion_mrr": {
"type": "number",
"description": "Optional: expansion MRR"
},
"contraction_mrr": {
"type": "number",
"description": "Optional: contraction MRR"
},
"revenue_last_quarter": {
"type": "number",
"description": "Optional: revenue last quarter"
},
"revenue_this_quarter": {
"type": "number",
"description": "Optional: revenue this quarter, for the magic number"
},
"sales_marketing_last_quarter": {
"type": "number",
"description": "Optional: sales and marketing spend last quarter"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "Rule of 40 and SaaS efficiency",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}calculate_nps — Net Promoter Score
Net Promoter Score from the counts of promoters (9-10), passives (7-8) and detractors (0-6), with the margin of error at 95% confidence. Full calculator: https://saascity.io/free-tools/nps-calculator
{
"type": "object",
"required": [
"promoters",
"passives",
"detractors"
],
"properties": {
"passives": {
"type": "number",
"description": "Responses scoring 7 or 8"
},
"promoters": {
"type": "number",
"description": "Responses scoring 9 or 10"
},
"detractors": {
"type": "number",
"description": "Responses scoring 0 to 6"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "Net Promoter Score",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}ab_test_significance — A/B test significance
Two-proportion test of an A/B result: conversion rates, relative uplift, p-value, confidence interval, the chance that B beats A, and a sample ratio mismatch check. Full calculator: https://saascity.io/free-tools/ab-test-calculator
{
"type": "object",
"required": [
"visitors_a",
"conversions_a",
"visitors_b",
"conversions_b"
],
"properties": {
"visitors_a": {
"type": "number",
"description": "Visitors in A"
},
"visitors_b": {
"type": "number",
"description": "Visitors in B"
},
"conversions_a": {
"type": "number",
"description": "Conversions in A"
},
"conversions_b": {
"type": "number",
"description": "Conversions in B"
},
"confidence_pct": {
"type": "number",
"description": "90, 95 or 99 (default 95)"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "A/B test significance",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}markup_margin — Markup and margin
Selling price, profit and margin from a cost and a markup percent, or markup and margin from a cost and a selling price. Full calculator: https://saascity.io/free-tools/markup-calculator
{
"type": "object",
"required": [
"cost"
],
"properties": {
"cost": {
"type": "number",
"description": "Unit cost"
},
"price": {
"type": "number",
"description": "Selling price (give this or markup_pct)"
},
"markup_pct": {
"type": "number",
"description": "Markup in percent (give this or price)"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "Markup and margin",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}uptime_downtime — SLA uptime to allowed downtime
Allowed downtime per day, week, month, quarter and year, in seconds, for an availability target such as 99.9%. Full calculator: https://saascity.io/free-tools/uptime-calculator
{
"type": "object",
"required": [
"availability_pct"
],
"properties": {
"availability_pct": {
"type": "number",
"description": "Availability target in percent, e.g. 99.95"
}
}
}{
"type": "object",
"required": [
"result",
"calculator_url"
],
"properties": {
"result": {
"type": "object",
"description": "The calculator result; percentages as 0-1 shares unless the key says pct"
},
"calculator_url": {
"type": "string"
}
}
}{
"title": "SLA uptime to allowed downtime",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}Prompts
2 advertised
plan_launch — Plan a product launch
Audit a site, fix what blocks launch, pick directories and produce a dated launch checklist.
- website_url
- The product homepage (required)
- product_type
- saas, ai, devtools or any (default any)
submit_to_saascity — Submit to SaaSCity
Draft a SaaSCity listing from the product site, confirm it with the human, then submit it.
- website_url
- The product homepage (required)
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1406 ms
- 95th percentile latency
- 1406 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1406 ms · metadata changed · 22 tool(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http saascity-mcp https://saascity.io/api/mcpCodex
codex mcp add saascity-mcp --url https://saascity.io/api/mcpCursor
{
"mcpServers": {
"saascity-mcp": {
"url": "https://saascity.io/api/mcp"
}
}
}Cline
{
"mcpServers": {
"saascity-mcp": {
"type": "streamableHttp",
"url": "https://saascity.io/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"saascity-mcp": {
"type": "http",
"url": "https://saascity.io/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http saascity-mcp https://saascity.io/api/mcpClaude Desktop
https://saascity.io/api/mcpWindsurf
{
"mcpServers": {
"saascity-mcp": {
"serverUrl": "https://saascity.io/api/mcp"
}
}
}Let your agent find its tools
Find servers like SaaSCity MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other crm, sales, and marketing servers
Do you run SaaSCity MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.