Skip to main content
Glama
Kakao Keyword Ads MCP

Kakao Keyword Ads MCP

by PlatAid

Kakao Keyword Ads MCP (카카오 키워드광고 / 검색광고)

카카오 키워드광고(검색광고) 데이터를 조회·분석·리포트 위주로 다루는 MCP 서버. 회사 구성원 여러 명이 하나의 호스팅 서버(GCP Cloud Run)로 연동해 사용하는 것을 목표로 한다. 전체 설계는 DESIGN.md 참고. 라이선스: MIT.

⚠️ 비공식 프로젝트입니다 — 카카오와 무관하며(Not affiliated with Kakao), 카카오 키워드광고 오픈 API를 사용합니다. 사용에는 비즈 앱 전환·비즈니스 인증·API 권한 승인이 필요합니다.

🔐 보안: 자격증명은 .env(gitignore)/Secret Manager에만 두고 커밋하지 마세요. 호스팅 시 /mcp는 기본 개방이라(원격 MCP 클라이언트 호환) 엔드포인트 URL을 공개하지 말고, 다중 사용자 운영 시 Google Workspace OAuth 등으로 접근을 통제하세요. 자세한 건 DEPLOY.md.

자매 프로젝트: KAKAOMomentMCP(카카오모먼트)와 동일한 비즈니스 토큰 인증을 쓴다. 인증 계층(auth.py/config.py/business_auth_api.py/scripts/get_business_token.py)은 사실상 공유하고, 호스트·계층·엔드포인트만 다르다. 검색광고에는 키워드 계층과 품질지수가 추가된다.

현재 상태: 읽기 툴 21종 + 리소스 2종 · Cloud Run 배포 · 라이브 검증 완료

Related MCP server: Meta Ads MCP Server

인증 모델 — 사용자별 비즈니스 토큰 (중요)

  • 비즈니스 토큰은 사용자별(로그인한 카카오계정). refresh_token 없음 → 재발급 없이 재사용, 401 시 재발급. 불필요한 재발급은 발급 개수 한도(KOE236) 유발 → 재사용 원칙.

  • 접근 가능한 광고계정은 tokeninfo.ad_account_ids가 결정(resource_ids=keyword:* 동의 시 전체 계정).

  • 비즈니스 토큰·광고계정 ID는 .env에 저장하지 않는다. 사용자마다 바뀌는 런타임 값이라 툴 호출 시 인자(business_token, ad_account_id)로 전달한다. .env엔 앱 수준 발급 자격증명만 둔다.

  • 필요 scope: keyword_management (조회·운영, 생성/삭제 제외).

두 가지 인증 모드 (자매 모먼트 MCP와 동일)

  • OAuth 로그인-온-커넥트(호스팅 권장, KAKAO_AUTH_MODE=oauth): 서버가 OAuth 보호 리소스가 되고 IdP는 카카오 비즈니스 인증 — 클라이언트 연결 시 카카오 로그인이 뜨고 각 요청이 토큰을 실어 온다. OAuth 상태는 Firestore에 영속화되어 재배포해도 토큰을 재사용(재발급 없음)한다(KOE236 방지). 자세한 건 DEPLOY.md.

  • 세션 로그인(로컬/stdio): login(business_token) → use_account(ad_account_id) → 이후 인자 없이 조회.

호출 흐름 (세션 모드)

  1. get_token_info(business_token) → 접근 가능 계정(ad_account_ids) 확인

  2. 그중 하나를 ad_account_id로 골라 캠페인/키워드/리포트 조회

설정 (.env — 앱 발급 자격증명만, gitignore됨)

KAKAO_REST_API_KEY=...            # OAuth client_id (발급용)
KAKAO_BUSINESS_CLIENT_SECRET=...  # 비즈니스 인증 Client Secret (발급용)
KAKAO_REDIRECT_URI=...            # 앱에 등록한 Redirect URI (발급용)

비즈니스 토큰 발급 (사용자 로그인)

.venv/bin/python scripts/get_business_token.py url          # scope 기본값 keyword_management
# → 브라우저 로그인·동의 → code 복사
.venv/bin/python scripts/get_business_token.py exchange --code <AUTH_CODE>
# → 출력된 토큰을 툴 호출 시 business_token 인자로 사용 (.env에 저장하지 않음)

