현재 Claude Code는 터미널 환경에서 사용할 수 있도록 설정해 두었다.
Claude Code를 도입한 가장 큰 이유는 MCP 서버를 자유롭게 연결하고 제어하기 위함이었다.
(물론 최근에는 Claude Desktop에서도 MCP 연동이 가능해지면서 Claude Code의 필요성이 조금 줄긴 했지만, 한도에 걸리지 않고 Claude를 사용할 수 있다는 점은 여전히 큰 장점이다.)
현재 많은 개발자들이 Cursor를 통해 LLM 기능을 프로젝트 전반에 자유롭게 활요하고 있다. 그만큼 VSCode 생태계로의 이동도 많아졌지만, 기존에 Intellij에 익숙한 사용자들은 여전히 단축키나 워크플로우 이질감 때문에 Intellij를 선호하고 있는 상황이다.
이미지 출처: naver blog
나 역시 현재는 Cursor와 Intellj를 병행하여 사용중이다. ( 코드 작성은 Intellij에서, LLM 호출은 필요할 때마다 Cursor에서) 하지만 이렇게 병행할 경우, 화면이 분산되고, 툴 간 전환이 자주 발생해서 불편함이 크다. 따라서, Intellij 자체에 Claude MCP 서버를 연결함으로써, IntelliJ를 Cursor처럼 쓰고 싶은 욕구가 있었다. 이것이 Claude code를 도입하고 MCP를 구성한 첫 번째 이유였다.두 번째로 MCP 연동을 적용한 대상은 Atlassian Wiki였다. 목표는 다음과 같다:
Intellij의 경우, 2025년 2월 릴리스를 기준으로 JetBrains에서 공식적으로 MCP Server를 지원하게 되어 연동이 간편하다. 하지만 Wiki는 직접 MCP 서버를 개발해야 하며, 구현 복잡도나 연동 과정도 그만큼 많아지는 편이다.
그래서 이 문서에는 보다 간단한 Intellij MCP 연동부터 먼저 설명하고자 한다.
intellij의 경우엔 MCP server를 지원해주기 때문에, 간단히 enable만 해주면 된다.
Intellij를 mcp 연동하기 위해서 가장 중요했던 부분은 버전 확인이다. 2025.2월 release가 꼭 반영되어 있어야 한다.
다음으로 MCP Server plugin을 enable 해준다.
settings > plugins
에서 MCP Server를 검색하고 Enable 하면 된다.
Settings > Tools > MCP Server
에서 Claude Code를 Auto-Configure할 수 있다. Tools에서 MCP Server가 보이지 않는다면, 2025.2 릴리즈가 반영되지 않는 것일수도 있으니 확인 바란다.
이후, Claude Code에서 /mcp 명령어로 Intellij와의 통합이 가능해지며, cursor 처럼 claude가 코드 파일을 탐색.편집.실행할 수 있게 된다.
이후, Auto-Configure 옆에 있는 화살표를 누르게 되면 Copy Config라는 버튼이 보인다. 복사한 내용은 아래와 같다.
{
"jetbrains": {
"url": "http://localhost:64342/sse",
"type": "sse"
}
}
해당 코드는 mcp client(claude code)로 하여금 intellij를 mcp server로서 인식하게 해주는 코드이다. 해당 url 주소로 claude code가 SSE 연결을 열게 된다.
해당 코드를 원래 root directory / .claude.json 편집을 통해 넣어주어야 하는데, Auto-Configure를 누르는 순간에 이미 해당 json에 편집 적용이 되었다.
터미널에서 claude code로 들어간 후, /mcp
명령어를 통해 jetbrains (intellij) 가 잘 연결되었음을 확인할 수 있다.
이후, leo-banner에 테스트 파일 만들어줘. 라고 요청하면 잘 생성하는 것을 확인할 수 있다.
다음으로, wiki를 mcp 연동해보자.
wiki는 기본적으로 mcp server를 제공해주지 않기 때문에, mcp server를 직접 만들어주어야 한다.
MCP Server Example : 해당 문서에서 언어 별로 어떻게 MCP Server를 만드는지 간단한 예제가 있었다. 이를 참고해서 서버를 구성하였다. 언어의 경우, 익숙한 언어인 Java (Spring)을 선택하였다.
서버를 구성하면서 주의해야 하는 점은 STDIO 기반 서버로 구성하게 될 경우에는 로깅에 조심해야 한다. 로깅이 JSON_RPC 메시지를 손상시킬 수 있다.
dependencies {
implementation platform("org.springframework.ai:spring-ai-starter-mcp-server")
implementation platform("org.springframework:spring-web")
}
dependency를 이렇게 추가하라고 하지만, 사실 이렇게 추가하면 mcp 관련 어노테이션을 불러오지 못한다.
platform 은 BOM 용으로 사용하는 키워드이다. (버전 맞추기 위해서) 하지만, spring-ai-mcp-server는 일반 JAR 라이브러리지 BOM이 아니기 때문에 동작하지 않는다.
// BOM을 명시적으로 선언해서 전체 버전 일치 유도
implementation platform("org.springframework.ai:spring-ai-bom:1.1.0-M3")
// 실제 사용할 MCP 서버용 라이브러리
implementation 'org.springframework.ai:spring-ai-starter-mcp-server'
따라서, 위와 같이 dependency를 다시 적어주었다.
sonatype : 해당 라이브러리 저장소에서 spring-ai-mcp-server에 대한 gradle snippets를 참고해서 적었다.
다음으로, yml 파일들을 작성하였다.
spring:
application:
name: mcp_server
main:
banner-mode: off
MCP 기반 서버는 앞에서 말했듯, 로그에 민감하기 때문에 banner-mode를 off로 설정하였다.
다음으로, application-secret.yml을 구성해주어, 보안 관련된 것들을 따로 관리해 주었다. (.gitignore)
wiki:
base-url: https://atlassian.net/wiki
email: 이메일@gmail.com
api-token: 개인 wiki 토큰 생성
space-key: 스페이스 키
이제 본격적으로 코드 작성으로 넘어간다.
본격적인 WikiService에 대한 코드 확인은 아래 github repository를 통해 확인할 수 있다.
Github repository : https://github.com/20hyukim/personal-mcp-server
일부 코드를 발췌하여 살펴보면 다음과 같다 :
@Tool(description = "Search wiki pages by keyword in title")
public String searchPages(
@ToolParam(description = "Search keyword") String keyword
) {
String cql = "title~\"" + keyword + "\"";
String uri = "/rest/api/content/search?cql=" + UriUtils.encode(cql, StandardCharsets.UTF_8);
return restClient.get()
.uri(uri)
.retrieve()
.body(String.class); // Claude에게 JSON 결과 그대로 전달
}
이 메서드는 @Tool
어노테이션을 통해 Claude Code에서 호출 가능한 MCP Tool로 등록된다. Claude가 이 MCP 서버에 연결되면, /searchPages
와 같은 명령어를 통해 이 메서드를 실행할 수 있게 된다.
내부적으로는 Atlassian Confluence Wiki의 REST API 중 /rest/api/content/search
엔드포인트를 호출하며, title~ “키워드” 형식의 Query Language를 사용하여 제목에 키워드가 포함된 페이지들을 검색한다.
요청 결과는 JSON 형태로 반환되며, body로 변환해 가공 없이 그대로 claude에게 전달해주게 된다. 즉, claude는 이 결과를 그대로 받아 내용을 요약하거나, 정제해여 추가적인 작업을 수행하게 된다.
이렇게 service코드 작성을 마지막으로 코드 작성이 완료되었다.
글로벌 설정 해주는 ~/.claude.json
에 wiki mcp 서버를 추가할 것이다. 그전에 해당되는 mcp_server를 빌드하는 것을 잊지 말자.
해당 파일에서 mcpServers에 해당하는 필드에 mcp_server 를 추가해준다.
"mcpServers": {
"jetbrains": {
"type": "sse",
"url": "http://localhost:64342/sse"
},
"mcp_server": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-jar",
"/jar파일까지의 절대 경로/mcp_server-0.0.1-SNAPSHOT.jar"
],
"transport": "stdio"
}
}
"/jar파일까지의 절대 경로/mcp_server-0.0.1-SNAPSHOT.jar"
보시다 싶이, 빌드된 파일의 jar 절대 경로를 적어주었다.
작성한 .claude.json을 저장해주고, terminal을 닫았다가 켜준다.
동일하게, /mcp
로 mcp_server가 연동되어 있음을 확인할 수 있다.
MCP를 직접 다뤄보면서, 하나의 문턱을 넘은 듯한 느낌을 받았다. 이 경험을 통해, 앞으로 개발 과정에서 필요하다고 느껴지는 대상들을 MCP 서버로 연동해두고, Claude를 통해 자유롭게 활용할 수 있을 것이라는 확신이 생겼다.
예를 들어 추후에 MySQL이나 Postman 같은 도구들과 연동해 두면, API 테스트나 쿼리 실행처럼 반복적인 작업을 훨씬 더 편리하게 처리할 수 있을 것이라 기대된다.