MCP 를 활용한 API Test 자동화

김민범·2025년 5월 15일

AI

목록 보기
1/12

MCP 서버란?

MCP(Model Control Protocol) 서버는 AI 모델과 외부 시스템 사이의 통신을 가능하게 해주는 프로토콜이다. 이를 통해 AI 모델이 다양한 외부 도구나 서비스에 접근할 수 있게 해준다. 특히 Claude와 같은 LLM(Large Language Model)이 API 호출, 파일 접근, 데이터베이스 쿼리 등 다양한 작업을 수행할 수 있도록 돕는 중요한 도구이다.

FastMCP는 MCP 프로토콜의 구현체 중 하나로, Python을 사용하여 빠르게 MCP 서버를 구축할 수 있게 해준다. 간단한 코드 몇 줄로 Claude가 외부 시스템과 상호작용할 수 있는 도구를 만들 수 있는 것이 큰 장점이다.

MCP 서버의 장점

  1. 간편한 확장성: AI 모델에 새로운 기능을 추가하고 싶을 때 MCP 도구를 추가하기만 하면 된다. 복잡한 프롬프트 엔지니어링 없이도 AI의 기능을 쉽게 확장할 수 있다.

  2. 코드 실행 능력: AI가 직접 코드를 실행하거나 외부 시스템과 상호작용할 수 있게 해준다. 이는 단순 텍스트 생성을 넘어선 실질적인 작업 수행을 가능하게 한다.

  3. 보안성: MCP 서버는 AI 모델과 외부 시스템 사이의 중간 계층 역할을 하며, 필요한 권한만 제공함으로써 보안을 강화할 수 있다.

  4. 개발 편의성: Python과 같은 익숙한 언어로 도구를 개발할 수 있어 개발자 친화적이다.

  5. 실시간 상호작용: 사용자나 AI가 요청한 정보를 실시간으로 가져올 수 있어 항상 최신 정보에 접근할 수 있다.

API 테스트를 위한 MCP 서버 구현

API 테스트를 위한 간단한 MCP 서버를 구현해보자. 이 서버는 HTTP 요청을 보내고 응답을 받을 수 있는 기능을 Claude에게 제공한다.

import sys
import traceback

from mcp.server.fastmcp import FastMCP
import requests
import json

# MCP 서버 생성
mcp = FastMCP("mcp_project")

@mcp.tool()
def test_server(method: str, url: str, body, access_token: str) -> str:
    """test server"""
    headers = {"Content-Type": "application/json"}

    if access_token:
        headers["Authorization"] = f"Bearer {access_token}"

    try:
        # body가 이미 딕셔너리인 경우 그대로 사용하고, 문자열인 경우 파싱
        if isinstance(body, str):
            json_body = json.loads(body)
        else:
            json_body = body

        response = requests.request(method, url, headers=headers, json=json_body)
        response.raise_for_status()

        try:
            return json.dumps(response.json())
        except:
            return json.dumps({"response": response.text})
    except requests.RequestException as e:
        error_response = {"error": str(e)}
        return json.dumps(error_response)

if __name__ == "__main__":
    try:
        mcp.run()
    except Exception as e:
        traceback.print_exc(file=sys.stderr)

이 코드는 test_server라는 하나의 도구를 등록한다. 이 도구는 HTTP 메서드, URL, 요청 본문, 액세스 토큰을 받아 요청을 보내고 응답을 반환한다.

API 테스트하기

지연님(https://velog.io/@yeoni9094)의 jwt 테스트 서버로 테스트를 진행했다. 해당 서버는 다음과 같은 기능이 있다.

  1. 회원가입
  2. 로그인 (액세스 토큰과 리프레시 토큰 발급)
  3. 인증된 API 요청
  4. 토큰 갱신
  5. 로그아웃

이제 MCP 서버를 사용하여 이러한 API를 테스트하기 전에 클로드 데스크탑과 MCP 서버를 연동시켜야 한다.

연동 방법

  1. Claude desktop 설치
  2. 설정 -> 개발자 -> 설정 편집

    이미 추가된 상태
  3. 설정 편집을 누르면 나오는 claude_desktop_config.json 파일을 편집해준다.
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/kimminbeom/Desktop",
        "/Users/kimminbeom/Downloads"
      ]
    },
    "TalkToFigma": {
      "command": "/Users/kimminbeom/.bun/bin/bunx",
      "args": ["cursor-talk-to-figma-mcp@latest", "--server=vps.sonnylab.com"]
    },
    "mcp_project": {
      "command": "/Users/kimminbeom/Desktop/peak/peakDev/mcp-test/.venv/bin/python3",
      "workingDirectory": "/Users/kimminbeom/Desktop/peak/peakDev/mcp-test",
      "args": ["/Users/kimminbeom/Desktop/peak/peakDev/mcp-test/server.py"]
    }
  }
}

filesystem 은 로컬 파일 관련된 MCP 서버이고, TalkToFigma 는 피그마 편집을 가능하게 해주는 MCP 서버이다.

  1. 파일 편집 후 클로드 데스크탑 재시작

