Skip to main content
Glama
kyusik-yang

open-assembly-mcp

by kyusik-yang

open-assembly-mcp

PyPI GitHub License Python Tests 한국어

MCP server for the Korean National Assembly Open API (열린국회정보) — query bills, members, vote results, committee composition, pending bills, plenary agenda, per-member vote records, NARS reports, petitions, schedule, and hearings directly from Claude or any MCP-compatible AI client.


Showcase

한국어나 영어로 자연스럽게 질문하면 됩니다. Claude가 필요한 툴을 고르고 체인으로 연결합니다.

Demo animation

Before vs After


1 — 당론 분석

"22대 법원조직법 표결, 정당별 찬반 집계와 이탈표 알려줘"

Claude calls get_vote_resultsget_party_cohesion

법원조직법 일부개정법률안(대안) — 2026-02 의결
전체: 찬성 173 / 반대 73 / 기권 1

정당별 표결:
  더불어민주당  찬성 152 / 기권 1 / 불참 9
  국민의힘     반대  70 / 불참 36
  조국혁신당   찬성  12
  진보당       찬성   4
  개혁신당     반대   2 / 불참 1
  무소속       찬성   3 / 불참 3

이탈표:
  이학영 (더불어민주당 | 경기 군포시) — 기권

2 — 의원 의정활동 전체를 한 번에

"이준석 의원 22대 발의 법안 전부 통계내줘"

Claude calls analyze_legislator(name="이준석", assembly="22") — 툴 호출 1번, 최대 500건 자동 페이지네이션

이준석 (개혁신당 | 경기 화성시을 | 22대)
소속: 과학기술정보방송통신위원회

발의 법안: 총 14건
  처리 결과: 계류 중 13건 / 대안반영폐기 1건
  위원회별:  과학기술정보방송통신위원회 14건

최근 발의 (5건):
  전자상거래 등에서의 소비자보호에 관한 법률 일부개정법률안     2026-02-25
  정보통신망 이용촉진 및 정보보호 등에 관한 법률 일부개정법률안  2026-02-05
  소득세법 일부개정법률안                                       2025-08-19
  전기통신사업법 일부개정법률안                                  2025-08-06
  공공기관의 운영에 관한 법률 일부개정법률안                      2025-07-10

3 — 법안 입법 여정 전체

"인공지능기본법 (의안번호 2206772) 입법 과정 처음부터 끝까지 보여줘"

Claude calls get_bill_summary(assembly="22", bill_no="2206772") — 상세정보·심사정보·발의자·위원회회의 4개 서브호출 병렬 실행

인공지능 발전과 신뢰 기반 조성 등에 관한 기본법안 (BILL_NO 2206772)
발의: 과학기술정보방송통신위원장

위원회 심사:
  2024-11-26  과학기술정보방송통신위원회 상정
  2024-11-26  과학기술정보방송통신위원회 의결 (원안가결)

본회의:
  2024-12-17  의결 — 찬성 260 / 반대 1 / 기권 3
  2025-01-21  공포

원문: https://likms.assembly.go.kr/bill/billDetail.do?billId=PRC_R2V4H1W1T2K5M1O6E4Q9T0V7Q9S0U0

Related MCP server: AssemblyMCP

Connecting to Claude

There are three ways to use the Assembly tools, depending on which Claude interface you use.

Before any setup:

  1. Install uv (provides the uvx runner used in every install path below):

    # macOS / Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # Windows (PowerShell)
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

    Verify: uvx --version should print a version string. If you see command not found, open a new terminal so the PATH update takes effect.

  2. Get a free API key at open.assembly.go.kr → Sign up → 마이페이지 → API 키 발급


Easiest path. The --setup wizard writes the config file for you.

Prerequisites: Claude Desktop must be installed.

uvx open-assembly-mcp --setup

It prompts for your key, validates it, and writes the config automatically. Then restart Claude Desktop.

Manual config (skip the wizard) — edit the Claude Desktop config file directly:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "open-assembly": {
      "command": "uvx",
      "args": ["open-assembly-mcp@latest"],
      "env": {
        "ASSEMBLY_API_KEY": "your-api-key-here"
      }
    }
  }
}

Save and restart Claude Desktop.


Option 2 — Claude Code (CLI)

Best for researchers running Claude from the terminal. Three scope options:

# Local scope (default): stored in ~/.claude.json, applies only to the current project
claude mcp add open-assembly \
  --command uvx \
  --args "open-assembly-mcp@latest" \
  --env "ASSEMBLY_API_KEY=your-key-here"

# User scope: available across all your projects
claude mcp add open-assembly \
  --scope user \
  --command uvx \
  --args "open-assembly-mcp@latest" \
  --env "ASSEMBLY_API_KEY=your-key-here"

# Project scope: saved to .mcp.json at the project root (git-committable, good for team sharing)
claude mcp add open-assembly \
  --scope project \
  --command uvx \
  --args "open-assembly-mcp@latest" \
  --env "ASSEMBLY_API_KEY=your-key-here"

Verify it was added: claude mcp list


Option 3 — Claude.ai web (claude.ai)

The claude.ai web interface does not support locally-running MCP servers. It only connects to remote, HTTP-based servers hosted on public infrastructure.

To use the Assembly tools from claude.ai, you would need to deploy the server publicly as a hosted HTTP endpoint. Use Claude Desktop or Claude Code instead.


More Examples

Showcase 외 추가 시나리오입니다.


Scenario 1 — Find and filter bills in a policy domain

"22대 국회에서 발의된 인공지능 관련 법률안 목록을 찾아줘. 처리 결과별로 요약하고, 대안반영폐기된 법안 하나의 공동발의자도 알려줘."

Claude calls:

  1. search_bills(assembly="22", bill_name="인공지능", page_size=50) → 59 bills found

  2. For a 대안반영폐기 bill: get_bill_proposers(bill_id="PRC_...") → co-sponsor list

Sample output (real data, 2026-03):

인공지능 관련 법률안 59건 (22대)

처리 결과:
  대안반영폐기  28건  ← 위원회 대안(인공지능기본법)으로 흡수
  계류 중       31건

최근 발의 법안:
  인공지능 발전과 신뢰 기반 조성 등에 관한 기본법 일부개정법률안  이상휘  2026-02-12
  중소기업 인공지능 전환 지원에 관한 법률안                      김종민  2026-02-09
  인공지능 데이터센터 진흥 및 기반 조성에 관한 법률안             김장겸  2026-02-04

대안반영폐기 법안 공동발의자:
  인공지능 발전과 신뢰 기반 조성 등에 관한 기본법 일부개정법률안 (최민희, 2025-09-05)
    최민희 (민주당), 허성무 (민주당), 김우영 (민주당), 박민규 (민주당),
    최혁진 (민주당), 양문석 (민주당), 김현 (민주당), 한민수 (민주당),
    노종면 (민주당), 조인철 (민주당)  총 10명

Scenario 2 — Trace committee and plenary steps separately

"인공지능기본법 (의안번호 2206772)의 위원회 심사 경로와 본회의 표결 일정을 각각 보여줘."

Claude calls:

  1. get_bill_review(assembly="22", bill_no="2206772") → committee + plenary timeline

  2. get_bill_detail(bill_no="2206772") → full metadata + LINK_URL

Sample output (real data, 2026-03):

인공지능 발전과 신뢰 기반 조성 등에 관한 기본법안 (BILL_NO 2206772)
발의자: 과학기술정보방송통신위원장
소관위원회: 과학기술정보방송통신위원회

위원회 심사:
  2024-11-26  과기위 상정
  2024-11-26  과기위 의결 (원안가결)

본회의:
  2024-12-17  의결 — 찬성 260 / 반대 1 / 기권 3  (원안가결)
  2024-12-26  정부 이송
  2025-01-10  정부 이송 완료
  2025-01-21  공포

원문 링크: https://likms.assembly.go.kr/bill/billDetail.do?billId=PRC_R2V4H1W1T2K5M1O6E4Q9T0V7Q9S0U0

Scenario 3 — Check pending legislation in a committee

"과학기술정보방송통신위원회에 현재 계류 중인 법안은 몇 개야? AI·반도체 관련 법안만 따로 봐줘."

Claude calls:

  1. get_pending_bills(assembly="22", committee="과학기술정보방송통신위원회", page_size=100) → 12,505 bills

  2. get_pending_bills(assembly="22", committee="과학기술정보방송통신위원회", bill_name="인공지능") → 31 AI bills

Sample output (real data, 2026-03):

과기위 계류의안: 총 12,505건 (2026-03 기준)

AI·반도체 관련 (키워드 필터):
  인공지능 관련   31건
  반도체 관련      3건

인공지능 관련 최근 발의:
  인공지능 발전과 신뢰 기반 조성 등에 관한 기본법 일부개정법률안  이상휘   2026-02-12
  중소기업 인공지능 전환 지원에 관한 법률안                      김종민   2026-02-09
  국방인공지능법안                                              유용원·부승찬  2026-01-27

Scenario 4 — Check what's on the next plenary agenda

"다음 본회의에 상정될 법안 목록을 알려줘."

Claude calls:

  1. get_plenary_agenda(assembly="22", page_size=30) → upcoming agenda items

Sample output (real data, 2026-03):

본회의 부의안건 (22대, 조회일 기준 최신)

총 101건:
  1. [기후에너지환경노동위원회] 산업안전보건법 일부개정법률안(대안)  (2216964)
  2. [기후에너지환경노동위원회] 환경오염시설의 통합관리에 관한 법률 일부개정법률안(대안)  (2216963)
  3. [기후에너지환경노동위원회] 노동감독관 직무집행법안(대안)  (2216962)
  4. [기후에너지환경노동위원회] 산업재해보상보험법 일부개정법률안(대안)  (2216961)
  5. [기후에너지환경노동위원회] 근로기준법 일부개정법률안(대안)  (2216960)
  6. [정보위원회] 국가정보원직원법 일부개정법률안(대안)  (2216812)
  7. [기후위기 특별위원회] 기후위기 대응을 위한 탄소중립·녹색성장 기본법 일부개정법률안(대안)  (2216802)
  ...

