polyhaven-mcp
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., "@polyhaven-mcpsearch for sunset HDRIs"
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.
PolyHaven MCP Server
An Model Context Protocol (MCP) server that provides agents and AI assistants access to the PolyHaven 3D asset library.
This server allows you to search, query, and retrieve download links for high-quality, CC0 HDRIs, textures, and 3D models directly through your AI assistant.
Features
This server exposes several tools that map directly to the PolyHaven public API:
get_asset_types: Lists available asset types (hdris,textures,models).search_assets: Search for assets, optionally filtered by type and categories.get_asset_info: Retrieve detailed metadata and information about a specific asset by its ID.get_asset_files: Get a list of files for a specific asset, including direct download URLs for various formats and resolutions.get_categories: View available categories for a given asset type (and their asset counts).get_author_info: Retrieve information about a specific author.
Related MCP server: Civitai MCP Server
Installation
Prerequisites
Node.js (v16 or higher)
npm
Setup
Clone this repository:
git clone https://github.com/RN0000/polyhaven-mcp.git cd polyhaven-mcpInstall dependencies:
npm installBuild the project:
npm run build
Usage with MCP Clients
To use this server with an MCP-compatible client (such as Claude Desktop or Antigravity), you need to configure your client to launch the server.
Example Configuration
Add the following to your MCP client's configuration file:
{
"mcpServers": {
"polyhaven": {
"command": "node",
"args": [
"/absolute/path/to/polyhaven-mcp/build/index.js"
]
}
}
}Make sure to replace /absolute/path/to/polyhaven-mcp/build/index.js with the actual path to the compiled index.js file on your system.
Regarding API Usage
While this MCP server helps you connect to PolyHaven's API, this project is not affiliated with, endorsed by, or officially connected to PolyHaven in any way.
PolyHaven is generous enough to offer their API for free when used for non-commercial projects and academic research. If you're building something commercial, you'll need to reach out to them for a custom license or sponsorship. Be sure to check out PolyHaven's Terms of Service to make sure you're abiding by their terms of Service.
License
This project is licensed under the ISC License. See the package.json for more details. PolyHaven's assets are distributed under the CC0 license.
Available Tools
6 toolsget_asset_filesB
File list for a specific asset, providing URLs to download the actual files.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The unique ID/slug of the asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It states URLs are provided but does not disclose behavior like URL expiration, pagination, or whether all files are returned at once. Minimal transparency beyond basic purpose.
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 a single concise sentence (13 words) that front-loads the key action and output. No wasted words.
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 has one parameter and no output schema, the description is adequate for a simple list retrieval. However, it lacks details on output format (e.g., array of objects with URL properties), which could assist an agent in using the output. Slightly incomplete.
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 100%, so the schema already documents the 'id' parameter. The description adds no additional meaning beyond stating it is for a specific asset. Baseline 3 is appropriate as the description does not compensate beyond 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 retrieves a file list for a specific asset and outputs download URLs. It uses a specific verb ('get') and resource ('asset files'), and the context of sibling tools (e.g., get_asset_info, search_assets) helps differentiate it.
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?
No explicit guidance on when to use this tool versus alternatives. The description does not mention prerequisites, when not to use it, or any context for selection. The implied usage is only through the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_asset_infoC
Information about an individual asset.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The unique ID/slug of the asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'information,' which does not disclose whether the tool is read-only, destructive, rate-limited, or requires authentication. The description carries the full burden but fails to provide behavioral details.
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 very concise with a single sentence. No unnecessary words, though it could be slightly expanded without losing conciseness.
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 that there is no output schema and the tool has siblings, the description is incomplete. It does not explain what the returned information contains, leaving the agent to guess the response format. A more complete description would help the agent interpret results correctly.
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?
Input schema coverage is 100% with a single parameter 'id' that has a description. The tool description adds no further meaning beyond the schema, so baseline score of 3 is appropriate.
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 returns information about an individual asset, distinguishing it from siblings like get_asset_files (files) or search_assets (multiple assets). However, it could be more specific about what kind of information (e.g., metadata, 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?
No guidance is provided on when to use this tool versus alternatives like get_asset_files or search_assets. The agent receives no context about optimal usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_asset_typesA
List of asset types available (e.g., hdris, textures, models).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description lacks details on behavior (e.g., read-only, caching, or any constraints). It merely states the output without context.
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 a single, concise sentence with no unnecessary words. It effectively communicates the tool's function.
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 parameters, no output schema, and no annotations, the description is sufficient for a simple list query. However, it could mention if the list is static or dynamic.
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?
No parameters exist, so the description adds value by listing examples. Baseline is 4 per guidelines since schema coverage is 100% without needing param 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 lists asset types and provides examples, distinguishing it from siblings like get_asset_files or get_asset_info.
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?
No guidance on when to use this tool versus alternatives (e.g., search_assets). The description only states what it does, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_infoC
Information about a specific author.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The unique ID of the author. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states 'Information about a specific author,' omitting critical behavioral traits such as read-only status, authentication requirements, or potential side effects. The description fails to compensate for missing annotations.
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 a single sentence, concise and without unnecessary words. It is front-loaded but could be slightly more informative without losing brevity.
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 has no output schema and only one parameter, the description should specify what kind of information is returned (e.g., author details, works). Failing to do so leaves the agent uncertain about the return value, making it incomplete.
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 100% for the single parameter 'id', with a clear description in the schema. The tool description adds no additional meaning beyond what the schema already provides, resulting in a baseline score of 3.
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 'Information about a specific author' is clear but vague; it does not specify what exact information is provided (e.g., biography, books) and fails to distinguish it from sibling tools like get_asset_info or search_assets.
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?
No guidance is provided on when to use this tool versus alternatives. There are no exclusions, prerequisites, or references to sibling tools, leaving the agent without 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_categoriesB
A list of available categories for a specific asset type.
| Name | Required | Description | Default |
|---|---|---|---|
| in | No | A comma-separated list of categories to filter by. | |
| type | Yes | The asset type (hdris/textures/models/all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the bare description ('a list of available categories') does not disclose behavior such as error handling, return format, or whether the 'in' filter is inclusive/exclusive. Minimal transparency.
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?
Single sentence is concise but lacks necessary detail; not a model of conciseness as it sacrifices completeness.
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 output schema and no annotations, the description should explain return values (e.g., list of strings or objects) and behavior. It does not, leaving the agent uncertain about what to expect.
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 coverage is 100%, so baseline is 3. Description adds no meaning beyond the schema; 'type' is implied but not elaborated, and 'in' is not mentioned at all.
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?
Description clearly states the tool returns a list of categories for a given asset type, distinguishing it from siblings like get_asset_types (which returns asset types) and search_assets (which searches assets).
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?
No guidance on when to use this tool versus alternatives; no explicit context or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_assetsC
Returns a list of assets, optionally filtered by type and categories.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter to assets of a particular type. Can be hdris/textures/models/all. | |
| categories | No | A comma-separated list of categories to filter by. Only assets that match all categories specified will be included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states it returns a list with optional filters, omitting details like pagination, ordering, concurrency, or whether it is a read-only operation.
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 a single concise sentence, front-loaded with the main purpose. No unnecessary words, every part is essential.
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 absence of annotations and output schema, and the tool being a search function, the description lacks details on result format, error handling, or limitations. It feels incomplete for a search tool.
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 100%, with both parameters described in the schema. The description adds 'optionally filtered', but this is already implied by the schema's optional nature. No additional semantic value beyond 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 'Returns a list of assets', specifying the action and resource, and mentions optional filtering. It distinguishes from sibling tools like get_asset_info and get_categories, which are more specific lookups.
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 does not provide guidance on when to use this tool vs. alternatives like get_asset_files or get_asset_info. No context about usage context or prerequisites is given.
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.
6 tool updates
v1.0.0- First observed
get_asset_files - First observed
get_asset_info - First observed
get_asset_types - First observed
get_author_info - First observed
get_categories - First observed
search_assets
TDQS
Each tool serves a unique purpose: searching assets, retrieving asset info, files, types, categories, and author info. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern with underscores, either 'get_' or 'search_', which clearly indicates the action.
6 tools is an appropriate size for the domain, covering essential operations without being overly numerous or sparse.
The tool set covers key operations for an asset library: search, asset details, file downloads, and metadata (types, categories, authors). No obvious gaps for read-only usage.
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
Provides metadata information to AI agents through the search API.
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Provides AI assistants with access to Seltz's powerful Web Search capabilities.
Search, fetch (with provenance), scan, and convert AI instruction files for agents.
Related MCP Servers
- AlicenseBqualityCmaintenanceProvides AI assistants with access to Civitai's collection of AI models, enabling users to browse, search, and discover AI models through MCP-compatible AI assistants.1412MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with the Civitai API to search for AI models, browse images, and access creator information. It provides tools for filtering models by popularity, rating, or type and retrieving detailed version metadata.MIT
- AlicenseCqualityFmaintenanceEnables AI models to search and retrieve photos, videos, and collections from Pexels via the Pexels API.11329ISC
- FlicenseAqualityCmaintenanceEnables AI clients to search, browse, inspect, and download 3D models from Sketchfab via the Model Context Protocol.51-
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/RN0000/polyhaven-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server