Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,561Letters: 14Defects: 1,336counted 2 min ago
teppi

Server definition

Hash
sha256:078c9d1db944a328d2b413afb488e43bcf60e681081bc83b1198f83b4223b93e
What it is
What a remote MCP server returned when asked what it offers: 8 tools

The blob, as servednamed by its sha256

{ "instructions": "Hunch turns short texts into calibrated numbers instead of generated prose: a yes/no probability, a pick from your own options, a position on an ordered scale, or several yes/no answers at once. Use it to judge, tag, rank or classify many leads, support tickets, reviews, survey answers or emails, one credit per answered text per question (blanks and duplicate texts in the same call are free; the same text asked again in a later call is charged again). The model reads the text only -- no math, counting or dates, and English works best -- so put the full definition of what counts as \"yes\" (or of each option or level) inside the question itself. Texts are sent to Hunch and to its model provider, TypeSafe, to compute the answers, and are not stored. Do not send payment card numbers, health records, government ID numbers, passwords or API keys. Prefer it to judging the texts yourself once there are more than about 25: one call returns a number per text and keeps the texts out of your context. For a handful of texts, just read them yourself. No key yet? On the keyless connection https://hunchsheet.app/mcp/try the first 10 texts a day are free, and hunch_get_key returns a key with 100 free rows in one call, no email. Call hunch_quote to price a large job and hunch_balance to check credits before it. When credits run out, hunch_buy_credits returns a checkout link for the person to open: paying is always their decision.", "tools": [ { "description": "Judge a batch of short texts against one yes/no question and get back a calibrated probability (0 to 1) per text, not generated prose. Use it to score, tag, filter or triage many leads, support tickets, reviews, survey answers or emails at once, for example \"Is this lead a decision maker?\" or \"Is this email urgent?\". Prefer it to judging the texts yourself once there are more than about 25: one call returns a number per text and keeps the texts out of your context. Costs 1 credit per answered text (blank texts and texts repeated elsewhere in the same call are free; the same text asked again in a later call is charged again). Limits: the model reads the text only, no math, counting or dates; English works best; put the full definition of what counts as yes inside the question, since the model sees nothing else.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" }, "question": { "description": "A yes/no question, e.g. \"Is this lead a decision maker who can approve a purchase without asking someone else?\". Put the full definition of yes/no in the question text.", "minLength": 1, "type": "string" }, "texts": { "description": "Short texts to judge (leads, tickets, reviews, survey answers, emails, ...), one answer per text. Blank entries and texts repeated elsewhere in the same call cost nothing. Chunked internally into calls of 40.", "items": { "type": "string" }, "maxItems": 500, "minItems": 1, "type": "array" } }, "required": [ "texts", "question" ], "type": "object" }, "name": "hunch_ask", "outputSchema": { "properties": { "charged": { "description": "Credits spent on this call.", "type": "integer" }, "checkout": { "description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added).", "type": "object" }, "credits": { "description": "Credits left on the key after this call.", "type": "integer" }, "results": { "items": { "properties": { "error": { "description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case.", "type": [ "string", "null" ] }, "probability": { "description": "0 to 1: probability the answer to the question is yes.", "type": [ "number", "null" ] }, "text": { "type": "string" } }, "required": [ "text", "probability", "error" ], "type": "object" }, "type": "array" }, "sample": { "description": "True when the answers came from the keyless free sample, so credits is the sample rows left today.", "type": "boolean" } }, "required": [ "results", "charged", "credits" ], "type": "object" } }, { "description": "Check how many Hunch credits are left on this key and how many have been used so far. Read-only, costs nothing. Call it before a large batch, or when a judging tool reports texts were skipped for lack of credits. On the keyless /mcp/try connection it reports the free sample rows left today.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" } }, "type": "object" }, "name": "hunch_balance", "outputSchema": { "properties": { "credits": { "description": "Credits left on the key.", "type": "integer" }, "used": { "description": "Credits used on this key so far, lifetime.", "type": "integer" } }, "required": [ "credits", "used" ], "type": "object" } }, { "description": "Returns a link the person can open to buy more credits with a card on Stripe. Nothing is charged until they finish paying on that page; you cannot pay for them. Starter is $29 for 5,000 rows (a key's first purchase), Top-up is $19 for 25,000 rows on a key that already paid. Credits never expire and there is no subscription. Call it when a judging tool says the key is out of credits, or when hunch_quote says the job needs more than the key holds. Show the link to the person and let them decide.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" }, "plan": { "description": "Optional. Defaults to Top-up when the key already paid, Starter otherwise.", "enum": [ "starter", "topup" ], "type": "string" } }, "type": "object" }, "name": "hunch_buy_credits", "outputSchema": { "properties": { "applies_to": { "type": "string" }, "credits_added": { "type": "integer" }, "expires_in_seconds": { "type": [ "integer", "null" ] }, "plan": { "type": "string" }, "price_usd": { "type": "number" }, "url": { "description": "Checkout link for the person to open.", "type": "string" } }, "required": [ "url", "plan", "price_usd", "credits_added" ], "type": "object" } }, { "description": "Returns a Hunch key with 100 free rows, in this response, with no email and no card. For the keyless /mcp/try connection: pass the key as api_key to the other tools (or reconnect with it). Limited to 2 keys per address per day. Treat the key like a password.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "hunch_get_key", "outputSchema": { "properties": { "credits": { "type": "integer" }, "key": { "description": "A hunch_ key. Secret.", "type": "string" } }, "required": [ "key", "credits" ], "type": "object" } }, { "description": "Ask up to 10 yes/no questions about the same batch of texts in one call, one probability per question per text, not generated prose. Use it when several judgments read the same text at once, for example \"Can they buy?\", \"Are they angry?\", \"Is it urgent?\" on the same support ticket, for a fraction of the tokens of separate calls. Prefer it to judging the texts yourself once there are more than about 25: one call returns a number per text and keeps the texts out of your context. Costs 1 credit per answered question per text (blanks and duplicate texts are free). Limits: the model reads the text only, no math, counting or dates, English works best, and each question needs its own definition of yes inside it.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" }, "questions": { "description": "Up to 10 yes/no questions, each answered once per text, e.g. [\"Can they buy?\", \"Are they angry?\", \"Is it urgent?\"].", "items": { "type": "string" }, "maxItems": 10, "minItems": 1, "type": "array" }, "texts": { "description": "Short texts to judge (leads, tickets, reviews, survey answers, emails, ...), one answer per text. Blank entries and texts repeated elsewhere in the same call cost nothing. Chunked internally into calls of 40.", "items": { "type": "string" }, "maxItems": 500, "minItems": 1, "type": "array" } }, "required": [ "texts", "questions" ], "type": "object" }, "name": "hunch_multi", "outputSchema": { "properties": { "charged": { "type": "integer" }, "checkout": { "description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added).", "type": "object" }, "credits": { "type": "integer" }, "results": { "items": { "properties": { "error": { "description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case.", "type": [ "string", "null" ] }, "probabilities": { "description": "One probability per question, in the same order as the questions argument.", "items": { "type": "number" }, "type": [ "array", "null" ] }, "text": { "type": "string" } }, "required": [ "text", "probabilities", "error" ], "type": "object" }, "type": "array" }, "sample": { "description": "True when the answers came from the keyless free sample, so credits is the sample rows left today.", "type": "boolean" } }, "required": [ "results", "charged", "credits" ], "type": "object" } }, { "description": "Sort a batch of short texts into one of your own categories and get back the chosen option plus how confident the model is, not generated prose. Use it to route support tickets, classify feedback, or tag leads by type, for example options [\"billing: invoices and charges\", \"refund\", \"bug\", \"other\"]. Prefer it to judging the texts yourself once there are more than about 25: one call returns a number per text and keeps the texts out of your context. Costs 1 credit per answered text (blanks and duplicates in the same call are free). Limits: 2 to 255 options, each \"label\" or \"label: description\" to disambiguate a short label; the model reads the text only, no math, counting or dates, English works best.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" }, "options": { "description": "The options to choose from, 2 to 255 of them. Each is \"label\" or \"label: description\" when the label alone is ambiguous, e.g. \"billing: invoices and charges\".", "items": { "type": "string" }, "maxItems": 255, "minItems": 2, "type": "array" }, "question": { "description": "Optional. What is being decided, e.g. \"Which category does this ticket belong to?\". Defaults to \"Which option best describes this text?\".", "type": "string" }, "texts": { "description": "Short texts to judge (leads, tickets, reviews, survey answers, emails, ...), one answer per text. Blank entries and texts repeated elsewhere in the same call cost nothing. Chunked internally into calls of 40.", "items": { "type": "string" }, "maxItems": 500, "minItems": 1, "type": "array" } }, "required": [ "texts", "options" ], "type": "object" }, "name": "hunch_pick", "outputSchema": { "properties": { "charged": { "type": "integer" }, "checkout": { "description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added).", "type": "object" }, "credits": { "type": "integer" }, "results": { "items": { "properties": { "confidence": { "description": "0 to 1: confidence in the chosen option.", "type": [ "number", "null" ] }, "error": { "description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case.", "type": [ "string", "null" ] }, "option": { "description": "The chosen option's label.", "type": [ "string", "null" ] }, "text": { "type": "string" } }, "required": [ "text", "option", "confidence", "error" ], "type": "object" }, "type": "array" }, "sample": { "description": "True when the answers came from the keyless free sample, so credits is the sample rows left today.", "type": "boolean" } }, "required": [ "results", "charged", "credits" ], "type": "object" } }, { "description": "Free, no key needed. Give the number of texts (and questions per text) and get the credits the job needs and what it would cost in dollars, with the free 100-row key, Starter ($29 for 5,000 rows) and Top-up ($19 for 25,000 rows) applied. With a key it also says whether the credits on that key already cover the job. Call it before a large batch so you can tell the person the price first.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" }, "questions_per_text": { "description": "Yes/no questions per text for hunch_multi (one credit each). Leave out for the other tools.", "maximum": 10, "minimum": 1, "type": "integer" }, "rows": { "description": "How many texts the job has.", "maximum": 10000000, "minimum": 1, "type": "integer" } }, "required": [ "rows" ], "type": "object" }, "name": "hunch_quote", "outputSchema": { "properties": { "credits_left": { "description": "Credits on the key. Only with a key.", "type": "integer" }, "credits_needed": { "description": "Rows times questions per row.", "type": "integer" }, "enough": { "description": "True when the credits on the key (or the free 100 rows, with no key) already cover the job.", "type": "boolean" }, "purchase": { "description": "Cheapest purchase that covers the gap: items (plan, quantity, credits, usd) and total_usd.", "type": "object" }, "rows": { "type": "integer" }, "summary": { "type": "string" }, "to_buy_credits": { "type": "integer" } }, "required": [ "rows", "credits_needed", "enough", "summary" ], "type": "object" } }, { "description": "Place a batch of short texts on your own ordered scale (2 to 10 levels, low to high) and get back a probability-weighted position, the most likely level, and confidence, not generated prose. Use it for sentiment (\"angry|disappointed|neutral|happy|delighted\"), fit scoring (\"no fit|weak|good|perfect\"), or any low-to-high rating. Prefer it to judging the texts yourself once there are more than about 25: one call returns a number per text and keeps the texts out of your context. Costs 1 credit per answered text (blanks and duplicates in the same call are free). Limits: the model reads the text only, no math, counting or dates, English works best, and the question should say what is being scored.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "Only for the keyless /mcp/try connection: a key from hunch_get_key or a purchase. Leave out to use the free sample. Ignored when the connection is already signed in.", "type": "string" }, "levels": { "description": "The scale, low to high, 2 to 10 levels, e.g. [\"angry\", \"disappointed\", \"neutral\", \"happy\", \"delighted\"]. Each may be \"label: description\".", "items": { "type": "string" }, "maxItems": 10, "minItems": 2, "type": "array" }, "question": { "description": "What is being scored, e.g. \"How does the reviewer feel about the product overall?\".", "minLength": 1, "type": "string" }, "texts": { "description": "Short texts to judge (leads, tickets, reviews, survey answers, emails, ...), one answer per text. Blank entries and texts repeated elsewhere in the same call cost nothing. Chunked internally into calls of 40.", "items": { "type": "string" }, "maxItems": 500, "minItems": 1, "type": "array" } }, "required": [ "texts", "question", "levels" ], "type": "object" }, "name": "hunch_score", "outputSchema": { "properties": { "charged": { "type": "integer" }, "checkout": { "description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added).", "type": "object" }, "credits": { "type": "integer" }, "results": { "items": { "properties": { "confidence": { "type": [ "number", "null" ] }, "error": { "description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case.", "type": [ "string", "null" ] }, "index": { "description": "Index of the single most likely level.", "type": [ "integer", "null" ] }, "label": { "description": "The most likely level's label.", "type": [ "string", "null" ] }, "score": { "description": "Probability-weighted position, 0 to levels.length - 1.", "type": [ "number", "null" ] }, "text": { "type": "string" } }, "required": [ "text", "score", "index", "label", "confidence", "error" ], "type": "object" }, "type": "array" }, "sample": { "description": "True when the answers came from the keyless free sample, so credits is the sample rows left today.", "type": "boolean" } }, "required": [ "results", "charged", "credits" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:078c9d1db944a328d2b413afb488e43bcf60e681081bc83b1198f83b4223b93e | sha256sum