Available Tools

All tools return total_count and has_more for transparent pagination.

Quick Reference

Core tools (dedicated to common legislative research workflows):

Tool

Key parameters

Returns

search_bills

assembly, bill_name, proposer, proc_result, committee, propose_dt_from/to

bills[], total_count, has_more

get_bill_detail

bill_no (BILL_NO)

bill{}

get_bill_review

assembly, bill_no, committee

reviews[], total_count, has_more

get_bill_proposers

bill_id (BILL_ID)

proposers[]

get_bill_committee_review

bill_id (BILL_ID)

meetings[]

get_member_info

assembly, name, party, district, committee

members[], total_count, has_more

get_committee_members

assembly, committee

members[], total_count, has_more

get_vote_results

assembly, bill_no, bill_name

votes[] with YES_TCNT, NO_TCNT, BLANK_TCNT, BILL_ID

get_member_votes

bill_id (BILL_ID), assembly, member_name, party, vote_result

votes[] with per-member RESULT_VOTE_MOD

get_pending_bills

assembly, bill_name, committee, proposer

bills[], total_count, has_more

get_plenary_agenda

assembly, session

agenda_items[], total_count, has_more

get_bill_summary

assembly, bill_no

detail{}, review{}, proposers[], committee_meetings[]

Chain & research tools (compound queries and computed metrics):

Tool

Key parameters

Returns

analyze_legislator

name, assembly

member{}, bills{total, by_result, by_committee, by_year, recent, all}

get_party_cohesion

bill_id (BILL_ID), assembly

by_party{} with per-party vote counts + dominant position, dissenters[]

API expansion tools (NARS, petitions, schedule, hearings — new in v0.6.0):

Tool

Key parameters

Returns

search_nars_reports

keyword, date_from, date_to, page, page_size

reports[], total_count, has_more

search_petitions

assembly, keyword, include_closed, page, page_size

petitions[], total_count, has_more

get_schedule

assembly, schedule_type (all/plenary/committee), committee, page, page_size

schedule[], total_count, has_more

search_hearings

assembly, hearing_type (confirmation/public), nominee_name, committee

hearings[], total_count, has_more

Universal access tools (reach any of the 276+ endpoints not yet covered above):

Tool

Key parameters

Returns

discover_apis

keyword (optional)

Verified endpoint registry, grouped by category

query_assembly

endpoint_code, params (dict), page, page_size

rows[], total_count, raw_response

discover_apis → find an endpoint code → query_assembly → call it directly.

BILL_ID vs BILL_NO — many tools need BILL_ID (the internal ID, starts with PRC_...), not BILL_NO (the public 7-digit number like 2216983). Both are returned by search_bills and get_pending_bills. Tools that need BILL_ID: get_bill_proposers, get_member_votes, get_bill_committee_review.

Universal Access: discover_apis + query_assembly

The 18 dedicated tools cover the most common legislative research workflows. For anything not yet wrapped — NABO budget analyses, press releases, or any of the 276+ total endpoints — use the two universal access tools.

Step 1: find the endpoint

"열린국회 API에서 청원 관련 엔드포인트를 찾아줘"

Claude calls discover_apis(keyword="청원") and returns matching codes with descriptions.

Step 2: call it

"22대 국회 청원 현황 조회해줘"

Claude calls query_assembly(endpoint_code="<code>", params={"AGE": "22"}).

For the full catalog of 276+ endpoints: https://open.assembly.go.kr/portal/data/service/selectAPIServicePage.do


Coverage by Assembly

Tool

Reliable range

Notes

search_bills

16th–22nd

Member-sponsored bills only (no government bills)

get_bill_detail

16th–22nd

get_bill_review

16th–22nd

get_member_info

16th–22nd

get_committee_members

16th–22nd

get_vote_results

19th–22nd recommended

Electronic vote records sparse before 19th Assembly

get_member_votes

18th–22nd recommended

Roll-call data from ~18th Assembly onward; default page_size=300 fetches all ~300 members in one call

get_bill_proposers

16th–22nd

get_pending_bills

22nd recommended

Bills not yet processed; ~8,900 in the 22nd Assembly

get_plenary_agenda

22nd recommended

Bills scheduled for the next plenary session

get_bill_committee_review

16th–22nd

Committee meetings for a specific bill

get_bill_summary

16th–22nd

Convenience — chains detail + review + proposers + committee meetings in one call

analyze_legislator

16th–22nd

Chain — member profile + all sponsored bills + career stats (by_result, by_year, by_committee)

get_party_cohesion

18th–22nd recommended

Research — per-party vote breakdown + dissenters; requires BILL_ID from get_vote_results

search_nars_reports

All

NARS research reports by keyword or date range

search_petitions

16th–22nd

Pending or all-time petitions; include_closed=True for closed petitions

get_schedule

All

Assembly schedule — all, plenary-only, or committee-specific

search_hearings

16th–22nd

Personnel confirmation hearings or public hearings

discover_apis

All

Searches the verified endpoint registry; use before query_assembly

query_assembly

All

Universal fallback — calls any of the 276+ endpoints directly

Not available via Open API: transcripts, citizen petitions, bill full text. For bill texts and transcripts, see Related Data Packages below. For official bill pages, use get_bill_detailLINK_URL.


This MCP server queries the 열린국회정보 API in real time. For data not available through the API, companion packages provide pre-collected datasets:

Package

Data

Scale

Install

kna

Master bill database, roll call votes, DW-NOMINATE ideal points, bill texts

110K bills, 2.4M votes (17th-22nd)

pip install kna

korean-assembly-bills

Bill propose-reason texts (제안이유), co-sponsor records, MP metadata

60,925 bills (20th-22nd)

pip install korean-assembly-bills

kr-hearings-data

Committee proceeding speeches, legislator-witness Q&A dyads

9.9M speeches, 7.9M dyads (16th-22nd)

pip install kr-hearings-data

minister-data

Cabinet minister panel with dual-office (겸직) coding

286 appointments (2000-2025)

CSV on GitHub

assemblykor

Curated teaching datasets (bills, votes, wealth, speeches)

R package, 7 datasets

remotes::install_github("kyusik-yang/assemblykor")

Quick rule: Use this MCP for real-time lookups and exploratory queries via Claude. Use kna for offline statistical analysis and reproducible research in Python/R.

You need...

Use

Real-time bill metadata, vote tallies, member roster

This MCP (live API)

Pending bills, plenary agenda (time-sensitive)

This MCP (live API)

Offline master database, roll calls, DW-NOMINATE ideal points

kna

Bill propose-reason text (제안이유)

korean-assembly-bills

Committee hearing transcripts, speech-level data

kr-hearings-data

Legislator-witness Q&A pairs for oversight research

kr-hearings-data dyads

Cabinet minister dual-office status

minister-data

Teaching quantitative methods with Korean politics data

assemblykor (R)


Updating

uvx caches packages locally. If you installed a previous version, force a reinstall to get the latest:

uvx --reinstall open-assembly-mcp --setup

To update the server used by Claude Desktop, edit your config and change the args line to pin the new version, or leave it as open-assembly-mcp@latest to always pull the latest on startup.


Troubleshooting

uvx: command not found You haven't installed uv yet, or the new PATH hasn't been picked up. Run the install command in the Before any setup section, then open a fresh terminal (or source ~/.zshrc / source ~/.bashrc).

Claude Desktop doesn't show the Assembly tools

  1. Check the config file path is correct: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).

  2. Make sure the JSON has a top-level mcpServers key (not nested under preferences).

  3. Fully quit Claude Desktop (⌘Q on macOS) and reopen. A normal window close does not reload MCP servers.

  4. View the Claude Desktop log to see launch errors: ~/Library/Logs/Claude/ on macOS.

401 Unauthorized or empty results on every call Your ASSEMBLY_API_KEY is missing or wrong. Verify by running uvx open-assembly-mcp --setup again — it validates the key against the live API before writing the config.

Claude Code: claude mcp list doesn't show open-assembly You probably added it under a different scope. Re-run claude mcp add with --scope user so it's available across projects, or cd into the project where you used the default local scope.

Stale cached version uvx caches packages by name. Force a refresh with uvx --reinstall open-assembly-mcp@latest --setup.


Why this exists

The Korean National Assembly's 열린국회정보 API provides rich legislative data — every member-sponsored bill since 2000, full member rosters, plenary vote tallies, committee review timelines, and co-sponsor networks. The data is invaluable for political science research, but the traditional retrieval workflow is slow:

Traditional: search site manually → copy data → clean → load into Python/R
             → hours of overhead per research question

With MCP:    ask Claude in one sentence → tools chain automatically → results in seconds

Concrete research use cases:

Task

Tools used

Co-sponsorship network for a policy domain

search_bills + get_bill_proposers

Party-line discipline on a specific vote

get_vote_results + get_party_cohesion

Per-party vote breakdown + dissenters

get_party_cohesionby_party[party] + dissenters[]

Cross-party voting coalitions

get_vote_results + get_member_votes

Full legislative career of a single member

analyze_legislator (one call)

Legislator activity by year or committee

analyze_legislatorbills.by_year, bills.by_committee

Committee composition by party

get_committee_members

Bill timeline from filing to promulgation

get_bill_summary or get_bill_review + get_bill_committee_review + get_bill_detail

Currently active legislation in a policy area

get_pending_bills (committee/keyword filter)

Upcoming plenary votes

get_plenary_agenda

Majority-building analysis for a passed bill

get_bill_proposers + get_member_votes

Confirmation hearing list by nominee or committee

search_hearings (hearing_type="confirmation")

NARS research reports on a policy topic

search_nars_reports (keyword)

Petitions received in a given assembly

search_petitions (assembly, include_closed)

Bill propose-reason text analysis

search_bills (this MCP) + korean-assembly-bills for texts

Committee oversight speech patterns

kr-hearings-data speeches

Confirmation hearing Q&A transcripts

kr-hearings-data with hearing_type filter


Research-first design

