
Apify MCP 서버를 사용하여 Claude에 싱가포르 정부 입찰 도구 제공하는 방법
요약
Apify MCP 서버를 사용하여 Claude가 싱가포르 정부 조달 시스템인 GeBIZ의 실시간 데이터를 조회할 수 있도록 연결하는 방법을 설명합니다. MCP 표준을 통해 에이전트가 스스로 필요한 도구를 호출하고 구조화된 데이터를 가져오는 워크플로우를 구축합니다.
핵심 포인트
- MCP를 통해 Claude가 외부 도구(Apify Actor)를 스스로 호출하도록 설정 가능
- GeBIZ 스크래퍼를 활용해 실시간 정부 입찰 및 낙찰 데이터를 확보
- 하드코딩된 API 호출 대신 에이전트가 실행 시점을 결정하는 구조 구현
- 구조화된 입출력을 통해 모델의 환각(Hallucination) 방지 및 정확도 향상
싱가포르 공공 부문에 제품을 판매한다면, 정부가 이미 무엇을, 누구로부터, 얼마에 구매하고 있는지 아는 것이 가장 유용한 정보입니다. 그 정보는 존재하며 공개되어 있고, 싱가포르 정부 전자 조달 등록 시스템인 GeBIZ에 저장되어 있습니다. 문제는 접근성이 아닙니다. 문제는 GeBIZ가 일회성 인간 검색을 위해 구축된 포털이라는 점이며, 입찰 또는 캡처(capture) 팀이 실제로 던지는 "50개의 낙찰 사례를 읽고 패턴을 알려달라"와 같은 질문에는 적합하지 않다는 것입니다.
Claude에게 기억에 의존해 동일한 질문을 던지면, Claude는 기꺼이 답변을 지어낼 것입니다. Claude는 Workforce Singapore가 2025년 5월에 AvePoint에 217만 싱가포르 달러(S$2.17M) 규모의 SaaS 계약을 수여했다는 사실을 알지 못하며, 압박하면 추측을 할 것입니다. 입찰 결정에 영향을 미치는 그 어떤 것이든, 자신감 있는 추측은 답변이 없는 것보다 더 나쁩니다.
이 가이드에서 우리는 그 문제를 해결합니다. 우리는 Claude를 공식 Apify MCP 서버에 연결하고, GeBIZ 낙찰 계약을 읽는 단일 Actor를 노출하여, "누가 싱가포르 정부 소프트웨어 사업을 따내고 있는가?"라는 질문을 추측이 아닌 등록 시스템에 대한 실시간 쿼리로 전환합니다. 이 가이드를 마칠 때쯤이면 여러분은 Claude, Cursor 또는 모든 MCP 클라이언트가 대화 도중에 호출할 수 있는 작동 가능한 시장 정보(market-intelligence) 도구를 갖게 될 것이며, 실행 과정 중 도구가 어디에서 실행되고 무엇을 반환하는지 정확히 이해하게 될 것입니다.
아래의 모든 내용은 실제 출력값이 포함된 실제 설정입니다. 모의 응답(mocked responses)은 없습니다.
Apify MCP 서버란 무엇인가?
Model Context Protocol (MCP)는 AI 클라이언트가 외부 도구를 호출할 수 있게 해주는 개방형 표준입니다. Apify MCP 서버(https://mcp.apify.com)는 Apify 플랫폼 상에서 해당 표준을 구현하며, 이는 Apify Store에 있는 수천 개의 Actor 각각이 에이전트가 호출할 수 있는 도구가 된다는 것을 의미합니다.
왜 API 호출을 하드코딩하는 대신 MCP를 통해 Actor를 라우팅할까요?
- 에이전트가 호출 시점을 결정합니다. Claude는 대화를 읽다가 자신에게 없는 사실이 필요하다는 것을 인지하면 스스로 도구를 호출합니다. 모든 질문에 대해 일일이 글루 코드 (glue code)를 작성할 필요가 없습니다.
- 구조화된 입출력. MCP 서버가 Claude에게 Actor의 입력 스키마 (input schema)를 전달하므로, 모델은 파라미터 (parameters)를 정확하게 채워 넣고 추론할 수 있는 깔끔한 데이터셋을 반환합니다.
- 하나의 연결로 여러 도구 사용. 동일한 MCP 엔드포인트 (endpoint)가
search-actors,fetch-actor-details,call-actor를 노출하므로, 에이전트는 새로운 설정 없이도 어떤 Actor든 찾아내고 실행할 수 있습니다. - 인프라 구축 불필요. 서버는 호스팅되어 있습니다. 설정 파일에 몇 줄만 추가하면 끝납니다.
사용할 Actor
우리는 Singapore GeBIZ Government Contracts Scraper를 노출할 것입니다. 이 도구는 GeBIZ에서 낙찰된 입찰 정보를 읽어와 각 항목에 대해 입찰 번호, 조달 기관, 낙찰 공급업체, 낙찰 금액 및 통화, 낙찰 날짜, 입찰 상태와 같은 구조화된 기록을 반환합니다. 최신 낙찰 정보를 가져오거나,
📌 참고: 이 토큰은 비밀(secret)입니다. 클라이언트 설정(client config)에만 보관하고, 프롬프트에 넣거나 커밋된 파일에 절대 포함하지 마세요.
2단계: Claude Desktop을 Apify MCP 서버로 지정하기
Claude Desktop의 설정 파일(Settings → Developer → Edit Config, 또는 macOS의 경우 ~/Library/Application Support/Claude/claude_desktop_config.json)을 열고 Apify 서버를 추가합니다. tools 쿼리 파라미터가 중요한 부분입니다. 이 파라미터는 서버에 어떤 Actor를 노출할지 알려주어, Claude가 전체 Store 대신 특정 기능에 집중된 하나의 도구(tool)를 가져올 수 있게 합니다.
{
"mcpServers": {
"apify": {
...
Cursor는 .cursor/mcp.json에서 동일한 JSON을 사용합니다. 호스팅된 엔드포인트(hosted endpoint) 대신 stdio를 통해 로컬에서 실행하는 것을 선호한다면 다음과 같이 설정합니다:
{
"mcpServers": {
"apify": {
...
새로운 서버를 인식할 수 있도록 Claude Desktop을 재시작하세요.
3단계: 도구가 로드되었는지 확인하기
재시작 후, Actor가 호출 가능한 도구(callable tool)로 나타납니다. Apify 서버가 노출하는 도구 목록을 나열하면, 스토리지 헬퍼(storage helpers)와 함께 Store 핸들 이름을 가진 Actor 자체가 표시됩니다:
get-actor-run, get-dataset-items, get-key-value-store-record,
abort-actor-run, scrapers_lat--singapore-gebiz-contracts-scraper
마지막 항목인 scrapers_lat--singapore-gebiz-contracts-scraper가 바로 우리의 조달 도구입니다. 이제 Claude는 이 도구가 존재한다는 것과, 무엇을 하는지(Actor의 README를 통해), 그리고 어떤 입력값(서버가 전달하는 input schema를 통해)을 받는지 알고 있습니다.
4단계: Claude에게 시장에 대해 질문하기
이제 결과물을 확인할 차례입니다. 일반적인 채팅에서 실제 사실(ground truth)이 필요한 질문을 던져보세요:
"우리는 싱가포르 공공 부문에 SaaS를 판매합니다. 최근 GeBIZ 소프트웨어 낙찰 정보를 가져와서 누가 낙찰되었는지, 어느 기관인지, 그리고 계약 금액이 얼마인지 확인할 수 있게 해주세요."
Claude는 자신의 기억만으로는 이 질문에 신뢰할 수 있게 답할 수 없음을 인지하고, GeBIZ 도구를 선택한 뒤 사용자의 질문에서 입력값을 채웁니다. 내부적으로 클라이언트는 Actor의 파라미터와 함께 tools/call을 전송합니다:
{
"name": "scrapers_lat--singapore-gebiz-contracts-scraper",
"arguments": {
...
Apify MCP 서버는 Actor를 시작하고, 완료될 때까지 기다린 후 데이터셋 (dataset)을 반환합니다. 다음은 생성된 실제 실행 메타데이터 (run metadata)입니다:
{
"runId": "yzPcUrUNdDn1pHyH6",
"actorName": "scrapers_lat/singapore-gebiz-contracts-scraper",
...
등록부 (register)를 대상으로 실시간 실행한 결과, 3초가 조금 넘게 소요되었습니다.
5단계: 실제 출력 결과 읽기
도구가 반환하는 데이터셋은 계약당 하나의 객체로 구성된 구조화된 낙찰 데이터 (structured award data)입니다. 다음은 해당 실행에서 추출된 실제 기록입니다:
{
"tenderNo": "WSG000ETT25000003",
"description": "Provision of Public Cloud Integrated Training and Learning Management System (ITLMS) Software as a Service (SaaS)",
...
Claude는 이를 읽고 평이한 언어로 답변합니다: Workforce Singapore는 2025년 5월, 입찰 번호 WSG000ETT25000003에 따라 AvePoint Singapore에 S$2,177,024.50 규모의 퍼블릭 클라우드 학습 관리 SaaS 계약을 체결했습니다. 이 모든 사실은 모델의 기억이 아니라 등록부 (register)를 통해 추적 가능한 정보입니다.

이 도구의 가치는 단일 행이 아니라 데이터 세트 (set)에 있습니다. 동일한 25건의 낙찰 사례를 통해 Workforce Singapore가 반복적인 SaaS 구매자라는 점, 낙찰 금액이 S$0.5M에서 S$5M 범위에 집중되어 있다는 점, 그리고 ST Engineering Mission Software와 같은 기존 업체 (incumbents)가 여러 해에 걸쳐 유사한 iBPMS 작업을 수주하고 재수주한다는 점을 확인할 수 있습니다. 이는 단 한 번의 쿼리로 조립된 경쟁 지도 (competitive map)이며, 사람이 직접 구축하려면 GeBIZ를 오후 내내 뒤져야 했을 작업입니다.
실제 사용 사례: 입찰 자격 검증 에이전트 (bid-qualification agent)
맥락을 살펴보겠습니다. SaaS 벤더의 캡처 매니저 (capture manager)가 이번 분기에 어떤 싱가포르 정부 기회를 추구할 가치가 있는지 결정하고 있습니다. 입찰 팀을 투입하기 전에, 그들은 다음 사항을 알아야 합니다:
- 어떤 기관이 실제로 해당 카테고리의 소프트웨어를 구매하는지,
- 낙찰된 계약의 가치는 얼마였는지,
- 기존 공급업체(incumbent supplier)가 누구인지 (기존 업체를 밀어내는 것은 경쟁이 없는 상태에서의 입찰과는 다르기 때문입니다).
도구가 없다면, 분석가는 GeBIZ를 열고, 키워드를 검색하고, 각 낙찰 내역을 클릭한 뒤, 기관, 공급업체, 금액을 스프레드시트에 한 줄씩 복사해야 합니다. 이 도구를 Claude에 연결하면, 분석가는 에이전트에게 특정 키워드에 대한 최근 낙찰 내역을 가져오고, 기관별로 그룹화하며, 총 낙찰 금액 기준으로 공급업체를 순위 매기라고 요청할 수 있습니다. Claude는 Actor를 호출하고, 반환된 데이터셋을 추론하여, 각 기관별로 기존 업체가 명시된 짧은 타겟 리스트를 생성합니다. 수동으로 페이지를 넘기는 작업은 사라지고, 자격 검증(qualification) 단계는 인간의 몫으로 남습니다.
이것이 모든 훌륭한 에이전트 도구의 형태입니다. 즉, 의사결정이 아닌 기계적인 데이터 호출(mechanical fetch)을 제거하는 것입니다.
더 나아가기: 두 번째 도구 체이닝 (chain a second tool)
누가 계약을 따냈는지 아는 것이 첫 번째 질문입니다. 그다음 당연한 질문은 "그 공급업체가 정확히 누구인가?"입니다. 동일한 MCP 연결을 통해 tools 파라미터를 확장함으로써 더 많은 Actor를 노출할 수 있습니다:
이제 에이전트는 동일한 대화 내에서 GeBIZ로부터 낙찰 내역을 가져오는 동시에 싱가포르 공식 ACRA 기업 등록부에서 낙찰된 공급업체를 조회할 수 있으며, "AVEPOINT SINGAPORE PTE. LTD."를 해당 기업의 UEN(고유 엔티티 번호), 설립일, 등록 주소 및 현재 상태로 변환하여 확인할 수 있습니다. 그 결과, 계약을 검증된 법인과 연결하는 단일 브리핑이 생성됩니다. 각 Actor는 별개의 도구이므로, 에이전트는 각 단계에 맞는 적절한 도구를 스스로 선택합니다. 낙찰 내역에는 GeBIZ를, 그 배후의 기업 정보에는 ACRA를 사용하는 식입니다.
🏹 문제 해결 (Troubleshooting): 만약 Claude에 도구가 나타나지 않는다면, 일반적인 두 가지 원인은 tools 파라미터에 Actor 핸들이 누락되었거나 잘못 입력된 경우(Store URL에 있는 정확한 username/actor-name이어야 합니다), 그리고 Claude가 실행 중인 동안 설정을 수정했을 경우입니다. 핸들을 수정하고 저장한 뒤, 클라이언트를 완전히 재시작하세요.
📌 참고: 각 도구 호출(tool call)은 귀하의 Apify 계정으로 비용이 청구되는 실제 Actor 실행입니다 (이 Actor는 결과당 과금 방식입니다). 낙찰 금액은 싱가포르 달러(SGD)로 보고되며, 일부 레거시 기록은 반올림되거나 추정된 값을 포함하고 있으므로, 단일 수치는 지표로만 취급하고 전체적인 추세를 읽으시기 바랍니다. 일회성 시장 조사의 비용은 1센트의 아주 작은 일부에 불과합니다. 만약 모든 카테고리를 정기적으로 스윕(sweep)할 계획이라면, 채팅 메시지당 한 번씩 호출하는 대신 Apify API를 통해 Actor를 직접 실행하거나 예약된 작업(scheduled task)을 사용하세요.
마무리
이제 귀하는 대화 도중에 요청에 따라 싱가포르 정부 조달 시장을 조사할 수 있으며, 입찰 결정에 실제로 필요한 기관, 공급업체 및 계약 가치에 대한 세부 정보를 제공하는 AI 에이전트를 갖추게 되었습니다. 이 패턴은 재사용이 가능합니다. 신뢰할 수 있는 구조화된 데이터(structured data)를 반환하는 Actor를 선택하고, tools 파라미터를 통해 Apify MCP 서버로 이를 노출한 다음, 에이전트가 언제 이를 호출할지 결정하도록 하면 됩니다.
더 나아가기 위한 방법:
searchQuery를 귀하의 카테고리로 변경하거나, 입찰할 가치가 있는 계약에 집중할 수 있도록 최소 낙찰 금액을 설정하세요.- ACRA Actor를 체이닝(chain)하여 낙찰된 공급업체 이름을 검증된 기업 프로필로 변환하세요.
- OAuth 설정, 리소스 읽기, 그리고 에이전트가 사전 구성되지 않은 Actor를 발견할 수 있게 해주는
search-actors/call-actor도구에 대한 내용은 Apify MCP server docs를 참조하세요.
이 가이드에서 사용된 Actor: Singapore GeBIZ Government Contracts Scraper.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기