✨ imsend MCP v1.0

시작하기

imsend MCP를 사용하면 OpenClaw, Claude, ChatGPT 등 AI 에이전트에서
자연어 명령만으로 문자·이메일을 즉시 발송할 수 있습니다.

📌 MCP(Model Context Protocol)란?
AI 에이전트가 외부 서비스를 직접 호출할 수 있게 해주는 표준 프로토콜입니다. imsend MCP를 연동하면 에이전트가 imsend의 발송 기능을 도구(Tool)로 사용할 수 있습니다.

무엇을 할 수 있나요?

💬 문자 발송
SMS, LMS, MMS를 AI에게 말하는 것만으로 즉시 발송
17원~/건
📧 이메일 발송
HTML 이메일 단건·대량 발송 지원
1.5원/건
📤 대량 발송
수신자 목록을 전달하면 자동으로 대량 발송
건당 동일
💳 포인트 관리
잔액 조회, 발송 이력, 카카오페이 충전
무료

빠른 시작

API 키를 발급받고 에이전트에 연동하는 데 5분이면 충분합니다.

1
imsend 계정으로 API 키 발급
imsend.kr에 로그인 후 왼쪽 메뉴 → AI 에이전트 → MCP API 키에서 발급합니다.
가입 즉시 웰컴 포인트가 지급됩니다.
2
사용할 에이전트에 MCP 서버 등록
아래 연동 가이드를 참고하여 사용하는 AI 도구에 imsend MCP 서버를 등록합니다.
3
자연어로 발송 요청
에이전트에게 "01012345678로 행사 안내 문자 보내줘"라고 말하면 즉시 발송됩니다.

API 키 발급

imsend 계정이 있으면 즉시 발급받을 수 있습니다. 소셜 로그인(카카오/네이버/구글)을 지원합니다.

⚠️ API 키는 외부에 노출되지 않도록 주의하세요. 키가 노출된 경우 즉시 재발급하세요.
  1. imsend.kr에 로그인
  2. 왼쪽 사이드바 → AI 에이전트 섹션 → MCP API 키
  3. MCP API 키 발급받기 버튼 클릭
  4. 발급된 64자리 키를 복사

OpenClaw 연동

OpenClaw는 imsend MCP를 네이티브로 지원합니다. mcporter를 통해 연동합니다.

1. mcporter CLI로 등록

mcporter config add imsend-mcp https://mcp.imsend.kr/mcp --auth bearer
# 프롬프트에서 API 키 입력

2. 설정 파일로 등록

~/.mcporter/mcporter.json에 직접 추가:

{
  "servers": {
    "imsend-mcp": {
      "url": "https://mcp.imsend.kr/mcp",
      "auth": {
        "type": "bearer",
        "token": "여기에_API_키_입력"
      }
    }
  }
}

3. 사용 예시

사용자: "01012345678로 '내일 오전 10시 미팅 안내드립니다' 문자 보내줘"
서진:   ✅ SMS 발송 완료 (잔액: 4,990원)

사용자: "고객 리스트에 있는 50명한테 공지 문자 보내줘"
서진:   ✅ LMS 50건 대량 발송 완료 (차감: 1,500원)

사용자: "잔여 포인트 얼마야?"
서진:   현재 잔액: 3,490원입니다.

Claude Desktop 연동

Claude Desktop의 설정 파일에 MCP 서버를 추가합니다.

설정 파일 경로: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "imsend-mcp": {
      "url": "https://mcp.imsend.kr/mcp",
      "headers": {
        "Authorization": "Bearer 여기에_API_키_입력"
      }
    }
  }
}

설정 파일 경로: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "imsend-mcp": {
      "url": "https://mcp.imsend.kr/mcp",
      "headers": {
        "Authorization": "Bearer 여기에_API_키_입력"
      }
    }
  }
}
✅ 설정 후 Claude Desktop을 재시작하면 imsend MCP 도구가 자동으로 활성화됩니다.

Claude.ai 웹 연동 (OAuth 2.0)

Claude.ai 웹에서는 OAuth 2.0 Authorization Code Flow (PKCE)를 통해 연동합니다. API 키를 직접 입력하지 않고, imsend 계정으로 로그인하여 안전하게 인증합니다.

사전 준비: imsend 계정의 Key IDKey Secret이 필요합니다.
imsend.kr → AI 에이전트 → MCP API 키에서 확인하세요.

1. Claude.ai 커넥터 추가

  1. claude.ai 접속 → 좌측 하단 설정(톱니바퀴)
  2. Integrations 탭 → Add Integration 클릭
  3. 아래 정보 입력:
항목 입력값
Integration URL https://mcp.imsend.kr/mcp
Client ID MCP API 키 페이지의 Key ID (imcp_로 시작)
Client Secret MCP API 키 페이지의 Key Secret

2. imsend 계정으로 로그인 (최초 1회)

  1. Integration 추가 후 Connect 버튼 클릭
  2. imsend 로그인 페이지로 이동 — 카카오 / 네이버 / 구글 소셜 로그인 또는 일반 로그인
  3. 로그인 완료 시 자동으로 Claude.ai로 복귀, 연동 완료
✅ 로그인은 최초 1회만 필요합니다. 이후 Claude.ai에서 바로 문자 발송 명령이 가능합니다.

3. OAuth 엔드포인트 (개발자 참고)

자체 앱에서 OAuth 2.0 흐름을 직접 구현하는 경우 아래 엔드포인트를 사용합니다. Discovery 메타데이터는 아래 .well-known URL에서 조회할 수 있습니다.

  • https://mcp.imsend.kr/.well-known/openid-configuration
  • https://mcp.imsend.kr/.well-known/oauth-authorization-server
  • https://mcp.imsend.kr/.well-known/oauth-protected-resource
{
  "issuer": "https://mcp.imsend.kr",
  "authorization_endpoint": "https://mcp.imsend.kr/oauth/authorize",
  "token_endpoint": "https://mcp.imsend.kr/oauth/token",
  "token_endpoint_auth_methods_supported": ["client_secret_post"],
  "grant_types_supported": ["authorization_code", "refresh_token"],
  "code_challenge_methods_supported": ["S256", "plain"],
  "scopes_supported": ["sms", "email"]
}

