kaffa 43f7a60bd3
All checks were successful
Build and Push Docker Image / build (push) Successful in 22s
chore: anvil.it.com → inouter.com
2026-03-27 16:20:32 +00:00
2026-03-27 15:37:36 +00:00
2026-02-03 11:20:38 +09:00
2026-03-27 16:20:32 +00:00
2026-02-03 00:25:10 +09:00

Namecheap API

Namecheap 도메인 관리 및 가격 조회 Python 라이브러리

설치

cd /home/admin/namecheap_api
source ~/.local/bin/env

환경 설정

.env 파일 설정:

cp .env.example .env
nano .env
# Namecheap API 설정
NAMECHEAP_API_USER=your_api_user
NAMECHEAP_API_KEY=your_api_key
NAMECHEAP_USERNAME=your_username
NAMECHEAP_CLIENT_IP=your_whitelisted_ip
NAMECHEAP_SANDBOX=false

# REST API 서버 인증
API_SERVER_KEY=your_api_server_key  # Vault: secret/namecheap/api-server

# 등록자 정보 (도메인 등록 시 기본값)
REGISTRANT_ORGANIZATION=회사명
REGISTRANT_FIRST_NAME=이름
REGISTRANT_LAST_NAME=REGISTRANT_ADDRESS1=주소1
REGISTRANT_ADDRESS2=주소2 (선택)
REGISTRANT_CITY=도시
REGISTRANT_STATE_PROVINCE=시/도
REGISTRANT_POSTAL_CODE=우편번호
REGISTRANT_COUNTRY=국가코드 (JP, KR, US 등)
REGISTRANT_PHONE=+국가번호.전화번호
REGISTRANT_EMAIL=이메일

사용법

도메인 목록 조회

from dotenv import load_dotenv
import os
load_dotenv()
from namecheap import NamecheapAPI, NamecheapConfig

config = NamecheapConfig(
    api_user=os.getenv('NAMECHEAP_API_USER'),
    api_key=os.getenv('NAMECHEAP_API_KEY'),
    username=os.getenv('NAMECHEAP_USERNAME'),
    client_ip=os.getenv('NAMECHEAP_CLIENT_IP'),
    sandbox=False,
)
api = NamecheapAPI(config)

# 도메인 목록
domains = api.domains_get_list()
for d in domains:
    print(f"{d['name']} - 만료: {d['expires']}")

도메인 가용성 확인

result = api.domains_check(["example.com", "example.net"])
for domain, available in result.items():
    print(f"{domain}: {'사용 가능' if available else '등록됨'}")

도메인 등록

from namecheap import RegistrantInfo

registrant = RegistrantInfo(
    organization=os.getenv('REGISTRANT_ORGANIZATION'),
    first_name=os.getenv('REGISTRANT_FIRST_NAME'),
    last_name=os.getenv('REGISTRANT_LAST_NAME'),
    address1=os.getenv('REGISTRANT_ADDRESS1'),
    city=os.getenv('REGISTRANT_CITY'),
    state_province=os.getenv('REGISTRANT_STATE_PROVINCE'),
    postal_code=os.getenv('REGISTRANT_POSTAL_CODE'),
    country=os.getenv('REGISTRANT_COUNTRY'),
    phone=os.getenv('REGISTRANT_PHONE'),
    email=os.getenv('REGISTRANT_EMAIL'),
)

result = api.domains_create("newdomain.com", registrant, years=1)
print(result)
# {'domain': 'newdomain.com', 'registered': True, 'charged_amount': 11.48, ...}

도메인 갱신

result = api.domains_renew("example.com", years=1)
print(result)
# {'domain': 'example.com', 'renewed': True, 'charged_amount': 11.48, ...}

등록자 정보 조회/수정

# 조회
contacts = api.domains_get_contacts("example.com")
print(contacts['registrant'])
# {'firstName': 'Taro', 'lastName': 'Tanaka', 'organizationName': 'LIBEHAIM Inc.', ...}

# 수정
from namecheap import RegistrantInfo

new_contact = RegistrantInfo(
    organization="New Company",
    first_name="Taro",
    last_name="Tanaka",
    address1="123 Street",
    city="Tokyo",
    state_province="Tokyo-to",
    postal_code="100-0001",
    country="JP",
    phone="+81.312345678",
    email="new@example.com",
)
api.domains_set_contacts("example.com", new_contact)

