블로그 목록
AIMCP개발도구

MCP로 AI에게 내 프로젝트 컨텍스트 주기 — Model Context Protocol 실전 정리

AI 코딩 툴이 많아졌는데, 항상 걸리는 게 컨텍스트 문제다. 코드베이스의 특정 규칙이나 API 형태를 모르니까 자꾸 엉뚱한 코드를 제안한다. 프롬프트마다 배경 설명을 붙여주는 것도 금방 한계가 온다.

MCP(Model Context Protocol)는 Anthropic이 발표한 오픈 표준이다. AI 어시스턴트가 외부 도구, 파일, API에 표준화된 방식으로 접근하게 해주는 프로토콜이다. Claude Desktop, Cursor, Windsurf 같은 툴에서 지원하고, 직접 서버를 만들어서 붙일 수 있다.

MCP가 해결하는 문제

기존엔 AI에게 "우리 API는 이런 구조입니다"를 매번 설명해야 했다. MCP를 쓰면 서버가 tools와 resources를 제공하고, AI가 필요할 때 직접 호출한다.

  • resources: AI가 읽을 수 있는 데이터 (파일, DB 조회 결과 등)
  • tools: AI가 호출할 수 있는 기능 (검색, API 호출, 파일 읽기 등)
  • prompts: 재사용 가능한 프롬프트 템플릿

간단한 MCP 서버 만들기

@modelcontextprotocol/sdk를 쓰면 TypeScript로 바로 만들 수 있다.

npm install @modelcontextprotocol/sdk
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';

const server = new Server(
  { name: 'my-project-mcp', version: '1.0.0' },
  { capabilities: { tools: {} } }
);

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: 'get_api_routes',
    description: '프로젝트의 API 라우트 목록을 반환합니다',
    inputSchema: { type: 'object', properties: {} },
  }],
}));

server.setRequestHandler(CallToolRequestSchema, async (req) => {
  if (req.params.name === 'get_api_routes') {
    const routes = await scanProjectRoutes('./app/api');
    return { content: [{ type: 'text', text: JSON.stringify(routes, null, 2) }] };
  }
  throw new Error('Unknown tool');
});

const transport = new StdioServerTransport();
await server.connect(transport);

Claude Desktop에 연결하기

~/Library/Application Support/Claude/claude_desktop_config.json에 서버를 등록한다.

{
  "mcpServers": {
    "my-project": {
      "command": "node",
      "args": ["/path/to/my-mcp-server/index.js"]
    }
  }
}

Claude Desktop을 재시작하면 채팅창에서 등록한 툴을 바로 쓸 수 있다.

실제로 유용한 활용 예시

DB 스키마 컨텍스트: Prisma schema 파일을 읽어서 반환하는 resource를 만들면, AI가 테이블 구조를 알고 쿼리를 짜준다.

디자인 토큰 참조: CSS 토큰 파일을 읽는 tool을 만들면, 컴포넌트 코드 작성 시 실제 토큰 값을 활용한다.

팀 컨벤션 주입: 코딩 컨벤션 문서를 resource로 제공하면 프롬프트마다 "우리 팀은 이렇게 씁니다" 설명을 반복하지 않아도 된다.

server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
  if (req.params.uri === 'project://conventions') {
    const content = fs.readFileSync('./CONVENTIONS.md', 'utf-8');
    return {
      contents: [{
        uri: req.params.uri,
        mimeType: 'text/markdown',
        text: content,
      }],
    };
  }
});

공개된 MCP 서버 활용하기

직접 만들지 않아도 GitHub, Slack, Notion, Linear, Postgres 등의 서드파티 MCP 서버가 이미 많다. claude_desktop_config.json에 등록하는 것만으로 바로 쓸 수 있다.

예를 들어 Postgres MCP 서버를 연결하면 AI에게 "users 테이블에서 오늘 가입한 사람 뽑아줘"라고 물어볼 수 있다. SQL을 직접 안 써도 된다는 게 아니라, AI가 스키마를 직접 확인하고 정확한 쿼리를 만든다는 게 포인트다.


MCP는 표준 프로토콜이라 한 번 만들어두면 여러 AI 툴에서 재사용할 수 있다. 생태계가 빠르게 성장하고 있어서 웬만한 서비스용 서버는 이미 누군가 만들어 공개한 상태다. 프로젝트 특화 컨텍스트가 필요한 경우만 직접 만드는 것으로도 충분하다.