Developers

Build on Hatch

Two ways to plug in: the MCP server for AI agents that publish and act on your behalf, and a public read-only REST API for anything that just needs the gallery data.

MCP server

Connect an agent

The Hatch MCP server speaks the Streamable HTTP transport and authenticates with a personal API key. Three steps to connect from Claude Code.

  1. 1

    Get your API key

    Generate a personal key — it carries your identity, so anything the agent publishes or sends is attributed to you. You'll see the token only once.

    Sign in to generate a personal API key for the MCP server.

    Sign in
  2. 2

    Add the MCP server

    Register the server with Claude Code. Replace YOUR_KEY with the key from the previous step.

    claude mcp add --transport http hatch https://hatch-mcp-production.up.railway.app/mcp \
      --header "Authorization: Bearer YOUR_KEY"

    Using a different MCP client? Add this to its config file instead:

    {
      "mcpServers": {
        "hatch": {
          "url": "https://hatch-mcp-production.up.railway.app/mcp",
          "headers": {
            "Authorization": "Bearer YOUR_KEY"
          }
        }
      }
    }
  3. 3

    Verify the connection

    List your MCP servers — hatch should appear as connected. The agent can now call any of the tools below.

    claude mcp list

Tools

15 — 6 read · 2 publish · 7 social

  • list_apps
  • search_apps
  • get_app
  • list_categories
  • get_profile
  • list_notifications
  • publish_app
  • update_app
  • like_app
  • unlike_app
  • save_app
  • unsave_app
  • follow_user
  • unfollow_user
  • send_message

Resources

3 — addressable by URI

  • hatch://app/{slug}
  • hatch://profile/{handle}
  • hatch://notifications

Prompts

3 — guided workflows

  • draft_app_description
  • review_my_apps
  • compose_message
REST API

Public read-only API

Every endpoint returns JSON and is open via CORS — no API key needed. For publishing or social actions, use the authenticated MCP server above.

Base URL: https://hatch.dev · Rate limit: 60 requests per minute per IP

GET/api/v1/apps

Paginated list of published apps, newest first. Optionally filtered by category.

categorystring · optionalFilter by category id.
limitint 1–100 · default 30Maximum number of results to return.
cursorISO datetime · optionalKeyset pagination — pass the previous response's next_cursor.
curl https://hatch.dev/api/v1/apps?limit=10
GET/api/v1/apps/{slug}

Full detail for a single published app, looked up by its slug.

curl https://hatch.dev/api/v1/apps/lumen-fm
GET/api/v1/profiles/{handle}

A builder's public profile together with the apps they have published.

curl https://hatch.dev/api/v1/profiles/alex.k
GET/api/v1/categories

All app categories with their labels and icons.

curl https://hatch.dev/api/v1/categories
GET/api/v1/search

Full-text search across published apps by title, tagline and tags.

qstring 2–100 · requiredSearch query (2–100 characters).
limitint 1–50 · default 30Maximum number of results to return.
curl "https://hatch.dev/api/v1/search?q=audio"

Example response — GET /api/v1/apps

{
  "apps": [
    {
      "slug": "lumen-fm",
      "title": "Lumen.fm",
      "tagline": "Ambient soundscapes for deep work",
      "category_id": "audio",
      "link": "https://lumen.fm",
      "tags": ["audio", "ambient"],
      "built_with": ["claude", "gpt-4o"],
      "published_at": "2026-05-01T12:00:00Z",
      "likes_count": 284,
      "comments_count": 32,
      "author": { "handle": "alex.k", "display_name": "Alex K" }
    }
  ],
  "next_cursor": "2026-05-01T12:00:00Z"
}
Download OpenAPI specFull request and response schemas, generated from the live API.