Skip to main content
Glama
README.md
# Bid Radar

나라장터(G2B)와 국방전자조달(D2B)의 입찰 정보를 Claude에서 바로 찾고 정리하는 MCP 서버입니다.
공공데이터포털에서 발급받은 **본인 인증키**로 동작하고, API 원자료만 출처·원문 링크와 함께 보여줍니다.

| | 조회 대상 | 필요한 공공데이터포털 API(활용신청) |
|---|---|---|
| **G2B Bid Radar** | 조달청 나라장터 | 입찰공고정보 · 낙찰정보 · 사전규격정보 · 사용자정보 서비스 |
| **D2B Bid Radar** | 방위사업청 국방전자조달 — 시설(공사·용역) | 군수품조달정보 조달계획 · 입찰공고 · 입찰결과 · 계약정보 (_GW) |

두 서버는 따로 설치합니다. 나라장터만 보면 G2B, 군 시설사업까지 보면 둘 다 설치하세요. 같은 인증키 하나로 둘 다 쓰고, 활용승인된 API만으로도 동작합니다(승인 안 된 API를 쓰는 도구는 그 사실을 알려줍니다).

## 무엇을 할 수 있나

| 하고 싶은 일 | 이렇게 물어보면 |
|---|---|
| 매일 아침 내 분야 새 공고만 보기 | "오늘 새 공고 브리핑해줘" |
| 마감을 놓치지 않기 | "앞으로 2주 마감 일정 보여줘" |
| 들어갈 수 있는 공고인지 1차 확인 | "이 공고 우리 면허로 들어갈 수 있어?" |
| 공고 내용·정정 내역 확인 | "공고 R26BK01772063 상세랑 변경이력 보여줘" |
| 개찰 결과와 순위, 낙찰률 보기 | "이 공고 개찰 결과 알려줘", "최근 석 달 설계용역 낙찰률 정리해줘" |
| 경쟁사·우리 회사 낙찰 이력 | "사업자번호 123-45-67890 낙찰 이력 보여줘" |
| 공고 전에 미리 보기 | "다음 달 나올 설계 사전규격 있어?", "D2B 조달계획에 감리 용역 있어?" |
| 군 시설사업 하나를 처음부터 끝까지 | "공사번호 2026-15121 계획부터 계약까지 보여줘" |

## 주요 기능

**G2B Bid Radar**

| 도구 | 하는 일 |
|---|---|
| `g2b_briefing` | 관심 키워드로 지난 브리핑 이후 새 공고·사전규격 |
| `g2b_deadlines` | 관심 공고의 PQ·참가등록·협정·입찰 마감(개찰 선택)을 날짜·D-day 순으로 |
| `g2b_eligibility` | 공고 면허 제한 ↔ 회사 등록업종 대조(그룹별 충족 여부) |
| `g2b_search_bids` | 입찰공고 검색 — 공고명·기관·업종·지역·금액·기간 |
| `g2b_bid_detail` | 공고 1건 종합카드 — 금액·일정·기초금액·면허제한·참가지역·첨부파일 |
| `g2b_bid_changes` | 공고 변경이력(변경 전/후 값) |
| `g2b_bid_result` | 개찰결과 — 낙찰업체·낙찰률·예정가격·개찰순위표·유찰 사유 |
| `g2b_search_awards` | 낙찰 목록 검색과 낙찰률 요약(업체별 이력 포함) |
| `g2b_search_prespecs` | 사전규격 검색 |
| `g2b_company_profile` | 조달업체 조회 — 기본정보·등록업종·부정당제재 이력 |
| `g2b_keywords` | 관심 키워드 저장(D2B와 공통) |
| `g2b_check_setup` · `g2b_update` | 승인 상태 점검 · 새 버전 받기 |

**D2B Bid Radar**

