@mcp.tool()
async def create_message_service_template(
project_config: Dict[str, str],
language: str = "javascript",
features: List[str] = None
) -> Dict[str, Any]:
"""
Create a complete message service template by fetching from CDN and customizing with project config
Perfect for: New project setup, team standardization, rapid prototyping
Token-optimized: Fetches base template from CDN then applies project customizations
Args:
project_config: Project configuration {default_callback, company_name, etc.}
language: Target programming language
features: List of features to include ["sms", "mms", "status_check", "history", "validation"]
Returns:
Complete service template with project-specific defaults and configuration
Automatically injects BAAS_API_KEY from MCP server environment if available
"""
try:
if features is None:
features = ["sms", "mms", "status_check"]
# Extract project configuration
default_callback = project_config.get("default_callback", "02-1234-5678")
company_name = project_config.get("company_name", "Your Company")
# Fetch base template from CDN
base_result = await generate_direct_api_code(language, None, True)
if not base_result.get("success"):
return base_result
# Customize code with project config
code = base_result["code"]
# Replace placeholders with actual project values
code = code.replace("02-1234-5678", default_callback)
code = code.replace("Your Company", company_name)
# Apply environment variable injection if API key is available
if BAAS_API_KEY:
code = code.replace('your-api-key', BAAS_API_KEY)
# Fetch project-specific helpers from CDN
try:
helpers_url = f"https://cdn.mbaas.kr/templates/sms-mms/helpers/{language}-project.md"
response = await client.get(helpers_url)
if response.status_code == 200:
helpers_template = response.text
# Replace placeholders in helpers template
helpers_code = helpers_template.replace("{{company_name}}", company_name)
helpers_code = helpers_code.replace("{{default_callback}}", default_callback)
# Apply environment variable injection
if BAAS_API_KEY:
helpers_code = helpers_code.replace('your-api-key', BAAS_API_KEY)
code += "\n\n" + helpers_code
except Exception:
# Fallback to basic project helpers if CDN unavailable
if language == "javascript":
project_helpers = f'''
// {company_name} Project-Specific Helpers
const PROJECT_CONFIG = {{
DEFAULT_CALLBACK: '{default_callback}',
COMPANY_NAME: '{company_name}'
}};
// Pre-configured service instance
const messageService = new BaaSMessageService(
process.env.BAAS_API_KEY || '{BAAS_API_KEY if BAAS_API_KEY else "your-api-key"}'
);
// Helper functions for common use cases
async function sendVerificationSMS(phoneNumber, code, memberCode) {{
return await messageService.sendSMS(
[{{ phone_number: phoneNumber, member_code: memberCode }}],
`[{company_name}] 인증번호: ${{code}}`,
PROJECT_CONFIG.DEFAULT_CALLBACK
);
}}
async function sendOrderConfirmation(phoneNumber, orderNumber, memberCode) {{
return await messageService.sendSMS(
[{{ phone_number: phoneNumber, member_code: memberCode }}],
`[{company_name}] 주문이 완료되었습니다. 주문번호: ${{orderNumber}}`,
PROJECT_CONFIG.DEFAULT_CALLBACK
);
}}'''
code += project_helpers
return {
"success": True,
"project_config": project_config,
"language": language,
"features": features,
"code": code,
"filename": f"{company_name.lower().replace(' ', '_')}_message_service.{language}",
"description": f"{company_name} 전용 메시지 서비스 템플릿",
"source": "CDN template + project customization",
"api_key_injected": bool(BAAS_API_KEY),
"message": f"프로젝트별 맞춤 코드가 생성되었습니다 (CDN 최적화, API Key {'주입됨' if BAAS_API_KEY else '미설정'})"
}
except Exception as e:
return {
"success": False,
"error": f"템플릿 생성에 실패했습니다: {str(e)}",
"error_code": "TEMPLATE_GENERATION_ERROR"
}