# Product Hunt [Official] [Health: Active]

**Category:** 🎯 Marketing  
**Repository:** https://www.producthunt.com/mcp/install  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/product-hunt

## Description
Official Product Hunt MCP server. Research launches, compare alternatives, browse leaderboards and categories, and draft, check, schedule and edit your own Product Hunt launch from your AI tools. Remote Streamable HTTP server; sign in with Product Hunt, no API key.

## Tools
Capabilities this server exposes over MCP:

- **get_my_account** — Return the authenticated Product Hunt account identity.
- **get_launch_context** — Read composer limits, account eligibility, midnight-Pacific date availability, the existing product a link belongs to, your matching draft, and bounded topic/category/maker/funding backer/shoutout product suggestions. With no product, the launch is a new product and needs no product question. Availability is a snapshot, not a reservation.
- **list_my_launches** — List launches you own or manage as hunter, maker, or active product team member, most recently changed first. status is draft (not submitted), unscheduled, scheduled, or live. Read one with get_launch and its launch_id. permitted_actions lists the tools and website editing that apply to each item; the write tools appear only when this connection can edit launches.
- **get_launch** — Read a launch you own or manage as its hunter, maker, or active product team member, by a launch_id from list_my_launches or a launch tool. status is draft (not submitted), unscheduled, scheduled, or live: until its launch day starts a launch is visible only to you and its makers, and once live every change is public. values are the launch's current content. assessment lists what still needs a change or a decision, the launch programs (contests, Hypership) open on its launch day, and investor questions with their prompt IDs; resolution options are alternatives and suggestions are optional. When discussing a launch, briefly surface relevant assessment suggestions alongside the requested information, without waiting for the user to ask about each field. Clearly distinguish optional improvements from blockers. Suggest a next step, but get permission before making changes. editable_fields names the fields that can still change. revision identifies this version; pass it as expected_revision to update_launch. You are a maker when makers lists you. prepared_assets lists the 50 most recently prepared images for this launch. url opens it on the website. When the user wants to make an edit there themselves, link the matching editable_section_urls entry, which opens that panel: media (images, video, demo), company_info (company, funding and team details on a draft), or investor_questions. It lists only sections the website offers this user for this launch; otherwise link url.
- **open_launch_editor** — Show the user a launch as its Product Hunt page, in an editor where they can change it themselves. Call it when the user wants to see their launch or edit it themselves, not to read it for yourself (use get_launch). Opening it changes nothing. The result is the launch as get_launch reads it. Edits the user saves there go through update_launch, so the launch's revision may change; read it again before your next update_launch.
- **get_launch_preview_view** — For the launch preview app only: the launch as the website composer renders it, with changes that are previewed but not applied yet.
- **start_launch** — Start a launch for a product link, or resume your existing unsubmitted launch for the same link and product choice without changing it (created: false). Omit product_choice for a new product; nothing needs confirming. Only when get_launch_context finds an existing product for the link, ask the user whether this launch belongs to it, then send product_choice "existing" with its product_id; a link that belongs to an existing product is refused as new. values uses the same fields as update_launch changes, except images, which are prepared for the returned launch_id. The launch starts as a private draft: starting it never submits, schedules or enrolls it. The result is the launch as get_launch reads it. If the outcome is unknown, retry the identical request with the same idempotency_key; a retry returns the original launch.
- **update_launch** — Change a launch you own or manage, at any status. A draft is private: every draft change, including added makers, applies directly (outcome applied), even when incomplete, and never submits, schedules or enrolls it. Once submitted, public changes, moving the launch's day, and notifying added makers return outcome needs_confirmation without changing anything; whether an edit is public cannot be predicted, since even a not-yet-live launch can change a public product page. Show the preview, reasons and side_effects, get explicit user approval, then resend with confirmation_token and without preview. A token proves a preview was returned, not user approval: never send one the user did not approve. Use preview true only when the user wants to inspect an edit before deciding whether to make it. If they already requested draft edits and want a submission preview or say not to submit yet, save the edits, then call submit_launch without a token to preview the complete submission. Change only get_launch editable_fields. On revision_conflict, nothing changed: reread the launch, preserve the user's requested changes, ask about competing edits, and send only those changes.
- **submit_launch** — Submit a launch with status draft so it is scheduled for its launch day; without launchDate it is created unscheduled and is not public until update_launch sets one. This always takes two calls. Without confirmation_token (an empty one counts as omitted), or with preview true, nothing is submitted: the result is outcome needs_confirmation with preview.submit, the complete submission as Product Hunt would carry it out (the resolved product, launch day, public content and links, final launch tags, makers, images, first comment, shoutouts with their notes and ratings, funding, company, investor answers, contest and launch-program choices and product page edits), side_effects listing what it does and what becomes public, warnings for optional gaps, and a confirmation_token valid for 15 minutes. If something blocks submission the result is validation_failed; fix it with update_launch first. Show the user the preview, get their explicit confirmation, then call again with confirmation_token: the launch is created and every listed side effect happens, such as adding makers, posting the first comment, publishing shoutout reviews, entering programs and notifying followers. The token records which preview was returned, not that the user approved it; if the launch, its launch day's availability, permissions or assets changed since, nothing is submitted and the result is confirmation_invalid. A submitted launch's launch_id becomes its numeric ID. If the outcome is unknown, retry the identical request with the same idempotency_key: a retry returns the launch, even after the token expires.
- **prepare_launch_asset** — Stage a thumbnail or gallery image for a launch you own or manage, by launch_id, without changing displayed images or the launch revision. Images are PNG, JPEG, WebP or GIF up to 10 MB, 10000 pixels per side and 40 megapixels. Provide the bytes one of three ways. (1) source_url: the image is already at a public URL. (2) Otherwise, for a local file, prefer the upload: call without source_url or content, then POST the file as multipart field file to upload.url on www.producthunt.com with upload.headers before upload.expires_at, for example curl -X POST -H "Authorization: Bearer <upload ticket>" -F file=@image.png <upload.url>. The ticket covers only this asset; never send this connection's own token there. (3) content: only when you cannot reach www.producthunt.com, send the file's bytes base64-encoded, no data: prefix, encoded from the file by a tool such as base64. This server accepts up to 3 MB but your client may allow less; if it rejects the call, send a smaller image. Retry with the same idempotency_key to get the same asset, a fresh ticket, or another try at content after a failure; a ready asset accepts only its same bytes. Attach ready assets with update_launch thumbnailAssetId or ordered galleryAssetIds for the same launch_id; staging is not attachment or submission.
- **submit_feedback** — Send feedback about the Product Hunt MCP to the Product Hunt team. Call only when the user explicitly asks you or approves requests to do so. Encourage the user to leave feedback when a tool or upload fails, results are wrong or confusing, a capability is missing, or a step needs a workaround, unless they've previously declined. Never include secrets or personal details about anyone.
- **get_categories** — List all available Product Hunt categories with their slugs. - When to use: When you need to find the right category_slug for get_products or search_launches, or when the user asks what categories Product Hunt has, or wants to browse available topics. - Returns: All searchable categories organised by parent/child hierarchy with slugs. Use the slug values directly in get_products(category_slug) or search_launches(category_slug).
- **get_products** — Get top-rated or recently launched products in a Product Hunt category.