The only other MCP server for 열린국회 API is hollobit/assembly-api-mcp (TypeScript, MIT). That project offers a clean universal query interface — call any of the 276+ endpoints by code, get back raw rows. This project extends that model with domain-specific tools built around the actual structure of legislative research.

hollobit/assembly-api-mcp

open-assembly-mcp

Language

TypeScript

Python

Dedicated tools

None (universal query only)

14 dedicated + 4 expansion + 2 universal

Research metrics

None

Party cohesion, career stats built-in

Party cohesion

Manual aggregation from raw rows

get_party_cohesion — one call

Legislator profile

Multi-step manual

analyze_legislator — one call, 500-bill auto-pagination

Bill timeline

Manual chaining

get_bill_summary — parallel sub-calls

Historical accuracy

Current assembly only

ALLNAMEMBER — correct party/district per assembly

BILL_ID vs BILL_NO

Not distinguished

Explicit in all relevant tools

Test coverage

None

106 pytest

What this means in practice

get_party_cohesion takes a BILL_ID and returns the full picture for that vote: per-party yes/no/abstain counts, dominant position, and a named list of individual dissenters with their vote type (opposite or abstain). The output is structured for immediate use — no post-processing needed.

analyze_legislator returns a complete legislative career in one call: member metadata (party, district, committee), all sponsored bills up to 500 (auto-paginated), and activity breakdowns by processing result, committee, and year. The by_year and by_committee fields eliminate several manual joins when constructing legislator activity panels.

get_bill_summary runs four sub-calls concurrently (bill detail, review timeline, co-sponsors, committee meetings) and returns them as a single structured response. Partial failures are isolated in errors{} rather than crashing the whole response — useful when some endpoints return empty data for older assemblies.

get_member_info with ALLNAMEMBER returns party, district, and committee assignment as of the requested assembly, not the current one. This matters for panel data across multiple assemblies: a member who switched parties or changed districts will show correct affiliation for each period separately.

The universal-access pair (discover_apis + query_assembly) was directly inspired by hollobit's design and covers the remaining 250+ endpoints not yet wrapped in dedicated tools. See CREDITS.md.


Local Development

git clone https://github.com/kyusik-yang/open-assembly-mcp.git
cd open-assembly-mcp

cp .env.example .env        # add ASSEMBLY_API_KEY=your-key

uv sync --group dev
uv run pytest tests/ -v
# Run the server locally
ASSEMBLY_API_KEY=your-key uv run python -m data_go_mcp.open_assembly.server

Acknowledgments

discover_apis, query_assembly, the endpoint registry structure, and the raw-fallback design are adapted from hollobit/assembly-api-mcp (MIT License), with explicit permission from the author. All implementation is original Python. See CREDITS.md for a detailed breakdown.

The server architecture and packaging conventions follow Koomook/data-go-mcp-servers (Apache 2.0).


Changelog

v0.6.0 (2026-04)

  • Added search_nars_reports: search 국회입법조사처 research reports by keyword or date range

  • Added search_petitions: query pending or all-time petitions by assembly and keyword; automatically routes to the correct endpoint (include_closed toggle)

  • Added get_schedule: unified schedule lookup — all, plenary-only, or committee-specific; schedule_type parameter is case-insensitive

  • Added search_hearings: personnel confirmation hearings and public hearings; hearing_type routes to the correct endpoint

  • All four new tools return has_more pagination flag and raw_response fallback for non-standard API formats

  • Expanded registry from 11 to 28 entries (NARS×1, petitions×5, schedule×3, hearings×2, meeting records×2, committees×2, bills×2 new; total includes 9 bills + 2 members + 2 votes carried over)

  • Test suite: 80 → 106 tests

v0.5.0 (2026-04)

  • Added analyze_legislator chain tool: one-shot legislator profile — member info + all sponsored bills (up to 500, paginated) + career statistics (by_result, by_committee, by_year, recent 5)

  • Added get_party_cohesion research tool: per-party vote aggregation, dominant position, individual dissenters (type: opposite / abstain); handles all-abstain edge case gracefully

  • Both new tools handle parallel sub-calls, ambiguous member names, pagination, and graceful error isolation

v0.4.0 (2026-04)

  • Added discover_apis tool: keyword search across the verified endpoint registry

  • Added query_assembly tool: universal fallback to call any of the 276+ open.assembly.go.kr endpoints directly; handles both standard (head/row) and non-standard response formats

  • Added registry.py with 11 verified endpoint entries organized by category

  • Added CREDITS.md with detailed attribution for hollobit/assembly-api-mcp patterns

  • Bumped description and keywords to reflect expanded API coverage

v0.3.1 (2026-03)

  • Added "Related Data Packages" section to README with cross-references to korean-assembly-bills, kr-hearings-data, minister-data, assemblykor

  • Updated tool docstrings (get_bill_detail, search_bills) to guide users to companion packages for bill texts and committee transcripts

  • Expanded research use cases table with companion package workflows

v0.3.0 (2026-03)

  • Breaking: renamed age parameter to assembly across all tools for clarity

  • Added client-side date filtering to search_bills (propose_dt_from/propose_dt_to)

  • Fixed get_member_info to use ALLNAMEMBER endpoint for correct per-assembly data (party, district, committee)

  • Fixed _parse_response to handle alternate INFO-200 response format

  • Removed broken date filter params from API calls (API ignores them)

v0.2.7 (2026-03)

  • Replaced all placeholder examples ("홍길동", "김OO", etc.) in README with real API query results

  • Updated scenario outputs with verified live data: 인공지능기본법 journey, 법원조직법 party-line vote, 이준석 profile, 과기위 pending bills, plenary agenda

v0.2.6 (2026-03)

  • Added get_bill_summary convenience tool: chains detail + review + proposers + committee meetings in one parallel call

  • Rewrote all 12 tool docstrings with When-to-use, workflow hints, and BILL_ID vs BILL_NO disambiguation

  • Added explicit TimeoutException handling in API client (descriptive error message)

  • Added test_client.py coverage for 3 new endpoints + timeout handling (36 → 46 tests)

v0.2.5 (2026-03)

  • Added 3 new tools: get_pending_bills (계류의안), get_plenary_agenda (본회의부의안건), get_bill_committee_review (위원회 심사 회의정보)

  • Fixed get_member_votes default page_size 50 → 300 (covers full ~300-member plenary in one call)

  • Improved docstrings: corrected get_vote_results description, added pagination tips to all tools

v0.2.4 (2026-03)

  • --setup wizard: ASCII art banner with teal-to-blue gradient, animated validation, polished bilingual prompts

v0.2.3 (2026-03)

  • --setup wizard: ANSI colors, box-drawing header, professional bilingual prompts

v0.2.2 (2026-03)

  • --setup wizard: bilingual prompts (EN/KR), academic contact info

v0.2.1 (2026-03)

  • Added --setup wizard: interactive installer that auto-configures Claude Desktop

v0.2.0 (2026-03)

  • Added get_member_votes — per-member roll-call records for any bill

  • All tools now return total_count and has_more for transparent pagination

  • Added propose_dt_from / propose_dt_to date filter to search_bills

  • Extended coverage to 16th and 17th Assemblies

v0.1.0 (2026-02)

  • Initial release


License

Apache 2.0. See LICENSE.

This project was built following the architecture of Koomook/data-go-mcp-servers. The server structure, packaging conventions, and API client pattern are adapted from that project under the Apache 2.0 license.

Not affiliated with or endorsed by the Korean National Assembly or open.assembly.go.kr.


Built with Claude Code — because the best way to make an AI tool for querying a legislature is to have an AI write it.

Available Tools

20 tools
analyze_legislatorA

국회의원 종합 프로필을 한 번에 조회합니다 (체인 도구).

One-shot legislator profile: member info + all sponsored bills + career statistics. Internally chains get_member_info and search_bills.

When to use: • When you need a complete picture of one legislator's activity in one call. • Instead of calling get_member_info + search_bills(proposer=name) separately.

Note: Fetches up to 500 sponsored bills (5 pages of 100). For very prolific legislators total_count will be correct, but all[] may be truncated at 500.

Args: name: 의원 한글명 — 필수 (예: "이준석", "홍길동") If multiple members share the name, the first result is used and all matches are listed in member_all_matches. assembly: 대수 (기본값: "22", "16"-"22" 지원)

Returns: member: 의원 정보 dict (정당, 선거구, 위원회, 사진 등) member_all_matches: 동명이인이 있을 때 전체 목록 bills: - total: 전체 발의 건수 (API 기준) - retrieved: 실제 가져온 건수 (최대 500) - by_result: 처리결과별 건수 {원안가결: N, 계류: N, ...} - by_committee: 소관위원회별 건수 - by_year: 발의 연도별 건수 - recent: 최근 발의 5건 - all: 전체 발의 법안 목록 (최대 500건) errors: 서브 호출별 에러 (없으면 빈 dict) message: 요약 메시지

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
assemblyNo22

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses internal chaining, truncation at 500 bills, and handling of name ambiguity (first result, all matches). It does not explicitly state read-only behavior, but the composite nature and 'analyze' verb imply no side effects.

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?

The description is well-structured with labeled sections (When to use, Note, Args, Returns). It is longer than minimal but each sentence adds value; no filler.

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

Completeness5/5

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

Given the tool complexity (chaining two tools, multiple return fields), the description covers all important aspects: usage, return structure with examples, error handling, and limitations. The output schema exists, but description still adds clarity on specific fields.

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

Parameters4/5

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

Despite context showing 0% schema coverage, the description provides detailed parameter guidance: name is required with Korean examples, assembly has default '22' and supported range. This adds meaning beyond the schema's basic title.

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 description clearly states it is a one-shot legislator profile that chains get_member_info and search_bills, providing a complete picture. It distinguishes from sibling tools by naming the chained tools and explicitly positioning itself as an alternative to separate calls.

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

Usage Guidelines5/5

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

Explicitly states when to use (needing complete picture in one call) and when not to (instead of separate calls). Also includes a note about the 500-bill limit, helping the agent set expectations.

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

discover_apisA

열린국회정보 Open API 엔드포인트를 검색합니다.

