Skip to main content
Glama

계약방법 판정

decide_contract_method
Read-onlyIdempotent

계약방법 결정론 판정 — 룰엔진이 적용 가능한 계약방법 후보와 법령 근거를 반환.

상대방 지위(소기업·여성기업 등)를 안 넣었는데 그 지위로만 열리는 수의 후보가 있으면
`vendor_conditional_candidates`로 따로 온다 — 지위를 추정하지 말고 사용자에게 확인하라.

`law_currency`는 이 판정이 기대는 법령(공기업이면 계약사무규칙 포함 — `laws_checked`)의
현행 여부다(2026-10-15). `status`가 "verified"가 아니면 `note_currency`와
`laws_not_verified`가 온다 — 그 규범을 현행으로 단정해 인용하지 말고 그 사실을 밝혀라.

Args:
    contract_type: "construction"(공사) | "service"(용역) | "product"(물품)
    estimated_price: 추정가격(원)
    org_type: "national"(국가기관) | "local"(지자체) | "public_corp"(공기업·준정부, 기본)
    service_type: 용역일 때 "technical"|"academic"|"facility"|"it_service"|"other"
    construction_specialty: 공사일 때 "general"(종합)|"electrical"|"ict"|"fire_safety" 등
    is_sme_competition_product: 중소기업자간 경쟁제품 여부
    negotiation_reason: 수의 사유 "urgent"|"rebid_failure"|"technical_difficulty"|
        "patent_new_tech"|"specific_person"|"small_repeat"|"other_justified".
        "rebid_failure"는 **재공고입찰까지 했는데도 유찰**(입찰 불성립·낙찰자 없음·1인 응찰)된
        경우다 — 이 값만으로 재공고 수의 후보가 나온다(국가 시행령 제27조 / 지자체는 지방
        시행령 제26조). 지자체(org_type="local")의 사유 판정은 지방계약법 시행령 제25조①
        각 호·제26조를 근거로 나간다. "small_repeat"(소액)는 금액 사유라 사유 룰이 따로
        없고 추정가격 기준 금액 룰이 판정한다(상한 초과면 수의 후보가 나오지 않는다).
    is_women_enterprise: 여성기업 여부 — 지자체 물품·용역 2천만원 초과 1억원 이하
        수의계약(시행령 제25조제1항제5호바목) 판정에 필요. 사용자가 "여성기업",
        "장애인기업", "사회적기업"이라고 말하면 **반드시 해당 플래그를 세워라** —
        빠뜨리면 수의계약 후보가 통째로 빠지고 경쟁입찰만 제시된다.
    is_disabled_enterprise: 장애인기업 여부 (위와 같은 목)
    is_social_enterprise: 사회적기업·사회적협동조합·자활기업·마을기업 여부 (위와 같은 목).
        이 유형은 행정안전부 고시 취약계층 고용비율 충족이 추가 요건이다.
    is_youth_startup: 청년창업기업 여부 — 물품·용역 2천만원 초과 5천만원 이하
        수의계약(지방 제5호 다목 / 국가 시행령 제26조①5호가목7, 중소기업창업
        지원법 제2조제11호)
    is_small_enterprise: 상대방이 소기업·소상공인인지 여부 — 2천만원 초과 1억원
        이하 수의계약(국가 시행령 제26조①5호가목3 / 지방 시행령 제25조①5호라목)
        판정에 필요. **주의: 국가·공기업 2천만원 초과~1억원 이하는 무조건
        소액수의가 아니다** — 소기업·소상공인/특수 지식·기술(academic)/여성·
        장애인·사회적기업/청년창업(5천만 이하) 요건 충족 시에만 수의 가능하므로,
        해당하면 플래그를 세워라. 미충족이면 경쟁입찰이 원칙이다.
    is_special_expertise: 학술연구·원가계산·건설기술 등 **특수한 지식·기술·자격을 요구하는
        계약**인지 — 물품·용역 2천만원 초과 1억원 이하 수의(국가 시행령 제26조①5호가목4 /
        지방 시행령 제25조①5호마목) 판정에 필요. **물품에도 적용된다**(예: 항공사진 정사영상
        구매). 용역은 service_type="academic"과 같은 뜻이다.
    follow_up_answers: **후속질문 답변** — 이 도구를 한 번 부르면 `follow_up_questions`가
        함께 온다(제한경쟁·공동도급 등 판정을 바꾸는 조건). 사용자에게 물어 답을 얻었으면
        같은 인자에 이것만 더해 **다시 부르면 `final_recommendation`(최종 계약방법)이
        온다.** 형식은 `{질문id: true/false 또는 값}` (예: `{"regional_restriction": true,
        "joint_contract": true}`). 세션 id를 들고 다닐 필요가 없다 — 서버가 같은 호출
        안에서 1단계·2단계를 이어 판정한다. 답을 모르면 넣지 마라(추측 금지).
    selected_rule_id: 후보 중 사용자가 고른 룰 id(예: "SVC_004"). 후보에 없으면 무시되고
        그 사실이 `final_recommendation.selection_ignored_reason`에 적힌다.
    selected_alternative_kind: `practice_alternatives`에서 사용자가 고른 실무 옵션의 kind.
    bid_notice_date: 입찰공고(예정)일 "YYYY-MM-DD". 공고일 기준으로 갈리는 규정의 기준일이다
        (예: 지자체 중소기업자 우선조달 상한 — 판로지원법 제4조② 단서는 2026-12-30 시행 후
        최초 입찰공고분부터). 모르면 넣지 마라 — 서버는 오늘 날짜로 한 기간을 고르지 않고
        두 기간을 다 공시한다.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
