Create, manage, and share wishlists programmatically. Built for AI agents, integrations, and developers.
Bestboy exposes a Model Context Protocol (MCP) server for AI agent integration. The server implements JSON-RPC 2.0 over HTTP POST and supports both public and authenticated tool calls.
POST https://bestboy.app/api/mcp
Content-Type: application/json
The MCP server implements the 2024-11-05 protocol version with these JSON-RPC methods:
initialize — Returns server info and capabilitiestools/list — Lists all available toolstools/call — Executes a tool by name with argumentsping — Health checkAuthenticated tools require a Supabase JWT passed as a Bearer token. Public tools (reading shared wishlists, reserving wishes) need no token.
POST /api/mcp
Authorization: Bearer {supabase_jwt_token}
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_my_wishlists",
"arguments": {}
}
}
POST https://tcwbpxdiutixaoxwqtpo.supabase.co/auth/v1/token?grant_type=password
Content-Type: application/json
apikey: {SUPABASE_ANON_KEY}
{
"email": "user@example.com",
"password": "your_password"
}
// Response includes access_token to use as Bearer token
List all wishlists owned by the authenticated user.
Arguments: none
Create a new wishlist.
Arguments: name (required, string), description (optional, string)
Add a wish item, optionally attaching it to a list.
Arguments: name (required), link, price, emoji, description, listId
Get the shareable URL for a wishlist.
Arguments: listId (required, UUID)
Fetch a publicly shared wishlist and its wishes by share token. No authentication required.
Arguments: shareToken (required, string)
Anonymously reserve a wish on a shared wishlist.
Arguments: wishId (required, UUID), sessionId (optional)
curl -X POST https://bestboy.app/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {}
}'
curl -X POST https://bestboy.app/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}'
curl -X POST https://bestboy.app/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_shared_wishlist",
"arguments": {
"shareToken": "abc123xyz"
}
}
}'
curl -X POST https://bestboy.app/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "create_wishlist",
"arguments": {
"name": "Birthday 2026",
"description": "Things I want for my birthday"
}
}
}'
For direct database access, you can also use the Supabase PostgREST API.
All requests require the apikey header with the anon key and Authorization: Bearer with a user JWT.
See the OpenAPI specification for full endpoint documentation.
wishes — Individual wish itemswishes_lists — Wishlists (collections)wish_lists — Junction table linking wishes to listsprofiles — User profile databank_accounts — Payment info for donation wishesAI agents and clients can discover the API through multiple mechanisms:
HTTP Link headers are also returned on every response with references to all discovery endpoints.