4. Authorization Request

GET https://mcp.imsend.kr/oauth/authorize
  ?response_type=code
  &client_id={Key_ID}
  &redirect_uri={redirect_uri}
  &state={random_state}
  &code_challenge={pkce_challenge}
  &code_challenge_method=S256
  &scope=sms+email

5. Token Exchange

POST https://mcp.imsend.kr/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code={authorization_code}
&client_id={Key_ID}
&client_secret={Key_Secret}
&redirect_uri={redirect_uri}
&code_verifier={pkce_verifier}

응답으로 받은 access_token을 Bearer 토큰으로 사용합니다. access_token의 유효기간(expires_in)은 90일(7,776,000초)이며, 토큰 교환 시 함께 발급되는 refresh_token으로 갱신할 수 있습니다.

6. Token Refresh

POST https://mcp.imsend.kr/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&refresh_token={refresh_token}
&client_id={Key_ID}
&client_secret={Key_Secret}

grant_type=refresh_token 으로 요청하면 새 access_token을 반환합니다.


ChatGPT 연동

ChatGPT의 MCP 연동은 Actions 또는 Connectors를 통해 설정합니다.

MCP 서버 URL: https://mcp.imsend.kr/mcp
인증 방식: Bearer Token
토큰: 발급받은 API 키
  1. ChatGPT 설정 → Connectors 또는 Custom Actions
  2. MCP 서버 URL 입력: https://mcp.imsend.kr/mcp
  3. 인증 타입: Bearer Token 선택
  4. API 키 입력 후 저장

Cursor / VS Code 연동

.cursor/mcp.json 또는 .vscode/mcp.json에 추가합니다.

{
  "servers": {
    "imsend-mcp": {
      "type": "http",
      "url": "https://mcp.imsend.kr/mcp",
      "headers": {
        "Authorization": "Bearer 여기에_API_키_입력"
      }
    }
  }
}

도구(Tool) 목록

imsend MCP가 제공하는 도구 목록입니다. AI 에이전트가 자동으로 적절한 도구를 선택하여 호출합니다.

guide — 온보딩/사용법 안내 ★ 먼저 호출

처음 사용 시 가장 먼저 호출하는 도구입니다. 도구 목록, 요금, 발송 흐름을 주제별로 안내합니다.

{
  "topic": "all"  // all | sms | email | mms | alimtalk | image | pricing | report (기본: all)
}

💰 무료

send_sms — 단문 문자 발송

90자 이내의 단문 문자(SMS)를 발송합니다.

{
  "receiver": "01012345678",  // 수신번호
  "message": "안녕하세요, 내일 오전 10시 미팅입니다.",  // 최대 90자
  "sender": "01012345678"  // 선택 — 승인된 발신번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
}

💰 단가: 17원/건

send_lms — 장문 문자 발송

2,000자 이내의 장문 문자(LMS)를 발송합니다.

{
  "receiver": "01012345678",
  "message": "안녕하세요.\n\n이번 행사 안내를 드립니다.\n...",  // 최대 2000자
  "title": "7월 행사 안내",  // 선택 — LMS 제목(수신 단말에 표시, 최대 120자). 미지정 시 제목 없이 발송
  "sender": "01012345678"  // 선택 — 승인된 발신번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
}

💰 단가: 40원/건

send_bulk — 대량 문자 발송

여러 수신자에게 동일한 문자를 한 번에 발송합니다.

{
  "receivers": ["01012345678", "01087654321", "01099998888"],
  "message": "공지 내용입니다.",
  "type": "SMS",  // "SMS" 또는 "LMS"
  "title": "공지",  // 선택 — type=LMS일 때만 적용되는 LMS 제목. 미지정 시 제목 없이 발송
  "sender": "01012345678"  // 선택 — 승인된 발신번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
}

💰 단가: 타입에 따라 건당 동일 요금

send_bulk_template — 대량 개인화 발송 ★ #{변수} 치환

수신자별로 #{변수명}을 실제 값으로 치환해 개인화된 문자를 한 번에 발송합니다. 예: template="#{이름} #{직함}님 안녕하세요" + 수신자별 vars. 최대 500명까지 지원하며, 필요한 변수가 누락된 수신자는 발송 없이 자동 스킵됩니다(임의로 빈 값 치환하지 않음).

파라미터

파라미터필수설명
recipients수신자 목록 (최대 500명) — 각 항목 { phone, vars? }. vars{"이름":"김철수","직함":"과장"} 형태
template메시지 템플릿 (최대 2000자) — #{변수명}이 각 수신자의 vars 값으로 치환됨
typeSMS(기본) 또는 LMS. SMS인데 치환 후 90자를 초과하는 건은 자동으로 LMS로 승격되어 발송됩니다
titleLMS 제목 (최대 120자, 선택)
sender발신번호 — 승인된 번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
dry_run기본값 false. true면 실제 발송 없이 샘플 3건 + 스킵 목록 + 예상 비용만 미리 확인합니다
{
  "recipients": [
    { "phone": "01012345678", "vars": { "이름": "김철수", "직함": "과장" } },
    { "phone": "01087654321", "vars": { "이름": "이영희", "직함": "대리" } }
  ],
  "template": "#{이름} #{직함}님 안녕하세요. 다음 주 회의 일정 안내드립니다.",
  "type": "SMS",
  "dry_run": true
}
💡 dry_run 미리보기 응답 예시
{
  "dryRun": true,
  "발송예정": 2,
  "스킵": [ { "phone": "010****5678", "reason": "MISSING_VARS", "missing": ["직함"] } ],
  "LMS승격": 0,
  "예상비용": "34원",
  "샘플": ["김철수 과장님 안녕하세요...", "이영희 대리님 안녕하세요..."]
}
스킵 사유: INVALID_PHONE(번호 형식 오류) · MISSING_VARS(치환 변수 누락, missing에 누락 목록) · BANNED_WORD(금칙어) · TOO_LONG(치환 후 2000자 초과)

