
ChatGPT에게 서버를 연결했더니 블로그 운영자가 되었다|PLUTUS MCP 11개 도구의 기술 아키텍처

AI ENGINEERING · PLUTUS MCP · TECHNICAL DEEP DIVE
“ChatGPT야, 블로그에 올려줘.”
평범한 한 문장이 실제 WordPress 서버를 움직이기까지. 직접 구축한 PLUTUS Report MCP의 내부 설계를 공개한다.
# FastMCP # Python # OAuth # WordPress REST API # Agentic Workflow
글을 잘 쓰는 AI는 이미 많다. 하지만 글을 작성한 다음, 실제 내 서버에 저장하고, 이미지를 올리고, 발행 상태를 확인하고, 수정 전 백업까지 해 주는 AI는 이야기가 다르다. 나는 ChatGPT와 자체 WordPress 사이에 표준화된 실행 계층을 만들고 싶었다. 결과물은 PLUTUS Report MCP.
AI가 말을 잘하는 것과 실제로 일을 잘하는 것 사이에는 하나의 벽이 있었다. 그 벽을 통과시키기 위해 직접 만든 것이 MCP 서버다.
01MCP는 플러그인일까, 프로토콜일까?
MCP(Model Context Protocol)는 AI와 외부 시스템을 연결하는 표준 인터페이스다. ChatGPT 플러그인 화면에는 하나의 앱처럼 보이지만, 안쪽에서는 도구의 목록과 입력 규격을 AI에게 알려주고, 선택된 도구 호출을 서버에서 수행하는 프로토콜로 작동한다.
일반 REST API는 개발자가 URL·HTTP 메서드·매개변수를 알고 호출하는 구조다. MCP는 그 앞에 AI가 이해할 수 있는 도구 설명을 제공한다. 예를 들어 사용자가 ‘지난번 올린 글을 보여줘’라고 말하면 AI가 연결된 list_posts 또는 get_post를 선택해 호출할 수 있다. 하지만 AI에게 임의의 서버 명령을 실행하는 권한을 주는 것은 아니다. 오직 개발자가 제공한 도구만 호출할 수 있다.
02전체 기술 아키텍처
SYSTEM ARCHITECTURE · PLUTUS MCP
자연어에서 WordPress 발행까지
01
ChatGPT
원고·HTML·도구 호출
02
Google OAuth · 허용 계정
사용자 인증과 접속 제한
03
Python + FastMCP
11개의 기능과 입력값·승인 제어
04
Nginx / Ubuntu
HTTPS, systemd 운영, 게시물 API
05
WordPress REST API
초안 · 이미지 · 발행 · 수정 · 예약
모델이 WordPress 관리자 비밀번호를 직접 사용하지 않고 서버 도구를 호출하는 구조
중요한 설계 철학은 책임 분리다. ChatGPT는 문서와 HTML을 생성하고 어떤 작업을 요청할지 결정한다. MCP는 OAuth와 도구별 입력 검증으로 경계를 만든다. Ubuntu 서버는 실제 비밀정보와 WordPress 통신을 담당한다. 마지막으로 WordPress는 게시물과 미디어를 보관하고 공개한다.
운영 환경은 Ubuntu 24.04 / Python / FastMCP / Nginx / Google OAuth / systemd / WordPress REST API다. ChatGPT 연결용 HTTPS 엔드포인트는 https://trade.plutus.ai.kr/mcp, 콘텐츠 발행 대상은 https://plutus.ai.kr이다. WordPress 애플리케이션 비밀번호는 서버 측에서만 관리한다.
03FastMCP: 자연어를 실행 가능한 도구로 변환
일반적인 WordPress REST API로 게시글을 조회하려면 URL과 인증 헤더가 필요하다. 하지만 MCP에서는 AI가 호출할 도구의 이름과 매개변수만 정의해 주면 된다. 다음은 개념을 보여주는 단순화한 Python 코드다.
@mcp.tool()
def get_post(post_id: int, include_content: bool = False):
"""Return saved WordPress post metadata and optional HTML."""
# Authenticate caller, query WordPress API, return a structured response.
...
도구 스키마가 공개되면 ChatGPT는 사용자 문장에서 post_id가 무엇인지 추론하고 호출을 구성한다. 하지만 발행이나 공개 글 수정처럼 상태가 바뀌는 기능에는 별도의 승인 조건을 둔다.
04완성된 11개 도구를 해부하다
실제로 ChatGPT에서 조회되는 도구는 11개다. 단순한 리포트 전송 기능에서 시작해 이제는 생성·조회·수정·발행·미디어·예약·검증을 한 흐름으로 다룬다. 아래는 현재 MCP에 등록된 인터페이스 기준이다.
콘텐츠 워크플로
| submit_report | 리포트 JSON·HTML·이미지 데이터를 서버 inbox로 접수해 WordPress 초안 생성 요청 |
| list_posts | 최근 초안 목록 및 메타데이터 조회 |
| get_post | 게시글 ID로 제목·본문 HTML·공개 상태 조회 |
| update_post | 초안 전용 편집, 공개 글 변경 차단 |
| publish_post | 기존 초안을 공개 상태로 전환 |
이미지 파이프라인
| upload_media | PNG·JPEG·WEBP Base64 전송, 최대 8MiB 이미지 업로드 |
| attach_media_to_draft | 기존 미디어 ID를 초안 본문에 삽입하거나 대표 이미지로 연결 |
| replace_post_media | 명시적 승인·백업 후 본문 미디어 URL 및 대표 이미지 변경 |
운영·안전성
| update_published_post | 명시적 승인·백업 후 공개 글 제목·본문·요약 수정 |
| schedule_post | 시간대 오프셋을 포함한 날짜에 초안 예약 발행 |
| validate_post | 저장된 HTML의 중복 H1·이미지 URL·alt 누락·블록 위치 검사 |
이 가운데 게시물 내용이나 공개 상태를 바꾸는 도구는 입력 조건과 사용자의 승인 여부가 중요하다. 읽기 작업과 쓰기 작업을 같은 권한으로 취급하지 않는 것이 안정적인 운영의 출발점이다.
05보안: 인증(Authentication)과 인가(Authorization)의 차이
인터넷에 노출된 MCP 서버를 누구나 호출할 수 있게 두면 악의적인 요청으로 WordPress 콘텐츠가 변경될 수 있다. PLUTUS MCP는 Google OAuth와 허용 계정 검사를 이용해 연결 사용자를 제한하고, 도구마다 허용되는 작업 범위를 구분한다.
인증은 ‘누가 요청하는가’를 확인하는 과정이다. 인가는 ‘그 사용자가 어떤 작업을 할 수 있는가’를 판단한다. 로그인한 사용자라고 해서 공개 글을 무조건 바꿀 수 있어서는 안 된다. update_published_post, replace_post_media, schedule_post처럼 민감한 작업에는 confirm 인자를 요구한다.
공개 글 변경 도구는 수정 전 로컬 백업을 남기도록 설계돼 있다. WordPress 본문과 대표 미디어의 위치를 구분하며, 원래 글의 공개 상태나 URL을 멋대로 변경하지 않는 것도 핵심 제약이다.
06그림 한 장이 가르쳐준 데이터 무결성
첫 실전 글에서 가장 까다로운 버그는 의외로 이미지였다. 대표 이미지를 본문에도 넣어 그림이 중복됐고, 맨 아래에 붙은 인포그래픽은 브라우저에서 일부만 나타났다. WordPress API는 성공을 반환했지만 독자의 화면은 성공하지 못했다.
그래서 이미지의 흐름을 파일 생성 → 형식 검증 → 미디어 업로드 → 미디어 ID 확인 → 본문 위치 결정 → 저장 HTML 재조회 → 브라우저 검수로 나눠 생각하게 됐다. upload_media는 PNG·JPEG·WEBP 파일의 Base64를 받아 WordPress 미디어로 등록하고, attach_media_to_draft는 해당 ID를 초안에 연결한다.
API 성공은 ‘파일을 받았다’는 증거일 수 있다. 독자가 이미지 전체를 보았다는 증거는 아니다.
이번에 만든 validate_post는 저장된 HTML에서 중복 이미지, 중복 H1, alt 누락, 본문 밖 이미지 블록 문제를 검사한다. 실제로 개발 일지 1편 게시글 1653번을 검사했을 때 중복 이미지 0건, 본문 H1 0건, 경고 0건으로 돌아왔다. 다만 이 도구는 이미지 파일 자체의 무결성과 브라우저 렌더링을 자동 검사하지 않는다. 검사의 범위를 정확히 구분하는 것이 중요하다.
07운영에서 중요한 것은 성공보다 실패 복구
서버 측 자동화는 실제 사용자 권한·프로세스 실행 계정·파일 접근 권한과 맞물린다. 개발 과정에서도 HTTP 401, systemd 환경변수, 보호된 환경파일의 접근권한 같은 문제를 겪었다. 인증정보를 바꾸면 될 것 같지만, 문제는 로그인 자체보다 그 정보를 어느 프로세스가 어떤 권한으로 읽느냐에 있었다.
PLUTUS MCP는 systemd 서비스로 운영해 재시작과 상태 확인이 가능하며, Nginx가 HTTPS 진입점을 담당한다. 애플리케이션 로그와 WordPress에 실제 저장된 내용을 교차 확인하고, 실패한 변경을 되돌릴 수 있도록 백업을 남기는 쪽으로 설계를 확장했다.
08ChatGPT가 AI 출판 시스템이 되는 순간
사람이 매번 WordPress 관리자 화면을 열고 복사·붙여넣기하던 일을 하나의 대화로 바꿨다. 지금은 ‘초안으로 올려줘’, ‘이미지를 추가해 줘’, ‘글의 중복 이미지를 검사해 줘’처럼 요청할 수 있다. 개발의 핵심은 AI가 똑똑해서 모든 것을 알아서 하는 데 있지 않다. 실제로 어떤 작업을 수행할 수 있는지 명확한 API로 설계하는 데 있다.
앞으로 PLUTUS는 금융 리포트 중심으로 운영하고, 에이젝트는 AI 기술·소프트웨어 개발을 소개하는 독립 브랜드로 발전시킬 계획이다. 콘텐츠의 주제와 디자인은 달라도 핵심 출판 자동화 계층을 재사용할 수 있다는 점이 MCP 아키텍처의 장점이다.
PLUTUS MCP가 만든 가장 큰 변화는 블로그 게시 버튼 하나가 아니다. AI가 사람이 만든 소프트웨어 시스템의 정해진 규칙 안에서 실제 작업을 수행할 수 있게 됐다는 점이다.
09기술 사양 한눈에 보기
| 서비스 | PLUTUS Report MCP |
| 언어·서버 | Python · FastMCP · Ubuntu 24.04 |
| 네트워크 | Nginx · HTTPS |
| 보안 | Google OAuth · 허용 계정 · 승인 인자 |
| CMS | WordPress REST API |
| 배포·운영 | systemd |
| 인터페이스 | 11개 MCP 도구 |
| 콘텐츠 | HTML · WordPress 메타데이터 · 이미지 |
| 미디어 | PNG/JPEG/WEBP, 최대 8MiB |
| 리스크 제어 | 초안/공개 구분 · 변경 전 백업 · 재조회 검증 |
이 글은 설치 방법을 나열하는 사용설명서라기보다, 실제 운영 중인 개인 서버와 ChatGPT를 연결하면서 탄생한 기술 설계 기록이다. 인터페이스 구현과 전체 실전 검증은 구분된다. 새로 추가한 예약 발행·공개 글 수정·미디어 교체는 안전하게 순차 검증하며 운영 품질을 높이고 있다.
다음 개발 주제
게시글 버전 이력, 이미지 실제 렌더링 검사, 예약 발행 시나리오 테스트, 금융 데이터 자동 분석에서 리포트 출판까지 연결하는 파이프라인.
PLUTUS · AI Engineering Journal #03
2026년 10월 9일 · Ubuntu · Python · FastMCP · Google OAuth · WordPress REST API
실제 연결된 도구 인터페이스와 관찰된 결과를 바탕으로 작성했습니다. 인증정보 및 운영상 민감한 설정은 포함하지 않았습니다.