투표함 — 전자투표 법령 자료 · AI 투표함 (Korean e-voting statutes, quorum & ballot drafting)

Korean e-voting statutes, quorum checks and ballot drafting. 18 tools, no auth, no fee.

Should I use this

Quality & Safety

A
Description quality
72%
Schema completeness
92%
Naming quality
94%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (10)

  • LOWTool 'list_laws' description lacks action verbin list_laws
  • LOWTool 'get_statute' description lacks action verbin get_statute
  • LOWTool 'list_resolution_types' description lacks action verbin list_resolution_types
  • LOWTool 'get_resolution_requirement' description lacks action verbin get_resolution_requirement
  • LOWTool 'judge_resolution' description lacks action verbin judge_resolution
  • LOWTool 'electronic_voting_basis' description lacks action verbin electronic_voting_basis
  • LOWTool 'law_changelog' description lacks action verbin law_changelog
  • LOWTool 'search' description lacks action verbin search
  • LOWTool 'get_quote' description lacks action verbin get_quote
  • LOWTool 'request_consult' description lacks action verbin request_consult

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,199Tokens (tool definitions)
~1.4 KBTypical response size
Significant attention impact (4.84% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "votebox-law": {
      "url": "https://vote.easykmarket.com/api/mcp"
    }
  }
}

Remote endpoints

https://vote.easykmarket.com/api/mcpstreamable-http

What it can do

Tool inventory

Tools (18)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_laws

투표함이 추적하는 한국 법령 목록 — 시행일·공포일·대조일·추적 조문·시행 예정 개정. 출처 국가법령정보센터.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_statute(law, article)

법령 하나의 조문 원문(조·항·호)과 개정 꼬리표, 투표함이 그 조문을 어떻게 지키는지(적용 내용), 관련 안건 유형. article 을 비우면 추적 조문 전부.

Input Schema

{
  "type": "object",
  "properties": {
    "law": {
      "type": "string",
      "description": "법령 이름 또는 slug. 예: \"집합건물의 소유 및 관리에 관한 법률\" 또는 \"condominium\" (목록은 list_laws)"
    },
    "article": {
      "type": "string",
      "description": "조 번호. 예: \"제38조\". 비우면 그 법령의 추적 조문 전부"
    }
  },
  "required": [
    "law"
  ],
  "additionalProperties": false
}
🟢list_resolution_types(group)

단체 유형(집합건물 관리단·아파트·정비사업조합·노동조합·사단법인·협동조합·주택조합·학교법인·학생자치·그 밖)별 안건 유형과 정족수 요약.

Input Schema

{
  "type": "object",
  "properties": {
    "group": {
      "type": "string",
      "enum": [
        "bldg",
        "apt",
        "redev",
        "union",
        "assoc",
        "coop",
        "housing",
        "school",
        "student",
        "etc"
      ],
      "description": "단체 유형 키. 예: \"bldg\"(집합건물 관리단). 비우면 전부"
    }
  },
  "additionalProperties": false
}
🟢get_resolution_requirement(key)

안건 유형 하나의 의결정족수(인원·의결권), 근거 조문, 전자투표 가능 여부와 근거, 소집통지 요건, 본인확인 등급, 명부 필요 여부, 주의사항.

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "안건 유형 키(list_resolution_types 의 key). 예: \"bldg_general\", \"bldg_bylaw\", \"redev_general\", \"apt_rep_multi\""
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false
}
🟢judge_resolution(preset, eligibleCount, attendeeCount, approveCount, eligibleWeight, ...)

표 수와 의결권을 넣어 가결·부결을 판정한다. 투표함이 개표에 쓰는 함수 그대로. 집합건물은 구분소유자 수와 의결권(면적)을 모두 넣어야 두 요건이 판정된다. 아무것도 바꾸지 않는 계산이다.

Input Schema

{
  "type": "object",
  "properties": {
    "preset": {
      "type": "string",
      "description": "안건 유형 키. 예: \"bldg_general\""
    },
    "eligibleCount": {
      "type": "number",
      "description": "재적 인원(구분소유자·조합원 수). 예: 400"
    },
    "attendeeCount": {
      "type": "number",
      "description": "출석(투표) 인원. 전자+서면+현장. 예: 380"
    },
    "approveCount": {
      "type": "number",
      "description": "찬성 인원. 예: 323"
    },
    "eligibleWeight": {
      "type": "number",
      "description": "재적 의결권 합(면적 ㎡). 집합건물만. 예: 32431.2"
    },
    "castWeight": {
      "type": "number",
      "description": "출석 의결권 합(㎡). 집합건물만. 예: 30800"
    },
    "approveWeight": {
      "type": "number",
      "description": "찬성 의결권 합(㎡). 집합건물만. 예: 24279.3"
    },
    "directAttendanceCount": {
      "type": "number",
      "description": "현장 직접 출석 인원. 정비사업(redev_*)의 10분의 1 요건에 쓴다. 예: 45"
    }
  },
  "required": [
    "preset"
  ],
  "additionalProperties": false
}
🟢electronic_voting_basis(key)

