35-Tool MCP 서버를 구축해 AI 토큰 사용량을 95% 절감했습니다
Source: Dev.to
번역을 진행하려면 번역하고자 하는 전체 텍스트를 제공해 주세요. 코드 블록이나 URL은 그대로 유지하면서, 본문만 한국어로 번역해 드리겠습니다.
컨텍스트가 무거운 AI 코드 탐색 – 문제
- 모델이 파일을 하나씩 읽으며 프로젝트 구조를 이해하기 위해 50 K+ 토큰을 소모했습니다.
- 실제 작업을 시작하기 전에 컨텍스트 제한에 도달했습니다.
내 솔루션 – MCP Repo 컨텍스트 서버
I built an MCP (Model Context Protocol) server that analyzes a codebase once, extracts everything an AI agent needs (function behaviours, call graphs, DB queries, HTTP calls, …), and serves precise answers in 2‑4 K tokens instead of 50 K+.
작동 방식
When you point an AI agent at a codebase, it has no memory. Every session starts from scratch, runs grep, reads files one by one, and builds a mental model—slowly, expensively, and incompletely.
For a medium‑sized Go project (~100 files) a typical exploration burns:
| 문제 | Tokens |
|---|---|
| 존재하는 함수 파악하기 | ≈ 50 K |
grep → read 를 여러 차례 수행 | – |
| 파일 간 관계(호출 그래프) 누락 | – |
이것은 AI 문제가 아니라 컨텍스트 전달 문제입니다.
아키텍처
┌──────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI Agent │────▶│ MCP Server │────▶│ Storage Layer │
│ (Claude) │◀────│ (JSON‑RPC/stdio)│◀────│ JSON + SQLite │
└──────────────┘ └──────────────────┘ └─────────────────┘
│
┌───────┼───────┐
▼ ▼ ▼
AST Parser Vector Call Graph
(Go) Search Builder
작동을 가능하게 하는 세 가지 레이어
-
AST 파싱 – Go의
go/ast패키지를 사용하여 추출:- 모든 함수 시그니처
- 단계별 동작
- DB 쿼리, HTTP 호출, 오류 처리 패턴, 부수 효과
- 래핑된 오류, 지연 호출, 고루틴 실행(정규식이 아닌 실제 구문 트리 탐색)
-
시맨틱 벡터 검색 – 각 함수/타입은 SQLite에 저장된 384차원 TF‑IDF 임베딩을 갖습니다.
- “인증 코드 찾기”와 같은 쿼리는 의미적으로 유사한 함수를 매칭합니다.
- 외부 API 호출 없이 로컬에서 임베딩을 계산합니다.
-
콜 그래프 추출 – 전체 콜 그래프(직접 호출, 고루틴, 지연 호출)를 구축합니다.
get_callers및visualize_call_graph와 같은 도구를 지원합니다(머메이드 다이어그램).
Sample Tools (35 total)
| Category | Tool | Description |
|---|---|---|
| Function Insight | get_function_context | 동작 요약, 실행 단계, DB 쿼리(실제 SQL), HTTP 호출(엔드포인트), 오류 처리 패턴, 호출자 및 피호출자를 반환합니다. |
| Side‑Effect Search | search_by_side_effect | effect: "db_query" → DB에 접근하는 모든 함수(쿼리 포함). http_call, file_io, logging에도 적용됩니다. |
| Concept Search | search_by_concept | concept: "authentication" → 의미 인덱스로 구동되는 인증 관련 모든 함수. |
| Incremental Update | refresh_file | 변경된 단일 파일을 약 10 ms에 재분석하여 저장된 컨텍스트를 업데이트합니다. |
| Visualization | visualize_call_graph | 호출자와 피호출자의 관계를 지정 깊이로 Mermaid 흐름도로 생성합니다. |
토큰 사용량 비교
| 작업 | 에이전트 전용 (Claude) | MCP 서버 |
|---|---|---|
| 함수 이해 | ~50 K 토큰 | ~4 K 토큰 |
| 관련 코드 찾기 | ~30 K 토큰 | ~2‑3 K 토큰 |
| 파일 편집 후 (전체 재탐색) | ~1‑2 K 토큰 | – |
| 자연어 Q&A | 불가능 | ~8 K 토큰 |
결과: 쿼리당 토큰 사용량이 10‑25배 감소 → 컨텍스트 제한 초과가 없고, 빠르고 반응성 좋은 AI 지원.
구현 세부 사항
-
Dependencies:
go-git(Git 작업)와go-sqlite3(벡터 저장)만 사용합니다.
나머지 기능(AST 파싱, HTTP 처리, JSON)은 Go 표준 라이브러리를 이용 → 바이너리 크기 작고, 공급망이 최소화되며, 배포가 간단합니다. -
Embeddings: OpenAI 임베딩 API 대신 로컬 TF‑IDF를 선택했습니다.
- 코드 검색에 충분한 품질을 제공 (함수 이름 및 패턴이 구별 가능).
- 오프라인 동작, 지연 시간 0, API 키 불필요, 속도 제한·비용 없음.
-
Result Pagination: 검색 결과는 간결한 레퍼런스로 반환되며, 각 레퍼런스에는 AI가 상세 정보를 요청할 수 있는
detail_ref가 포함됩니다.- AI는 ~2 K 토큰 안에 약 20개의 매치를 받아보고, 실제로 필요한 2‑3개에 대해서만 전체 내용을 가져옵니다.
-
Concurrency: 서로 다른 레포지토리 분석은 동시에 실행되며, 동일 레포지토리 내 작업은 순차적으로 처리됩니다.
- 전역 뮤텍스를 피하면서 서비스 간 병렬 작업을 가능하게 합니다.
-
Language Support: 현재 Go 전용 깊은 AST 분석을 제공하고, 다른 언어는 기본 구조만 추출하는 일반 추출기를 사용합니다 (동작 세부 사항은 제공되지 않음).
- 다음 단계: Python 및 TypeScript용 Tree‑Sitter 파서 추가.
-
Transport: 현재는 STDIO 전용입니다. MCP 사양은 HTTP/SSE도 지원하므로, 서버를 장기 실행 데몬으로 운영해 여러 AI 세션이 공유하도록 할 수 있습니다.
- 현재는 각 Claude Code 세션이 자체 서버 프로세스를 생성합니다.
로드맵 – 조직 수준 인텔리전스로 확장
핵심 기능: “누군가
/login을 호출하면 어떻게 될까?”
서버는 전체 흐름을 추적해야 합니다:
- Request → Service A
LoginHandler→ Service B/auth/validate→ Kafkauser.verified→ Service CVerificationHandler.
이를 달성하기 위해서는 다음이 필요합니다:
- HTTP 클라이언트 호출 감지 – 외부 HTTP 호출을 추출하고 대상 서비스/엔드포인트를 추론합니다.
- 메시지 버스 (Kafka) 흐름 추적 – 프로듀서/컨슈머를 식별하고 토픽을 핸들러에 매핑합니다.
- 크로스 서비스 호출 그래프 – 레포별 그래프를 통합하여 전역 뷰를 만듭니다.
- 전송 업그레이드 – 지속적인 데몬을 위해 HTTP/SSE를 구현합니다.
- 다중 언어 AST – Python 및 TypeScript용 Tree‑Sitter 파서를 추가하여 지원 범위를 확대합니다.
TL;DR
- 문제: AI 에이전트가 코드베이스를 이해하는 데만 수만 토큰을 낭비합니다.
- 해결책: 레포를 한 번 사전 처리하고 풍부한 AST 기반 메타데이터를 저장한 뒤 경량 MCP 서버를 통해 제공합니다.
- 결과: 쿼리당 2‑4 K 토큰, 오프라인 작동, 빠른 증분 업데이트, 그리고 조직 전체 코드 인텔리전스로 가는 명확한 경로.
Source: …
MCP Repo Context – Recent Enhancements
Overview
MCP 서버는 개발자가 코드를 실행하지 않아도 더 풍부한 교차‑레포 인사이트를 제공하도록 진화하고 있습니다. 아래는 새로운 기능, 도구 및 사용 방법을 간결하게 마크다운 형식으로 정리한 내용입니다.
1. End‑to‑End Request Tracing
- Static analysis가 이제 대상 URL, 라우트 등록(
gorilla/mux등) 및 비동기 메시지 생산자/소비자(Kafka, RabbitMQ, NATS)를 파싱합니다. - 파싱된 데이터를 레포 전체에 매핑하여 서비스‑간 흐름 그래프를 구축합니다.
- 새 도구:
trace_api_flow– 진입점부터 모든 하위 서비스까지 요청을 추적합니다.get_service_map– 전체 서비스 연결 지도를 시각화합니다.
배포되지 않은 코드에 대한 분산 추적을 위한 정적 분석이므로 OpenTelemetry 계측이 필요하지 않습니다.
2. Full Module Dependency Parsing
- 서버가 이제
go.mod파일을 읽어 다음을 처리합니다:- 직접 및 간접 의존성.
replace지시문.- 임포트 분류(표준 라이브러리 vs. 내부 vs. 외부).
- 도구:
get_dependency_graph– 레포 간 의존 관계를 보여주는 Mermaid 다이어그램을 출력합니다.
이는 교차‑레포 기능의 기반을 형성합니다.
3. Organization‑Wide Semantic Indexing
- 레포를 조직 모델 아래에 그룹화할 수 있습니다.
search_org도구가 추가되어 다음을 결합합니다:- 키워드 검색.
- 벡터 검색.
- reciprocal rank fusion을 통한 하이브리드 랭킹.
예시 쿼리: “find authentication code” → 50개 이상의 레포에서 결과를 반환하고, 관련도에 따라 순위를 매깁니다.
4. One‑Call PR Impact Analysis
여러 도구를 호출하는 대신, 에이전트가 이제 단일 함수를 호출할 수 있습니다:
analyze_pr_impact– 다음을 반환합니다:- 변경된 함수 동작.
- 영향을 받는 호출자.
- 교차 서비스 영향.
- 의존성 수준 영향.
- 위험 평가.
가장 흔한 세 가지 워크플로(PR 영향 분석, API 흐름 설명, 아키텍처 검토)를 위한 레시피가 8 K 토큰 예산 내에 머무릅니다.
5. Extensible Analyzer & Embedder
- 플러그인 인터페이스 도입:
AnalyzerPlugin– 언어 지원 추가(TypeScript, Python 등).EmbedderPlugin– 임베딩 모델 교체.
현재 실험 중인 모델: Voyage Code‑3 – 코드 검색에서 OpenAI보다 16 % 향상되었습니다.
6. REST API & Multi‑Tenant Deployment
- 핵심 도구가 이제 REST API로 래핑되어 제공됩니다:
- 푸시 이벤트에 대한 자동 분석을 위한 GitHub/GitLab 웹훅 통합.
- 조직 격리를 위한 멀티‑테넌트 스토리지.
- 비동기 분석 큐잉.
목표: 개발자마다가 아니라 팀 전체에 한 번 배포하는 것.
7. Open‑Source Repository
https://github.com/yashpalsinhc/mcp-repo-context
8. Configuration for Claude Code
다음 항목을 MCP config(JSON‑RPC over stdio)에 추가하세요:
{
"mcpServers": {
"repo-context": {
"command": "path/to/mcp-repo-context",
"args": ["--data-dir", "~/.mcp-data"]
}
}
}
9. Typical Claude Code Interaction
> Analyze my local project at /path/to/repo
> What does the CreateUser function do?
> Find all database operations
> Show me the call graph for HandleLogin
10. Takeaway
AI 기반 개발자 도구를 구축한다면 MCP 생태계를 탐색해 볼 가치가 있습니다:
- 간단한 프로토콜(JSON‑RPC over stdio).
- Go 기반 서버는 성능이 뛰어나고 확장이 쉽습니다.
- 비용이 많이 들고 느린 AI 탐색을 빠르고 정확한 질의로 전환합니다.
저는 이 서버를 매일 사용합니다 – AI와 코드를 다루는 방식이 완전히 바뀌었습니다.