Search and cite step-by-step papercraft and craft tutorials with tools, supplies, and video credit.
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.
Fetch the full machine-readable rendition of a tutorial by slug: title, TL;DR, numbered steps (with text, imageUrl, tips, and YouTube videoTimestampSeconds for deep-linking), tools/materials, tags, related tutorial slugs, creator credit, recipe (with nutrition + cuisine when applicable), license, and canonicalUrl. Use this after search_tutorials to fetch step details.
Tutorial slug (e.g. 'how-to-fix-a-leaky-faucet')
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Fetch the full machine-readable rendition of a tutorial by slug: title, TL;DR, numbered steps (with text, imageUrl, tips, and YouTube videoTimestampSeconds for deep-linking), tools/materials, tags, related tutorial slugs, creator credit, recipe (with nutrition + cuisine when applicable), license, and canonicalUrl. Use this after search_tutorials to fetch step details.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Tutorial slug (e.g. 'how-to-fix-a-leaky-faucet') |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Tutorial slug (e.g. 'how-to-fix-a-leaky-faucet')"
}
}
}List all tutorial categories with a published tutorial. Returns slug, name, short description, and count of published tutorials per category.
No arguments.
{
"type": "object",
"properties": {}
}List the most recently published tutorials, newest first. Use this to discover what's new on the site or to surface fresh content for aggregator / 'what's new this week' agent loops. Tenant-aware.
| Argument | Type | Description |
|---|---|---|
| days | integer | Lookback window in days (default 14, max 90). |
| limit | integer |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 14,
"maximum": 90,
"minimum": 1,
"description": "Lookback window in days (default 14, max 90)."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
}
}
}Browse tutorials within a specific category, ranked by view count then publish date. Use this when a user wants to explore a topic area rather than search.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| categorySlug* | string | e.g. 'cooking', 'home-improvement', 'crafts' |
{
"type": "object",
"required": [
"categorySlug"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"categorySlug": {
"type": "string",
"description": "e.g. 'cooking', 'home-improvement', 'crafts'"
}
}
}Submit a request for a tutorial we don't yet have. Call this when search_tutorials returned no good match for what the user actually wants. The request enters our content-demand queue, which the daily content batch reviews and prioritizes. Optionally include an email for notification when the tutorial ships.
| Argument | Type | Description |
|---|---|---|
| topic* | string | What the user wants to learn how to do (e.g. 'how to get pesto stains out of a white shirt') |
| context | string | Brief context about the requester (e.g. 'beginner crocheter', 'first-time homeowner', 'gluten-free baker'). Helps shape the tutorial when we ship it. |
| notifyEmail | string | Optional email to notify when the tutorial ships. Pure opt-in. |
| originalQuery | string | The exact user query that came up empty in search_tutorials. Useful for matching keyword demand. |
{
"type": "object",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"maxLength": 200,
"minLength": 5,
"description": "What the user wants to learn how to do (e.g. 'how to get pesto stains out of a white shirt')"
},
"context": {
"type": "string",
"maxLength": 200,
"description": "Brief context about the requester (e.g. 'beginner crocheter', 'first-time homeowner', 'gluten-free baker'). Helps shape the tutorial when we ship it."
},
"notifyEmail": {
"type": "string",
"maxLength": 254,
"description": "Optional email to notify when the tutorial ships. Pure opt-in."
},
"originalQuery": {
"type": "string",
"maxLength": 500,
"description": "The exact user query that came up empty in search_tutorials. Useful for matching keyword demand."
}
}
}Search the Show Me Step by Step tutorial corpus by free-text query. Searches across tutorial titles, descriptions, and step content. Returns slim summaries with TL;DRs and canonical URLs. Tenant-aware. Optional filters narrow by category, difficulty, or maximum duration.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string | Search query (>= 2 chars) |
| difficulty | string | Optional difficulty filter. |
| categorySlug | string | Optional category to restrict the search to (e.g. 'cooking', 'crochet'). Use list_categories to see available slugs. |
| maxDurationMinutes | integer | Optional ceiling on tutorial total duration. Useful for 'quick recipes' / 'under 10 min' queries. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1
},
"query": {
"type": "string",
"description": "Search query (>= 2 chars)"
},
"difficulty": {
"enum": [
"easy",
"medium",
"advanced"
],
"type": "string",
"description": "Optional difficulty filter."
},
"categorySlug": {
"type": "string",
"description": "Optional category to restrict the search to (e.g. 'cooking', 'crochet'). Use list_categories to see available slugs."
},
"maxDurationMinutes": {
"type": "integer",
"minimum": 1,
"description": "Optional ceiling on tutorial total duration. Useful for 'quick recipes' / 'under 10 min' queries."
}
}
}