# BLUEPRINT: StackApps [MCP] # Version: 3.1.3 # URL: https://stackapps.app # Updated: 2026-05-27 ## IDENTITY name: StackApps description: Open-source twelve-signal AI & crawl readiness audit with an optional human-moderated public registry (The Stackhouse) for browser-ready indie apps. Approved live apps receive a dofollow backlink, embeddable SVG badge, and a Bronze/Silver/Gold Site Readiness scan (reachable, llms.txt, robots, sitemap, FAQ, blueprint, MCP, CLI, Android PWA, iOS PWA, service worker, viewport). category: developer-tools contact: support@stackapps.app ## SUMMARY tagline: Free AI & crawl readiness audit — curated proof on The Stackhouse. audience: Indie developers and SaaS builders who want their apps discoverable by AI agents and ranked in AI-powered search. capabilities: - run-public-scan: Run the free twelve-signal Site Readiness scan on any public URL - browse-apps: Browse and search The Stackhouse public registry without signing in - submit-app-listing: Submit an app for human moderation and receive a dofollow backlink - view-app-details: Open a listing's interactive detail page with scan results and reviews - rerun-readiness-scan: Re-run the Site Readiness scan for an owned live-approved app - embed-badge: Retrieve the embeddable SVG badge for a verified listing ## AUTH provider: firebase methods: email-password, oauth-google ### UI (email-password) steps: 1. NAVIGATE /login 2. WAIT [data-agent-id="login-heading"] (max: 15s) 3. INPUT [data-agent-id="login-email"] <> 4. INPUT [data-agent-id="login-password"] <> 5. CLICK [data-agent-id="login-email-submit"] 6. WAIT [data-agent-id="hub-heading"] (max: 15s) 7. VERIFY url == "/hub" ## MCP server: stackapps-mcp preferred-transport: stdio install: npx stackapps-mcp ### TRANSPORT (stdio) command: npx stackapps-mcp ### TOOLS - readiness_scan: Run the twelve-signal Site Readiness scan on any public URL. input: { "url": "https://yourapp.com" } output: JSON with twelve boolean checks, score, and tier ## ACCESS preferred: mcp last-resort: ui ## CAPABILITY: run-public-scan description: Run the free twelve-signal Site Readiness scan on any public URL. No sign-in required. One scan per domain (results are cached). input: - name: url type: string required: true description: Full https:// URL to scan. output: - type: json description: Twelve boolean checks, score, and Bronze/Silver/Gold tier auth-required: false scope: read-only ### MCP tool: readiness_scan ### UI steps: 1. NAVIGATE /scan 2. WAIT [data-agent-id="public-scan-input"] (max: 10s) 3. INPUT [data-agent-id="public-scan-input"] <> 4. CLICK [data-agent-id="public-scan-submit"] 5. WAIT [data-agent-id="scan-results"] (max: 30s) 6. VERIFY selector_exists [data-agent-id="scan-results"] ## CAPABILITY: browse-apps description: Browse and search The Stackhouse public registry without signing in. input: - name: search-query type: string required: false - name: category type: string required: false - name: sort type: string required: false description: newest or rating output: - type: json description: List of app listings matching the query auth-required: false scope: read-only ### UI steps: 1. NAVIGATE /dashboard 2. WAIT [data-agent-id="dashboard-heading"] (max: 15s) 3. VERIFY text_contains [data-agent-id="dashboard-heading"] "The Stackhouse" 4. INPUT [data-agent-id="directory-search"] <> 5. SELECT [data-agent-id="directory-category"] "<>" 6. SELECT [data-agent-id="directory-sort"] "<>" 7. VERIFY selector_exists [data-agent-id="directory-grid"] Note: Run steps 4–6 only when the matching input is provided. ## CAPABILITY: sign-in description: Sign in with Firebase using email and password. input: - name: email type: string required: true - name: password type: string required: true output: - type: redirect description: Redirects to /hub on success auth-required: false scope: form-submit ### UI steps: 1. NAVIGATE /login 2. WAIT [data-agent-id="login-heading"] (max: 15s) 3. INPUT [data-agent-id="login-email"] <> 4. INPUT [data-agent-id="login-password"] <> 5. CLICK [data-agent-id="login-email-submit"] 6. WAIT [data-agent-id="hub-heading"] (max: 15s) 7. VERIFY url == "/hub" ## CAPABILITY: view-app-details description: Open a listing's interactive detail page showing description, category, site readiness scan results, reviews, and launch link. For the crawler-visible SSR page use stackapps.app/apps/[slug] instead. input: - name: app-id type: string required: true description: Firestore document id of the app (used in /app/:id). output: - type: json description: App detail data including scan results, ratings, and badge status auth-required: false scope: read-only ### UI steps: 1. NAVIGATE /app/<> 2. WAIT [data-agent-id="app-detail-name"] (max: 15s) 3. VERIFY selector_exists [data-agent-id="app-detail-name"] 4. VERIFY selector_exists [data-agent-id="app-detail-description"] 5. VERIFY selector_exists [data-agent-id="app-detail-launch"] 6. VERIFY selector_exists [data-agent-id="readiness-scan-section"] ## CAPABILITY: submit-app-listing description: From the signed-in hub, submit a new app listing for moderation. When approved as live, the app receives a dofollow backlink, embeddable badge, and twelve-signal Site Readiness scan. input: - name: app-name type: string required: true - name: app-url type: string required: true - name: description type: string required: true - name: category type: string required: false description: productivity, finance, design, marketing, communication, developer-tools, ecommerce, media, legal, or health - name: tags type: string required: false description: Comma-separated tags. - name: thumbnail-file type: file required: false output: - type: redirect description: Returns to /hub with new listing visible in My Projects auth-required: true scope: form-submit permissions: - data: write ### UI steps: 1. ASSERT-AUTH 2. NAVIGATE /hub 3. WAIT [data-agent-id="hub-heading"] (max: 15s) 4. CLICK [data-agent-id="hub-submit-new-app"] 5. WAIT [data-agent-id="listing-name"] (max: 10s) 6. INPUT [data-agent-id="listing-name"] <> 7. INPUT [data-agent-id="listing-url"] <> 8. INPUT [data-agent-id="listing-description"] <> 9. INPUT [data-agent-id="listing-category"] <> 10. INPUT [data-agent-id="listing-tags"] <> 11. CLICK [data-agent-id="listing-submit"] 12. WAIT 15s 13. VERIFY selector_exists [data-agent-id="hub-my-projects"] Note: When <> is provided, run UPLOAD [data-agent-id="listing-thumbnail-file"] <> after step 10 and before step 11. ## CAPABILITY: rerun-readiness-scan description: Re-run the Site Readiness scan for a live-approved app owned by the signed-in builder. Limited to once every 24 hours per app. input: - name: app-id type: string required: true output: - type: json description: Updated twelve-signal scan results auth-required: true scope: form-submit permissions: - data: write ### UI steps: 1. ASSERT-AUTH 2. NAVIGATE /hub 3. WAIT [data-agent-id="hub-my-projects"] (max: 15s) 4. CLICK [data-agent-id="rescan-button-<>"] 5. WAIT [data-agent-id="hub-my-projects"] (max: 60s) ## CAPABILITY: embed-badge description: Retrieve the embeddable SVG badge for a listing. The SVG text "StackApps Verified ✓" means live and moderation-approved. The badge image is also directly accessible at stackapps.app/api/badge/<>.svg without auth. input: - name: app-id type: string required: true output: - type: file description: SVG badge image for embedding on the app's own site auth-required: true scope: read-only ### UI steps: 1. ASSERT-AUTH 2. NAVIGATE /app/<> 3. WAIT [data-agent-id="badge-embed-section"] (max: 15s) 4. VERIFY selector_exists [data-agent-id="badge-embed-section"] # REFERENCE — data-agent-id attribute index # Home.tsx # data-agent-id="home-browse-stackhouse" Link "Browse The Stackhouse" (hero) # data-agent-id="home-browse-more" Link "Browse the full Stackhouse" # Dashboard.tsx # data-agent-id="dashboard-heading" h1 title # data-agent-id="directory-search" search Input # data-agent-id="directory-category" category SelectTrigger # data-agent-id="directory-sort" sort SelectTrigger # data-agent-id="directory-grid" grid wrapper around AppCard list # Scan.tsx (public free scan) # data-agent-id="public-scan-input" URL input # data-agent-id="public-scan-submit" Run scan button # data-agent-id="scan-results" Results section # Login.tsx # data-agent-id="login-heading" h1 # data-agent-id="login-email" email Input # data-agent-id="login-password" password Input # data-agent-id="login-email-submit" submit Button # data-agent-id="login-toggle-signup" toggle sign-up/sign-in Button # Hub.tsx # data-agent-id="hub-heading" h1 "My Apps" # data-agent-id="hub-submit-new-app" "Submit New App" Button # data-agent-id="hub-my-projects" My Projects list container # data-agent-id="listing-name" form name Input # data-agent-id="listing-url" form app URL Input # data-agent-id="listing-description" form description Textarea # data-agent-id="listing-category" form category Input # data-agent-id="listing-tags" form tags Input # data-agent-id="listing-submit" form submit Button # data-agent-id="listing-cancel" form cancel Button # data-agent-id="request-live-review-" Request Live Review Button (dynamic) # data-agent-id="rescan-button-" Re-run scan Button (dynamic) # ImageUpload.tsx # data-agent-id="listing-thumbnail-file" hidden file input # AppDetails.tsx # data-agent-id="app-detail-name" h1 app name # data-agent-id="app-detail-description" description paragraph # data-agent-id="app-detail-launch" "Launch App" anchor # data-agent-id="readiness-scan-section" Site Readiness scan section # data-agent-id="badge-embed-section" Badge embed section (owner only)