When to use: "best [topic] tools", "top [topic] apps", "find me a [topic] app",
"top open source [topic] tools", "best free [topic] apps".

Filters use named no-op defaults:
  pricing:     "any" | "free" | "free_options" | "payment_required"   (default "any")
  open_source: "any" | "open_source_only"                              (default "any")

Pick a non-default sentinel ONLY when the user said the matching constraint.

Worked example calls:
  User: "best note-taking apps"
  CALL: { "category_slug": "notes-documents" }

  User: "best free note-taking apps"
  CALL: { "category_slug": "notes-documents", "pricing": "free" }

  User: "top open source CRM tools"
  CALL: { "category_slug": "crm", "open_source": "open_source_only" }

  User: "newest graphic design apps"
  CALL: { "category_slug": "graphic-design-tools", "order": "recent_launches" }

Returns: Products with names, ratings, taglines, categories, and links in an
interactive carousel.

- **find_alternatives** — Find alternative products to a given product.

When to use: "alternatives to [product]", "apps like [product]",
"[product] competitors", "what can I use instead of [product]?".

Filters use named no-op defaults:
  pricing:      "any" | "free" | "free_options" | "payment_required"        (default "any")
  open_source:  "any" | "open_source_only"                                   (default "any")
  recency:      "all_time" | "today" | "this_week" | "this_month" |
                "this_quarter" | "this_year"                                 (default "all_time")
  tags:         array of feature-tag strings                                 (default [])

"any" / "all_time" / [] mean no filter. Pick those whenever the user did
not state a matching constraint. Do NOT infer a filter from properties
of the named product itself — Notion is freemium and productivity-tagged,
but "alternatives to Notion" does NOT mean pricing="free_options" or
tags=["productivity"]. The user did not ask for those filters.

Worked example calls:
  User: "alternatives to notion"
  CALL: { "product_name": "notion" }

  User: "good notion alternatives"
  CALL: { "product_name": "notion" }

  User: "free notion alternatives"
  CALL: { "product_name": "notion", "pricing": "free" }

  User: "open-source alternatives to figma"
  CALL: { "product_name": "figma", "open_source": "open_source_only" }

  User: "recently launched alternatives to mailzenio"
  CALL: { "product_name": "mailzenio", "recency": "this_month" }

  User: "highest rated zapier alternatives"
  CALL: { "product_name": "zapier", "order": "highest_rated" }

  User: "self-hosted alternatives to slack"
  CALL: { "product_name": "slack", "tags": ["self-hosted"] }