이 안건을 전자투표로 할 수 있는가 — 법이 직접 허용 / 규약·정관 근거 필요 / 불가(전자서명 요구 등) — 와 그 근거 조문.

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "안건 유형 키. 예: \"coop_bylaw\", \"stock_ordinary\""
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false
}
🟢law_changelog

추적 법령의 시행일·공포일·조문별 개정 꼬리표·투표함 반영 내용과 시행 예정 개정.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢search(query)

질문·안건 이름·법령 이름으로 안건 유형과 법령을 찾는다.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "한국어 검색어. 예: \"관리규약 개정\", \"재건축 총회 정족수\", \"집합건물법\""
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_quote(people)

투표 인원으로 세 갈래(AI 투표함·직접 투표함·맞춤 투표함) 요금을 계산한다. 부가세 포함 금액. 아무것도 바꾸지 않는다.

Input Schema

{
  "type": "object",
  "properties": {
    "people": {
      "type": "integer",
      "minimum": 1,
      "description": "투표할 수 있는 사람 수. 예: 366"
    }
  },
  "required": [
    "people"
  ],
  "additionalProperties": false
}
🟡create_draft_meeting(agent, orgType, title, declaredCount, agendas, ...)

집회 초안을 만든다. 초안은 "확인 대기" 상태라 아무것도 열리지 않고 돈도 들지 않는다 — 돌려받은 confirmUrl 을 주최자(관리인)에게 전달하면 주최자가 내용을 검토하고 체크한 뒤 휴대폰 본인인증·결제를 해야 투표가 열린다. 관리 토큰은 주최자가 받으며, 운영을 맡길지는 주최자가 정한다. 집합건물(bldg)은 agendas[].preset 에 bldg_general / bldg_bylaw / bldg_common_change 등 법정 유형을 넣고, closesAt(전자투표 마감)은 paperClosesAt(집회일) 전날까지여야 한다. roster 는 선택이며 넣을 때는 서버에 원문을 보내지 않는다: 각 사람의 hash = sha256("voter:" + 이름 + "|" + 생년월일(YYYYMMDD) + "|" + 휴대폰(숫자만)) 의 16진수, 면적 의결권이면 weight(㎡). 없으면 주최자가 대시보드에서 엑셀로 올린다.

Input Schema

{
  "type": "object",
  "properties": {
    "agent": {
      "type": "string",
      "description": "에이전트 이름(기록용). 예: \"claude-desktop\""
    },
    "orgType": {
      "type": "string",
      "enum": [
        "bldg",
        "apt",
        "redev",
        "union",
        "assoc",
        "coop",
        "housing",
        "school",
        "student",
        "etc"
      ],
      "description": "단체 유형 키. 예: \"bldg\"(집합건물 관리단), \"redev\"(정비사업조합), \"apt\"(입주자대표회의)"
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "description": "집회 이름. 예: \"트레젠웰가 2026년 정기 관리단집회\""
    },
    "declaredCount": {
      "type": "integer",
      "minimum": 1,
      "description": "투표할 수 있는 사람 수(구분소유자·조합원 수). 요금과 정족수의 기준. 예: 366"
    },
    "agendas": {
      "type": "array",
      "minItems": 1,
      "maxItems": 30,
      "description": "안건 목록(1~30개). 안건마다 투표가 하나씩 열린다",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "안건 이름. 예: \"제1호 2026년 관리비 예산안 승인\""
          },
          "preset": {
            "type": "string",
            "description": "법정 안건 유형 키(get_resolution_requirement 의 key). 예: \"bldg_general\". etc 단체는 생략 가능"
          },
          "kind": {
            "type": "string",
            "enum": [
              "yesno",
              "choice"
            ],
            "description": "\"yesno\"(찬반, 기본) 또는 \"choice\"(선택지·후보 중 고름)"
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "kind 가 choice 일 때 선택지(후보) 이름 목록. 예: [\"홍길동\", \"김영희\"]"
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "description": "안건 설명(2,000자까지). 투표 화면에 그대로 보인다"
          }
        },
        "required": [
          "title"
        ]
      }
    },
    "closesAt": {
      "type": "string",
      "description": "전자투표 마감 시각, ISO 8601(한국 시간 오프셋 포함). 예: \"2026-11-20T18:00:00+09:00\". 집합건물은 paperClosesAt 전날까지"
    },
    "paperClosesAt": {
      "type": "string",
      "description": "현장·서면 접수 마감(집회일) ISO 8601. 예: \"2026-11-21T14:00:00+09:00\". 집합건물은 closesAt 다음 날 이후"
    },
    "isAnonymous": {
      "type": "boolean",
      "default": true,
      "description": "익명(비밀) 투표 여부. 기본 true. 법이 비밀투표를 요구하는 안건은 true 로 고정된다"
    },
    "useWeighted": {
      "type": "boolean",
      "description": "면적 의결권 사용 여부. etc 단체만 고른다 — 법정 안건은 법이 정한다"
    },
    "roster": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "description": "sha256(\"voter:\" + 이름 + \"|\" + 생년월일 YYYYMMDD + \"|\" + 휴대폰 숫자만) 의 16진수 64자. 원문은 보내지 않는다"
          },
          "weight": {
            "type": "number",
            "description": "의결권(면적 ㎡). 집합건물처럼 면적 의결권이 있을 때만. 예: 84.97"
          }
        },
        "required": [
          "hash"
        ]
      },
      "description": "선거인 명부(선택). 해시만 보낸다. 없으면 주최자가 대시보드에서 엑셀로 올린다"
    }
  },
  "required": [
    "orgType",
    "title",
    "declaredCount",
    "agendas",
    "closesAt"
  ],
  "additionalProperties": false
}
🟢get_draft_status(draftId, token)

