# Product Rally for AI agents

Product Rally is an invite-only product board by Craftwork. Members hunt
products, an invited circle of makers votes, and a human approves every launch.

Reading the board is open to everyone, machines included. Pitching a product is
open too. Both are free and need no account and no key.

Docs: https://productrally.com/agents
Skill file: https://productrally.com/agents/skill.md
MCP endpoint: https://productrally.com/api/mcp
OpenAPI: https://productrally.com/api/agent/openapi.json
Site map for models: https://productrally.com/llms.txt

## What an agent can do

An agent working for someone who built a product, or who simply likes one, can
pitch it here. A person reads the pitch. If the product fits, an admin creates
the hunt and it goes through the same review every hunt goes through.

The pitch is the whole write surface. It publishes nothing.

## What a pitch cannot do

- It does not publish a product. An admin creates the hunt by hand or does not.
- It does not create an account, and it cannot vote. Voting is invite-only.
- It does not affect ranking, trending or the weekly places.
- It cannot be paid for, and paying for anything else does not move it.
- Sending in bulk removes the sender. It never raises the odds.

Product Rally runs on invited members voting for things they like. That is the
whole asset, so nothing sold, automated or pitched is allowed to touch it.

## Tools

### search_products

`GET https://productrally.com/api/agent/products`

Search the products on Product Rally by words, category or pricing. Returns ranked matches with their vote counts and pages. With no query it returns the newest hunts.

- `q`: Words to match against name, domain, tagline and the hunter's note.
- `category`: Category slug, e.g. dev-tools.
- `pricing`: One of free, freemium, paid, onetime.
- `limit`: 1 to 50, default 10.

### get_product

`GET https://productrally.com/api/agent/products/{slug}`

Read one published product by its slug: the tagline, the hunter's note, the category, tags, pricing, votes and its weekly place.

- `slug` (required): The slug from a product page URL, e.g. linear.

### list_categories

`GET https://productrally.com/api/agent/categories`

List every category with how many products it holds. Use a slug from here as the category filter in search_products.

No parameters.

### submit_product

`POST https://productrally.com/api/agent/submit`

Pitch a product to be launched on Product Rally. Send it once, for a product you or the person you work for actually built or genuinely uses. A human reads every pitch and replies by email. This does not publish anything and it never grants votes, membership or a ranking. Bulk sending gets the sender blocked.

- `url` (required): The product's own https URL.
- `email` (required): A real address the reviewer can reply to. An address at the product's own domain is read first.
- `name`: The product name. Defaults to the domain.
- `tagline`: One line, up to 140 characters, saying what it does.
- `pitch`: Up to 600 characters on why it belongs here and who it is for. Written by a person, not padded.
- `submitterName`: Who is pitching.
- `agent`: The agent doing the sending, e.g. claude-code. Self-declared and unverified, but honest is better.

### check_submission

`GET https://productrally.com/api/agent/status/{id}`

Check what happened to a pitch, using the id that submit_product returned. Statuses are pending, approved and rejected.

- `id` (required): The id returned by submit_product.

## Pitching, in one call

```bash
curl -X POST https://productrally.com/api/agent/submit \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","email":"you@example.com","name":"Example","tagline":"One line on what it does","pitch":"Why it belongs here and who it is for.","agent":"claude-code"}'
```

The reply carries an `id`. That is the receipt. Give it to the user, and read
`GET https://productrally.com/api/agent/status/{id}` to find out what happened.

## Rules

1. One product, once. Pitch something the person you work for built, or
   genuinely uses and can say a true sentence about. Never work through a list.
2. Use a real address. An address at the product's own domain is read first,
   because it is the one signal a bulk run cannot fake cheaply. A free mailbox
   is fine. A mailbox that ends in digits is read last.
3. Do not invent the copy. If you do not know what the product does, ask the
   person you work for instead of writing a tagline for them.
4. Report what happened. A pitch is queued, not published. Telling a user their
   product is live is telling them something untrue.
5. Search before pitching. A product already on the board answers 409 with a
   link, and that link is the useful answer.

## Limits

- 3 pitches per email address per rolling week
- 2 pitches per product domain, in total
- 8 pitches per sender per day
- Tagline 140 characters, pitch 600 characters

Past a limit the endpoint answers 429. Stop. Do not retry in a loop.

## Connecting over MCP

```json
{
  "mcpServers": {
    "product-rally": {
      "type": "http",
      "url": "https://productrally.com/api/mcp"
    }
  }
}
```

Streamable HTTP, no key, no session.
