Product Hunt is a community for discovering and launching new tech products.
Use Product Hunt when you want to discover, evaluate, launch, or promote tech products.
Tool groups / functionality:
- Discovery: Use when looking for software, alternatives, new launches, or official rankings.
- Product research: Use when evaluating a product's reviews, ratings, makers, company, or funding.
- Launch creation and management: Use when creating, scheduling, or updating a launch you own or manage.
- Investor sourcing: Use find_investable_startups to look for promising startups (not investment advice). It needs the user to connect their Product Hunt account; when it asks for sign-in, prompt the user to connect rather than reporting an error.
Troubleshooting / feedback:
Use submit_feedback once per task to report any friction we could smooth over.
Examples: tool or upload failures, obstacles that required creative workarounds, unclear instructions,
wrong or confusing results, missing capabilities, or unnecessary steps. Improvement ideas and user-requested feedback are welcome.
Never include secrets or personal details.
Discoverability
3/6 passed3 of 6 passed50/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The manifest declares this MCP server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
url
Product link to resolve: its existing product, your unsubmitted draft for this exact link, and a recent launch of it.
Clear enough to supply this argument.
product_id
Numeric Product ID; resolves this product instead of url's.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
launch_date
YYYY-MM-DD day in America/Los_Angeles to check for a launch at 00:00 Pacific; the result is in date.
Clear enough to supply this argument.
topic
Topic name to search; returns topic IDs for topics.
Clear enough to supply this argument.
category
Category name to search; returns category IDs for categories.
Clear enough to supply this argument.
maker
Username or name to search; returns user IDs for makerIds.
Clear enough to supply this argument.
funding_backer
Funding backer name to search; returns backer IDs for fundingBackers.
Clear enough to supply this argument.
shoutout_product
Product name to search; returns product IDs for shoutouts productId.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs56/100
Resolve the mismatch between this description and its schema constraints.
product_id
Numeric Product ID; only launches for this product.
Resolve the mismatch between this description and its schema constraints.
status
Only launches with this status.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Items per page; defaults to 20.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
next_cursor from the previous page; valid only with the same product_id, status and limit.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
launch_id
Numeric ID of a submitted launch or UUID of an unsubmitted draft, from list_my_launches or a launch tool.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs38/100
22 of 43 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
url
The product link, http or https, without spaces; not a Product Hunt link.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
product_choice
Defaults to new.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
product_id
Numeric product ID from get_launch_context product.id; required with product_choice existing and refused otherwise.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › name
Not provided
Missing description. Explain what this value means and how to supply it.
values › tagline
Not provided
Missing description. Explain what this value means and how to supply it.
values › description
Not provided
Missing description. Explain what this value means and how to supply it.
values › commentBody
The maker's first comment, in the website comment editor's HTML: <p> paragraphs, <ul> or <ol> lists of <li> items, <strong> bold, <em> italics, <a href> links and <br> line breaks. Plain text is also accepted and shown as written. Markdown is not converted, so **bold** or lines starting with "- " appear literally. Use a real list for list items and bold or italics only where they help the reader; a short comment can stay plain. Formatting must not change the user's wording or meaning. get_launch returns the comment with its formatting.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › productTwitterHandle
Not provided
Missing description. Explain what this value means and how to supply it.
values › pricingType
Not provided
Missing description. Explain what this value means and how to supply it.
values › productState
Not provided
Missing description. Explain what this value means and how to supply it.
values › additionalLinks
Not provided
Missing description. Explain what this value means and how to supply it.
values › mcpServerUrls
Endpoint URLs of the product's MCP servers, if it exposes any
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › launchDate
YYYY-MM-DD, America/Los_Angeles. Checked against availability; never shifted to another day. Drafts only store it; submitted, not-yet-live launches move with their ad orders to 00:00 Pacific that day.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › makerIds
User IDs from get_launch_context. Include your own ID to be a maker. Website email invitations are preserved.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › topics
Topic IDs from get_launch_context.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › categories
Category IDs from get_launch_context.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › promoText
Not provided
Missing description. Explain what this value means and how to supply it.
values › promoCode
Not provided
Missing description. Explain what this value means and how to supply it.
values › promoExpireAt
Not provided
Missing description. Explain what this value means and how to supply it.
values › openSource
Not provided
Missing description. Explain what this value means and how to supply it.
values › soloMaker
Not provided
Missing description. Explain what this value means and how to supply it.
values › videoUrl
A link the website can embed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
values › interactiveDemoUrl
A link the website can embed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Change a launch you own or manage, at any status. Do not promise an edit will stay private or apply directly: even a not-yet-live launch can change a public product page. Public changes, moving a submitted launch's day, and notifying added makers return outcome needs_confirmation without changing anything. 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. Non-public changes apply directly (outcome applied). Drafts can save incomplete; saving a draft never submits, schedules or enrolls it. Use preview true only when the user wants to inspect an edit before deciding. 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.
The description explains the capability, when to use it, and what to expect.
Inputs43/100
25 of 46 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
launch_id
Numeric ID of a submitted launch or UUID of an unsubmitted draft, from list_my_launches or a launch tool.
Clear enough to supply this argument.
changes › name
Not provided
Missing description. Explain what this value means and how to supply it.
changes › tagline
Not provided
Missing description. Explain what this value means and how to supply it.
changes › description
Not provided
Missing description. Explain what this value means and how to supply it.
changes › commentBody
The maker's first comment, in the website comment editor's HTML: <p> paragraphs, <ul> or <ol> lists of <li> items, <strong> bold, <em> italics, <a href> links and <br> line breaks. Plain text is also accepted and shown as written. Markdown is not converted, so **bold** or lines starting with "- " appear literally. Use a real list for list items and bold or italics only where they help the reader; a short comment can stay plain. Formatting must not change the user's wording or meaning. get_launch returns the comment with its formatting.
Clear enough to supply this argument.
changes › productTwitterHandle
Not provided
Missing description. Explain what this value means and how to supply it.
changes › pricingType
Not provided
Missing description. Explain what this value means and how to supply it.
changes › productState
Not provided
Missing description. Explain what this value means and how to supply it.
changes › additionalLinks
Not provided
Missing description. Explain what this value means and how to supply it.
changes › mcpServerUrls
Endpoint URLs of the product's MCP servers, if it exposes any
Clear enough to supply this argument.
changes › launchDate
YYYY-MM-DD, America/Los_Angeles. Checked against availability; never shifted to another day. Drafts only store it; submitted, not-yet-live launches move with their ad orders to 00:00 Pacific that day.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › makerIds
User IDs from get_launch_context. Include your own ID to be a maker. Website email invitations are preserved.
Clear enough to supply this argument.
changes › topics
Topic IDs from get_launch_context.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › categories
Category IDs from get_launch_context.
Clear enough to supply this argument.
changes › promoText
Not provided
Missing description. Explain what this value means and how to supply it.
changes › promoCode
Not provided
Missing description. Explain what this value means and how to supply it.
changes › promoExpireAt
Not provided
Missing description. Explain what this value means and how to supply it.
changes › openSource
Not provided
Missing description. Explain what this value means and how to supply it.
changes › soloMaker
Not provided
Missing description. Explain what this value means and how to supply it.
changes › videoUrl
A link the website can embed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › interactiveDemoUrl
A link the website can embed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Missing description. Explain what this value means and how to supply it.
changes › teamSize
May update the public product profile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › crunchbaseUrl
May update the public product profile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › yCombinatorUrl
May update the public product profile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › totalFundingAmount
May appear on the public product profile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › bootstrapped
Not provided
Missing description. Explain what this value means and how to supply it.
changes › haveRaisedVcFunding
Not provided
Missing description. Explain what this value means and how to supply it.
changes › fundingBackers
Backer IDs from get_launch_context.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › fundingRound
Not provided
Missing description. Explain what this value means and how to supply it.
changes › fundingAmount
May appear on the public product profile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › interestedInBeingContacted
Not provided
Missing description. Explain what this value means and how to supply it.
changes › investorConnectionResponses
Maker-only, private request for connections to Product Hunt's investor partners. Map assessment prompt IDs to answers the user wrote or approved.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › thumbnailAssetId
Ready thumbnail asset prepared for this launch with prepare_launch_asset.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
changes › galleryAssetIds
Complete ordered gallery of ready assets from prepare_launch_asset for this launch. Three or more images are recommended, not required.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
expected_revision
Revision from get_launch or the previous result.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
idempotency_key
If the outcome is unknown, retry the identical request with this same key to avoid applying it twice.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
Valid for 15 minutes. After user approval, resend the same launch, revision and changes with this token, without preview. Bound to this account and connection; differences are confirmation_invalid. Empty means omitted.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
preview
True changes nothing and returns needs_confirmation with a preview and token, even for private edits. Cannot be combined with confirmation_token.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Submit a launch with status draft so it is scheduled for its launch day. 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 on its launch day 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.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
launch_id
UUID launch_id of the draft to submit, from list_my_launches or a launch tool.
Clear enough to supply this argument.
idempotency_key
Retry key for this account and connection, bound to launch_id and confirmation_token; reuse it only for an identical retry.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
confirmation_token from the needs_confirmation result; send it after user approval to submit.
Clear enough to supply this argument.
preview
True only previews, as omitting confirmation_token does. Cannot be combined with confirmation_token.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
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 [email protected] <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.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
launch_id
Numeric ID of a submitted launch or UUID of an unsubmitted draft, from list_my_launches or a launch tool.
Clear enough to supply this argument.
kind
thumbnail assets go in thumbnailAssetId, gallery assets in galleryAssetIds.
Clear enough to supply this argument.
source_url
Public HTTP or HTTPS image URL the server downloads. Not with content.
Clear enough to supply this argument.
content
Base64 image bytes, at most 3 MB decoded, without a data: prefix; line breaks are ignored. Not with source_url.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
idempotency_key
Names this asset for this account and connection; reuse it only with the same launch_id, kind and source_url.
{
"name": "prepare_launch_asset",
"title": "Prepare a launch image",
"description": "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 [email protected] <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.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"launch_id",
"kind",
"idempotency_key"
],
"properties": {
"kind": {
"enum": [
"thumbnail",
"gallery"
],
"type": "string",
"description": "thumbnail assets go in thumbnailAssetId, gallery assets in galleryAssetIds."
},
"content": {
"type": "string",
"maxLength": 4066686,
"minLength": 1,
"description": "Base64 image bytes, at most 3 MB decoded, without a data: prefix; line breaks are ignored. Not with source_url."
},
"launch_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Numeric ID of a submitted launch or UUID of an unsubmitted draft, from list_my_launches or a launch tool."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public HTTP or HTTPS image URL the server downloads. Not with content."
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Names this asset for this account and connection; reuse it only with the same launch_id, kind and source_url."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"asset",
"upload"
],
"properties": {
"asset": {
"type": "object",
"required": [
"id",
"kind",
"status",
"width",
"height",
"byte_size",
"error"
],
"properties": {
"id": {
"type": "string",
"description": "Asset ID for update_launch thumbnailAssetId or galleryAssetIds once ready."
},
"kind": {
"enum": [
"thumbnail",
"gallery"
],
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Why the image failed, when status is failed."
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"awaiting_upload",
"processing",
"ready",
"failed"
],
"type": "string",
"description": "Only ready assets can be attached; failed explains why in error."
},
"byte_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
}
}
},
"upload": {
"anyOf": [
{
"type": "object",
"required": [
"url",
"method",
"file_field",
"headers",
"expires_at",
"max_bytes"
],
"properties": {
"url": {
"type": "string",
"description": "Upload endpoint for this asset only."
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"headers": {
"type": "object",
"required": [
"Authorization"
],
"properties": {
"Authorization": {
"type": "string"
}
},
"description": "Send exactly; Authorization carries the single-asset upload ticket, not this connection's token."
},
"max_bytes": {
"type": "integer",
"description": "Largest accepted file, in bytes."
},
"expires_at": {
"type": "string",
"description": "ISO 8601 time the ticket expires; retry with the same idempotency_key for a fresh ticket."
},
"file_field": {
"enum": [
"file"
],
"type": "string"
}
}
},
{
"type": "null"
}
],
"description": "Multipart upload ticket for local bytes; null when the asset is ready or no ticket can be issued."
}
}
},
"status": {
"enum": [
"ok"
],
"type": "string"
}
}
},
{
"type": "object",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"unauthorized",
"insufficient_scope",
"forbidden",
"not_found",
"invalid_input",
"revision_conflict",
"fields_not_editable",
"validation_failed",
"confirmation_invalid",
"idempotency_key_reused",
"already_submitted"
],
"type": "string"
},
"message": {
"type": "string"
}
}
},
"status": {
"enum": [
"error"
],
"type": "string"
}
}
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Tell the Product Hunt team about any friction we could smooth over. Call once per task. Examples: tool or upload failures, obstacles that required creative workarounds, unclear instructions, wrong or confusing results, missing capabilities, or unnecessary steps. Improvement ideas and user-requested feedback are welcome. Never include secrets or personal details about anyone.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
kind
broken: a tool failed or returned wrong data. confusing: a tool, its arguments, or its output were unclear. missing: no tool offers what the user needed. idea: a suggestion to improve an existing tool.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
message
What the user wanted, what you tried (tool calls and arguments), what happened, and what would have helped.
Clear enough to supply this argument.
tool
Name of the tool the feedback is about, if any.
Clear enough to supply this argument.
impact
blocked: the task could not be finished. worked_around: finished another way. friction: finished, but harder than it should be.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
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).
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category_slug
Filter by category slug. Use get_categories to discover valid slugs and pick the most specific matching one (e.g. "ai-dictation-apps" for dictation queries, not the broader parent).
Clear enough to supply this argument.
order
Sort: "highest_rated" (default) or "recent_launches". Pick "recent_launches" only when the user asked for recency / newest.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
open_source
"any" (default — no open-source filter); "open_source_only" only when the user said open source / OSS / FOSS.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pricing
"any" (default — no pricing filter); "free" / "free_options" / "payment_required" only when the user said the matching word.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Number of products (default 8, max 8).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs79/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
product_name
Name or slug of the product to find alternatives for (e.g., "cursor", "notion", "zapier").
Clear enough to supply this argument.
order
"most_relevant" (default), "highest_rated", or "recent_launches". Pick a non-default value only when the user asked for it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pricing
"any" (default — no pricing filter); "free" / "free_options" / "payment_required" only when the user said the matching word.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
open_source
"any" (default — no open-source filter); "open_source_only" only when the user said open source / OSS / FOSS.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recency
"all_time" (default — no recency filter); "today" / "this_week" / "this_month" / "this_quarter" / "this_year" only when the user named that time window.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tags
Feature-tag filter. Default []: no tag filter. Use only for genuine feature tags ("self-hosted", "ai"). Do NOT use for "free" or "open source" — those have their own keys.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Maximum number of alternatives (default: 8).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
product_name
Product name or slug to look up (e.g., "notion", "linear", "figma").
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Words to match literally in launch names and taglines, such as a product name. Not a description search.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category_slug
Filter by category slug. Use get_categories to discover valid slugs and pick the most specific matching one (e.g. "ai-dictation-apps" for dictation queries, not the broader parent).
Clear enough to supply this argument.
days_ago
Only launches within the last N days, 1–365 (default 30). Use 7 for this week, 30 for this month, 90 for this quarter, 365 for this year. Older launches are out of range; semantic_product_search with recency "all_time" finds products of any age by topic, ranked by relevance rather than launch date.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
yc
"any" (default — no YC filter); "yc_only" only when the user said YC / Y Combinator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
open_source
"any" (default — no open-source filter); "open_source_only" only when the user said open source / OSS / FOSS.
Clear enough to supply this argument.
pricing
"any" (default — no pricing filter); "free" / "free_options" / "payment_required" only when the user said the matching word.
Clear enough to supply this argument.
limit
Maximum number of launches, 1–8 (default 8).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Short noun-phrase query — 3 to 8 words, no conjunctions, no conversational filler ("product that", "tool for", "I want"). Products are embedded from structured summaries covering product type, capabilities, problem solved, target audience, and use cases, so queries match best when they mirror that shape: <core-capability> <optional audience> <optional form-factor>. Only include a form factor (cli tool, terminal ui, mobile app, chrome extension, self-hosted service) when the user explicitly asks for one or clearly implies it — never invent one. Same rule for audience (developers, small teams, founders, freelancers): include only when the user names or implies it. Good: "monitor ai agents" (form factor unspecified), "self-hosted analytics small teams" (audience + form factor specified), "cli tool share ai coding sessions developers" (all three specified). Bad: "web platform monitor ai agents operations" when the user just said "a product that monitors AI agents" — the form factor was fabricated. Longer multi-clause queries collapse the neighborhood and return fewer results.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pricing
"any" (default — no pricing filter); "free" / "free_options" / "payment_required" only when the user said the matching word.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
open_source
"any" (default — no open-source filter); "open_source_only" only when the user said open source / OSS / FOSS.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recency
"all_time" (default — no recency filter); "today" / "this_week" / "this_month" / "this_quarter" / "this_year" only when the user named that time window.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Maximum number of products (default: 6).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Product Hunt leaderboard for a day, month, or year
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
date
Period in YYYY-MM-DD (day), YYYY-Www (ISO week), YYYY-MM (month), or YYYY (year) format. E.g. "2024-11-14", "2024-W46", "2024-11", "2024".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Maximum number of ranked products (default: 5, max: 8).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs85/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Search terms to filter launches (searches name and tagline).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category_slug
Filter by category slug. Use get_categories to discover valid slugs and pick the most specific matching one (e.g. "ai-dictation-apps" for dictation queries, not the broader parent).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
launched_after
Earliest launch date, YYYY-MM-DD, inclusive. Set only when the user named a window; otherwise omit (default: 30 days before launched_before). launched_after and launched_before can be at most one year apart.
Clear enough to supply this argument.
launched_before
Latest launch date, YYYY-MM-DD, inclusive. Set only when the user named a window; otherwise omit (default: today).
Clear enough to supply this argument.
limit
Maximum number of startups (default: 10).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"launched_after",
"launched_before",
"startups"
],
"properties": {
"startups": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"tagline",
"description",
"url",
"thumbnail_url",
"reviews_rating",
"reviews_count",
"rank",
"launch_url",
"series_a_band"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"rank": {
"type": "integer"
},
"slug": {
"type": "string"
},
"makers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}
},
"company": {
"type": "object",
"properties": {
"yc": {
"type": "object",
"required": [
"batch"
],
"properties": {
"batch": {
"type": "string",
"description": "Y Combinator batch, such as W24."
},
"stage": {
"type": "string",
"description": "Company stage as listed by YC."
},
"top_company": {
"type": "boolean",
"description": "Present and true when YC lists it as a top company."
}
},
"description": "Y Combinator company record. Absent when the product is not YC-backed."
},
"founded_on": {
"type": "string",
"description": "ISO 8601 founding date, from Crunchbase."
},
"employee_range": {
"type": "string",
"description": "Employee count range from Crunchbase, such as 11-50 or 10001+."
},
"operating_status": {
"type": "string",
"description": "Crunchbase operating status, such as active or closed."
}
}
},
"funding": {
"type": "object",
"required": [
"total_raised_usd",
"latest_round",
"rounds_count",
"notable_investors"
],
"properties": {
"as_of": {
"type": "string",
"description": "ISO 8601 timestamp of the most recent source."
},
"latest_round": {
"type": "object",
"required": [
"amount_usd"
],
"properties": {
"date": {
"type": "string",
"description": "ISO 8601 date of the most recent round. Absent if unknown."
},
"series": {
"type": "string",
"description": "Type of the most recent round, such as pre_seed, seed, series_a..series_e, angel, venture_round, ipo, acquisition, grant, debt or crowdfunding. Absent if unknown."
},
"amount_usd": {
"type": "number",
"description": "Amount of the most recent round in USD. 0 if undisclosed."
}
}
},
"rounds_count": {
"type": "integer",
"description": "Number of known funding rounds."
},
"is_bootstrapped": {
"type": "boolean",
"description": "Maker-reported bootstrap flag. Absent if not surveyed; false if other evidence overrides."
},
"total_raised_usd": {
"type": "number",
"description": "Total raised across all rounds in USD. 0 if undisclosed."
},
"notable_investors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lead and notable investors across all rounds."
}
}
},
"tagline": {
"type": "string"
},
"sentiment": {
"type": "object",
"required": [
"pros",
"cons"
],
"properties": {
"cons": {
"type": "array",
"items": {
"type": "string"
}
},
"pros": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
}
}
}
},
"launch_url": {
"type": "string",
"description": "Product Hunt page of the launch that was scored."
},
"description": {
"type": "string"
},
"launched_at": {
"type": "string"
},
"votes_count": {
"type": "integer"
},
"pricing_type": {
"enum": [
"free",
"free_options",
"payment_required"
],
"type": "string"
},
"reviews_count": {
"type": "integer"
},
"series_a_band": {
"enum": [
"Top 0.1%",
"Top 0.5%",
"Top 1%",
"Top 5%",
"Top 10%"
],
"type": "string",
"description": "Where the launch's Series A model score falls among all Product Hunt launches. A model-generated sourcing signal, not a probability or an investment recommendation; revised as the model changes."
},
"thumbnail_url": {
"type": "string"
},
"reviews_rating": {
"type": "number"
},
"mcp_server_urls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Endpoints of the product's MCP servers, as its makers entered them. Product Hunt does not verify them."
},
"reviews_summary": {
"type": "string"
},
"review_highlight": {
"type": "object",
"required": [
"rating",
"excerpt"
],
"properties": {
"rating": {
"type": "integer"
},
"excerpt": {
"type": "string"
}
}
}
}
}
},
"launched_after": {
"type": "string"
},
"launched_before": {
"type": "string"
}
}
},
"status": {
"enum": [
"ok"
],
"type": "string"
}
}
},
{
"type": "object",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"invalid_input",
"unauthorized"
],
"type": "string"
},
"message": {
"type": "string"
}
}
},
"status": {
"enum": [
"error"
],
"type": "string"
}
}
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
Original tool metadata
{
"name": "find_investable_startups",
"title": "Find investable startups",
"description": "Find launches from a date window that Product Hunt's proprietary model ranks as likely\nto raise a Series A within two years of their launch date. Use it to surface promising\nstartups; it is not investment advice.\n\nWhen to use: \"promising startups that launched last month\", \"which recent launches\nlook fundable\", \"AI agent startups from Q3 likely to raise\", or any request to shortlist new\nstartups by potential.\n\nseries_a_band is the model's ranking of the launch against all Product Hunt launches,\nfrom \"Top 0.1%\" (strongest) to \"Top 10%\". Only launches in the Top 10% are returned,\nordered strongest first. Quote the band as given (\"Product Hunt's model ranks this\nlaunch in the Top 1%\"); it is a ranking, not a probability.\n\nFor \"new YC startups\" or plain \"recent launches\", use search_launches instead.\n\nWorked example calls:\n User: \"which recent launches look fundable?\"\n CALL: {}\n\n User: \"promising startups that launched in October 2026\"\n CALL: { \"launched_after\": \"2026-10-01\", \"launched_before\": \"2026-10-31\" }\n\n User: \"AI agent startups from Q3 2026 likely to raise\"\n CALL: { \"category_slug\": \"ai-agents\", \"launched_after\": \"2026-07-01\", \"launched_before\": \"2026-09-30\" }\n\nReturns: Ranked launches with their series_a_band, launch date, company, funding, and links.\n",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Maximum number of startups (default: 10)."
},
"query": {
"type": "string",
"maxLength": 500,
"description": "Search terms to filter launches (searches name and tagline)."
},
"category_slug": {
"type": "string",
"maxLength": 100,
"description": "Filter by category slug. Use get_categories to discover valid slugs and pick the most specific matching one (e.g. \"ai-dictation-apps\" for dictation queries, not the broader parent)."
},
"launched_after": {
"type": "string",
"description": "Earliest launch date, YYYY-MM-DD, inclusive. Set only when the user named a window; otherwise omit (default: 30 days before launched_before). launched_after and launched_before can be at most one year apart."
},
"launched_before": {
"type": "string",
"description": "Latest launch date, YYYY-MM-DD, inclusive. Set only when the user named a window; otherwise omit (default: today)."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"launched_after",
"launched_before",
"startups"
],
"properties": {
"startups": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"tagline",
"description",
"url",
"thumbnail_url",
"reviews_rating",
"reviews_count",
"rank",
"launch_url",
"series_a_band"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"rank": {
"type": "integer"
},
"slug": {
"type": "string"
},
"makers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}
},
"company": {
"type": "object",
"properties": {
"yc": {
"type": "object",
"required": [
"batch"
],
"properties": {
"batch": {
"type": "string",
"description": "Y Combinator batch, such as W24."
},
"stage": {
"type": "string",
"description": "Company stage as listed by YC."
},
"top_company": {
"type": "boolean",
"description": "Present and true when YC lists it as a top company."
}
},
"description": "Y Combinator company record. Absent when the product is not YC-backed."
},
"founded_on": {
"type": "string",
"description": "ISO 8601 founding date, from Crunchbase."
},
"employee_range": {
"type": "string",
"description": "Employee count range from Crunchbase, such as 11-50 or 10001+."
},
"operating_status": {
"type": "string",
"description": "Crunchbase operating status, such as active or closed."
}
}
},
"funding": {
"type": "object",
"required": [
"total_raised_usd",
"latest_round",
"rounds_count",
"notable_investors"
],
"properties": {
"as_of": {
"type": "string",
"description": "ISO 8601 timestamp of the most recent source."
},
"latest_round": {
"type": "object",
"required": [
"amount_usd"
],
"properties": {
"date": {
"type": "string",
"description": "ISO 8601 date of the most recent round. Absent if unknown."
},
"series": {
"type": "string",
"description": "Type of the most recent round, such as pre_seed, seed, series_a..series_e, angel, venture_round, ipo, acquisition, grant, debt or crowdfunding. Absent if unknown."
},
"amount_usd": {
"type": "number",
"description": "Amount of the most recent round in USD. 0 if undisclosed."
}
}
},
"rounds_count": {
"type": "integer",
"description": "Number of known funding rounds."
},
"is_bootstrapped": {
"type": "boolean",
"description": "Maker-reported bootstrap flag. Absent if not surveyed; false if other evidence overrides."
},
"total_raised_usd": {
"type": "number",
"description": "Total raised across all rounds in USD. 0 if undisclosed."
},
"notable_investors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lead and notable investors across all rounds."
}
}
},
"tagline": {
"type": "string"
},
"sentiment": {
"type": "object",
"required": [
"pros",
"cons"
],
"properties": {
"cons": {
"type": "array",
"items": {
"type": "string"
}
},
"pros": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
}
}
}
},
"launch_url": {
"type": "string",
"description": "Product Hunt page of the launch that was scored."
},
"description": {
"type": "string"
},
"launched_at": {
"type": "string"
},
"votes_count": {
"type": "integer"
},
"pricing_type": {
"enum": [
"free",
"free_options",
"payment_required"
],
"type": "string"
},
"reviews_count": {
"type": "integer"
},
"series_a_band": {
"enum": [
"Top 0.1%",
"Top 0.5%",
"Top 1%",
"Top 5%",
"Top 10%"
],
"type": "string",
"description": "Where the launch's Series A model score falls among all Product Hunt launches. A model-generated sourcing signal, not a probability or an investment recommendation; revised as the model changes."
},
"thumbnail_url": {
"type": "string"
},
"reviews_rating": {
"type": "number"
},
"mcp_server_urls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Endpoints of the product's MCP servers, as its makers entered them. Product Hunt does not verify them."
},
"reviews_summary": {
"type": "string"
},
"review_highlight": {
"type": "object",
"required": [
"rating",
"excerpt"
],
"properties": {
"rating": {
"type": "integer"
},
"excerpt": {
"type": "string"
}
}
}
}
}
},
"launched_after": {
"type": "string"
},
"launched_before": {
"type": "string"
}
}
},
"status": {
"enum": [
"ok"
],
"type": "string"
}
}
},
{
"type": "object",
"required": [
"status",
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"invalid_input",
"unauthorized"
],
"type": "string"
},
"message": {
"type": "string"
}
}
},
"status": {
"enum": [
"error"
],
"type": "string"
}
}
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Find alternatives to a productFind alternative products to a given product.
02Get product profileGet detailed information about a product including description, makers, categories, social links, pricing, ratings, review highlights, a company object (YC b…
03Search recent product launches on Product Hunt
04Semantic product searchSearch Product Hunt products by natural-language topic or use case using vector
05Product Hunt leaderboard for a day, month, or yearGet the ranked Product Hunt leaderboard for a specific day, week, month, or year.
Want to run these tasks against your MCP server with us?
Product Hunt setup, tools, quality score, publishing readiness, and alternatives.
How do I add Product Hunt to Claude, ChatGPT, or Cursor?
Add Product Hunt to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.producthunt.com/mcp.
Is Product Hunt MCP ready for ChatGPT and Claude?
As of November 10, 2026, Product Hunt scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Product Hunt's MCP tool documentation?
As of November 10, 2026, Product Hunt scores 89/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 17 of 17 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Product Hunt?
As of November 10, 2026, alternatives to Product Hunt in commerce-shopping on the Manufact MCP leaderboard include REMAX Europe, Square Yards, AEDI-V, Lezzoo, and TurboHome.
How can Product Hunt improve its MCP documentation?
start_launch is the lowest-scoring reviewed tool at 79/100. 22 of 43 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.