process-gpt-mcp 0.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- process_gpt_mcp-0.0.4/.gitignore +1 -0
- process_gpt_mcp-0.0.4/PKG-INFO +256 -0
- process_gpt_mcp-0.0.4/README.md +236 -0
- process_gpt_mcp-0.0.4/mcp_config.example.json +50 -0
- process_gpt_mcp-0.0.4/pyproject.toml +37 -0
- process_gpt_mcp-0.0.4/sql/rls_policies.sql +39 -0
- process_gpt_mcp-0.0.4/src/process_gpt_mcp/__init__.py +4 -0
- process_gpt_mcp-0.0.4/src/process_gpt_mcp/mcp_debug.log +833 -0
- process_gpt_mcp-0.0.4/src/process_gpt_mcp/server.py +1110 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.env
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: process-gpt-mcp
|
|
3
|
+
Version: 0.0.4
|
|
4
|
+
Summary: Process GPT MCP Server - 프로세스 생성, 조회, 실행, 회사 정보 질의 도구
|
|
5
|
+
Project-URL: Homepage, https://github.com/uengine-oss/process-gpt-mcp
|
|
6
|
+
Author-email: uEngine <help@uengine.org>
|
|
7
|
+
License: MIT
|
|
8
|
+
Keywords: bpm,bpmn,fastmcp,mcp,process,process-gpt
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Requires-Dist: fastmcp>=0.1.0
|
|
18
|
+
Requires-Dist: httpx>=0.27.0
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
# Process GPT MCP Server
|
|
22
|
+
|
|
23
|
+
업무 지원을 위한 MCP (Model Context Protocol) 도구 서버입니다.
|
|
24
|
+
|
|
25
|
+
## 개념
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
사용자 메시지 → Agent (LLM) → MCP 도구 호출 → 프로세스 실행/결과 반환
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- **MCP** = 조회 + 실행 도구 모음
|
|
32
|
+
- **Agent** = 사용자 요청을 분석하고 적절한 도구를 순차적으로 호출
|
|
33
|
+
|
|
34
|
+
## 도구 목록 (7개)
|
|
35
|
+
|
|
36
|
+
| 도구명 | 설명 | 입력 |
|
|
37
|
+
|--------|------|------|
|
|
38
|
+
| `get_process_list` | 프로세스 정의 목록 조회 | `tenant_id` |
|
|
39
|
+
| `get_process_detail` | 프로세스 상세 정보 조회 | `tenant_id`, `process_id` |
|
|
40
|
+
| `get_form_fields` | 폼 필드 정보 조회 | `tenant_id`, `form_key` |
|
|
41
|
+
| `execute_process` | 프로세스 실행 | `tenant_id`, `user_uid`, `user_email`, `process_definition_id`, `activity_id`, `form_key`, `form_values`, `role_mappings`(선택) |
|
|
42
|
+
| `get_instance_list` | 진행 중인 인스턴스 조회 | `tenant_id`, `user_uid`, `process_id`(선택) |
|
|
43
|
+
| `get_todolist` | 할 일 목록 및 실행 결과 조회 | `tenant_id`, `instance_ids[]` |
|
|
44
|
+
| `get_organization` | 조직도 조회 | `tenant_id` |
|
|
45
|
+
|
|
46
|
+
## 도구 호출 흐름 가이드
|
|
47
|
+
|
|
48
|
+
### 프로세스 실행 요청 시
|
|
49
|
+
```
|
|
50
|
+
사용자: "12월 26일 휴가 1일 신청해줘"
|
|
51
|
+
|
|
52
|
+
1. get_process_list(tenant_id)
|
|
53
|
+
→ "휴가신청" 프로세스 ID 확인: "vacation_request"
|
|
54
|
+
|
|
55
|
+
2. get_process_detail(tenant_id, "vacation_request")
|
|
56
|
+
→ sequences에서 start_event 이후 첫 번째 액티비티 ID 확인
|
|
57
|
+
→ activities에서 해당 액티비티의 tool 필드에서 폼 키 확인
|
|
58
|
+
→ roles에서 역할 목록 확인
|
|
59
|
+
|
|
60
|
+
3. get_form_fields(tenant_id, "vacation_request_activity_001_form")
|
|
61
|
+
→ 폼 필드 정보: start_date, days, reason 등
|
|
62
|
+
|
|
63
|
+
4. execute_process(...)
|
|
64
|
+
→ form_values: {"start_date": "2024-12-26", "days": 1}
|
|
65
|
+
→ 프로세스 실행 완료
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 프로세스 실행 결과 조회 시
|
|
69
|
+
```
|
|
70
|
+
사용자: "나라장터 검색 결과 알려줘"
|
|
71
|
+
|
|
72
|
+
1. get_process_list(tenant_id)
|
|
73
|
+
→ "나라장터" 프로세스 ID 확인: "g2b_search"
|
|
74
|
+
|
|
75
|
+
2. get_instance_list(tenant_id, user_uid, "g2b_search")
|
|
76
|
+
→ 인스턴스 목록에서 proc_inst_id 확인
|
|
77
|
+
|
|
78
|
+
3. get_todolist(tenant_id, ["instance_id_1", "instance_id_2"])
|
|
79
|
+
→ 각 activity의 output 필드에서 실행 결과 확인
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 조직도/프로세스 상세 조회 시
|
|
83
|
+
```
|
|
84
|
+
사용자: "개발팀에 누가 있어?"
|
|
85
|
+
→ get_organization(tenant_id) 직접 호출
|
|
86
|
+
|
|
87
|
+
사용자: "휴가신청 프로세스 단계가 뭐야?"
|
|
88
|
+
→ get_process_list → get_process_detail 순서로 호출
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 설치
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pip install process-gpt-mcp
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## PyPI 배포
|
|
98
|
+
|
|
99
|
+
### 버전 업데이트
|
|
100
|
+
`pyproject.toml`에서 버전 수정:
|
|
101
|
+
```toml
|
|
102
|
+
version = "0.2.9" # 새 버전으로 변경
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 빌드 및 배포 (PowerShell)
|
|
106
|
+
```powershell
|
|
107
|
+
# dist 폴더 정리 및 빌드
|
|
108
|
+
if (Test-Path dist) { Remove-Item -Recurse -Force dist }
|
|
109
|
+
python -m build
|
|
110
|
+
|
|
111
|
+
# PyPI 업로드
|
|
112
|
+
$env:PYTHONIOENCODING = "utf-8"
|
|
113
|
+
$env:TWINE_USERNAME = "__token__"
|
|
114
|
+
$env:TWINE_PASSWORD = "pypi-xxx..." # PyPI API 토큰
|
|
115
|
+
python -m twine upload dist/*
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 빌드 및 배포 (Bash/Linux/Mac)
|
|
119
|
+
```bash
|
|
120
|
+
# dist 폴더 정리 및 빌드
|
|
121
|
+
rm -rf dist/
|
|
122
|
+
python -m build
|
|
123
|
+
|
|
124
|
+
# PyPI 업로드
|
|
125
|
+
export TWINE_USERNAME="__token__"
|
|
126
|
+
export TWINE_PASSWORD="pypi-xxx..." # PyPI API 토큰
|
|
127
|
+
python -m twine upload dist/*
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 필요 패키지
|
|
131
|
+
```bash
|
|
132
|
+
pip install build twine
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 환경 변수 설정
|
|
136
|
+
|
|
137
|
+
`env.example.txt`를 참고하여 `.env` 파일을 생성하세요:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Supabase 설정
|
|
141
|
+
SUPABASE_URL=https://your-project.supabase.co
|
|
142
|
+
SUPABASE_SERVICE_KEY=your-service-role-key
|
|
143
|
+
|
|
144
|
+
# 백엔드 API 설정 (프로세스 실행용)
|
|
145
|
+
API_BASE_URL=https://your-api-server.com
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 테스트
|
|
149
|
+
|
|
150
|
+
### MCP Inspector로 테스트
|
|
151
|
+
```bash
|
|
152
|
+
npx @modelcontextprotocol/inspector python -m process_gpt_mcp.server
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### FastMCP dev 모드
|
|
156
|
+
```bash
|
|
157
|
+
fastmcp dev src/process_gpt_mcp/server.py
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Cursor에서 사용
|
|
161
|
+
|
|
162
|
+
`.cursor/mcp.json` 파일에 추가:
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"mcpServers": {
|
|
167
|
+
"work-assistant": {
|
|
168
|
+
"command": "process-gpt-mcp",
|
|
169
|
+
"args": [],
|
|
170
|
+
"env": {
|
|
171
|
+
"SUPABASE_URL": "https://your-project.supabase.co",
|
|
172
|
+
"SUPABASE_ANON_KEY": "your-anon-key"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 사용 시나리오 예시
|
|
180
|
+
|
|
181
|
+
### 시나리오 1: 프로세스 실행 (휴가 신청)
|
|
182
|
+
```
|
|
183
|
+
사용자: "12월 26일 휴가 1일 신청해줘"
|
|
184
|
+
|
|
185
|
+
Agent:
|
|
186
|
+
1. get_process_list(tenant_id="uengine")
|
|
187
|
+
→ [{"id": "vacation_request", "name": "휴가신청"}, ...]
|
|
188
|
+
|
|
189
|
+
2. get_process_detail(tenant_id="uengine", process_id="vacation_request")
|
|
190
|
+
→ sequences: [{source: "start_event", target: "activity_001"}]
|
|
191
|
+
→ activities: [{id: "activity_001", tool: "formHandler:vacation_request_activity_001_form", role: "requester"}]
|
|
192
|
+
→ roles: [{name: "requester", ...}]
|
|
193
|
+
|
|
194
|
+
3. get_form_fields(tenant_id="uengine", form_key="vacation_request_activity_001_form")
|
|
195
|
+
→ fields_json: [{name: "start_date", type: "date"}, {name: "days", type: "number"}, ...]
|
|
196
|
+
|
|
197
|
+
4. execute_process(
|
|
198
|
+
tenant_id="uengine",
|
|
199
|
+
user_uid="user-uuid",
|
|
200
|
+
user_email="user@example.com",
|
|
201
|
+
process_definition_id="vacation_request",
|
|
202
|
+
activity_id="activity_001",
|
|
203
|
+
form_key="vacation_request_activity_001_form",
|
|
204
|
+
form_values={"start_date": "2024-12-26", "days": 1},
|
|
205
|
+
role_mappings=[{"name": "requester", "endpoint": ["user-uuid"]}]
|
|
206
|
+
)
|
|
207
|
+
→ {"process_instance_id": "vacation_request.xxx-xxx", "message": "프로세스가 성공적으로 실행되었습니다."}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### 시나리오 2: 업무 현황 조회
|
|
211
|
+
```
|
|
212
|
+
사용자: "내 진행 중인 업무 뭐가 있어?"
|
|
213
|
+
|
|
214
|
+
Agent:
|
|
215
|
+
1. get_instance_list(tenant_id="uengine", user_uid="user-uuid")
|
|
216
|
+
→ [{"proc_inst_id": "inst1", "proc_def_id": "vacation_request", "status": "IN_PROGRESS"}, ...]
|
|
217
|
+
|
|
218
|
+
2. get_todolist(tenant_id="uengine", instance_ids=["inst1", "inst2"])
|
|
219
|
+
→ 각 인스턴스의 activity 목록과 output(실행 결과) 반환
|
|
220
|
+
|
|
221
|
+
Agent: "현재 2개의 업무가 진행 중입니다. 휴가신청 건은 승인 대기 중이며..."
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 시나리오 3: 검색 프로세스 실행 및 결과 조회
|
|
225
|
+
```
|
|
226
|
+
사용자: "서울 날씨 검색해줘"
|
|
227
|
+
|
|
228
|
+
Agent:
|
|
229
|
+
1. get_process_list → "날씨검색" 프로세스 ID: "weather_search"
|
|
230
|
+
2. get_process_detail → 첫 번째 액티비티, 폼 키 확인
|
|
231
|
+
3. get_form_fields → location 필드 확인
|
|
232
|
+
4. execute_process(form_values={"location": "서울"})
|
|
233
|
+
→ 프로세스 실행 (에이전트가 자동으로 날씨 API 호출)
|
|
234
|
+
|
|
235
|
+
잠시 후...
|
|
236
|
+
|
|
237
|
+
사용자: "날씨 검색 결과 알려줘"
|
|
238
|
+
|
|
239
|
+
Agent:
|
|
240
|
+
1. get_process_list → "weather_search"
|
|
241
|
+
2. get_instance_list(process_id="weather_search") → 최근 인스턴스 ID
|
|
242
|
+
3. get_todolist(instance_ids=[...]) → output에서 날씨 정보 확인
|
|
243
|
+
|
|
244
|
+
Agent: "서울의 현재 날씨는 맑음, 기온 5도입니다..."
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 시나리오 4: 조직도 조회
|
|
248
|
+
```
|
|
249
|
+
사용자: "우리 회사 조직도 보여줘"
|
|
250
|
+
|
|
251
|
+
Agent:
|
|
252
|
+
1. get_organization(tenant_id="uengine")
|
|
253
|
+
→ 조직도 정보 반환
|
|
254
|
+
|
|
255
|
+
Agent: "우리 회사는 개발팀, 기획팀, 디자인팀으로 구성되어 있습니다..."
|
|
256
|
+
```
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# Process GPT MCP Server
|
|
2
|
+
|
|
3
|
+
업무 지원을 위한 MCP (Model Context Protocol) 도구 서버입니다.
|
|
4
|
+
|
|
5
|
+
## 개념
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
사용자 메시지 → Agent (LLM) → MCP 도구 호출 → 프로세스 실행/결과 반환
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- **MCP** = 조회 + 실행 도구 모음
|
|
12
|
+
- **Agent** = 사용자 요청을 분석하고 적절한 도구를 순차적으로 호출
|
|
13
|
+
|
|
14
|
+
## 도구 목록 (7개)
|
|
15
|
+
|
|
16
|
+
| 도구명 | 설명 | 입력 |
|
|
17
|
+
|--------|------|------|
|
|
18
|
+
| `get_process_list` | 프로세스 정의 목록 조회 | `tenant_id` |
|
|
19
|
+
| `get_process_detail` | 프로세스 상세 정보 조회 | `tenant_id`, `process_id` |
|
|
20
|
+
| `get_form_fields` | 폼 필드 정보 조회 | `tenant_id`, `form_key` |
|
|
21
|
+
| `execute_process` | 프로세스 실행 | `tenant_id`, `user_uid`, `user_email`, `process_definition_id`, `activity_id`, `form_key`, `form_values`, `role_mappings`(선택) |
|
|
22
|
+
| `get_instance_list` | 진행 중인 인스턴스 조회 | `tenant_id`, `user_uid`, `process_id`(선택) |
|
|
23
|
+
| `get_todolist` | 할 일 목록 및 실행 결과 조회 | `tenant_id`, `instance_ids[]` |
|
|
24
|
+
| `get_organization` | 조직도 조회 | `tenant_id` |
|
|
25
|
+
|
|
26
|
+
## 도구 호출 흐름 가이드
|
|
27
|
+
|
|
28
|
+
### 프로세스 실행 요청 시
|
|
29
|
+
```
|
|
30
|
+
사용자: "12월 26일 휴가 1일 신청해줘"
|
|
31
|
+
|
|
32
|
+
1. get_process_list(tenant_id)
|
|
33
|
+
→ "휴가신청" 프로세스 ID 확인: "vacation_request"
|
|
34
|
+
|
|
35
|
+
2. get_process_detail(tenant_id, "vacation_request")
|
|
36
|
+
→ sequences에서 start_event 이후 첫 번째 액티비티 ID 확인
|
|
37
|
+
→ activities에서 해당 액티비티의 tool 필드에서 폼 키 확인
|
|
38
|
+
→ roles에서 역할 목록 확인
|
|
39
|
+
|
|
40
|
+
3. get_form_fields(tenant_id, "vacation_request_activity_001_form")
|
|
41
|
+
→ 폼 필드 정보: start_date, days, reason 등
|
|
42
|
+
|
|
43
|
+
4. execute_process(...)
|
|
44
|
+
→ form_values: {"start_date": "2024-12-26", "days": 1}
|
|
45
|
+
→ 프로세스 실행 완료
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 프로세스 실행 결과 조회 시
|
|
49
|
+
```
|
|
50
|
+
사용자: "나라장터 검색 결과 알려줘"
|
|
51
|
+
|
|
52
|
+
1. get_process_list(tenant_id)
|
|
53
|
+
→ "나라장터" 프로세스 ID 확인: "g2b_search"
|
|
54
|
+
|
|
55
|
+
2. get_instance_list(tenant_id, user_uid, "g2b_search")
|
|
56
|
+
→ 인스턴스 목록에서 proc_inst_id 확인
|
|
57
|
+
|
|
58
|
+
3. get_todolist(tenant_id, ["instance_id_1", "instance_id_2"])
|
|
59
|
+
→ 각 activity의 output 필드에서 실행 결과 확인
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 조직도/프로세스 상세 조회 시
|
|
63
|
+
```
|
|
64
|
+
사용자: "개발팀에 누가 있어?"
|
|
65
|
+
→ get_organization(tenant_id) 직접 호출
|
|
66
|
+
|
|
67
|
+
사용자: "휴가신청 프로세스 단계가 뭐야?"
|
|
68
|
+
→ get_process_list → get_process_detail 순서로 호출
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 설치
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install process-gpt-mcp
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## PyPI 배포
|
|
78
|
+
|
|
79
|
+
### 버전 업데이트
|
|
80
|
+
`pyproject.toml`에서 버전 수정:
|
|
81
|
+
```toml
|
|
82
|
+
version = "0.2.9" # 새 버전으로 변경
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 빌드 및 배포 (PowerShell)
|
|
86
|
+
```powershell
|
|
87
|
+
# dist 폴더 정리 및 빌드
|
|
88
|
+
if (Test-Path dist) { Remove-Item -Recurse -Force dist }
|
|
89
|
+
python -m build
|
|
90
|
+
|
|
91
|
+
# PyPI 업로드
|
|
92
|
+
$env:PYTHONIOENCODING = "utf-8"
|
|
93
|
+
$env:TWINE_USERNAME = "__token__"
|
|
94
|
+
$env:TWINE_PASSWORD = "pypi-xxx..." # PyPI API 토큰
|
|
95
|
+
python -m twine upload dist/*
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 빌드 및 배포 (Bash/Linux/Mac)
|
|
99
|
+
```bash
|
|
100
|
+
# dist 폴더 정리 및 빌드
|
|
101
|
+
rm -rf dist/
|
|
102
|
+
python -m build
|
|
103
|
+
|
|
104
|
+
# PyPI 업로드
|
|
105
|
+
export TWINE_USERNAME="__token__"
|
|
106
|
+
export TWINE_PASSWORD="pypi-xxx..." # PyPI API 토큰
|
|
107
|
+
python -m twine upload dist/*
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 필요 패키지
|
|
111
|
+
```bash
|
|
112
|
+
pip install build twine
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 환경 변수 설정
|
|
116
|
+
|
|
117
|
+
`env.example.txt`를 참고하여 `.env` 파일을 생성하세요:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Supabase 설정
|
|
121
|
+
SUPABASE_URL=https://your-project.supabase.co
|
|
122
|
+
SUPABASE_SERVICE_KEY=your-service-role-key
|
|
123
|
+
|
|
124
|
+
# 백엔드 API 설정 (프로세스 실행용)
|
|
125
|
+
API_BASE_URL=https://your-api-server.com
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 테스트
|
|
129
|
+
|
|
130
|
+
### MCP Inspector로 테스트
|
|
131
|
+
```bash
|
|
132
|
+
npx @modelcontextprotocol/inspector python -m process_gpt_mcp.server
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### FastMCP dev 모드
|
|
136
|
+
```bash
|
|
137
|
+
fastmcp dev src/process_gpt_mcp/server.py
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Cursor에서 사용
|
|
141
|
+
|
|
142
|
+
`.cursor/mcp.json` 파일에 추가:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"mcpServers": {
|
|
147
|
+
"work-assistant": {
|
|
148
|
+
"command": "process-gpt-mcp",
|
|
149
|
+
"args": [],
|
|
150
|
+
"env": {
|
|
151
|
+
"SUPABASE_URL": "https://your-project.supabase.co",
|
|
152
|
+
"SUPABASE_ANON_KEY": "your-anon-key"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 사용 시나리오 예시
|
|
160
|
+
|
|
161
|
+
### 시나리오 1: 프로세스 실행 (휴가 신청)
|
|
162
|
+
```
|
|
163
|
+
사용자: "12월 26일 휴가 1일 신청해줘"
|
|
164
|
+
|
|
165
|
+
Agent:
|
|
166
|
+
1. get_process_list(tenant_id="uengine")
|
|
167
|
+
→ [{"id": "vacation_request", "name": "휴가신청"}, ...]
|
|
168
|
+
|
|
169
|
+
2. get_process_detail(tenant_id="uengine", process_id="vacation_request")
|
|
170
|
+
→ sequences: [{source: "start_event", target: "activity_001"}]
|
|
171
|
+
→ activities: [{id: "activity_001", tool: "formHandler:vacation_request_activity_001_form", role: "requester"}]
|
|
172
|
+
→ roles: [{name: "requester", ...}]
|
|
173
|
+
|
|
174
|
+
3. get_form_fields(tenant_id="uengine", form_key="vacation_request_activity_001_form")
|
|
175
|
+
→ fields_json: [{name: "start_date", type: "date"}, {name: "days", type: "number"}, ...]
|
|
176
|
+
|
|
177
|
+
4. execute_process(
|
|
178
|
+
tenant_id="uengine",
|
|
179
|
+
user_uid="user-uuid",
|
|
180
|
+
user_email="user@example.com",
|
|
181
|
+
process_definition_id="vacation_request",
|
|
182
|
+
activity_id="activity_001",
|
|
183
|
+
form_key="vacation_request_activity_001_form",
|
|
184
|
+
form_values={"start_date": "2024-12-26", "days": 1},
|
|
185
|
+
role_mappings=[{"name": "requester", "endpoint": ["user-uuid"]}]
|
|
186
|
+
)
|
|
187
|
+
→ {"process_instance_id": "vacation_request.xxx-xxx", "message": "프로세스가 성공적으로 실행되었습니다."}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 시나리오 2: 업무 현황 조회
|
|
191
|
+
```
|
|
192
|
+
사용자: "내 진행 중인 업무 뭐가 있어?"
|
|
193
|
+
|
|
194
|
+
Agent:
|
|
195
|
+
1. get_instance_list(tenant_id="uengine", user_uid="user-uuid")
|
|
196
|
+
→ [{"proc_inst_id": "inst1", "proc_def_id": "vacation_request", "status": "IN_PROGRESS"}, ...]
|
|
197
|
+
|
|
198
|
+
2. get_todolist(tenant_id="uengine", instance_ids=["inst1", "inst2"])
|
|
199
|
+
→ 각 인스턴스의 activity 목록과 output(실행 결과) 반환
|
|
200
|
+
|
|
201
|
+
Agent: "현재 2개의 업무가 진행 중입니다. 휴가신청 건은 승인 대기 중이며..."
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 시나리오 3: 검색 프로세스 실행 및 결과 조회
|
|
205
|
+
```
|
|
206
|
+
사용자: "서울 날씨 검색해줘"
|
|
207
|
+
|
|
208
|
+
Agent:
|
|
209
|
+
1. get_process_list → "날씨검색" 프로세스 ID: "weather_search"
|
|
210
|
+
2. get_process_detail → 첫 번째 액티비티, 폼 키 확인
|
|
211
|
+
3. get_form_fields → location 필드 확인
|
|
212
|
+
4. execute_process(form_values={"location": "서울"})
|
|
213
|
+
→ 프로세스 실행 (에이전트가 자동으로 날씨 API 호출)
|
|
214
|
+
|
|
215
|
+
잠시 후...
|
|
216
|
+
|
|
217
|
+
사용자: "날씨 검색 결과 알려줘"
|
|
218
|
+
|
|
219
|
+
Agent:
|
|
220
|
+
1. get_process_list → "weather_search"
|
|
221
|
+
2. get_instance_list(process_id="weather_search") → 최근 인스턴스 ID
|
|
222
|
+
3. get_todolist(instance_ids=[...]) → output에서 날씨 정보 확인
|
|
223
|
+
|
|
224
|
+
Agent: "서울의 현재 날씨는 맑음, 기온 5도입니다..."
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 시나리오 4: 조직도 조회
|
|
228
|
+
```
|
|
229
|
+
사용자: "우리 회사 조직도 보여줘"
|
|
230
|
+
|
|
231
|
+
Agent:
|
|
232
|
+
1. get_organization(tenant_id="uengine")
|
|
233
|
+
→ 조직도 정보 반환
|
|
234
|
+
|
|
235
|
+
Agent: "우리 회사는 개발팀, 기획팀, 디자인팀으로 구성되어 있습니다..."
|
|
236
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"work-assistant": {
|
|
4
|
+
"_comment": "Process GPT MCP Server - 프로세스 생성, 조회, 실행, 회사 정보 질의 도구",
|
|
5
|
+
"command": "process-gpt-mcp",
|
|
6
|
+
"args": [],
|
|
7
|
+
"env": {
|
|
8
|
+
"_comment_env": "=== 필수 환경변수 ===",
|
|
9
|
+
"SUPABASE_URL": "https://your-project.supabase.co",
|
|
10
|
+
"SUPABASE_ANON_KEY": "your-supabase-anon-key",
|
|
11
|
+
|
|
12
|
+
"_comment_optional": "=== 선택 환경변수 (Cursor 등 외부 MCP 클라이언트용) ===",
|
|
13
|
+
"_comment_auth": "메인 채팅에서는 프론트엔드가 이 값들을 전달하므로 설정 불필요",
|
|
14
|
+
"_comment_auth2": "Cursor 등에서 로그인 없이 사용할 때만 설정",
|
|
15
|
+
|
|
16
|
+
"user_jwt": "your-user-jwt-token (선택: 인증용 JWT 토큰)",
|
|
17
|
+
"tenant_id": "your-tenant-id (선택: 테넌트/회사 ID, 예: uengine)",
|
|
18
|
+
"user_email": "your-email@example.com (선택: 현재 사용자 이메일, get_current_user에서 사용)"
|
|
19
|
+
},
|
|
20
|
+
"enabled": true
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
"_usage_guide": {
|
|
25
|
+
"메인 채팅 (process-gpt)": {
|
|
26
|
+
"설명": "프론트엔드에서 user_jwt, tenant_id를 자동으로 전달",
|
|
27
|
+
"필요한 환경변수": ["SUPABASE_URL", "SUPABASE_ANON_KEY"],
|
|
28
|
+
"선택 환경변수": "불필요 (프론트엔드에서 전달)"
|
|
29
|
+
},
|
|
30
|
+
"Cursor/외부 MCP 클라이언트": {
|
|
31
|
+
"설명": "로그인 없이 환경변수로 인증 정보 제공",
|
|
32
|
+
"필요한 환경변수": ["SUPABASE_URL", "SUPABASE_ANON_KEY", "user_jwt", "tenant_id"],
|
|
33
|
+
"선택 환경변수": ["user_email (get_current_user로 사용자 정보 조회 시 필요)"]
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
"_available_tools": {
|
|
38
|
+
"get_current_user": "환경변수 user_email로 사용자 정보(uid, name, role 등) 조회",
|
|
39
|
+
"get_process_list": "프로세스 목록 조회",
|
|
40
|
+
"get_process_detail": "프로세스 상세 정보 조회",
|
|
41
|
+
"get_form_fields": "폼 필드 정보 조회",
|
|
42
|
+
"execute_process": "프로세스 실행",
|
|
43
|
+
"get_instance_list": "진행 중인 프로세스 인스턴스 목록 조회",
|
|
44
|
+
"get_todolist": "할 일 목록 및 실행 결과 조회",
|
|
45
|
+
"get_organization": "회사 조직도 조회",
|
|
46
|
+
"generate_process": "프로세스 생성 요청 (프론트엔드 위임)",
|
|
47
|
+
"create_pdf2bpmn_workitem": "PDF to BPMN 변환 워크아이템 생성",
|
|
48
|
+
"ask_user": "사용자에게 추가 정보 요청"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "process-gpt-mcp"
|
|
3
|
+
version = "0.0.4"
|
|
4
|
+
description = "Process GPT MCP Server - 프로세스 생성, 조회, 실행, 회사 정보 질의 도구"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
license = {text = "MIT"}
|
|
8
|
+
authors = [
|
|
9
|
+
{name = "uEngine", email = "help@uengine.org"}
|
|
10
|
+
]
|
|
11
|
+
keywords = ["mcp", "fastmcp", "process-gpt", "process", "bpm", "bpmn"]
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 3 - Alpha",
|
|
14
|
+
"Intended Audience :: Developers",
|
|
15
|
+
"License :: OSI Approved :: MIT License",
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3.10",
|
|
18
|
+
"Programming Language :: Python :: 3.11",
|
|
19
|
+
"Programming Language :: Python :: 3.12",
|
|
20
|
+
]
|
|
21
|
+
dependencies = [
|
|
22
|
+
"fastmcp>=0.1.0",
|
|
23
|
+
"httpx>=0.27.0",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[project.scripts]
|
|
27
|
+
process-gpt-mcp = "process_gpt_mcp.server:main"
|
|
28
|
+
|
|
29
|
+
[project.urls]
|
|
30
|
+
Homepage = "https://github.com/uengine-oss/process-gpt-mcp"
|
|
31
|
+
|
|
32
|
+
[build-system]
|
|
33
|
+
requires = ["hatchling"]
|
|
34
|
+
build-backend = "hatchling.build"
|
|
35
|
+
|
|
36
|
+
[tool.hatch.build.targets.wheel]
|
|
37
|
+
packages = ["src/process_gpt_mcp"]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
-- =============================================================================
|
|
2
|
+
-- Work Assistant MCP용 RLS 정책
|
|
3
|
+
-- MCP 도구에서 필요한 SELECT 권한만 부여
|
|
4
|
+
-- =============================================================================
|
|
5
|
+
|
|
6
|
+
-- proc_def (프로세스 정의) - SELECT
|
|
7
|
+
ALTER TABLE proc_def ENABLE ROW LEVEL SECURITY;
|
|
8
|
+
DROP POLICY IF EXISTS "work-assistant-proc_def_select_policy" ON proc_def;
|
|
9
|
+
CREATE POLICY "work-assistant-proc_def_select_policy" ON proc_def
|
|
10
|
+
FOR SELECT TO authenticated
|
|
11
|
+
USING (tenant_id = public.tenant_id());
|
|
12
|
+
|
|
13
|
+
-- form_def (폼 정의) - SELECT
|
|
14
|
+
ALTER TABLE form_def ENABLE ROW LEVEL SECURITY;
|
|
15
|
+
DROP POLICY IF EXISTS "work-assistant-form_def_select_policy" ON form_def;
|
|
16
|
+
CREATE POLICY "work-assistant-form_def_select_policy" ON form_def
|
|
17
|
+
FOR SELECT TO authenticated
|
|
18
|
+
USING (tenant_id = public.tenant_id());
|
|
19
|
+
|
|
20
|
+
-- bpm_proc_inst (프로세스 인스턴스) - SELECT
|
|
21
|
+
ALTER TABLE bpm_proc_inst ENABLE ROW LEVEL SECURITY;
|
|
22
|
+
DROP POLICY IF EXISTS "work-assistant-bpm_proc_inst_select_policy" ON bpm_proc_inst;
|
|
23
|
+
CREATE POLICY "work-assistant-bpm_proc_inst_select_policy" ON bpm_proc_inst
|
|
24
|
+
FOR SELECT TO authenticated
|
|
25
|
+
USING (tenant_id = public.tenant_id());
|
|
26
|
+
|
|
27
|
+
-- todolist (할 일 목록) - SELECT
|
|
28
|
+
ALTER TABLE todolist ENABLE ROW LEVEL SECURITY;
|
|
29
|
+
DROP POLICY IF EXISTS "work-assistant-todolist_select_policy" ON todolist;
|
|
30
|
+
CREATE POLICY "work-assistant-todolist_select_policy" ON todolist
|
|
31
|
+
FOR SELECT TO authenticated
|
|
32
|
+
USING (tenant_id = public.tenant_id());
|
|
33
|
+
|
|
34
|
+
-- configuration (설정/조직도) - SELECT
|
|
35
|
+
ALTER TABLE configuration ENABLE ROW LEVEL SECURITY;
|
|
36
|
+
DROP POLICY IF EXISTS "work-assistant-configuration_select_policy" ON configuration;
|
|
37
|
+
CREATE POLICY "work-assistant-configuration_select_policy" ON configuration
|
|
38
|
+
FOR SELECT TO authenticated
|
|
39
|
+
USING (tenant_id = public.tenant_id());
|