Search the registry of verified Korean National Assembly API endpoints. Use this to find the endpoint code you need before calling query_assembly.

Typical workflow:

  1. discover_apis(keyword="청원") → find petition endpoint codes

  2. query_assembly(endpoint_code="", params={"AGE": "22"}) → call it

When to use: • To explore what API endpoints are available beyond the 12 dedicated tools. • To find the endpoint code for a specific data type (schedule, petitions, etc.). • Without a keyword to see all verified endpoints organized by category.

Note: This registry covers the verified subset of the 276+ endpoints available at open.assembly.go.kr. If your endpoint is not here, visit the API portal directly: https://open.assembly.go.kr/portal/data/service/selectAPIServicePage.do

Args: keyword: 검색어 (선택, 예: "청원", "일정", "petition", "vote"). Matches against Korean name, English name, category, tool name, and notes. If omitted, returns all verified endpoints grouped by category.

Returns: endpoints: List of matching endpoints with code, names, key_params, and notes by_category: Same endpoints grouped by category (bills, members, votes, ...) count: Number of matching endpoints note: Link to the full API catalog

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It discloses that the registry covers a verified subset of 276+ endpoints, explains matching criteria (Korean/English name, category, etc.), and notes the return format (endpoints grouped by category).

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?

The description is well-structured with Korean and English sections, workflow steps, when-to-use, args, and returns. It is slightly longer than necessary but every sentence adds value.

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

Completeness5/5

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

Given the low complexity (1 optional param) and presence of an output schema, the description fully covers purpose, usage, parameter semantics, and limitations (verified subset, link to full catalog). No gaps.

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 has 0% description coverage, so description must compensate. It explains that keyword matches against multiple fields and that omitting it returns all endpoints grouped by category, adding meaning beyond the simple string/null type.

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 description clearly states it searches the registry of verified Korean National Assembly API endpoints to find endpoint codes before calling query_assembly. It differentiates from sibling tools by specifying its role in the workflow (discover before query).

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

Usage Guidelines5/5

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

Explicitly describes when to use: to explore available endpoints, find a specific endpoint code, or see all endpoints by category. Also includes a fallback instruction if the endpoint is not found in the registry.

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

get_bill_committee_reviewA

특정 의안의 위원회 심사 회의정보를 조회합니다.

Get the individual committee meeting records at which a specific bill was reviewed. Returns one row per committee meeting, with date and result for each session.

NOT this tool: • For the HIGH-LEVEL processing timeline (committee referral date, plenary vote date) → use get_bill_review (which takes BILL_NO, not BILL_ID)

When to use: • To see exactly when and how many times a bill was discussed in committee. • Combined with get_bill_review for a complete legislative timeline.

IMPORTANT — requires BILL_ID, not BILL_NO: • BILL_ID looks like "PRC_..." — get it from search_bills, get_pending_bills, get_vote_results, or get_bill_review • BILL_NO is the 7-digit public number — WRONG for this tool

Args: bill_id: 의안ID — 필수 (예: "PRC_T2M6W0F2I1W2T1X7T4K2Q5A9J4P2M5")

Returns: meetings: 위원회 심사 회의 목록 — BILL_ID, BILL_NM, CMIT_NM(위원회), MTG_DT(회의일), SESS_NO(회기), PROC_RESULT(결과) 등 count: 반환된 회의 수 total_count: 전체 건수

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, so description carries burden. It's a read operation implied by 'get' and description, and it details return fields. Lacks explicit safety info but sufficient for a read-only tool.

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?

Structured with sections, bilingual, clear. Slightly verbose due to bilingualism but front-loaded with purpose. Efficient overall.

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

Completeness5/5

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

Given output schema exists, description adequately explains return fields and usage context. Provides complete guidance for a single-parameter tool with no gaps.

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 coverage 0% but description includes an 'Args' section explaining bill_id in detail, with format example and critical distinction from BILL_NO. Adds significant value beyond schema.

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?

Clearly states it retrieves committee meeting records for a specific bill. Distinguishes from sibling get_bill_review by specifying it returns individual meeting records rather than high-level timeline.

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

Usage Guidelines5/5

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

Explicitly says when to use (to see committee discussions) and when not (for high-level timeline, use get_bill_review). Also warns about BILL_ID vs BILL_NO, providing alternatives.

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

get_bill_detailA

의안 상세정보를 조회합니다 (의안정보 통합 API).

Get comprehensive bill metadata: processing dates, committee referral, promulgation info, and a link to the official bill page.

When to use: • After search_bills, to get the full metadata for a specific bill. • To get LINK_URL for the official bill text/rationale (not available via API).

Not this tool: • For the committee/plenary processing TIMELINE → use get_bill_review • For CO-SPONSORS → use get_bill_proposers (requires BILL_ID, not BILL_NO)

Bill full text / propose-reason (제안이유): The Open API does not return bill texts. Use the korean-assembly-bills package (pip install korean-assembly-bills) for 60,925 bill texts (20th-22nd Assembly).

Args: bill_no: 의안번호 (예: "2217175") — 필수. search_bills 또는 get_pending_bills 결과의 BILL_NO 필드 사용. BILL_ID(PRC_...) 가 아닌 BILL_NO(숫자 7자리)를 사용해야 합니다.

Returns: bill: 의안 상세정보 — BILL_NO, BILL_NM, BILL_KND, PPSR_NM, PPSL_DT, 위원회 심사일정, 본회의 처리일정, 공포 정보, LINK_URL 등

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_noYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior3/5

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

No annotations provided, so the description carries full burden. It does not disclose any behavioral traits like mutability, permissions, or rate limits. However, it clarifies the input parameter expectations (BILL_NO vs BILL_ID) and mentions the return of LINK_URL, which adds some transparency.

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?

The description is well-structured with clear sections (Korean/English, when to use, not this tool, args, returns). It is informative without being overly verbose, though slightly on the longer side.

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

Completeness5/5

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

Given the tool's complexity (one parameter, output schema present), the description covers all necessary aspects: input parameter details, usage guidance, alternative tools, and limitations (bill text not available). It is fully self-contained.

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 coverage is 0%, but the description provides rich context: explains what bill_no is (의안번호), gives an example, states it's required, clarifies it must be the 7-digit BILL_NO from other tools, not BILL_ID. This fully compensates for the bare schema.

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 description clearly states the tool retrieves comprehensive bill metadata including processing dates, committee referral, promulgation info, and a link to the official bill page. It differentiates from siblings by specifying what it does and does not do.

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

Usage Guidelines5/5

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

Explicitly states when to use (after search_bills) and when not to use (for timeline use get_bill_review, for co-sponsors use get_bill_proposers). Also addresses missing functionality (bill full text) and suggests an alternative.

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

get_bill_proposersA

의안 제안자(공동발의자) 정보를 조회합니다.

Get the complete list of proposers (lead + all co-sponsors) for a bill. Returns name, party, and role for each proposer.

When to use: • After search_bills, to find who co-sponsored a bill and from which parties. • For co-sponsorship network analysis across multiple bills.

IMPORTANT — requires BILL_ID, not BILL_NO: • BILL_ID looks like "PRC_Y2Z6X0..." — get it from search_bills or get_pending_bills • BILL_NO is the 7-digit number (e.g., "2216983") — WRONG for this tool

Args: bill_id: 의안ID — 필수 (예: "PRC_Y2Z6X0Y2W1X9V1W1D4E4D3B7B8Z1A1") search_bills / get_pending_bills 결과의 BILL_ID 필드 사용.

Returns: proposers: 제안자 목록 — PPSR_NM(이름), PPSR_POLY_NM(정당), REP_DIV(대표/공동발의 구분), PPSR_ROLE(역할), PPSL_DT(발의일) 등 count: 제안자 수 total_count: 전체 제안자 수

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the tool returns proposer details (name, party, role) and the required bill_id format. Although it doesn't explicitly state it's read-only, the purpose implies no side effects. A score of 4 is appropriate as it adds sufficient context beyond what annotations would provide.

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

Conciseness5/5

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

Description is well-structured with clear sections: Korean/English purpose, when to use, important note, args, returns. Front-loaded with core purpose. Every sentence adds value; no wasted words.

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

Completeness5/5

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

With only one parameter and an output schema present, the description fully covers input requirements (bill_id) and output structure (proposers list with fields, count, total_count). Provides usage context and examples. Complete for this tool's complexity.

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 description must compensate. It provides a detailed explanation of the bill_id parameter: format example, distinction from bill_no, and where to obtain it (from search_bills or get_pending_bills). This adds significant meaningful context beyond the schema.

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 description clearly states the verb ('Get') and resource ('complete list of proposers for a bill'). It distinguishes from sibling tools by specifying that it returns proposer details including name, party, and role.

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

Usage Guidelines5/5

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

Explicit 'When to use' section provides two specific scenarios: after search_bills and for co-sponsorship network analysis. Also clearly warns about the BILL_ID vs BILL_NO distinction, telling agents when not to use this tool.

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

get_bill_reviewA

의안 처리·심사정보를 조회합니다 — 위원회 및 본회의 처리 경로 요약.

Get the high-level processing timeline for bills: committee referral date, committee decision, plenary vote date, and final outcome.

NOT this tool: • For INDIVIDUAL COMMITTEE MEETING records (dates, agenda) → use get_bill_committee_review • For FULL BILL METADATA (proposer, LINK_URL, etc.) → use get_bill_detail • For PER-MEMBER VOTE records → use get_member_votes

When to use: • To see the overall legislative timeline for one or more bills. • To filter bills by committee and see their processing status.

Args: assembly: 대수 (예: "22") — 필수 bill_no: 의안번호로 필터 (선택, 예: "2216983") — BILL_NO(숫자), BILL_ID 아님 committee: 위원회명으로 필터 (선택, 예: "법제사법위원회") page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10)

