{"name":"online.sellular/sellular","slug":"sellular","title":"Sellular","description":"Track where your product is listed, score its AI search visibility, and audit a domain's SEO.","url":"https://mcp.market/server/sellular","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce","seo","search"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T19:56:13.763Z","last_ok_at":"2026-09-19T19:56:13.763Z","latency_ms":532},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://sellular.online","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://sellular.online/api/mcp/mcp"}],"packages":[],"tools":[{"name":"bulk_scan","description":"Scan up to 10 public domains in one call: for each domain, the Sellular visibility score (0-100, A-F) and whether llms.txt exists, plus directory opportunities. Returns partial results with a per-domain error instead of failing the whole batch. Debits the rate limiter once per domain (results cache 24h per domain). Use for outreach research across a prospect list.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domains":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","minLength":3},"description":"1-10 domains or full URLs to scan."}},"required":["domains"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"check_submission_readiness","description":"Check what is missing before one of the connected account's products can be submitted to directories, WITHOUT generating a full kit: per directory, every required field is reported as present, derived (with its source, e.g. site favicon or og:image), or missing (with the fix), plus one deduped list of blockers and the recorded done/pending/remaining progress. Read-only. Account-scoped: requires the MCP_API_KEY bearer token. Use to answer 'what is missing' or 'where should submissions start' before doing any submission work.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product":{"description":"Product id, name or domain to look up (substring match). Optional when the account has one product.","type":"string"},"directory_name":{"description":"Filter to one directory by name (substring match), e.g. 'G2'.","type":"string"},"limit":{"default":71,"description":"Max directories to check, sorted by domain authority.","type":"integer","minimum":1,"maximum":71}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"compare_visibility","description":"Score 2-5 public websites and rank them by visibility score, side by side, each with grade and its top strengths/weaknesses. Use to benchmark a site against competitors and explain who wins and why.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"urls":{"minItems":2,"maxItems":5,"type":"array","items":{"type":"string","minLength":3},"description":"2-5 domains or full URLs to compare."}},"required":["urls"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"generate_llms_txt","description":"Generate a ready-to-use llms.txt file body (the AI-discoverability manifest) for a public website, built from its fetched metadata: site name, description and key pages. Returns the text to serve at the site root as /llms.txt. If you are an agent working inside the site's source repository, write the file there yourself (public/llms.txt in Next.js, the web root otherwise) and review the Key Pages list before shipping. Use when a site fails the llms.txt check and the user wants one made.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","minLength":3,"description":"A domain (example.com) or full URL to generate llms.txt for."}},"required":["url"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"generate_review","description":"Generate a competitor review article for one of your apps, named by its website (product_url, e.g. \"sparkmobile.dev\") or its id. Asks you to confirm the website and optionally name its rivals, then runs live competitor research (Tavily), writes the article and (optionally) builds a head-to-head comparison table. Returns a preview link and the name of the editor it is waiting on. The article is NEVER published by this tool: it is submitted to a Sellular editor for approval (the editor is emailed) and only goes live at /reviews/[slug] once that editor approves it. Requires a paid plan (starter+) and counts against the monthly review generation quota. Authenticate with either your product API key (Dashboard -> Analytics -> API key), which names the product on its own, or the admin key plus product_id. TO WRITE THE ARTICLE YOURSELF: call once with brief_only=true to get the researched feature matrix and the full writing brief, then call again passing your article as `draft`. That skips the built-in writer entirely and is the better article, because you are already holding the comparison. The editor approval step is identical either way. TO DRAFT WITHOUT SUBMITTING: add hold_as_draft=true and the article is saved as a dashboard draft instead, with no editor involved; the owner reads it at the dashboard and submits it from there when happy.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"include_comparison":{"default":true,"description":"Include the head-to-head comparison table (research runs either way).","type":"boolean"},"product_id":{"description":"Which product to review, by id. Ignored with a product API key. Prefer product_url, which is how people name their own app.","type":"string"},"product_url":{"description":"Which product to review, by website, e.g. \"sparkmobile.dev\". Matched by domain against the products on the account, ignoring www and the scheme. Ignored with a product API key.","type":"string"},"brief_only":{"default":false,"description":"Research only: return the competitors, the verified feature matrix and the full writing brief, and write nothing. Nothing is saved, no quota is spent and no editor is involved. Follow it with a second call passing `draft`.","type":"boolean"},"rivals":{"description":"Competitors to compare against, comma separated, instead of whatever a live search turns up. You know your own market better than a listicle does.","type":"string"},"fills":{"description":"Answers for rows the research could not confirm from your site, as {\"Feature name\": \"value\"}, e.g. {\"MCP tools\": \"Yes\"}. Authoritative: you know whether you ship the thing, and a dash next to three ticks reads as a missing feature rather than a missing fact. Use the row names exactly as they come back from brief_only.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"research":{"description":"The extracted research JSON, when a previous call handed you the extraction prompt instead of running it. This server never calls an AI model on your behalf: you are the model. Pass back exactly the JSON object the prompt asked for.","type":"string"},"draft":{"description":"Your article, written from a brief_only call. Supplying it skips the built-in writer: the comparison table, the strengths and weaknesses cards, the quality score and the editor hand-off all run exactly as they otherwise would. Prose fields together should run 320 to 480 words.","type":"object","properties":{"title":{"default":"","type":"string"},"summary":{"default":"","type":"string"},"verdict":{"default":"","type":"string"},"insights":{"default":"","type":"string"},"overview":{"default":"","type":"string"},"keyDifference":{"default":"","type":"string"},"strengths":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"weaknesses":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"budget":{"default":"","type":"string"},"bottomLine":{"default":"","type":"string"}}},"hold_as_draft":{"default":false,"description":"Save the article as a dashboard draft and stop: no editor is picked, nobody is notified. The owner reviews it at the dashboard (Reviews view) and submits it from there, where the same publish benchmark applies. Still spends the generation (one review per app), so use it when a human should read the article before any editor does.","type":"boolean"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"generate_seo_fixes","description":"Turn a public site's failing SEO / AI-discoverability checks into ready-to-apply fixes: complete file bodies (robots.txt, sitemap.xml, llms.txt, security.txt, manifest.json) and HTML head snippets (meta description, Open Graph, Twitter card, canonical, JSON-LD), each with where it belongs in the source tree (Next.js locations named). Built for coding agents working inside the site's own repository: write the files, insert the snippets, replace the TODOs, deploy, then re-run seo_audit_summary to verify. Read-only on Sellular's side; the tool itself writes nothing. Run seo_audit_summary first when you only want the diagnosis.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","minLength":3,"description":"A domain (example.com) or full URL to build fixes for."}},"required":["url"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"generate_submission_kit","description":"Build ready-to-paste directory submission copy for one of the connected account's products: name, tagline, length-appropriate descriptions, category and pricing mapped to each directory's own field names and char limits, plus per-directory prep requirements (screenshots, video), resolved assets with provenance, blockers (e.g. missing logo) and recorded done/pending/remaining progress. `fields`/`copyText` contain ONLY pasteable values; prep instructions live in `requirements`. Read-only formatter: it does NOT submit anything anywhere. Account-scoped: requires the MCP_API_KEY bearer token. Use when preparing directory submissions without opening the dashboard.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product":{"description":"Product id, name or domain to look up (substring match). Optional when the account has one product.","type":"string"},"directory_name":{"description":"Filter to one directory by name (substring match), e.g. 'Product Hunt'.","type":"string"},"limit":{"default":10,"description":"Max directories to return, sorted by domain authority.","type":"integer","minimum":1,"maximum":71},"remaining_only":{"default":false,"description":"Return only directories with no recorded submission yet, i.e. the outstanding to-do list. Applied before `limit`, so `limit: 1` with this set yields the single highest-DA directory still to do. Use it to walk submissions one at a time without re-reading the ones already done.","type":"boolean"},"signed_out":{"description":"Directory names the session sweep found signed out, dropped from the result and echoed back in `skippedSignedOut`. Probe first with `browserControl.sessionProbe`, then pass what failed: the kit returns only what can be worked on now, so a run proceeds on the valid sessions instead of stalling on the locked ones.","type":"array","items":{"type":"string"}},"automation":{"description":"Filter by how the form can be driven, measured by loading it in a real browser: 'open' fills with no account, 'login' needs the owner signed in first, 'walled' serves a bot challenge and cannot be automated at all. Pass 'open' to get only the directories an agent can fill right now. Every entry also carries `automation` and a `howToFill` instruction, so the walled ones can be handed to the Sellular Chrome extension instead of being retried.","type":"string","enum":["open","login","walled","manual"]}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_listing_badge","description":"Get the ready-to-paste Sellular badge embed for one of the connected account's products, as HTML (also valid JSX as-is) and as Markdown. One embed per product: the image auto-upgrades to whichever tier the product currently holds (listed, editor's pick, top rated, or the paid featured slot while it runs), so it is pasted once and never replaced; never pin a width on it. The badge's link resolves per click too: the product's featured article while a paid feature window runs, its page in the Sellular directory otherwise, where visitors read and leave reviews. The tool itself edits nothing: if you are an agent working inside the product's source repository, add the snippet to the landing page header or footer yourself, next to any other trust badges, keeping the link and alt text intact; otherwise hand it to the developer. Account-scoped: requires the MCP_API_KEY bearer token.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product":{"description":"Product name or domain to look up (substring match). Optional when the account has one active product.","type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_product_analytics","description":"Get visitor analytics for one of the connected account's products: views and unique visitors for the last 7 days, 30 days and all time, plus published/draft review counts. Read-only. Account-scoped: requires the MCP_API_KEY bearer token. Use when asked how a tracked product's traffic is doing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product":{"description":"Product name or domain to look up (substring match). Optional when the account has one product.","type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_visibility_score","description":"Get the Sellular visibility score (0-100, graded A-F) for a public website by domain or URL. Measures SEO and AI-discoverability signals (meta tags, sitemap, llms.txt, structured data, etc.). Use when asked how discoverable or SEO-ready a site is.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","minLength":3,"description":"A domain (example.com) or full URL to score."}},"required":["url"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_directory_listings","description":"List curated directories a product can submit to, sorted by domain authority. Optionally filter by product category (e.g. 'saas', 'ai', 'tools', 'dev'). Reference data only, read-only: this does NOT submit anything. Use to suggest where a product should get listed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"description":"Product category to filter by, e.g. 'saas', 'ai', 'tools'.","type":"string"},"limit":{"default":25,"type":"integer","minimum":1,"maximum":71}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_my_reviews","description":"List the review articles across every product you own, newest first, with their editorial status (draft, pending_review, published, rejected), editor notes and public URL once live. Use to check what happened to a generated review. Authenticate with either your product API key (Dashboard -> Analytics -> API key) or the admin key; both list the whole account, since a review belongs to the owner rather than to one product.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"description":"Filter by editorial status.","type":"string","enum":["draft","pending_review","published","rejected"]},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_product","description":"Put one of your tracked products in the Sellular community directory, or refresh the card it already has from the product's current name, tagline, description and category. The card is a public page at sellular.online/community/<domain> where people can read about the product and leave reviews, and it is what the Sellular badge links to. Idempotent per domain: calling it again updates that one card instead of adding a rival to it, and nothing is ever deleted. Only products the account already tracks can be listed, because the directory's claim is that each card belongs to whoever made the thing: run track_product first for anything missing. Account-scoped: requires the MCP_API_KEY bearer token, and asks you to confirm before writing.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"product":{"description":"Product id, name or domain (substring match). Optional when the account tracks one product.","type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_public_listings","description":"List public community listings on Sellular, with optional category or search filter. Read-only. Use to browse products already listed in the community directory.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"type":"string"},"search":{"description":"Match against listing name or tagline.","type":"string"},"limit":{"default":25,"type":"integer","minimum":1,"maximum":100}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_tracked_sites","description":"List the sites/products tracked on the connected Sellular account (products and listings), including type, category, status and whether the Sellular badge is verified. Read-only. Account-scoped: requires the MCP_API_KEY bearer token and MCP_ACCOUNT_EMAIL to be configured.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"record_submission","description":"Record that one of your tracked products has been submitted to a directory, so check_submission_readiness and generate_submission_kit stop listing it as remaining and you never re-submit the same place twice. Status is 'submitted' (done or live), 'pending' (waiting on their review) or 'rejected' (turned down). Optionally store the live listing URL and a note. Idempotent per product+directory: recording the same directory again updates that record rather than adding another, and nothing is ever deleted. This does NOT submit anything anywhere; it only records what you did. Account-scoped: requires the MCP_API_KEY bearer token, and asks you to confirm before writing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"directory_name":{"type":"string","minLength":2,"description":"Directory from the Sellular catalog, e.g. \"Product Hunt\". A unique partial name works (\"hunt\"); check names with list_directory_listings."},"product":{"description":"Product id, name or domain (substring match). Optional when the account tracks one product.","type":"string"},"status":{"default":"submitted","description":"'submitted' = done or live, 'pending' = awaiting their review, 'rejected' = turned down.","type":"string","enum":["submitted","pending","rejected"]},"listing_url":{"description":"The live listing URL on that directory, once there is one.","type":"string"},"note":{"description":"Anything worth remembering, e.g. why it was rejected or when to resubmit.","type":"string"}},"required":["directory_name"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"scan_domain","description":"One-call visibility audit for a public website: Sellular visibility score (0-100, A-F), whether llms.txt exists (root or .well-known), tracked directories with no known listing for the domain (submission opportunities, not verified absences), and a better-scoring same-category competitor when one is known. Read-only; results cached 24h per domain. Use when asked to audit or size up a site's overall discoverability in one shot.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","minLength":3,"description":"A domain (example.com) or full URL to scan."}},"required":["domain"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"seo_audit_summary","description":"Run a read-only SEO / AI-discoverability audit on a public URL. Returns the passing and failing checks, with failures sorted by impact (biggest score wins first) so you can recommend what to fix. Use after get_visibility_score to explain a low score.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","minLength":3,"description":"A domain or full URL to audit."}},"required":["url"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"track_product","description":"Start tracking one of your products on the connected Sellular account, so the account-scoped tools can work on it: check_submission_readiness, generate_submission_kit, get_product_analytics and record_submission all refuse to run for a product that is not tracked. Idempotent by website: calling it again for a site already tracked UPDATES that entry (name, category, tagline, description) instead of creating a duplicate, so it is safe to retry. Never deletes anything. Account-scoped: requires the MCP_API_KEY bearer token, and asks you to confirm before writing. Use when a product is missing from list_tracked_sites.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Product name as it should appear, e.g. \"QuickPeek\"."},"url":{"type":"string","minLength":3,"description":"The product website, e.g. \"quickpeek.co\". This is the identity: the same site twice updates one entry rather than adding two."},"type":{"default":"saas","description":"\"saas\" for a subscription web app, \"product\" for a one-off or downloadable.","type":"string","enum":["saas","product"]},"category":{"description":"Category used for directory matching and community filters.","type":"string","enum":["Business","Developer Tools","AI","Mobile App","E-commerce","Marketing","Social Media","Productivity","Design","Analytics","Finance","Education","Health & Fitness","Lifestyle","Entertainment","Travel & Hospitality","Food & Delivery","Security & Privacy","Communication","HR & Recruitment","Real Estate","Other"]},"tagline":{"description":"One line, under ~60 chars. Used as the short field on directory forms.","type":"string"},"description":{"description":"A sentence or two on what it does and who it is for. Directory submission copy is built from this, so a thin one produces thin listings.","type":"string"}},"required":["name","url"],"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-19T19:46:08.733Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:46:08.675Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1139ms"]},"poisoning":{"score":15,"max":15,"notes":["19 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://sellular.online/api/mcp/mcp","reachable":true,"authRequired":false,"latencyMs":1139,"serverInfo":{"name":"sellular","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://sellular.online/favicon.ico","source":"registry","width":256,"height":256},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}