{
  "schema": 1,
  "updated_at": "2026-08-29T22:25:56.000Z",
  "packages": [
    {
      "name": "everything-demo",
      "label": "MCP Everything (Demo)",
      "description": "Reference MCP server exercising tools, prompts, and resources. A working example of a Leo dynamic package that installs with no rebuild.",
      "icon": "puzzle",
      "version": "1.0.0",
      "author": "Model Context Protocol",
      "homepage": "https://github.com/modelcontextprotocol/servers",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "@modelcontextprotocol/server-everything@2026.7.4"
        ],
        "timeout_secs": 30
      },
      "descriptor": {
        "fields": [],
        "pages": [],
        "migrations": []
      }
    },
    {
      "name": "figma",
      "label": "Figma",
      "description": "Read your Figma designs — file structure, rendered frames, and design tokens.",
      "icon": "paint-brush",
      "version": "0.1.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-figma",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "github:TheBananaStand/leo-figma#4405fd0533ad8c9ab6078c762db6ee4678c6be89"
        ],
        "timeout_secs": 60
      },
      "descriptor": {
        "fields": [
          {
            "key": "FIGMA_TOKEN",
            "label": "Figma personal access token",
            "field_type": "password",
            "required": true
          }
        ],
        "pages": [],
        "migrations": [],
        "entitlements": {
          "feed": false,
          "push": false,
          "settings_read": [
            "FIGMA_TOKEN"
          ],
          "network": [
            "api.figma.com"
          ],
          "sends": [
            {
              "to": "api.figma.com",
              "classes": [
                "credentials",
                "search_queries"
              ],
              "purpose": "Your Figma token, and the file key and node ids you ask about. Design data travels the other way — nothing from Leo is sent to Figma, and the package can only read."
            }
          ]
        }
      }
    },
    {
      "name": "game-studio-mcp",
      "label": "Game Studio",
      "description": "Bridge to the Game Studio service — projects, tasks, assets, builds and ComfyUI art.",
      "icon": "gamepad-2",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-game-studio-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-game-studio-mcp/archive/15ea53ead497fa0731f8df76f46881c8e53b66ea.tar.gz"
        ]
      },
      "descriptor": {
        "fields": [
          {
            "key": "game_studio_url",
            "label": "Game Studio URL",
            "field_type": "text",
            "required": false
          }
        ],
        "entitlements": {
          "settings_read": [
            "game_studio_url"
          ],
          "network": [
            "127.0.0.1"
          ],
          "sends": [
            {
              "to": "127.0.0.1",
              "classes": [
                "prompts"
              ],
              "purpose": "Nothing leaves this machine. The Game Studio service is a separate process on localhost, and what reaches it is what you asked for — project and task names, and the art prompts you write. Declared as prompts rather than as nothing sent, because the text is yours even when the destination is your own hardware."
            }
          ]
        }
      }
    },
    {
      "name": "gdrive-mcp",
      "label": "Google Drive",
      "description": "Google Drive tools for the agent — create, read, update, and list Leo-created files. Docs export as Markdown, Sheets as CSV. Operates under the drive.file scope: Leo only sees files it created.",
      "icon": "folder",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-gdrive-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-gdrive-mcp/archive/0ae3cb19803178f99a32a8ad016ad6f670fc6e91.tar.gz"
        ]
      },
      "descriptor": {
        "oauth_provider": "google",
        "entitlements": {
          "network": [
            "www.googleapis.com",
            "oauth2.googleapis.com"
          ],
          "oauth_tokens": [
            "google"
          ],
          "sends": [
            {
              "to": "www.googleapis.com",
              "classes": [
                "documents",
                "credentials"
              ],
              "purpose": "Your Google account grant — exchanged once per tool call for a short-lived access token, then discarded. File names, content, and metadata you ask the agent to read or write travel to Google's Drive API and nowhere else. Nothing from Leo's other packages is attached, and the grant is single-use: it cannot be replayed."
            }
          ]
        }
      }
    },
    {
      "name": "gmail",
      "label": "Gmail",
      "description": "Gmail as a mail provider for the Inbox — sync and flag write-through, installed at runtime.",
      "icon": "mail",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-gmail-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-gmail-mcp/archive/f2195c8b9655097fd02bd6834933d29b7449cdde.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "mail"
        ],
        "oauth_provider": "google",
        "entitlements": {
          "network": [
            "gmail.googleapis.com"
          ],
          "sends": [
            {
              "to": "gmail.googleapis.com",
              "classes": [
                "mail",
                "credentials"
              ],
              "purpose": "Your Google account token, and the read/starred/archived/trashed changes you make in the Inbox so they land in Gmail too. Mail travels one way — Google's servers to your hub — and nothing from Leo's other packages is attached. The token is minted by Leo per call from the Google account you already connected; this package holds no OAuth app of its own."
            }
          ]
        }
      }
    },
    {
      "name": "google-calendar",
      "label": "Google Calendar",
      "description": "Your Google calendars, synced into Leo's calendar — installed at runtime.",
      "icon": "calendar",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-google-calendar-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-google-calendar-mcp/archive/af1dfe5c4fe2cc9391faf327611bd3e74c9a59d8.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "calendar"
        ],
        "oauth_provider": "google",
        "entitlements": {
          "network": [
            "www.googleapis.com"
          ],
          "sends": [
            {
              "to": "www.googleapis.com",
              "classes": [
                "calendar",
                "credentials"
              ],
              "purpose": "Your Google account token, so Leo can read the calendars you have connected. Events travel one way — Google's servers to your hub — and nothing from Leo's other packages is attached. The token is minted by Leo per call from the Google account already connected; this package holds no OAuth app of its own."
            }
          ]
        }
      }
    },
    {
      "name": "leo-elevenlabs-mcp",
      "label": "ElevenLabs (MCP)",
      "description": "Text-to-speech via ElevenLabs, installed at runtime — no rebuild.",
      "icon": "volume-2",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-elevenlabs-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-elevenlabs-mcp/archive/e856ed69f4c15036fdd454ce94a2ccc82be9491e.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "tts"
        ],
        "fields": [
          {
            "key": "elevenlabs_api_key",
            "label": "API Key",
            "field_type": "password",
            "required": true
          },
          {
            "key": "elevenlabs_voice_id",
            "label": "Voice ID",
            "field_type": "text",
            "required": true
          },
          {
            "key": "elevenlabs_model",
            "label": "Model",
            "field_type": "select",
            "required": false,
            "options": [
              "eleven_multilingual_v2",
              "eleven_turbo_v2_5"
            ]
          }
        ],
        "entitlements": {
          "settings_read": [
            "elevenlabs_api_key",
            "elevenlabs_voice_id",
            "elevenlabs_model"
          ],
          "network": [
            "api.elevenlabs.io"
          ],
          "sends": [
            {
              "to": "api.elevenlabs.io",
              "classes": [
                "prompts"
              ],
              "purpose": "The text Leo is about to speak aloud. That is whatever you asked it to say or read back, so it can contain anything a spoken reply would."
            }
          ]
        }
      }
    },
    {
      "name": "leo-pexels-mcp",
      "label": "Pexels (MCP)",
      "description": "Wallpaper photos from Pexels, installed at runtime — no rebuild.",
      "icon": "image",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-pexels-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-pexels-mcp/archive/d01795894a3ae0e45405cbece71094cce6d36993.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "wallpaper"
        ],
        "fields": [
          {
            "key": "pexels_api_key",
            "label": "API Key",
            "field_type": "password",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "pexels_api_key"
          ],
          "network": [
            "api.pexels.com"
          ],
          "sends": [
            {
              "to": "api.pexels.com",
              "classes": [
                "search_queries"
              ],
              "purpose": "The wallpaper search phrases and nothing else — a few words describing a scene. No conversation, file or account data is attached."
            }
          ]
        }
      }
    },
    {
      "name": "leo-unsplash-mcp",
      "label": "Unsplash (MCP)",
      "description": "Wallpaper photos from Unsplash, installed at runtime — no rebuild.",
      "icon": "image",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-unsplash-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-unsplash-mcp/archive/9e4d071daccfadba55739abd4a01a8e92f1c1838.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "wallpaper"
        ],
        "fields": [
          {
            "key": "unsplash_access_key",
            "label": "Access Key",
            "field_type": "password",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "unsplash_access_key"
          ],
          "network": [
            "api.unsplash.com"
          ],
          "sends": [
            {
              "to": "api.unsplash.com",
              "classes": [
                "search_queries"
              ],
              "purpose": "The wallpaper search phrases and nothing else — a few words describing a scene. No conversation, file or account data is attached."
            }
          ]
        }
      }
    },
    {
      "name": "proluxe-mcp",
      "label": "Proluxe",
      "description": "Proluxe ERP — customers, orders, invoices, BOMs and projects, installed at runtime — no rebuild.",
      "icon": "briefcase",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-proluxe-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-proluxe-mcp/archive/eeb0cca67ad205e11489464254db3629709d8dc8.tar.gz"
        ]
      },
      "descriptor": {
        "fields": [
          {
            "key": "proluxe_api_url",
            "label": "API URL",
            "field_type": "text",
            "required": true
          },
          {
            "key": "proluxe_auth0_client_id",
            "label": "Auth0 Client ID",
            "field_type": "password",
            "required": true
          },
          {
            "key": "proluxe_auth0_client_secret",
            "label": "Auth0 Client Secret",
            "field_type": "password",
            "required": true
          },
          {
            "key": "proluxe_auth0_domain",
            "label": "Auth0 Domain",
            "field_type": "text",
            "required": false
          },
          {
            "key": "proluxe_auth0_audience",
            "label": "Auth0 Audience",
            "field_type": "text",
            "required": false
          },
          {
            "key": "proluxe_user_email",
            "label": "User Email",
            "field_type": "text",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "proluxe_api_url",
            "proluxe_auth0_client_id",
            "proluxe_auth0_client_secret",
            "proluxe_auth0_domain",
            "proluxe_auth0_audience",
            "proluxe_user_email"
          ],
          "network": [
            "proluxe-portal.auth0.com",
            "portal.proluxe.com"
          ],
          "sends": [
            {
              "to": "proluxe-portal.auth0.com",
              "classes": [
                "credentials"
              ],
              "purpose": "The machine-to-machine client id and secret you entered, exchanged for an access token. Nothing else — no query, no record, no conversation."
            },
            {
              "to": "portal.proluxe.com",
              "classes": [
                "search_queries",
                "contacts"
              ],
              "purpose": "What you are looking up in the ERP — a customer or product search phrase, a Salesforce record id, a part number, a date range — plus the user email you configured, sent on every request as the header that scopes it to you. Contacts is listed because a customer search phrase is usually a company or a person's name. No conversation, file or account data is attached. Invoices, orders and financial records come back from the gateway; none are sent to it."
            }
          ]
        }
      }
    },
    {
      "name": "recraft",
      "label": "Recraft",
      "description": "Professional image generation, vectorizing and background removal — installed at runtime.",
      "icon": "palette",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-recraft-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-recraft-mcp/archive/ba30d389360069ad7a2f193b7aaf4f394df346e8.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "image_gen"
        ],
        "fields": [
          {
            "key": "recraft_api_key",
            "label": "API Key",
            "field_type": "password",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "recraft_api_key"
          ],
          "network": [
            "external.api.recraft.ai"
          ],
          "sends": [
            {
              "to": "external.api.recraft.ai",
              "classes": [
                "prompts",
                "photos"
              ],
              "purpose": "The prompt you asked for an image from, and — for vectorize and background removal — the image file you pointed at. Nothing else from Leo travels with it."
            }
          ]
        }
      }
    },
    {
      "name": "redfin-mcp",
      "label": "Redfin",
      "description": "Redfin listings, walk scores, mortgage rates and agents, installed at runtime — no rebuild.",
      "icon": "map-pin",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-redfin-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-redfin-mcp/archive/a742c51d79d5d81fccd2ab8fa9c72246efca910f.tar.gz"
        ]
      },
      "descriptor": {
        "fields": [
          {
            "key": "redfin_rapidapi_key",
            "label": "RapidAPI Key",
            "field_type": "password",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "redfin_rapidapi_key"
          ],
          "network": [
            "unofficial-redfin.p.rapidapi.com"
          ],
          "sends": [
            {
              "to": "unofficial-redfin.p.rapidapi.com",
              "classes": [
                "search_queries",
                "location"
              ],
              "purpose": "The place you are asking about — a city, ZIP or street address — plus any price and bedroom filters. Addresses are listed as location and not just as a search phrase, because searching for a home says where you live or intend to. No conversation, file or account data is attached."
            }
          ]
        }
      }
    },
    {
      "name": "tavily-mcp",
      "label": "Web Search (Tavily, MCP)",
      "description": "Tavily web search, installed at runtime — no rebuild.",
      "icon": "search",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-tavily-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-tavily-mcp/archive/458666526d6148fbca45f9faab3d4f499a1ee0a9.tar.gz"
        ]
      },
      "descriptor": {
        "provides": [
          "web_search"
        ],
        "fields": [
          {
            "key": "tavily_api_key",
            "label": "API Key",
            "field_type": "password",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "tavily_api_key"
          ],
          "network": [
            "api.tavily.com"
          ],
          "sends": [
            {
              "to": "api.tavily.com",
              "classes": [
                "search_queries"
              ],
              "purpose": "The search text and nothing else. Claude writes the query from your conversation, so it can quote what you said — but no transcript, file or account data is attached to it."
            }
          ]
        }
      }
    },
    {
      "name": "testflight-mcp",
      "label": "TestFlight",
      "description": "Deploy registered iOS projects to TestFlight, and read back what App Store Connect numbered them — installed at runtime, no rebuild.",
      "icon": "rocket",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-testflight-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-testflight-mcp/archive/a954a14d3e59974889dc87ce709bd05b588be5a9.tar.gz"
        ]
      },
      "descriptor": {
        "fields": [
          {
            "key": "asc_key_id",
            "label": "App Store Connect Key ID",
            "field_type": "text",
            "required": true
          },
          {
            "key": "asc_issuer_id",
            "label": "App Store Connect Issuer ID",
            "field_type": "text",
            "required": true
          },
          {
            "key": "asc_private_key",
            "label": "App Store Connect Private Key (.p8)",
            "field_type": "password",
            "required": false
          }
        ],
        "entitlements": {
          "settings_read": [
            "asc_key_id",
            "asc_issuer_id",
            "asc_private_key",
            "mac_host",
            "mac_user",
            "mac_password"
          ],
          "network": [
            "api.appstoreconnect.apple.com"
          ],
          "sends": [
            {
              "to": "api.appstoreconnect.apple.com",
              "classes": [
                "credentials"
              ],
              "purpose": "A short-lived token signed with your App Store Connect key, and the bundle identifier of the app being asked about. Nothing else — no source, no conversation, no account data. The project source itself never goes here; it goes to your own Mac over ssh, which is not an internet host and is not listed."
            }
          ]
        }
      }
    },
    {
      "name": "transcript-mcp",
      "label": "Transcript",
      "description": "Timestamped transcripts of YouTube and TikTok videos, installed at runtime — no rebuild.",
      "icon": "closed-captioning",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-transcript-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-transcript-mcp/archive/ab1ed9832c67e213bf4c1f099bbbdfc9f117a3d2.tar.gz"
        ]
      },
      "descriptor": {
        "fields": [
          {
            "key": "yt_dlp_path",
            "label": "yt-dlp path (optional)",
            "field_type": "text",
            "required": false
          },
          {
            "key": "whisper_path",
            "label": "whisper-ctranslate2 path (optional)",
            "field_type": "text",
            "required": false
          }
        ],
        "entitlements": {
          "settings_read": [
            "yt_dlp_path",
            "whisper_path"
          ],
          "network": [
            "youtube.com",
            "tiktok.com"
          ],
          "sends": [
            {
              "to": "youtube.com",
              "classes": [
                "prompts"
              ],
              "purpose": "The video URL, and nothing else. Fetching the page and its caption track is an ordinary anonymous request — no account, no conversation, no file contents are attached to it."
            },
            {
              "to": "tiktok.com",
              "classes": [
                "prompts"
              ],
              "purpose": "The video URL, and nothing else — the same anonymous fetch as YouTube."
            }
          ]
        }
      }
    },
    {
      "name": "words-with-fam",
      "label": "Words With Fam",
      "description": "Play Words With Friends with your family — full 15×15 board, the real tile set and premium squares, dictionary-validated plays, blanks, swaps, and scoring.",
      "icon": "puzzle-piece",
      "version": "0.2.0",
      "author": "scottraio",
      "homepage": "https://github.com/scottraio/leo-words-with-fam",
      "descriptor": {
        "kind": "app",
        "app": {
          "repo": "https://github.com/scottraio/leo-words-with-fam",
          "rev": "2f64b40c9292fbb275430bd11aae3ba579e4c382",
          "branch": "main",
          "build": "cargo build --release",
          "bin": "target/release/leo-words-with-fam",
          "port": 0
        },
        "pages": [
          {
            "path": "play",
            "label": "Words",
            "icon": "puzzle-piece",
            "sidebar_group": "Family"
          }
        ]
      }
    },
    {
      "name": "zillow-mcp",
      "label": "Zillow",
      "description": "Zillow listings, Zestimates and comparables, installed at runtime — no rebuild.",
      "icon": "home",
      "version": "1.0.0",
      "author": "TheBananaStand",
      "homepage": "https://github.com/TheBananaStand/leo-zillow-mcp",
      "category": "package",
      "mcp": {
        "transport": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "https://github.com/TheBananaStand/leo-zillow-mcp/archive/922f9706503560de0fdb0280222b359426c2c5d7.tar.gz"
        ]
      },
      "descriptor": {
        "fields": [
          {
            "key": "zillow_rapidapi_key",
            "label": "RapidAPI Key",
            "field_type": "password",
            "required": true
          }
        ],
        "entitlements": {
          "settings_read": [
            "zillow_rapidapi_key"
          ],
          "network": [
            "real-time-zillow-data.p.rapidapi.com"
          ],
          "sends": [
            {
              "to": "real-time-zillow-data.p.rapidapi.com",
              "classes": [
                "search_queries",
                "location"
              ],
              "purpose": "The place you are asking about — a city, ZIP or street address — plus any price and bedroom filters. Addresses are listed as location and not just as a search phrase, because searching for a home says where you live or intend to. No conversation, file or account data is attached."
            }
          ]
        }
      }
    }
  ]
}