Returns: Similar products with ratings, categories, and relevance scores
in an interactive carousel.

- **get_product_profile** — Get detailed information about a product including description, makers, categories, social links, pricing, ratings, review highlights, a company object (YC batch, founded date, team size, operating status), a funding object (total raised, latest round, notable investors), and series_a_band when the latest launch ranks in the top bands of Product Hunt's Series A forecast. - When to use: "tell me about [product]", "what is [product]?", "who made [product]?", "give me info on [product]", or wants a comprehensive overview of a specific product. - Args: product_name (name or slug). - Returns: Full profile with reviews, rating, sentiment, company, and funding details.
- **search_launches** — Search recent product launches on Product Hunt.

When to use: "what's new?", "latest AI launches", "trending products this week",
"new tools launched today", "new YC startups", "open source products launched
this week", "free AI tools", "paid AI tools launched recently".

Filters use named no-op defaults:
  pricing:     "any" | "free" | "free_options" | "payment_required"   (default "any")
  open_source: "any" | "open_source_only"                              (default "any")
  yc:          "any" | "yc_only"                                       (default "any")

Pick a non-default sentinel ONLY when the user said the matching constraint.
days_ago accepts 1–365 days (default 30); pass it explicitly when the
user named a time window.

query matches launch names and taglines literally. To find products by what
they do ("tools that summarize meetings"), use semantic_product_search instead.

Worked example calls:
  User: "what's new on product hunt this week"
  CALL: { "days_ago": 7 }

  User: "latest AI agent launches"
  CALL: { "category_slug": "ai-agents", "days_ago": 7 }

  User: "new YC startups"
  CALL: { "yc": "yc_only" }

  User: "open source launches this month"
  CALL: { "open_source": "open_source_only", "days_ago": 30 }

  User: "free AI coding agents launched recently"
  CALL: { "category_slug": "ai-coding-agents", "pricing": "free" }

Returns: Recent launches with date, makers, ratings, YC status, and links in an
interactive carousel.

- **semantic_product_search** — Search Product Hunt products by natural-language topic or use case using vector
similarity.

When to use: The user describes what they want without naming a category or
product. Prefer get_products when the user asks for a category and
find_alternatives when they name a specific product.

Filters use named no-op defaults:
  pricing:      "any" | "free" | "free_options" | "payment_required"        (default "any")
  open_source:  "any" | "open_source_only"                                   (default "any")
  recency:      "all_time" | "today" | "this_week" | "this_month" |
                "this_quarter" | "this_year"                                 (default "all_time")

"any" / "all_time" mean no filter. Pick those whenever the user did not
state a matching constraint in their message. Do NOT infer a filter from
properties of the query topic.

Worked example calls:
  User: "tools for managing claude code sessions"
  CALL: { "query": "manage claude code sessions" }

  User: "free AI screen recorders"
  CALL: { "query": "ai screen recorder", "pricing": "free" }

  User: "open source meeting note summarizers"
  CALL: { "query": "summarize meeting notes", "open_source": "open_source_only" }

  User: "AI agents launched this month"
  CALL: { "query": "ai agent", "recency": "this_month" }

  User: "freemium analytics tools launched this year"
  CALL: { "query": "analytics tools", "pricing": "free_options", "recency": "this_year" }

Do not bake an attribute or recency constraint into the query string when
a filter exists for it.

Returns: Semantically similar products with ratings, categories, and relevance
scores in an interactive carousel.

- **get_leaderboard** — Get the ranked Product Hunt leaderboard for a specific day, week, month, or year. - When to use: The user asks "what won on [date]?", "top launches in [week/month/year]", "#1 product on [date]", "Product Hunt winners for [period]", or wants the official ranking for a past or recent day, week, month, or year. - Args: date (required; YYYY-MM-DD for a day, YYYY-Www for an ISO week, YYYY-MM for a month, or YYYY for a year), limit (default 5, max 8). - Returns: Top-ranked products for that period with their rank, votes, makers, ratings and links in an interactive carousel.
- **find_investable_startups** — Find launches from a date window that Product Hunt's proprietary model ranks as likely
to raise a Series A within two years of their launch date. Use it to surface promising
startups; it is not investment advice.

When to use: "promising startups that launched last month", "which recent launches
look fundable", "AI agent startups from Q3 likely to raise", or any request to shortlist new
startups by potential.

