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 APIFull toolsCall REST with Authorization: Bearer jerp_… or attach streamable HTTP MCP at https://getjerp.com/mcp. The ChatGPT consumer plan does not matter.
CursorFull toolsPaste mcp.json (server id jerp). Put the Try Free key in ?key= and in Authorization.
ClaudeFull toolsCustomize → 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 FreeNo custom MCPChatGPT cannot attach a custom MCP server on Free. Use Claude, Cursor, REST, or your own agent.
ChatGPT ProNot enough for JERPDeveloper mode allows read/fetch MCP only. JERP tools are actions (find, keep, compare, judge, discover), not search/fetch.
ChatGPT Business, Enterprise, EduFull MCP on webAdmin 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 overlapcatalogOverlapSame goods or services. Direct competition needs this high. Two sites in the same country with different catalogs score near zero here.
Audience matchaudienceMatchSame buyer: wholesale dealers vs retail shoppers vs enterprise. A mismatch is adjacent, not direct.
Geography overlapgeoOverlapSame country or region. High geo alone is not competition — two sites that share a market often score high here.
Same entitysameEntityMirror, rebrand, or the same company on two domains.
Competitive threatcompetitiveThreatHead-to-head pressure for the same customers, not “who is bigger.”
Direct competitiondirectCompetitionScoreHow direct the overlap is after the rules run. Not a traffic rank and not a Google position.

Relationship

Label When to use it
direct_competitorSame kind of buyer and overlapping catalog in the same market.
indirect_competitorRelated category or a different sales model (wholesale vs retail).
platform_or_marketplaceMulti-vendor classified, aggregator, or CMS shop shell — not a single supplier.
same_entitySame company, mirror, or brand-owned portal.
unrelatedNo 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.

Example. Wholesale accessories vs an event-ticketing card. Geography is the only high score.
Indicator Score
Catalog overlap0.02
Audience match0.06
Geography overlap0.70
Same entity0.02
Competitive threat0.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 accessories
  • wholesale phone cases cables chargers
  • B2B auto parts distributor
  • event ticketing platform
  • CRM SaaS for small business
  • video 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.