Enterprise Integration / Investment Platform

"투자자용 MCP"라는 요청을 6개의 실제 업무로 정의하고 구현하기까지

고객의 요청은 "투자자를 위한 MCP 서버를 만들어달라"는 것이었지만, 그 뒤에 구체적인 제품 명세는 없었습니다. VC 투자자 3명을 인터뷰하고 이들의 업무를 플랫폼 API 115개와 대조해 구현할 가치가 있는 6개 기능을 정의했습니다. 2개월 동안 제품 정의, MCP 서버, 회사 전환, 고객 자체 로그인 연동, 6개 업무 기능까지 단독으로 구현해 프로젝트를 완료했습니다.

납품 완료 — 유료 고객 프로젝트 단독 프로젝트제품 정의부터 납품까지2026년 6–7월
6개 업무

정의·우선순위·구현 완료

115개 API

실제 투자 업무와 대조 분석

3

VC 투자자 인터뷰 및 사전 테스트

2개월

명세 없는 요청부터 납품까지, 단독

이 페이지의 목차
  1. 01프로젝트 개요
  2. 02내가 담당한 범위
  3. 03고객의 최초 요청
  4. 04사용자 업무에서 제품 범위 찾기
  5. 05시스템을 결정한 제약조건
  6. 06핵심 의사결정
  7. 07서비스 아키텍처
  8. 08인증과 회사 전환
  9. 09실제 도구 호출 한 건
  10. 10구현
  11. 11결과 — 그리고 주장하지 않는 것
  12. 12배운 점
01

프로젝트 개요

고객투자자용 포트폴리오 플랫폼 (익명화)
사용자하나 이상의 회사에 소속되어 업무를 수행하는 투자자와 포트폴리오 사용자
기간2026년 6–7월 (2개월)
팀 구성단독 프로젝트
사용자 조사VC 투자자 3명 인터뷰 및 사전 테스트
담당 역할제품 정의 및 구현 오너: 사용자 조사, 기능 정의, 아키텍처, 서버 코드, 고객 커뮤니케이션
기술 환경MCP 서버 · Claude / GPT MCP 클라이언트 · 고객 자체 로그인 · 고객 플랫폼 API
현재 상태6개 업무 기능과 전체 연동을 완성해 납품 완료
02

내가 담당한 범위

구체적이지 않은 고객 요청을 실제 납품 가능한 제품으로 전환하는 전 과정을 단독으로 담당했습니다.

직접 구현사용자 조사: VC 투자자 3명 인터뷰와 제품 사전 테스트.
직접 구현고객 플랫폼 API 115개 분석 — 실제로 지원 가능한 업무 확인.
직접 구현6개 제품 기능의 정의, 우선순위 결정, 전체 구현.
직접 구현MCP 서버 아키텍처, 인증 연동, 다중 회사 컨텍스트 구조 설계 및 서버 코드 작성.
직접 구현Claude·GPT에서 MCP 서버를 연결할 때 고객 자체 로그인을 사용하도록 연동.
직접 구현접근 제어 강화: 인가 흐름에 PKCE를 적용하고 토큰을 Fernet으로 암호화한 DiskStore에 저장해 토큰 탈취·세션 유출·회사 간 조회 위험을 차단.
직접 구현고객 커뮤니케이션과 유료 프로젝트 납품.
03

고객의 최초 요청

“투자자를 위한 MCP 서버를 만들어주세요.”

고객 요청 전문

요청에는 기술 이름은 있었지만 제품은 정의되어 있지 않았습니다. 세 가지 질문에 답해야 했습니다.

  1. 투자자는 LLM으로 어떤 업무를 처리하려 하는가?
  2. 그중 고객 플랫폼이 보유한 데이터로 지원할 수 있는 업무는 무엇인가?
  3. LLM 클라이언트가 고객의 보안 체계를 유지하면서 올바른 회사 데이터에 어떻게 접근할 것인가?

플랫폼 API를 그대로 감싼 범용 MCP 서버를 만들 수도 있었습니다. 하지만 그렇게 만든 도구가 실제 업무를 해결한다는 보장은 없었습니다.

최초 정의고객 플랫폼을 MCP로 제공한다.
확인해야 했던 것투자 업무에서 LLM이 실제로 검색·전달·보고 부담을 줄일 수 있는 지점은 어디인가.
제품 정의투자자가 실제 사용하는 LLM 클라이언트에서 기존 플랫폼 데이터를 안전하게 활용할 수 있는 업무 계층을 만든다.
04

사용자 업무에서 제품 범위 찾기

