Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,528Letters: 13Defects: 1,322counted 2 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:b9501802160222e01d74535b3c1630ac9fdda09e57ffd593bf94210f2b99d106 | sha256sum