테스트 결과

클로드 데스크탑에 다음과 같은 메세지를 보냈다.

프로젝트 살펴보고 각 api 마다 시나리오 짜서 서버 요청 테스트좀 해봐
서버는 localhost:8080에 열려있어

응답

좋습니다! 수정된 코드를 사용하여 회원가입 요청을 보내보겠습니다:

성공했습니다! 응답으로 "회원가입 완료" 메시지가 반환되었습니다(유니코드로 인코딩되어 있습니다).

이제 회원가입이 성공했으니 다른 API 테스트도 진행해 보겠습니다.

### 회원가입한 사용자로 로그인 테스트

로그인도 성공했습니다! 로그인 응답에서 `tokenAuthScheme`, `accessToken`, `refreshToken`을 확인할 수 있습니다. 이제 이 토큰을 사용하여 인증이 필요한 엔드포인트에 접근해 보겠습니다.

### 인증 확인 테스트

JSON 파싱 오류가 발생했네요. GET 요청일 때 body가 비어있으면 JSON으로 파싱할 수 없을 수 있습니다. 빈 딕셔너리를 전달해 보겠습니다:

성공했습니다! 응답으로 "인증된 사용자입니다." 메시지가 반환되었습니다.

### 토큰 갱신 테스트

토큰 갱신도 성공했습니다! 새로운 액세스 토큰과 리프레시 토큰이 발급되었습니다.

### 로그아웃 테스트

로그아웃도 성공했습니다! "로그아웃 완료" 메시지가 반환되었습니다.

### 로그아웃 후 인증 요청 테스트

예상대로 로그아웃 후에는 401 Unauthorized 오류가 발생했습니다. 이는 토큰이 블랙리스트에 추가되어 더 이상 유효하지 않음을 의미합니다.

## 테스트 결과 요약

모든 API 엔드포인트가 성공적으로 테스트되었습니다!

1. **회원가입**: 새로운 사용자 계정이 성공적으로 생성되었습니다.
2. **로그인**: 유효한 자격 증명으로 로그인하여 액세스 토큰과 리프레시 토큰을 발급 받았습니다.
3. **인증 확인**: 유효한 액세스 토큰으로 보호된 엔드포인트에 접근했습니다.
4. **토큰 갱신**: 리프레시 토큰을 사용하여 새로운 액세스 토큰과 리프레시 토큰을 발급 받았습니다.
5. **로그아웃**: 액세스 토큰을 블랙리스트에 추가하고 리프레시 토큰을 삭제했습니다.
6. **로그아웃 후 인증 테스트**: 블랙리스트에 추가된 토큰으로는 더 이상 인증할 수 없음을 확인했습니다.

JWT-Redis 인증 시스템이 정상적으로 작동하고 있음을 확인했습니다. 이 시스템은 액세스 토큰과 리프레시 토큰을 사용하여 보안을 유지하고, Redis를 사용하여 토큰을 관리하며, 로그아웃 시 토큰을 블랙리스트에 추가하여 보안을 강화하고 있습니다.

기본적인 성공 테스트 + 인증 실패 시나리오 테스트까지 성공했다. 입력을 구체화하여 더 많고 정교한 시나리오 테스트까지 충분히 가능하다고 판단된다.

MCP를 활용한 API 테스트의 이점

  1. 자동화된 테스트: Claude와 같은 AI 모델이 MCP를 통해 API를 직접 테스트할 수 있어, 수동 테스트의 번거로움을 줄일 수 있다.

  2. 테스트 시나리오 다양화: AI의 자연어 처리 능력을 활용하여 다양한 테스트 시나리오를 쉽게 생성하고 실행할 수 있다.

  3. 실시간 피드백: API의 동작을 실시간으로 확인하고 결과를 바로 분석할 수 있다.

  4. 직관적인 인터페이스: 복잡한 API 클라이언트 없이도 자연어로 API를 테스트할 수 있다.

  5. 문서화 용이성: 테스트 과정과 결과를 자동으로 문서화할 수 있어 개발 프로세스를 개선할 수 있다.

결론

MCP 서버는 AI 모델의 능력을 확장하는 강력한 도구이다. 특히 API 테스트와 같은 개발 작업에서 큰 도움이 된다. 간단한 Python 코드로 MCP 서버를 구현하고, 이를 통해 JWT 인증 API를 테스트하는 방법을 살펴보았다.

이러한 접근 방식은 개발자가 API를 더 효율적으로 테스트하고, 문제를 빠르게 발견하며, 개발 프로세스를 개선하는 데 도움이 된다. 앞으로 AI와 개발 도구의 통합이 더욱 발전함에 따라, MCP와 같은 프로토콜의 중요성은 더욱 커질 것이다.

1개의 댓글

comment-user-thumbnail
2025년 5월 16일

테스트 감사합니다!!!
저도 MCP 한 번 써볼게요

답글 달기