Server definition
- Hash
- sha256:c68d1a3051d7cd11e7713830e78c5f52ba4cf626a7ee549ba07f9ca884b05844
- What it is
- What a remote MCP server returned when asked what it offers: 13 tools
The blob, as servednamed by its sha256
{
"instructions": "SaaSCity helps a founder launch a product. Typical flow: check_launch_readiness on the site, fix what fails, then recommend_launch_directories (hand-picked, with notes) or find_launch_directories (the full dataset, filterable by DR, link type and price). submit_project lists the product on SaaSCity as an inert draft and returns a claim link the human must open - nothing is published or paid without them, and every listing is reviewed by a person. DR figures are Ahrefs Domain Rating; say so when quoting them. Docs: https://saascity.io/mcp",
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"url": {
"description": "Site URL to scan (the listing URL; the homepage is read as well)",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "check_badge",
"outputSchema": {
"properties": {
"badgeSnippet": {
"description": "The HTML to embed when not found",
"type": "string"
},
"code": {
"description": "FOUND, BADGE_NOT_FOUND, UNREACHABLE, TIMEOUT, HTTP_ERROR, ...",
"type": "string"
},
"found": {
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"found",
"code",
"message"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"url": {
"description": "Homepage URL; the https:// prefix is optional",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "check_launch_readiness",
"outputSchema": {
"properties": {
"checks": {
"items": {
"properties": {
"critical": {
"description": "Blocks launch when failing",
"type": "boolean"
},
"detail": {
"description": "Finding, and the fix when not passing",
"type": "string"
},
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"status": {
"enum": [
"pass",
"warn",
"fail"
],
"type": "string"
}
},
"required": [
"id",
"label",
"status",
"detail"
],
"type": "object"
},
"type": "array"
},
"finalUrl": {
"description": "After redirects",
"type": "string"
},
"httpStatus": {
"type": [
"integer",
"null"
]
},
"responseMs": {
"description": "Time to response headers, from SaaSCity servers",
"type": [
"integer",
"null"
]
},
"saascityBadge": {
"description": "The SaaSCity badge is on the page",
"type": "boolean"
},
"score": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"url": {
"type": "string"
},
"verdict": {
"enum": [
"ready",
"almost_ready",
"not_ready"
],
"type": "string"
}
},
"required": [
"url",
"finalUrl",
"httpStatus",
"responseMs",
"score",
"verdict",
"saascityBadge",
"checks"
],
"type": "object"
}
},
{
"description": "Other SaaSCity listings in the same category as a given listing, most upvoted first. Useful for competitor research and positioning.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"description": "How many to return",
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Slug of the listing to find alternatives for",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "find_alternatives",
"outputSchema": {
"properties": {
"category": {
"type": "string"
},
"listings": {
"items": {
"properties": {
"category": {
"type": "string"
},
"pageUrl": {
"description": "SaaSCity listing page",
"type": "string"
},
"points": {
"description": "Community upvote points",
"type": "integer"
},
"slug": {
"description": "Pass to get_listing or find_alternatives",
"type": "string"
},
"tagline": {
"type": "string"
},
"title": {
"type": "string"
},
"websiteUrl": {
"description": "The product site",
"type": "string"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"listings"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"category": {
"description": "Directory 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"
},
"exclude_badge_exchange": {
"default": false,
"description": "Drop directories whose free listing requires their badge on your site",
"type": "boolean"
},
"limit": {
"default": 20,
"description": "Results per page",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"link_type": {
"default": "any",
"description": "dofollow = verified followed link",
"enum": [
"any",
"dofollow",
"nofollow"
],
"type": "string"
},
"min_dr": {
"default": 0,
"description": "Minimum Ahrefs Domain Rating",
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Skip this many results (pagination)",
"minimum": 0,
"type": "integer"
},
"pricing": {
"default": "any",
"description": "free_or_freemium = there is a no-cost route",
"enum": [
"any",
"free",
"free_or_freemium",
"paid"
],
"type": "string"
},
"query": {
"description": "Match against directory name or domain, e.g. \"hunt\" or \"betalist\"",
"type": "string"
},
"sort": {
"default": "dr",
"description": "dr = strongest first",
"enum": [
"dr",
"name"
],
"type": "string"
}
},
"type": "object"
},
"name": "find_launch_directories",
"outputSchema": {
"properties": {
"attribution": {
"type": "string"
},
"dataUpdatedAt": {
"description": "Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row.",
"type": "string"
},
"directories": {
"items": {
"properties": {
"badgeExchange": {
"description": "The free listing asks for their badge on your site",
"type": "boolean"
},
"category": {
"type": "string"
},
"domain": {
"type": "string"
},
"dr": {
"description": "Ahrefs Domain Rating; 0 means no data, not worthless",
"type": "integer"
},
"drCheckedAt": {
"description": "Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep",
"type": [
"string",
"null"
]
},
"linkType": {
"enum": [
"dofollow",
"nofollow",
"unknown"
],
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"description": "Hand-written verdict, present on curated picks only",
"type": "string"
},
"pricing": {
"enum": [
"free",
"freemium",
"paid",
"unknown"
],
"type": "string"
},
"submitUrl": {
"description": "Where to submit or list",
"type": "string"
}
},
"required": [
"name",
"domain",
"submitUrl",
"dr",
"linkType",
"pricing",
"category",
"badgeExchange",
"drCheckedAt"
],
"type": "object"
},
"type": "array"
},
"offset": {
"type": "integer"
},
"total": {
"description": "Matches before pagination",
"type": "integer"
}
},
"required": [
"total",
"offset",
"directories",
"dataUpdatedAt",
"attribution"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"domain": {
"description": "Directory domain or any URL on it, e.g. \"uneed.best\" or \"https://www.producthunt.com/posts/new\"",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "get_launch_directory",
"outputSchema": {
"properties": {
"attribution": {
"type": "string"
},
"dataUpdatedAt": {
"description": "Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row.",
"type": "string"
},
"directory": {
"properties": {
"badgeExchange": {
"description": "The free listing asks for their badge on your site",
"type": "boolean"
},
"category": {
"type": "string"
},
"domain": {
"type": "string"
},
"dr": {
"description": "Ahrefs Domain Rating; 0 means no data, not worthless",
"type": "integer"
},
"drCheckedAt": {
"description": "Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep",
"type": [
"string",
"null"
]
},
"linkType": {
"enum": [
"dofollow",
"nofollow",
"unknown"
],
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"description": "Hand-written verdict, present on curated picks only",
"type": "string"
},
"pricing": {
"enum": [
"free",
"freemium",
"paid",
"unknown"
],
"type": "string"
},
"submitUrl": {
"description": "Where to submit or list",
"type": "string"
}
},
"required": [
"name",
"domain",
"submitUrl",
"dr",
"linkType",
"pricing",
"category",
"badgeExchange",
"drCheckedAt"
],
"type": "object"
},
"found": {
"type": "boolean"
}
},
"required": [
"found",
"dataUpdatedAt",
"attribution"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_launch_weeks",
"outputSchema": {
"properties": {
"freeCapacityPerWeek": {
"type": "integer"
},
"weeks": {
"items": {
"properties": {
"freeRemaining": {
"type": "integer"
},
"isCurrent": {
"type": "boolean"
},
"weekStart": {
"description": "Monday, YYYY-MM-DD",
"type": "string"
}
},
"required": [
"weekStart",
"freeRemaining",
"isCurrent"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"freeCapacityPerWeek",
"weeks"
],
"type": "object"
}
},
{
"description": "SaaSCity's most upvoted launches for this week's launch, the last 30 days, or all time, optionally within one category.",
"inputSchema": {
"properties": {
"category": {
"description": "Listing category id",
"enum": [
"ai",
"saas",
"productivity",
"devtools",
"design",
"marketing",
"fintech",
"health",
"mobile",
"games",
"web3",
"molt",
"directories",
"other"
],
"type": "string"
},
"limit": {
"default": 10,
"description": "How many to return",
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"period": {
"default": "week",
"description": "week = this Monday's launch",
"enum": [
"week",
"month",
"all_time"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_leaderboard",
"outputSchema": {
"properties": {
"listings": {
"items": {
"properties": {
"category": {
"type": "string"
},
"pageUrl": {
"description": "SaaSCity listing page",
"type": "string"
},
"points": {
"description": "Community upvote points",
"type": "integer"
},
"slug": {
"description": "Pass to get_listing or find_alternatives",
"type": "string"
},
"tagline": {
"type": "string"
},
"title": {
"type": "string"
},
"websiteUrl": {
"description": "The product site",
"type": "string"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl"
],
"type": "object"
},
"type": "array"
},
"period": {
"type": "string"
},
"weekStart": {
"description": "Present for period=week",
"type": "string"
}
},
"required": [
"listings",
"period"
],
"type": "object"
}
},
{
"description": "One live SaaSCity listing by slug: title, tagline, full description, category, upvote points, link type (dofollow/nofollow), listing page and product site.",
"inputSchema": {
"properties": {
"slug": {
"description": "Listing slug, the last part of saascity.io/live/<slug>",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_listing",
"outputSchema": {
"properties": {
"found": {
"type": "boolean"
},
"listing": {
"properties": {
"category": {
"type": "string"
},
"description": {
"type": "string"
},
"linkType": {
"enum": [
"dofollow",
"nofollow"
],
"type": "string"
},
"pageUrl": {
"description": "SaaSCity listing page",
"type": "string"
},
"points": {
"description": "Community upvote points",
"type": "integer"
},
"slug": {
"description": "Pass to get_listing or find_alternatives",
"type": "string"
},
"tagline": {
"type": "string"
},
"title": {
"type": "string"
},
"websiteUrl": {
"description": "The product site",
"type": "string"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl",
"description",
"linkType"
],
"type": "object"
}
},
"required": [
"found"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_offers",
"outputSchema": {
"properties": {
"offers": {
"items": {
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"priceUsd": {
"type": "number"
},
"summary": {
"type": "string"
}
},
"required": [
"id",
"name",
"priceUsd",
"summary"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"offers"
],
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"properties": {
"claim_token": {
"description": "Token from submit_project (the mcp_... part of the claim URL)",
"type": "string"
},
"slug": {
"description": "Slug of a live listing",
"type": "string"
}
},
"type": "object"
},
"name": "get_submission_status",
"outputSchema": {
"properties": {
"expiresAt": {
"type": "string"
},
"listing": {
"properties": {
"badge": {
"type": "string"
},
"linkType": {
"type": "string"
},
"points": {
"type": "integer"
},
"title": {
"type": "string"
},
"weekStart": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"weekStart",
"badge",
"linkType",
"points"
],
"type": "object"
},
"state": {
"enum": [
"not_found",
"unclaimed",
"claimed_in_review",
"expired",
"live"
],
"type": "string"
}
},
"required": [
"state"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"free_only": {
"default": false,
"description": "Only picks with a free or freemium route",
"type": "boolean"
},
"product_type": {
"default": "any",
"description": "saas = B2B/B2C software, ai = AI tool or app, devtools = sold to developers, any = general",
"enum": [
"any",
"saas",
"ai",
"devtools"
],
"type": "string"
}
},
"type": "object"
},
"name": "recommend_launch_directories",
"outputSchema": {
"properties": {
"attribution": {
"type": "string"
},
"dataUpdatedAt": {
"description": "Date link type and price were last swept (YYYY-MM-DD). DR has its own date per row.",
"type": "string"
},
"groups": {
"items": {
"properties": {
"advice": {
"type": "string"
},
"directories": {
"items": {
"properties": {
"badgeExchange": {
"description": "The free listing asks for their badge on your site",
"type": "boolean"
},
"category": {
"type": "string"
},
"domain": {
"type": "string"
},
"dr": {
"description": "Ahrefs Domain Rating; 0 means no data, not worthless",
"type": "integer"
},
"drCheckedAt": {
"description": "Day the DR was last checked (YYYY-MM-DD); null = value from the last list sweep",
"type": [
"string",
"null"
]
},
"linkType": {
"enum": [
"dofollow",
"nofollow",
"unknown"
],
"type": "string"
},
"name": {
"type": "string"
},
"note": {
"description": "Hand-written verdict, present on curated picks only",
"type": "string"
},
"pricing": {
"enum": [
"free",
"freemium",
"paid",
"unknown"
],
"type": "string"
},
"submitUrl": {
"description": "Where to submit or list",
"type": "string"
}
},
"required": [
"name",
"domain",
"submitUrl",
"dr",
"linkType",
"pricing",
"category",
"badgeExchange",
"drCheckedAt"
],
"type": "object"
},
"type": "array"
},
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"label",
"advice",
"directories"
],
"type": "object"
},
"type": "array"
},
"productType": {
"type": "string"
}
},
"required": [
"productType",
"groups",
"dataUpdatedAt",
"attribution"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"category": {
"description": "Listing category id",
"enum": [
"ai",
"saas",
"productivity",
"devtools",
"design",
"marketing",
"fintech",
"health",
"mobile",
"games",
"web3",
"molt",
"directories",
"other"
],
"type": "string"
},
"limit": {
"default": 10,
"description": "Results per page",
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Skip this many results (pagination)",
"minimum": 0,
"type": "integer"
},
"query": {
"description": "Keyword matched against title and tagline",
"type": "string"
},
"sort": {
"default": "points",
"description": "points = most upvoted first",
"enum": [
"points",
"newest"
],
"type": "string"
}
},
"type": "object"
},
"name": "search_listings",
"outputSchema": {
"properties": {
"listings": {
"items": {
"properties": {
"category": {
"type": "string"
},
"pageUrl": {
"description": "SaaSCity listing page",
"type": "string"
},
"points": {
"description": "Community upvote points",
"type": "integer"
},
"slug": {
"description": "Pass to get_listing or find_alternatives",
"type": "string"
},
"tagline": {
"type": "string"
},
"title": {
"type": "string"
},
"websiteUrl": {
"description": "The product site",
"type": "string"
}
},
"required": [
"title",
"tagline",
"slug",
"category",
"points",
"pageUrl",
"websiteUrl"
],
"type": "object"
},
"type": "array"
},
"offset": {
"type": "integer"
}
},
"required": [
"listings",
"offset"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"category": {
"description": "Listing category id",
"enum": [
"ai",
"saas",
"productivity",
"devtools",
"design",
"marketing",
"fintech",
"health",
"mobile",
"games",
"web3",
"molt",
"directories",
"other"
],
"type": "string"
},
"description": {
"description": "Plain text: the problem, who it is for, what makes it different",
"maxLength": 5000,
"minLength": 50,
"type": "string"
},
"github_url": {
"description": "Public repo URL (optional)",
"maxLength": 200,
"type": "string"
},
"tagline": {
"description": "One line on what it does and for whom",
"maxLength": 100,
"minLength": 10,
"type": "string"
},
"tags": {
"description": "Up to 10 short keywords (optional)",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"title": {
"description": "Product name",
"maxLength": 60,
"minLength": 3,
"type": "string"
},
"twitter_url": {
"description": "X/Twitter profile URL (optional)",
"maxLength": 200,
"type": "string"
},
"website_url": {
"description": "Product homepage, https, on its own domain",
"maxLength": 500,
"type": "string"
}
},
"required": [
"title",
"tagline",
"category",
"description",
"website_url"
],
"type": "object"
},
"name": "submit_project",
"outputSchema": {
"properties": {
"badgeSnippet": {
"description": "HTML that earns a dofollow link once verified with check_badge",
"type": "string"
},
"claimToken": {
"description": "Pass to get_submission_status",
"type": "string"
},
"claimUrl": {
"description": "The human must open this to publish the listing",
"type": "string"
},
"expiresAt": {
"description": "ISO date after which the draft is discarded",
"type": "string"
}
},
"required": [
"claimUrl",
"expiresAt",
"claimToken",
"badgeSnippet"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:c68d1a3051d7cd11e7713830e78c5f52ba4cf626a7ee549ba07f9ca884b05844 | sha256sum