product-hunt-mcp
Provides tools for accessing Product Hunt data including posts, collections, topics, users, votes, and comments, with options to search/filter by topic, date, votes, and more.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@product-hunt-mcpshow me today's top posts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š Product Hunt MCP Server
A plug-and-play MCP server for Product Hunt
š¦ Quick Install
pip install product-hunt-mcpRelated MCP server: MCP Hub
šāāļø Quick Start Example
# Run the MCP server (requires PRODUCT_HUNT_TOKEN environment variable)
export PRODUCT_HUNT_TOKEN=your_token_here
product-hunt-mcp⨠What is this?
Product Hunt MCP Server connects Product Hunt's API to any LLM or agent that speaks the Model Context Protocol (MCP). Perfect for AI assistants, chatbots, or your own automations!
š Get posts, collections, topics, users
š³ļø Get votes, comments, and more
š ļø Use with Claude Desktop, Cursor, or any MCP client
š ļø Features
Get detailed info on posts, comments, collections, topics, users
Search/filter by topic, date, votes, etc.
Paginated comments, user upvotes, and more
Built with FastMCP for speed and compatibility
š§āš» Who is this for?
AI/LLM users: Plug into Claude Desktop, Cursor, or your own agent
Developers: Build bots, dashboards, or automations with Product Hunt data
Tinkerers: Explore the MCP ecosystem and build your own tools
š Setup
Prerequisites
Python 3.10+
Product Hunt API token (get one here)
You'll need to create an account on Product Hunt
Navigate to the API Dashboard and create a new application
Use the
Developer Tokenfor the token
Note: When creating a new application on Product Hunt, you will be asked for a
redirect_uri. While the MCP server does not use the redirect URI, it is a required field. You can enter any valid URL, such ashttps://localhost:8424/callback.
Installation
Preferred: uv (fast, modern Python installer)
# Install uv if you don't have it
pip install uvInstall from PyPI (recommended)
uv pip install product-hunt-mcp
# or
pip install product-hunt-mcpInstall from GitHub (latest main branch)
uv pip install 'git+https://github.com/jaipandya/producthunt-mcp-server.git'
# or
pip install 'git+https://github.com/jaipandya/producthunt-mcp-server.git'Install locally from source
uv pip install .
# or
pip install .š Usage with Claude Desktop & Cursor
Once installed, the product-hunt-mcp command will be available. Add it to your Claude Desktop or Cursor configuration:
{
"mcpServers": {
"product-hunt": {
"command": "product-hunt-mcp",
"env": {
"PRODUCT_HUNT_TOKEN": "your_token_here"
}
}
}
}Replace
your_token_herewith your actual Product Hunt API token.The token must be set as an environment variable in your Claude Desktop or Cursor config for the server to authenticate.
Always restart your client (Claude Desktop/Cursor) after editing the config file.
Tip: On macOS, Claude Desktop may not always find the
product-hunt-mcpcommand if it's not in the default PATH. If you encounter issues, you can provide the full path to the executable. After installing, run:which product-hunt-mcpUse the output path in your Claude Desktop config, replacing
"command": "product-hunt-mcp"with the full path (e.g.,"command": "/Users/youruser/.local/bin/product-hunt-mcp").
Finding your configuration file
Claude Desktop:
Windows:
%APPDATA%\claude-desktop\config.jsonmacOS:
~/Library/Application Support/claude-desktop/config.jsonLinux:
~/.config/claude-desktop/config.json
Cursor:
Windows:
%APPDATA%\Cursor\User\settings.jsonmacOS:
~/Library/Application Support/Cursor/User/settings.jsonLinux:
~/.config/Cursor/User/settings.json
Docker
You can also run the server using Docker:
# Build the Docker image
docker build -t product-hunt-mcp .
# Run the Docker container (interactive for MCP)
docker run -i --rm -e PRODUCT_HUNT_TOKEN=your_token_here product-hunt-mcpFor Claude Desktop/Cursor integration with Docker, use this configuration:
{
"mcpServers": {
"product-hunt": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "PRODUCT_HUNT_TOKEN=your_token_here", "product-hunt-mcp"],
"env": {}
}
}
}Security Note: Your
PRODUCT_HUNT_TOKENis sensitive. Do not share it or commit it to version control.
š ļø MCP Tools
Tool | Description | Key Parameters |
get_post_details | Get info about a specific post |
|
get_posts | Get posts with filters |
|
get_comment | Get info about a specific comment |
|
get_post_comments | Get comments for a post |
|
get_collection | Get info about a collection |
|
get_collections | Get collections with filters |
|
get_topic | Get info about a topic |
|
search_topics | Search topics |
|
get_user | Get info about a user |
|
get_viewer | Get info about the authenticated user | None |
check_server_status | Check server/API status & authentication | None |
šļø Project Structure
product-hunt-mcp/
āāā src/
ā āāā product_hunt_mcp/ # Main package directory
ā āāā __init__.py
ā āāā cli.py # Command-line entry point
ā āāā api/ # API clients & queries
ā āāā schemas/ # Data validation schemas
ā āāā tools/ # MCP tool definitions
ā āāā utils/ # Utility functions
āāā pyproject.toml # Project metadata, dependencies, build config
āāā README.md
āāā CONTRIBUTING.md
āāā CHANGELOG.md
āāā Dockerfile
āāā ... (config files, etc.)š Rate Limiting
The Product Hunt API has rate limits that this client respects. If you encounter rate limit errors, the client will inform you when the rate limit resets. You can check your current rate limit status using the get_api_rate_limits or check_server_status tools.
š Troubleshooting
Missing token: Ensure your
PRODUCT_HUNT_TOKENis correctly set as an environment variable.Connection issues: Verify your internet connection and that the Product Hunt API is accessible.
Rate limiting: If you hit rate limits, wait until the reset time or reduce your query frequency.
Claude Desktop/Cursor not finding the server: Verify the path to your Python executable and restart the client.
š¤ Contributing
PRs and issues welcome!
See
pyproject.tomlfor dev dependencies.
š Links
š Notes
This project is not affiliated with Product Hunt.
The Product Hunt API is subject to change.
š License
MIT
Available Tools
11 toolscheck_server_statusA
Check the status of the Product Hunt MCP server and authentication.
Returns:
- status (str): "Ready", "Not initialized", "Token invalid", or "Error".
- authenticated (bool, optional): True if authenticated, False otherwise.
- user (dict, optional): User details if authenticated.
- rate_limits (dict, optional): API rate limit information.
- message (str, optional): Additional status or error message.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds value by detailing the return structure and possible status outcomes, which helps the agent understand what to expect. However, it lacks information on error handling, latency, or side effects, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with a clear purpose statement followed by a bulleted list of return values. Every sentence earns its place by providing essential information without redundancy, making it easy for the agent to parse and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is largely complete. It explains the purpose and return values adequately. However, it could improve by addressing usage context or error scenarios, slightly limiting completeness for optimal agent guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on output semantics, listing return values and their types, which compensates for the lack of an output schema, adding meaningful context beyond the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check the status of the Product Hunt MCP server and authentication.' It uses specific verbs ('check') and identifies the resource ('server and authentication'), though it doesn't explicitly differentiate from sibling tools like 'get_viewer' which might also relate to authentication status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for invocation, or compare it to sibling tools such as 'get_viewer' that might overlap in functionality, leaving the agent with no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionA
Retrieve detailed information about a specific collection by ID or slug.
Parameters:
- id (str, optional): The collection's unique ID.
- slug (str, optional): The collection's slug (e.g., "best-productivity-apps").
At least one of `id` or `slug` must be provided.
Returns:
- success (bool)
- data (dict): If successful, contains collection details:
- id, name, description, follower_count, posts, etc.
- error (dict, optional)
- rate_limits (dict)
Notes:
- Returns an error if neither `id` nor `slug` is provided, or if the collection is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| slug | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it returns detailed collection data, includes error handling for missing parameters or not-found collections, and mentions rate limits in the return structure. It doesn't cover authentication needs or pagination, but covers essential operational aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, returns, notes), uses bullet points for readability, and every sentence adds value without redundancy. It's appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description provides a complete picture for a read operation: purpose, parameters with semantics, return structure, and error cases. It could briefly mention authentication or rate limit specifics, but covers the core context adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description fully compensates by explaining both parameters ('id' as unique ID, 'slug' with an example), their optional nature, and the constraint that at least one must be provided. This adds crucial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and resource 'detailed information about a specific collection', specifying it works by 'ID or slug'. It distinguishes from sibling tools like 'get_collections' (plural) by focusing on a single collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('by ID or slug') and notes that at least one parameter must be provided. However, it doesn't explicitly mention when to choose this over alternatives like 'get_collections' or 'search_topics', though the specificity implies it's for known collections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionsA
Retrieve a list of collections with optional filters.
Parameters:
- featured (bool, optional): Only return featured collections if True.
- user_id (str, optional): Filter to collections created by this user ID.
- post_id (str, optional): Filter to collections that include this post ID.
- order (str, optional): Sorting order. Valid values: FOLLOWERS_COUNT (default), NEWEST.
- count (int, optional): Number of collections to return (default: 10, max: 20).
- after (str, optional): Pagination cursor for next page.
Returns:
- success (bool)
- data (dict): If successful, contains:
- collections (list): List of collection objects (id, name, etc.)
- pagination (dict): { end_cursor, has_next_page }
- error (dict, optional)
- rate_limits (dict)
Notes:
- If no collections match, `collections` will be an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| featured | No | ||
| user_id | No | ||
| post_id | No | ||
| order | No | FOLLOWERS_COUNT | |
| count | No | ||
| after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing: return structure including pagination, empty list behavior when no matches, rate limits, and default/max values for parameters. It doesn't mention authentication requirements or potential side effects, but provides substantial behavioral context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Parameters, Returns, Notes) and front-loaded purpose statement. Every sentence adds value, though the parameter documentation is quite detailed. Slightly verbose but efficiently organized with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and 0% schema description coverage, the description provides excellent completeness: detailed parameter semantics, full return structure documentation, pagination behavior, edge case handling (empty results), and rate limit awareness. No significant gaps given the tool's complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation: purpose, data types, optional status, valid values for 'order', default values, and constraints like 'max: 20'. Each of the 6 parameters receives clear semantic explanation beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Retrieve a list of collections with optional filters' - a specific verb ('retrieve') and resource ('collections'). It distinguishes from siblings like 'get_collection' (singular) by indicating it returns a list, but doesn't explicitly contrast with other list tools like 'get_posts'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. While it mentions optional filters, it doesn't explain when filtering is appropriate or how this differs from other collection-related tools. No explicit when/when-not statements or alternative tool references are included.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commentA
Retrieve detailed information about a specific comment by ID.
Parameters:
- id (str, required): The comment's unique ID.
Returns:
- success (bool)
- data (dict): If successful, contains comment details:
- id, content, created_at, user, post, etc.
- error (dict, optional)
- rate_limits (dict)
Notes:
- Returns an error if the comment is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and adds valuable behavioral context: it discloses that it returns an error if the comment is not found, describes the return structure (success, data, error, rate_limits), and hints at rate limits. It does not cover permissions, side effects, or pagination, but for a read operation, this is reasonably comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, returns, notes), front-loaded with the core purpose, and every sentence adds value without redundancy. It efficiently communicates necessary information in a compact format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and low schema coverage, the description does a good job covering purpose, parameters, returns, and error behavior. It lacks details on authentication, rate limit specifics, or data field examples, but for a simple read tool, it provides sufficient context for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explicitly documents the single parameter 'id' as 'The comment's unique ID,' which adds essential meaning beyond the schema's bare type. However, it does not specify format constraints (e.g., length, pattern) or examples, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve detailed information') and resource ('about a specific comment by ID'), distinguishing it from siblings like get_post_comments (which retrieves multiple comments) or get_post_details (which focuses on posts). The verb+resource combination is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying it retrieves 'a specific comment by ID,' suggesting it should be used when you have a comment ID rather than for listing comments. However, it does not explicitly name alternatives (e.g., get_post_comments for multiple comments) or state when not to use it, leaving some guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_commentsA
Retrieve comments for a specific post by post ID or slug, with optional sorting and pagination.
Parameters:
- post_id (str, optional): The post's unique ID.
- slug (str, optional): The post's slug.
- order (str, optional): Sorting order. Valid values: NEWEST (default), OLDEST, VOTES.
- count (int, optional): Number of comments to return (default: 10, max: 20).
- after (str, optional): Pagination cursor for next page.
Returns:
- success (bool)
- data (dict): If successful, contains:
- comments (list): List of comment objects (id, content, etc.)
- pagination (dict): { end_cursor, has_next_page }
- error (dict, optional)
- rate_limits (dict)
Notes:
- Returns an error if the post is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | No | ||
| slug | No | ||
| order | No | ||
| count | No | ||
| after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'retrieve'), includes error handling ('Returns an error if the post is not found'), mentions rate limits in the return structure, and details pagination behavior. However, it doesn't specify authentication requirements or potential side effects, leaving some gaps for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. Each section (Parameters, Returns, Notes) adds essential information without redundancy. Sentences are concise and directly relevant, such as specifying sorting options and error conditions. No wasted words or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description does an excellent job covering purpose, parameters, return structure, and error handling. It explains the return format in detail (success, data with comments and pagination, error, rate_limits), which compensates for the lack of output schema. The only minor gap is the absence of explicit authentication or permission requirements, which could be relevant for API tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage, the description fully compensates by providing comprehensive parameter details. It explains all 5 parameters, including their types, optional status, valid values for 'order', defaults for 'order' and 'count', and the purpose of 'after' for pagination. This adds significant value beyond the bare schema, making parameter usage clear and actionable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve comments for a specific post') and identifies the resource ('post by post ID or slug'). It distinguishes this tool from siblings like get_post_details (which retrieves post metadata) and get_comment (which retrieves a single comment). The verb 'retrieve' is precise and the scope is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the parameter descriptions (e.g., 'post ID or slug') but doesn't explicitly state when to use this tool versus alternatives like get_post_details or get_comment. No guidance is provided on prerequisites, such as whether authentication is required or what happens if both post_id and slug are provided. The usage is clear from context but not explicitly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_detailsA
Retrieve detailed information about a specific Product Hunt post by ID or slug.
Parameters:
- id (str, optional): The post's unique ID.
- slug (str, optional): The post's slug (e.g., "product-hunt-api").
- comments_count (int, optional): Number of comments to return (default: 10, max: 20).
- comments_after (str, optional): Pagination cursor for fetching the next page of comments.
At least one of `id` or `slug` must be provided.
Returns:
- success (bool): Whether the request was successful.
- data (dict): If successful, contains:
- id, name, description, tagline, votes, makers, topics, media, and
- comments (paginated): { edges: [...], pageInfo: { endCursor, hasNextPage } }
- error (dict, optional): If unsuccessful, contains error code and message.
- rate_limits (dict): API rate limit information.
Notes:
- If neither `id` nor `slug` is provided, an error is returned.
- If the post is not found, an error is returned.
- The dedicated `get_post_comments` tool is deprecated; use this tool for paginated comments.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| slug | No | ||
| comments_count | No | ||
| comments_after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool retrieves data (implied read-only), includes rate limit information in returns, handles errors for missing inputs or posts, supports pagination for comments, and mentions a deprecated sibling tool. However, it doesn't explicitly state permission requirements or whether it's idempotent, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Parameters, Returns, Notes) and front-loaded purpose. Most sentences earn their place by adding value, such as parameter details and usage notes. However, the Returns section is somewhat verbose in listing data fields, which could be slightly condensed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no annotations, no output schema), the description is highly complete. It covers purpose, parameters with semantics, return structure including success/error/rate limits, usage rules, error conditions, and sibling tool relationships. This provides all necessary context for an agent to invoke the tool correctly without relying on external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must fully compensate. It adds substantial meaning beyond the basic schema: explains that id and slug are alternative identifiers (with slug examples), specifies comments_count default and max values, describes comments_after as a pagination cursor, and clarifies that at least one of id or slug is required. This provides complete parameter context missing from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve detailed information') and resource ('about a specific Product Hunt post'), distinguishing it from siblings like get_posts (list posts) or get_post_comments (deprecated for comments only). It specifies retrieval by ID or slug, making the purpose unambiguous and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it states when to use this tool (for detailed post info with optional comments) and when not to use alternatives (notes that get_post_comments is deprecated for paginated comments). It also specifies prerequisites (at least id or slug required) and error conditions (if neither provided or post not found), offering comprehensive context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postsA
Retrieve a list of Product Hunt posts with various filtering and sorting options.
Parameters:
- featured (bool, optional): Only return featured posts if True.
- topic (str, optional): Filter by topic slug.
- order (str, optional): Sorting order. Valid values: RANKING (default), NEWEST, VOTES, FEATURED_AT.
- count (int, optional): Number of posts to return (default: 10, max: 20).
- after (str, optional): Pagination cursor for next page.
- url (str, optional): Filter posts by URL.
- twitter_url (str, optional): Filter posts by Twitter URL.
- posted_before (str, optional): ISO datetime to filter posts posted before this date.
- posted_after (str, optional): ISO datetime to filter posts posted after this date.
Returns:
- success (bool)
- data (dict): If successful, contains:
- posts (list): List of post objects (id, name, description, etc.)
- pagination (dict): { end_cursor, has_next_page }
- error (dict, optional)
- rate_limits (dict)
Notes:
- This is not a keyword search; use filters to narrow results.
- If no posts match, `posts` will be an empty list.
- Invalid date formats return a user-friendly error.
| Name | Required | Description | Default |
|---|---|---|---|
| featured | No | ||
| topic | No | ||
| order | No | RANKING | |
| count | No | ||
| after | No | ||
| url | No | ||
| twitter_url | No | ||
| posted_before | No | ||
| posted_after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It effectively describes several behavioral traits: the tool returns paginated results with 'after' cursor and 'has_next_page', handles empty results gracefully ('posts will be an empty list'), includes rate limit information in returns, and provides user-friendly error handling for invalid date formats. This covers important operational aspects beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, returns, notes) and front-loaded with the core functionality. While comprehensive, some sentences could be more concise (e.g., the parameters section is detailed but necessary given schema coverage). The information density is high with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no annotations, no output schema), the description provides complete context. It covers purpose, all parameters with semantics, return structure including success/error handling, pagination behavior, edge cases (empty results), and operational notes. This is comprehensive for a list-retrieval tool with filtering capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 9 parameters, the description provides comprehensive parameter documentation that fully compensates for the schema gap. It explains each parameter's purpose, data types, optional status, default values, valid values for 'order', and constraints like 'max: 20' for count. This adds significant meaning beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve a list of Product Hunt posts with various filtering and sorting options.' This specifies the verb ('retrieve'), resource ('Product Hunt posts'), and scope ('list with filtering/sorting'). However, it doesn't explicitly differentiate from sibling tools like 'get_post_details' or 'search_topics' beyond mentioning 'not a keyword search' in notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context through the 'Notes' section, stating 'This is not a keyword search; use filters to narrow results.' This implies when to use this tool (for filtered listing) versus alternatives like search tools. However, it doesn't explicitly name sibling alternatives or provide clear when-not-to-use guidance beyond the keyword search note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topicA
Retrieve detailed information about a specific topic by ID or slug.
Parameters:
- id (str, optional): The topic's unique ID.
- slug (str, optional): The topic's slug (e.g., "artificial-intelligence").
At least one of `id` or `slug` must be provided.
Returns:
- success (bool)
- data (dict): If successful, contains topic details:
- id, name, description, follower_count, posts, etc.
- error (dict, optional)
- rate_limits (dict)
Notes:
- Returns an error if neither `id` nor `slug` is provided, or if the topic is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| slug | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a read operation (implied by 'retrieve'), specifies error conditions ('Returns an error if neither `id` nor `slug` is provided, or if the topic is not found'), and mentions rate limits in the return structure. However, it doesn't detail authentication needs or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, returns, notes) and uses bullet points for readability. It's appropriately sized for the tool's complexity, though the return details could be more concise as they're not strictly necessary without an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is fairly complete. It covers purpose, parameters, returns, and error conditions. However, it lacks explicit guidance on when to use versus siblings and doesn't detail authentication or rate limit specifics beyond mentioning them in returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It clearly explains both parameters: 'id' as the topic's unique ID and 'slug' as the topic's slug with an example. It also specifies the constraint that at least one must be provided. This adds substantial meaning beyond the bare schema, though it could elaborate on format expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve detailed information about a specific topic by ID or slug.' This specifies the verb (retrieve), resource (topic), and method (by ID or slug). However, it doesn't explicitly differentiate from sibling tools like 'get_user' or 'get_post_details' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides basic usage context: 'At least one of `id` or `slug` must be provided' and mentions error conditions. However, it doesn't explicitly guide when to use this tool versus alternatives like 'search_topics' or 'get_collection', nor does it specify prerequisites or exclusions beyond the parameter requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userA
Retrieve user information by ID or username, with optional retrieval of their posts.
Parameters:
- id (str, optional): The user's unique ID.
- username (str, optional): The user's username.
- posts_type (str, optional): Type of posts to retrieve. Valid values: MADE (default), VOTED.
- posts_count (int, optional): Number of posts to return (default: 10, max: 20).
- posts_after (str, optional): Pagination cursor for next page of posts.
At least one of `id` or `username` must be provided.
Returns:
- success (bool)
- data (dict): If successful, contains user details and optionally their posts.
- error (dict, optional)
- rate_limits (dict)
Notes:
- Returns an error if neither `id` nor `username` is provided, or if the user is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| username | No | ||
| posts_type | No | ||
| posts_count | No | ||
| posts_after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'retrieve'), includes error conditions (if no ID/username or user not found), mentions rate limits in the return structure, and details optional post retrieval with pagination. However, it lacks information on permissions or authentication needs, which could be relevant for a user retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, returns, notes) and uses bullet points for readability. It is appropriately sized but could be slightly more concise by integrating some notes into the parameter descriptions. Every sentence adds value, such as clarifying requirements and errors.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no annotations, no output schema), the description is largely complete. It covers purpose, parameters, returns, and error cases. However, it lacks details on the structure of the returned data (e.g., what fields are in 'user details') and does not mention authentication or rate limit specifics, which are minor gaps for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It does so by explaining all 5 parameters in detail: their purposes (e.g., 'Type of posts to retrieve'), data types, optional status, default values, constraints (e.g., 'max: 20'), and valid values for posts_type. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve user information by ID or username, with optional retrieval of their posts.' It specifies the verb 'retrieve' and the resource 'user information,' distinguishing it from sibling tools like get_collection or get_post_details that retrieve different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage: 'At least one of `id` or `username` must be provided.' It also implies when to use this tool (to get user data) but does not explicitly compare it to alternatives like get_viewer (which might get current user) or specify exclusions, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_viewerA
Retrieve information about the currently authenticated user.
Parameters:
- None
Returns:
- success (bool)
- data (dict): If successful, contains user details.
- error (dict, optional)
- rate_limits (dict)
Notes:
- Returns an error if the token is invalid or expired.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes authentication requirements ('currently authenticated user', 'token is invalid or expired'), error conditions, and return structure including rate limits. However, it doesn't specify whether this is a read-only operation (though implied by 'Retrieve') or any performance characteristics beyond rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured with clear sections (purpose, parameters, returns, notes), uses bullet points for readability, and contains zero wasted words. Every sentence adds essential information, and the information is front-loaded with the core purpose stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter tool with no output schema, the description provides excellent coverage: purpose, authentication context, return structure, and error conditions. The only minor gap is lack of explicit mention about whether this is a read-only operation (though strongly implied), and no details about what specific user details are included in the data dict.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0 parameters with 100% coverage, so the baseline would be 3. However, the description explicitly states 'Parameters: - None', which adds value by confirming there are no parameters to consider. This clarity about parameter absence elevates the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Retrieve information about the currently authenticated user' - a specific verb ('Retrieve') and resource ('currently authenticated user') that clearly distinguishes this from sibling tools like 'get_user' (which likely retrieves information about other users). The purpose is unambiguous and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Returns an error if the token is invalid or expired' indicates this tool should only be used when the user has a valid authentication token. It also implicitly distinguishes from 'get_user' by specifying it retrieves information about 'the currently authenticated user' rather than any user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_topicsA
Search for topics by name or filter by user following, with optional sorting and pagination.
Parameters:
- query (str, optional): Search term to find topics by name.
- followed_by_user_id (str, optional): Only topics followed by this user ID.
- order (str, optional): Sorting order. Valid values: FOLLOWERS_COUNT (default), NAME, NEWEST.
- count (int, optional): Number of topics to return (default: 10, max: 20).
- after (str, optional): Pagination cursor for next page.
Returns:
- success (bool)
- data (dict): If successful, contains:
- topics (list): List of topic objects (id, name, etc.)
- pagination (dict): { end_cursor, has_next_page }
- error (dict, optional)
- rate_limits (dict)
Notes:
- If no topics match, `topics` will be an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| followed_by_user_id | No | ||
| order | No | FOLLOWERS_COUNT | |
| count | No | ||
| after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool supports search and filtering with sorting and pagination, specifies default values (e.g., order default, count default and max), notes that empty results return an empty list, and mentions rate limits in returns. This covers operational aspects well, though it could add more on permissions or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for purpose, parameters, returns, and notes. It's appropriately sized, with each sentence adding value (e.g., explaining defaults, empty results). Minor verbosity in listing all parameters could be streamlined, but overall it's efficient and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no annotations, no output schema), the description is quite complete. It covers purpose, all parameters with semantics, return structure, and behavioral notes like empty results and rate limits. It lacks output schema, but describes returns in detail, making it nearly comprehensive for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate fully. It provides detailed parameter semantics: each parameter is listed with types, optional status, valid values for 'order', defaults, and constraints (e.g., count max). This adds significant meaning beyond the bare schema, fully documenting all 5 parameters with practical usage details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for topics by name or filters by user following, with optional sorting and pagination. It specifies the verb 'search' and resource 'topics', making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'get_topic', which might retrieve a single topic by ID, leaving some ambiguity in sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching or filtering topics, but provides no explicit guidance on when to use this tool versus alternatives like 'get_topic' or 'get_posts'. It mentions parameters like 'followed_by_user_id' and 'query', which suggest contexts for filtering, but lacks clear when-to-use or when-not-to-use statements compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
- First observed
check_server_status - First observed
get_collection - First observed
get_collections - First observed
get_comment - First observed
get_post_comments - First observed
get_post_details - First observed
get_posts - First observed
get_topic - First observed
get_user - First observed
get_viewer - First observed
search_topics
TDQS
Each tool has a distinct purpose targeting specific resources and actions with clear boundaries. For example, get_post_details retrieves post information while get_post_comments focuses specifically on comments, and get_collection vs get_collections handle single vs multiple collections. There is no functional overlap that would cause confusion.
All tools follow a consistent verb_noun pattern using snake_case throughout. The naming convention is perfectly uniform with 'get_' for retrieval operations, 'search_' for search operations, and 'check_' for status checking. Every tool name clearly indicates its function.
With 11 tools, this server is well-scoped for the Product Hunt domain. The tools cover posts, comments, collections, topics, users, and status checking without being overwhelming. Each tool serves a specific, necessary function in the API surface area.
The tool set provides comprehensive read/search operations for all major Product Hunt entities (posts, comments, collections, topics, users). The main gap is the absence of write operations (creating/updating posts, comments, votes, etc.), but for a read-focused API server, the coverage is quite complete with good pagination and filtering support.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Product Hunt MCP ā wraps the Product Hunt GraphQL API v2 (api.producthunt.com)
Launch board for MCP products: discover probed listings, search by real tools, submit as a maker.
UX-review and product-feedback MCP: annotated screenshots and reviews your AI agent can act on.
91
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server exposing 40 best-practice product management skills plus workflows and lifecycle tools, instantly accessible to any AI via Model Context Protocol.194320Apache 2.0
- AlicenseNot gradedqualityAmaintenanceMCP Hub is a self-hosted AI operations platform that provides a unified MCP gateway with semantic tool routing, persistent vector memory, automation, and multi-agent flows. It enables connecting any MCP client to 130+ tools across 12 integrations through just 3 hub endpoints.4MIT
- FlicenseBqualityCmaintenanceAn AI-powered Product Management Operating System that provides tools for PRDs, user stories, prioritization, competitor analysis, roadmaps, KPIs, meeting notes, and product strategy via MCP clients.8-
- FlicenseNot gradedqualityBmaintenanceA full-feature MCP server that serves as a product-development copilot, providing RAG search, SQL queries, and inline chart visualizations from seeded product data, with per-user identity and its own OAuth login.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaipandya/producthunt-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server