초안이 확인됐는지, 결제됐는지, 투표가 열렸는지 본다. 확인 전에는 confirmToken, 확인 뒤에는 주최자가 넘겨준 manageToken 을 token 에 넣는다.

Input Schema

{
  "type": "object",
  "properties": {
    "draftId": {
      "type": "string",
      "description": "create_draft_meeting 응답의 draftId. 예: \"d_7q2m9x\""
    },
    "token": {
      "type": "string",
      "description": "확인 전에는 create_draft_meeting 응답의 confirmToken, 주최자가 확인한 뒤에는 주최자가 넘겨준 manageToken"
    }
  },
  "required": [
    "draftId",
    "token"
  ],
  "additionalProperties": false
}
⚪request_consult(orgName, contactName, contactPhone, contactEmail, headCount, ...)

운영자가 대신 개설·집계하는 맞춤 투표함(1인당 300원)을 신청한다. 담당자가 연락한다. 담당자 이름·연락처가 필요하다. 사람에게 연락이 가는 행동이다 — 주최자가 원할 때만.

Input Schema

{
  "type": "object",
  "properties": {
    "orgName": {
      "type": "string",
      "description": "단체 이름. 예: \"트레젠웰가 관리단\""
    },
    "contactName": {
      "type": "string",
      "description": "담당자 이름. 예: \"김기용\""
    },
    "contactPhone": {
      "type": "string",
      "description": "담당자 휴대폰(숫자·하이픈). 예: \"010-1234-5678\""
    },
    "contactEmail": {
      "type": "string",
      "description": "담당자 이메일(선택). 예: \"[email protected]\""
    },
    "headCount": {
      "type": "integer",
      "description": "투표 예정 인원(선택). 예: 366"
    },
    "orgType": {
      "type": "string",
      "description": "단체 유형 키(선택). 예: \"bldg\""
    },
    "message": {
      "type": "string",
      "maxLength": 2000,
      "description": "요청 내용(2,000자까지). 집회일·안건·명부 상태 등"
    }
  },
  "required": [
    "orgName",
    "contactName",
    "contactPhone"
  ],
  "additionalProperties": false
}
🟢get_dashboard(meetingId, manageToken)

집회의 결제 상태·안건별 집계·명부 현황. manageToken 필요.

Input Schema

{
  "type": "object",
  "properties": {
    "meetingId": {
      "type": "string",
      "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\""
    },
    "manageToken": {
      "type": "string",
      "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다"
    }
  },
  "required": [
    "meetingId",
    "manageToken"
  ],
  "additionalProperties": false
}
🔴upload_roster(meetingId, manageToken, entries)

선거인 명부(해시)를 모든 안건에 올린다. 이미 있는 명부는 통째로 바뀐다. 원문은 보내지 않는다 — create_draft_meeting 의 hash 규칙과 같다. 첫 표가 들어온 뒤에는 바꿀 수 없다. manageToken 필요.

Input Schema