Returns: reviews: 심사정보 목록 — BILL_ID, BILL_NO, BILL_NM, COMMITTEE_NM, 위원회 상정일/의결일, 본회의 상정일/의결일, PROC_RESULT_CD(처리결과), YES_TCNT, NO_TCNT, BLANK_TCNT, LAW_PROC_DT(공포일) 등 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
bill_noNo
assemblyYes
committeeNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses pagination behavior (has_more flag with instruction to call page+1) and lists return fields including processing result codes. However, it does not mention error handling, rate limits, or authentication needs. Despite these omissions, the core behavioral aspects are adequately covered for a read-only query tool.

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?

The description is well-structured with clear sections (Korean/English summary, NOT lists, when to use, args, returns). It is slightly verbose but each sentence contributes value. Front-loading the purpose and use cases helps quick scanning.

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

Completeness5/5

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

Given the tool has 5 parameters (1 required), no enums, and an output schema exists (though not shown), the description provides a thorough overview. It covers purpose, parameter semantics, return fields, pagination, and sibling differentiation, making it fully informative for correct selection and invocation.

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?

With 0% schema description coverage, the description compensates fully by explaining each parameter's purpose, type, and constraints. It clarifies that bill_no is a numeric BILL_NO (not BILL_ID), provides examples for assembly and committee, and distinguishes optional from required fields. This adds substantial meaning beyond the raw schema.

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 description clearly states the tool's purpose: retrieving bill processing timeline information. It uses both Korean and English summaries ('의안 처리·심사정보를 조회합니다', 'Get the high-level processing timeline') and explicitly distinguishes itself from sibling tools with a 'NOT this tool' section listing alternatives like get_bill_committee_review, get_bill_detail, and get_member_votes.

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

Usage Guidelines5/5

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

The tool description provides explicit guidance on when to use it ('To see the overall legislative timeline', 'To filter bills by committee') and when not to use it, with direct references to sibling tools for specific use cases. This enables the AI to select the correct tool based on the task.

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

get_bill_summaryA

단일 의안의 핵심 정보를 한 번에 조회합니다 (편의 도구).

One-shot summary of a single bill: metadata + processing timeline + co-sponsors + committee meeting history. Chains multiple API calls internally.

When to use: • When you need a comprehensive view of ONE specific bill in a single call. • Instead of calling get_bill_detail + get_bill_review + get_bill_proposers separately.

Note: This tool makes up to 3 parallel API calls. If any sub-call fails, that section will be missing from the result with an error note.

Args: assembly: 대수 (예: "22") — 필수 bill_no: 의안번호 (예: "2216983") — 필수. search_bills / get_pending_bills 결과의 BILL_NO(숫자) 필드 사용.

Returns: bill_no: 의안번호 detail: get_bill_detail 결과 (BILL_NM, PPSR_NM, PPSL_DT, LINK_URL 등) review: get_bill_review 결과 (위원회/본회의 처리 타임라인, BILL_ID 포함) proposers: get_bill_proposers 결과 (공동발의자 목록) committee_meetings: get_bill_committee_review 결과 (위원회 심사 회의 목록) errors: 각 서브 호출의 에러 (정상이면 빈 dict)

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_noYes
assemblyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided, so the description fully discloses internal behavior: it chains multiple API calls (up to 3 parallel), describes failure behavior (missing sections with error notes), and details the return structure including an errors field. This provides clear transparency beyond what any annotations would cover.

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?

The description is well-structured with sections for purpose, usage, note, args, and returns. It is front-loaded with key information. While a bit lengthy, every sentence adds value given the tool's complexity (aggregating multiple APIs). Minor room for tightening.

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

Completeness5/5

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

Despite having an output schema, the description provides a detailed return structure with example fields for each section. It covers failure scenarios, parameter sourcing, and sufficient context for an agent to determine when and how to use this tool compared to its many siblings.

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?

Input schema has 0% description coverage, but the description compensates fully by providing examples (e.g., assembly: '22', bill_no: '2216983') and guidance to use the BILL_NO field from search_bills/get_pending_bills results. This adds critical context that the schema alone lacks.

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 description clearly states it is a one-shot summary of a single bill, combining metadata, processing timeline, co-sponsors, and committee meeting history. It distinguishes from sibling tools by explicitly listing the alternatives it replaces (get_bill_detail, get_bill_review, get_bill_proposers).

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

Usage Guidelines5/5

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

The description has a dedicated 'When to use' section, explicitly stating to use for a comprehensive view of one bill and not to call the individual tools separately. It also notes that up to 3 parallel API calls are made and that sections may be missing if sub-calls fail.

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

get_committee_membersA

위원회 위원 명단을 조회합니다.

Get the roster of a National Assembly committee, including party breakdown.

When to use: • To list all members of a specific committee. • For party composition analysis of a committee. • More direct than get_member_info(committee=...) for committee rosters.

Args: assembly: 대수 (기본값: "22", "16"–"22" 지원) committee: 위원회명 (선택, 예: "법제사법위원회", "과학기술정보방송통신위원회") None이면 전체 의원 조회 (get_member_info와 동일) page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 50 — 위원회 평균 규모)

Returns: members: 위원 목록 — HG_NM(이름), POLY_NM(정당), ORIG_NM(선거구), CMIT_NM(위원회), REELE_GBN_NM(선수), SEX_GBN_NM(성별) 등 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
assemblyNo22
committeeNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description fully covers behavior: it is a read operation returning member details with pagination (page, page_size, has_more). It does not mention side effects, rate limits, or authorization, but for a read-only tool, the transparency is adequate.

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?

The description is well-structured with a summary, usage guidelines, arguments, and returns. It is front-loaded with the purpose, but includes both Korean and English text, making it slightly longer than necessary. Removing redundancy would improve conciseness.

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?

Given the presence of an output schema, the description adequately covers pagination and return fields. It differentiates from siblings like 'get_member_info' and 'get_bill_committee_review'. Missing details about error handling or edge cases are minor given the simple read operation.

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?

With 0% schema description coverage, the description compensates thoroughly: it explains each parameter with default values, ranges, examples ('법제사법위원회'), and special behavior (None for committee returns all members). This adds substantial value beyond the bare schema.

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 description explicitly states the tool retrieves the roster of a National Assembly committee with party breakdown, using a specific verb ('Get') and resource ('committee roster'). It clearly distinguishes from 'get_member_info' by noting this is more direct for committee rosters.

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?

The 'When to use' section provides three clear scenarios: listing members, party composition analysis, and as a more direct alternative to 'get_member_info'. However, it does not explicitly state when not to use or list alternatives for other use cases, leaving some ambiguity.

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

get_member_infoA

국회의원 정보를 조회합니다.

Query National Assembly member information: party, district, committee, contact, photo. Uses the ALLNAMEMBER endpoint to provide correct per-assembly data for all assemblies (16th-22nd). Party and district reflect each MP's actual affiliation during that assembly.

When to use:

  • To look up a member's party, district, or committee affiliation.

  • To list all members of a party (use party filter, page through results).

  • To verify the exact name spelling before using as a filter in search_bills.

For committee rosters specifically, get_committee_members is more direct.

Args: assembly: 대수 (기본값: "22", "16"-"22" 지원) name: 의원 한글명 (선택, 예: "홍길동") party: 정당명 (선택, 예: "더불어민주당", "국민의힘") district: 선거구명 (선택, 예: "서울 강남갑", "비례대표") committee: 소속위원회명 (선택, 예: "법제사법위원회") page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10)

Returns: members: 의원 목록 -- HG_NM(이름), POLY_NM(정당), ORIG_NM(선거구), CMIT_NM(위원회), REELE_GBN_NM(선수), SEX_GBN_NM(성별), E_MAIL, HOMEPAGE, NAAS_PIC(사진URL) 등 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pageNo
partyNo
assemblyNo22
districtNo
committeeNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavior: endpoint used, data accuracy (party/district reflect actual assembly affiliation), pagination details (page, page_size, has_more), and return fields. No behavioral traits are hidden.

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?

Well-structured with a brief intro, when-to-use section, and args list. Every sentence adds value. Slightly verbose due to bilingual description (Korean then English), but overall efficient and front-loaded. Could be slightly more concise by merging the bilingual intro.

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

Completeness5/5

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

Given 7 parameters, no annotations, and presence of output schema, the description is highly complete. It covers all parameters, return fields explicitly listed (members with field names, count, total_count, has_more), and pagination explained. No gaps remain.

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 coverage is 0%, so description carries full burden. It provides detailed parameter descriptions with Korean labels, example values, default values, and acceptable range for assembly. Each parameter is explained clearly, going well beyond the schema.

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 description clearly states it queries National Assembly member information including party, district, committee, contact, photo. It specifies the exact data sources and distinguishes itself from sibling tools by noting it uses the ALLNAMEMBER endpoint for correct per-assembly data across all assemblies (16th-22nd).

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

Usage Guidelines5/5

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

Provides explicit guidance on when to use: look up member affiliations, list party members, verify name spelling. Also includes a specific exclusion: for committee rosters, use get_committee_members instead. This helps the agent choose between tools.

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

get_member_votesA

특정 법안에 대한 국회의원 개인별 본회의 표결 기록을 조회합니다.

Get individual member voting records for a specific bill (one row per member). This is STEP 2 of the per-member vote analysis workflow.

Typical workflow:

  1. get_vote_results(assembly=assembly, bill_name=...) → find BILL_ID

  2. get_member_votes(bill_id=BILL_ID, assembly=assembly) → all ~300 member votes

  3. Filter by party="더불어민주당" etc. to analyze party discipline

IMPORTANT — requires BILL_ID, not BILL_NO: • BILL_ID looks like "PRC_T2M6W0F2..." — get it from get_vote_results • BILL_NO is the 7-digit number — WRONG for this tool

Note on default page_size=300: Intentionally large to fetch all ~300 plenary members in a single call. If the API returns fewer than 300 results but has_more=False, all votes are retrieved.

Args: bill_id: 의안ID — 필수 (get_vote_results 결과의 BILL_ID 필드) assembly: 대수 — 필수 (예: "22") member_name: 의원명 필터 (선택, 예: "홍길동") — 특정 의원 표결만 조회할 때 사용 party: 정당명 필터 (선택, 예: "더불어민주당") — 정당 기율 분석에 사용 vote_result: 표결결과 필터 (선택) — "찬성" | "반대" | "기권" page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 300 — 본회의 전체 의원 한 번에 조회)