DNS 관리

# 네임서버 조회
ns_info = api.dns_get_list("example", "com")
print(ns_info)
# {'domain': 'example.com', 'is_using_our_dns': False, 'nameservers': ['ns1.cloudflare.com', ...]}

# DNS 레코드 조회 (Namecheap DNS 사용 시에만 가능)
records = api.dns_get_hosts("example", "com")

# DNS 레코드 설정
new_records = [
    {"name": "@", "type": "A", "address": "1.2.3.4", "ttl": "1800"},
    {"name": "www", "type": "CNAME", "address": "example.com", "ttl": "1800"},
]
api.dns_set_hosts("example", "com", new_records)

# 커스텀 네임서버로 변경
api.dns_set_custom("example", "com", ["ns1.cloudflare.com", "ns2.cloudflare.com"])

# Namecheap 기본 네임서버로 복원
api.dns_set_default("example", "com")

글루 레코드 (Child Nameserver)

자신의 도메인을 네임서버로 사용하려면 먼저 글루 레코드를 등록해야 합니다.

# 글루 레코드 생성 (ns1.example.com → 1.2.3.4)
result = api.ns_create("example", "com", "ns1.example.com", "1.2.3.4")
print(result)
# {'domain': 'example.com', 'nameserver': 'ns1.example.com', 'ip': '1.2.3.4', 'success': True}

# 글루 레코드 조회
info = api.ns_get_info("example", "com", "ns1.example.com")
print(info)
# {'domain': 'example.com', 'nameserver': 'ns1.example.com', 'ip': '1.2.3.4', 'statuses': ['ok']}

# 글루 레코드 IP 변경
result = api.ns_update("example", "com", "ns1.example.com", "1.2.3.4", "5.6.7.8")

# 글루 레코드 삭제
result = api.ns_delete("example", "com", "ns1.example.com")

계정 정보

# 잔액 조회
balance = api.users_get_balances()
print(f"잔액: ${balance['available_balance']}")

가격 조회 시스템

수동 가격 업데이트

uv run python update_prices.py

가격 조회 CLI

# 전체 TLD (저렴한 순)
uv run python prices.py

# 특정 TLD 검색
uv run python prices.py com
uv run python prices.py io

가격 계산 방식

최종가격 = USD × 환율 × 1.10(부가세) × 1.03(마진)
→ 1,000원 단위 올림

자동 업데이트 스케줄

systemd timer로 하루 3회 자동 업데이트:

시간 설명
09:30 시장 개장 후
12:30 중간
16:00 시장 마감 후
# 타이머 상태 확인
systemctl --user list-timers namecheap-prices.timer

# 로그 확인
journalctl --user -u namecheap-prices.service

# 타이머 재시작
systemctl --user restart namecheap-prices.timer

REST API 서버 (OpenAI 호환)

OpenAI Function Calling / Custom GPT / Cloudflare Workers에서 사용할 수 있는 REST API 서버입니다.

공개 엔드포인트

https://namecheap.api.inouter.com

인증

모든 요청에 X-API-Key 헤더 필요:

curl -H "X-API-Key: YOUR_API_KEY" https://namecheap.api.inouter.com/domains

API Key는 Vault에 저장됨:

  • 경로: secret/namecheap/api-server
  • 키: key
vault kv get secret/namecheap/api-server

수동 실행

uv run python api_server.py
# http://localhost:8000 에서 실행

systemd 서비스

# 상태 확인
systemctl --user status namecheap-api.service

# 재시작
systemctl --user restart namecheap-api.service

# 로그 확인
journalctl --user -u namecheap-api.service -f

API 엔드포인트