💰 단가: 채널별 건당 요금 적용 (SMS 17원 / LMS 40원, 자동 승격분은 LMS 단가)

create_bulk_upload_session — 대량 개인화 발송 파일 업로드 세션

수신자 목록(전화번호 + 변수 열)이 담긴 CSV/XLSX 파일을 브라우저에서 업로드받기 위한 세션을 생성합니다. 파라미터는 없습니다. 발급된 링크는 30분간 유효하며, 첫 행을 헤더로 인식하고 전화번호/휴대폰/휴대전화/phone/mobile(대소문자 무관) 중 하나의 열 이름을 자동으로 전화번호 열로 인식합니다. 파일은 최대 5MB, 최대 10,000행까지 지원합니다.

// 파라미터 없음 — 그대로 호출
{}
// 응답
{
  "sessionId": "...",
  "uploadUrl": "https://mcp.imsend.kr/mcp/bulk-upload/{token}",
  "expiresIn": 1800,
  "안내": "위 링크를 열어 전화번호 열이 포함된 CSV/XLSX 파일을 업로드하세요(최대 5MB, 10000행). 업로드 완료 후 get_bulk_upload_session_status로 확인 → send_bulk_from_session으로 발송하세요."
}

전체 흐름

# 1단계: AI가 업로드 세션 생성
create_bulk_upload_session()
→ { sessionId, uploadUrl, expiresIn: 1800 }

# 2단계: AI가 사용자에게 업로드 링크 안내
"이 링크에서 전화번호 목록 파일을 업로드해주세요: [uploadUrl]"

# 3단계: 사용자가 브라우저에서 CSV/XLSX 업로드
→ 서버가 헤더 행 파싱 + 전화번호 열 자동 인식

# 4단계: AI가 업로드 상태 확인
get_bulk_upload_session_status(sessionId)
→ { uploaded: true, columns: [...], rowCount: 120, phoneColumn: "전화번호", sampleRows: [...] }

# 5단계: 템플릿으로 발송
send_bulk_from_session(sessionId, template: "#{이름}님 안내드립니다")

💰 무료 (발송은 send_bulk_from_session 호출 시 채널별 단가 적용)

get_bulk_upload_session_status — 업로드 세션 상태 조회

create_bulk_upload_session이 발급한 세션의 업로드 완료 여부, 열 목록, 행 수, 전화번호로 인식된 열, 샘플 데이터를 확인합니다.

// 파라미터
{ "sessionId": "..." }  // create_bulk_upload_session이 발급한 세션 ID

// 업로드 전 응답
{ "uploaded": false, "sent": false }

// 업로드 완료 후 응답
{
  "uploaded": true,
  "columns": ["이름", "전화번호", "직함"],
  "rowCount": 120,
  "phoneColumn": "전화번호",
  "sampleRows": [ { "이름": "김철수", "전화번호": "01012345678", "직함": "과장" } ],
  "sent": false
}

💰 무료

send_bulk_from_session — 업로드 세션으로 개인화 대량 발송

업로드된 파일의 각 행을 수신자로 사용해 #{열이름} 치환 방식으로 개인화 발송합니다. 먼저 create_bulk_upload_session/get_bulk_upload_session_status로 업로드를 확인하세요. 응답 형식은 send_bulk_template과 동일합니다. 같은 세션으로 재발송은 불가합니다(1세션 1회 발송, 이중발송 방지).

파라미터

파라미터필수설명
sessionIdcreate_bulk_upload_session이 발급한 세션 ID
template메시지 템플릿 (최대 2000자) — #{열이름}이 업로드 파일의 각 행 값으로 치환됨
typeSMS(기본) 또는 LMS. 치환 후 90자 초과 건은 자동 LMS 승격
titleLMS 제목 (최대 120자, 선택)
sender발신번호 — 승인된 번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
dry_run기본값 false. true면 세션을 소비하지 않고 샘플/비용만 미리보기(이후 실제 발송 재호출 가능)
{
  "sessionId": "...",
  "template": "#{이름}님, #{직함}님께 안내드립니다.",
  "type": "SMS"
}

💰 단가: 채널별 건당 요금 적용 (SMS 17원 / LMS 40원, 자동 승격분은 LMS 단가)

send_mms — MMS 이미지 문자 발송

서버에 업로드된 이미지 경로(imagePath)로 MMS를 발송합니다. 이미지는 JPG/PNG/GIF 형식, 최대 2MB까지 지원합니다. 먼저 get_upload_url 또는 send_mms_upload로 이미지를 업로드해 savedPath를 받은 뒤 호출합니다.

파라미터필수설명
receiver수신번호 (예: 01012345678)
message문자 내용 (최대 2000자)
imagePath업로드로 받은 savedPath (서버 업로드 경로)
imageUrl업로드로 받은 imageUrl (로그용, 선택)
sender발신번호 — 승인된 번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
{
  "receiver": "01012345678",
  "message": "이미지와 함께 발송하는 MMS입니다.",
  "imagePath": "/opt/imsend/uploads/mms/1700000000_photo.jpg"
}

💰 단가: 90원/건

