open-assembly-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@open-assembly-mcpWhat are the latest bills in the 22nd Assembly?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
open-assembly-mcp
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가 필요한 툴을 고르고 체인으로 연결합니다.

1 — 당론 분석
"22대 법원조직법 표결, 정당별 찬반 집계와 이탈표 알려줘"
Claude calls get_vote_results → get_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-103 — 법안 입법 여정 전체
"인공지능기본법 (의안번호 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_R2V4H1W1T2K5M1O6E4Q9T0V7Q9S0U0Related 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:
Install
uv(provides theuvxrunner 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 --versionshould print a version string. If you seecommand not found, open a new terminal so the PATH update takes effect.Get a free API key at open.assembly.go.kr → Sign up → 마이페이지 → API 키 발급
Option 1 — Claude Desktop (Recommended)
Easiest path. The --setup wizard writes the config file for you.
Prerequisites: Claude Desktop must be installed.
uvx open-assembly-mcp --setupIt 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.jsonWindows:
%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:
search_bills(assembly="22", bill_name="인공지능", page_size=50)→ 59 bills foundFor 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:
get_bill_review(assembly="22", bill_no="2206772")→ committee + plenary timelineget_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_R2V4H1W1T2K5M1O6E4Q9T0V7Q9S0U0Scenario 3 — Check pending legislation in a committee
"과학기술정보방송통신위원회에 현재 계류 중인 법안은 몇 개야? AI·반도체 관련 법안만 따로 봐줘."
Claude calls:
get_pending_bills(assembly="22", committee="과학기술정보방송통신위원회", page_size=100)→ 12,505 billsget_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-27Scenario 4 — Check what's on the next plenary agenda
"다음 본회의에 상정될 법안 목록을 알려줘."
Claude calls:
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chain & research tools (compound queries and computed metrics):
Tool | Key parameters | Returns |
|
|
|
|
|
|
API expansion tools (NARS, petitions, schedule, hearings — new in v0.6.0):
Tool | Key parameters | Returns |
|
|
|
|
|
|
|
|
|
|
|
|
Universal access tools (reach any of the 276+ endpoints not yet covered above):
Tool | Key parameters | Returns |
|
| Verified endpoint registry, grouped by category |
|
|
|
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 withPRC_...), notBILL_NO(the public 7-digit number like2216983). Both are returned bysearch_billsandget_pending_bills. Tools that needBILL_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 |
| 16th–22nd | Member-sponsored bills only (no government bills) |
| 16th–22nd | |
| 16th–22nd | |
| 16th–22nd | |
| 16th–22nd | |
| 19th–22nd recommended | Electronic vote records sparse before 19th Assembly |
| 18th–22nd recommended | Roll-call data from ~18th Assembly onward; default page_size=300 fetches all ~300 members in one call |
| 16th–22nd | |
| 22nd recommended | Bills not yet processed; ~8,900 in the 22nd Assembly |
| 22nd recommended | Bills scheduled for the next plenary session |
| 16th–22nd | Committee meetings for a specific bill |
| 16th–22nd | Convenience — chains detail + review + proposers + committee meetings in one call |
| 16th–22nd | Chain — member profile + all sponsored bills + career stats (by_result, by_year, by_committee) |
| 18th–22nd recommended | Research — per-party vote breakdown + dissenters; requires BILL_ID from get_vote_results |
| All | NARS research reports by keyword or date range |
| 16th–22nd | Pending or all-time petitions; |
| All | Assembly schedule — all, plenary-only, or committee-specific |
| 16th–22nd | Personnel confirmation hearings or public hearings |
| All | Searches the verified endpoint registry; use before |
| 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_detail → LINK_URL.
Related Data Packages
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 |
Master bill database, roll call votes, DW-NOMINATE ideal points, bill texts | 110K bills, 2.4M votes (17th-22nd) |
| |
Bill propose-reason texts (제안이유), co-sponsor records, MP metadata | 60,925 bills (20th-22nd) |
| |
Committee proceeding speeches, legislator-witness Q&A dyads | 9.9M speeches, 7.9M dyads (16th-22nd) |
| |
Cabinet minister panel with dual-office (겸직) coding | 286 appointments (2000-2025) | ||
Curated teaching datasets (bills, votes, wealth, speeches) | R package, 7 datasets |
|
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 | |
Bill propose-reason text (제안이유) | |
Committee hearing transcripts, speech-level data | |
Legislator-witness Q&A pairs for oversight research | kr-hearings-data dyads |
Cabinet minister dual-office status | |
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 --setupTo 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
Check the config file path is correct:
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows).Make sure the JSON has a top-level
mcpServerskey (not nested underpreferences).Fully quit Claude Desktop (⌘Q on macOS) and reopen. A normal window close does not reload MCP servers.
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 secondsConcrete research use cases:
Task | Tools used |
Co-sponsorship network for a policy domain |
|
Party-line discipline on a specific vote |
|
Per-party vote breakdown + dissenters |
|
Cross-party voting coalitions |
|
Full legislative career of a single member |
|
Legislator activity by year or committee |
|
Committee composition by party |
|
Bill timeline from filing to promulgation |
|
Currently active legislation in a policy area |
|
Upcoming plenary votes |
|
Majority-building analysis for a passed bill |
|
Confirmation hearing list by nominee or committee |
|
NARS research reports on a policy topic |
|
Petitions received in a given assembly |
|
Bill propose-reason text analysis |
|
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 |
|
Legislator profile | Multi-step manual |
|
Bill timeline | Manual chaining |
|
Historical accuracy | Current assembly only |
|
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.serverAcknowledgments
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 rangeAdded
search_petitions: query pending or all-time petitions by assembly and keyword; automatically routes to the correct endpoint (include_closedtoggle)Added
get_schedule: unified schedule lookup — all, plenary-only, or committee-specific;schedule_typeparameter is case-insensitiveAdded
search_hearings: personnel confirmation hearings and public hearings;hearing_typeroutes to the correct endpointAll four new tools return
has_morepagination flag andraw_responsefallback for non-standard API formatsExpanded 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_legislatorchain 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_cohesionresearch tool: per-party vote aggregation, dominant position, individual dissenters (type: opposite / abstain); handles all-abstain edge case gracefullyBoth new tools handle parallel sub-calls, ambiguous member names, pagination, and graceful error isolation
v0.4.0 (2026-04)
Added
discover_apistool: keyword search across the verified endpoint registryAdded
query_assemblytool: universal fallback to call any of the 276+ open.assembly.go.kr endpoints directly; handles both standard (head/row) and non-standard response formatsAdded
registry.pywith 11 verified endpoint entries organized by categoryAdded
CREDITS.mdwith detailed attribution for hollobit/assembly-api-mcp patternsBumped 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 transcriptsExpanded research use cases table with companion package workflows
v0.3.0 (2026-03)
Breaking: renamed
ageparameter toassemblyacross all tools for clarityAdded client-side date filtering to
search_bills(propose_dt_from/propose_dt_to)Fixed
get_member_infoto use ALLNAMEMBER endpoint for correct per-assembly data (party, district, committee)Fixed
_parse_responseto handle alternate INFO-200 response formatRemoved 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_summaryconvenience tool: chains detail + review + proposers + committee meetings in one parallel callRewrote all 12 tool docstrings with When-to-use, workflow hints, and BILL_ID vs BILL_NO disambiguation
Added explicit
TimeoutExceptionhandling in API client (descriptive error message)Added
test_client.pycoverage 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_votesdefaultpage_size50 → 300 (covers full ~300-member plenary in one call)Improved docstrings: corrected
get_vote_resultsdescription, added pagination tips to all tools
v0.2.4 (2026-03)
--setupwizard: ASCII art banner with teal-to-blue gradient, animated validation, polished bilingual prompts
v0.2.3 (2026-03)
--setupwizard: ANSI colors, box-drawing header, professional bilingual prompts
v0.2.2 (2026-03)
--setupwizard: bilingual prompts (EN/KR), academic contact info
v0.2.1 (2026-03)
Added
--setupwizard: interactive installer that auto-configures Claude Desktop
v0.2.0 (2026-03)
Added
get_member_votes— per-member roll-call records for any billAll tools now return
total_countandhas_morefor transparent paginationAdded
propose_dt_from/propose_dt_todate filter tosearch_billsExtended 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 toolsanalyze_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: 요약 메시지
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| assembly | No | 22 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
discover_apis(keyword="청원") → find petition endpoint codes
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
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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: 전체 건수
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 등
| Name | Required | Description | Default |
|---|---|---|---|
| bill_no | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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: 전체 제안자 수
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| bill_no | No | ||
| assembly | Yes | ||
| committee | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| bill_no | Yes | ||
| assembly | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| assembly | No | 22 | |
| committee | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| page | No | ||
| party | No | ||
| assembly | No | 22 | |
| district | No | ||
| committee | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
get_vote_results(assembly=assembly, bill_name=...) → find BILL_ID
get_member_votes(bill_id=BILL_ID, assembly=assembly) → all ~300 member votes
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| party | No | ||
| bill_id | Yes | ||
| assembly | Yes | ||
| page_size | No | ||
| member_name | No | ||
| vote_result | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
get_vote_results(assembly=assembly, bill_name=...) → find BILL_ID
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: 요약 메시지
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes | ||
| assembly | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| assembly | Yes | ||
| proposer | No | ||
| bill_name | No | ||
| committee | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| session | No | ||
| assembly | Yes | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| assembly | Yes | ||
| committee | No | ||
| page_size | No | ||
| schedule_type | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
get_vote_results(assembly=assembly, bill_name=...) → find the bill, note its BILL_ID
get_member_votes(bill_id=BILL_ID, assembly=assembly) → get per-member votes
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로 재호출
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| bill_no | No | ||
| assembly | Yes | ||
| bill_name | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
discover_apis(keyword="청원") → find the right endpoint code
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 대신 이걸 확인)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| params | No | ||
| page_size | No | ||
| endpoint_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
search_bills -> get list of bills with both BILL_NO and BILL_ID
get_bill_proposers(bill_id=BILL_ID) -> co-sponsors
get_member_votes(bill_id=BILL_ID, assembly=assembly) -> per-member vote records
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로 재호출하여 추가 결과 조회 가능
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| assembly | Yes | ||
| proposer | No | ||
| bill_name | No | ||
| committee | No | ||
| page_size | No | ||
| proc_result | No | ||
| propose_dt_to | No | ||
| propose_dt_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| assembly | Yes | ||
| committee | No | ||
| page_size | No | ||
| hearing_type | No | confirmation | |
| nominee_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| date_to | No | ||
| keyword | No | ||
| date_from | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| keyword | No | ||
| assembly | Yes | ||
| page_size | No | ||
| include_closed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
20 tool updates
v0.6.0- First observed
analyze_legislator - First observed
discover_apis - First observed
get_bill_committee_review - First observed
get_bill_detail - First observed
get_bill_proposers - First observed
get_bill_review - First observed
get_bill_summary - First observed
get_committee_members - First observed
get_member_info - First observed
get_member_votes - First observed
get_party_cohesion - First observed
get_pending_bills - First observed
get_plenary_agenda - First observed
get_schedule - First observed
get_vote_results - First observed
query_assembly - First observed
search_bills - First observed
search_hearings - First observed
search_nars_reports - First observed
search_petitions
TDQS
Scored across 20 tools
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.
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.
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.
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
Related MCP Connectors
An MCP server that provides congressional transcripts
Access U.S. congressional data - bills, votes, members, committees - via MCP.
MCP server for searching Airweave collections with natural language queries.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for searching Japanese Diet bills and committee Q\&A records via the NDL Kokkai API.45 npm1MIT
- AlicenseBqualityDmaintenanceEnables LLM clients to search and analyze bills, members, committees, meetings, votes, and reports from the South Korean National Assembly OpenAPI through MCP tools.26MIT
- FlicenseAqualityDmaintenanceMCP server that enables AI agents to search Korean laws and retrieve article contents using the Korean Ministry of Legislation's law information API.2-
- AlicenseAqualityAmaintenanceMCP server that wraps the Korean government's '나라장터 사전규격정보서비스' API, enabling natural language search and retrieval of public procurement pre-specifications through simplified tools.529 npmMIT