Assembly API MCP
κ΅ν APIλ€μ λν MCP | 276κ° κ΅ν + 8κ° κ΅λ―Όμ°Έμ¬μ λ²μΌν° API 100% μ κ·Ό | 6κ° Lite / 10κ° Full νλ‘ν λꡬ | 107κ° κ²μ¦λ API μ½λ
Ask AI about Assembly API MCP
Powered by Claude Β· Grounded in docs
I know everything about Assembly API MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
assembly-api-mcp
λνλ―Όκ΅ κ΅ν κ΄λ ¨ Open APIλ₯Ό Model Context Protocol (MCP) μλ²λ‘ μ 곡ν©λλ€.
Claude, Gemini, ChatGPT λ± AI λꡬμμ κ΅νμμ, μμ, μΌμ , νμλ‘, μμν, νκ²°, μ²μ λ± κ΅ν κ΄λ ¨ λ°μ΄ν°μ μ€μκ°μΌλ‘ μ κ·Όν μ μμ΅λλ€.
κ΅κ° AI μ ν(AX)μ AI μ±λ΄μ΄λ€κ³ λμ§ μμ£ . κ΅λ―Όλ€μ μΌμμ΄ AIλ‘ νΈλ¦¬ν΄μ ΈμΌ κ·Έκ²μ΄ μ§μ ν λ€μ΄ν°λΈ AI μλκ² μ£
λμμΈ μλ£λ λ³λ μν¬μ€νμ΄μ€μμ κ΄λ¦¬ν©λλ€: design/README.md
μ λ°μ΄νΈ λ΄μ
μ 체 λ³κ²½μ¬ν: CHANGELOG | v0.3βv0.4 λ§μ΄κ·Έλ μ΄μ : MIGRATION.md
v0.7.0 β κ΅νμμ°μ μ± μ²(NABO) Open API ν΅ν© (2026-04-12)
- docs/legislative-lifecycle.md μ λ² λΌμ΄νμ¬μ΄ν΄ μμ κ°μ΄λ β μ λ² μ /μ€/ν λ°μ΄ν° μΆμ
- nabo.go.kr 3κ° API ν΅ν© β λ³΄κ³ μ μλ£ κ²μ, μ κΈ°κ°νλ¬Ό, μ±μ©μ 보
- get_nabo MCP λꡬ μΆκ° (Full νλ‘ν) β
type=report|periodical|recruitments - REST API
/api/naboμΆκ° β Full νλ‘νμμ HTTPλ‘ NABO λ°μ΄ν° μ κ·Ό - λꡬ μ λ³κ²½ β Lite μ μ§ (6κ°), Full 10κ° β 11κ° (+get_nabo)
- API μμ€ 3κ° βκ΅ν + lawmaking + NABO
- API μ»€λ² 287κ° (276κ°κ΅ν + 8 κ΅λ―Όμ°Έμ¬μ λ²μΌν° + 3κ° NABO)
- NABO API Key λ°κΈ β https://www.nabo.go.kr/ko/api/apply.do?key=2509230004
v0.6.0 β κ΅λ―Όμ°Έμ¬μ λ²μΌν° API ν΅ν© (2026-04-11)
- 279κ° API μ½λ λ±λ‘ (271κ΅ν + 8 κ΅λ―Όμ°Έμ¬μ λ²μΌν°)
- assembly_org νμ₯ β
type=lawmakingμΌλ‘ μ λ²νν©/κ³ν/μκ³ , νμ μκ³ , λ²λ Ήν΄μλ‘, μ견μ μμ¬λ‘ μ κ·Ό (14κ° μλν¬μΈνΈ) - Lite/Full λꡬ μ λ³κ²½ μμ (6/10κ° μ μ§, νλΌλ―Έν° νμ₯λ§)
- fast-xml-parser μμ‘΄μ± μΆκ° β lawmaking API XML μλ΅ νμ±
- κ΅λ―Όμ°Έμ¬μ λ²μΌν° API μ¬μ© μ β opinion.lawmaking.go.krμμ OC(μ λ³΄κ³΅κ° μλΉμ€ μ μ² ID) λ°κΈ νμ
v0.5.0 β API 컀λ²μ¨ λν νμ₯ (2026-04-09)
- 271κ° API μ½λ μΌκ΄ λ°κ΅΄ (98.2%) β μλ λ°κ΅΄ μ€ν¬λ¦½νΈλ‘ 276κ° μ€ 271κ° μ½λ νμΈ
- 107κ° API μ μ© λꡬ ν΅ν© (39% 컀λ²μ¨) β Tier 1~3 λ¨κ³μ ν΅ν© μλ£
- ALLBILL μμμ 보 ν΅ν© API β μμ μ¬μ¬κ²½κ³Ό(μκ΄μβλ²μ¬μβλ³Ένμβ곡ν¬) μλ ν¬ν¨
- μλ κ΅ν λ°μ΄ν° β
assembly_member(scope="history")λ‘ μλ μμ/μ κ±°/μμ₯ 13κ° API μ κ·Ό - κ΅μ κ°μ νμ₯ β κ΅μ μ‘°μ¬/μμ μ°μ€/μΈμ¬μ²λ¬Έ/ν λ‘ ν νμλ‘ + κ²°κ³Όλ³΄κ³ μ
- μλ¬Έ API μ§μ β 4κ° λꡬμ
lang="en"νλΌλ―Έν°λ‘ μλ¬Έ λ°μ΄ν° μ κ·Ό - 보λμλ£/μ°κ΅¬μλ£ νμ₯ β
assembly_org(type="press"),research_data(source="future") - μ λΉ μμμ ν΅κ³ β
assembly_member(mode="party_stats")
λꡬ μ λ³κ²½ μμ (Lite 6κ° / Full 10κ°). κΈ°μ‘΄ μ¬μ©μ μν₯ μμ.
v0.4.0 β λꡬ ꡬ쑰 λκ·λͺ¨ ν΅ν© (Breaking Change)
| v0.3 (μ΄μ ) | v0.4+ (νμ¬) |
|---|---|
search_members + analyze_legislator | assembly_member |
search_bills + track_legislation | assembly_bill |
get_schedule + search_meetings + get_votes | assembly_session |
get_committees + search_petitions + get_legislation_notices | assembly_org |
get_bill_detail + get_bill_review + get_bill_history + get_bill_proposers | bill_detail (Full) |
search_library + search_research_reports + get_budget_analysis | research_data (Full) |
μμΈν λꡬ λ§€νμ docs/tool-mapping.mdλ₯Ό μ°Έμ‘°νμΈμ.
μ£Όμ κΈ°λ₯
- 6κ° Lite / 11κ° Full νλ‘ν λꡬ β λλ©μΈ μν°ν° κΈ°λ° ν΅ν© (νμ© μ¬λ‘ 100μ )
- 287κ° API μ κ·Ό (276κ°κ΅ν + 8 κ΅λ―Όμ°Έμ¬μ
λ²μΌν° + 3κ° NABO) β
discover_apis+query_assemblyλ²μ© λꡬ - 279κ° API μ½λ λ±λ‘ (271κ°κ΅ν + 8 κ΅λ―Όμ°Έμ¬μ
λ²μΌν°) β 107κ° μ μ© λꡬ ν΅ν©, λλ¨Έμ§
query_assemblyλ‘ μ¦μ νΈμΆ - μλ¬Έ API μ§μ β
lang="en"νλΌλ―Έν°λ‘ μμ/μΌμ /μμ/μμν μλ¬Έ λ°μ΄ν° - μλ κ΅ν λ°μ΄ν° β
scope="history"λ‘ μλ μμ/μ κ±°/μμ₯ μ κ·Ό - ALLBILL μ¬μ¬κ²½κ³Ό β μμ μ‘°ν μ μκ΄μβλ²μ¬μβλ³Ένμβκ³΅ν¬ νμλΌμΈ μλ ν¬ν¨
- μ λ² λΌμ΄νμ¬μ΄ν΄ μμ μΆμ β μ λ²κ³ν/μκ³ (μ λ² μ )βμ¬μ¬/νκ²°(μ λ² μ€)βNABO λΆμ(μ λ² ν) ν΅ν© (legislative-lifecycle)
- CLI μ§μ β ν°λ―Έλμμ μ§μ κ΅ν λ°μ΄ν° μ‘°ν
- μ΄μ€ Transport β stdio (Claude Desktop) + HTTP (μ격 μλ²)
- REST API + OpenAPI μ€ν β ChatGPT GPTs Actions μ§μ (
/openapi.json) - μ±λ₯ μ΅μ ν β SWR μΊμ, DNS ν리μλ°, gzip μμΆ, μμΈ‘ ν리ν¨μΉ, MCP Progress/Logging
λΉ λ₯Έ μμ
μ¬μ 쑰건
- κ΅ν API ν€ β open.assembly.go.krμμ λ¬΄λ£ λ°κΈ (
sampleν€λ‘ ν μ€νΈ κ°λ₯) - κ΅λ―Όμ°Έμ¬μ λ²μΌν° API ν€(μ ν) β opinion.lawmaking.go.krμμ μ λ³΄κ³΅κ° μλΉμ€ μ μ² ν OC λ°κΈ νμ. λ―Έμ€μ μ ν΄λΉ API νΈμΆ λΆκ°.
λ°©λ² 1: μλ μ€μΉ (λ‘컬, κΆμ₯)
Node.js 18 μ΄μμ΄ νμν©λλ€ (nodejs.org).
npx assembly-api-mcp setup
λνν λ§λ²μ¬κ° API ν€ μ λ ₯ β νλ‘ν μ ν β AI ν΄λΌμ΄μΈνΈ μ€μ μ μλμΌλ‘ μ²λ¦¬ν©λλ€. macOS, Windows, Linux λͺ¨λ λμΌν λͺ λ ΉμΌλ‘ μ€μΉλ©λλ€.
λ°©λ² 2: μ격 μλ² (μ€μΉ λΆνμ)
μ€μΉ μμ΄ URLλ§μΌλ‘ λ°λ‘ μ¬μ©ν μ μμ΅λλ€.
μ€μ λμ°λ―Έ νμ΄μ§μμ API ν€λ₯Ό μ λ ₯νλ©΄ μ¬μ© μ€μΈ AI ν΄λΌμ΄μΈνΈμ λ§λ μ€μ μ½λλ₯Ό μλμΌλ‘ μμ±ν΄ μ€λλ€.
μ§μ URLμ ꡬμ±ν μλ μμ΅λλ€:
https://assembly-api-mcp.fly.dev/mcp?key=YOUR_API_KEY&profile=lite
| νλΌλ―Έν° | νμ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|---|
key | O | sample | μ΄λ¦°κ΅νμ 보 API ν€ |
profile | X | lite | lite (6κ° λꡬ) λλ full (11κ° λꡬ) |
sampleν€λ‘ μ΅λ 10건κΉμ§ ν μ€νΈν μ μμ΅λλ€.
λ°©λ² 3: μλ μ€μΉ
μμΈν κ°μ΄λλ QUICK_START.mdλ₯Ό μ°Έμ‘°νμΈμ.
# 1. μ€μΉ (Node.js 18 μ΄μ νμ)
git clone https://github.com/hollobit/assembly-api-mcp.git
cd assembly-api-mcp
npm install && npm run build
# 2. API ν€ μ€μ
cp .env.example .env
# .env νμΌμ ASSEMBLY_API_KEY μ
λ ₯ (λ°κΈ: https://open.assembly.go.kr)
# 3. ν
μ€νΈ
npx tsx src/cli.ts test
AI ν΄λΌμ΄μΈνΈ μ°λ
μμΈν μ€μ κ°μ΄λλ QUICK_START.mdλ₯Ό μ°Έμ‘°νμΈμ.
Claude Desktop (stdio)
~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"assembly-api": {
"command": "node",
"args": ["/absolute/path/to/assembly-api-mcp/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key-here",
"MCP_PROFILE": "lite"
}
}
}
}
Claude Desktopμ μμ ν μ’ λ£(νΈλ μ΄ ν¬ν¨)ν ν μ¬μμν΄μΌ μ€μ μ΄ μ μ©λ©λλ€.
Claude Code (CLI)
claude mcp add assembly-api -- node /absolute/path/to/assembly-api-mcp/dist/index.js
λλ νλ‘μ νΈ λ£¨νΈμ .mcp.json νμΌμ μμ±ν©λλ€:
{
"mcpServers": {
"assembly-api": {
"command": "node",
"args": ["/absolute/path/to/assembly-api-mcp/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key-here"
}
}
}
}
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"assembly-api": {
"command": "node",
"args": ["/absolute/path/to/assembly-api-mcp/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key-here"
}
}
}
}
VS Code (GitHub Copilot / Claude Extension)
νλ‘μ νΈ λ£¨νΈμ .vscode/mcp.json νμΌμ μμ±ν©λλ€:
{
"servers": {
"assembly-api": {
"command": "node",
"args": ["${workspaceFolder}/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key-here"
}
}
}
}
Cursor IDE
~/.cursor/mcp.json λλ νλ‘μ νΈ λ£¨νΈ .cursor/mcp.json:
{
"mcpServers": {
"assembly-api": {
"command": "node",
"args": ["/absolute/path/to/assembly-api-mcp/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key-here"
}
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"assembly-api": {
"command": "node",
"args": ["/absolute/path/to/assembly-api-mcp/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key-here"
}
}
}
}
claude.ai (μΉ) / Claude λͺ¨λ°μΌ
μ€μΉ μμ΄ μ격 μλ² URLμ λ±λ‘νμ¬ μ¬μ©ν©λλ€. Pro μ΄μ νλ νμ.
- Settings β Integrations β Add More β Custom MCP server
- URL:
https://assembly-api-mcp.fly.dev/mcp?key=YOUR_API_KEY&profile=lite
μμΈν μ€μ λ°©λ²μ QUICK_START.mdλ₯Ό μ°Έμ‘°νμΈμ.
ChatGPT (GPTs Actions)
ChatGPT GPTsμμ OpenAPI Actionsλ‘ κ΅ν APIλ₯Ό μ¬μ©ν μ μμ΅λλ€.
- GPT μμ± β Configure β Actions β Create new action
- Import from URL:
https://assembly-api-mcp.fly.dev/openapi.json?profile=full - κ° μμ²μ
keyνλΌλ―Έν°μ API ν€ ν¬ν¨
REST APIλ₯Ό μ§μ νΈμΆν μλ μμ΅λλ€. μλν¬μΈνΈ λͺ©λ‘μ QUICK_START.mdλ₯Ό μ°Έμ‘°νμΈμ.
HTTP λͺ¨λ (μ격 ν΄λΌμ΄μΈνΈμ©)
stdioλ₯Ό μ§μνμ§ μλ ν΄λΌμ΄μΈνΈλ HTTP λͺ¨λλ‘ μλ²λ₯Ό μ€ννμ¬ μ°κ²°ν μ μμ΅λλ€:
ASSEMBLY_API_KEY=your-api-key MCP_TRANSPORT=http MCP_PORT=3000 npm start
# β MCP μλν¬μΈνΈ: http://localhost:3000/mcp
# β REST API: http://localhost:3000/api/members?key=YOUR_KEY
# β OpenAPI μ€ν: http://localhost:3000/openapi.json
# β μν νμΈ: http://localhost:3000/health
μΈλΆμμ μ κ·Όνλ €λ©΄ ngrok λ± ν°λλ§ λꡬλ₯Ό μ¬μ©νμΈμ:
ngrok http 3000
μ°λ μ§μ νν©
| ν΄λΌμ΄μΈνΈ | Transport | MCP μ§μ |
|---|---|---|
| Claude Desktop | stdio | β λ€μ΄ν°λΈ |
| Claude Code (CLI) | stdio | β λ€μ΄ν°λΈ |
| Gemini CLI | stdio | β λ€μ΄ν°λΈ |
| VS Code (Copilot/Claude) | stdio | β λ€μ΄ν°λΈ |
| Cursor | stdio | β λ€μ΄ν°λΈ |
| Windsurf | stdio | β λ€μ΄ν°λΈ |
| claude.ai (μΉ) | HTTP | β Integrations (Pro μ΄μ) |
| Claude λͺ¨λ°μΌ (iOS/Android) | HTTP | β Integrations (Pro μ΄μ) |
| ChatGPT (GPTs) | HTTP | β OpenAPI Actions (REST API) |
| Docker / μ격 μλ² | HTTP | β Streamable HTTP |
MCP λꡬ λͺ©λ‘
Lite νλ‘ν (6κ°, κΈ°λ³Έ)
λλ©μΈ μν°ν°(μ¬λ/λ²μ/νμ/κΈ°κ΄) κΈ°λ°μΌλ‘ ν΅ν©λ νλ‘νμ λλ€.
| λꡬ | μ€λͺ |
|---|---|
assembly_member | μμ κ²μ+λΆμ (μ΄λ¦ 1건μ΄λ©΄ μλ μμΈ+λ°μ+νκ²°) |
assembly_bill | μμ κ²μ+μΆμ +ν΅κ³ (keywordsλ‘ μΆμ , mode=statsλ‘ ν΅κ³) |
assembly_session | μΌμ +νμλ‘+νκ²° (type=schedule/meeting/vote) |
assembly_org | μμν+μ²μ+μ λ²μκ³ (type=committee/petition/legislation_notice) |
discover_apis | 276κ° API ν€μλ κ²μ |
query_assembly | λ²μ© API μ§μ νΈμΆ |
νμ© μμλ νμ© μ¬λ‘ 100μ μ μ°Έμ‘°νμΈμ. λꡬ λ§€ν μμΈλ docs/tool-mapping.mdλ₯Ό μ°Έμ‘°νμΈμ.
Full νλ‘ν (11κ°)
MCP_PROFILE=fullλ‘ μ ννλ©΄ Lite 6κ° + Full μ μ© 5κ°λ₯Ό μ¬μ©ν μ μμ΅λλ€.
Lite λꡬ (6κ°) β μμ λμΌ
Full μ μ© (5κ°)
| λꡬ | μ€λͺ |
|---|---|
bill_detail | μμ μ¬μΈ΅ μ‘°ν (μμΈ+μ¬μ¬+μ΄λ ₯+μ μμ+νμ ν΅ν©) |
committee_detail | μμν μ¬μΈ΅ (νν©+μμλͺ λ¨) |
petition_detail | μ²μ μ¬μΈ΅ (λͺ©λ‘+μμΈ) |
research_data | μ°κ΅¬μλ£ ν΅ν© (λμκ΄+μ λ²μ‘°μ¬μ²+μμ°μ μ± μ²) |
get_nabo | NABO λ³΄κ³ μ/μ κΈ°κ°νλ¬Ό/μ±μ©μ 보 (nabo.go.kr) |
CLI μ¬μ©λ²
μμ κ²μ
# μ 체 μμ λͺ©λ‘ (κΈ°λ³Έ 20λͺ
)
npx tsx src/cli.ts members
# μ΄λ¦μΌλ‘ κ²μ
npx tsx src/cli.ts members --name μ΄μ¬λͺ
# μ λΉλ³ κ²μ
npx tsx src/cli.ts members --party λλΆμ΄λ―Όμ£ΌλΉ
npx tsx src/cli.ts members --party κ΅λ―Όμν
# μ κ±°κ΅¬λ³ κ²μ
npx tsx src/cli.ts members --district μμΈ
# κ²°κ³Ό μ μ‘°μ
npx tsx src/cli.ts members --party λλΆμ΄λ―Όμ£ΌλΉ --size 50
μμ μμ νλ
# μμλ³ μΈμ μ¬ν + λ°μ λ²μ μ‘°ν
npx tsx src/cli.ts activity --name λ°μ£Όλ―Ό
npx tsx src/cli.ts activity --name μ΄ν΄λ―Ό
# μ‘°ν 건μ μ‘°μ
npx tsx src/cli.ts activity --name νλν --size 5
μμ κ²μ
# μμλͺ
ν€μλ κ²μ
npx tsx src/cli.ts bills --name AI
npx tsx src/cli.ts bills --name λΆλμ°
npx tsx src/cli.ts bills --name κ΅μ‘
# μμλ²νΈλ‘ κ²μ
npx tsx src/cli.ts bills --bill-no 2204567
# μ μμλ‘ κ²μ
npx tsx src/cli.ts bills --proposer μμ² μ
# νΉμ λμ μμ κ²μ (κΈ°λ³Έ: 22λ)
npx tsx src/cli.ts bills --name νκ²½ --age 21
# κ²°κ³Ό μ μ‘°μ
npx tsx src/cli.ts bills --name μλ£ --size 50
μμ μμΈ
# BILL_IDλ‘ μμ μμΈ μ‘°ν (bills κ²μ κ²°κ³Όμμ BILL_ID νμΈ)
npx tsx src/cli.ts bill-detail <BILL_ID>
νκ²° / κ³λ₯ / μ²λ¦¬ / μ΅κ·Ό μμ
# μμλ³ νκ²° νν©
npx tsx src/cli.ts votes
npx tsx src/cli.ts votes --size 50
# κ³λ₯ μ€μΈ μμ
npx tsx src/cli.ts pending
npx tsx src/cli.ts pending --size 10
# μ²λ¦¬λ μμ
npx tsx src/cli.ts processed
npx tsx src/cli.ts processed --age 21
# μ΅κ·Ό λ³Ένμ μ²λ¦¬ μμ
npx tsx src/cli.ts recent
# λ³Ένμ λΆμμ건
npx tsx src/cli.ts plenary
API νμ λ° ν μ€νΈ
# μ΄λ¦°κ΅νμ 보 μ 체 API λͺ©λ‘ (276κ°)
npx tsx src/cli.ts meta
# μ 체 API μλ ν
μ€νΈ (11κ° ν΅μ¬ API μ κ²)
npx tsx src/cli.ts test
# λμλ§
npx tsx src/cli.ts help
κ΅λ―Όμ°Έμ¬μ λ²μΌν° API (lawmaking.go.kr)
.envμLAWMKING_OC=<λ°κΈλ°μOC>μ€μ νμ
# μ
λ²νν© λͺ©λ‘
npx tsx src/cli.ts lawmaking --type status
# μ
λ²κ³ν λͺ©λ‘ (ν€μλ κ²μ)
npx tsx src/cli.ts lawmaking --type plan --key κ΅μ‘
# μ
λ²μκ³ λͺ©λ‘ (μ§νμ€)
npx tsx src/cli.ts lawmaking --type notice
# νμ μκ³ λͺ©λ‘
npx tsx src/cli.ts lawmaking --type admin
# λ²λ Ήν΄μλ‘ κ²μ
npx tsx src/cli.ts lawmaking --type interpretation --key μλμ°¨
# μ견μ μμ¬λ‘ λͺ©λ‘
npx tsx src/cli.ts lawmaking --type opinion
κ΅νμμ°μ μ± μ² NABO API (nabo.go.kr)
.envμNABO_API_KEY=<λ°κΈλ°μν€>μ€μ νμ
# λ³΄κ³ μ μλ£ κ²μ (κΈ°λ³Έ)
npx tsx src/cli.ts nabo --type report
# ν€μλ κ²μ
npx tsx src/cli.ts nabo --type report --key μμ°
# μ κΈ°κ°νλ¬Ό μ‘°ν
npx tsx src/cli.ts nabo --type periodical
npx tsx src/cli.ts nabo --type periodical --key κ²½μ
# μ±μ©μ 보 μ‘°ν
npx tsx src/cli.ts nabo --type recruitments
# νμ΄μ§λ€μ΄μ
npx tsx src/cli.ts nabo --type report --page 2 --size 20
κ΅μ°¨ κ²μ (2~3κ° API μμ€ ν΅ν©)
cross λͺ
λ Ήμ΄λ‘ κ΅ν(open.assembly.go.kr) + κ΅λ―Όμ°Έμ¬μ
λ²μΌν°(lawmaking.go.kr) + NABO(nabo.go.kr)λ₯Ό λμμ κ²μν©λλ€.
# 2κ° μμ€:κ΅ν + NABO (μ: "κ΅μ‘" κ΄λ ¨ μμκ³Ό μμ° λΆμλ³΄κ³ μ λμ κ²μ)
npx tsx src/cli.ts cross --keyword κ΅μ‘ --sources assembly,nabo
# 2κ° μμ€: κ΅λ―Όμ°Έμ¬μ
λ²μΌν° + NABO (μ: "κ΅ν΅" κ΄λ ¨ μ
λ²μκ³ μ NABO λ³΄κ³ μ λμ κ²μ)
npx tsx src/cli.ts cross --keyword κ΅ν΅ --sources lawmaking,nabo
# 3κ° μμ€:κ΅ν + κ΅λ―Όμ°Έμ¬μ
λ²μΌν° + NABO (μ: "μλ£" κ΄λ ¨ μ
λ² μ /μ€/ν λ°μ΄ν° ν΅ν© κ²μ)
npx tsx src/cli.ts cross --keyword μλ£ --sources assembly,lawmaking,nabo
# μ 체 μμ€ (κΈ°λ³Έκ°, --sources all)
npx tsx src/cli.ts cross --keyword μμ° --sources all --size 10
μΆλ ₯ μμ (--sources assembly,lawmaking,nabo):
=== "κ΅μ‘" κ΅μ°¨ κ²μ (κ΅ν, κ΅λ―Όμ°Έμ¬μ
λ²μΌν°, NABO) ===
[κ΅ν(assembly)] μμ κ²μ (μ΄ N건)
BILL_NO | BILL_NAME | COMMITTEE | PROC_RESULT
---------|-------------------------|------------|------------
2201234 | κ΅μ‘κΈ°λ³Έλ² μΌλΆκ°μ λ²λ₯ μ | κ΅μ‘μμν | κ³λ₯
[κ΅λ―Όμ°Έμ¬μ
λ²μΌν°(lawmaking)] μ
λ²μκ³ (μ΄ N건)
λ²λ Ήλͺ
| μκ΄λΆμ² | κ³΅κ³ μΌμ
--------------|----------|----------
κ΅μ‘κΈ°λ³Έλ² |κ΅μ‘λΆ | 2026.03.01
[NABO(nabo.go.kr)] NABO λ³΄κ³ μ (μ΄ N건)
μ λͺ© | μμ±λΆμ | κ²μμΌ
--------------------------|----------|--------
2026 κ΅μ‘μμ° λΆμλ³΄κ³ μ | NABO | 2026.03.15
μμ€ μ‘°ν© κ°μ΄λ:
| μ‘°ν© | μ©λ | μ€λͺ |
|---|---|---|
assembly,nabo | μ λ² μ€ + μ λ² ν | μμ μ¬μ¬κ²½κ³Ό + NABO μμ° λΆμ |
lawmaking,nabo | μ λ² μ + μ λ² ν | μ λ²μκ³ + NABO μ μ± λ³΄κ³ μ |
assembly,lawmaking | μ λ² μ + μ λ² μ€ | μ λ²μκ³ + μ€μ μμ κ²μ |
all (κΈ°λ³Έ) | μ λ² μ /μ€/ν μ 체 | μ λ² λΌμ΄νμ¬μ΄ν΄ μμ μΆμ |
crossλͺ λ Ήμ΄λ κ° μμ€λ₯Ό λ³λ ¬λ‘ νΈμΆνλ―λ‘ 1κ° μμ€ μ₯μ μμλ λ€λ₯Έ μμ€ κ²°κ³Όλ μ μ λ°νλ©λλ€.
λ¬Έμ
| λ¬Έμ | μ€λͺ |
|---|---|
| QUICK_START.md | 5λΆ μμ μμνλ λΉ λ₯Έ μ€μ κ°μ΄λ |
| design/README.md | λμμΈ μλ£ μ μ₯ κ·μΉ λ° μΈλΆ λμμΈ λꡬ μ¬μ© κ°μ΄λ |
| design/DESIGN.md | μ΄ μ μ₯μμ canonical λμμΈ κΈ°μ€ λ¬Έμ |
| docs/api-catalog.md | κ΅ν Open API 276κ° μ 체 λͺ©λ‘ (μΉ΄ν κ³ λ¦¬λ³ λΆλ₯) |
| docs/mcp-api.md | MCP λꡬ β κ΅ν API μ½λ λ§€ν (271κ° λ°κ΅΄, 107κ° ν΅ν©) |
| docs/discovered-codes.md | API μ½λ λ°κ΅΄ κ³Όμ λ° κ²μ¦λ μλν¬μΈνΈ νλΌλ―Έν° |
| docs/mcp-design-analysis.md | MCP λꡬ μ€κ³ λΆμ λ¬Έμ β Lite/Full νλ‘ν κ²°μ κ·Όκ±° |
| docs/legislative-lifecycle.md | μ λ² λΌμ΄νμ¬μ΄ν΄ μμ κ°μ΄λ β μ λ² μ /μ€/ν λ°μ΄ν° μΆμ |
λ¬Έμ ν΄κ²°
Claude Desktopμμ "server disconnected" μ€λ₯
νλ‘μ νΈμ .env νμΌμ MCP_TRANSPORT=httpμ΄ μ€μ λμ΄ μμΌλ©΄, Claude Desktopμ΄ κΈ°λνλ stdio λͺ¨λ λμ HTTP λͺ¨λλ‘ μλ²κ° μμλ©λλ€. ν΄λΌμ΄μΈνΈ μ€μ μμ MCP_TRANSPORTλ₯Ό λͺ
μμ μΌλ‘ overrideνμΈμ:
{
"mcpServers": {
"assembly-api": {
"command": "node",
"args": ["/absolute/path/to/assembly-api-mcp/dist/index.js"],
"env": {
"ASSEMBLY_API_KEY": "your-api-key",
"MCP_TRANSPORT": "stdio",
"MCP_PROFILE": "lite"
}
}
}
}
.envνμΌμMCP_TRANSPORTκ°μ μλ²κ°dotenvλ‘ μλ λ‘λν©λλ€. ν΄λΌμ΄μΈνΈ μ€μ μenvμμ κ°μ λ³μλ₯Ό μ§μ νλ©΄.envλ³΄λ€ μ°μ μ μ©λ©λλ€.
Claude Desktopμμ λκ΅¬κ° λ³΄μ΄μ§ μμ
Claude Desktopμ μμ ν μ’ λ£ (macOS: Cmd+Q, νΈλ μ΄ μμ΄μ½κΉμ§ λ«κΈ°) ν μ¬μμνμΈμ. μ€μ νμΌ λ³κ²½μ μ¬μμ νμλ§ μ μ©λ©λλ€.
"ASSEMBLY_API_KEYκ° μ€μ λμ§ μμμ΅λλ€"
.env νμΌμ ν€λ₯Ό μ
λ ₯νλμ§ νμΈνμΈμ. Claude Desktop λ± μΈλΆ ν΄λΌμ΄μΈνΈμμ μ€νν λλ ν΄λΌμ΄μΈνΈ μ€μ μ envμλ ν€λ₯Ό μ§μ ν΄μΌ ν©λλ€.
API νΈμΆμ΄ 0건 λ°ν
μΌλΆ APIλ AGE νλΌλ―Έν°κ° νμν©λλ€. λꡬλ€μ μλμΌλ‘ 22λ(νμ¬)λ₯Ό κΈ°λ³Έκ°μΌλ‘ μ¬μ©ν©λλ€.
Rate Limit μ΄κ³Ό
κ°λ°κ³μ μ μ 10,000건 μ νμ
λλ€. npx tsx src/cli.ts testλ‘ νμ¬ μνλ₯Ό νμΈνμΈμ.
ν¬νΈ μΆ©λ (HTTP λͺ¨λ)
HTTP λͺ¨λμμ EADDRINUSE μ€λ₯κ° λ°μνλ©΄ ν΄λΉ ν¬νΈλ₯Ό μ¬μ© μ€μΈ νλ‘μΈμ€λ₯Ό νμΈνμΈμ:
lsof -i :3000
# λ€λ₯Έ ν¬νΈλ‘ λ³κ²½
MCP_PORT=3001 npm start
νκ²½ λ³μ
| λ³μ | νμ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|---|
ASSEMBLY_API_KEY | O | - | μ΄λ¦°κ΅νμ 보 API ν€ |
DATA_GO_KR_SERVICE_KEY | X | - | 곡곡λ°μ΄ν°ν¬νΈ ServiceKey |
NANET_API_KEY | X | - | κ΅νλμκ΄ API ν€ |
NABO_API_KEY | X | - | κ΅νμμ°μ μ± μ² API ν€ |
LAWMKING_OC | X | - | κ΅λ―Όμ°Έμ¬μ λ²μΌν° OC (μ λ³΄κ³΅κ° μλΉμ€ μ μ² ID) |
MCP_PROFILE | X | lite | lite λλ full |
MCP_TRANSPORT | X | stdio | stdio λλ http |
MCP_PORT | X | 3000 | HTTP λͺ¨λ ν¬νΈ |
LOG_LEVEL | X | info | λ‘κ·Έ λ 벨 |
CACHE_ENABLED | X | true | μΊμ νμ±ν |
API ν€ λ°κΈ
- μ΄λ¦°κ΅νμ 보 μ μ
- νμκ°μ (무λ£)
- λ‘κ·ΈμΈ ν λ§μ΄νμ΄μ§ > OPEN API > μΈμ¦ν€ λ°κΈ
- λ°κΈλ°μ ν€λ₯Ό
.envνμΌμASSEMBLY_API_KEYμ μ λ ₯
sampleν€λ‘ μ΅λ 10건κΉμ§ ν μ€νΈν μ μμ΅λλ€.
κ΅λ―Όμ°Έμ¬μ λ²μΌν° API ν€ λ°κΈ
- opinion.lawmaking.go.kr μ μ
- μ λ³΄κ³΅κ° μλΉμ€ μ μ² (무λ£)
- μ μ² μΉμΈ ν OC(Organization Code) νμΈ β
@μλΆλΆμ΄ OCμ λλ€ .envνμΌμLAWMKING_OC=<OCκ°>μΌλ‘ μ λ ₯
νλ‘μ νΈ κ΅¬μ‘°
assembly-api/
βββ src/
β βββ index.ts # MCP μλ² μ§μ
μ
β βββ server.ts # McpServer μ΄κΈ°ν (stdio/HTTP)
β βββ config.ts # νκ²½ λ³μ μ€μ
β βββ cli.ts # CLI μΈν°νμ΄μ€
β βββ api/
β β βββ client.ts # HTTP ν΄λΌμ΄μΈνΈ (μΊμ±/λͺ¨λν°λ§ ν΅ν©)
β β βββ cache.ts # μΈλ©λͺ¨λ¦¬ TTL μΊμ (LRU)
β β βββ codes.ts # κ²μ¦λ API μ½λ λ§€ν
β β βββ monitor.ts # API μλ΅ μκ° λͺ¨λν°λ§
β β βββ rate-limiter.ts # Rate Limit μΆμ
β βββ tools/ # MCP λꡬ (Lite 6κ° / Full 11κ°)
β β βββ lite/ # Lite νλ‘ν λꡬ (6κ°)
β βββ openapi/ # OpenAPI REST λΈλ¦Ώμ§
β β βββ router.ts # REST λΌμ°ν° (/api/*)
β β βββ handlers.ts # REST νΈλ€λ¬ (18κ° μλν¬μΈνΈ)
β β βββ spec.ts # OpenAPI 3.1 μ€ν μμ±
β βββ resources/ # MCP μ μ 리μμ€
β βββ prompts/ # MCP ν둬ννΈ ν
νλ¦Ώ
βββ tests/ # λ¨μ ν
μ€νΈ (235κ°)
βββ examples/
β βββ api-tester.html # λΈλΌμ°μ API ν
μ€ν°
βββ design/
β βββ DESIGN.md # canonical λμμΈ κΈ°μ€ λ¬Έμ
β βββ README.md # λμμΈ μλ£ μ μ₯ κ·μΉ
βββ docs/
β βββ api-catalog.md # κ΅ν API 276κ° μ 체 λͺ©λ‘
β βββ mcp-api.md # MCP λꡬ β API λ§€ν
β βββ discovered-codes.md # λ°κ΅΄λ API μ½λ
β βββ mcp-design-analysis.md # MCP λꡬ μ€κ³ λΆμ
βββ .env.example # νκ²½ λ³μ ν
νλ¦Ώ
βββ Dockerfile # Docker μ΄λ―Έμ§
βββ docker-compose.yml # Docker Compose
βββ QUICK_START.md # λΉ λ₯Έ μμ κ°μ΄λ
κ°λ°
npm run build # TypeScript λΉλ
npm test # ν
μ€νΈ μ€ν
npm run dev # κ°λ° λͺ¨λ (tsx)
npm run cli # CLI μ€ν
npm run lint # νμ
μ²΄ν¬ (tsc --noEmit)
Docker
docker compose up -d
# HTTP λͺ¨λλ‘ ν¬νΈ 3000μμ μ€ν
# Health check: curl localhost:3000/health
μ°Έκ³ νλ‘μ νΈ
- korean-law-mcp β νκ΅ λ²λ₯ MCP μλ²
- data-go-mcp-servers β 곡곡λ°μ΄ν° MCP μλ²
Star history
λΌμ΄μ μ€
MIT License - LICENSE μ°Έμ‘°
Jonghong Jeon (hollobit@etri.re.kr)
