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 — typescript
import { 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 — java
import 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본문 검색. 워크스페이스가 본문 검색을 켠 경우에만 동작해요.
send_message는 message:send 권한에 더해, 동의한 계정이 워크스페이스의 OWNER·ADMIN·DEVELOPER일 때만 접수돼요. VIEWER는 보낼 수 없어요.원격 도구: get_message, list_messages, search_messages, summarize_messages, aggregate_messages, get_message_metrics, preview_message, send_message

4. 꼭 알아 둘 점

접수(accepted)는 전달 완료가 아니에요. 전달 결과는 메시지 ID로 따로 조회하세요.응답을 받지 못했다면 같은 본문과 같은 멱등 키로만 다시 보내세요. 새 키를 만들면 중복 발송될 수 있어요.SDK와 MCP 서버는 자동으로 재시도하지 않아요. 재시도 여부는 호출하는 쪽에서 정해요.API key와 OAuth 토큰은 서버나 MCP 호스트 설정에만 두고, 브라우저 코드나 프롬프트에 넣지 마세요.

5. 고객 데이터와 연동

서버 이벤트 수집

모든 서버 SDK가 비밀 수집 키로 track, identify, batch를 보내요. 키는 콘솔의 수집 키·설정에서 발급해요.

브라우저·모바일 앱 수집

브라우저, iOS, Android, Flutter, React Native SDK는 공개 키(pk_)로 이벤트와 식별 정보만 보내요. 응답에는 프로필이 담기지 않고, 이런 클라이언트 이벤트는 자동화가 허용한 경우에만 흐름을 시작해요.

웹훅 서명 검증

콘솔의 웹훅에 엔드포인트를 등록하면 전달 결과가 서명과 함께 도착해요. 서버 SDK의 서명 검증 기능으로 확인한 뒤 처리하세요.

언어별 서버 SDK

TypeScript, Java, Kotlin, Python, Go, PHP, .NET, Ruby, Rust SDK를 저장소에서 직접 빌드해 쓸 수 있어요. 모두 API 키로 쓰는 발송·조회 기능과 서버 이벤트 수집, 웹훅 서명 검증을 담았고, 아직 패키지 저장소에 게시하기 전이에요.

n8n · Make

n8n 커뮤니티 노드와 Make 커스텀 앱 정의는 저장소에서 직접 빌드해 설치해요. 둘 다 아직 npm이나 Make에 게시하기 전이에요.