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