addrbookFor publishers
← The evidence ledger

Evidence row 1234587

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 5e29bfe3-044e-4dca-a2c4-2b92028a50c7
Recorded
Previous row
#1052418
Body SHA-256
50671fba6259415533abdca9a59d8215ec59e076b45e9b41008fa9c0f51ab659
Leaf
0x37ce1331fc4b2f3a3216c9114f617657351fdbd41670505f95cec092d5af9616

What was observed

{
  "count": 18,
  "tools": [
    {
      "description": "모든 안건을 지금 마감하고 결과를 확정한다. 되돌릴 수 없다. 공고한 마감보다 일찍 닫으면 결의가 다투어질 수 있다 — 주최자가 지시한 경우에만. manageToken 필요.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "confirm": {
            "const": true,
            "description": "주최자의 마감 지시를 받았다는 뜻. 반드시 true",
            "type": "boolean"
          },
          "manageToken": {
            "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다",
            "type": "string"
          },
          "meetingId": {
            "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\"",
            "type": "string"
          }
        },
        "required": [
          "meetingId",
          "manageToken",
          "confirm"
        ],
        "type": "object"
      },
      "name": "close_meeting"
    },
    {
      "description": "집회 초안을 만든다. 초안은 \"확인 대기\" 상태라 아무것도 열리지 않고 돈도 들지 않는다 — 돌려받은 confirmUrl 을 주최자(관리인)에게 전달하면 주최자가 내용을 검토하고 체크한 뒤 휴대폰 본인인증·결제를 해야 투표가 열린다. 관리 토큰은 주최자가 받으며, 운영을 맡길지는 주최자가 정한다. 집합건물(bldg)은 agendas[].preset 에 bldg_general / bldg_bylaw / bldg_common_change 등 법정 유형을 넣고, closesAt(전자투표 마감)은 paperClosesAt(집회일) 전날까지여야 한다. roster 는 선택이며 넣을 때는 서버에 원문을 보내지 않는다: 각 사람의 hash = sha256(\"voter:\" + 이름 + \"|\" + 생년월일(YYYYMMDD) + \"|\" + 휴대폰(숫자만)) 의 16진수, 면적 의결권이면 weight(㎡). 없으면 주최자가 대시보드에서 엑셀로 올린다.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "agendas": {
            "description": "안건 목록(1~30개). 안건마다 투표가 하나씩 열린다",
            "items": {
              "properties": {
                "description": {
                  "description": "안건 설명(2,000자까지). 투표 화면에 그대로 보인다",
                  "maxLength": 2000,
                  "type": "string"
                },
                "kind": {
                  "description": "\"yesno\"(찬반, 기본) 또는 \"choice\"(선택지·후보 중 고름)",
                  "enum": [
                    "yesno",
                    "choice"
                  ],
                  "type": "string"
                },
                "options": {
                  "description": "kind 가 choice 일 때 선택지(후보) 이름 목록. 예: [\"홍길동\", \"김영희\"]",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "preset": {
                  "description": "법정 안건 유형 키(get_resolution_requirement 의 key). 예: \"bldg_general\". etc 단체는 생략 가능",
                  "type": "string"
                },
                "title": {
                  "description": "안건 이름. 예: \"제1호 2026년 관리비 예산안 승인\"",
                  "type": "string"
                }
              },
              "required": [
                "title"
              ],
              "type": "object"
            },
            "maxItems": 30,
            "minItems": 1,
            "type": "array"
          },
          "agent": {
            "description": "에이전트 이름(기록용). 예: \"claude-desktop\"",
            "type": "string"
          },
          "closesAt": {
            "description": "전자투표 마감 시각, ISO 8601(한국 시간 오프셋 포함). 예: \"2026-11-20T18:00:00+09:00\". 집합건물은 paperClosesAt 전날까지",
            "type": "string"
          },
          "declaredCount": {
            "description": "투표할 수 있는 사람 수(구분소유자·조합원 수). 요금과 정족수의 기준. 예: 366",
            "minimum": 1,
            "type": "integer"
          },
          "isAnonymous": {
            "default": true,
            "description": "익명(비밀) 투표 여부. 기본 true. 법이 비밀투표를 요구하는 안건은 true 로 고정된다",
            "type": "boolean"
          },
          "orgType": {
            "description": "단체 유형 키. 예: \"bldg\"(집합건물 관리단), \"redev\"(정비사업조합), \"apt\"(입주자대표회의)",
            "enum": [
              "bldg",
              "apt",
              "redev",
              "union",
              "assoc",
              "coop",
              "housing",
              "school",
              "student",
              "etc"
            ],
            "type": "string"
          },
          "paperClosesAt": {
            "description": "현장·서면 접수 마감(집회일) ISO 8601. 예: \"2026-11-21T14:00:00+09:00\". 집합건물은 closesAt 다음 날 이후",
            "type": "string"
          },
          "roster": {
            "description": "선거인 명부(선택). 해시만 보낸다. 없으면 주최자가 대시보드에서 엑셀로 올린다",
            "items": {
              "properties": {
                "hash": {
                  "description": "sha256(\"voter:\" + 이름 + \"|\" + 생년월일 YYYYMMDD + \"|\" + 휴대폰 숫자만) 의 16진수 64자. 원문은 보내지 않는다",
                  "type": "string"
                },
                "weight": {
                  "description": "의결권(면적 ㎡). 집합건물처럼 면적 의결권이 있을 때만. 예: 84.97",
                  "type": "number"
                }
              },
              "required": [
                "hash"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "title": {
            "description": "집회 이름. 예: \"트레젠웰가 2026년 정기 관리단집회\"",
            "maxLength": 200,
            "type": "string"
          },
          "useWeighted": {
            "description": "면적 의결권 사용 여부. etc 단체만 고른다 — 법정 안건은 법이 정한다",
            "type": "boolean"
          }
        },
        "required": [
          "orgType",
          "title",
          "declaredCount",
          "agendas",
          "closesAt"
        ],
        "type": "object"
      },
      "name": "create_draft_meeting"
    },
    {
      "description": "이 안건을 전자투표로 할 수 있는가 — 법이 직접 허용 / 규약·정관 근거 필요 / 불가(전자서명 요구 등) — 와 그 근거 조문.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "key": {
            "description": "안건 유형 키. 예: \"coop_bylaw\", \"stock_ordinary\"",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "name": "electronic_voting_basis"
    },
    {
      "description": "서면결의서(현장 표)를 입력한다. 한 사람 = 명부 해시 + 안건별 선택지 id. 증빙 사진(data:image/… URL)이 반드시 필요하다. 전자투표한 사람이 섞이면 묶음 전체가 거절된다. 표가 더해지는 행동이다. manageToken 필요.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "evidenceImageDataUrl": {
            "description": "서면결의서 묶음 사진, data:image/jpeg;base64,… 형식(필수). 해시가 체인에 남는다",
            "type": "string"
          },
          "manageToken": {
            "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다",
            "type": "string"
          },
          "meetingId": {
            "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\"",
            "type": "string"
          },
          "note": {
            "description": "비고(선택). 예: \"11월 21일 현장 접수분\"",
            "type": "string"
          },
          "voters": {
            "description": "서면 투표자 목록. 예: [{\"hash\":\"3fa9…\",\"choices\":{\"p_1\":\"o_yes\",\"p_2\":\"o_no\"}}]",
            "items": {
              "properties": {
                "choices": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "안건 id → 선택지 id. 안건·선택지 id 는 get_dashboard 에 있다. 예: {\"p_1\":\"o_yes\"}",
                  "type": "object"
                },
                "hash": {
                  "description": "명부 해시(create_draft_meeting 의 hash 규칙, 64자 16진수)",
                  "type": "string"
                }
              },
              "required": [
                "hash",
                "choices"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "meetingId",
          "manageToken",
          "voters",
          "evidenceImageDataUrl"
        ],
        "type": "object"
      },
      "name": "enter_paper_ballots"
    },
    {
      "description": "집회의 결제 상태·안건별 집계·명부 현황. manageToken 필요.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "manageToken": {
            "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다",
            "type": "string"
          },
          "meetingId": {
            "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\"",
            "type": "string"
          }
        },
        "required": [
          "meetingId",
          "manageToken"
        ],
        "type": "object"
      },
      "name": "get_dashboard"
    },
    {
      "description": "초안이 확인됐는지, 결제됐는지, 투표가 열렸는지 본다. 확인 전에는 confirmToken, 확인 뒤에는 주최자가 넘겨준 manageToken 을 token 에 넣는다.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "draftId": {
            "description": "create_draft_meeting 응답의 draftId. 예: \"d_7q2m9x\"",
            "type": "string"
          },
          "token": {
            "description": "확인 전에는 create_draft_meeting 응답의 confirmToken, 주최자가 확인한 뒤에는 주최자가 넘겨준 manageToken",
            "type": "string"
          }
        },
        "required": [
          "draftId",
          "token"
        ],
        "type": "object"
      },
      "name": "get_draft_status"
    },
    {
      "description": "투표 인원으로 세 갈래(AI 투표함·직접 투표함·맞춤 투표함) 요금을 계산한다. 부가세 포함 금액. 아무것도 바꾸지 않는다.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "people": {
            "description": "투표할 수 있는 사람 수. 예: 366",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "people"
        ],
        "type": "object"
      },
      "name": "get_quote"
    },
    {
      "description": "집회 전체 결과보고서(안건별 표수·의결권·판정·근거·검증값). 마감 전에는 봉인(sealed). manageToken 필요.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "manageToken": {
            "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다",
            "type": "string"
          },
          "meetingId": {
            "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\"",
            "type": "string"
          }
        },
        "required": [
          "meetingId",
          "manageToken"
        ],
        "type": "object"
      },
      "name": "get_report"
    },
    {
      "description": "안건 유형 하나의 의결정족수(인원·의결권), 근거 조문, 전자투표 가능 여부와 근거, 소집통지 요건, 본인확인 등급, 명부 필요 여부, 주의사항.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "key": {
            "description": "안건 유형 키(list_resolution_types 의 key). 예: \"bldg_general\", \"bldg_bylaw\", \"redev_general\", \"apt_rep_multi\"",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "name": "get_resolution_requirement"
    },
    {
      "description": "법령 하나의 조문 원문(조·항·호)과 개정 꼬리표, 투표함이 그 조문을 어떻게 지키는지(적용 내용), 관련 안건 유형. article 을 비우면 추적 조문 전부.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "article": {
            "description": "조 번호. 예: \"제38조\". 비우면 그 법령의 추적 조문 전부",
            "type": "string"
          },
          "law": {
            "description": "법령 이름 또는 slug. 예: \"집합건물의 소유 및 관리에 관한 법률\" 또는 \"condominium\" (목록은 list_laws)",
            "type": "string"
          }
        },
        "required": [
          "law"
        ],
        "type": "object"
      },
      "name": "get_statute"
    },
    {
      "description": "표 수와 의결권을 넣어 가결·부결을 판정한다. 투표함이 개표에 쓰는 함수 그대로. 집합건물은 구분소유자 수와 의결권(면적)을 모두 넣어야 두 요건이 판정된다. 아무것도 바꾸지 않는 계산이다.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "approveCount": {
            "description": "찬성 인원. 예: 323",
            "type": "number"
          },
          "approveWeight": {
            "description": "찬성 의결권 합(㎡). 집합건물만. 예: 24279.3",
            "type": "number"
          },
          "attendeeCount": {
            "description": "출석(투표) 인원. 전자+서면+현장. 예: 380",
            "type": "number"
          },
          "castWeight": {
            "description": "출석 의결권 합(㎡). 집합건물만. 예: 30800",
            "type": "number"
          },
          "directAttendanceCount": {
            "description": "현장 직접 출석 인원. 정비사업(redev_*)의 10분의 1 요건에 쓴다. 예: 45",
            "type": "number"
          },
          "eligibleCount": {
            "description": "재적 인원(구분소유자·조합원 수). 예: 400",
            "type": "number"
          },
          "eligibleWeight": {
            "description": "재적 의결권 합(면적 ㎡). 집합건물만. 예: 32431.2",
            "type": "number"
          },
          "preset": {
            "description": "안건 유형 키. 예: \"bldg_general\"",
            "type": "string"
          }
        },
        "required": [
          "preset"
        ],
        "type": "object"
      },
      "name": "judge_resolution"
    },
    {
      "description": "추적 법령의 시행일·공포일·조문별 개정 꼬리표·투표함 반영 내용과 시행 예정 개정.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "law_changelog"
    },
    {
      "description": "투표함이 추적하는 한국 법령 목록 — 시행일·공포일·대조일·추적 조문·시행 예정 개정. 출처 국가법령정보센터.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "list_laws"
    },
    {
      "description": "단체 유형(집합건물 관리단·아파트·정비사업조합·노동조합·사단법인·협동조합·주택조합·학교법인·학생자치·그 밖)별 안건 유형과 정족수 요약.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "group": {
            "description": "단체 유형 키. 예: \"bldg\"(집합건물 관리단). 비우면 전부",
            "enum": [
              "bldg",
              "apt",
              "redev",
              "union",
              "assoc",
              "coop",
              "housing",
              "school",
              "student",
              "etc"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_resolution_types"
    },
    {
      "description": "소집통지를 한 날짜·방법·대상 수를 기록한다(모든 안건). 기록이 하나 더해진다. manageToken 필요.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "manageToken": {
            "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다",
            "type": "string"
          },
          "meetingId": {
            "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\"",
            "type": "string"
          },
          "method": {
            "description": "통지 방법. 예: \"등기우편\", \"문자\", \"게시판 공고\", \"이메일\"",
            "type": "string"
          },
          "note": {
            "description": "비고(선택). 예: \"우편 발송 영수증 보관\"",
            "type": "string"
          },
          "notifiedOn": {
            "description": "통지한 날짜 YYYY-MM-DD. 예: \"2026-11-05\"",
            "type": "string"
          },
          "recipients": {
            "description": "통지 대상 수. 예: 366",
            "type": "integer"
          }
        },
        "required": [
          "meetingId",
          "manageToken",
          "notifiedOn",
          "method"
        ],
        "type": "object"
      },
      "name": "record_notice"
    },
    {
      "description": "운영자가 대신 개설·집계하는 맞춤 투표함(1인당 300원)을 신청한다. 담당자가 연락한다. 담당자 이름·연락처가 필요하다. 사람에게 연락이 가는 행동이다 — 주최자가 원할 때만.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "contactEmail": {
            "description": "담당자 이메일(선택). 예: \"manager@example.com\"",
            "type": "string"
          },
          "contactName": {
            "description": "담당자 이름. 예: \"김기용\"",
            "type": "string"
          },
          "contactPhone": {
            "description": "담당자 휴대폰(숫자·하이픈). 예: \"010-1234-5678\"",
            "type": "string"
          },
          "headCount": {
            "description": "투표 예정 인원(선택). 예: 366",
            "type": "integer"
          },
          "message": {
            "description": "요청 내용(2,000자까지). 집회일·안건·명부 상태 등",
            "maxLength": 2000,
            "type": "string"
          },
          "orgName": {
            "description": "단체 이름. 예: \"트레젠웰가 관리단\"",
            "type": "string"
          },
          "orgType": {
            "description": "단체 유형 키(선택). 예: \"bldg\"",
            "type": "string"
          }
        },
        "required": [
          "orgName",
          "contactName",
          "contactPhone"
        ],
        "type": "object"
      },
      "name": "request_consult"
    },
    {
      "description": "질문·안건 이름·법령 이름으로 안건 유형과 법령을 찾는다.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "한국어 검색어. 예: \"관리규약 개정\", \"재건축 총회 정족수\", \"집합건물법\"",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search"
    },
    {
      "description": "선거인 명부(해시)를 모든 안건에 올린다. 이미 있는 명부는 통째로 바뀐다. 원문은 보내지 않는다 — create_draft_meeting 의 hash 규칙과 같다. 첫 표가 들어온 뒤에는 바꿀 수 없다. manageToken 필요.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "entries": {
            "description": "명부 전체(한 사람에 하나). 예: [{\"hash\":\"3fa9…(64자)\",\"weight\":84.97}]",
            "items": {
              "properties": {
                "hash": {
                  "description": "sha256(\"voter:\" + 이름 + \"|\" + 생년월일 YYYYMMDD + \"|\" + 휴대폰 숫자만) 의 16진수 64자. 원문은 보내지 않는다",
                  "type": "string"
                },
                "weight": {
                  "description": "의결권(면적 ㎡). 집합건물처럼 면적 의결권이 있을 때만. 예: 84.97",
                  "type": "number"
                }
              },
              "required": [
                "hash"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "manageToken": {
            "description": "주최자가 넘겨준 관리 토큰(영숫자). 대시보드 주소의 # 뒤 값. 주최자가 확인·결제한 뒤에만 생긴다",
            "type": "string"
          },
          "meetingId": {
            "description": "집회 번호. create_draft_meeting 응답의 meetingId 또는 대시보드 주소의 m= 값. 예: \"m_8f3kq2\"",
            "type": "string"
          }
        },
        "required": [
          "meetingId",
          "manageToken",
          "entries"
        ],
        "type": "object"
      },
      "name": "upload_roster"
    }
  ]
}

What the leaf hashes

{"body":"50671fba6259415533abdca9a59d8215ec59e076b45e9b41008fa9c0f51ab659","id":1234587,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793348473498640,"prev":1052418,"subject":"5e29bfe3-044e-4dca-a2c4-2b92028a50c7","subject_kind":"endpoint"}

Proof

Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.

How to check it · This row as JSON