Hunch
Calibrated judgments for text: yes/no probabilities, picks from your options, or scores.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"hunch": {
"url": "https://hunchsheet.app/mcp"
}
}
}遠端端點
https://hunchsheet.app/mcpstreamable-httphttps://hunchsheet.app/mcp/{api_key}streamable-httphttps://hunchsheet.app/mcp/trystreamable-http它能做什麼
工具清單
工具(8)
🟡hunch_ask(texts, question, api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"texts": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 500,
"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."
},
"question": {
"type": "string",
"minLength": 1,
"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."
},
"api_key": {
"type": "string",
"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."
}
},
"required": [
"texts",
"question"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"probability": {
"type": [
"number",
"null"
],
"description": "0 to 1: probability the answer to the question is yes."
},
"error": {
"type": [
"string",
"null"
],
"description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case."
}
},
"required": [
"text",
"probability",
"error"
]
}
},
"charged": {
"type": "integer",
"description": "Credits spent on this call."
},
"credits": {
"type": "integer",
"description": "Credits left on the key after this call."
},
"checkout": {
"type": "object",
"description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added)."
},
"sample": {
"type": "boolean",
"description": "True when the answers came from the keyless free sample, so credits is the sample rows left today."
}
},
"required": [
"results",
"charged",
"credits"
]
}🟢hunch_pick(texts, options, question, api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"texts": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 500,
"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."
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 255,
"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\"."
},
"question": {
"type": "string",
"description": "Optional. What is being decided, e.g. \"Which category does this ticket belong to?\". Defaults to \"Which option best describes this text?\"."
},
"api_key": {
"type": "string",
"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."
}
},
"required": [
"texts",
"options"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"option": {
"type": [
"string",
"null"
],
"description": "The chosen option's label."
},
"confidence": {
"type": [
"number",
"null"
],
"description": "0 to 1: confidence in the chosen option."
},
"error": {
"type": [
"string",
"null"
],
"description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case."
}
},
"required": [
"text",
"option",
"confidence",
"error"
]
}
},
"charged": {
"type": "integer"
},
"credits": {
"type": "integer"
},
"checkout": {
"type": "object",
"description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added)."
},
"sample": {
"type": "boolean",
"description": "True when the answers came from the keyless free sample, so credits is the sample rows left today."
}
},
"required": [
"results",
"charged",
"credits"
]
}🟢hunch_score(texts, question, levels, api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"texts": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 500,
"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."
},
"question": {
"type": "string",
"minLength": 1,
"description": "What is being scored, e.g. \"How does the reviewer feel about the product overall?\"."
},
"levels": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 10,
"description": "The scale, low to high, 2 to 10 levels, e.g. [\"angry\", \"disappointed\", \"neutral\", \"happy\", \"delighted\"]. Each may be \"label: description\"."
},
"api_key": {
"type": "string",
"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."
}
},
"required": [
"texts",
"question",
"levels"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"score": {
"type": [
"number",
"null"
],
"description": "Probability-weighted position, 0 to levels.length - 1."
},
"index": {
"type": [
"integer",
"null"
],
"description": "Index of the single most likely level."
},
"label": {
"type": [
"string",
"null"
],
"description": "The most likely level's label."
},
"confidence": {
"type": [
"number",
"null"
]
},
"error": {
"type": [
"string",
"null"
],
"description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case."
}
},
"required": [
"text",
"score",
"index",
"label",
"confidence",
"error"
]
}
},
"charged": {
"type": "integer"
},
"credits": {
"type": "integer"
},
"checkout": {
"type": "object",
"description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added)."
},
"sample": {
"type": "boolean",
"description": "True when the answers came from the keyless free sample, so credits is the sample rows left today."
}
},
"required": [
"results",
"charged",
"credits"
]
}🟢hunch_multi(texts, questions, api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"texts": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 500,
"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."
},
"questions": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 10,
"description": "Up to 10 yes/no questions, each answered once per text, e.g. [\"Can they buy?\", \"Are they angry?\", \"Is it urgent?\"]."
},
"api_key": {
"type": "string",
"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."
}
},
"required": [
"texts",
"questions"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"probabilities": {
"type": [
"array",
"null"
],
"items": {
"type": "number"
},
"description": "One probability per question, in the same order as the questions argument."
},
"error": {
"type": [
"string",
"null"
],
"description": "Set when this text was not answered (e.g. \"out_of_credits\"); the value fields are null in that case."
}
},
"required": [
"text",
"probabilities",
"error"
]
}
},
"charged": {
"type": "integer"
},
"credits": {
"type": "integer"
},
"checkout": {
"type": "object",
"description": "Present when texts were skipped for lack of credits: a checkout link for the person to open (url, plan, price_usd, credits_added)."
},
"sample": {
"type": "boolean",
"description": "True when the answers came from the keyless free sample, so credits is the sample rows left today."
}
},
"required": [
"results",
"charged",
"credits"
]
}🟢hunch_balance(api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"api_key": {
"type": "string",
"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."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"credits": {
"type": "integer",
"description": "Credits left on the key."
},
"used": {
"type": "integer",
"description": "Credits used on this key so far, lifetime."
}
},
"required": [
"credits",
"used"
]
}🟢hunch_quote(rows, questions_per_text, api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"rows": {
"type": "integer",
"minimum": 1,
"maximum": 10000000,
"description": "How many texts the job has."
},
"questions_per_text": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Yes/no questions per text for hunch_multi (one credit each). Leave out for the other tools."
},
"api_key": {
"type": "string",
"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."
}
},
"required": [
"rows"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"rows": {
"type": "integer"
},
"credits_needed": {
"type": "integer",
"description": "Rows times questions per row."
},
"enough": {
"type": "boolean",
"description": "True when the credits on the key (or the free 100 rows, with no key) already cover the job."
},
"credits_left": {
"type": "integer",
"description": "Credits on the key. Only with a key."
},
"to_buy_credits": {
"type": "integer"
},
"purchase": {
"type": "object",
"description": "Cheapest purchase that covers the gap: items (plan, quantity, credits, usd) and total_usd."
},
"summary": {
"type": "string"
}
},
"required": [
"rows",
"credits_needed",
"enough",
"summary"
]
}🟢hunch_get_key
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.
輸入結構描述
{
"type": "object",
"properties": {},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "A hunch_ key. Secret."
},
"credits": {
"type": "integer"
}
},
"required": [
"key",
"credits"
]
}🟢hunch_buy_credits(plan, api_key)
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.
輸入結構描述
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"starter",
"topup"
],
"description": "Optional. Defaults to Top-up when the key already paid, Starter otherwise."
},
"api_key": {
"type": "string",
"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."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Checkout link for the person to open."
},
"plan": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"credits_added": {
"type": "integer"
},
"applies_to": {
"type": "string"
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"url",
"plan",
"price_usd",
"credits_added"
]
}社群
證據