Returns: votes: 의원별 표결 목록 — HG_NM(이름), POLY_NM(정당), ORIG_NM(선거구), RESULT_VOTE_MOD(표결결과: 찬성/반대/기권), VOTE_DATE, MONA_CD 등 count: 이번 페이지 반환 건수 total_count: 전체 표결 의원 수 has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
partyNo
bill_idYes
assemblyYes
page_sizeNo
member_nameNo
vote_resultNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: default page_size=300 intended to fetch all ~300 members, pagination explanation (has_more), and response field names. It also clarifies that if has_more=False and count<300, all votes are retrieved.

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?

The description is well-organized with sections, but it is somewhat lengthy. However, every sentence is purposeful and adds value. It is front-loaded with the core purpose and key workflow.

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?

The description is thorough given the tool's complexity (7 params, pagination, multiple filters) and the presence of an output schema (though not shown). It covers parameter usage, workflow integration, return fields, and pagination. Slightly verbose but complete.

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?

Although the input schema has 0% coverage (no descriptions), the tool description provides detailed explanations for all 7 parameters, including examples, default values, valid values, and notes on field formats. This fully compensates for the missing schema descriptions.

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 description clearly states the tool retrieves individual member voting records for a specific bill (one row per member). It distinguishes itself from sibling tools like get_vote_results and get_party_cohesion by specifying its role as step 2 in a per-member vote analysis workflow.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance via a 3-step workflow, warns about the common BILL_ID vs BILL_NO mistake, and explains when to use each filter (e.g., party for discipline analysis). This is comprehensive and leaves no ambiguity.

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

get_party_cohesionA

특정 법안에 대한 정당별 표결 응집도를 분석합니다 (연구 전용 도구).

Compute per-party voting cohesion for a bill:

  • yes/no/abstain counts per party

  • Rice index: |찬성 - 반대| / (찬성 + 반대) — 0 = perfect split, 1 = unanimous

  • dominant position per party (찬성 or 반대)

  • individual dissenters (voted against or abstained from party majority)

Rice index excludes 기권 from the denominator (standard political science convention). 기권 voters appear in dissenters["abstained"] when their party had a clear position.

Typical workflow:

  1. get_vote_results(assembly=assembly, bill_name=...) → find BILL_ID

  2. get_party_cohesion(bill_id=BILL_ID, assembly=assembly) → cohesion analysis

IMPORTANT — requires BILL_ID (PRC_...), not BILL_NO: • Get BILL_ID from get_vote_results, search_bills, or get_pending_bills.

Args: bill_id: 의안ID — 필수 (PRC_... 형식, 예: "PRC_H2W6O0K2D1T1Y2B0...") assembly: 대수 — 필수 (예: "22")

Returns: bill_id: 입력된 의안ID total_voted: 총 표결 의원 수 (찬성 + 반대 + 기권) overall: {"yes": N, "no": N, "abstain": N} by_party: 정당별 집계 (총 투표수 내림차순 정렬) Each party: {yes, no, abstain, total_voted, rice_index, dominant_position, unanimous} dissenters: 당론 이탈 의원 목록 Each dissenter: {name, party, district, vote, party_dominant, type} type: "opposite" (당론 반대방향 투표) | "abstain" (당론 있는데 기권) errors: 에러 (없으면 빈 dict) message: 요약 메시지

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes
assemblyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description bears the full burden. It explains the Rice index calculation (excluding abstentions from denominator), handling of abstainers, and that it is a research-only tool. However, it doesn't mention idempotency or side effects, but for a read-only analysis tool this is sufficient.

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?

The description is well-structured with sections for purpose, algorithm, workflow, args, and returns. While slightly long, every part adds value. Could be slightly more concise by merging some lines, but overall efficient.

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

Completeness5/5

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

Given the complexity (multiple metrics, dissenters, error handling) and the presence of an output schema, the description completely covers input, output, algorithm, and usage workflow. No gaps remain for an agent to invoke correctly.

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 coverage is 0%, so the description must compensate. It fully explains bill_id (required, PRC_... format with example) and assembly (required, example '22'), adding format and context beyond the schema.

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 description clearly states it computes per-party voting cohesion for a bill, with specific metrics like Rice index, dominant position, and dissenters. It distinguishes itself from sibling tools like get_vote_results and get_member_votes by focusing on aggregate party analysis.

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

Usage Guidelines5/5

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

Provides a typical workflow: use get_vote_results to get BILL_ID, then call this tool. Explicitly warns that BILL_ID (PRC_...) is required, not BILL_NO, and gives clear prerequisites.

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

get_pending_billsA

현재 국회에 계류 중인 미처리 의안 목록을 조회합니다.

Get bills currently pending (awaiting committee review or plenary vote). "Pending" excludes bills already passed, rejected, or withdrawn.

When to use: • To see what legislation is currently active in a policy area. • To find unresolved bills on a topic. • Complements search_bills (which covers all outcomes including past bills).

Args: assembly: 대수 (예: "22") — 필수 bill_name: 법률안명 키워드로 필터 (선택) committee: 소관위원회명으로 필터 (선택, 예: "환경노동위원회") proposer: 대표발의자명으로 필터 (선택) page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10)

Returns: bills: 계류의안 목록 — BILL_ID(★ get_bill_proposers 등에 필요), BILL_NO, BILL_NAME, PROPOSER, PROPOSE_DT, COMMITTEE 등 count: 이번 페이지 반환 건수 total_count: 전체 계류의안 수 (22대 기준 ~8,900건) has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
assemblyYes
proposerNo
bill_nameNo
committeeNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only operation by describing a query and return of data, but does not explicitly state that no data is modified, deleted, or created. It would benefit from stating that the tool is idempotent and safe to call.

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

Conciseness5/5

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

The description is well-structured with clear sections (English summary, when-to-use, args, returns). Every sentence adds value. The bilingual format is not redundant; the Korean targets local users. There is no wasted text.

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

Completeness5/5

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

Given the tool has no annotations and many siblings, the description provides comprehensive context: purpose, parameter semantics, return value details (including fields like BILL_ID, count, total_count, has_more), and usage guidance distinguishing it from search_bills. The output schema is implied but not shown; however, the description covers return fields adequately.

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?

Despite 0% schema description coverage, the description adds complete meaning to all six parameters: assembly (required, example '22'), bill_name (keyword filter), committee (e.g., '환경노동위원회'), proposer (representative proposer), page (default 1), and page_size (default 10). This fully compensates for the missing schema descriptions.

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 description clearly states the verb 'Get' and the resource 'bills currently pending', and explicitly distinguishes pending bills from those already passed, rejected, or withdrawn. This precision makes the tool's purpose unmistakable and differentiates it from related tools.

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?

The description provides explicit use cases: 'To see what legislation is currently active in a policy area' and 'To find unresolved bills on a topic'. It also directly contrasts with search_bills, which covers all outcomes. However, it lacks explicit when-not-to-use guidance, such as situations where pending bills are not relevant.

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

get_plenary_agendaA

본회의 부의안건 — 본회의에 상정된(또는 상정 예정인) 안건 목록을 조회합니다.

Get bills placed on the plenary session agenda. Useful for tracking upcoming votes.

When to use: • To see what bills are scheduled for the next plenary vote. • Complements get_pending_bills: pending bills are in committee; plenary agenda bills are ready for the floor vote.

Args: assembly: 대수 (예: "22") — 필수 session: 회기 번호로 필터 (선택, 예: "1" = 제1회기) page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 20)

Returns: agenda_items: 부의안건 목록 — BILL_ID, BILL_NO, BILL_NAME, SESS_NO(회기), AGENDA_NO(안건번호), PROPOSE_DT, COMMITTEE 등 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sessionNo
assemblyYes
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses the read-only nature by mentioning it retrieves information, and explains pagination behavior via has_more. However, it does not explicitly state that the tool is non-destructive or mention any authentication requirements, though these are implied.

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?

The description is well-structured with sections for Korean/English, usage, args, and returns. It is concise but includes bilingual repetition, which slightly reduces efficiency.

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?

Given the existence of an output schema, the description lists return fields and pagination details. However, it does not cover error scenarios or prerequisites, making it somewhat incomplete.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by explaining each parameter (assembly as required, session as optional filter, page and page_size with defaults). It adds context like 대수 and 회기 번호, but could provide more detail on valid formats.

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 description clearly states the tool retrieves bills on the plenary session agenda ("Get bills placed on the plenary session agenda") and distinguishes it from the sibling tool get_pending_bills by noting that pending bills are in committee while plenary agenda bills are ready for floor vote.

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

Usage Guidelines5/5

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

The description explicitly states when to use ("To see what bills are scheduled for the next plenary vote") and how it complements get_pending_bills, providing clear guidance on when not to use this tool.

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

get_scheduleA

국회 일정을 조회합니다 (본회의·위원회·공청회 등).

Query the National Assembly schedule: plenary sessions, committee meetings, public hearings, and other proceedings.

Schedule type determines which endpoint is used:

  • "all" → ALLSCHEDULE (모든 종류 통합, 가장 포괄적)

  • "plenary" → nekcaiymatialqlxr (본회의만)

  • "committee" → nrsldhjpaemrmolla (위원회만, committee 필터 사용 가능)

Note: Parameter names are based on the API pattern. If date filtering or committee filtering does not work as expected, use query_assembly directly.

Args: assembly: 대수 — 필수 (예: "22") schedule_type: 일정 종류 — "all" (기본값) | "plenary" | "committee" committee: 위원회명 필터 (선택, schedule_type="committee"일 때만 적용, 예: "법제사법위원회") page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 20)

Returns: schedule_items: 일정 목록 endpoint_used: 실제 호출된 엔드포인트 코드 schedule_type: 요청한 일정 종류 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출 raw_response: 비표준 응답 형식일 때 전체 JSON

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
assemblyYes
committeeNo
page_sizeNo
schedule_typeNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, but description discloses endpoint selection logic, committee filter constraint, and raw_response for non-standard formats. It is a read operation and no destructive behavior is implied.

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?