Method Endpoint 설명
GET /domains 도메인 목록
POST /domains/check 도메인 가용성 확인
POST /domains/register 도메인 등록 (과금됨)
GET /domains/{domain} 도메인 상세 정보
POST /domains/{domain}/renew 도메인 갱신
GET /domains/{domain}/contacts 등록자 정보 조회
PUT /domains/{domain}/contacts 등록자 정보 수정
GET /dns/{domain}/nameservers 네임서버 조회
PUT /dns/{domain}/nameservers 네임서버 변경
POST /dns/{domain}/nameservers/default 기본 NS 복원
GET /dns/{domain}/records DNS 레코드 조회
POST /dns/{domain}/glue 글루 레코드 생성
GET /dns/{domain}/glue/{nameserver} 글루 레코드 조회
PUT /dns/{domain}/glue 글루 레코드 수정
DELETE /dns/{domain}/glue/{nameserver} 글루 레코드 삭제
GET /account/balance 계정 잔액
GET /prices/{tld} TLD 가격 조회
GET /prices 전체 가격 목록
GET /openai/schema OpenAI Function 스키마

Swagger UI

http://localhost:8000/docs

OpenAI Custom GPT 설정

  1. Custom GPT 생성
  2. Actions 추가
  3. Import from URL: http://your-server:8000/openapi.json

MCP 서버

Claude에서 직접 Namecheap API를 사용할 수 있는 MCP 서버입니다.

MCP 도구 목록

도구 설명
domains_check 도메인 가용성 확인
domains_list 보유 도메인 목록
domains_info 도메인 상세 정보
domains_renew 도메인 갱신
domains_get_contacts 등록자 정보 조회
dns_get_nameservers 네임서버 조회
dns_set_nameservers 네임서버 변경
dns_set_default 기본 NS로 복원
dns_get_records DNS 레코드 조회
glue_create 글루 레코드 생성
glue_get 글루 레코드 조회
glue_update 글루 레코드 수정
glue_delete 글루 레코드 삭제
account_balance 계정 잔액
price_check TLD 가격 조회

Claude Code 설정

~/.claude/settings.json:

{
  "mcpServers": {
    "namecheap": {
      "command": "/home/admin/.local/bin/uv",
      "args": ["run", "--directory", "/home/admin/namecheap_api", "python", "mcp_server.py"]
    }
  }
}

Claude Desktop 설정

~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "namecheap": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/namecheap_api", "python", "mcp_server.py"]
    }
  }
}

테스트 실행

uv run python mcp_server.py

파일 구조

namecheap_api/
├── .env                 # 환경 설정 (git 제외)
├── .env.example         # 환경 설정 템플릿
├── namecheap.py         # API 클라이언트
├── __init__.py          # 패키지 export
├── api_server.py        # REST API 서버 (OpenAI 호환)
├── mcp_server.py        # MCP 서버 (Claude)
├── db.py                # 데이터베이스 모듈
├── prices.db            # SQLite 가격 DB
├── prices.py            # 가격 조회 CLI
├── update_prices.py     # 가격 업데이트 스크립트
└── example.py           # 사용 예제

systemd 서비스 파일

~/.config/systemd/user/
├── namecheap-api.service     # REST API 서버
├── namecheap-prices.service  # 가격 업데이트 서비스
└── namecheap-prices.timer    # 가격 업데이트 타이머

API 메서드

메서드 설명
domains_check(domains) 도메인 가용성 확인
domains_get_list() 보유 도메인 목록
domains_get_info(domain) 도메인 상세 정보
domains_create(domain, registrant) 새 도메인 등록
domains_renew(domain, years) 도메인 갱신
domains_get_contacts(domain) 등록자 정보 조회
domains_set_contacts(domain, registrant) 등록자 정보 수정
dns_get_list(sld, tld) 네임서버 조회
dns_get_hosts(sld, tld) DNS 레코드 조회
dns_set_hosts(sld, tld, records) DNS 레코드 설정
dns_set_custom(sld, tld, nameservers) 커스텀 NS 설정
dns_set_default(sld, tld) 기본 NS로 복원
ns_create(sld, tld, nameserver, ip) 글루 레코드 생성
ns_get_info(sld, tld, nameserver) 글루 레코드 조회
ns_update(sld, tld, nameserver, old_ip, ip) 글루 레코드 수정
ns_delete(sld, tld, nameserver) 글루 레코드 삭제
users_get_balances() 계정 잔액 조회
users_get_pricing(type, category) 상품 가격 조회
Description
Namecheap Domain API wrapper
Readme MIT 141 KiB
Languages
Python 99.3%
Dockerfile 0.7%