안녕하세요! 핀태그 기술 개발팀 입니다!
1. MCP는 AI 앱의 USB-C입니다
AI에게 "우리 회사 이번 달 카드 지출 정리해줘"라고 물으려면, AI가 우리 회사 데이터를 읽을 수 있어야 합니다. 문제는 AI 앱과 데이터를 가진 서비스가 둘 다 여러 개라는 점입니다.
AI 앱이 4개, 연결할 서비스가 10개라면 필요한 연동은 40개입니다. 서비스마다 인증 방식도, 데이터 형식도 다릅니다. 예전에 노트북마다 충전기가 달랐던 상황과 같습니다.

규격이 정하는 것은 세 가지입니다.
- 무엇을 할 수 있는지 알려주는 방법 — 서비스가 제공하는 기능 목록을 AI가 물어볼 수 있습니다.
- 그 기능을 실행하는 방법 — 이름과 인자를 정해진 형식으로 주고받습니다.
- 인증하는 방법 — 누가 요청했고 어디까지 허용되는지 확인합니다.
2. 도구(tool)라는 개념
AI 앱이 연결되면 먼저 도구 목록을 요청합니다. 서버는 이렇게 답합니다.
{ "name": "get_card_transactions",
"description": "카드 사용 내역을 기간·조건으로 찾아줍니다",
"inputSchema": { "from": "날짜", "to": "날짜", "cardId": "선택" } }
get_card_transactions를 기간 인자와 함께 호출합니다. 개발자가 질문 유형별로 분기를 짜두는 게 아니라, 도구 설명만 잘 써두면 AI가 판단합니다.3. SDK를 쓰지 않고 직접 구현한 이유
MCP에는 공식 SDK가 있습니다. 저희는 쓰지 않았습니다.
MCP의 전송 방식 중 하나인 stateless Streamable HTTP는 요약하면 이렇습니다.
POST로 들어온 JSON-RPC 요청을 처리해서 JSON으로 답한다. 끝.
대신 규격 준수는 스스로 검증해야 합니다. 저희는 25개 항목의 점검 목록을 만들어 확인했습니다. 디스커버리 문서, 미인증 요청의 응답 형식, 인가 코드 재사용 차단, 도구 목록 필터, 테넌트 격리 같은 것들입니다.
4. 인증 — 비밀번호를 AI 앱에 주지 않는 방법
가장 중요한 부분입니다. AI 앱에 핀태그 아이디와 비밀번호를 입력하게 하면 안 됩니다. 그 앱이 비밀번호를 그대로 갖게 되기 때문입니다.
1) AI 앱이 "핀태그에 연결하고 싶다"고 요청
2) 사용자의 브라우저가 열리고 → 핀태그에서 로그인
3) "이 앱에 어떤 권한을 줄지" 동의 화면 표시
4) 동의하면 핀태그가 그 앱에만 쓸 토큰을 발급
5) 이후 AI 앱은 토큰으로만 요청
비밀번호는 핀태그 화면에서만 입력되고, AI 앱은 토큰만 갖습니다. 마음에 안 들면 그 토큰만 지우면 됩니다.
여기에 저희가 더한 것들입니다.
- PKCE는 S256만 허용합니다. 중간에서 인가 코드를 가로채도 쓸 수 없게 하는 장치인데, 구식 방식(plain)은 아예 거부합니다.
- 토큰 원문을 저장하지 않습니다. 데이터베이스에는 해시만 둡니다. DB를 통째로 열람해도 그 값으로는 API를 호출할 수 없습니다.
- 수명을 짧게 둡니다. 인가 코드 10분·1회, 액세스 토큰 1시간, 리프레시 토큰 30일입니다.

5. 권한 — 연결했다고 다 보이지 않습니다

6. 멀티테넌트 — 토큰에 회사 정보를 넣지 않은 이유
같은 이유로 남용 차단도 서버 쪽에서 합니다. 토큰당 호출 횟수에 상한을 두고, 30일 넘게 쓰이지 않은 앱 등록은 자동으로 정리합니다.
7. 만들면서 느낀 것
- 이 도구를 외부 AI 앱에 노출해도 되는가
- 실행 전에 사람의 확인이 필요한가
- 결과에 마스킹해야 할 값이 있는가
저희는 공동인증서와 계정 비밀번호를 조회 대상에서 제외하고, 계좌번호와 카드번호는 마스킹해서 전달합니다. 앱 화면 전용 도구는 외부에 노출하지 않습니다.
📌 쓰시던 AI 앱에서 바로 회사 금융 데이터를 확인해 보세요
핀태그를 한 번 연결하면 Claude·ChatGPT 같은 앱에서 우리 회사 실제 데이터로 답을 받을 수 있습니다.
2주 무료 체험으로 연결부터 확인해 보세요. → app.fintag.kr
![[기술블로그] MCP란 무엇인가 — AI에게 우리 회사 데이터를 안전하게 열어주는 법](/_next/image?url=https%3A%2F%2Fcdn.fintag.kr%2Fblog%2F91394e67-f428-427a-9bf2-74d9a8b90f14.png&w=2048&q=75)
![[인사이트] 10월 부가세 예정신고, 우리 회사는 신고일까 고지일까](/_next/image?url=https%3A%2F%2Fcdn.fintag.kr%2Fblog%2Fcff7920f-aaae-4950-b9f8-4ff0b191e5b3.png&w=2048&q=75)
![[Press] KINGO-GA 창업경진대회, 마이딜 금상 수상](/_next/image?url=https%3A%2F%2Fcdn.fintag.kr%2Fblog%2F6878755a-c164-418b-be87-2111ff178a09.jpg&w=2048&q=75)