Well-structured with sections and bilingual summary, but slightly verbose with redundant translations. Core purpose is front-loaded.

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?

Covers input parameters thoroughly, notes output fields, and provides fallback advice. Without the output schema, we cannot fully assess, but the description seems sufficient.

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 has 0% description coverage, but description adds comprehensive explanations for each parameter: assembly is required with example, schedule_type values are listed with mapping to endpoints, committee with example and condition, page and page_size with defaults.

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 description clearly states the tool queries the National Assembly schedule, listing specific types (plenary, committee, hearings). It distinguishes from sibling tools like query_assembly by specifying when to use the alternative.

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

Usage Guidelines5/5

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

Explicit guidance on when to use this tool vs alternatives: if filtering fails, use query_assembly. Also explains schedule_type determines endpoint usage and committee filter only applies for committee type.

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

get_vote_resultsA

의안별 본회의 표결현황을 조회합니다 — 집계 결과(찬성/반대/기권 건수).

Get plenary vote results by bill (aggregate yes/no/abstain counts). This is STEP 1 of the per-member vote analysis workflow.

Typical vote analysis workflow:

  1. get_vote_results(assembly=assembly, bill_name=...) → find the bill, note its BILL_ID

  2. get_member_votes(bill_id=BILL_ID, assembly=assembly) → get per-member votes

  3. Filter votes by party, or compare party breakdowns

NOT this tool: • For individual member votes → use get_member_votes (requires BILL_ID from this tool)

Args: assembly: 대수 (예: "22") — 필수 bill_no: 의안번호로 필터 (선택, 예: "2216983") — BILL_NO(숫자), BILL_ID 아님 bill_name: 의안명 키워드로 필터 (선택, 예: "국민투표법") page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10)

Returns: votes: 표결 목록 — BILL_ID(★ get_member_votes에 필요), BILL_NO, BILL_NAME, PROC_DT(표결일), MEMBER_TCNT(재석), VOTE_TCNT(투표), YES_TCNT(찬성), NO_TCNT(반대), BLANK_TCNT(기권), PROC_RESULT_CD(처리결과), LINK_URL count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
bill_noNo
assemblyYes
bill_nameNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so the description carries full burden. It discloses pagination behavior with 'has_more: True이면 page+1로 재호출' and lists all return fields. However, it does not explicitly state that the tool is read-only or mention any authentication requirements. Still, the behavior is well covered overall.

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?

The description is long but well-structured: a brief purpose statement, workflow steps, a 'NOT this tool' clarification, then parameter and return sections. It front-loads the purpose and workflow. While it contains useful detail, it could be slightly more concise without losing value.

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

Completeness5/5

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

Given the tool has 5 parameters, no output schema provided, and no annotations, the description is remarkably complete. It explains the workflow, parameter semantics, return fields including pagination, and how it relates to sibling tools. No gaps remain for effective use.

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

Parameters4/5

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

Schema coverage is 0%, but the description compensates with detailed parameter explanations: it clarifies that 'assembly' is required, 'bill_no' is BILL_NO (number) not BILL_ID, 'bill_name' is a keyword filter, and provides examples. The return section also helps understand parameter usage. Could be more precise on data types for optional parameters.

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 description explicitly states the tool's function: 'Get plenary vote results by bill (aggregate yes/no/abstain counts).' It distinguishes itself from the sibling tool 'get_member_votes' by clarifying that this tool is for aggregate results and that individual member votes require a different tool.

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

Usage Guidelines5/5

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

The description outlines a clear workflow: step 1 is this tool, step 2 is get_member_votes. It explicitly states when not to use this tool ('For individual member votes → use get_member_votes') and explains that get_member_votes requires BILL_ID from this tool, providing clear guidance on tool sequencing.

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

query_assemblyA

열린국회정보 Open API의 임의 엔드포인트를 직접 호출합니다 (범용 fallback).

Universal fallback tool — call any open.assembly.go.kr API endpoint directly. Use when no dedicated MCP tool exists for the data you need.

Typical workflow:

  1. discover_apis(keyword="청원") → find the right endpoint code

  2. query_assembly(endpoint_code="", params={"AGE": "22"}) → call it

Authentication (ASSEMBLY_API_KEY) is handled automatically — do NOT pass KEY in params.

Common parameters across most endpoints:

  • AGE: assembly number (e.g., "22" for 22nd Assembly)

  • pIndex / pSize: pagination — handled via page / page_size args here

Args: endpoint_code: API 엔드포인트 코드 (예: "nzmimeepazxkubdpn"). discover_apis()로 코드를 먼저 확인하거나, https://open.assembly.go.kr에서 직접 조회. params: 추가 API 파라미터 (선택, 예: {"AGE": "22", "BILL_NAME": "인공지능"}). KEY, Type, pIndex, pSize는 자동 처리되므로 포함 불필요. page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10, 최대: 100)

Returns: endpoint: 호출된 엔드포인트 코드 rows: 결과 행 목록 (표준 응답 형식일 때) count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출 가능 raw_response: 비표준 응답 형식일 때 전체 JSON (rows 대신 이걸 확인)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
paramsNo
page_sizeNo
endpoint_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that authentication is automatic, pagination is handled via page/page_size, and the response structure is detailed (rows, count, total_count, has_more, raw_response). However, it does not explicitly mention idempotency, safety, error handling, or rate limits, which would strengthen transparency.

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?

The description is structured with clear sections (purpose, usage, workflow, authentication, common params, args, returns) and is front-loaded with the purpose. It is somewhat lengthy due to bilingual content, but every sentence is valuable. Could be slightly more concise but overall well-organized.

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

Completeness5/5

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

Given the tool's role as a universal fallback and the existence of an output schema, the description provides thorough coverage: explains response fields (endpoint, rows, count, etc.), when to use raw_response, pagination, and automatic handling of certain params. It is complete for an agent to understand and use the tool correctly.

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%, but the description compensates fully by explaining all four parameters: endpoint_code (with example and reference), params (with auto-handled fields), page (default 1), and page_size (default 10, max 100). This adds significant meaning beyond the schema.

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 description clearly states it is a universal fallback to call any open.assembly.go.kr API endpoint directly, and specifies when to use it: when no dedicated MCP tool exists. The verb 'call any ... API endpoint directly' is specific and distinguishes it from sibling tools.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use when no dedicated MCP tool exists for the data you need.' A typical workflow is shown (discover_apis then query_assembly), and it warns not to pass KEY in params, explains common parameters, and mentions pagination. This leaves no ambiguity about when to use this tool.

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

search_billsA

국회의원 발의법률안을 검색합니다 (의원발의안 전용; 정부제출안은 별도).

Search for member-sponsored bills in the National Assembly. This is the PRIMARY entry point for most bill-related queries.

IMPORTANT -- two bill identifiers are returned:

  • BILL_NO: 7-digit public number (e.g., "2216983") -- use with get_bill_detail, get_bill_review

  • BILL_ID: internal ID starting with "PRC_..." -- use with get_bill_proposers, get_member_votes, get_bill_committee_review

Typical workflow:

  1. search_bills -> get list of bills with both BILL_NO and BILL_ID

  2. get_bill_proposers(bill_id=BILL_ID) -> co-sponsors

  3. get_member_votes(bill_id=BILL_ID, assembly=assembly) -> per-member vote records

  4. get_bill_review(assembly=assembly, bill_no=BILL_NO) -> committee/plenary timeline

Note: covers member-initiated bills only. Does not include government-submitted bills. Date filtering (propose_dt_from/propose_dt_to) is applied client-side because the underlying API does not support it natively. When date filters are used with other filters (bill_name, committee, etc.), performance is good. Date-only queries on a full assembly may be slow (scans up to 2,000 results).

For bill propose-reason texts (제안이유), use the korean-assembly-bills package (pip install korean-assembly-bills). 60,925 texts with 99.4% coverage (20th-22nd).

Args: assembly: 대수 -- 필수 (예: "22" = 22대 국회, "16"-"22" 지원) bill_name: 법률안명 키워드 (선택, 예: "인공지능", "주거") proposer: 대표발의자명 (선택, 예: "홍길동") proc_result: 처리결과 필터 (선택) -- "원안가결" | "수정가결" | "부결" | "폐기" committee: 소관위원회명 (선택, 예: "법제사법위원회") propose_dt_from: 발의일 시작 (선택, 예: "2025-01-01") -- 클라이언트 사이드 필터링 propose_dt_to: 발의일 종료 (선택, 예: "2025-12-31") -- 클라이언트 사이드 필터링 page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10, 최대: 100)

Returns: bills: 법률안 목록 -- 각 항목에 BILL_ID, BILL_NO, BILL_NAME, RST_PROPOSER, PROPOSE_DT, PROC_RESULT, COMMITTEE, DETAIL_LINK 포함 count: 이번 페이지 반환 건수 total_count: 검색 조건 전체 건수 has_more: True이면 page+1로 재호출하여 추가 결과 조회 가능

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
assemblyYes
proposerNo
bill_nameNo
committeeNo
page_sizeNo
proc_resultNo
propose_dt_toNo
propose_dt_fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It discloses key behaviors: two identifiers returned (BILL_NO, BILL_ID) with specific downstream usage, client-side date filtering with performance implications, coverage of bill propose-reason texts via external package, and the return format in 'Returns' section. This fully compensates for missing annotations.

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?

The description is well-structured and front-loaded with critical info (purpose, identifiers, workflow). However, it contains some redundancy with bilingual content and a slightly lengthy note about the external package. Still, every sentence adds value, and the structure aids scanning.

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

Completeness5/5

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

