Get started

API & MCP

Search the Launch Llama catalog, audit a site before it launches, plan directory campaigns, and run founder ops (analytics, badge, changelog) — from an agent or from curl. MCP and REST share the same tools; signed-in site chat calls them too.

OpenAPI spec → Discovery JSON → llms.txt → MCP markdown →

MCP and REST share one backend — the same catalog search, readiness checks, and draft creation either way.

Claude.ai connectors / registry: Launch Llama is not listed there. Use Claude Code or Claude Desktop with the Streamable HTTP URL below, or call REST with curl (no API key for drafts).

What an agent can do

Reads are anonymous. Your agent can search the catalog, pull a full listing, and run a launch readiness audit against any URL without credentials.

Draft creation is also anonymous — pass a product URL and founder email to POST /submissions (or MCP submit_product). The response includes a review_url. The UUID in that link is the secret. Founders must sign in at /submit to finish.

What an agent cannot do

Anonymous agents open drafts only — they cannot publish, pay, or install the badge. MCP cannot publish.

Approved partners with an X-Partner-Key can publish live via publish: true, founder email, and marketing_consent: true. That path skips free upvote/badge gates. Partners must collect consent before calling publish. Keep the key on your server — never in a webpage or public repo.

Endpoints at a glance

MCPhttps://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp
RESThttps://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1
Submithttps://tools.launchllama.co/submit

Preflight: launch readiness

Before submit_product, run check_launch_readiness on the product URL for duplicate checks, badge detection, and a suggested listing.

Quickstart

No API keys to create. Run a catalog search, audit the URL, then open a draft.

1. Search the catalog

curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products?q=ai&limit=5" \
  -H "Accept: application/json"

2. Audit the URL

curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/launch-readiness?url=https://yourproduct.com" \
  -H "Accept: application/json"

3. Open a draft

curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
  -H "Content-Type: application/json" \
  -H "X-Partner-Source: your-agent" \
  -d '{"url":"https://yourproduct.com","email":"founder@yourproduct.com"}'

Authentication

Public reads and drafts

Search, readiness, and draft creation need no key. The draft UUID is the secret. X-Partner-Source is attribution only.

Partner publish

Live publish needs an issued X-Partner-Key on your server — never in a browser. MCP cannot publish.

Founder tools

