Search 37,000+ home, garden, outdoor & tool products with live prices and buy links.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Page through the full product catalog sequentially (ordered by when each product was added), rather than searching for anything specific. Useful for bulk export or systematically walking the entire catalog. Defaults to in_stock only; pass availability="all" to include every status. Increase `offset` to get subsequent pages.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http papyras https://papyrasai.com/mcp
Page through the full product catalog sequentially (ordered by when each product was added), rather than searching for anything specific. Useful for bulk export or systematically walking the entire catalog. Defaults to in_stock only; pass availability="all" to include every status. Increase `offset` to get subsequent pages.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| offset | integer | |
| availability | any |
{
"type": "object",
"title": "get_feed_pageArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 20
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"availability": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Availability",
"default": null
}
}
}Fetch full detail for a single product by its UUID, including description, material/color/size, full enrichment fields (explanation_long, carousel_label, gift-friendliness, price percentile, rating), current price/availability, and the affiliate purchase URL. Returns full detail regardless of stock status -- this is a direct lookup, not a discovery search.
| Argument | Type | Description |
|---|---|---|
| product_id* | string |
{
"type": "object",
"title": "get_productArguments",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"title": "Product Id"
}
}
}Fetch multiple products at once by their UUIDs (max 100 per call). Useful when an agent already has a list of candidate product IDs (e.g. from a previous search) and wants full current data for all of them in one call instead of N separate lookups. Returns `results` for found products and `not_found` for any IDs that don't exist in the catalog.
| Argument | Type | Description |
|---|---|---|
| product_ids* | array |
{
"type": "object",
"title": "get_products_batchArguments",
"required": [
"product_ids"
],
"properties": {
"product_ids": {
"type": "array",
"items": {
"type": "string"
},
"title": "Product Ids"
}
}
}Fetch products related to a given product (similar, accessory, bundle, or alternative relationships). Currently returns an empty list for all products since relationship data hasn't been generated yet -- calling this will not error, it just won't return anything useful until that pipeline is built.
| Argument | Type | Description |
|---|---|---|
| product_id* | string |
{
"type": "object",
"title": "get_related_productsArguments",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"title": "Product Id"
}
}
}Search the Papyras product catalog using hybrid structured + semantic search. Pass `query` for free-text/natural-language search -- longer, natural phrases (e.g. "pressure washer for patio") retrieve more accurately than bare single words (e.g. "patio"), since the embedding model has more context to place the query vector precisely. Combine with structured filters (category, brand, price range, intent_tag, use_case_tag, audience_tag) to narrow results further. Defaults to showing only in_stock products. Pass availability="all" to see every status, or a specific value (in_stock | out_of_stock | preorder | discontinued) to filter to just that one. Returns a dict with `results` (list of product summaries including name, price, affiliate_url, tags, and a short explanation of why the product is relevant), plus `count`, `limit`, `offset`, and whether semantic search was actually used.
| Argument | Type | Description |
|---|---|---|
| brand | any | |
| limit | integer | |
| query | any | |
| offset | integer | |
| category | any | |
| max_price | any | |
| min_price | any | |
| intent_tag | any |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| audience_tag | any |
| availability | any |
| use_case_tag | any |
{
"type": "object",
"title": "search_productsArguments",
"properties": {
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 20
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Query",
"default": null
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null
},
"max_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max Price",
"default": null
},
"min_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Price",
"default": null
},
"intent_tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Intent Tag",
"default": null
},
"audience_tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Audience Tag",
"default": null
},
"availability": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Availability",
"default": null
},
"use_case_tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Use Case Tag",
"default": null
}
}
}