Server definition
- Hash
- sha256:b9501802160222e01d74535b3c1630ac9fdda09e57ffd593bf94210f2b99d106
- What it is
- What a remote MCP server returned when asked what it offers: 22 tools
The blob, as servednamed by its sha256
{
"instructions": "Grabblist is a personal Grabblist for things you find online — products, services, rentals, courses, listings, videos — anything with a title and URL, usually with a price. Each saved item is a static snapshot of info at save time. Data does not auto-update.\n\nTerminology: each record is an \"item\", the collection of items is a \"Grabblist\" or \"saved items\".\n\nItem types: product, rental, service, course, listing, event, video, other. Detect from context — a hotel is \"rental\", an online class is \"course\", a Facebook listing is \"listing\", a concert ticket is \"event\", a YouTube link is \"video\". Videos and free content have no price: leave price out rather than inventing one.\n\nItems have a source field (extension, mcp, manual) and a decision status flow: considering → shortlisted → decided → bought | rejected.\n\nItems can have a target_price (what the user wants to pay) and can be linked with relations: alternative, complement, upgrade, duplicate, same_seller.\n\nCollections are folders for organizing items. They can have a budget. Deleting a collection does not delete items inside.\n\nAll mutation tools accept an optional \"reason\" parameter for change history. Every mutation is logged — use get_item_history and get_collection_activity to see changes.\n\nWorkflow: use add_item to save (set item_type, or leave it out to let the server infer it from the site). Use update_item to edit. Use get_wishlist/search_saved to browse. Use list_collections to discover collection IDs before using them. Use set_pinned_items to highlight up to 3 \"Top Picks\" on the share page.\n\nFEEDBACK: send_feedback sends a message to the Grabblist team. Use it only when the user asks to report a bug or request a feature, or agrees after you offer to report a problem you hit (price not extracted, wrong platform name, site blocked). Show the user the message before sending, and be specific: the URL that failed and the tool you were using.",
"tools": [
{
"description": "Save an item to the user's Grabblist. Creates a static snapshot — Grabblist does not monitor prices or auto-update data. Only include fields with values available from the source. Price is optional: omit it for videos and other things without a price. If no image is provided, the server attempts to fetch og:image automatically.",
"inputSchema": {
"properties": {
"attributes": {
"additionalProperties": {
"oneOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"description": "Specs/details as key-value pairs",
"type": "object"
},
"category": {
"description": "Category — pick the best match",
"enum": [
"electronics",
"furniture",
"home",
"clothing",
"vehicles",
"kids",
"sports",
"collectibles",
"tools",
"other"
],
"type": "string"
},
"condition": {
"description": "Condition if applicable: New, Used, Refurbished, Used - Like New, Used - Good, Used - Fair",
"maxLength": 100,
"type": "string"
},
"currency": {
"description": "Currency code of the price: USD, NZD, AUD, EUR, GBP, etc. Omit when there is no price.",
"maxLength": 10,
"type": "string"
},
"description": {
"description": "Description from the page (max 2000 chars)",
"maxLength": 2000,
"type": "string"
},
"image": {
"description": "Main image URL. Server auto-fetches og:image if not provided.",
"format": "uri",
"maxLength": 2000,
"type": "string"
},
"images": {
"description": "All image URLs found on the page",
"items": {
"format": "uri",
"maxLength": 2000,
"type": "string"
},
"type": "array"
},
"item_type": {
"description": "What kind of item: product (buy), rental (Airbnb), service (cleaning), course (Udemy), listing (classified), event (ticket), video (YouTube, Twitch, TikTok, Vimeo…). If omitted, the server infers it from the platform (video sites → video, otherwise product).",
"enum": [
"product",
"rental",
"service",
"course",
"listing",
"event",
"video",
"other"
],
"type": "string"
},
"location": {
"description": "Seller location or pickup location",
"maxLength": 500,
"type": "string"
},
"original_price": {
"description": "Original price before discount (if on sale)",
"maximum": 1000000000000,
"minimum": 0,
"type": "number"
},
"platform": {
"description": "Site domain name without TLD: amazon.com→\"amazon\", ebay.co.nz→\"ebay\", kiwiquads.co.nz→\"kiwiquads\"",
"maxLength": 100,
"type": "string"
},
"posted_at": {
"description": "When the listing was originally posted (ISO 8601)",
"maxLength": 64,
"type": "string"
},
"price": {
"description": "Price as a number (e.g. 99.99), taken from the page. Omit when the item has no price (videos, free content).",
"maximum": 1000000000000,
"minimum": 0,
"type": "number"
},
"quantity": {
"description": "How many of this item",
"maximum": 1000000,
"minimum": 1,
"type": "integer"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"maxLength": 1000,
"type": "string"
},
"seller_name": {
"description": "Seller or store name",
"maxLength": 200,
"type": "string"
},
"seller_rating": {
"description": "Seller rating 0-5",
"maximum": 5,
"minimum": 0,
"type": "number"
},
"seller_reviews": {
"description": "Number of seller reviews",
"maximum": 1000000000,
"minimum": 0,
"type": "integer"
},
"tags": {
"description": "Tags for categorization",
"items": {
"maxLength": 100,
"type": "string"
},
"type": "array"
},
"title": {
"description": "Exact title from the page",
"maxLength": 500,
"type": "string"
},
"url": {
"description": "Direct public HTTP(S) page URL.",
"format": "uri",
"maxLength": 2000,
"type": "string"
}
},
"required": [
"url",
"title",
"platform"
],
"type": "object"
},
"name": "add_item",
"outputSchema": null
},
{
"description": "Add a saved item to a collection. Both the item and collection must already exist.",
"inputSchema": {
"properties": {
"collection_id": {
"description": "The collection ID",
"type": "string"
},
"item_id": {
"description": "The item ID to add",
"type": "string"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
}
},
"required": [
"collection_id",
"item_id"
],
"type": "object"
},
"name": "add_to_collection",
"outputSchema": null
},
{
"description": "Create a new collection (folder) in the user's Grabblist to organize saved items.",
"inputSchema": {
"properties": {
"budget": {
"description": "Total spending target for this collection (e.g. 1500 for \"Build PC under $1500\")",
"type": "number"
},
"budget_currency": {
"description": "Currency for the budget (default: NZD)",
"type": "string"
},
"color": {
"description": "Hex color for the collection (e.g. \"#3B82F6\", \"#22C55E\", \"#A855F7\", \"#EC4899\", \"#F59E0B\", \"#EF4444\"). Default: #3B82F6",
"type": "string"
},
"description": {
"description": "Short description of what this collection is for",
"maxLength": 500,
"type": "string"
},
"icon": {
"description": "Material Symbols icon name (e.g. \"devices\", \"home\", \"shopping_bag\", \"checkroom\", \"directions_car\", \"favorite\"). Default: inventory_2",
"type": "string"
},
"name": {
"description": "Collection name, e.g. \"Gaming Setup\" or \"Gift Ideas\"",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_collection",
"outputSchema": null
},
{
"description": "Permanently delete a collection. Items inside are not deleted — they stay in the Grabblist.",
"inputSchema": {
"properties": {
"id": {
"description": "The collection ID to delete",
"type": "string"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "delete_collection",
"outputSchema": null
},
{
"description": "Remove one or more items from the user's Grabblist (soft-delete). Pass a single id or an array of ids for batch operations.",
"inputSchema": {
"properties": {
"id": {
"description": "Item ID or array of item IDs to delete",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"maxLength": 1000,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "delete_item",
"outputSchema": null
},
{
"description": "Get recent activity on a collection — additions, removals, edits.",
"inputSchema": {
"properties": {
"collection_id": {
"description": "The collection ID",
"type": "string"
},
"limit": {
"description": "Max events to return (default: 20)",
"maximum": 50,
"minimum": 1,
"type": "number"
}
},
"required": [
"collection_id"
],
"type": "object"
},
"name": "get_collection_activity",
"outputSchema": null
},
{
"description": "Get full details of a saved item by ID. Returns a static snapshot from the user's Grabblist.",
"inputSchema": {
"properties": {
"id": {
"description": "The item ID",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_item",
"outputSchema": null
},
{
"description": "Get all relations for an item — alternatives, complements, upgrades, duplicates. Returns the item and all connected items with their relation types.",
"inputSchema": {
"properties": {
"id": {
"description": "The item ID to get relations for",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_item_graph",
"outputSchema": null
},
{
"description": "Get the change history for a saved item — who changed what and when.",
"inputSchema": {
"properties": {
"item_id": {
"description": "The item ID",
"type": "string"
},
"limit": {
"description": "Max events to return (default: 20)",
"maximum": 50,
"minimum": 1,
"type": "number"
}
},
"required": [
"item_id"
],
"type": "object"
},
"name": "get_item_history",
"outputSchema": null
},
{
"description": "Get all saved items from the user's Grabblist. Each item is a static snapshot — data reflects the moment it was saved, not current prices.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max items to return (default: 50)",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"platform": {
"description": "Filter by platform (domain name, e.g. \"amazon\", \"ebay\", \"trademe\")",
"type": "string"
}
},
"type": "object"
},
"name": "get_wishlist",
"outputSchema": null
},
{
"description": "Create typed relations between items: alternative (A or B), complement (A and B together), upgrade (B replaces A), duplicate (same item different site), same_seller. Supports single pair (from_id, to_id, relation) or bulk (pairs array).",
"inputSchema": {
"properties": {
"from_id": {
"description": "First item ID (for single pair mode)",
"type": "string"
},
"pairs": {
"description": "Array of pairs to link (for bulk mode)",
"items": {
"properties": {
"from_id": {
"description": "First item ID",
"type": "string"
},
"relation": {
"description": "Type of relationship",
"enum": [
"alternative",
"complement",
"upgrade",
"duplicate",
"same_seller"
],
"type": "string"
},
"to_id": {
"description": "Second item ID",
"type": "string"
}
},
"required": [
"from_id",
"to_id",
"relation"
],
"type": "object"
},
"type": "array"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
},
"relation": {
"description": "Type of relationship (for single pair mode)",
"enum": [
"alternative",
"complement",
"upgrade",
"duplicate",
"same_seller"
],
"type": "string"
},
"to_id": {
"description": "Second item ID (for single pair mode)",
"type": "string"
}
},
"type": "object"
},
"name": "link_items",
"outputSchema": null
},
{
"description": "List all collections OR get a specific collection with its items. Without id: returns all collections with counts/values. With id: returns that collection's metadata and all items inside (with optional filters).",
"inputSchema": {
"properties": {
"created_by": {
"description": "Filter by who added: \"ai\" for AI-added items (only when id is provided)",
"enum": [
"user",
"ai",
"extension"
],
"type": "string"
},
"id": {
"description": "Collection ID — if provided, returns that collection with all its items. If omitted, lists all collections.",
"type": "string"
},
"max_price": {
"description": "Maximum price filter (only when id is provided)",
"type": "number"
},
"min_price": {
"description": "Minimum price filter (only when id is provided)",
"type": "number"
},
"platform": {
"description": "Filter by platform domain name, e.g. \"amazon\", \"ebay\" (only when id is provided)",
"type": "string"
},
"sort": {
"description": "Sort order (only when id is provided, default: newest)",
"enum": [
"newest",
"oldest",
"price_asc",
"price_desc",
"title"
],
"type": "string"
},
"status": {
"description": "Filter by decision status (only when id is provided)",
"enum": [
"considering",
"shortlisted",
"decided",
"bought",
"rejected"
],
"type": "string"
},
"tags": {
"description": "Filter items that have ALL these tags (only when id is provided)",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "list_collections",
"outputSchema": null
},
{
"description": "Test connectivity to Grabblist and return service version.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "ping",
"outputSchema": null
},
{
"description": "Remove one or more items from a collection. Pass a single item_id or an array of item_ids for batch removal. Items are NOT deleted — they stay in the Grabblist.",
"inputSchema": {
"properties": {
"collection_id": {
"description": "The collection ID",
"type": "string"
},
"item_ids": {
"description": "Item ID or array of item IDs to remove",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
}
},
"required": [
"collection_id",
"item_ids"
],
"type": "object"
},
"name": "remove_from_collection",
"outputSchema": null
},
{
"description": "Restore one or more deleted (archived) items back to the Grabblist. Pass a single id or an array of ids for batch restore.",
"inputSchema": {
"properties": {
"id": {
"description": "Item ID or array of item IDs to restore",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"maxLength": 1000,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "restore_item",
"outputSchema": null
},
{
"description": "Search within the user's saved items by keyword",
"inputSchema": {
"properties": {
"limit": {
"description": "Max results (default: 20)",
"maximum": 50,
"minimum": 1,
"type": "number"
},
"query": {
"description": "Search query",
"maxLength": 500,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_saved",
"outputSchema": null
},
{
"description": "Send feedback, a bug report or a feature request to the Grabblist team. Only call this when the user asks to report something, or agrees after you offer to report a problem (parsing failure, broken URL, missing feature); show them the message first. Be specific about what went wrong and where.",
"inputSchema": {
"properties": {
"error": {
"description": "Error message you received, if any",
"type": "string"
},
"message": {
"description": "What happened or what you propose. Be specific — the team reads this.",
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"tool": {
"description": "The tool you were using when the issue occurred (e.g. add_item, search_saved)",
"type": "string"
},
"type": {
"description": "Type: bug (something broken), parsing_failure (price/title/image not extracted), feature_request (wishlist), feedback (general feedback)",
"enum": [
"bug",
"parsing_failure",
"feature_request",
"feedback"
],
"type": "string"
},
"url": {
"description": "The URL where the issue occurred",
"format": "uri",
"type": "string"
}
},
"required": [
"type",
"message"
],
"type": "object"
},
"name": "send_feedback",
"outputSchema": null
},
{
"description": "Set the pinned \"Top Picks\" items for a collection (max 3). Pinned items are highlighted on the share page.",
"inputSchema": {
"properties": {
"collection_id": {
"description": "The collection ID",
"type": "string"
},
"item_ids": {
"description": "Items to pin, in display order (1st = top)",
"items": {
"type": "string"
},
"type": "array"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
}
},
"required": [
"collection_id",
"item_ids"
],
"type": "object"
},
"name": "set_pinned_items",
"outputSchema": null
},
{
"description": "Remove a relation between two items.",
"inputSchema": {
"properties": {
"from_id": {
"description": "First item ID",
"type": "string"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
},
"relation": {
"description": "The relation type to remove",
"enum": [
"alternative",
"complement",
"upgrade",
"duplicate",
"same_seller"
],
"type": "string"
},
"to_id": {
"description": "Second item ID",
"type": "string"
}
},
"required": [
"from_id",
"to_id",
"relation"
],
"type": "object"
},
"name": "unlink_items",
"outputSchema": null
},
{
"description": "Update a collection's name, icon, description, budget, or sharing status. Only provide the fields you want to change — omitted fields stay unchanged. Set is_public=true to share (returns public URL), is_public=false to unshare.",
"inputSchema": {
"properties": {
"budget": {
"description": "New budget amount",
"type": "number"
},
"budget_currency": {
"description": "New budget currency",
"type": "string"
},
"color": {
"description": "Hex color (e.g. \"#3B82F6\", \"#22C55E\", \"#EF4444\")",
"type": "string"
},
"description": {
"description": "New description",
"maxLength": 500,
"type": "string"
},
"icon": {
"description": "Material Symbols icon name (e.g. \"devices\", \"home\", \"shopping_bag\")",
"type": "string"
},
"id": {
"description": "The collection ID to update",
"type": "string"
},
"is_public": {
"description": "Set true to share (generates public URL), false to unshare",
"type": "boolean"
},
"name": {
"description": "New collection name",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "update_collection",
"outputSchema": null
},
{
"description": "Edit fields on one or more saved items. Pass a single id or an array of ids for batch updates (same fields applied to all). For batch: attributes are REPLACED not merged, og:image fallback is skipped.",
"inputSchema": {
"properties": {
"attributes": {
"additionalProperties": {
"oneOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"description": "Merge into existing attributes",
"type": "object"
},
"category": {
"description": "Item category",
"enum": [
"electronics",
"furniture",
"home",
"clothing",
"vehicles",
"kids",
"sports",
"collectibles",
"tools",
"other"
],
"type": "string"
},
"description": {
"description": "Item description (max 2000 chars)",
"maxLength": 2000,
"type": "string"
},
"id": {
"description": "Item ID or array of item IDs to update",
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"image_url": {
"description": "Main image URL",
"format": "uri",
"maxLength": 2000,
"type": "string"
},
"images": {
"description": "All image URLs — replaces the entire images array",
"items": {
"format": "uri",
"maxLength": 2000,
"type": "string"
},
"type": "array"
},
"is_favorite": {
"description": "Set true to favorite, false to unfavorite",
"type": "boolean"
},
"item_type": {
"description": "What kind of item this is",
"enum": [
"product",
"rental",
"service",
"course",
"listing",
"event",
"other"
],
"type": "string"
},
"notes": {
"description": "User or AI notes — personal comments, thoughts, comparisons",
"maxLength": 2000,
"type": "string"
},
"quantity": {
"description": "How many of this item",
"maximum": 1000000,
"minimum": 1,
"type": "integer"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"maxLength": 1000,
"type": "string"
},
"status": {
"description": "Decision status: considering, shortlisted, decided, bought, rejected",
"enum": [
"considering",
"shortlisted",
"decided",
"bought",
"rejected"
],
"type": "string"
},
"tags": {
"description": "Replace all tags with this list",
"items": {
"maxLength": 100,
"type": "string"
},
"type": "array"
},
"target_price": {
"description": "What the user wants to pay — not the actual price, but the goal price",
"maximum": 1000000000000,
"minimum": 0,
"type": "number"
},
"title": {
"description": "Item title",
"maxLength": 500,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "update_item",
"outputSchema": null
},
{
"description": "Manually update the price on a saved item. Records old and new price for comparison. This is a manual correction, not automatic price tracking.",
"inputSchema": {
"properties": {
"id": {
"description": "The item ID",
"type": "string"
},
"price": {
"description": "New current price",
"maximum": 1000000000000,
"minimum": 0,
"type": "number"
},
"reason": {
"description": "Why this change was made (shown to user in change history)",
"type": "string"
},
"source": {
"description": "Price update source",
"enum": [
"ai_check",
"manual"
],
"type": "string"
}
},
"required": [
"id",
"price"
],
"type": "object"
},
"name": "update_price",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b9501802160222e01d74535b3c1630ac9fdda09e57ffd593bf94210f2b99d106 | sha256sum