Authorization: Bearer <Supabase user JWT> for /me/* (same session as the dashboard).

Got a directory? Apply to use our API

If you run a startup or AI directory, you can publish listings live with a partner key. Agents and MCP still only open drafts. Approved partners skip the free badge, upvote, and wait gates.

Keep the key on your server. Collect founder email and newsletter consent before you publish.

Apply to use the API →

REST API

Plain HTTP for scripts, CI, and partner integrations. The MCP server calls these same paths.

Operation Method Path Auth Input
search_products

Keyword search with optional category, type, and period filters.

GET /products None q, limit, offset, category, type, period
get_top_products

Top N listings by upvotes — no keyword required.

GET /products/top None n, offset, category, type, period
list_categories

Distinct category labels for filter discovery.

GET /categories None
get_product

The full listing for one product.

GET /products/{slug} None slug
list_launch_directories

Vetted directory submission catalog (~610) with filters.

GET /launch-directories None category, pricing, min_dr, launch_platform, q, limit, offset, sort
plan_directory_campaign

Week-by-week Free→Freemium→Paid directory plan.

POST /directory-campaign/plan None url, category, budget, limit
check_launch_readiness

Preflight audit: duplicates, badge, listing quality, next free weeks.

GET /launch-readiness None url
get_badge_snippet

HTML + markdown badge snippets.

GET /badge None variant
verify_badge

Scrape badge; with JWT + ownership sets badge_added.

POST /badge/verify None (JWT to persist) url, tool_id?
get_newsletter_ad_options

Newsletter ad packages + checkout deep links (no Stripe session).

GET /newsletter-ads None tool_id?
get_first_users_report

First Users ICP report from homepage scrape + AI.

POST /first-users None (JWT for tool_id) url | tool_id
submit_product

Open a draft, or partner-publish a live listing with /submit fields (skips badge/upvote gates).

POST /submissions None (draft) · X-Partner-Key (publish) url, partner, email, marketing_consent, publish, categories, pricing_tier, …
get_submission

Fetch a draft you already created (resume in the browser).

GET /submissions/{id} UUID secret id
get_my_launches

Owned launches with status, badge, go_live, weekly rank.

GET /me/launches Bearer JWT
get_launch_analytics

Owner analytics: impressions, clicks, outbound, newsletter opens.

GET /me/launches/{id}/analytics Bearer JWT tool id or slug
get_directory_campaign_status

Directory order + submission results for an owned tool.

GET /me/launches/{id}/directory-campaign Bearer JWT tool id or slug
advise_growth

Structured growth advice: quality, badge, plan, ads, Featured.

GET /me/launches/{id}/advise-growth Bearer JWT tool id or slug
publish_changelog

Append a published changelog entry on the product page.

POST /me/launches/{id}/changelog Bearer JWT title, body

Products

list_categories

Distinct category labels for filter discovery.

Method:
GET /categories
Auth:
None
Input:
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/categories" \
  -H "Accept: application/json"

get_top_products

Top N listings by upvotes — no keyword required.

Method:
GET /products/top
Auth:
None
Input:
n, offset, category, type, period
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products/top?n=10&category=AI&period=week" \
  -H "Accept: application/json"

search_products

Keyword search with optional category, type, and period filters.

Method:
GET /products
Auth:
None
Input:
q, limit, offset, category, type, period
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products?q=ai&limit=5" \
  -H "Accept: application/json"

get_product

The full public listing for one product slug.

Method:
GET /products/{slug}
Auth:
None
Input:
slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products/clawteams" \
  -H "Accept: application/json"

Directories &amp; badge

Plan backlink campaigns from the vetted directory catalog, grab the free badge snippet, and verify install.

list_launch_directories

Filter the ~610 vetted directories in the Launch Llama tracker.

Method:
GET /launch-directories
Auth:
None
Input:
category, pricing, min_dr, launch_platform, q, limit, offset, sort
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/launch-directories?pricing=Free&min_dr=40&limit=10" \
  -H "Accept: application/json"

plan_directory_campaign

Week-by-week plan: Free by DR first, then Freemium, then Paid.

Method:
POST /directory-campaign/plan
Auth:
None
Input:
url, category, budget, limit
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/directory-campaign/plan" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://yourproduct.com","category":"AI","budget":"mixed","limit":24}'

get_badge_snippet

HTML and markdown badge snippets plus docs links.

Method:
GET /badge
Auth:
None
Input:
variant=default|white
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/badge" -H "Accept: application/json"

verify_badge

Scrape the page for the badge. With Bearer JWT + owned tool_id, sets badge_added=true.

Method:
POST /badge/verify
Auth:
None (JWT to persist)
Input:
url, tool_id?
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/badge/verify" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
  -d '{"url":"https://yourproduct.com","tool_id":"YOUR_TOOL_UUID"}'

get_first_users_report

First Users ICP report: segments, pain points, subreddits, search queries.

Method:
POST /first-users
Auth:
None (JWT for tool_id)
Input:
url | tool_id
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/first-users" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://yourproduct.com"}'

Launch readiness

check_launch_readiness

Preflight audit: duplicate check, free badge detection, listing quality hints, next free launch weeks, badge HTML snippet, suggested listing, and next steps. Run this before submit_product.

Method:
GET /launch-readiness
Auth:
None
Input:
url
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/launch-readiness?url=https://yourproduct.com" \
  -H "Accept: application/json"

Submissions

submit_product

Anonymous draft, or partner publish with /submit fields (live, skips free gates).

Method:
POST /submissions
Auth:
None (draft) · X-Partner-Key (publish)
Input:
url, partner, email, marketing_consent, publish, categories, pricing_tier, …
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
  -H "Content-Type: application/json" \
  -H "X-Partner-Source: your-agent" \
  -d '{"url":"https://yourproduct.com","email":"founder@yourproduct.com"}'

Partner publish

curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
  -H "Content-Type: application/json" \
  -H "X-Partner-Key: YOUR_PARTNER_KEY" \
  -d '{
    "url":"https://yourproduct.com",
    "publish":true,
    "email":"founder@yourproduct.com",
    "marketing_consent":true,
    "partner":"your-partner-slug",
    "product_name":"Your Product",
    "short_description":"One-line tagline",
    "long_description":"Optional longer description",
    "creator_name":"Founder Name",
    "categories":["Artificial Intelligence","SaaS"],
    "pricing_tier":"freemium",
    "twitter_handle":"founder",
    "logo_url":"https://yourproduct.com/logo.png"
  }'

get_submission

Fetch an open draft by UUID from POST /submissions (the id field). Placeholders like {draft-id} are not valid.

Method:
GET /submissions/{id}
Auth:
UUID secret
Input:
id
# 1) Open a draft (copy the "id" UUID from the JSON response)
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://yourproduct.com"}'

# 2) Fetch that draft — use the real UUID, not the literal text "{draft-id}"
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions/00000000-0000-0000-0000-000000000000" \
  -H "Accept: application/json"

Founder (/me)

Pass Authorization: Bearer <Supabase user JWT> (same session as the dashboard).

get_my_launches

Owned launches with status, badge, go_live_at, and current-week rank when available.

Method:
GET /me/launches
Auth:
Bearer JWT
Input:
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches" \
  -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
  -H "Accept: application/json"

get_launch_analytics

Owner analytics: engagement, impressions/clicks, newsletter feature opens.

Method:
GET /me/launches/{id}/analytics
Auth:
Bearer JWT
Input:
tool id or slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/analytics" \
  -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
  -H "Accept: application/json"

get_directory_campaign_status

Directory backlink orders and submission results for an owned tool.

Method:
GET /me/launches/{id}/directory-campaign
Auth:
Bearer JWT
Input:
tool id or slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/directory-campaign" \
  -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
  -H "Accept: application/json"

advise_growth

Structured growth payload: page quality, badge, rank, directory plan, newsletter ads.

Method:
GET /me/launches/{id}/advise-growth
Auth:
Bearer JWT
Input:
tool id or slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/advise-growth" \
  -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
  -H "Accept: application/json"

publish_changelog

Append a published changelog entry on the product page.

Method:
POST /me/launches/{id}/changelog
Auth:
Bearer JWT
Input:
title, body
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/changelog" \
  -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{"title":"Shipped dark mode","body":"- Dark theme\n- Faster cold start"}'

get_newsletter_ad_options

Newsletter ad packages + checkout deep links (no Stripe session from the API).

Method:
GET /newsletter-ads
Auth:
None
Input:
tool_id?
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/newsletter-ads" \
  -H "Accept: application/json"

Recommended workflow

  1. 1. Discover categories

    list_categories returns valid category labels — use them with get_top_products or search_products filters.

    GET /categories
  2. 2. Browse or search the catalog

    get_top_products ranks the live catalog without a keyword (e.g. top 10 AI tools this week). search_products adds a text query on name and tagline.

    GET /products/top?n=10&category=AI&period=week
  3. 3. Look around by keyword

    search_products tells you what already exists in the category you are launching into — the fastest way to write a tagline that is not a duplicate of three others.

    GET /products?q=…&category=…
  4. 4. Audit before you write anything

    check_launch_readiness returns whether the URL is already listed, whether the free badge is installed, listing quality hints, next free launch weeks, a suggested listing, and the badge snippet if it is missing.

    GET /launch-readiness?url=…
  5. 5. Plan directory backlinks

    list_launch_directories and plan_directory_campaign sequence Free→Freemium→Paid submissions by DR.

    GET /launch-directories · POST /directory-campaign/plan
  6. 6. Open the draft (or partner-publish)

    Anonymous submit_product requires founder email, returns review_url, and emails them a finish-listing sequence. Approved partners can pass publish=true with X-Partner-Key, email, and marketing_consent=true to go live immediately (skips badge + upvote gates).

    POST /submissions
  7. 7. Founder finishes in the browser (draft path)

    For drafts: edit copy, upload media, install the free badge or pick Instant Launch, and submit. Partner-published listings are already live.

    /submit?draft=…
  8. 8. Founder ops (signed in)

    Pass Authorization: Bearer <Supabase user JWT> for get_my_launches, analytics, advise_growth, directory campaign status, and publish_changelog. Site chat uses the same tools when logged in.

    GET /me/launches

Anonymous drafts need a human at /submit. Partner publish (X-Partner-Key) goes live immediately and skips free badge/upvote gates.

Install MCP

Streamable HTTP MCP — hosted, nothing to install from npm. Not available via the Claude.ai web connectors registry; use Claude Code, Claude Desktop, or Cursor.

https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp

Claude Code

claude mcp add --transport http launchllama https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp

Cursor / Claude Desktop

{
  "mcpServers": {
    "launchllama": {
      "url": "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp"
    }
  }
}

Verify it works

curl -i https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

MCP tools

ToolAuth
search_products None
get_top_products None
list_categories None
get_product None
list_launch_directories None
plan_directory_campaign None
check_launch_readiness None
get_badge_snippet None
verify_badge None (JWT to persist)
get_newsletter_ad_options None
get_first_users_report None (JWT for tool_id)
submit_product None (draft) · X-Partner-Key (publish)
get_submission UUID secret
get_my_launches Bearer JWT
get_launch_analytics Bearer JWT
get_directory_campaign_status Bearer JWT
advise_growth Bearer JWT
publish_changelog Bearer JWT

Rate limits

Public reads and draft creation are open today with no API keys. Rate limit headers are on the roadmap.

Errors

400Bad request — invalid JSON, missing url, or invalid draft UUID
404Product or draft not found (or draft expired)
401Missing/invalid partner key or founder JWT
409Conflict (e.g. partner URL already listed)
500Server error — retry or contact support

Roadmap

ItemStatus
Pretty /api/mcp URL on tools.launchllama.co Planned
Per-founder long-lived API keys / OAuth device flow Planned
Stripe checkout confirm tool (opt-in) Planned
Rate limit headers on public reads Planned

Ready to submit?

Start in the browser or call the API. Either way, you review before it ships.

Submit your tool →