{
  "type": "object",
  "properties": {
    "meetingId": {
      "type": "string",
      "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\""
    },
    "manageToken": {
      "type": "string",
      "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다"
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "description": "sha256(\"voter:\" + 이름 + \"|\" + 생년월일 YYYYMMDD + \"|\" + 휴대폰 숫자만) 의 16진수 64자. 원문은 보내지 않는다"
          },
          "weight": {
            "type": "number",
            "description": "의결권(면적 ㎡). 집합건물처럼 면적 의결권이 있을 때만. 예: 84.97"
          }
        },
        "required": [
          "hash"
        ]
      },
      "description": "명부 전체(한 사람에 하나). 예: [{\"hash\":\"3fa9…(64자)\",\"weight\":84.97}]"
    }
  },
  "required": [
    "meetingId",
    "manageToken",
    "entries"
  ],
  "additionalProperties": false
}
⚪record_notice(meetingId, manageToken, notifiedOn, method, recipients, ...)

소집통지를 한 날짜·방법·대상 수를 기록한다(모든 안건). 기록이 하나 더해진다. manageToken 필요.

Input Schema

{
  "type": "object",
  "properties": {
    "meetingId": {
      "type": "string",
      "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\""
    },
    "manageToken": {
      "type": "string",
      "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다"
    },
    "notifiedOn": {
      "type": "string",
      "description": "통지한 날짜 YYYY-MM-DD. 예: \"2026-11-05\""
    },
    "method": {
      "type": "string",
      "description": "통지 방법. 예: \"등기우편\", \"문자\", \"게시판 공고\", \"이메일\""
    },
    "recipients": {
      "type": "integer",
      "description": "통지 대상 수. 예: 366"
    },
    "note": {
      "type": "string",
      "description": "비고(선택). 예: \"우편 발송 영수증 보관\""
    }
  },
  "required": [
    "meetingId",
    "manageToken",
    "notifiedOn",
    "method"
  ],
  "additionalProperties": false
}
⚪enter_paper_ballots(meetingId, manageToken, voters, evidenceImageDataUrl, note)

서면결의서(현장 표)를 입력한다. 한 사람 = 명부 해시 + 안건별 선택지 id. 증빙 사진(data:image/… URL)이 반드시 필요하다. 전자투표한 사람이 섞이면 묶음 전체가 거절된다. 표가 더해지는 행동이다. manageToken 필요.

Input Schema

{
  "type": "object",
  "properties": {
    "meetingId": {
      "type": "string",
      "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\""
    },
    "manageToken": {
      "type": "string",
      "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다"
    },
    "voters": {
      "type": "array",
      "description": "서면 투표자 목록. 예: [{\"hash\":\"3fa9…\",\"choices\":{\"p_1\":\"o_yes\",\"p_2\":\"o_no\"}}]",
      "items": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "description": "명부 해시(create_draft_meeting 의 hash 규칙, 64자 16진수)"
          },
          "choices": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "안건 id → 선택지 id. 안건·선택지 id 는 get_dashboard 에 있다. 예: {\"p_1\":\"o_yes\"}"
          }
        },
        "required": [
          "hash",
          "choices"
        ]
      }
    },
    "evidenceImageDataUrl": {
      "type": "string",
      "description": "서면결의서 묶음 사진, data:image/jpeg;base64,… 형식(필수). 해시가 체인에 남는다"
    },
    "note": {
      "type": "string",
      "description": "비고(선택). 예: \"11월 21일 현장 접수분\""
    }
  },
  "required": [
    "meetingId",
    "manageToken",
    "voters",
    "evidenceImageDataUrl"
  ],
  "additionalProperties": false
}
🔴close_meeting(meetingId, manageToken, confirm)

모든 안건을 지금 마감하고 결과를 확정한다. 되돌릴 수 없다. 공고한 마감보다 일찍 닫으면 결의가 다투어질 수 있다 — 주최자가 지시한 경우에만. manageToken 필요.

Input Schema

{
  "type": "object",
  "properties": {
    "meetingId": {
      "type": "string",
      "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\""
    },
    "manageToken": {
      "type": "string",
      "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다"
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "주최자의 마감 지시를 받았다는 뜻. 반드시 true"
    }
  },
  "required": [
    "meetingId",
    "manageToken",
    "confirm"
  ],
  "additionalProperties": false
}
🟢get_report(meetingId, manageToken)

집회 전체 결과보고서(안건별 표수·의결권·판정·근거·검증값). 마감 전에는 봉인(sealed). manageToken 필요.

Input Schema

{
  "type": "object",
  "properties": {
    "meetingId": {
      "type": "string",
      "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\""
    },
    "manageToken": {
      "type": "string",
      "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다"
    }
  },
  "required": [
    "meetingId",
    "manageToken"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded18 tools