Ch7. Powers & 커스텀 도구
Power 시스템, 커스텀 도구 작성, 패키징 및 배포
Powers는 Kiro의 확장 가능한 도구 패키지 시스템입니다. 문서화, 워크플로우 가이드, MCP 서버를 하나의 패키지로 묶어 재사용 가능한 기능을 제공합니다.
Powers 개념
Power는 다음 요소들을 포함할 수 있습니다:
- 문서화: POWER.md 파일로 사용법 설명
- 워크플로우 가이드: Steering 파일로 단계별 안내
- MCP 서버: 실제 기능을 제공하는 백엔드
- 도구 정의: 각 도구의 스키마와 설명
Powers 관리
설치된 Powers 확인
// Kiro 채팅에서
kiroPowers({ action: "list" })Power 활성화
// 특정 Power 활성화하여 문서와 도구 확인
kiroPowers({
action: "activate",
powerName: "weather-power"
})Power 도구 사용
// Power의 도구 실행
kiroPowers({
action: "use",
powerName: "weather-power",
serverName: "weather-api",
toolName: "get_forecast",
arguments: {
location: "Seoul",
units: "metric"
}
})인기 Powers
문서화 Power
# Documentation Power
API 문서 자동 생성, README 업데이트, 코드 주석 분석 등을 제공합니다.
## 주요 기능
- OpenAPI 스펙 생성
- README 자동 업데이트
- 코드 주석에서 문서 추출
- 다국어 문서 생성테스트 자동화 Power
# Test Automation Power
단위 테스트, 통합 테스트, E2E 테스트 자동 생성 및 실행을 지원합니다.
## 주요 기능
- 테스트 케이스 자동 생성
- 커버리지 분석
- 테스트 결과 리포팅
- CI/CD 통합데이터베이스 관리 Power
# Database Management Power
데이터베이스 스키마 관리, 마이그레이션, 쿼리 최적화를 제공합니다.
## 주요 기능
- 스키마 비교 및 마이그레이션
- 쿼리 성능 분석
- 데이터 백업/복원
- ERD 자동 생성커스텀 Power 작성
Power 구조
my-custom-power/
├── POWER.md # Power 문서
├── steering/ # 워크플로우 가이드
│ ├── getting-started.md
│ └── advanced-usage.md
├── mcp-servers/ # MCP 서버 구현
│ └── custom-server/
│ ├── server.py
│ └── requirements.txt
└── power.json # Power 메타데이터power.json 설정
{
"name": "my-custom-power",
"displayName": "My Custom Power",
"version": "1.0.0",
"description": "커스텀 비즈니스 로직을 위한 Power",
"keywords": ["custom", "business", "automation"],
"author": "Your Name",
"mcpServers": {
"custom-business": {
"command": "python",
"args": ["mcp-servers/custom-server/server.py"],
"env": {
"API_KEY": "${CUSTOM_API_KEY}"
}
}
},
"steeringFiles": [
"steering/getting-started.md",
"steering/advanced-usage.md"
]
}POWER.md 작성
# My Custom Power
이 Power는 커스텀 비즈니스 로직을 자동화합니다.
## 설치 및 설정
1. 환경 변수 설정:
```bash
export CUSTOM_API_KEY="your_api_key"- Power 활성화:
kiroPowers({ action: "activate", powerName: "my-custom-power" })
주요 기능
데이터 처리
process_data: 원시 데이터를 처리하여 구조화된 형태로 변환validate_data: 데이터 유효성 검증
리포트 생성
generate_report: 분석 결과 리포트 생성export_results: 결과를 다양한 형식으로 내보내기
사용 예시
// 데이터 처리
kiroPowers({
action: "use",
powerName: "my-custom-power",
serverName: "custom-business",
toolName: "process_data",
arguments: {
inputFile: "raw_data.csv",
outputFormat: "json"
}
})
### MCP 서버 구현
```python
# mcp-servers/custom-server/server.py
import asyncio
from mcp.server import Server
from mcp.types import Tool, TextContent
app = Server("custom-business")
@app.list_tools()
async def list_tools():
return [
Tool(
name="process_data",
description="Process raw data into structured format",
inputSchema={
"type": "object",
"properties": {
"inputFile": {"type": "string"},
"outputFormat": {"type": "string", "enum": ["json", "csv", "xml"]}
},
"required": ["inputFile", "outputFormat"]
}
),
Tool(
name="generate_report",
description="Generate analysis report",
inputSchema={
"type": "object",
"properties": {
"dataSource": {"type": "string"},
"reportType": {"type": "string", "enum": ["summary", "detailed", "executive"]}
},
"required": ["dataSource", "reportType"]
}
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "process_data":
input_file = arguments["inputFile"]
output_format = arguments["outputFormat"]
# 실제 데이터 처리 로직
result = f"Processed {input_file} to {output_format} format"
return TextContent(type="text", text=result)
elif name == "generate_report":
data_source = arguments["dataSource"]
report_type = arguments["reportType"]
# 실제 리포트 생성 로직
report = f"Generated {report_type} report from {data_source}"
return TextContent(type="text", text=report)
if __name__ == "__main__":
asyncio.run(app.run())Steering 파일 작성
<!-- steering/getting-started.md -->
---
inclusion: manual
---
# Custom Power 시작하기
이 가이드는 Custom Power를 처음 사용하는 사용자를 위한 단계별 안내입니다.
## 1단계: 데이터 준비
먼저 처리할 데이터 파일을 준비합니다:
- CSV, JSON, XML 형식 지원
- 파일 크기는 100MB 이하 권장
## 2단계: 데이터 처리
`process_data` 도구를 사용하여 데이터를 처리합니다:
```typescript
kiroPowers({
action: "use",
powerName: "my-custom-power",
serverName: "custom-business",
toolName: "process_data",
arguments: {
inputFile: "your_data.csv",
outputFormat: "json"
}
})3단계: 리포트 생성
처리된 데이터를 바탕으로 리포트를 생성합니다:
kiroPowers({
action: "use",
powerName: "my-custom-power",
serverName: "custom-business",
toolName: "generate_report",
arguments: {
dataSource: "processed_data.json",
reportType: "summary"
}
})
## Power 배포 및 공유
### 로컬 Power 등록
```bash
# Power 디렉토리에서
kiro power register .Power 패키징
# Power를 패키지 파일로 생성
kiro power package my-custom-power
# 결과: my-custom-power-1.0.0.kpowerPower 공유
# 패키지 파일 설치
kiro power install my-custom-power-1.0.0.kpower
# 원격 저장소에서 설치
kiro power install https://github.com/user/my-custom-powerPower 개발 모범 사례
1. 명확한 문서화
# 각 도구마다 명확한 설명과 예시 제공
## process_data
**설명**: 원시 데이터를 구조화된 형태로 변환합니다.
**입력 매개변수**:
- `inputFile`: 처리할 입력 파일 경로
- `outputFormat`: 출력 형식 (json, csv, xml)
**사용 예시**:
[구체적인 코드 예시]
**주의사항**:
- 파일 크기 제한: 100MB
- 지원 형식: CSV, JSON, XML2. 에러 처리
@app.call_tool()
async def call_tool(name: str, arguments: dict):
try:
if name == "process_data":
# 입력 검증
if not os.path.exists(arguments["inputFile"]):
return TextContent(
type="text",
text="Error: Input file not found"
)
# 실제 처리 로직
result = process_file(arguments["inputFile"])
return TextContent(type="text", text=result)
except Exception as e:
return TextContent(
type="text",
text=f"Error: {str(e)}"
)3. 환경 변수 관리
{
"mcpServers": {
"custom-server": {
"env": {
"API_KEY": "${CUSTOM_API_KEY}",
"DEBUG_MODE": "${DEBUG:-false}",
"MAX_FILE_SIZE": "${MAX_SIZE:-104857600}"
}
}
}
}참고 문서
- Powers 시스템: https://kiro.dev
- MCP 서버 개발: https://modelcontextprotocol.io/