QUICK START
개발자 시작 가이드
API key를 발급하고, TypeScript·Java SDK나 MCP 서버로 첫 메시지를 보내 보세요.SDK와 MCP 서버는 아직 npm·Maven 같은 패키지 저장소에 배포하기 전이에요. 연동을 준비 중이라면 1:1 문의로 알려 주세요.1. API key 발급
콘솔의 API 키 관리에서 필요한 권한만 담은 키를 만들고, 발신번호 승인과 잔액 충전을 마쳐 두세요. 키 원문은 발급할 때 한 번만 보여요.API key 발급하기2. SDK로 보내기
TypeScript SDK
Node.js 22.13 이상에서 동작하고 런타임 의존성이 없어요. 미리보기로 최종 유형을 확인한 뒤 멱등 키와 함께 보내요.send-notice.ts — typescriptimport { MsgmcpClient } from "@msgmcp/sdk";const client = new MsgmcpClient({publicBaseURL: process.env.MSGMCP_PUBLIC_URL!,p5BaseURL: process.env.MSGMCP_COMPOSITION_URL!,apiKey: process.env.MSGMCP_CUSTOMER_API_KEY!,});const message = {sender_id: "approved-sender",recipient: "+821012345678",classification: "TRANSACTIONAL",mode: "NORMAL",requested_type: "AUTO",body: "#{name}님, 주문이 접수되었어요.",variables: { name: "김엠시" },} as const;await client.preview(message);const accepted = await client.send(message, {idempotencyKey: "order-123-notice",});await client.getMessage(accepted.message_id);
Java SDK
Java 21에서 동작하고 런타임 의존성이 없어요. 발송, 조회, 견적과 잔액 조회까지 같은 API를 다뤄요.SendNotice.java — javaimport dev.msgmcp.MsgmcpClient;import dev.msgmcp.Models.*;import java.util.Map;var client = new MsgmcpClient(publicOrigin, p5Origin, apiKey);var input = new Composition(senderId, "+821012341234",Classification.TRANSACTIONAL, Mode.NORMAL, MessageType.SMS,null, "주문이 접수되었어요.", Map.of(), null);var message = client.send(input, persistedIdempotencyKey);// Keep message.messageId(): delivery is checked later with getMessage.
Rust·Kotlin SDK
Rust SDK(packages/sdk-rust)는 tokio 기반 비동기 클라이언트이고, 필요하면 blocking 기능으로 동기 호출도 쓸 수 있어요. Kotlin SDK(packages/sdk-kotlin)는 Java SDK를 감싼 suspend 함수 API라 동작이 Java SDK와 같아요.두 SDK 모두 아직 패키지 저장소에 배포되지 않았어요. 저장소에서 빌드해 쓰세요. 자동 재시도와 리다이렉트 추적은 하지 않고, 발송에는 멱등 키가 필요해요.3. MCP 서버 연결
로컬 MCP 서버는 에이전트 앱 같은 MCP 호스트가 직접 실행하는 stdio 프로세스예요. 네트워크와 발송은 기본으로 꺼져 있고, 환경 변수로 명시적으로 켜야 해요.
MCP 호스트 설정 — json{"command": "node","args": ["/absolute/path/to/packages/mcp/dist/stdio.js"],"env": {"MSGMCP_MCP_NETWORK_ENABLED": "true","MSGMCP_MCP_SEND_ENABLED": "true","MSGMCP_MCP_PUBLIC_BASE_URL": "https://api.messag.io","MSGMCP_MCP_P5_BASE_URL": "https://api.messag.io","MSGMCP_MCP_CUSTOMER_API_KEY": "<발급한 API key>"}}
자주 쓰는 도구
preview_message최종 메시지 유형과 본문 미리보기
send_message멱등 키로 한 건 접수
send_message_group여러 수신자를 한 번에 접수
get_message메시지 ID로 상태 조회
list_senders사용할 수 있는 발신번호 조회
get_current_pricing현재 문자 단가 조회
원격 MCP (OAuth)
원격 MCP 엔드포인트는 POST /v2/mcp예요. MCP 클라이언트는 /.well-known/oauth-protected-resource/v2/mcp에서 인가 서버를 찾고, 워크스페이스 멤버가 동의해 발급된 OAuth 액세스 토큰을 Bearer 헤더로 보내요.외부 AI 커넥터 연결이 켜진 배포에서는 AI 앱의 커스텀 커넥터(원격 MCP 서버를 주소로 추가하는 기능)에 원격 MCP 주소를 입력해 운영자 등록 없이 연결할 수 있어요. 이때 커넥터는 클라이언트 ID 메타데이터 문서(CIMD)로 자신을 밝혀야 하고, 동의 화면에는 '확인되지 않은 외부 앱' 경고와 앱 정보를 게시한 주소, 요청한 권한이 표시돼요. 워크스페이스마다 커넥터별로 승인해요. 처음 연결할 때는 OWNER·ADMIN이 최근 10분 안에 로그인한 상태로 승인해야 하고, 승인된 커넥터만 같은 워크스페이스의 다른 멤버가 각자 동의해 쓸 수 있어요. 내 컴퓨터에서 실행하는 MCP 클라이언트는 메타데이터 문서에 적은 127.0.0.1 또는 [::1] 루프백 주소(포트는 매번 달라도 돼요)로만 돌아올 수 있고, localhost 이름은 받지 않아요. 발급된 토큰은 동의한 계정의 로그인 세션이 유지되는 동안만 쓸 수 있어요.동적 클라이언트 등록(Dynamic Client Registration)은 지원하지 않아요. 클라이언트 ID 메타데이터 문서(CIMD)를 쓰지 않는 MCP 클라이언트는 운영자가 먼저 등록해야 하니 1:1 문의로 요청해 주세요.mcp:invoke원격 MCP 엔드포인트 호출. 모든 도구에 필요해요.
message:read메시지 조회·검색·집계 도구
message:send문자 미리보기(preview_message)와 발송(send_message)
message:body_search본문 검색. 워크스페이스가 본문 검색을 켠 경우에만 동작해요.
4. 꼭 알아 둘 점
접수(accepted)는 전달 완료가 아니에요. 전달 결과는 메시지 ID로 따로 조회하세요.응답을 받지 못했다면 같은 본문과 같은 멱등 키로만 다시 보내세요. 새 키를 만들면 중복 발송될 수 있어요.SDK와 MCP 서버는 자동으로 재시도하지 않아요. 재시도 여부는 호출하는 쪽에서 정해요.API key와 OAuth 토큰은 서버나 MCP 호스트 설정에만 두고, 브라우저 코드나 프롬프트에 넣지 마세요.