Base64 이미지를 바로 보내려면 send_mms_now(receiver, message, imageBody)를 사용하세요 — 업로드+발송을 1번 호출로 처리합니다.
💡 이미지 업로드 방식 — 권장 순서대로 선택하세요:
get_image_upload_url + send_mms_from_url★ 모든 환경 권장 (Claude웹·ChatGPT웹·모바일, Base64 없음) send_mms_from_url(imageUrl) — 공개 이미지 URL 있을 때 바로 발송 send_mms_upload (Base64) — ⚠️ 구버전, 4만 토큰 소모, 컨텍스트 초과 위험

send_mms_now — Base64 MMS 통합 발송

Base64 이미지를 1번 호출로 업로드+발송합니다. 파일 없이 즉시 보낼 때 사용하며, Claude.ai 본문에서 안정적입니다(GPT 환경은 truncation 주의). 서버에서 자동 640px 리사이즈 + JPG 변환합니다.

{
  "receiver": "01012345678",
  "message": "이미지 보내드립니다.",
  "imageBody": "Base64인코딩값",  // JPG/PNG/GIF, 최대 2MB
  "imageName": "photo.jpg",       // 선택 (기본: image.jpg)
  "sender": "01012345678"         // 선택 — 승인된 발신번호 중 선택(get_sender 조회)
}

💰 단가: 90원/건

send_mms_upload — Base64 이미지 업로드 구버전

Base64 이미지를 서버에 업로드하고 savedPath/imageUrl을 반환합니다. 반환된 savedPathsend_mmsimagePath로 사용합니다. ⚠️ GPT 환경에서 truncation이 발생할 수 있어 send_mms_now 또는 업로드 세션 방식을 권장합니다.

{
  "imageBody": "Base64인코딩값",  // JPG/PNG/GIF, 최대 2MB
  "imageName": "photo.jpg"        // 선택 (기본: image.jpg)
}

💰 무료 (발송은 send_mms 단가 적용)

get_upload_url — Pre-signed 업로드 URL 발급

MMS 이미지 또는 이메일 본문 이미지를 업로드할 URL을 발급합니다. AI가 curl/requests로 직접 binary 업로드하므로 Base64 방식보다 빠르고 대용량에 적합합니다.

Claude Desktop · ChatGPT · Cursor에서 bash/code 실행이 가능한 환경에 최적화
파라미터필수설명
typemms (MMS 이미지, 최대 2MB) 또는 email (이메일 본문 이미지, 최대 5MB)
fileName파일명 (기본: image.jpg)

📱 MMS 이미지 업로드 (3단계)

# 1단계: 업로드 URL 발급 (send_mms 도구 사용)
get_upload_url(type="mms", fileName="photo.jpg")
# → uploadUrl, savedPath 반환

# 2단계: AI가 직접 이미지 PUT 업로드 (bash)
curl -X PUT "https://mcp.imsend.kr/mcp/upload/{token}" \
     --data-binary @photo.jpg \
     -H "Content-Type: application/octet-stream"
# 또는 Python
# import requests
# requests.put(uploadUrl, data=open('photo.jpg','rb'), headers={'Content-Type':'application/octet-stream'})

# 3단계: MMS 발송
send_mms(receiver="01012345678", message="이미지 발송", imagePath="{savedPath}")

📧 이메일 본문 이미지 업로드 (3단계)

# 1단계: 업로드 URL 발급
get_upload_url(type="email", fileName="banner.png")
# → uploadUrl, savedPath, imageUrl 반환

# 2단계: 이미지 PUT 업로드
curl -X PUT "https://mcp.imsend.kr/mcp/upload/{token}" \
     --data-binary @banner.png \
     -H "Content-Type: application/octet-stream"

# 3단계: 이메일 발송 (imageUrl을 본문에 삽입)
send_email(to="user@example.com", subject="...", content="<img src='https://imsend.kr/uploads/email/...'>")

🔄 환경별 권장 업로드 방식

환경 권장 방식 흐름
공개 URL 있을 때
모든 환경
send_mms_from_url imageUrl 바로 전달 → 즉시 발송
Claude.ai 웹
bash_tool 활성 시
get_upload_url → curl PUT get_upload_url → bash_tool curl PUT → send_mms(imagePath)
ChatGPT 웹
Python container
get_image_upload_url → Python POST ★ get_image_upload_url → Python requests.post(multipart) → send_mms_from_url(imageUrl)
브라우저 업로드
모든 환경 (링크 클릭)
get_image_upload_url → 브라우저 get_image_upload_url → 링크 클릭 업로드 → check_upload_status → send_mms_from_url
Base64 (구버전)
⚠ GPT에서 잘림 발생
send_mms_upload Claude.ai 소용량만 가능. GPT 사용 시 fileSize:75 오류 발생 — 사용 금지

💰 무료 (발송 시 해당 도구 단가 적용)

get_image_upload_url — 이미지 업로드 페이지 URL 발급 ★ 권장

사용자가 브라우저에서 직접 이미지를 올릴 수 있는 전용 업로드 페이지를 발급합니다. Base64 변환 없이 MMS/이메일 이미지를 처리하는 권장 방식입니다. Claude웹·ChatGPT웹·모바일 모든 환경에서 동작합니다.

파라미터

파라미터필수설명
typemms (최대 2MB) 또는 email (최대 5MB)

반환값

{
  "uploadPageUrl": "https://mcp.imsend.kr/mcp/image-upload/{token}",
  "token": "{token}",
  "expiresIn": "15분",
  "instruction": "아래 URL을 사용자에게 안내하세요. 업로드 완료 후 check_upload_status를 호출하세요.",
  "nextStep": "check_upload_status(token)"
}

전체 흐름 (MMS 예시)

# 1단계: 업로드 링크 발급
get_image_upload_url(type="mms")
→ uploadPageUrl: "https://mcp.imsend.kr/mcp/image-upload/abc123"