series_a_band is the model's ranking of the launch against all Product Hunt launches,
from "Top 0.1%" (strongest) to "Top 10%". Only launches in the Top 10% are returned,
ordered strongest first. Quote the band as given ("Product Hunt's model ranks this
launch in the Top 1%"); it is a ranking, not a probability.

For "new YC startups" or plain "recent launches", use search_launches instead.

Worked example calls:
  User: "which recent launches look fundable?"
  CALL: {}

  User: "promising startups that launched in October 2026"
  CALL: { "launched_after": "2026-10-01", "launched_before": "2026-10-31" }

  User: "AI agent startups from Q3 2026 likely to raise"
  CALL: { "category_slug": "ai-agents", "launched_after": "2026-07-01", "launched_before": "2026-09-30" }

Returns: Ranked launches with their series_a_band, launch date, company, funding, and links.


## Claude Desktop Quick Installation
Remote MCP endpoint (confidence: medium). Install path inferred — verify against the README before running it. Add as a URL/SSE server in your client:

```json
"mcpServers": {
  "product-hunt": {
    "url": "https://www.producthunt.com/mcp/install"
  }
}
```

## Documentation

## What Product Hunt MCP server does

Product Hunt MCP server exposes Product Hunt research and launch-management workflows to MCP-compatible AI clients. Its research tools cover categories, products, recent launches, alternatives, detailed product profiles, leaderboards, and launches that Product Hunt's model ranks highly for potential Series A fundraising. Results can include ratings, makers, categories, links, launch dates, funding, company details, and relevance or ranking information.

The authenticated launch tools work with launches that the signed-in user owns or manages as a hunter, maker, or active product team member. They can inspect account identity, list launches, read launch state, open a website editor, prepare images, update editable fields, preview submissions, and submit launches for scheduling. Drafts remain private until submission or another action makes content public.

## How it works

The server is accessed as a remote Streamable HTTP MCP server. Sign in with Product Hunt through the installation flow; an API key is not required. Once connected, research tools can be used for public Product Hunt information, while launch-management tools operate on the authenticated account's permitted launches.

Launch submission is deliberately confirmation-based. A preview call returns the resolved product, launch day, public content, makers, images, comments, shoutouts, programs, warnings, and side effects. The launch is submitted only after the user reviews that preview and the client sends the returned confirmation token. Update operations can likewise require a preview and explicit approval when they may affect public content, move a launch day, or notify makers.

Launch images are staged separately from attaching them to a launch. An image can be supplied by public URL, uploaded to the Product Hunt-provided upload endpoint, or sent as base64 content when the client cannot reach that endpoint. Ready assets are then attached through the launch update operation.

## Setup and configuration

Connect an MCP client to the Product Hunt installation endpoint at `https://www.producthunt.com/mcp/install` and complete Product Hunt sign-in. No Product Hunt API key is needed, and this server does not require environment variables for its connection.

The client must be able to use a remote Streamable HTTP MCP server. Account-scoped launch actions depend on the permissions of the signed-in Product Hunt account. Before making a change, clients should reread a launch after opening its editor or after competing edits, because the launch revision can change.

## Tools and capabilities

Research and discovery include:

- Listing Product Hunt categories and slugs for use in other searches.
- Finding products by category, pricing, open-source status, or recency.
- Searching launches by text, category, date window, pricing, open-source status, or YC status.
- Searching products semantically from a natural-language use case.
- Finding alternatives with optional pricing, open-source, recency, and feature-tag filters.
- Reading product profiles with reviews, ratings, makers, company information, funding, and social links.
- Retrieving ranked daily, weekly, monthly, or yearly leaderboards.
- Finding launches in the model's Top 10% Series A ranking bands.

Launch operations include account lookup, launch-context checks, owned-launch listing, launch retrieval, website editing, preview retrieval, draft creation or resumption, field updates, submission previews, confirmed submission, and asset preparation. Launch reads expose editable fields, revision identifiers, assessment items, applicable actions, prepared assets, and website links. The feedback tool sends comments to the Product Hunt team only when the user explicitly requests or approves it.

## Limitations and notes

A launch's availability snapshot is not a reservation. Product Hunt launch states distinguish drafts, unscheduled launches, scheduled launches, and live launches; changes to live or potentially public content may have immediate visibility. The client should change only fields reported as editable and use the expected revision when updating.

Submission always requires two calls: one to produce the preview and another with the confirmation token. Tokens expire after 15 minutes and become invalid if launch data, permissions, assets, or launch-day availability changes. Idempotency keys allow identical retries when an operation's outcome is unknown.

Prepared images must be PNG, JPEG, WebP, or GIF, no larger than 10 MB, 10,000 pixels on either side, or 40 megapixels. Base64 asset submissions are limited to 3 MB by the server, and clients may impose a smaller limit. The startup-ranking feature is a Product Hunt model ranking, not investment advice.

_Full upstream README: https://allmcps.com/mcp/product-hunt/readme_

