{"name":"io.github.apitoagents/sample-shop-mcp","slug":"apitoagents-sample-shop-mcp","title":"Sample Shop MCP server","description":"Sample shop MCP server: paginated search, idempotent orders, guarded cancellation. Four languages.","url":"https://mcp.market/server/apitoagents-sample-shop-mcp","rating":null,"grade":"B","score":84,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce","search"],"presence":{"score":36,"stars":0,"forks":0,"downloads_week":437,"last_push_at":"2026-10-07T21:24:55.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-10-25T14:51:27.141Z","last_ok_at":"2026-10-25T14:51:27.141Z","latency_ms":479},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/apitoagents/mcp-examples","website":"https://apitoagents.com/docs","version":"1.0.1","remotes":[{"type":"streamable-http","url":"https://demo.apitoagents.com/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@apitoagents/sample-shop-mcp","version":"1.0.1","runtimeHint":"npx","transport":{"type":"stdio"}}],"tools":[{"name":"cancel_order","description":"Cancel an order that has not shipped. This cannot be undone. Call it first with confirm=false to get the order details, show them to the user, and only after the user explicitly agrees call again with confirm=true.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"orderId":{"type":"string","description":"The order id, for example o-5001."},"confirm":{"default":false,"description":"Set true only after the user has explicitly confirmed the cancellation.","type":"boolean"}},"required":["orderId"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"create_order","description":"Place an order for one product. Generate one random idempotencyKey per user request and reuse the same key if you retry after an error or timeout; the shop returns the original order instead of creating a duplicate. Confirm product and quantity with the user before calling. Returns the order with its id, status and total.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"productId":{"type":"string","description":"Product id from search_products or get_product."},"quantity":{"type":"integer","minimum":1,"maximum":10,"description":"Units to order, 1 to 10."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":128,"description":"A unique key you generate for this order attempt and reuse on retry."}},"required":["productId","quantity","idempotencyKey"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_product","description":"Return the full details of one product by its id (for example p-1001). Use search_products first if you only know a name.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"productId":{"type":"string","description":"The product id from search_products."}},"required":["productId"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"search_products","description":"Search the shop catalogue by phrase and optional category. Returns one page of up to `limit` products and a `nextCursor`; when nextCursor is not null, more results exist and you must say so rather than claiming the list is complete. Use get_product for full details of one item. This tool does not place orders.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Words to match against product names and descriptions.","type":"string","maxLength":100},"category":{"description":"Restrict results to one category.","type":"string","enum":["lighting","furniture","kitchen"]},"limit":{"default":5,"description":"Page size.","type":"integer","minimum":1,"maximum":20},"cursor":{"description":"Opaque token from a previous page's nextCursor. Never invent one.","type":"string"}},"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":84,"grade":"B","scanned_at":"2026-10-13T23:17:04.872Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-13T23:17:04.842Z","components":{"code":{"score":25,"max":25,"notes":["7 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 874ms"]},"poisoning":{"score":15,"max":15,"notes":["4 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 6 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://demo.apitoagents.com/mcp","reachable":true,"authRequired":false,"latencyMs":874,"serverInfo":{"name":"sample-shop","version":"1.0.0"}}],"packages":[{"registryType":"npm","identifier":"@apitoagents/sample-shop-mcp","version":"1.0.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-10-07T21:03:47.453Z","repositoryUrl":"git+https://github.com/apitoagents/mcp-examples.git","weeklyDownloads":437}],"repo":{"found":true,"owner":"apitoagents","repo":"mcp-examples","archived":false,"pushedAt":"2026-10-07T21:24:55Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/339136651?v=4","ownerCreatedAt":"2026-10-07T12:24:59Z","license":"MIT"},"icon":{"url":"https://apitoagents.com/icon.svg?icon.2vucpqk8pnsdl.svg","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":437,"license":"MIT","lastPushAt":"2026-10-07T21:24:55.000Z","score":36}}}},"grade_history":[],"reviews":[]}