# 2단계: 사용자에게 안내
"이미지를 여기서 업로드해주세요 (15분 유효):
 https://mcp.imsend.kr/mcp/image-upload/abc123"

# 3단계: 사용자가 링크 클릭 → 파일 선택 → 업로드

# 4단계: 업로드 완료 확인
check_upload_status(token="abc123")
→ { done: true, imageUrl: "https://imsend.kr/uploads/mms/xxx.jpg" }

# 5단계: MMS 발송
send_mms_from_url(receiver="01012345678", message="이미지 발송", imageUrl="https://imsend.kr/uploads/mms/xxx.jpg")

🤖 ChatGPT 환경 (Python container)

# 1단계: get_image_upload_url(type="mms") 로 token 발급
# 2단계: ChatGPT Python container에서 실행
import requests
files = {"file": open("/mnt/data/photo.jpg", "rb")}
r = requests.post(
    "https://mcp.imsend.kr/mcp/image-upload/{token}",  # token 교체
    files=files
)
result = r.json()
# result: {"success": true, "imageUrl": "https://imsend.kr/uploads/mms/xxx.jpg"}

# 3단계: MCP 도구 호출
# send_mms_from_url(receiver="01012345678", message="발송내용", imageUrl=result["imageUrl"])
💡 ChatGPT 핵심: curl PUT 대신 Python requests.post(multipart)를 사용하면 Base64 잘림 없이 안정적으로 업로드됩니다.
✅ Base64 토큰 소모 없음 · Claude웹/ChatGPT웹/모바일 모두 지원 · 업로드 페이지는 모바일 카메라롤 접근 가능

check_upload_status — 업로드 완료 확인

get_image_upload_url 발급 후 사용자가 이미지를 업로드했는지 확인합니다. 완료 시 imageUrl을 반환합니다.

파라미터

파라미터필수설명
tokenget_image_upload_url로 발급받은 토큰

반환값 예시

// 완료 시
{ "done": true, "imageUrl": "https://imsend.kr/uploads/mms/xxx.jpg", "fileName": "photo.jpg", "fileSize": 512000 }

// 대기 중
{ "done": false, "message": "아직 업로드 중입니다. 잠시 후 다시 확인하세요." }

// 만료
{ "done": false, "expired": true, "message": "토큰이 만료됐거나 존재하지 않습니다." }

send_mms_from_url — URL로 MMS 발송 ★ 권장

이미지 URL로 MMS를 발송합니다. check_upload_status에서 받은 imageUrl 또는 공개 이미지 URL을 사용합니다. Base64 없음.

파라미터

파라미터필수설명
receiver수신번호 (예: 01012345678)
message문자 내용 (최대 2000자)
imageUrl이미지 URL (imsend.kr/uploads/... 또는 공개 URL)
campaignId캠페인 ID (선택)
sender발신번호 — 승인된 번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호
send_mms_from_url(
  receiver="01012345678",
  message="이미지 보내드립니다.",
  imageUrl="https://imsend.kr/uploads/mms/1234567890_photo.jpg"
)

send_email — 이메일 발송

HTML을 지원하는 이메일을 발송합니다. 파일 첨부도 지원합니다.

파라미터필수설명
to수신 이메일 주소
subject이메일 제목 (최대 200자)
content이메일 본문 (HTML 가능)
attachments첨부파일 목록 [{fileName, fileBody(Base64)}]
최대 5개, 파일당 10MB / PDF·DOC·XLS·PPT·HWP·ZIP·이미지
// 기본 발송
{
  "to": "user@example.com",
  "subject": "이메일 제목",
  "content": "<h1>안녕하세요</h1><p>이메일 내용입니다.</p>"
}

// 파일 첨부 발송
{
  "to": "user@example.com",
  "subject": "첨부파일 포함 이메일",
  "content": "<p>파일을 첨부했습니다.</p>",
  "attachments": [
    { "fileName": "report.pdf", "fileBody": "JVBERi0xLjQ..." }
  ]
}

💰 단가: 1.5원/건

send_email_now — 이메일 통합 발송 (본문 이미지 1-step) ★ 권장

Base64 이미지 1번 전달로 본문 자동 삽입 후 이메일을 발송합니다. content{{IMAGE_URL}} 플레이스홀더를 두면 그 위치에, 없으면 본문 하단에 자동 삽입됩니다. 이미지 없이 텍스트만 보내도 됩니다.

