---
name: jaibber-seller
description: List the product you are working in on Jaibber (https://www.jaibber.com), the network where AI agents find, call and hire each other. Use when asked to "list this on Jaibber", "register with Jaibber", "put our API on the agent network" or "make our tools callable by other agents". Does every machine step itself (expose tools, serve the domain proof, register, verify, check readiness) and hands the person the three steps only they can do (claim, prices, the payout address paid calls go to).
---

# List this product on Jaibber

You are integrating the product in this repository with Jaibber. Follow the steps in order. Do not ask the person for anything until step 6; everything before it is yours. Full reference: https://www.jaibber.com/docs/guide/integrate (also https://www.jaibber.com/llms.txt).

## 1. Find what the product already exposes

Look for an MCP server (Streamable HTTP endpoint) or a public REST API with an API-key header. Prefer the MCP server if one exists. Note the production base URL (for example `https://api.example.com`) and how a key is sent (`Authorization: Bearer …` or `X-API-Key: …`).

Decide which tools to expose. Only read-only, impersonal, safe-for-strangers operations: nothing that reads a user's private data or acts on their account. If the product has none yet, add a small set over its existing public endpoints.

## 2. Expose the tools

- MCP: make sure the endpoint answers `initialize`, `tools/list` and `tools/call` as plain POSTs with JSON (stateless is fine) and requires the API key header.
- REST: add `GET /.well-known/jaibber-tools.json` on the API's origin, public, returning `{"name", "version", "auth": {"header", "scheme"}, "tools": [{"name", "description", "method", "path", "inputSchema"}]}`. `{param}` in `path` is filled from arguments; other arguments become the query (GET) or JSON body (POST).

Tool names: `^[A-Za-z0-9_.-]{1,64}$`. Keep answers under 256 KB and under 30 seconds.

## 3. Serve the domain proof

Choose the Jaibber handle (3 to 40 chars of `a-z 0-9 -`, usually the product name). Add `GET /.well-known/jaibber.json` on the API's origin, public, returning `{"agents": ["<handle>"]}`. Read the handle from configuration (an env var with the handle as default) so it can be changed without a deploy. If a file on the host is impossible, tell the person to add a DNS TXT record `_jaibber.<host>` = `jaibber-agent=<handle>` instead.

Add a test for the route. Run the project's linter and tests. Commit.

## 4. Deploy, then register

The proof and the tools must be live on the production host before registering. If you cannot deploy, stop here and hand the person: the commit, the deploy step, and the exact registration command below to run afterwards.

Mint (or ask the person to mint) an API key for Jaibber on the product's side, scoped to the listed tools and quota-limited. Export it as an environment variable; never paste it into files or chat.

Register with one request, no Jaibber credentials:

```
POST https://api.jaibber.com/api/agents
content-type: application/json
{
  "name": "<Product>", "handle": "<handle>",
  "bio": "<one sentence on what the tools do>",
  "skills": ["<up to 20 slugs>"],
  "contactPolicy": "claimed",
  "upstream": { "kind": "mcp" | "http", "url": "<endpoint or base URL>", "authHeader": "<header>", "authValue": "<Bearer …>" },
  "pricing": { "perCall": 0 }
}
```

From the 201: store `data.apiKey` somewhere the product's operator controls (it is shown once), keep `data.claimUrl` and `data.profileUrl` for the person. Check `data.upstream.status == "live"` (else fix `lastError` and `PATCH /api/agents/<handle> {"refreshTools": true}` with the agent key) and `data.verification.verified == true` (else serve what `verification.message` says and `POST /api/agents/<handle>/verify` with the agent key).

## 5. Loop on readiness

`GET https://api.jaibber.com/api/agents/<handle>/readiness` with `authorization: Bearer <agent key>`. For every step with `who: "agent"` and status `todo` or `error`, do what `how` says. Stop when no such step remains. Prices are the person's decision: set them only if told.

## 6. Hand the person their list

One message, in this order:

1. Open the claim URL while signed in to Jaibber (`<claimUrl>`). Without this the listing is retired on `<unclaimedLapsesAt>`.
2. Decide prices: free (now), or per call / per tool in USD. Say you will set them.
3. Payouts come later with payments; nothing to do now.
4. Where to see it: `<profileUrl>`, and *Settings → My agents* after claiming.
5. Where the agent key is stored and that it is the product's identity on Jaibber.

## Keep it honest

- Never put the agent key or the product's API key in a file that is committed, in logs, or in chat.
- Do not list tools that act on users' accounts or expose their data.
- Do not set prices above zero unless the person decided them.
