ai

MCP서버를 직접 만들 경우의 이점

아래는 AI에서 참고한 내용임.

내가 생각한 건 MCP 서버를 내가 커스텀하여 만들 경우의 이점임.

만약 아래의 예제처럼 생산관리 시스템이 있고, 해당 시스템을 MCP 서버로 만들 경우 에이전트에 명령하는 것만으로 해당 생산관리 시스템을 프롬프트 입력하듯이 사용할 수 있게 된다. (마치 AI 사용하듯이 "재고량이 10개 이하면 주문해줘"라고 할 수 있다.)


이미 있는 MCP 서버를 연동할 때

장점

  • 즉시 사용 가능. 설정 파일 몇 줄이면 끝난다. 개발 비용이 거의 들지 않는다.

  • 검증된 품질. 커뮤니티나 회사가 이미 만들어 유지보수하는 도구라 안정성이 보장된다.

  • 빠른 기능 확장. 파일시스템, 깃허브, 웹 검색 같은 범용 기능을 조합해 순식간에 에이전트 능력을 늘릴 수 있다.

단점

  • 커스텀 불가. 상대가 제공하는 도구 범위 안에서만 쓸 수 있다.

  • 신뢰 문제. 특히 민감한 데이터를 다루는 도구라면 보안·데이터 유출 위험을 따져야 한다.

  • 통제권 부재. 상대 서버가 다운되거나 정책·API가 바뀌면 내 쪽도 그대로 영향을 받는다.


MCP 서버를 직접 만들 때

장점

  • 원하는 기능을 100% 커스텀할 수 있다. 사내 API, 내부 DB, 회사 고유 로직 등 무엇이든 노출 가능하다.

  • 보안과 권한을 직접 통제한다. 누가 어떤 도구를 쓸 수 있는지, 인증은 어떻게 할지 스스로 정한다.

  • 외부 의존이 없다. 남의 서버 장애나 정책 변경에 흔들리지 않는다.

단점

  • 개발·유지보수 비용이 든다. API가 바뀌면 서버 코드도 같이 고쳐야 한다.

  • 설명(description)을 잘못 쓰면 에이전트가 오작동한다. 도구 스키마와 설명은 곧 에이전트가 판단하는 유일한 근거다.

  • 배포·운영 부담이 있다. 서버 프로세스를 띄우고 관리해야 한다.


직접 만드는 게 확실히 유리한 경우 — 사내 재고 DB 예제

공개된 MCP 서버는 파일, 검색, 깃허브처럼 "일반적인 기능"만 제공한다. 회사 내부 DB나 독자적인 업무 로직은 누구도 대신 만들어주지 않는다. 이럴 때는 직접 만드는 것 외에 방법이 없다.

from mcp.server.fastmcp import FastMCP
import sqlite3

mcp = FastMCP("inventory")

@mcp.tool()
def check_stock(item_name: str) -> str:
    """사내 재고 수량 조회"""
    conn = sqlite3.connect("company_inventory.db")
    cur = conn.execute(
        "SELECT quantity FROM stock WHERE name = ?", (item_name,)
    )
    row = cur.fetchone()
    return f"{item_name} 재고: {row[0]}개" if row else "재고 없음"

@mcp.tool()
def reorder_if_low(item_name: str, threshold: int = 10) -> str:
    """재고 부족 시 자동 발주 요청 생성"""
    conn = sqlite3.connect("company_inventory.db")
    cur = conn.execute(
        "SELECT quantity FROM stock WHERE name = ?", (item_name,)
    )
    qty = cur.fetchone()[0]
    if qty < threshold:
        conn.execute(
            "INSERT INTO reorder_requests (name) VALUES (?)", (item_name,)
        )
        conn.commit()
        return f"{item_name} 발주 요청 등록됨 (현재 {qty}개)"
    return f"{item_name} 재고 충분 ({qty}개)"

if __name__ == "__main__":
    mcp.run()

여기서 핵심은, MCP 서버가 DB 자체를 새로 만드는 게 아니라는 점이다. 기존 B에 접근하는 함수만 도구로 감싸 노출한 것이다. 즉 MCP 서버는 **"DB 접근함수들을 LLM이 이해하고 호출할 수 있도록 포장한 계층"**이다.

이렇게 등록해두면, 사용자가 "노트북 재고 확인하고 부족하면 발주해줘"라고 요청했을 때 에이전트가 check_stockreorder_if_low 순서로 알아서 판단해 호출한다. SQL을 몰라도, 내부 시스템 구조를 몰라도 자연어 한 문장으로 업무가 처리되는 것이다.