Metadata-Version: 2.5
Name: scp-diagram-mcp-server
Version: 1.1.7
Summary: MCP server for SCP architecture diagrams, Terraform reference docs, and scpv2 resource provisioning
Author: Jr.Park
License: Apache-2.0
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Requires-Dist: bandit>=1.7.5
Requires-Dist: diagrams>=0.24.4
Requires-Dist: mcp[cli]>=1.6.0
Requires-Dist: pydantic>=2.10.6
Requires-Dist: scpv2-sdk>=0.2.2
Description-Content-Type: text/markdown

# SCP Diagram MCP Server

Python [`diagrams`](https://diagrams.mingrammer.com/) 패키지를 사용해 SCP(Samsung Cloud
Platform) 아키텍처 다이어그램과 Terraform IaC 참조 코드를 생성하는 MCP 서버.

## 주요 기능

- SCP 아키텍처 다이어그램 생성
- 여러 다이어그램 유형 지원 (SCP, sequence, flow, class, k8s, onprem, custom)
- 사용 가능한 SCP 아이콘 및 서비스 조회
- 다이어그램 예제 및 템플릿 제공
- SCP Terraform 프로바이더 문서 조회 (리소스, 데이터소스)
- `scpv2` SDK를 통한 실제 SCP 리소스 조회·생성·삭제

SCP 아이콘 프로바이더는 이 패키지 안에 번들되어 있으므로, 설치 후 별도의 아이콘 생성
단계가 필요하지 않다.

## 사전 준비물

MCP 클라이언트를 실행하는 컴퓨터에 다음 두 가지가 준비되어 있어야 한다.

1. **[uv](https://docs.astral.sh/uv/)** — 서버를 내려받아 실행하는 데 사용된다.
   - Windows: `irm https://astral.sh/uv/install.ps1 | iex`
   - macOS/Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh`
2. **[Graphviz](https://graphviz.org/download/)** — `diagrams` 패키지가 PNG를 렌더링할 때
   Graphviz의 `dot` 실행 파일을 호출한다. 네이티브 프로그램이므로 별도로 설치하고 `PATH`에
   등록되어 있어야 한다.
   - Windows: graphviz.org에서 설치(또는 `winget install Graphviz.Graphviz`)하고 `bin`
     디렉터리를 `PATH`에 추가
   - macOS: `brew install graphviz`
   - Linux (Debian/Ubuntu): `sudo apt-get install graphviz`

Python 의존성(`diagrams`, `mcp`, `pydantic`, `bandit`, `scpv2-sdk`)은 `uvx`가 자동으로
설치하므로, 직접 `pip install`할 필요가 없다.

## 사용법

### MCP 클라이언트에 등록

MCP 클라이언트 설정에 아래 항목을 추가한다. `uvx`가 필요 시 자동으로 내려받아 실행하므로
수동 설치가 필요 없다.

```json
{
  "mcpServers": {
    "scp-diagram": {
      "command": "uvx",
      "args": ["scp-diagram-mcp-server"]
    }
  }
}
```

### 소스에서 로컬 실행 (개발용)

```bash
uv run python -m scp_diagram_mcp_server.server
```

## 도구 (Tools)

| 도구 | 기능 |
|------|------|
| `list_icons` | 사용 가능한 프로바이더/서비스/아이콘 탐색 (`provider_filter="scp"` 사용) |
| `get_diagram_examples` | 유형별 다이어그램 예제 코드 조회 |
| `generate_diagram` | `diagrams` DSL 코드로 PNG 렌더링 |
| `list_terraform_resources` | SCP Terraform 리소스/데이터소스 유형 목록 |
| `get_terraform_examples` | SCP 리소스의 예제 HCL + 속성 스키마 조회 |
| `scp_list_services` | `scpv2` SDK가 지원하는 SCP 서비스 목록 |
| `scp_describe_operation` | 오퍼레이션의 파라미터 + 검증 규칙 + 중첩 요청 본문 예제 조회 (예: `create_vpc`) |
| `scp_list_resources` | SCP 리소스 읽기(`list_/show_/get_/describe_`) — 항상 허용 |
| `scp_create_resource` | 실제 SCP 리소스 생성 — **쓰기, 옵트인** |
| `scp_delete_resource` | 실제 SCP 리소스 삭제 — **쓰기, 옵트인 + `confirm`** |

## 실제 SCP 리소스 프로비저닝 (scpv2 SDK)

`scp_*` 도구는 [`scpv2`](https://pypi.org/project/scpv2-sdk/) SDK를 통해 **실제 과금되는**
클라우드 리소스를 생성·삭제하므로, 다음과 같이 보호된다.

- **읽기**(`scp_list_resources`, `scp_list_services`, `scp_describe_operation`)는 항상 허용된다.
- **생성/삭제**는 서버 환경에 `SCP_MCP_ALLOW_WRITE=1`이 설정된 경우에만 동작한다.
- **삭제**는 추가로 호출 시 `confirm=true`를 요구한다.

인증정보는 SDK의 탐색 순서를 따른다 — `SCP_ACCESS_KEY` / `SCP_SECRET_KEY` 환경변수, 또는
`~/.scpconf/credentials.json`(그리고 `~/.scpconf/config.json`). API 엔드포인트 호스트는
`{api}.{region}.{environment}.samsungsdscloud.com` 형태이므로, **리전**(`region` 인자 또는
`SCP_REGION`, 기본값 `kr-west1`)과 **환경**(`environment` 인자 또는 `SCP_ENVIRONMENT`,
예: `e` 또는 `s`, 기본값 `e`)이 모두 대상 계정과 일치해야 한다.

**사내 SSL 검사 프록시 환경인가요?** SCP API 호출이 TLS 인증서 검증 오류로 실패하면,
`SCP_NO_PROXY=1`을 설정(또는 `no_proxy=true` 전달)하여 SDK가 프록시를 우회하고 실제 SCP
서버 인증서로 검증하도록 한다.

쓰기를 활성화하려면 MCP 클라이언트 설정의 `env`에 다음과 같이 지정한다.

```json
{
  "mcpServers": {
    "scp-diagram": {
      "command": "uvx",
      "args": ["scp-diagram-mcp-server"],
      "env": {
        "SCP_MCP_ALLOW_WRITE": "1",
        "SCP_REGION": "kr-west1",
        "SCP_ENVIRONMENT": "e",
        "SCP_NO_PROXY": "1",
        "SCP_ACCESS_KEY": "...",
        "SCP_SECRET_KEY": "..."
      }
    }
  }
}
```

## 라이선스

Apache-2.0
