Docs
Connect
JERP is a free marketing AI: you send homepage cards (or find them in our index), and you get structured judgments with confidence — real offer vs noise, category fit, competitive relationship. It is not Ahrefs, not a SERP, and not ChatGPT citation share.
If you are an agent, read /llms-full.txt or /docs.md. That is the API and MCP contract. This page needs JavaScript; those files do not.
Click Try Free on the home page for a one-hour jerp_ key. Then pick a host:
| Host | JERP | What to do |
|---|---|---|
| Your own agent, script, or OpenAI API | Full tools | Call REST with Authorization: Bearer jerp_… or attach streamable HTTP MCP at https://getjerp.com/mcp. The ChatGPT consumer plan does not matter. |
| Cursor | Full tools | Paste mcp.json (server id jerp). Put the Try Free key in ?key= and in Authorization. |
| Claude | Full tools | Customize → Connectors → Add custom connector. Name JERP. URL https://getjerp.com/mcp. Authentication: Sign in. Paste the Try Free key. Enable JERP under + → Connectors. Localhost fails. |
| ChatGPT Free | No custom MCP | ChatGPT cannot attach a custom MCP server on Free. Use Claude, Cursor, REST, or your own agent. |
| ChatGPT Pro | Not enough for JERP | Developer mode allows read/fetch MCP only. JERP tools are actions (find, keep, compare, judge, discover), not search/fetch. |
| ChatGPT Business, Enterprise, Edu | Full MCP on web | Admin enables developer mode, then Apps → Create. Server URL https://getjerp.com/mcp. Sign in with the jerp_ key. Web only, not mobile. Source: OpenAI Help “Developer mode and MCP apps in ChatGPT”. |
MCP URL: https://getjerp.com/mcp. REST base: https://getjerp.com/api/v1. Cursor snippet and curl are under MCP and API.
Project
JERP is a free marketing AI tool that uses open data and confidence scores. It answers true or false, a comparison, or a score, with confidence — for safety and rigor when an AI works from sites, claims, and competitor lists.
You send the cards. JERP does not replace a full crawl index. It cleans and judges the list you already have: real product or noise, same offer or not, fit to your category, and custom yes-or-no questions on those same homepages.
Tools
find — Search the homepage index for domains that match a query or seed. You get scored cards to send to the judgment tools.
keep — Real product or noise. Keep the viable commercial sites and drop parked pages, directories, and filler.
fit — How well each site matches the category or niche you named.
compare — Left, right, or a tie. Same offer, a lookalike, a platform, or unrelated.
rerank — Rank the sites you sent against a query.
judge — Your own questions on those same sites: yes or no, pick one, or a score.
discover — End-to-end competitive discovery from a seed domain and a short description of the market. Returns grouped competitors with evidence you can confirm or correct.
vet — Agent helper, not a search tool. Before you paraphrase cards, send the claims you were about to say plus those cards and the prior keep/compare/find JSON. Each claim comes back supported, unsupported, contradicted, or out_of_scope. Call it yourself; the user does not have to ask.
Scores
Compare and discover return 0–1 overlap scores plus a relationship label. Catalog and audience are the competition question. Geography is where they operate. Two sites in the same country can share geo and still be unrelated.
| Indicator | Field | What 0–1 means |
|---|---|---|
| Catalog overlap | catalogOverlap | Same goods or services. Direct competition needs this high. Two sites in the same country with different catalogs score near zero here. |
| Audience match | audienceMatch | Same buyer: wholesale dealers vs retail shoppers vs enterprise. A mismatch is adjacent, not direct. |
| Geography overlap | geoOverlap | Same country or region. High geo alone is not competition — two sites that share a market often score high here. |
| Same entity | sameEntity | Mirror, rebrand, or the same company on two domains. |
| Competitive threat | competitiveThreat | Head-to-head pressure for the same customers, not “who is bigger.” |
| Direct competition | directCompetitionScore | How direct the overlap is after the rules run. Not a traffic rank and not a Google position. |
Relationship
| Label | When to use it |
|---|---|
direct_competitor | Same kind of buyer and overlapping catalog in the same market. |
indirect_competitor | Related category or a different sales model (wholesale vs retail). |
platform_or_marketplace | Multi-vendor classified, aggregator, or CMS shop shell — not a single supplier. |
same_entity | Same company, mirror, or brand-owned portal. |
unrelated | No meaningful catalog or audience overlap. High geo is not enough. |
How to read a row
Direct competitor in the rules needs high catalog and high audience (about 0.70+). A 0.70 geo with 0.02 catalog is not a competitor — they just share a country. If find missed the domain, or the card summary is empty, say the card is thin. Do not borrow a .com twin or guess the catalog.
| Indicator | Score |
|---|---|
| Catalog overlap | 0.02 |
| Audience match | 0.06 |
| Geography overlap | 0.70 |
| Same entity | 0.02 |
| Competitive threat | 0.02 |
Prompts
After you connect (see Connect), click Try Free for a one-hour key, then paste one of these. Swap the seed domain and the niche. Ask for the scores table on compare. Ask the agent to admit missing index cards instead of inventing them. ChatGPT Free cannot add a custom MCP connector — use Claude, Cursor, REST, or your own agent.
Competitor map
Compare two sites
Strong sites in one niche
Clean a pasted list
Your own question
After tools return
Example find queries
Pass these as q on find. For a “top / best in this niche” list, also set rankBy: "dr". For a competitor harvest from a seed, omit rankBy and prefer discover.
B2B wholesale mobile accessorieswholesale phone cases cables chargersB2B auto parts distributorevent ticketing platformCRM SaaS for small businessvideo hosting for marketers
API
Judgment routes do not search: the caller supplies up to 24 cards. POST /api/v1/find searches the homepage index and returns scored cards you can send to keep, fit, or compare. JSON to the browser is camelCase. Callers send the public jerp_ key as Authorization: Bearer. Agents can skip this page and use /llms-full.txt.
Missing or expired public key returns 401. More than 1 call per second or 100 calls on that key returns 429.
Card in
Each site object: domain, title, aiSummary, optional aiCategories, aiSource. Harvest and index cards may also include firstIndexed (crawler first-seen date; same semantics as legacy wentLive / went_live) and optional businessFoundedYear when known. Do not read firstIndexed as company age — use businessFoundedYear for founding history.
POST /api/v1/key
Browser-only. Try Free on this origin issues a public jerp_ key (valid one hour). The handler requires the site Origin and a browser Sec-Fetch-Site of same-origin or same-site with Sec-Fetch-Mode: cors. curl and other origins get 403. Optional Authorization: Bearer of a still-valid key returns the same key and remaining ttl. New issues are limited per IP. Out: ok, key, issuedAt, expiresInSec.
A lasting key is a jerp_p_ secret. POST /api/v1/claim with the free key and { "email" } sends a 15-minute link. GET /api/v1/claim/confirm?token= returns the key once. Watchlists accept only that key. POST /api/v1/keys/revoke retires it. Set RESEND_API_KEY and ALERT_FROM_EMAIL to send the mail; JERP_CLAIM_DEV=1 also returns devToken for local checks.
GET /api/v1/health
Live check. Returns ok and public key TTL keyTtlSec.
POST /api/v1/rank
Legacy feed ordering. Body: { "category": string, "sites": Card[] }. Empty category is sent as AI startups. Prefer POST /api/v1/keep for universal viability. Out: ok, model, sites as { domain, realProduct, founderSignal, keep }, plus token usage.
POST /api/v1/keep
Universal viability for any niche (wholesale, retail, SaaS, services, etc.). Body: { "sites": Card[] }. Out: ok, model, sites as { domain, viable, viabilityScore, businessModel, keep, realProduct, flags }. businessModel is one of b2b_wholesale, b2c_retail, saas, agency, aggregator, marketplace, services, unknown.
POST /api/v1/fit
Requires category (niche or product category). Empty category returns 400 category is required. Out: ok, model, sites as { domain, founderSignal, confidence? }.
POST /api/v1/compare
Competitive relationship between left (usually the seed company) and right. Body: left, right, optional category. Out: ok, model, relationship (direct_competitor, indirect_competitor, platform_or_marketplace, same_entity, unrelated), plus the overlap scores in Scores. Legacy fields choice, probabilities, confidence, sameOffer, directCompetitor may still be present.
POST /api/v1/rerank
Requires q. Empty q returns 400 q is required. Out: ok, model, sites as { domain, score, confidence? }.
POST /api/v1/judge
Body: sites and questions, a map of at most 24 entries. Each question type is noul, choice, or score. prompt is accepted as instructions; options or min/max are accepted as criteria. Extra keys are dropped before scoring. Other types return 400. Out: ok, model, answers, usage as { inputTokens, outputTokens }.
POST /api/v1/vet
Agent self-check. Body: claims (at most 24 strings or { id, text, about }), optional draft if claims is empty, optional sites, optional prior (raw JSON from a previous JERP call). Out: speak as ok, trim, or hold; per-claim verdict (supported, unsupported, contradicted, out_of_scope); drop (ids not safe to speak); flags. Call this automatically before a paraphrase. Do not publish when speak is hold. Drop every id in drop when it is trim.
POST /api/v1/find
Searches the homepage index. Body: q and/or seed. Optional category (ai_categories), fromDate (YYYY-MM-DD, newly indexed window — not founding year), aiSource, rankBy (dr for strongest indexed sites by link rating; omit for relevance), limit (default 48, max 96), includeEmbargoed (keep RU/BY/CN/KP/IR/SY ccTLDs; default false). Needs the public Bearer key. Empty q and seed returns 400.
Runs several index queries (relevance or dr, product cut, optional niche/stack/date, web join, seed lookup), merges by domain, scores in process. Embargoed ccTLDs are dropped before ranking so they do not occupy harvest slots. Out: ok, sites as cards (with score, optional firstIndexed, businessFoundedYear) and a queries report. Send sites to keep, fit, or compare in batches of 24. For a best/top list in one niche, set rankBy: "dr" and do not use discover.
POST /api/v1/discover
End-to-end competitive discovery from a seed domain and a free-form market description. Body: seed (domain or URL), q (what you are researching), optional limit (default 24), optional includeEmbargoed. Requires Authorization: Bearer with the public key.
Out: ok, policyVersion, receiptId, seedProfile (structured ICP with evidence quotes), groups keyed by relationship — directCompetitors, indirectCompetitors, platforms, sameEntities, uncertain, rejected — each an array of candidates. Every candidate includes domain, title, reason, viability and L3 dimension scores (catalogOverlap, audienceMatch, geoOverlap, sameEntity, directCompetitionScore, competitiveThreat), relationship, relationshipSource, uncertainty, analysis, flags, policyVersion, and optional index metadata.
firstIndexed on a candidate is crawler first-seen date — label it First indexed in UI. businessFoundedYear is company founding history when known — label it Founded. Do not merge those fields under one label.
Also returns queries, latencyMs, and warnings.
POST /api/v1/feedback
Human calibration on a discover receipt. Body: domain, judgmentId (use receiptId from /api/v1/discover), action as confirm, correct, or unsure. For correct, send correctedRelationship among the five taxonomy values. Optional note.
MCP
Streamable HTTP at /mcp. The client POSTs JSON-RPC with Accept: application/json, text/event-stream. GET returns the tool catalog. Host-by-host limits (including ChatGPT plans) are under Connect.
Claude: add a custom connector with your public HTTPS URL ending in /mcp. Authentication: Sign in. Paste the one-hour jerp_ key from Try Free. Cursor: paste the snippet into .cursor/mcp.json (project) or ~/.cursor/mcp.json (global). Replace jerp_YOUR_PUBLIC_KEY with the key from Try Free. The server accepts the key in the URL query (?key=) or as Authorization: Bearer in the headers — the snippet sets both. Server id: jerp.
URL
mcp.json
Unauthenticated calls return HTTP 401 with WWW-Authenticate pointing at OAuth metadata — that starts Sign in where the host supports it. After Sign in, the host sends Authorization: Bearer with your public key. Judgments cap at 24 sites per call. find returns at most 96 cards.
Tools
The server exposes find, keep, fit, compare, rerank, judge, discover, and vet with the same inputs and outputs as the REST routes above. Site objects require domain, title, and aiSummary; optional aiCategories, aiSource, firstIndexed, and businessFoundedYear.
Paste a prompt from Prompts after Sign in. For two-site compare, the agent should show the scores table in chat, then one sentence. For a market map or a ranked set, use a canvas — do not also paste that landscape into the chat. A thin card (empty summary, domain missing from the index) is uncertainty, not a guessed catalog. After those tools return, the agent should call vet on the claims it is about to speak unless it is only echoing JSON fields.