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_stock → reorder_if_low 순서로 알아서 판단해 호출한다. SQL을 몰라도, 내부 시스템 구조를 몰라도 자연어 한 문장으로 업무가 처리되는 것이다.