개발 / 실행

uv venv --python 3.13 && uv pip install -e ".[dev]"
.venv/bin/pytest                # 테스트 18종
.venv/bin/kakao-keywordad-mcp   # stdio 서버

툴 (읽기 21종) — 모든 툴 첫 인자 business_token

디스커버리 (토큰만): get_token_info, get_user_info, list_ad_accounts

계정 (+ad_account_id): get_ad_account, get_account_balance, get_biz_right

엔티티: list_campaigns·get_campaign, list_adgroups·get_adgroup, list_keywords·get_keyword·get_keyword_quality(품질지수), list_creatives·get_creative

성과/리포트: get_account_performance, get_campaign_performance, get_adgroup_performance, get_keyword_performance, get_creative_performance, get_performance_report(level=AD_ACCOUNT|CAMPAIGN|AD_GROUP|KEYWORD|CREATIVE) — 공통 인자 start/end(yyyyMMdd) 또는 date_preset, metrics_group

리소스: kakao://metric-glossary, kakao://report-dimensions

호스트 맵

용도

Host

토큰 발급

kauth.kakao.com/oauth/business/{authorize,token}

토큰/사용자 정보

kapi.kakao.com/v1/business/{tokeninfo,userinfo}

광고 API

api.keywordad.kakao.com/openapi/v1 (소재는 /creatives/basic)

선행조건: 비즈니스 앱 전환 + 실명확인 + 키워드광고 권한(keyword_management) 승인 + Redirect URI 등록.

⚠️ 엔드포인트 쿼리 파라미터명·리포트 지표 필드명은 문서 기반 최선 추정. 토큰 확보 후 라이브 검증에서 확정·보정.

Available Tools

25 tools
get_account_balanceB
Read-only

광고계정 실시간 잔액 (GET /adAccounts/balance).

Inputs: ad_account_id, business_token. Returns: object

get_account_performanceB
Read-only

광고계정 성과 리포트 (GET /adAccounts/report).

Inputs: end, start, time_unit, date_preset, +3 more. Returns: result

get_ad_accountB
Read-only

광고계정 상세 (GET /adAccounts/{adAccountId}).

Inputs: ad_account_id, business_token. Returns: object

get_adgroupB
Read-only

단일 광고그룹 상세 (GET /adGroups/{id}).

Inputs: adgroup_id (required), ad_account_id, business_token. Returns: object

get_adgroup_performanceA
Read-only

광고그룹별 성과 리포트 (GET /adGroups/report). campaignId 필수.

Inputs: end, start, time_unit, campaign_id, +4 more. Returns: result

get_biz_rightB
Read-only

영업권 조회 (GET /adAccounts/bizRight).

Inputs: ad_account_id, business_token. Returns: object

get_campaignA
Read-only

단일 캠페인 상세 (GET /campaigns/{id}).

Inputs: campaign_id (required), ad_account_id, business_token. Returns: object

get_campaign_performanceB
Read-only

캠페인별 성과 리포트 (GET /campaigns/report).

Inputs: end, start, time_unit, date_preset, +3 more. Returns: result

get_creativeA
Read-only

단일 소재 상세 (GET /creatives/basic/{id}).

Inputs: creative_id (required), ad_account_id, business_token. Returns: object

get_creative_performanceB
Read-only

소재별 성과 리포트 (GET /creatives/report). campaignId 필수, adGroupId 선택.

Inputs: end, start, time_unit, adgroup_id, +5 more. Returns: result

get_keywordB
Read-only

단일 키워드 상세 (GET /keywords/{id}).

Inputs: keyword_id (required), ad_account_id, business_token. Returns: object

get_keyword_performanceC
Read-only

키워드별 성과 리포트 (GET /keywords/report). campaignId 필수, adGroupId 선택. 검색광고 분석의 핵심.

Inputs: end, start, time_unit, adgroup_id, +5 more. Returns: result

get_keyword_qualityA
Read-only

키워드 품질지수 (GET /keywords/{id}/quality). 검색광고 최적화 분석의 핵심 신호.

Inputs: keyword_id (required), ad_account_id, business_token. Returns: object

get_performance_reportC
Read-only

