Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,528Letters: 13Defects: 1,322counted 1 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:c68d1a3051d7cd11e7713830e78c5f52ba4cf626a7ee549ba07f9ca884b05844 | sha256sum