org_typeNopublic_corp
project_nameNoMCP 조회
service_typeNo
contract_typeYes
bid_notice_dateNo
estimated_priceYes
is_youth_startupNo
selected_rule_idNo
follow_up_answersNo
negotiation_reasonNo
is_small_enterpriseNo
is_women_enterpriseNo
is_social_enterpriseNo
is_special_expertiseNo
construction_specialtyNo
is_disabled_enterpriseNo
selected_alternative_kindNo
is_sme_competition_productNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / bid_notice_date
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Bid Notice Date"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / is_special_expertise
      Added value: +{
      +  "default": false,
      +  "title": "Is Special Expertise",
      +  "type": "boolean"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / follow_up_answers
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Follow Up Answers"
      +}
    • addedInput schema / properties / selected_alternative_kind
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Selected Alternative Kind"
      +}
    • addedInput schema / properties / selected_rule_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Selected Rule Id"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / is_small_enterprise
      Added value: +{
      +  "default": false,
      +  "title": "Is Small Enterprise",
      +  "type": "boolean"
      +}
  5. Changed4 schema fields changed
    • addedInput schema / properties / is_disabled_enterprise
      Added value: +{
      +  "default": false,
      +  "title": "Is Disabled Enterprise",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / is_social_enterprise
      Added value: +{
      +  "default": false,
      +  "title": "Is Social Enterprise",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / is_women_enterprise
      Added value: +{
      +  "default": false,
      +  "title": "Is Women Enterprise",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / is_youth_startup
      Added value: +{
      +  "default": false,
      +  "title": "Is Youth Startup",
      +  "type": "boolean"
      +}
  6. Changed3 schema fields changed
    • addedInput schema / properties / contract_type / enum
      Added value: +[
      +  "construction",
      +  "service",
      +  "product"
      +]
    • addedInput schema / properties / org_type / enum
      Added value: +[
      +  "national",
      +  "local",
      +  "public_corp"
      +]
    • changedInput schema / properties / service_type / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "technical",
      +      "academic",
      +      "facility",
      +      "it_service",
      +      "other"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  7. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly/idempotent/non-destructive, and the description goes well past them: it discloses the vendor_conditional_candidates split for missing status flags, the law_currency/laws_checked/laws_not_verified verification contract with the 2026-10-15 date, and the selection_ignored_reason fallback. This is exactly the edge-case behavior an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is long, but the length is defensible for an 18-parameter rules tool with zero schema descriptions, and it is front-loaded with purpose before the Args block. There is mild repetition in the flag blocks ('위와 같은 목') that could be tightened, keeping it short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry return semantics, and it partially does by naming key response fields (follow_up_questions, final_recommendation, vendor_conditional_candidates, law_currency). It stops short of a full response shape, and the undocumented project_name is a small hole, so 4 rather than 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does: it documents nearly every one of the 18 parameters with meaning, enum values, monetary thresholds, governing statutes (e.g. 국가 시행령 제26조①5호가목3 vs 지방 시행령 제25조①5호라목), and the non-obvious fact that is_special_expertise also applies to products. Only project_name is undocumented, a negligible gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific verb and resource ('계약방법 결정론 판정') plus the deliverable ('적용 가능한 계약방법 후보와 법령 근거를 반환'), which cleanly separates it from the law-lookup siblings (get_law_article, search_law). An agent can tell this is a rules-engine judgement tool, not a document retrieval tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit operational guidance: how to handle the two-stage call (re-invoke with follow_up_answers to get final_recommendation), and explicit prohibitions ('지위를 추정하지 말고 사용자에게 확인하라', '답을 모르면 넣지 마라'). It does not name alternatives, but no sibling actually competes with this judgement tool, so the guidance is sufficient if not framed as routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.