| 도구 | 하는 일 |
|---|---|
| `d2b_briefing` | 관심 키워드로 새 경쟁입찰·마감 전 공개수의(이미 본 건 제외) |
| `d2b_deadlines` | 관심 공고의 참가등록·입찰서·견적서 마감(개찰 선택) 일정 |
| `d2b_eligibility` | 공고 면허 목록 ↔ 회사 등록업종 대조 |
| `d2b_search_bids` | 시설 경쟁입찰공고·공개수의협상 검색(진행 중 우선, 원문 링크) |
| `d2b_bid_detail` | 공고 1건 상세 — 공사개요·금액·사정률·면허·일정(마감된 공고 포함) |
| `d2b_plans` | 조달계획(발주 예정 사업) |
| `d2b_search_results` · `d2b_bid_result` | 입찰결과 검색 · 낙찰업체·순위표·복수예비가격 |
| `d2b_contracts` | 계약정보 — 계약업체·금액·장기계속 차수 |
| `d2b_project` | 공사번호 하나로 계획 → 공고 → 결과 → 계약 |
| `d2b_keywords` | 관심 키워드 저장(G2B와 공통) |
| `d2b_check_setup` · `d2b_update` | 승인 상태 점검 · 새 버전 받기 |

## 설치

### 0. 인증키 받기

