7.5 KiB
Hanzo AI Store
The official AI agent tools and MCP server marketplace for Hanzo Desktop.
Overview
Hanzo AI Store is a simple, flatfile-based marketplace that allows users to discover and install AI agent tools and MCP servers. It's built with Next.js and uses a git-based submission workflow via Pull Requests.
Features
- 🚀 Static Site Generation: Pre-compiled Next.js app for fast performance
- 🔍 Client-Side Filtering: All filtering happens in the browser for instant results
- 📦 Flatfile Database: Each app is a JSON file in
data/agents/ordata/tools/ - 🔄 Git-Based Submissions: Submit new apps via Pull Requests
- 🎨 One UI framework: @hanzo/ui components on @hanzo/gui — no Tailwind, Radix or shadcn
- 📱 Desktop & Web: Works in Hanzo Desktop and as a standalone web app
Getting Started
Installation
npm install
Generate Store Data
npm run generate-store
This reads every JSON file under data/agents/ and data/tools/ and generates public/store.json.
Development
npm run dev
Open http://localhost:3200 in your browser.
Build for Production
npm run build
This creates a static export in the out/ directory.
Project Structure
store/
├── app/ # Next.js app directory
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Main store page
│ └── globals.css # Global styles
├── data/
│ ├── agents/ # AI agents (one JSON per agent)
│ │ └── *.json
│ └── tools/ # Automation tools (one JSON per tool)
│ └── *.json
├── scripts/
│ └── generate-store.js # Generates public/store.json
├── types/
│ └── index.ts # TypeScript types
└── public/
└── store.json # Generated store data (gitignored)
Adding a New App
1. Fork the Repository
Click the "Fork" button on GitHub to create your own copy.
2. Create an App JSON File
Create a new file in data/agents/ (for AI agents) or data/tools/ (for automation tools) with your app's information:
{
"id": "my-awesome-server",
"name": "My Awesome Server",
"description": "A brief description of what your MCP server does",
"version": "1.0.0",
"author": "Your Name",
"repository": "https://github.com/yourusername/my-awesome-server",
"homepage": "https://your-docs-site.com",
"license": "MIT",
"category": "Development Tools",
"tags": ["mcp", "tools", "productivity"],
"icon": "https://your-icon-url.com/icon.png",
"installCommand": "npx -y @yourusername/my-awesome-server",
"mcpConfig": {
"command": "npx",
"args": ["-y", "@yourusername/my-awesome-server"],
"env": {
"API_KEY": "your-api-key-env-var"
}
},
"createdAt": "2025-01-05T00:00:00Z",
"updatedAt": "2025-01-05T00:00:00Z"
}
3. Submit a Pull Request
- Commit your changes
- Push to your fork
- Open a Pull Request against the main repository
- Wait for review and approval
App JSON Schema
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | ✅ | Unique identifier (kebab-case) |
name |
string | ✅ | Display name |
description |
string | ✅ | Brief description |
version |
string | ✅ | Semantic version (e.g., "1.0.0") |
author |
string | ✅ | Author name or organization |
category |
string | ✅ | Category (see Categories below) |
tags |
string[] | ✅ | Searchable tags |
repository |
string | ❌ | GitHub repository URL |
homepage |
string | ❌ | Documentation or homepage URL |
license |
string | ❌ | License (e.g., "MIT", "Apache-2.0") |
icon |
string | ❌ | Icon URL (square, min 128x128) |
screenshots |
string[] | ❌ | Screenshot URLs |
installCommand |
string | ❌ | Quick install command |
mcpConfig |
object | ❌ | MCP server configuration |
readme |
string | ❌ | Full README content (markdown) |
changelog |
string | ❌ | Changelog (markdown) |
rating |
number | ❌ | Average rating (1-5) |
downloads |
number | ❌ | Download count |
createdAt |
string | ✅ | ISO 8601 date |
updatedAt |
string | ✅ | ISO 8601 date |
Categories
- Development Tools
- Productivity
- Data & Analytics
- Communication
- File Management
- AI & Machine Learning
- Security
- Utilities
- Entertainment
- Other
API
The store data is available as a static JSON file at /store.json.
Response:
{
"apps": [...],
"categories": [...],
"version": "1.0.0",
"lastUpdated": "2025-01-05T12:00:00Z"
}
Integration with the desktop apps — this repo is the editorial source
The Hanzo / Lux / Zoo desktop apps do not read this repo or this site. They read the Market: static JSON on the CDN, with an in-app bundled copy as an offline fallback, so the catalog needs no backend to be readable.
https://cdn.hanzo.ai/market/index.json manifest: schema, version, counts
https://cdn.hanzo.ai/market/agents.json agents catalog
https://cdn.hanzo.ai/market/tools.json tools catalog
https://cdn.hanzo.ai/market/tools/{id}.json per-tool detail
What this repo owns is the curated catalog under data/agents/ and
data/tools/ — one reviewable JSON per item, changed by Pull Request. That is
the editorial source; hanzoai/cdn builds the served documents from it:
cd ../cdn && scripts/market.py gen --from ../store
So a merged PR here becomes a Market entry there. Do not hand-edit the generated
files in hanzoai/cdn, and do not point clients at store.hanzo.ai/store.json.
Development
Tech Stack
- Next.js 15: React framework with App Router, static export
- TypeScript 5.9: not 7 — Next reads tsconfig through the TypeScript JS API, which the TS 7 package does not ship; see the commit that pinned it
- @hanzo/gui + @hanzo/ui: the one component stack, on web, desktop and
native. Everything INSIDE a card is gui style props and @hanzo/ui components;
everything that POSITIONS the page is plain CSS in
app/globals.cssreading the tokens from@hanzo/ui/theme.css. Two concerns, two vocabularies, no Tailwind and no third way. - Playwright: the e2e suite reads computed styles, because @hanzo/gui ignores a prop it does not recognise without erroring — a green build does not prove a page renders
Scripts
npm run dev- Start development servernpm run build- Build for production (static export)npm start- Serve production build locallynpm run lint- Run ESLintnpm run typecheck-tsc --noEmitnpm run test:e2e- Playwright, againstnext devnpm run generate-store- Generate store.json from flatfiles
Contributing
We welcome contributions! Please see our Contributing Guide for details.
Submission Guidelines
- ✅ App must be a valid MCP server
- ✅ JSON must be valid and complete
- ✅ All required fields must be present
- ✅ ID must be unique and kebab-case
- ✅ Icon should be square (recommended 256x256)
- ✅ Repository should be public
- ✅ License should be open source
Review Process
- Automated checks run on PR
- Manual review by maintainers
- Merge and deploy to production
- App appears in store within 5 minutes
License
MIT © Hanzo AI
Support
- Issues: GitHub Issues
- Discord: Join our Discord
- Email: [email protected]