register_developer
Register a developer account to obtain an API key after email verification. Provide username and email.
Instructions
Register a developer account on AI Skill Store. API key is issued after email verification. / 개발자 계정 등록. 이메일 인증 후 API 키가 발급됩니다 (보안을 위해 즉시 발급되지 않음).
Args: username: 사용할 username (영문/숫자, 3자 이상, 중복 불가) email: 인증용 이메일 주소 (필수 — 인증 링크가 발송됨)
Returns: 등록 결과 메시지. 이메일 인증 후 API 키를 받을 수 있습니다.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | ||
| Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- mcp_server/skill_store_mcp.py:913-951 (handler)The main handler function for the 'register_developer' MCP tool. Sends a POST request to /v1/owners/register with username and email, then returns the registration result (pending email verification, success with API key, or error).
def register_developer(username: str, email: str) -> str: """ Register a developer account on AI Skill Store. API key is issued after email verification. / 개발자 계정 등록. 이메일 인증 후 API 키가 발급됩니다 (보안을 위해 즉시 발급되지 않음). Args: username: 사용할 username (영문/숫자, 3자 이상, 중복 불가) email: 인증용 이메일 주소 (필수 — 인증 링크가 발송됨) Returns: 등록 결과 메시지. 이메일 인증 후 API 키를 받을 수 있습니다. """ payload = {"username": username, "email": email} result = _post("/v1/owners/register", payload) status = result.get("status", "") if status == "pending_verification": return ( f"✅ 계정 등록 완료! 이메일 인증이 필요합니다.\n" f"username : {username}\n" f"owner_id : {result.get('owner_id', 'N/A')}\n\n" f"📧 {email} 으로 인증 메일이 발송되었습니다.\n" f"이메일의 인증 링크를 클릭하면 API 키가 발급됩니다.\n" f"발급된 API 키로 upload_skill을 호출할 수 있습니다." ) elif status == "success": # 이메일 인증이 불필요한 경우 (향후 변경될 수 있음) return ( f"✅ 계정 등록 성공!\n" f"username : {result.get('username', username)}\n" f"owner_id : {result.get('owner_id')}\n" f"api_key : {result.get('api_key')}\n\n" f"⚠️ api_key는 다시 조회할 수 없습니다. 반드시 지금 저장하세요.\n" f"이 api_key를 upload_skill 호출 시 사용하세요." ) else: msg = result.get("message", str(result)) return f"❌ 등록 실패: {msg}" - mcp_server/skill_store_mcp.py:911-911 (registration)The @mcp.tool() decorator registers 'register_developer' as an MCP tool on the FastMCP server instance.
@mcp.tool() - mcp_server/skill_store_mcp.py:98-110 (helper)The _post helper function is used by register_developer to make the HTTP POST request to the backend API.
def _post(path: str, data: dict, headers: dict = None) -> dict: url = SKILL_STORE_URL + path body = json.dumps(data).encode() req = urllib.request.Request(url, data=body, headers={"Content-Type": "application/json", **(headers or {})}, method="POST") try: with urllib.request.urlopen(req, timeout=10) as resp: return json.loads(resp.read().decode()) except urllib.error.HTTPError as e: return {"status": "error", "message": f"HTTP {e.code}: {e.reason}"} except Exception as e: return {"status": "error", "message": str(e)} - mcp_server/skill_store_mcp.py:33-45 (helper)The _log_tool decorator is applied to register_developer (via @_log_tool) to log tool calls to stdout.
def _log_tool(fn): """각 MCP tool 호출을 stdout 에 한 줄 기록 — journalctl 에서 grep 가능. 형식: TOOL_CALL tool=<name> kw=<arg_keys> (PII 회피 위해 값은 로그 X) """ @_functools_tool.wraps(fn) def _wrapper(*args, **kwargs): try: kw_keys = list(kwargs.keys()) print(f"TOOL_CALL tool={fn.__name__} kw={kw_keys}", flush=True) except Exception: pass return fn(*args, **kwargs) return _wrapper