1. [공공데이터포털](https://www.data.go.kr)에 로그인합니다.
2. 위 표의 API를 검색해 각각 **활용신청**합니다.
3. 마이페이지의 인증키 정보에서 **일반 인증키(Decoding)** 를 복사합니다.

### Claude 데스크톱 — 파일로 설치 (가장 쉬움)

1. [Releases](https://github.com/Jaem-Shin/bid-radar/releases)에서 `g2b-bid-radar-x.x.x.mcpb` / `d2b-bid-radar-x.x.x.mcpb`를 받습니다.
2. Claude 데스크톱 → **설정 → 확장 프로그램 → 고급 설정 → 확장 프로그램 설치…** 에서 받은 파일을 고릅니다.
3. 인증키(필수)와 회사 사업자번호(선택)를 넣고 켭니다.

설치는 처음 한 번만 합니다. 이후 새 버전은 자동으로 받습니다(아래 '업데이트').

> [!IMPORTANT]
> 아래 명령·설정의 **`여기에_인증키_입력`** 자리에 본인의 공공데이터포털 일반 인증키(Decoding)를 넣으세요.

### Claude Code

**G2B Bid Radar**

```bash
claude mcp add -s user -e DATA_GO_KR_SERVICE_KEY=여기에_인증키_입력 --transport stdio g2b-bid-radar -- npx -y github:Jaem-Shin/bid-radar g2b
```

**D2B Bid Radar**

```bash
claude mcp add -s user -e DATA_GO_KR_SERVICE_KEY=여기에_인증키_입력 --transport stdio d2b-bid-radar -- npx -y github:Jaem-Shin/bid-radar d2b
```

### 그 밖의 MCP 클라이언트 (Cursor, Windsurf, Claude 데스크톱 설정 파일 등)

MCP 설정 파일의 `mcpServers` 안에 넣습니다. 둘 다 쓰면 두 블록을 모두 넣으세요.

**G2B Bid Radar**

```json
"g2b-bid-radar": {
  "command": "npx",
  "args": ["-y", "github:Jaem-Shin/bid-radar", "g2b"],
  "env": { "DATA_GO_KR_SERVICE_KEY": "여기에_인증키_입력", "MY_BIZNO": "" }
}
```

**D2B Bid Radar**

```json
"d2b-bid-radar": {
  "command": "npx",
  "args": ["-y", "github:Jaem-Shin/bid-radar", "d2b"],
  "env": { "DATA_GO_KR_SERVICE_KEY": "여기에_인증키_입력", "MY_BIZNO": "" }
}
```

npx 방식은 Node.js 18 이상과 Git이 필요합니다. `MY_BIZNO`(회사 사업자번호, 선택)를 넣으면 결과에서 우리 회사가 ★로 표시되고 참가자격 점검의 기본값이 됩니다.

## 사용법

### 처음 한 번

1. "G2B 설정 점검해줘" / "D2B 설정 점검해줘" — 인증키와 API 승인 상태를 확인합니다.
2. "관심 키워드에 설계 추가해줘" — 브리핑·마감 일정판이 이 키워드로 **전 기관**의 공고명을 찾습니다. G2B·D2B가 같은 키워드를 씁니다.
   - 설계사무소: `설계` · 건설사업관리(CM): `건설사업관리`, `감리`

### 매일 쓰기 — 브리핑과 검색의 차이

| | 이렇게 말하면 | 보여주는 것 |
|---|---|---|
| **브리핑** | "브리핑해줘" | 지난 브리핑 이후 **새로 올라온 것만**. 이미 보여준 건은 다음에 빼고 보여줍니다 |
| **다시 보기** | "10월 13일부터 다시 브리핑해줘" | 그날부터 전부(최대 7일). 평소 브리핑 기록에는 영향 없음 |
| **검색** | "최근 3일 설계 공고 찾아줘" | 기간 안의 공고 전부(본 건 포함) |

키워드가 넓어 결과가 많으면 "1억 이상만"처럼 금액 하한을 붙이세요. 마감 일정판은 기본으로 개찰을 빼고 마감만 보여주며, "개찰도 포함해서"라고 하면 넣습니다.

### 업데이트

**자동 업데이트** (파일로 설치한 경우, 기본 켜짐)

- Claude를 켤 때(마지막 확인 후 6시간이 지났으면)와 켜져 있는 동안 6시간마다 새 버전을 확인합니다.
- 켤 때 몇 초 안에 받으면 바로 적용되고, 그렇지 않으면 받아 두었다가 **다음에 켤 때** 적용됩니다.
- 개발자 서명이 확인된 버전만 설치합니다. 내려받기나 검증에 실패하면 지금 버전을 그대로 씁니다.

**바로 받기 (수동 업데이트)** — 순서가 중요합니다.

1. "G2B 업데이트 확인해줘"(또는 D2B) — `✓ 업데이트를 받았습니다`가 나오면
2. 작업 표시줄 트레이(화면 오른쪽 아래)의 Claude 아이콘 → **종료** 후 다시 켭니다

> [!NOTE]
> - 창의 X 버튼은 창만 닫습니다. Claude가 트레이에 남아 있으면 새 버전이 적용되지 않으니, 반드시 트레이에서 **종료**하세요.
> - 확인보다 재시작을 먼저 하면 받을 것이 없어 그대로입니다. **확인 → 종료 → 다시 켜기** 순서로 하세요.
> - 지금 버전은 "G2B 설정 점검해줘"로 볼 수 있습니다(버전 · 마지막 확인 결과).
> - 확장 설정에서 자동 업데이트를 꺼도 수동 업데이트는 됩니다.
> - 업데이트나 .mcpb 재설치를 해도 관심 키워드와 브리핑 기록은 그대로 남습니다.

**Claude Code · npx 방식**은 업데이트 도구를 쓰지 않고, 실행할 때 저장소에서 코드를 받습니다. 새 버전이 반영되지 않으면 npx 캐시 폴더(`~/.npm/_npx`, Windows는 `%LOCALAPPDATA%\npm-cache\_npx`)를 지운 뒤 다시 시작하세요.

### 결과를 읽는 법

- 모든 값은 API 원자료입니다. 원자료로 계산한 값(D-day, 사정률, 낙찰률 요약)에는 **(계산)** 이 붙습니다.
- 자료가 없으면 추측하지 않고 **[NOT_FOUND]**, 출처끼리 값이 다르면 **⚠ 불일치**, 일부 조회가 실패하면 **⚠ 조회 실패**로 표시합니다.
- 참가자격 점검은 면허만 대조하는 1차 확인입니다. 최종 판단은 반드시 공고서로 하세요.
- 업체 대표자명·전화번호는 표시하지 않고, 발주기관 담당자는 나라장터 공개 화면처럼 성만 표시합니다(연락처는 원문에서 로그인 후 확인).

## 사용 예제

실제 조회 결과입니다(2026-10-15, 일부 생략).

### 새 공고 브리핑 (D2B)

> "브리핑해줘" — 관심 키워드 `설계`

```text
[D2B 신규 공고 브리핑] 공고일 2026-10-14 ~ 2026-10-15 · 이미 보여준 건 제외 · 키워드 설계 · 용역 · 전 기관

◆ 경쟁입찰공고 (새로 공고됨) 1건
■ [경쟁·용역] 26-호우피해-1공구 설계용역
  공고번호 LHQ0172-1 · 긴급공고 · 공사번호 2026-16204
  발주기관 제2작전사령부 (LHQ)
  방식 일반경쟁 · 전자입찰 · 기초예비가격 28,158,000원 (약 2,816만)
  공고 20261014 · 참가등록마감 202610191000 (D-4) · 입찰서마감 202610201000 (D-5) · 개찰 202610201030
  https://www.d2b.go.kr/peb/bid/announceView.do?dprt_code=LHQ&anmt_divs=B&anmt_numb=LHQ0172&…

◆ 공개수의협상 (마감 전, 처음 보는 건) 13건
■ [공개수의·용역] 27년 재난예방공사 설계 용역(1공구)
  공고번호 LNG0335-1 · 공사번호 2026-16007 · 진행중
  발주기관 육군 제1군단 (LNG)
  예산 65,495,000원 (약 6,550만) · 총액제
  견적서마감 202610161000 (D-1) · 개찰 202610161030
…
```

### 마감 일정판 (D2B)

> "앞으로 일주일 마감 일정 보여줘"

```text
[D2B 마감 일정판] 앞으로 7일 · 키워드 설계 · 용역 · 전 기관
대상 경쟁입찰 1건 · 공개수의 16건 · 일정 18개 (개찰 제외) · D-day는 계산값

▶ 10/16(금) D-1
  10:00 견적서 마감(공개수의) — 27년 재난예방공사 설계 용역(1공구) · LNG0335-1 · 육군 제1군단
  10:00 견적서 마감(공개수의) — 26-038 00부대 재난예방공사 설계용역 · LCK0185-1 · 수도방위사령부

▶ 10/19(월) D-4
  10:00 참가등록 마감 — 26-호우피해-1공구 설계용역 · LHQ0172-1 · 제2작전사령부

▶ 10/20(화) D-5
  10:00 입찰서 마감 — 26-호우피해-1공구 설계용역 · LHQ0172-1 · 제2작전사령부
  10:00 견적서 마감(공개수의) — 27년 계획보수 1공구 사전실시설계 용역 · LPN0170-1 · 수도군단
…
```

### 참가자격 점검 (D2B)

> "LHQ0172 우리 면허로 들어갈 수 있어?"

```text
[D2B 참가자격 점검] 26-호우피해-1공구 설계용역
공고번호 LHQ0172-1 · 경쟁 · 제2작전사령부

판정: △ 일부만 보유 — 면허 그룹 구성(모두 필요/하나만)이 API에 없어 판정 보류. 원문 공고서의 '공종 및 면허제한'을 확인하세요.

◆ 면허 대조 — ✓ 보유 · ✗ 미보유 · ⚠ 보유했지만 만료·상태 확인
  ✓ 엔지니어링사업(토질, 지질)[3588]
  ✗ 기술사사무소(토질,지질)[7378]
```

나라장터 공고는 면허 그룹 정보가 있어 `✓ 면허 조건 충족 (그룹 1)`처럼 판정까지 보여줍니다.

### 개찰 결과 — 순위표와 복수예비가격 (D2B)

> "UMM0919 개찰 결과 알려줘"

```text
■ 26-A-00부대 건설폐기물처리용역(A246) — 순위확정
  공고번호 UMM0919-1 · 공사번호 2026-15121 · 발주기관 국군재정관리단 (UMM) · 개찰 202610131100
  낙찰업체: (합)우창환경산업 (224-81-30657)
  예산 708,715,000원 (약 7.09억) · 기초예비가격 694,818,620원 (약 6.95억) · 사정률 -2.00 ~ 2.00 · 낙찰하한율 85.495%
  복수예비가격 15개 · 선택된 순번 4, 6, 10, 15
  참가업체 68개사 (순위 39 · 순위외 29) — 상위 3:
    1위 (합)우창환경산업 (224-81-30657) · 595,960,000원 (약 5.96억) · 투찰률 85.502%
    2위 (주)상보산업 (222-81-06772) · 596,098,000원 (약 5.96억) · 투찰률 85.522%
    3위 노은환경개발(주) (303-81-37991) · 596,208,100원 (약 5.96억) · 투찰률 85.537%
  결과 원문: https://www.d2b.go.kr/peb/bid/bidResultView.do?…
```

### 낙찰 결과와 낙찰률 (G2B)

> "7월 이후 국군재정관리단 설계용역 낙찰 결과 보여줘"

```text
[낙찰 결과 검색] 2026-07-01 ~ 2026-10-15 (개찰일 기준)
API 집계 12건 (용역 12건) · 아래 표시 5건

■ [용역] 26-D-00부대 설계용역(B544)
  공고번호 R26BK01672451-000 · 수요기관 국방부 국군재정관리단
  개찰 2026-08-25 11:28:00 · 참가 42개사
  낙찰 주식회사 이가종합건축사사무소 (211-86-61197) · 339,204,000원 (약 3.39억) · 낙찰률 86.912%
…
◆ 표시된 5건 요약 (계산)
  낙찰률 최소 85.751% · 중앙값 86.775% · 최대 86.991% (낙찰률 있는 5건)
  평균 참가업체수 44.6개사
```

## 한계와 주의

- **판단은 사람이**: 참가자격 점검은 면허 대조까지입니다. 실적·기술인력·지역 의무 공동도급 등은 공고서로 확인하세요.
- **D2B 면허 그룹**: D2B API는 면허 그룹(모두 필요/하나만)을 주지 않아, 일부만 보유하면 판정하지 않고 원문 확인으로 안내합니다.
- **D2B 원문 링크**: 공식 API가 아니라 D2B 사이트 화면이 쓰는 주소로 만듭니다. 사이트가 바뀌면 링크가 깨질 수 있고, 그때는 공고번호로 직접 찾으세요. 계약 원문 링크는 제공하지 않습니다. D2B 페이지를 열면 보안프로그램 설치 창이 뜰 수 있는데, 열람만 할 때는 설치하지 않아도 됩니다.
- **D2B 공고 목록**: 방위사업청 API는 진행 중인 경쟁입찰만 목록으로 줍니다. 마감된 공고는 입찰결과에서 찾아 상세를 보여줍니다.
- **변경이력**: 나라장터 변경이력 API에 기록이 없는 변경공고가 있습니다. 그런 경우 공고에 적힌 변경 사유와 원문 링크를 안내합니다.
- **호출 한도**: 공공데이터포털 API의 일일 호출 한도는 각자의 인증키 기준입니다.

## 업데이트 내역

| 버전 | 날짜 | 내용 |
|---|---|---|
| 1.0.0 | 2026-10-15 | 첫 정식 버전 |

전체 내역은 [CHANGELOG](CHANGELOG.md)에 있습니다.

## 라이선스

[MIT](LICENSE) · 데이터 출처: 공공데이터포털(조달청, 방위사업청) · 조달청·방위사업청과 관계없는 개인 프로젝트입니다.