mcpj

기존 Java 코드를 AI 모델에 연결합니다

이미 운영 중인 서비스 메서드에 애노테이션을 선언하면 AI 모델이 호출할 수 있는 MCP 서버가 됩니다. 런타임 의존성이 없고, 단일 JAR로 Java 8부터 26까지 동작합니다.

MCP 2026-07-28 Java 8 – 26 런타임 의존성 0 Apache 2.0

세 줄이면 됩니다

기존 서비스 클래스를 그대로 두고 애노테이션만 선언합니다. HTTP를 경유하지 않고 동일 프로세스에서 호출하므로 트랜잭션과 보안 컨텍스트가 유지됩니다.

Java
@Service
public class OrderService {

    @McpTool(description = "주문 번호로 주문 상세를 조회한다", readOnly = true)
    public Map<String, Object> findOrder(
            @McpParam(name = "orderId", description = "주문 번호") String orderId) {
        return repository.findAsMap(orderId);
    }
}
Java — 서버 구성
McpServer server = McpServer.named("주문 서비스")
        .expose(orderService)
        .build();

String url = server.listen(8080);   // http://127.0.0.1:8080/mcp

설치

의존성을 추가합니다. 전이 의존성이 없으며 Java 표준 라이브러리만 사용합니다.

pom.xml
<dependency>
  <groupId>com.wangbyul</groupId>
  <artifactId>mcpj</artifactId>
  <version>0.1.0</version>
</dependency>

Spring Boot 환경에서는 mcpj-spring-boot-starter를 사용하면 자동 구성이 적용됩니다. 자세한 설정은 사용 설명서를 참고하십시오.

노출 방식

기존 자산의 형태에 맞는 방식을 선택합니다. 여러 방식을 하나의 서버에 함께 등록할 수 있습니다.

서비스 메서드

@McpTool · @McpResource · @McpPrompt를 선언해 기존 메서드를 직접 노출합니다.

REST API

OpenAPI 문서를 읽어 엔드포인트마다 도구를 자동으로 생성합니다.

데이터베이스

사전 정의한 SQL 질의만 노출합니다. 파라미터는 PreparedStatement로 바인딩됩니다.

다른 MCP 서버

HTTP로 떠 있는 서버와 프로세스로 실행되는 stdio 서버를 모두 중계합니다.

단일 JAR, Java 8 – 26

멀티 릴리스 JAR 구조로 여러 계층을 포함하며, 실행 중인 Java 버전에 맞는 구현이 자동으로 선택됩니다. 공식 MCP Java SDK는 Java 17 이상을 요구하므로 Java 8·11 애플리케이션에는 적용할 수 없습니다.

런타임외부 HTTP 호출동시성요청 컨텍스트
8 – 10HttpURLConnection고정 크기 스레드 풀ThreadLocal
11 – 20HttpClient고정 크기 스레드 풀ThreadLocal
21 – 24HttpClient가상 스레드ThreadLocal
25 이상HttpClient가상 스레드ScopedValue

검증 현황

모의 객체가 아니라 실제로 동작하는 구성요소를 대상으로 검증합니다.

테스트1,048개 통과 · 실패 0
Java 런타임8 – 26 전 19개 버전 · 171개 검사 · 실패 0
프로토콜 상호운용공식 MCP TypeScript SDK 2.0.0 (클라이언트·서버 양쪽)
중계 사슬공식 서버 SDK → mcpj → 공식 클라이언트 SDK
인가 서버Keycloak 26.7. 실제 발급 토큰으로 검증
데이터베이스PostgreSQL 18 · H2
서블릿 컨테이너Jetty 11 · Tomcat 9 · Tomcat 7 (Java 8)
OpenAPI 변환Petstore · Stripe · GitHub 실제 문서
문서코드 예제 30개 컴파일 검증 · API 표 81개 대조
런타임 의존성0개. 빌드 단계에서 강제합니다