API보다 사용자 업무를 먼저 조사했습니다. VC 투자자 3명을 대상으로 다음을 인터뷰했습니다.

  • 반복적으로 수행하는 투자 업무
  • 업무에서 LLM을 사용하는 방식
  • 플랫폼, 문서, LLM 사이에서 정보를 복사하거나 전달하는 지점
  • 포트폴리오, 보고, 펀드, 알림 데이터를 함께 검색해야 하는 질문

이후 각 후보 업무를 고객 플랫폼이 실제로 보유한 데이터와 대조했습니다. 유용해 보이지만 안정적으로 지원할 수 없는 아이디어는 제외하고, 사용자 요구를 구체적인 제품 명세로 전환했습니다.

인터뷰 × 플랫폼 데이터 × 보안 체계 → 6개 기능
인터뷰 × 플랫폼 데이터 × 보안 체계 → 6개 기능투자자 3명 인터뷰반복 업무 · 실제 LLM 사용플랫폼 API 115개데이터가 실제로 답할 수 있는 범위고객 보안 체계신원 · 다중 회사 격리세 필터를 모두통과한 것만1. 보고 자료 수집 현황2. 검토 현황 브리핑3. 펀드 성과 및 자본금4. 포트폴리오 검색5. 리스크 등급 변동6. 알림 분류
후보 업무는 세 개의 필터를 모두 통과해야 했습니다. 플랫폼 데이터가 안정적으로 답할 수 없는 기능은 구현 도중이 아니라 구현 전에 제외했습니다.
기능지원하는 업무개발 순서
보고 자료 수집 현황기업별 보고 자료 수집 여부 확인1 · 사용자 사전 테스트
검토 현황 브리핑포트폴리오 검토 진행 상태 요약2 · 사용자 사전 테스트
펀드 성과 및 자본금펀드 성과와 자본 관련 정보 조회3 · 사용자 사전 테스트
포트폴리오 검색자연어 요청으로 기업과 포트폴리오 정보 탐색구현 완료
리스크 등급 변동기업 리스크 등급 변동 확인 및 설명구현 완료
알림 분류확인이 필요한 플랫폼 알림 탐색 및 우선순위화구현 완료

개발 순서는 API 구현 편의성이 아니라 관찰된 사용자 가치로 결정했습니다. 이후 6개 기능을 모두 완성했습니다.

05

시스템을 결정한 제약조건

  • Claude나 GPT에서 MCP 서버를 연결해 사용할 때도 고객 로그인과 회사 컨텍스트가 유지되어야 했습니다. 조사에서 확인한 CLI 업무 방식도 포함됩니다.
  • MCP 도구 호출에는 일반적인 브라우저 세션이 유지되지 않았습니다.
  • 고객의 기존 인증 시스템이 계속 사용자 신원의 기준이 되어야 했습니다.
  • 한 명의 투자자가 여러 회사에 소속될 수 있었습니다.
  • 모든 도구 호출은 올바른 회사 컨텍스트를 사용하고 회사별 데이터 격리를 유지해야 했습니다.
  • 고객 플랫폼에 필요한 데이터가 존재하는 기능만 제품으로 정의할 수 있었습니다.
  • 별도 시스템에 포트폴리오 데이터를 복제하지 않고 기존 API와 연동해야 했습니다.
06

핵심 의사결정

01사용자가 실제로 연결하는 MCP 클라이언트를 기준으로 설계한다

초기 논의에서는 데스크톱 중심의 LLM 환경을 가정했습니다. 하지만 실제 시스템은 사용자가 Claude나 GPT에서 MCP를 연결하는 흐름에서 작동해야 했고, 사용자 조사에서 확인한 CLI 업무 방식도 지원해야 했습니다. 최초 가정을 유지하지 않고 실제 연결 환경을 중심으로 설계했습니다.

이 결정으로 상호작용 방식, 인증 경로, 도구 결과를 반환하는 방식이 함께 달라졌습니다.

trade-off데스크톱만 가정했을 때보다 인증 경로가 복잡해집니다. 대안은 사용자의 실제 환경에 맞지 않는 제품이었습니다.
02API가 아니라 사용자 업무를 기준으로 도구를 정의한다

고객 플랫폼에는 115개의 API가 있었지만 모든 엔드포인트를 제공하는 것이 목표는 아니었습니다. 투자자가 완료하려는 업무를 중심으로 데이터와 기능을 묶고, 이를 6개 기능으로 정의했습니다.

MCP 서버가 기존 API를 그대로 복제한, 사용하기 어려운 도구 모음이 되지 않도록 한 결정입니다.