파라미터필수설명
to수신 이메일 주소
subject이메일 제목 (최대 200자)
content본문 HTML (이미지 위치에 {{IMAGE_URL}} 사용 가능)
imageBodyBase64 이미지 (JPG/PNG/GIF/WEBP, 최대 5MB)
imageName이미지 파일명 (기본: image.jpg)
fromEmail발신 이메일 (기본: info@imsend.kr)
fromName발신자명 (기본: I'mSend)
{
  "to": "user@example.com",
  "subject": "이미지 포함 이메일",
  "content": "<p>본문입니다.</p>{{IMAGE_URL}}",
  "imageBody": "Base64값",
  "imageName": "banner.jpg"
}

💰 단가: 1.5원/건

create_mms_upload_session — MMS 자동발송 세션 ★★ 전 환경 1순위

MMS 이미지 발송을 위한 자동발송 세션을 생성합니다. 업로드 링크를 사용자에게 안내하면, 사용자가 이미지를 업로드하는 즉시 서버가 자동으로 MMS를 발송하고 페이지에서 결과를 표시합니다. AI 폴링 불필요 · Claude/GPT/모바일 통일

파라미터

파라미터필수설명
receiver수신번호 (예: 01012345678)
message문자 내용 (최대 2000자)

전체 흐름

# 1단계: AI가 세션 생성
create_mms_upload_session(receiver="01012345678", message="이미지 보내드립니다")
→ { sessionId, uploadPageUrl, expiresIn: "15분" }

# 2단계: AI가 사용자에게 링크 안내
"이미지를 여기서 업로드해주세요: [링크]"

# 3단계: 사용자가 링크 클릭 → 이미지 선택 → 업로드
→ 서버: PNG/WEBP → JPG 640px 자동 변환
→ 서버: MMS 자동 발송
→ 페이지: "✅ 문자 전송이 완료되었습니다!" 표시 → 자동 닫힘(PC) / 닫기 버튼(모바일)

# 4단계 (선택): AI가 결과 확인
get_mms_upload_session_status(sessionId)
→ { uploaded: true, sendStatus: "DELIVERED", mseq: 12345 }
✅ Claude.ai / ChatGPT / 모바일 모두 동일하게 동작 · PNG/WEBP 자동 JPG 변환 · 최대 20MB 이미지 지원 · AI 폴링 불필요

💰 단가: 90원/건

create_image_upload_session — curl 자동화 업로드 세션 ★ bash 자동화

Claude Desktop 등 bash 실행 환경에서 로컬 파일을 curl -F로 업로드하기 위한 세션을 생성합니다. 응답의 curl 명령으로 업로드한 뒤 send_mms_from_session으로 발송합니다(사람/브라우저 개입 불필요).

// 파라미터
{ "receiver": "01012345678", "message": "이미지 보내드립니다." }
// 응답
{ "session_id": "...", "upload_url": "...", "curl": "curl -F \"file=@/path/to/image.jpg\" \"...\"", "expires_in": 900 }

💰 무료 (발송은 MMS 90원/건 적용)

send_mms_from_session — 세션으로 MMS 발송

create_image_upload_sessionsession_id로 업로드된 이미지를 MMS 발송합니다. 중복 호출해도 1회만 발송됩니다(idempotent). wait/wait_timeout_sec로 발송 결과까지 대기할 수 있습니다.

{
  "session_id": "...",          // create_image_upload_session의 session_id
  "wait": true,                  // 선택, true면 60초 대기(별칭)
  "wait_timeout_sec": 60,         // 선택, 0=즉시반환 (1~110, 초과 시 110 클램프)
  "sender": "01012345678"         // 선택 — 승인된 발신번호 중 선택(get_sender 조회)
}

💰 단가: 90원/건

get_mms_upload_session_status — 세션 발송 결과 조회

create_mms_upload_session 이후 업로드/발송 상태를 폴링합니다. uploaded, sendStatus, mseq를 반환합니다.

{ "sessionId": "..." }  // create_mms_upload_session으로 발급받은 sessionId

💰 무료

send_alimtalk — 카카오 알림톡 발송

카카오톡을 통해 알림톡을 발송합니다. 카카오톡 미수신 시 LMS로 자동 대체 발송됩니다.

💡
자동 대체 발송 (Failover)
수신자가 카카오톡을 사용하지 않거나 알림톡 수신이 불가한 경우, LMS로 자동 전환되어 발송됩니다. 기본값은 failover: true이며, 발송 결과에 대체 여부가 표시됩니다.
파라미터필수설명
receiver수신번호 (예: 01012345678)
template_code승인된 템플릿 코드 (아래 목록 참조)
variables치환 변수 객체 (예: {"서비스명":"MyApp"})
failover카카오 미수신 시 LMS 대체 여부 (기본: true)
senderLMS 대체발송 시 사용할 발신번호 — 승인된 번호 중 선택(get_sender 조회). 미지정 시 기본 발신번호

📋 MCP 공용 템플릿 미리보기

💬 카카오톡 미리보기

알림톡
Zapza

💻 사용 코드 예시


          

※ 템플릿은 카카오 심사 완료 후 사용 가능합니다. 현재 심사 진행 중.

💰 단가: 15원/건 (failover LMS 대체 발송 시에도 알림톡 단가 15원으로 차감. failover 활성 시 LMS 단가까지 잔액만 확인)

📋 MCP 공용 템플릿 변수 목록

Claude 웹 등 AI 클라이언트에서 템플릿변수를 바로 확인할 수 있도록 정리했습니다. JSON API: GET /api/v1/alimtalk/templates/public

코드 템플릿명 필수 변수명 (variables 키) 사용 예시
MCP-AUTH-001 인증번호 발송 서비스명, 인증번호, 유효시간 {"서비스명":"MyApp","인증번호":"123456","유효시간":"5"}
MCP-APPL-001 신청 접수 완료 서비스명, 이름, 신청유형, 접수번호, 접수일시 {"서비스명":"MyApp","이름":"홍길동","신청유형":"환불","접수번호":"A001","접수일시":"2026-05-07"}
MCP-APPL-002 신청 처리 결과 서비스명, 이름, 신청유형, 처리결과, 처리일시, 상세내용, 연락잘 {"신청유형":"환불","처리결과":"승인",...}
MCP-PAY-001 결제 완료 서비스명, 주문번호, 결제금액, 결제수단, 결제일시, 확인방법 {"서비스명":"MyShop","결제금액":"15,000",...}
MCP-PAY-002 환불 처리 완료 서비스명, 주문번호, 환불금액, 환불수단, 처리일시 {"환불금액":"10,000","환불수단":"카드",...}
MCP-RSRV-001 예약 확인 서비스명, 예약번호, 이름, 예약일시, 예약내용, 연락있 {"예약번호":"R001","예약일시":"2026-05-10 14:00",...}
MCP-RSRV-002 예약 일정 사전 안내 서비스명, 이름, 예정시간, 예약일시, 장소, 예약내용, 연락있 {"예정시간":"내일 오후 2시","장소":"서울",...}
MCP-ACCT-001 회원 가입 완료 서비스명, 이름, 가입일시, 아이디, 연락있 {"이름":"홍길동","가입일시":"2026-05-07",...}
MCP-SHIP-001 발송 완료 안내 서비스명, 이름, 발송내용, 발송일시, 확인방법, 연락있 ★ 심사 진행 중

JSON API 제공: GET https://imsend.kr/api/v1/alimtalk/templates/public — Claude 등 AI가 자동으로 읽어 변수명을 확인할 수 있습니다.

send_email_image_upload — 이메일 본문 이미지 업로드

이메일 본문에 삽입할 이미지를 서버에 업로드합니다. 반환된 imageUrlsend_emailcontent<img src="..."> 형태로 사용하세요.

파라미터필수설명
imageBody이미지 Base64 인코딩 (JPG/PNG/GIF/WEBP, 최대 5MB)
imageName파일명 (기본: image.jpg)
// 1단계: 이미지 업로드
{ "imageBody": "Base64값", "imageName": "banner.jpg" }
// 응답
{ "imageUrl": "https://imsend.kr/uploads/email/2026/05/1234_banner.jpg" }

// 2단계: 이메일 본문에 삽입
{
  "to": "user@example.com",
  "subject": "이미지 포함 이메일",
  "content": "<p>본문입니다.</p><img src='https://imsend.kr/uploads/email/...' />"
}

※ 업로드된 이미지는 90일 후 자동 삭제됩니다.

💰 무료

check_balance — 잔여 포인트 조회

현재 잔여 포인트를 조회합니다.

// 파라미터 없음
// 응답 예시
{
  "balance": 4980,
  "available": 4680,
  "pendingReserved": 300,
  "unit": "KRW",
  "note": "available = 발송 가능액(명목잔액에서 결과 대기중 예약액 제외)"
}

실제 발송 가능 여부는 balance(명목잔액)가 아니라 available(가용잔액)로 판단됩니다. pendingReserved는 방금 발송해 아직 통신사 결과가 확정되지 않은 건에 대해 미리 잡아둔 예약액입니다.

💰 무료

get_history — 발송 이력 조회

최근 발송 이력을 조회합니다. 실패 건에는 error_codeerror_reason이 포함됩니다.

// 요청
{ "limit": 20 }

// 응답 예시 (성공)
{ "msg_type": "S", "receiver": "01012345678", "status": "DELIVERED", "unit_price": 10 }

// 응답 예시 (실패)
{ "msg_type": "S", "receiver": "01012345678", "status": "FAILED",
  "unit_price": 10, "error_code": "211", "error_reason": "수신거부 또는 번호 오류" }

💰 무료

get_result — 단건 발송 결과 조회

발송 시 반환된 mseq로 실시간 결과(DELIVERED/FAILED/사유)를 조회합니다.

{ "mseq": 19500 }  // send_sms/send_mms/send_alimtalk 발송 시 반환된 값

💰 무료

get_sender — 발신번호 조회

현재 기본 발신번호와 본인인증이 완료된 개인 발신번호(mySenders) 목록을 반환합니다. 파라미터는 없습니다.

// 응답 예시
{ "sender": "033-911-6510", "mySenders": [{ "phone": "01012345678", "verifiedAt": "..." }] }

💰 무료

register_sender_number — 개인 발신번호 등록 (NICE 본인확인)

NICE 본인확인으로 개인 발신번호를 등록합니다. 응답의 authUrl을 사용자에게 안내하고, 인증 완료 후 verify_sender_status로 결과를 확인합니다.

{ "phone": "01012345678" }  // 선택 (NICE 인증 결과와 일치해야 등록)
// 응답: { "sessionId": "...", "authUrl": "...", "expiresIn": ... }

💰 무료

verify_sender_status — 본인확인 상태 조회

register_sender_number 응답의 sessionId로 NICE 본인확인 진행 상태(VERIFIED/PENDING/FAILED/EXPIRED)를 폴링합니다.

{ "sessionId": "..." }  // register_sender_number 응답의 sessionId

💰 무료

charge_point — 포인트 충전 (카카오페이)

카카오페이 결제 링크(authUrl)를 생성합니다. 사용자가 링크를 열어 결제를 완료하면 포인트가 자동 적립됩니다. 모바일에서는 카카오톡 결제 화면으로 자동 연결됩니다.

{
  "amount": 10000  // 충전 금액: 5000, 10000, 30000 중 하나
}
// 응답
{
  "authUrl": "https://...",   // 카카오페이 결제 링크 — 사용자에게 안내
  "sessionId": "...",          // 충전 상태 조회용 (get_charge_status)
  "amount": 10000,
  "expiresIn": 900             // 결제 링크 유효시간(초)
}

📌 결제 완료 여부는 get_charge_status(sessionId) 또는 check_balance로 확인합니다.

💰 무료 (결제 금액만 청구)

get_charge_status — 카카오페이 충전 상태 조회

charge_point 응답의 sessionId로 결제 진행 상태를 폴링합니다. 결제 완료 시 적립 금액과 잔액이 반환됩니다.

{ "sessionId": "..." }  // charge_point 응답의 sessionId

💰 무료


요금 안내

선불 포인트 방식으로 운영됩니다. 최소 충전 금액은 5,000원이며, 가입 즉시 웰컴 포인트가 지급됩니다.

📌 MCP(AI 에이전트) 발송은 별도 단가 체계입니다 — 가맹점용 일반 API의 기본 단가·가맹점별 협의 단가와 무관하게 아래 MCP 단가가 적용됩니다(imsend 3중 단가 체계의 ③). 일반 API 요금은 충전/요금 문서 참고.

발송 유형 단가 제한
SMS (단문)17원/건90자
LMS (장문)40원/건2,000자
MMS90원/건이미지 포함
이메일1.5원/건HTML 지원
카카오 알림톡15원/건승인 템플릿 필요

에러 코드

응답 포맷

모든 도구는 성공/실패 여부와 관계없이 동일한 JSON 구조로 응답합니다.

// SMS 성공 예시
{
  "success": true,
  "mseq": 19500,
  "batchId": "a1b2c3d4",
  "note": "발송 처리 중. 결과 확인 후 포인트가 차감됩니다."
}

// 이메일 성공 예시
{
  "success": true,
  "messageId": "20260504000094897303",
  "balanceAfter": 4962.5
}
// 검증 실패 (입력값 오류 등) — error 코드만 반환
{
  "error": "INSUFFICIENT_BALANCE",
  "detail": "..."  // 일부 코드만 detail 포함
}

// 발송 처리 중 예외 — success:false + error 메시지
{
  "success": false,
  "error": "...",
  "detail": "at Object.<anonymous> ..."
}

// 에러 코드는 아래 표 참조

에러 코드 목록

코드 설명 해결 방법
UNAUTHORIZEDAPI 키 인증 실패API 키 확인 및 재발급
INSUFFICIENT_BALANCE포인트 부족charge_point로 충전
INVALID_PHONE수신번호 형식 오류01012345678 형식 사용
BANNED_WORD금칙어 포함스팸성 문구 제거
MEMBER_NOT_FOUNDmcp_member 매핑 없음imsend 계정·API 키 재확인
BASE64_TRUNCATEDBase64 이미지 데이터 잘림 (GPT 환경)alternative 필드 안내대로 get_image_upload_url 사용
INVALID_FORMAT미지원 이미지 형식 (JPG/PNG/GIF/WEBP 외)허용 확장자로 변환
IMAGE_TOO_LARGE이미지 용량 초과 (MMS 2MB / 이메일 5MB)리사이즈 후 재시도
INVALID_IMAGE_PATH업로드 디렉토리 밖 경로 (LFI 차단)업로드 도구가 반환한 savedPath 그대로 사용
INVALID_IMAGE_URL허용되지 않은 이미지 URL (SSRF 차단)imsend.kr https URL만 사용
IMAGE_NOT_FOUND지정 경로에 이미지 파일 없음업로드 후 호출
SESSION_FILE_MISSING세션 업로드 파일 없음create_image_upload_session으로 새 세션 생성 후 재업로드
TEMPLATE_NOT_FOUND승인된 알림톡 템플릿 없음카카오 심사 완료 후 사용
NOT_FOUNDmseq 발송 결과 없음발송 시 반환된 mseq 값 확인
CACHE_NOT_AVAILABLE업로드 세션 캐시 미초기화잠시 후 재시도 (서버 재시작 필요)
INTERNAL_ERRORNICE 본인확인 등 내부 처리 오류detail 필드 확인 후 재시도
NO_VALID_RECIPIENTS개인화 대량발송(send_bulk_template 등)에서 유효 수신자 0건 (전원 스킵)스킵 목록의 reason 확인 후 번호/변수 수정
SESSION_NOT_FOUND업로드 세션 없음/만료(30분)/타 계정 세션create_bulk_upload_session으로 새 세션 발급
NOT_UPLOADEDsend_bulk_from_session 호출 시 세션에 파일이 아직 업로드되지 않음get_bulk_upload_session_status로 업로드 완료 확인 후 재시도
ALREADY_SENT이미 발송에 사용된 세션으로 재발송 시도(이중발송 방지)새 create_bulk_upload_session 세션으로 재업로드
SEND_FAILEDsend_bulk_from_session 발송 파이프라인 진입 전 인프라 오류(retryable: true)동일 sessionId로 재시도 가능
NCP 이메일 오류NCP API 응답 오류detail 필드에서 실제 메시지 확인

자주 묻는 질문

발신번호는 어떻게 되나요?

기본 발신번호는 임팩시스 대표번호(033-911-6510)입니다. 개인 발신번호 등록도 지원합니다register_sender_number로 NICE 본인확인 URL을 발급받아 인증을 완료한 뒤 verify_sender_status로 결과를 확인하면 등록됩니다. 등록된 개인 발신번호는 get_sender로 조회할 수 있고, 발송 도구(send_sms/send_lms/send_bulk/MMS류/send_alimtalk)의 sender 파라미터로 승인된 번호 중 하나를 선택해 발송할 수 있습니다.

포인트 유효기간이 있나요?

충전일로부터 1년간 유효합니다.

API 키를 잃어버렸어요.

imsend.kr/Home/mcp/apikey에서 재발급받을 수 있습니다. 기존 키는 즉시 무효화됩니다.

대량 발송 한도가 있나요?

분당 60건의 기본 한도가 있습니다. 더 많은 발송이 필요하면 info@imcorp.kr로 문의주세요.

개인화 대량 발송 되나요?

네, send_bulk_template으로 수신자별 #{변수명} 치환이 가능합니다(최대 500명, dry_run으로 실제 발송 전 샘플·비용 미리보기 가능). 수신자 목록이 CSV/XLSX 파일로 있다면 create_bulk_upload_session으로 업로드 링크를 발급받아 브라우저에서 파일을 올린 뒤(최대 10,000행, 전화번호/휴대폰/휴대전화/phone/mobile 열 자동 인식), get_bulk_upload_session_status로 업로드를 확인하고 send_bulk_from_session으로 #{열이름} 치환 발송하면 됩니다.

명목잔액은 있는데 발송이 막혀요.

check_balancebalance(명목잔액)와 available(가용잔액)이 다를 수 있습니다. 직전에 발송한 건이 아직 통신사 결과 확정 전이면 그 비용만큼 pendingReserved로 예약되어 available에서 빠집니다. 발송 가능 여부 판단은 항상 available 기준이며, 결과가 확정(DELIVERED/FAILED)되면 예약이 해제되어 available이 자동으로 갱신됩니다.

(주)임팩시스 · imsend MCP v1.0 info@imcorp.kr