Hesperan

Calibrated decisions for agents: choice, yes/no and score questions answered with probabilities.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
94%
이름 품질
80%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~1,209토큰 (도구 정의)
~3.2 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 0.94%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "hesperan-mcp"
      ]
    }
  }
}

실행 가능한 패키지

npmhesperan-mcp0.1.0stdio

원격 엔드포인트

https://api.hesperan.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (3)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢decide(state, questions)

Ask Hesperan 1 one or more typed questions about a state and get a probability for every possible answer. Types: choice (pick one of named options), noul (probability that a statement is true), score (level on an ordinal scale). Use for decisions with known options: routing, triage, policy or risk checks, "should I proceed?". Not for writing text, summaries or knowledge questions. Ask all questions about the same state in one call: billing is by input tokens (the state once plus each question once), from the user's monthly allowance and then their prepaid balance; failed calls are free.

입력 스키마

{
  "type": "object",
  "properties": {
    "state": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The situation to judge: free text, or a JSON object (keeps dates, amounts and fields unambiguous). Leave out data that does not matter for the question."
    },
    "questions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "choice"
              },
              "instructions": {
                "type": "string",
                "description": "The question, e.g. \"Which team should handle this ticket?\""
              },
              "criteria": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Option key -> plain-language description of what the option means. Mutually exclusive; add an \"other\" option if the list is not complete. Up to about 26 options work best."
              }
            },
            "required": [
              "type",
              "instructions",
              "criteria"
            ],
            "description": "Pick one of named options. Answer: choice and a probability per option."
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "noul"
              },
              "instructions": {
                "type": "string",
                "description": "A statement (not a question), e.g. \"This email is a phishing attempt.\""
              },
              "criteria": {
                "description": "Optional: what counts as yes and as no.",
                "type": "object",
                "properties": {
                  "true": {
                    "type": "string"
                  },
                  "false": {
                    "type": "string"
                  }
                }
              }
            },
            "required": [
              "type",
              "instructions"
            ],
            "description": "Probability that a statement is true. Answer: noul = P(yes)."
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "score"
              },
              "instructions": {
                "type": "string",
                "description": "What to rate, e.g. \"How upset is the customer?\""
              },
              "criteria": {
                "minItems": 2,
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "One description per level, lowest first."
              }
            },
            "required": [
              "type",
              "instructions",
              "criteria"
            ],
            "description": "Rate on an ordinal scale you define. Answer: score = expected level, plus a probability per level (\"0\", \"1\", ...)."
          }
        ]
      },
      "description": "Named questions, answered together: { \"<name>\": { \"type\": \"choice\" | \"noul\" | \"score\", \"instructions\": \"...\", \"criteria\": ... } }."
    }
  },
  "required": [
    "state",
    "questions"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪decide_with_profile(profile, state, idempotency_key)

Run one of the user's decision profiles on a state. A profile is one question calibrated on the user's own labelled cases with a target precision; the answer is a decision, its calibrated confidence and an action: "auto" (confidence reaches the profile's threshold — act on it) or "review" (hand it to a person). Profiles are created in the Hesperan console; ask the user for the profile slug. Keep the returned decision_id to report the correct answer later with report_outcome. Billed by input tokens like decide; pass an idempotency_key to make retries safe (a repeat with the same key returns the first decision without charging again).

입력 스키마

{
  "type": "object",
  "properties": {
    "profile": {
      "type": "string",
      "minLength": 1,
      "description": "Slug of the decision profile, e.g. \"ticket-routing\"."
    },
    "state": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The situation to judge: free text, or a JSON object (keeps dates, amounts and fields unambiguous). Leave out data that does not matter for the question."
    },
    "idempotency_key": {
      "description": "Optional unique key for this decision (1-255 visible ASCII characters, e.g. the ticket id). Reusing it within 24 hours with the same state replays the stored decision.",
      "type": "string",
      "pattern": "^[\\x21-\\x7e]{1,255}$"
    }
  },
  "required": [
    "profile",
    "state"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪report_outcome(decision_id, actual)

Record the correct answer for an earlier decide_with_profile decision, once it is known (e.g. the team that finally handled the ticket). This tracks the live precision of the profile in the console. actual must be one of the profile's option keys. Free of charge.

입력 스키마

{
  "type": "object",
  "properties": {
    "decision_id": {
      "type": "string",
      "minLength": 1,
      "description": "decision_id returned by decide_with_profile."
    },
    "actual": {
      "type": "string",
      "minLength": 1,
      "description": "The correct option key."
    }
  },
  "required": [
    "decision_id",
    "actual"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 3개
검증됨버전이 기록되지 않음도구 3개