All checks were successful
Build and Push Docker Image / build (push) Successful in 22s
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
OpenAI Custom GPT 설정
- Custom GPT 생성
- Actions 추가
- 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) |
상품 가격 조회 |
Languages
Python
99.3%
Dockerfile
0.7%