trade-off대부분의 엔드포인트는 노출하지 않습니다. 사용할 수 있는 6개가 사용할 수 없는 115개보다 낫다고 판단했습니다.
03고객의 기존 인증 시스템을 재사용한다

MCP 서버에 별도의 인증정보 저장소를 만들지 않기로 했습니다. 별도 저장소는 신원 데이터를 중복시키고 새로운 보안 경계를 만들며, 계정 변경을 일관되게 유지하기 어렵게 합니다.

대신 Claude나 GPT에서 MCP 서버를 연결하면 고객의 자체 로그인으로 이어지도록 했습니다. 이후 서버는 별도 계정을 만들지 않고 고객이 검증한 신원과 소속 회사 정보를 사용합니다.

기존 인증 체계를 재사용해도 위험이 사라지지는 않고 토큰으로 옮겨갈 뿐입니다. 고객 서비스 흐름의 접근 제어 취약점을 진단하고, 인가 코드 교환에 PKCE를 적용한 뒤 발급된 토큰을 Fernet으로 암호화한 DiskStore에 저장했습니다. 디스크가 탈취되거나 세션이 유출되어도 그대로 사용 가능한 자격 증명이 되지 않도록 했습니다.

trade-off초기 연동 비용이 크고 고객 인증 서비스에 의존하게 됩니다. 대신 신원의 기준이 하나로 유지됩니다.
04모든 요청에서 회사 컨텍스트를 명시적으로 관리한다

한 명의 투자자가 여러 회사에 소속될 수 있어 인증만으로는 데이터 범위를 결정할 수 없었습니다. 서버는 사용자가 어느 회사의 데이터로 작업하려는지도 알아야 했습니다.

두 가지 방식으로 설계했습니다. 요청에 명시적인 회사 키워드가 있으면 해당 회사를 추출하고, 사용자가 변경하거나 확인할 수 있는 명시적 회사 전환 기능을 제공합니다. 선택된 컨텍스트는 이후 도구 핸들러와 고객 API까지 전달됩니다.

trade-off모든 핸들러가 컨텍스트를 함께 다뤄야 합니다. 그렇지 않으면 올바르게 보이는 답이 다른 회사의 데이터일 수 있습니다.
05전체 기능을 완성하기 전에 사용자와 개발 순서를 검증한다

6개 기능을 동일한 우선순위로 보지 않았습니다. 사용자 사전 테스트로 보고 자료 수집 현황을 첫 구현 대상으로 정하고, 검토 현황 브리핑과 펀드 성과·자본금을 다음 순서로 배치했습니다.

개발 순서를 사용자 가치로 설명할 수 있게 되었고, 실제 가치를 더 일찍 검증할 경로를 만들었습니다.

trade-off세 기능은 뒤로 밀렸습니다. 대신 순서를 사용자와 고객 모두에게 설명할 수 있었습니다.
07

서비스 아키텍처

Claude / GPT → MCP 서버 → 고객 플랫폼
Claude / GPT → MCP 서버 → 고객 플랫폼투자자Claude / GPTMCP 클라이언트 (CLI 포함)인증 브리지회사 컨텍스트 해석기업무별 도구 핸들러 (6개)고객 API 클라이언트기존 인증 서비스고객 플랫폼 API회사별로 격리된 데이터로그인검증된 신원 + 소속 회사회사 범위회사 범위 적용 요청범위 적용 데이터구조화된 결과
직접 구현총괄·조율기존 시스템 / 파트너 담당
로그인 연동은 고객의 기존 사용자 체계를 신원의 기준으로 유지합니다. 사용자가 Claude나 GPT에서 MCP 서버를 연결하면 고객 자체 로그인이 사용자를 확인하고 접근 가능한 회사 정보를 전달합니다. 회사 컨텍스트 해석기는 업무별 도구가 플랫폼 API를 호출하기 전에 어느 회사 범위를 사용할지 결정합니다.
08

인증과 회사 전환

이 과정이 프로젝트에서 가장 어려운 통합 문제였습니다. 6개 기능이 유용하더라도 인증이나 회사 컨텍스트가 신뢰할 수 없다면 제품 전체가 작동하지 않습니다.

신원 → 소속 회사 → 회사 범위 → 범위가 적용된 결과
신원 → 소속 회사 → 회사 범위 → 범위가 적용된 결과투자자MCP 클라이언트MCP 서버고객 인증 서비스플랫폼 API1연결2핸드셰이크3로그인4검증된 신원5소속 회사6범위 결정7범위 적용 호출8범위가 적용된 결과
단계 1

