/ AI, MCP, ADMOB

AdMob API MCP 서버 만들기 - Part 1: 뼈대 작성하기

Gemini, ChatGPT 같은 AI 어시스턴트는 단순히 언어를 처리하는 것을 넘어, 웹 검색 결과나 날씨, 항공편 정보 등 외부 데이터를 활용해 답변을 생성하는 방향으로 발전하고 있습니다. 하지만 AI가 일반적으로 접근할 수 없는 나만의 데이터를 활용하게 하려면 어떻게 해야 할까요? AI에게 ‘어떤 데이터를 사용할 수 있는지’, 그리고 ‘그 데이터에 어떻게 접근하는지’ 알려주는 과정이 필요합니다.

이때 MCP(Model Context Protocol) 서버가 유용한 해결책이 될 수 있습니다. MCP 서버를 구축해 AI 어시스턴트에 연결하면, 특정 AI 모델에 종속되지 않고 내가 가진 데이터 소스에 접근하여 답변을 생성하도록 만들 수 있습니다. 구현하기에 따라서는 단순히 데이터를 조회하는 것을 넘어 새로운 리소스를 생성하거나 수정하는 작업도 AI를 통해 수행하게 할 수 있죠.

앞으로 작성할 포스트에서는 AdMob API를 활용하는 MCP 서버를 만들어 보겠습니다. AdMob API는 앱 및 광고 단위 조회, 실적 리포트 생성 등 다양한 기능을 제공합니다. 처음부터 모든 기능을 구현하기는 어려우니, 몇 가지 핵심 API를 ‘도구(Tool)’로 제공하는 것부터 시작해 점차 기능을 확장해 나가겠습니다.

준비물

  • Node.js 버전 16 이상
  • Typescript에 대한 기본적인 이해

프로젝트 생성 및 초기 설정

먼저 프로젝트를 생성하고 필요한 설정을 진행하겠습니다.

1. 프로젝트 생성

터미널을 열고 아래 명령어를 실행해 admob-mcp-server라는 이름의 프로젝트 폴더를 만들고 초기화합니다.

$ mkdir admob-mcp-server && cd admob-mcp-server && npm init -y

2. 의존성 패키지 설치

MCP 서버 구현과 AdMob API 호출에 필요한 패키지들을 설치합니다.

# MCP 서버와 Google API 클라이언트 설치
$ npm install @modelcontextprotocol/sdk googleapis

TypeScript 개발 환경에 필요한 패키지도 설치합니다.

# TypeScript 및 Node.js 타입 정의 설치
$ npm install --save-dev typescript @types/node

3. TypeScript 설정

프로젝트 루트 경로에 tsconfig.json 파일을 생성하고, TypeScript 컴파일러 옵션을 아래와 같이 설정합니다.

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "moduleResolution": "Node16",
    "outDir": "./build",       // 컴파일된 JS 파일이 저장될 디렉토리
    "rootDir": "./src",        // TypeScript 소스 코드의 루트 디렉토리
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"]      // 컴파일할 파일 범위
}

4. package.json 스크립트 설정

마지막으로 package.json 파일을 열어 TypeScript 프로젝트를 빌드하고 실행할 수 있도록 몇 가지 항목을 추가하고 수정합니다.

{
  "name": "admob-mcp-server",
  "version": "1.0.0",
  "description": "",
  "main": "./build/index.js",
  "type": "module",
  "bin": {
    "admob-mcp-server": "./build/index.js"
  },
  "scripts": {
    "build": "tsc && chmod +x build/index.js"
  },
  "files": [
    "build"
  ],
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  • "type": "module": Node.js에서 ES 모듈 문법 (import/export)을 사용하도록 설정합니다.
  • "main": 패키지의 진입점 파일 경로를 지정합니다.
  • "bin": 이 패키지를 전역으로 설치했을 때 사용할 명령어와 실행 파일 경로를 지정합니다.
  • "scripts": npm run build 명령어로 TypeScript 코드를 컴파일하고 실행 권한을 부여하도록 설정합니다.

기본 서버 코드 구현

이제 서버의 기본 뼈대를 만들어 보겠습니다. src 폴더를 생성하고 그 안에 index.ts 파일을 만들어 아래 코드를 작성해 주세요.

먼저 MCP 서버 인스턴스를 생성합니다. 이번 예제에서는 AdMob API의 기능들을 ‘도구(Tool)’로 제공할 것이므로, capabilities 객체에 tools를 추가합니다.

// src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server(
  {
    name: "AdMob",
    version: "0.1.0",
  },
  {
    capabilities: {
      tools: {}, // AI가 사용할 수 있는 도구 목록을 여기에 정의할 예정입니다.
    },
  }
);

다음으로 서버를 실행하는 코드를 작성합니다. MCP 서버는 클라이언트(AI 어시스턴트)와 표준 입출력(STDIO) 또는 HTTP로 통신할 수 있습니다. 여기서는 간단하게 표준 입출력을 사용하도록 구현하겠습니다.

💡 알아두기

표준 입출력(STDIO)을 사용할 때는 console.log()로 메시지를 출력하면 서버의 응답에 영향을 줄 수 있습니다. 디버깅이나 로깅 목적의 메시지는 console.error()를 사용하는 것이 안전합니다.

// src/index.ts (파일 하단에 추가)
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("AdMob MCP Server running on stdio");
}

main().catch((error) => {
  console.error(`Fatal error: ${error}`);
  process.exit(1);
});

이제 서버의 가장 기본적인 코드가 완성되었습니다! 아래 명령어로 프로젝트를 빌드하면 서버를 실행할 준비가 끝납니다.

npm run build

MCP Inspector로 서버 테스트하기

MCP Inspector는 MCP 서버가 의도한 대로 잘 동작하는지 검증할 수 있는 웹 기반 도구입니다.

프로젝트 루트 경로에서 아래 명령어를 실행하면 웹 브라우저에서 MCP Inspector가 열리고, 우리가 만든 서버와 바로 연결됩니다.

npx @modelcontextprotocol/inspector node build/index.js

Inspector 화면이 나타나면 왼쪽 사이드바에서 Connect 버튼을 누릅니다. 잠시 후 로그 창에 “AdMob MCP Server running on stdio” 메시지가 나타나면 서버가 성공적으로 실행된 것입니다.

MCP Inspector connected to the server

다음 단계

지금까지 MCP 서버의 기본 뼈대를 만들고 실행하는 데 성공했습니다. 다음 포스트에서는 본격적으로 AdMob API를 호출하기 위한 사용자 인증 기능을 추가하고, AI 어시스턴트가 사용할 첫 번째 ‘도구(Tool)’를 등록해 보겠습니다.

참조 링크

kunny

커니

안드로이드와 오픈소스, 코틀린(Kotlin)에 관심이 많습니다. 한국 GDG 안드로이드 운영자 및 GDE 안드로이드로 활동했으며, 현재 구글에서 애드몹 기술 지원을 담당하고 있습니다.

Read More