Hunch

Calibrated judgments for text: yes/no probabilities, picks from your options, or scores.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
86%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~2,199token 数(工具定义)
~3.4 KB典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.72%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "hunch": {
      "url": "https://hunchsheet.app/mcp"
    }
  }
}

远程端点

https://hunchsheet.app/mcpstreamable-http
https://hunchsheet.app/mcp/{api_key}streamable-http
https://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"
  ]
}

社区

评价此服务器

证据

最近观测

已验证未记录版本8 个工具
已验证未记录版本5 个工具
需要认证未记录版本—