사용자가 MCP 서버를 연결합니다

Claude 또는 GPT에서 연결하며, 조사에서 확인한 CLI 업무 방식도 포함합니다.

1 / 8
단계를 눌러 흐름을 확인할 수 있습니다. 핵심은 8단계입니다. 결과는 조회에 사용된 회사 범위 안에서만 서버를 떠날 수 있습니다.
09

실제 도구 호출 한 건

사용자가 가장 먼저 필요하다고 답한 보고 자료 수집 현황 기능의 예시입니다. 값은 모두 대체 데이터이며 고객 데이터는 포함되어 있지 않습니다.

mcp · 보고 자료 수집 현황
mcp · 보고 자료 수집 현황
user이번 분기 보고 자료를 아직 제출하지 않은 포트폴리오 기업은?
ctxcompany context: FUND-A (세션에서 확인 · 전환 가능)
toolreporting_collection_status(period="2026-Q2", status="missing")
out21개 기업 중 4개 미제출 · 기간 2026-Q2 COMPANY-A2 최종 제출 2026-Q1 14일 경과 COMPANY-B7 최종 제출 2026-Q1 9일 경과 COMPANY-C1 제출 이력 없음 신규 편입 COMPANY-D4 최종 제출 2025-Q4 47일 경과
note문장이 아니라 구조화된 결과입니다. 클라이언트가 추가 호출 없이 정렬·필터링하고 후속 작업을 이어갈 수 있습니다.

같은 요청이라도 회사 컨텍스트가 다르면 다른 결과가 반환되며, 두 회사가 함께 반환되는 경우는 없습니다. 회사 격리는 응답을 잘라내는 방식이 아니라 API로 가는 경로에서 적용됩니다.

10

구현

제품 범위 정의와 서버 구현을 함께 진행했습니다.

  1. VC 투자자 3명의 업무와 LLM 사용 방식을 인터뷰했습니다.
  2. 후보 업무를 115개 플랫폼 API 및 보유 데이터와 대조했습니다.
  3. 6개 기능을 정의하고 사용자 사전 테스트로 우선순위를 정했습니다.
  4. Claude / GPT MCP 상호작용 방식과 도구 구성을 명세했습니다.
  5. 서버 아키텍처와 고객 인증 연동 구조를 설계했습니다.
  6. 사용자 소속 회사 조회와 회사 컨텍스트 전환을 구현했습니다.
  7. MCP 서버와 6개 업무별 도구 핸들러를 모두 직접 작성했습니다.
  8. 고객 자체 로그인과 다중 회사 컨텍스트 연동을 완성했습니다.
  9. 전체 시스템을 테스트하고 2개월 안에 납품했습니다.
11

결과 — 그리고 주장하지 않는 것

납품한 것

  • 구체적이지 않았던 MCP 요청을 실제 작동하는 6개 투자 업무로 구현했습니다.
  • 플랫폼 API 115개를 사용자 요구와 사용 가능한 데이터에 맞춰 분석했습니다.
  • VC 투자자 3명과의 사전 테스트로 개발 순서를 결정했습니다.
  • Claude·GPT에서 MCP를 연결할 때 고객 자체 로그인을 사용하도록 구현했습니다.
  • 인증, 회사 전환, 회사별 데이터 격리를 핵심 시스템 동작으로 완성했습니다.
  • 2개월 단독 프로젝트 전체를 유료 고객 프로젝트로 납품했습니다.

납품 상태

  • 제품 정의, MCP 서버, 6개 업무 기능, 고객 로그인, 다중 회사 컨텍스트까지 모두 완료했습니다.
  • 고객 프로젝트는 개발과 납품이 종료된 상태입니다.

주장하지 않는 것

  • 납품 이후 사용량 지표는 프로젝트 범위가 아니었고 여기서 주장하지 않습니다.
  • 고객 만족도는 이번 프로젝트에서 측정하지 않았습니다.
12

배운 점

고객이 특정 기술을 요청하더라도 제품은 별도로 발견하고 정의해야 합니다. 실제 명세는 사용자의 업무, 플랫폼이 보유한 데이터, 고객이 운영하는 보안 체계가 만나는 지점에서 만들어졌습니다.

기능 목록은 시스템의 일부에 불과했습니다. 인증과 회사 컨텍스트는 모든 업무 결과를 신뢰할 수 있는지를 결정하기 때문에, 처음부터 제품 동작의 일부로 설계해야 했습니다.

모든 다이어그램은 실제 구조를 바탕으로 다시 그렸으며, 고객사명·데이터·식별자는 제거했습니다.