Given 9 parameters, no annotations, and an output schema, the description fully covers all aspects: purpose, scope, parameters, behavioral quirks, return fields, and integration with sibling tools. It leaves no obvious gaps for an agent to make mistakes.

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 must explain all parameters. It does so comprehensively in the 'Args' section: each parameter has description, optionality, expected format (if applicable), examples for bill_name/proposer/committee, enum values for proc_result, client-side note for propose_dt_from/to, and defaults/limits for page/page_size. This is ideal.

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 description clearly states the tool searches for member-sponsored bills (의원발의안), distinguishes from government-submitted bills (정부제출안은 별도), and explicitly calls itself the 'PRIMARY entry point for most bill-related queries.' The verb+resource+scope is specific and unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: it's the primary entry point, covers only member-initiated bills (not government-submitted), and includes a typical workflow referencing sibling tools (get_bill_detail, get_bill_proposers, etc.). It also notes limitations (date filtering applied client-side) and performance trade-offs.

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

search_hearingsA

국회 인사청문회 및 공청회 목록을 조회합니다.

Query National Assembly confirmation hearings (인사청문회) or public hearings (공청회).

Hearing types:

  • "confirmation": 인사청문회 — personnel confirmation hearings for cabinet nominees, agency heads, and other senior appointees. Use nominee_name to filter by candidate.

  • "public": 공청회 — legislative public hearings for citizen input on bills. Use committee to filter by committee.

Research use case: For analysis of confirmation hearings and political appointments, combine with the kr-hearings-data package (9.9M speeches, 7.9M dyads) which provides full transcript-level data. This tool returns hearing metadata only.

Note: Parameter names are based on the API pattern and hollobit/assembly-api-mcp source review. If nominee_name filtering does not work, use query_assembly directly.

Args: assembly: 대수 — 필수 (예: "22") hearing_type: 청문회 유형 — "confirmation" 인사청문회 (기본값) | "public" 공청회 nominee_name: 후보자 이름 필터 (선택, hearing_type="confirmation"일 때 사용, 예: "홍길동") committee: 위원회명 필터 (선택, 예: "법제사법위원회") page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10)

Returns: hearings: 청문회 목록 — 청문회 날짜, 대상자/의안, 위원회 등 endpoint_used: 실제 호출된 엔드포인트 코드 hearing_type: 요청한 청문회 유형 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출 raw_response: 비표준 응답 형식일 때 전체 JSON

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
assemblyYes
committeeNo
page_sizeNo
hearing_typeNoconfirmation
nominee_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description discloses that the tool returns only hearing metadata (not full transcripts), mentions potential limitations of nominee_name filtering, and explains the return fields. This is comprehensive for a read operation.

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?

The description is lengthy due to bilingual content and detailed explanations, but it is well-structured with clear sections (purpose, usage, args, returns). Some redundancy could be trimmed, but it remains effective and informative.

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

Completeness5/5

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

Given the number of parameters (6) and absence of annotations, the description covers all input parameters, return fields, usage scenarios, and even suggests alternative tools. It is comprehensive and leaves no critical gaps.

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 coverage is 0%, but the 'Args' section in the description explains each parameter in detail, including required status, defaults, usage context, and examples. This adds significant meaning beyond the bare schema titles.

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 description clearly states the tool queries National Assembly hearings, specifying two types (confirmation and public) and their purposes. It distinguishes the tool from siblings like query_assembly by providing an alternative for filtering issues.

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

Usage Guidelines5/5

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

Provides explicit guidance on when to use each hearing type and filter by nominee_name or committee. Includes a fallback instruction: if nominee_name filtering fails, use query_assembly directly. This helps the agent choose the appropriate tool.

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

search_nars_reportsA

국회입법조사처(NARS) 보고서를 검색합니다.

Search publications from the National Assembly Research Service (NARS / 국회입법조사처): research reports (입법조사처보고서), issue briefs (이슈와논점), foreign law trends (외국법률동향과분석), and regular reports (정기보고서).

NARS reports provide authoritative background on policy issues — useful for understanding the legislative context around any bill or policy domain.

Note: This tool uses endpoint naaborihbkorknasp. Parameter names are based on the open.assembly.go.kr API pattern and hollobit/assembly-api-mcp source review. If the keyword filter does not work as expected, try query_assembly with discover_apis(keyword="NARS") to inspect the raw response schema.

Args: keyword: 보고서 제목 키워드 (선택, 예: "인공지능", "복지", "조세") date_from: 발행일 시작 (선택, YYYYMMDD 형식, 예: "20240101") date_to: 발행일 종료 (선택, YYYYMMDD 형식, 예: "20241231") page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10, 최대: 100)

Returns: reports: 보고서 목록 — 각 항목에 제목, 발행일, 저자, 보고서 유형 등 포함 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출 raw_response: 비표준 응답 형식일 때 전체 JSON

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
date_toNo
keywordNo
date_fromNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description fully discloses behavioral traits: it mentions the specific endpoint, potential unreliability of the keyword filter, pagination via has_more, and return fields. The troubleshooting note adds transparency about possible issues.

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?

The description is well-structured with clear sections (purpose, types, usage, args, returns, note). It is somewhat lengthy due to bilingual content, but every sentence adds value and the key information is front-loaded.

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

Completeness5/5

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

Given 5 parameters, no annotations, and an existing output schema (which may document returns), the description covers purpose, usage context, parameter details, return fields, pagination, and troubleshooting. It is fully complete for a search tool.

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 coverage is 0%, so the description carries full burden. It provides a detailed 'Args' section with meanings, examples (e.g., '인공지능', YYYYMMDD format), and constraints (max page_size=100), adding significant value beyond the basic schema.

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 description clearly specifies the verb 'search' and the resource 'NARS reports', listing specific publication types (research reports, issue briefs, etc.). It distinguishes from sibling tools like search_bills and search_hearings by focusing on legislative research publications.

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?

The description explains that NARS reports are useful for understanding legislative context. It provides a fallback suggestion to use query_assembly with discover_apis if the keyword filter fails, offering alternative usage guidance. However, it does not explicitly state when not to use this tool.

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

search_petitionsA

국회 청원 목록을 조회합니다.

Query petition records from the National Assembly: pending petitions (계류 청원) or all petitions including closed ones (접수 목록).

Petitions (청원) are formal citizen requests submitted through National Assembly members. This tool returns petition metadata — title, proposer, assembly, committee, status.

Note: Full petition text is not available through the Open API. This tool returns petition records/status, not the content of individual petitions. For research on citizen engagement and petition outcomes, the status and committee routing data returned here is typically sufficient.

Parameter names are based on the API pattern and hollobit/assembly-api-mcp source. If keyword filtering does not return expected results, use query_assembly directly: discover_apis(keyword="청원") → query_assembly(endpoint_code="PTTRCP", params={...})

Args: assembly: 대수 — 필수 (예: "22") keyword: 청원 제목 키워드 (선택, 예: "교육", "환경") include_closed: True이면 처리 완료 청원까지 포함 (PTTRCP 엔드포인트 사용). False이면 계류 중인 청원만 반환 (기본값, nvqbafvaajdiqhehi 사용). page: 페이지 번호 (기본값: 1) page_size: 페이지당 결과수 (기본값: 10)

Returns: petitions: 청원 목록 endpoint_used: 실제 호출된 엔드포인트 코드 count: 이번 페이지 반환 건수 total_count: 전체 건수 has_more: True이면 page+1로 재호출 raw_response: 비표준 응답 형식일 때 전체 JSON

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
keywordNo
assemblyYes
page_sizeNo
include_closedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Discloses that the tool returns only metadata, not full text, and explains the API endpoints behind include_closed. Without annotations, it covers key behavioral traits, though auth or rate limits aren't mentioned.

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?

Well-structured with Korean lead, English explanation, Args, and Returns sections. Slightly verbose but information-dense; every sentence adds value. Minor redundancy in repeating '청원' but acceptable.

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

Completeness5/5

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

Given 5 parameters with 0% schema coverage and an output schema, the description comprehensively covers inputs, outputs, and limitations. It also includes troubleshooting guidance, making it fully self-contained.

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 has 0% coverage, but the description provides detailed explanations for all 5 parameters, including examples, defaults, and functional behavior (e.g., include_closed switches endpoints). This fully compensates for the schema 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?

Description clearly states it queries petition records from the National Assembly, distinguishes between pending and closed petitions, and specifies what metadata it returns. It also contrasts with query_assembly and addresses limitations, effectively differentiating it from siblings.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (for petition metadata) and provides an alternative path (discover_apis → query_assembly) if keyword filtering fails. Also notes that full text is unavailable, setting expectations clearly.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updatesv0.6.0
    • First observedanalyze_legislator
    • First observeddiscover_apis
    • First observedget_bill_committee_review
    • First observedget_bill_detail
    • First observedget_bill_proposers
    • First observedget_bill_review
    • First observedget_bill_summary
    • First observedget_committee_members
    • First observedget_member_info
    • First observedget_member_votes
    • First observedget_party_cohesion
    • First observedget_pending_bills
    • First observedget_plenary_agenda
    • First observedget_schedule
    • First observedget_vote_results
    • First observedquery_assembly
    • First observedsearch_bills
    • First observedsearch_hearings
    • First observedsearch_nars_reports
    • First observedsearch_petitions

TDQS

A4.6/5.0

Scored across 20 tools

Disambiguation5/5

Each tool has a clearly distinct purpose. Potential overlaps like get_bill_review and get_bill_committee_review are explicitly differentiated in descriptions. Tools cover different aspects of legislative data without ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_bill_detail, search_bills, get_member_votes). No mixing of conventions.

Tool Count4/5

20 tools is slightly above the typical 3-15 range but justified by the comprehensive scope of the National Assembly API. Each tool serves a specific, non-redundant function.

Completeness4/5

Covers major areas: bills (search, detail, review, proposers, pending), members (info, committees), votes (results, member votes, cohesion), schedules, hearings, reports, petitions, and API discovery. Minor gaps like bill text are acknowledged as API limitations.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for searching Japanese Diet bills and committee Q\&A records via the NDL Kokkai API.
    4
    5 npm
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables LLM clients to search and analyze bills, members, committees, meetings, votes, and reports from the South Korean National Assembly OpenAPI through MCP tools.
    26
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that wraps the Korean government's '나라장터 사전규격정보서비스' API, enabling natural language search and retrieval of public procurement pre-specifications through simplified tools.
    5
    29 npm
    MIT