레벨 지정 통합 성과 리포트 (KEYWORD 포함). 인사이트 도출용 1급 툴. AD_GROUP/KEYWORD/CREATIVE 레벨은 campaign_id 필수.

Inputs: level (required), end, start, time_unit, +6 more. Returns: result

get_token_infoA
Read-only

비즈니스 토큰의 소유자(token_user_id)와 접근 가능 광고계정 조회 (GET kapi.kakao.com/v1/business/tokeninfo). biz_agreements[].ad_account_ids가 접근 가능 계정('*'=전체).

Inputs: business_token. Returns: object

get_user_infoC
Read-only

비즈니스 토큰 사용자 정보 (GET /v1/business/userinfo).

Inputs: business_token. Returns: object

list_ad_accountsA
Read-only

토큰이 접근 가능한 광고계정 목록 (GET /adAccounts/pages). 계정 선택 전에도 호출 가능.

Inputs: business_token. Returns: result

list_adgroupsC
Read-only

광고그룹 목록 (GET /adGroups).

Inputs: campaign_id, ad_account_id, business_token. Returns: result

list_campaignsA
Read-only

캠페인 목록 (GET /campaigns).

Inputs: ad_account_id, business_token. Returns: result

list_creativesA
Read-only

소재 목록 (GET /creatives/basic?bizChannelId=). bizChannelId 필수 — 캠페인의 bizChannelId 값을 넘긴다 (소재는 비즈채널 단위).

Inputs: ad_account_id, biz_channel_id, business_token. Returns: result

list_keywordsC
Read-only

키워드 목록 (GET /keywords).

Inputs: adgroup_id, ad_account_id, business_token. Returns: result

loginA

비즈니스 토큰으로 로그인한다. 토큰을 tokeninfo로 검증하고 서버 세션에 저장 → 이후 툴은 토큰 인자 없이 호출 가능. 반환에 token_user_id와 접근 가능 계정(tokeninfo).

Inputs: business_token (required). Returns: object

logoutA

세션의 로그인/계정 정보를 지운다.

Inputs: no named parameters. Returns: object

session_statusA
Read-only

현재 인증 상태(로그인 여부·token_user_id·선택된 계정). 토큰 값은 노출하지 않음.

OAuth 로그인-온-커넥트 모드면 요청의 OAuth 토큰 컨텍스트를 보고(=실제 인증 경로), 아니면 세션 저장소(login 툴/웹 로그인)를 본다.

Inputs: no named parameters. Returns: object

use_accountA

이후 조회의 기본 대상 광고계정을 세션에 설정한다.

Inputs: ad_account_id (required). Returns: object

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 25 tools

    Disambiguation5/5

    Each tool targets a distinct resource or action: get_* for single entities, list_* for collections, and dedicated tools for auth/state. No two tools have overlapping purposes; even performance reports are clearly differentiated by level (account, campaign, adgroup, keyword, or unified).

    Naming Consistency5/5

    All tools follow a strict verb_noun pattern with underscores (e.g., get_keyword_quality, list_ad_accounts). Auth tools (login, logout, session_status, use_account) are also consistently named. No mixing of conventions or vague verbs.

    Tool Count4/5

    25 tools is at the high end of reasonable for a keyword ads API. It covers authentication (4), listing/getting for 5 entities (account, campaign, adgroup, keyword, creative) plus performance reports and supporting tools. Slightly heavy but not unjustified given the domain.

    Completeness2/5

    The tool set is heavily read-only: only get and list operations exist for campaigns, adgroups, keywords, and creatives. Missing create, update, and delete operations—critical for campaign management. The only write tool is use_account (state setting). Performance reporting is well-covered, but the lack of mutation tools is a major gap.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to manage Kakao Moment advertisements (Kakao's advertising platform) through natural language queries, supporting campaign, ad group, creative listing, and performance reporting.
      7
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides read-only access to Meta Ads API, enabling campaign management, creative analysis, targeting research, and performance analytics via 39 tools.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Provides read-only access to Google Ads account data including campaigns, ad groups, keywords, and performance reports. Enables querying via GAQL through an MCP interface.
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables MCP clients to read and analyze Facebook (Meta) Ads marketing data, including campaigns, ad sets, ads, insights, and 190 metrics, with optional write tools that preview changes before applying.
      41
      668 npm
      2
      Apache 2.0