edu-workspace-mcp 0.1.0 → 1.1.0
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.
- package/.env.example +26 -0
- package/README.md +243 -24
- package/THIRD_PARTY_NOTICES.md +67 -0
- package/data/curriculum/elementary-2022.json +7099 -0
- package/data/curriculum/learning-map.json +1 -0
- package/dist/auth/context.d.ts +7 -0
- package/dist/auth/context.js +4 -0
- package/dist/auth/context.js.map +1 -0
- package/dist/auth/google-auth.d.ts +11 -0
- package/dist/auth/google-auth.js +125 -19
- package/dist/auth/google-auth.js.map +1 -1
- package/dist/cli.js +66 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -1
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/curriculum/learning-map.d.ts +30 -0
- package/dist/curriculum/learning-map.js +12 -0
- package/dist/curriculum/learning-map.js.map +1 -0
- package/dist/curriculum/standards.d.ts +107 -0
- package/dist/curriculum/standards.js +129 -0
- package/dist/curriculum/standards.js.map +1 -0
- package/dist/google/classroom.d.ts +134 -3
- package/dist/google/classroom.js +172 -6
- package/dist/google/classroom.js.map +1 -1
- package/dist/google/docs.d.ts +47 -3
- package/dist/google/docs.js +223 -19
- package/dist/google/docs.js.map +1 -1
- package/dist/google/document-html.d.ts +105 -0
- package/dist/google/document-html.js +427 -0
- package/dist/google/document-html.js.map +1 -0
- package/dist/google/drive.d.ts +1 -0
- package/dist/google/drive.js +21 -9
- package/dist/google/drive.js.map +1 -1
- package/dist/google/education-sheets.d.ts +94 -0
- package/dist/google/education-sheets.js +622 -0
- package/dist/google/education-sheets.js.map +1 -0
- package/dist/google/forms.d.ts +69 -0
- package/dist/google/forms.js +128 -3
- package/dist/google/forms.js.map +1 -1
- package/dist/google/kordoc-bridge.d.ts +27 -0
- package/dist/google/kordoc-bridge.js +100 -0
- package/dist/google/kordoc-bridge.js.map +1 -0
- package/dist/google/references.d.ts +2 -0
- package/dist/google/references.js +31 -0
- package/dist/google/references.js.map +1 -0
- package/dist/google/retry.d.ts +10 -0
- package/dist/google/retry.js +42 -0
- package/dist/google/retry.js.map +1 -0
- package/dist/google/sheets-inspection.d.ts +155 -0
- package/dist/google/sheets-inspection.js +222 -0
- package/dist/google/sheets-inspection.js.map +1 -0
- package/dist/google/sheets.d.ts +30 -0
- package/dist/google/sheets.js +183 -6
- package/dist/google/sheets.js.map +1 -1
- package/dist/google/slides.d.ts +21 -0
- package/dist/google/slides.js +131 -10
- package/dist/google/slides.js.map +1 -1
- package/dist/google/table-layout.d.ts +2 -0
- package/dist/google/table-layout.js +12 -0
- package/dist/google/table-layout.js.map +1 -0
- package/dist/install/configure-client.d.ts +9 -0
- package/dist/install/configure-client.js +136 -0
- package/dist/install/configure-client.js.map +1 -0
- package/dist/prompts/lesson-package.d.ts +7 -0
- package/dist/prompts/lesson-package.js +22 -0
- package/dist/prompts/lesson-package.js.map +1 -0
- package/dist/server.d.ts +26 -6
- package/dist/server.js +575 -32
- package/dist/server.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/web/ai.d.ts +37 -0
- package/dist/web/ai.js +64 -0
- package/dist/web/ai.js.map +1 -0
- package/dist/web/auth.d.ts +27 -0
- package/dist/web/auth.js +75 -0
- package/dist/web/auth.js.map +1 -0
- package/dist/web/config.d.ts +19 -0
- package/dist/web/config.js +39 -0
- package/dist/web/config.js.map +1 -0
- package/dist/web/design-preview.d.ts +3 -0
- package/dist/web/design-preview.js +16 -0
- package/dist/web/design-preview.js.map +1 -0
- package/dist/web/design-schema.d.ts +3 -0
- package/dist/web/design-schema.js +3 -0
- package/dist/web/design-schema.js.map +1 -0
- package/dist/web/design.d.ts +42 -0
- package/dist/web/design.js +78 -0
- package/dist/web/design.js.map +1 -0
- package/dist/web/document-worker.d.ts +1 -0
- package/dist/web/document-worker.js +31 -0
- package/dist/web/document-worker.js.map +1 -0
- package/dist/web/documents.d.ts +11 -0
- package/dist/web/documents.js +56 -0
- package/dist/web/documents.js.map +1 -0
- package/dist/web/drafts.d.ts +481 -0
- package/dist/web/drafts.js +115 -0
- package/dist/web/drafts.js.map +1 -0
- package/dist/web/elementary-examples.d.ts +8 -0
- package/dist/web/elementary-examples.js +57 -0
- package/dist/web/elementary-examples.js.map +1 -0
- package/dist/web/main.d.ts +1 -0
- package/dist/web/main.js +8 -0
- package/dist/web/main.js.map +1 -0
- package/dist/web/native-design.d.ts +35 -0
- package/dist/web/native-design.js +75 -0
- package/dist/web/native-design.js.map +1 -0
- package/dist/web/privacy.d.ts +2 -0
- package/dist/web/privacy.js +5 -0
- package/dist/web/privacy.js.map +1 -0
- package/dist/web/quality-samples.d.ts +2 -0
- package/dist/web/quality-samples.js +16 -0
- package/dist/web/quality-samples.js.map +1 -0
- package/dist/web/quality.d.ts +2 -0
- package/dist/web/quality.js +16 -0
- package/dist/web/quality.js.map +1 -0
- package/dist/web/render.d.ts +2 -0
- package/dist/web/render.js +14 -0
- package/dist/web/render.js.map +1 -0
- package/dist/web/server.d.ts +14 -0
- package/dist/web/server.js +336 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/sheet-design.d.ts +3 -0
- package/dist/web/sheet-design.js +32 -0
- package/dist/web/sheet-design.js.map +1 -0
- package/dist/web/slide-design.d.ts +23 -0
- package/dist/web/slide-design.js +72 -0
- package/dist/web/slide-design.js.map +1 -0
- package/dist/web/store.d.ts +32 -0
- package/dist/web/store.js +78 -0
- package/dist/web/store.js.map +1 -0
- package/dist/web/workspace.d.ts +26 -0
- package/dist/web/workspace.js +30 -0
- package/dist/web/workspace.js.map +1 -0
- package/docs/ASSETS.md +33 -0
- package/docs/RESULT_QUALITY.md +34 -0
- package/docs/WEB_APP_OPERATIONS.md +132 -0
- package/docs/WORKSPACE_LAB_START.md +332 -0
- package/package.json +57 -12
- package/web/app.js +201 -0
- package/web/assets/examples/event-plan.hwpx +0 -0
- package/web/assets/examples/event-plan.json +16 -0
- package/web/assets/examples/event-plan.md +36 -0
- package/web/assets/examples/event-plan.pdf +0 -0
- package/web/assets/examples/event-plan.png +0 -0
- package/web/assets/examples/lesson-package.hwpx +0 -0
- package/web/assets/examples/lesson-package.json +159 -0
- package/web/assets/examples/lesson-package.md +185 -0
- package/web/assets/examples/lesson-package.pdf +0 -0
- package/web/assets/examples/lesson-package.png +0 -0
- package/web/assets/examples/lesson-plan.hwpx +0 -0
- package/web/assets/examples/lesson-plan.json +66 -0
- package/web/assets/examples/lesson-plan.md +58 -0
- package/web/assets/examples/lesson-plan.pdf +0 -0
- package/web/assets/examples/lesson-plan.png +0 -0
- package/web/assets/examples/minutes.hwpx +0 -0
- package/web/assets/examples/minutes.json +16 -0
- package/web/assets/examples/minutes.md +25 -0
- package/web/assets/examples/minutes.pdf +0 -0
- package/web/assets/examples/minutes.png +0 -0
- package/web/assets/examples/notice.hwpx +0 -0
- package/web/assets/examples/notice.json +16 -0
- package/web/assets/examples/notice.md +28 -0
- package/web/assets/examples/notice.pdf +0 -0
- package/web/assets/examples/notice.png +0 -0
- package/web/assets/examples/quiz.hwpx +0 -0
- package/web/assets/examples/quiz.json +89 -0
- package/web/assets/examples/quiz.md +79 -0
- package/web/assets/examples/quiz.pdf +0 -0
- package/web/assets/examples/quiz.png +0 -0
- package/web/assets/examples/report.hwpx +0 -0
- package/web/assets/examples/report.json +16 -0
- package/web/assets/examples/report.md +42 -0
- package/web/assets/examples/report.pdf +0 -0
- package/web/assets/examples/report.png +0 -0
- package/web/assets/examples/slides.hwpx +0 -0
- package/web/assets/examples/slides.json +51 -0
- package/web/assets/examples/slides.md +50 -0
- package/web/assets/examples/slides.pdf +0 -0
- package/web/assets/examples/slides.png +0 -0
- package/web/assets/examples/study-notes.hwpx +0 -0
- package/web/assets/examples/study-notes.json +26 -0
- package/web/assets/examples/study-notes.md +36 -0
- package/web/assets/examples/study-notes.pdf +0 -0
- package/web/assets/examples/study-notes.png +0 -0
- package/web/assets/examples/tracker.hwpx +0 -0
- package/web/assets/examples/tracker.json +65 -0
- package/web/assets/examples/tracker.md +12 -0
- package/web/assets/examples/tracker.pdf +0 -0
- package/web/assets/examples/tracker.png +0 -0
- package/web/assets/examples/travel-plan.hwpx +0 -0
- package/web/assets/examples/travel-plan.json +16 -0
- package/web/assets/examples/travel-plan.md +32 -0
- package/web/assets/examples/travel-plan.pdf +0 -0
- package/web/assets/examples/travel-plan.png +0 -0
- package/web/assets/examples/worksheet.hwpx +0 -0
- package/web/assets/examples/worksheet.json +42 -0
- package/web/assets/examples/worksheet.md +50 -0
- package/web/assets/examples/worksheet.pdf +0 -0
- package/web/assets/examples/worksheet.png +0 -0
- package/web/assets/google/classroom.svg +48 -0
- package/web/assets/google/docs.svg +15 -0
- package/web/assets/google/drive.svg +9 -0
- package/web/assets/google/forms.svg +11 -0
- package/web/assets/google/gemini.png +0 -0
- package/web/assets/google/sheets.svg +7 -0
- package/web/assets/google/slides.svg +6 -0
- package/web/assets/illustrations/conversion.svg +1 -0
- package/web/assets/illustrations/forms-header-blue.png +0 -0
- package/web/assets/illustrations/forms-header-navy.png +0 -0
- package/web/assets/illustrations/forms-header-warm.png +0 -0
- package/web/assets/illustrations/lab-mark.svg +1 -0
- package/web/index.html +8 -0
- package/web/setup.html +352 -0
- package/web/studio.js +8 -0
- package/web/style.css +12 -0
package/.env.example
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 개인용: cp .env.example .env 후 Gemini 키를 입력하세요.
|
|
2
|
+
APP_MODE=local
|
|
3
|
+
PORT=3210
|
|
4
|
+
APP_ORIGIN=http://127.0.0.1:3210
|
|
5
|
+
GEMINI_API_KEY=
|
|
6
|
+
# Google이 갱신하는 Flash 최신 별칭. 무료 전용은 결제 미연결 Free Tier 프로젝트의 키 사용.
|
|
7
|
+
GEMINI_MODEL=gemini-flash-latest
|
|
8
|
+
# 선택 기능. GPT 개선 버튼을 사용할 때만 호출합니다.
|
|
9
|
+
OPENAI_API_KEY=
|
|
10
|
+
OPENAI_MODEL=gpt-6-luna
|
|
11
|
+
AI_DAILY_LIMIT=20
|
|
12
|
+
APP_OPERATOR=Workspace Lab 운영자
|
|
13
|
+
APP_SUPPORT_EMAIL=
|
|
14
|
+
|
|
15
|
+
# 배포 모드에서 필수. 아래 주석을 해제하고 실제 값으로 설정하세요.
|
|
16
|
+
# APP_MODE=hosted
|
|
17
|
+
# APP_ORIGIN=https://your-app.example
|
|
18
|
+
# APP_SECRET=랜덤한_32자_이상_암호화키
|
|
19
|
+
# DATABASE_URL=postgresql://user:password@host:5432/edu?sslmode=require
|
|
20
|
+
# GOOGLE_WEB_CLIENT_ID=your-web-client.apps.googleusercontent.com
|
|
21
|
+
# GOOGLE_WEB_CLIENT_SECRET=your-web-client-secret
|
|
22
|
+
# ALLOWED_EMAILS=teacher1@example.com,teacher2@example.com
|
|
23
|
+
# ALLOWED_EMAILS가 비어 있으면 로그인 가능한 모든 Google 계정을 허용합니다.
|
|
24
|
+
|
|
25
|
+
# 선택: 현재 Google 계정과 앱이 복사할 권한이 있는 Forms 디자인 원본 ID
|
|
26
|
+
GOOGLE_FORMS_TEMPLATE_ID=
|
package/README.md
CHANGED
|
@@ -2,24 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
자연어로 Google Docs, Sheets, Slides, Forms, Drive와 Classroom을 사용하는 교육 특화 Model Context Protocol(MCP) 서버입니다. Apps Script 없이 Google 공식 API를 직접 호출합니다.
|
|
4
4
|
|
|
5
|
-
[공식 홈페이지](https://edu.jeld.kr/) · [개인정보처리방침](https://edu.jeld.kr/privacy.html) · [이용약관](https://edu.jeld.kr/terms.html)
|
|
5
|
+
[공식 홈페이지](https://edu.jeld.kr/) · [복사 가능한 예시 프롬프트](https://edu.jeld.kr/#prompts) · [개인정보처리방침](https://edu.jeld.kr/privacy.html) · [이용약관](https://edu.jeld.kr/terms.html)
|
|
6
6
|
|
|
7
|
-
>
|
|
7
|
+
> `1.0.0`은 로컬 stdio MCP 정식 안정 버전입니다. 공용 Google 데스크톱 OAuth 클라이언트가 포함되어 있어 최종 사용자가 Google Cloud 프로젝트를 만들 필요가 없습니다. 기본 모드는 앱이 다루는 파일에 한정된 `drive.file`을 사용하며, 기존 자료 읽기는 사용자가 `--read`로 선택합니다.
|
|
8
8
|
|
|
9
9
|
## 할 수 있는 일
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
### 교직원용 웹앱
|
|
12
|
+
|
|
13
|
+
**v1.1.0 웹앱 바로 실행** (Node.js 22 이상):
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npx -y edu-workspace-mcp@1.1.0 web
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
현재 폴더의 `.env`에 키를 설정할 수 있으며 GPT 기본 모델은 `gpt-6-luna`입니다. 기존 MCP v1.0.0 배포와 설치는 유지됩니다.
|
|
20
|
+
|
|
21
|
+
단계별 API 연결·공개 배포 안내: [직접 해야 할 설정](docs/WORKSPACE_LAB_START.md).
|
|
22
|
+
|
|
23
|
+
MCP와 별도로 브라우저에서 바로 쓰는 **Workspace Lab — Google 도구 활용 스튜디오**을 추가했습니다. 같은 코드로 개인 로컬 앱과 누구나 이용하는 배포용 웹앱을 운영합니다.
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npm ci
|
|
27
|
+
cp .env.example .env
|
|
28
|
+
# .env에 GEMINI_API_KEY 입력 (예시·한글 변환만 쓸 때는 없어도 됩니다)
|
|
29
|
+
npm run web:dev
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`http://127.0.0.1:3210`에서 수업·업무 예시, Gemini/GPT 초안, Google 저장, Classroom 과제와 kordoc 문서실을 사용합니다. **배포용 웹앱도 HWP/HWPX 읽기·수정·비교, Google Docs 변환, HWPX 내보내기를 지원합니다.** 웹 배포에는 사용자별 Web OAuth·PostgreSQL·HTTPS 설정이 필요합니다.
|
|
33
|
+
|
|
34
|
+
[실행·배포·운영 안내](docs/WEB_APP_OPERATIONS.md) · [환경변수 예시](.env.example) · [Dockerfile](Dockerfile)
|
|
35
|
+
|
|
36
|
+
### 기존 MCP 도구
|
|
37
|
+
|
|
38
|
+
- 학교 서식 같은 교수·학습 과정안(기본 정보표·단계별 과정표·평가 계획표), 교과서 활동 쪽 같은 학생용 학습지(이름 칸·줄 있는 답 칸·빈 표·자기 점검표), 표·글머리·참고 상자가 있는 A4 Google Docs 문서 생성
|
|
39
|
+
- 학생 명단·평가계획·평가기록·제출현황·관찰기록·대시보드가 연결된 Google Sheets 생성
|
|
40
|
+
- 셀 값과 수식 본문을 노출하지 않는 기존 Sheets 구조·수식 오류 진단
|
|
41
|
+
- Classroom 명단·제출 상태를 개인정보 최소화 시트로 변환
|
|
13
42
|
- 차시별 Google Slides 프레젠테이션 생성
|
|
14
43
|
- 정답·배점이 포함된 Google Forms 퀴즈 생성
|
|
44
|
+
- 기존 Docs·Sheets·Slides·Forms 내용과 Forms 응답 읽기
|
|
15
45
|
- Google Drive 파일 검색, 폴더 생성, 승인 후 공유
|
|
16
|
-
- 교사가 담당하는
|
|
46
|
+
- 교사가 담당하는 Classroom 수업·과제·학생 명단·제출 현황 조회
|
|
17
47
|
- Classroom 과제 초안 생성, 사용자 승인 후 게시
|
|
48
|
+
- 초등 2022 개정 교육과정 성취기준 620개 찾기(인터넷·Google 로그인 불필요), 수업안·퀴즈·과제·평가계획에 원문과 출처 넣기
|
|
18
49
|
|
|
19
50
|
예시 요청:
|
|
20
51
|
|
|
21
52
|
> “`소화와 순환` 단원의 5문항 퀴즈와 학습지, 6장짜리 수업 슬라이드를 만들고 `2학년 과학` 클래스룸에 금요일 오후 6시 마감 과제 초안으로 등록해줘.”
|
|
22
53
|
|
|
54
|
+
## 한글·Google 문서 변환 도우미 (kordoc)
|
|
55
|
+
|
|
56
|
+
[kordoc](https://github.com/chrisryugj/kordoc) 4.15.4를 앱 의존성으로 포함합니다. 별도 kordoc MCP를 설치하지 않아도 두 도구를 쓸 수 있습니다.
|
|
57
|
+
|
|
58
|
+
| 요청 | MCP 도구 | 결과 |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| “Drive의 계획안.hwpx를 Google 문서로 만들어줘” | `docs_import_hwp` | 편집 가능한 Google Docs 링크 |
|
|
61
|
+
| “이 Google 문서를 한글 파일로 저장해줘” | `docs_export_hwpx` | Drive에 새 HWPX 파일과 링크 |
|
|
62
|
+
|
|
63
|
+
MCP 프롬프트 `google_document_helper`를 선택하면 파일 찾기부터 변환까지 안내합니다. 원본 파일은 수정하지 않고 새 파일을 만듭니다. 입력은 Drive 파일 ID 또는 URL이며 HWP/HWPX 가져오기와 Google Docs 내보내기를 지원합니다. 각 도구의 `parentFolderId`로 결과 폴더를 지정할 수 있습니다. 앱이 만든 파일이나 앱에 접근을 허용한 파일을 `drive.file` 권한으로 다루므로, 기존 Drive 파일이 검색되지 않으면 해당 파일을 앱에 허용해야 합니다.
|
|
64
|
+
|
|
65
|
+
HWP/HWPX 가져오기는 본문과 표를 Google Docs 형식으로 다시 만듭니다. Google Docs 내보내기는 Google에서 DOCX로 추출한 뒤 kordoc으로 HWPX를 생성합니다. 두 방향 모두 원본의 세밀한 서식, 이미지 배치, 페이지 나눔, Google Docs 고유 요소는 달라질 수 있으므로 결과를 확인하세요. 입력 문서 크기는 최대 20MB입니다. 공개 배포 전에는 실제 Google 계정으로 양방향 변환을 점검해야 합니다.
|
|
66
|
+
|
|
23
67
|
## 실제 교육 활용 데모
|
|
24
68
|
|
|
25
69
|
한 번의 자연어 요청으로 여러 Google 교육 도구를 연결할 수 있습니다.
|
|
@@ -36,35 +80,122 @@
|
|
|
36
80
|
|
|
37
81
|
대표 데모 프롬프트:
|
|
38
82
|
|
|
39
|
-
> 5학년 과학 ‘소화와 순환’ 수업 패키지를 만들어줘. Drive에 전용 폴더를 만들고, 교사용 수업안과 학생용 학습지는
|
|
83
|
+
> 5학년 과학 ‘소화와 순환’ 40분 수업 패키지를 만들어줘. Drive에 전용 폴더를 만들고, 교사용 수업안과 학생용 학습지는 제목·소제목·본문의 위계와 충분한 답안 공간이 보이게 Docs로 만들어줘. Slides는 한 장에 핵심 메시지 하나씩 7장으로, Forms는 정답·배점을 포함한 5문항으로 구성해줘. 모든 자료에서 학습 목표와 용어를 동일하게 쓰고 정보량을 점검해줘. ‘5학년 3반 과학’ Classroom에는 학생용 자료만 과제 초안으로 연결하고 수업·마감·배점·첨부를 보여준 뒤 게시 전에 확인받아줘.
|
|
40
84
|
|
|
41
85
|
| 교육 업무 | 만들어지는 결과 | 사용하는 도구 |
|
|
42
86
|
| --- | --- | --- |
|
|
43
87
|
| 한 차시 수업 패키지 | 수업안, 학습지, 슬라이드, 퀴즈, Classroom 초안 | Drive + Docs + Slides + Forms + Classroom |
|
|
44
|
-
| 과정중심평가 관리 |
|
|
88
|
+
| 과정중심평가 관리 | 9개 연결 탭, 드롭다운, 체크박스, 조건부 서식, 차트 | Sheets |
|
|
89
|
+
| Classroom 제출 관리 | 명단·제출 상태·점수·대시보드 스냅샷 | Classroom + Sheets |
|
|
90
|
+
| 복잡한 업무 시트 점검 | 탭·수식 함수·의존성·오류·차트 구조 진단 | Sheets |
|
|
45
91
|
| 수행평가 설계 | 4수준 루브릭 문서와 학생 자기평가지 | Docs + Forms |
|
|
46
92
|
| 형성평가 배포 | 정답·배점이 있는 퀴즈와 과제 초안 | Forms + Classroom |
|
|
47
93
|
| 학기 자료 정리 | 검색 결과와 교과·단원별 Drive 폴더 | Drive |
|
|
48
94
|
| 동료 교사 협업 | 확인 절차를 거친 댓글·읽기·편집 권한 | Drive 공유 |
|
|
49
95
|
|
|
50
|
-
- [
|
|
96
|
+
- [서비스별로 복사 가능한 예시 프롬프트](https://edu.jeld.kr/#prompts)
|
|
97
|
+
- [교육자를 위한 실제 활용 예시와 도구 흐름](docs/EDUCATOR_USE_CASES.md)
|
|
51
98
|
- [예제 모음과 추천 첫 데모](examples/README.md)
|
|
52
99
|
- [실제로 실행되는 수업 패키지 통합 테스트](src/tests/education-demo.test.ts)
|
|
53
100
|
|
|
54
|
-
>
|
|
101
|
+
> 읽기 확장 모드에서는 기존 자료를 조회·분석할 수 있습니다. 교육용 평가·제출 템플릿에는 차트·드롭다운·조건부 서식이 포함됩니다. 기존 문서나 임의 범위의 범용 부분 편집은 아직 지원하지 않습니다. 자세한 지원 범위는 [활용 예시 문서](docs/EDUCATOR_USE_CASES.md#현재-버전에서-가능한-범위)를 확인하세요.
|
|
102
|
+
|
|
103
|
+
## 보기 좋은 문서 양식
|
|
104
|
+
|
|
105
|
+
글자만 이어 붙인 문서가 아니라, 학교에서 쓰는 한글 문서처럼 표와 서식이 잡힌 A4 문서를 만듭니다.
|
|
106
|
+
|
|
107
|
+
- **교수·학습 과정안** (`docs_create_lesson_plan`): 제목 상자 → 기본 정보표(교과·단원·차시·교과서·성취기준·학습 목표·학습 자료) → 핵심 용어 → 차시별 흐름표 → 차시마다 학습 문제와 단계별 과정표(단계·학습 과정·교수·학습 활동·시간·자료·유의점) → 평가 계획표(상·중·하) → 지도상 유의점. 같은 단계(도입·전개·정리)는 한 칸으로 합치고 시간을 더해 적습니다. 차시가 여럿이면 차시마다 새 쪽에서 시작합니다.
|
|
108
|
+
- **학생용 학습지** (`docs_create_worksheet`): 제목 상자 → 학년·반·번호·이름 칸 → 학습 목표 상자 → 활동마다 이름표(예: 의견 마련하기)와 번호 붙은 물음, 그리고 답을 쓰는 자리. 답 자리는 다섯 가지 중에서 고릅니다.
|
|
109
|
+
|
|
110
|
+
| `kind` | 모양 | 예 |
|
|
111
|
+
| --- | --- | --- |
|
|
112
|
+
| `write` | 이름표가 왼쪽에 붙은 줄 있는 칸 | `[{label:"의견", lines:2}, {label:"그 이유", lines:4}]` |
|
|
113
|
+
| `table` | 머리행 있는 빈 표, `rows`를 주면 첫 열이 행 이름 | 장점·단점 표, 검토 기준 × 의견 평가표 |
|
|
114
|
+
| `checklist` | ○ 로 표시하는 자기 점검표 | 기본 척도: 매우 잘함·잘함·보통 |
|
|
115
|
+
| `box` | 그리기·마인드맵용 큰 칸 | `lines: 10` |
|
|
116
|
+
| `text` | 안내 글(일반 문서와 같은 서식) | |
|
|
117
|
+
|
|
118
|
+
물음 아래 `hint`로 도움말 상자를 붙일 수 있습니다. 학생용이라 성취기준 원문은 넣지 않습니다.
|
|
119
|
+
- **일반 문서** (`docs_create_document`): 제목 상자와 절 제목에, 본문(`text`)에서 간단한 서식을 씁니다.
|
|
120
|
+
|
|
121
|
+
| 쓰는 법 | 결과 |
|
|
122
|
+
| --- | --- |
|
|
123
|
+
| `## 도입(5분)` | 소제목 |
|
|
124
|
+
| `- 항목`, 두 칸 들여쓴 `- 하위 항목` | 진짜 글머리 목록(둘째 줄도 들여쓰기) |
|
|
125
|
+
| `1. 항목` | 번호 목록 |
|
|
126
|
+
| `\| 칸 \| 칸 \|` 다음 줄 `\|---\|---\|` | 머리행이 있는 표 |
|
|
127
|
+
| `> 내용` | 회색 참고 상자 |
|
|
128
|
+
| `**굵게**` | 굵은 글씨 |
|
|
129
|
+
|
|
130
|
+
- **인쇄 설정:** A4·여백, 한글 글꼴(Noto Sans KR, 굵게가 한글에도 적용), 표 머리행은 쪽마다 반복, 표의 한 행이 두 쪽으로 쪼개지지 않게, 제목은 다음 내용과 같은 쪽에.
|
|
131
|
+
- **만드는 방법:** 서식을 HTML로 그린 뒤 Drive가 Google Docs로 변환하고, 변환이 살리지 못하는 글꼴·쪽 나눔·머리행 반복은 만든 문서에 Docs API로 한 번 더 입힙니다. 새 OAuth 범위는 필요 없습니다(`drive.file`, 이 앱이 만든 파일만). 인쇄 설정만 실패하면 문서는 그대로 두고 경고를 돌려줘 같은 문서가 두 번 만들어지지 않게 합니다.
|
|
132
|
+
|
|
133
|
+
## 초등 교육과정 성취기준 연결
|
|
134
|
+
|
|
135
|
+
AI가 성취기준을 기억으로 적으면 코드와 문장이 조금씩 틀리기 쉽습니다. 이 서버는 성취기준을 **코드로만 받고**, 원문과 출처는 서버가 붙입니다.
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
curriculum_search_standards → 교사가 성취기준 고르기 → 생성 도구에 standardCodes 전달
|
|
139
|
+
├ docs_create_lesson_plan 과정안 기본 정보표의 성취기준 칸
|
|
140
|
+
├ docs_create_document 제목 아래 성취기준 표
|
|
141
|
+
├ education_create_assessment_tracker 평가계획 탭에 교과·영역·원문
|
|
142
|
+
├ forms_create_quiz 퀴즈 설명 끝에 관련 성취기준
|
|
143
|
+
└ classroom_create_assignment_draft 과제 설명 끝에 관련 성취기준
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
- **한 번에 시작하기:** MCP 프롬프트 `lesson_package_with_standards`(학년·교과·주제 입력)를 고르면 성취기준 선택 → 폴더 → 교사용 수업안 → 학생용 학습지 → 슬라이드 → 형성평가 → Classroom 초안 순서로 진행합니다. 게시는 교사 확인 뒤에만 합니다.
|
|
147
|
+
- **모르는 코드는 만들기 전에 멈춥니다.** 비슷한 코드를 제안하고 Google 파일은 만들지 않습니다.
|
|
148
|
+
- **데이터:** [korean-elementary-learning-map-mcp](https://github.com/taehyeonglim/korean-elementary-learning-map-mcp) 0.5.1(MIT)의 11개 교과 성취기준 620개. 원문은 NCIC 공개 PDF에서 자동 추출된 것이라 이 저장소에서 한 번 더 정리했습니다.
|
|
149
|
+
|
|
150
|
+
| 상태 | 수 | 뜻 |
|
|
151
|
+
| --- | ---: | --- |
|
|
152
|
+
| `extracted` | 494 | 추출된 문장을 그대로 씀 |
|
|
153
|
+
| `cleaned` | 113 | 뒤에 붙은 다음 단원 제목·쪽 번호·탐구 활동을 자르거나, 줄바꿈으로 깨진 띄어쓰기 36곳을 고침 |
|
|
154
|
+
| `unavailable` | 13 | 표 내용이 섞였거나 해설 문단이 들어가 싣지 않음. 문서에는 「원문 확인 필요」와 요지만 들어갑니다 |
|
|
155
|
+
|
|
156
|
+
자동 추출 문장이므로 공식 문서로 쓰기 전에는 NCIC 원문과 대조하세요. 정리 규칙은 [scripts/build-curriculum-data.mjs](scripts/build-curriculum-data.mjs), 원천 라이선스는 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)에 있습니다.
|
|
157
|
+
- **선수관계·세부 학습 주제까지 보려면** 원본 교육과정 MCP를 함께 등록하세요. 두 서버는 도구 이름이 겹치지 않습니다.
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
claude mcp add curriculum-kr -- npx -y korean-elementary-learning-map-mcp
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
curriculum_search_standards { "subject": "사회", "grade": 5, "query": "유적 유물" }
|
|
165
|
+
docs_create_lesson_plan { "subject": "사회", "grade": 5, "unit": "…", "standardCodes": ["[6사04-01]"], "objectives": ["…"], "sessions": [{ "title": "…", "steps": [{ "stage": "도입", "process": "…", "activities": ["…"], "minutes": 5 }] }] }
|
|
166
|
+
docs_create_document { "title": "고조선 사람들의 생활", "standardCodes": ["[6사04-01]"], "blocks": [{ "heading": "학습 목표", "text": "- …" }] }
|
|
167
|
+
education_create_assessment_tracker { "title": "2학기 평가", "className": "5학년 3반", "schoolYear": 2026, "semester": "2학기", "standardCodes": ["[6사04-01]", "[6사04-02]", "[6실03-04]"] }
|
|
168
|
+
```
|
|
55
169
|
|
|
56
170
|
## MCP 도구
|
|
57
171
|
|
|
58
172
|
| 도구 | 동작 | 성격 |
|
|
59
173
|
| --- | --- | --- |
|
|
60
174
|
| `workspace_get_auth_status` | Google 연결 상태와 범위 확인 | 읽기 |
|
|
175
|
+
| `curriculum_search_standards` | 초등 성취기준을 교과·학년·낱말로 찾기 (로그인·인터넷 불필요) | 읽기 (로컬) |
|
|
176
|
+
| `curriculum_get_standards` | 성취기준 코드로 원문·영역·출처·정리 내역 확인 | 읽기 (로컬) |
|
|
61
177
|
| `classroom_list_courses` | 교사가 담당하는 활성 수업 조회 | 읽기 |
|
|
62
|
-
| `
|
|
178
|
+
| `classroom_list_coursework` | 수업의 과제·자료·마감·배점 조회 | 읽기 |
|
|
179
|
+
| `classroom_list_students` | 수업 학생 명단 조회 | 읽기 |
|
|
180
|
+
| `classroom_list_student_submissions` | 과제별 제출 상태·점수·답변 조회 | 읽기 |
|
|
181
|
+
| `drive_search_files` | 앱이 접근 가능한 파일을 이름·유형·폴더로 검색 | 읽기 |
|
|
182
|
+
| `drive_get_file_metadata` | Drive 파일 정보와 권한 상태 조회 | 읽기 |
|
|
63
183
|
| `drive_create_folder` | Drive 폴더 생성 | 생성 |
|
|
64
|
-
| `docs_create_document` | Docs 문서 생성 | 생성 |
|
|
184
|
+
| `docs_create_document` | 제목 상자·절 제목·글머리·표·참고 상자가 있는 A4 Docs 문서 생성 | 생성 |
|
|
185
|
+
| `docs_create_lesson_plan` | 교수·학습 과정안(기본 정보표·차시별 흐름·단계별 과정표·평가 계획표) 생성 | 생성 |
|
|
186
|
+
| `docs_create_worksheet` | 학생용 학습지(이름 칸·이름표 달린 답 칸·빈 표·○ 자기 점검표) 생성 | 생성 |
|
|
187
|
+
| `docs_read_document` | Docs 본문·표·모든 문서 탭 읽기 | 읽기 |
|
|
65
188
|
| `sheets_create_workbook` | 여러 탭과 초기 데이터가 있는 Sheets 생성 | 생성 |
|
|
189
|
+
| `sheets_list_sheets` | 스프레드시트의 탭 목록과 크기 확인 | 읽기 |
|
|
190
|
+
| `sheets_read_values` | 스프레드시트 값 읽기 (범위 지정, 행 수 제한) | 읽기 |
|
|
191
|
+
| `sheets_inspect_workbook` | 셀 값을 반환하지 않고 구조·수식·오류·의존성 진단 | 읽기 |
|
|
192
|
+
| `education_create_assessment_tracker` | 9개 탭이 연결된 과정중심평가 시스템 생성 | 생성 |
|
|
193
|
+
| `education_create_classroom_submission_tracker` | Classroom 과제 제출 현황 대시보드 시트 생성 | 생성 |
|
|
66
194
|
| `slides_create_presentation` | 제목·본문 슬라이드 생성 | 생성 |
|
|
195
|
+
| `slides_read_presentation` | 슬라이드별 텍스트·표·발표자 노트 읽기 | 읽기 |
|
|
67
196
|
| `forms_create_quiz` | 문항·정답·배점이 있는 퀴즈 생성 | 생성 |
|
|
197
|
+
| `forms_read_form` | 설문 구조·문항·선택지·정답 읽기 | 읽기 |
|
|
198
|
+
| `forms_list_responses` | 제출된 설문 응답·점수 읽기 | 읽기 |
|
|
68
199
|
| `classroom_create_assignment_draft` | 학생에게 보이지 않는 과제 초안 생성 | 생성 |
|
|
69
200
|
| `classroom_publish_assignment` | 승인된 과제 초안을 학생에게 게시 | 외부 변경 |
|
|
70
201
|
| `drive_prepare_share` | 공유 대상·권한 승인 준비 | 승인 준비 |
|
|
@@ -72,6 +203,52 @@
|
|
|
72
203
|
|
|
73
204
|
게시와 공유 도구에는 MCP 안전 메타데이터가 포함되어 있습니다. 승인 ID는 15분 동안 유효하고 한 번만 사용할 수 있습니다.
|
|
74
205
|
|
|
206
|
+
### 기존 Google 자료를 읽으려면 (선택)
|
|
207
|
+
|
|
208
|
+
기본 범위인 `drive.file` 은 **이 앱이 만들었거나 사용자가 이 앱으로 연 파일만** 다룹니다.
|
|
209
|
+
그래서 예전부터 쓰던 Docs·Sheets·Slides·Forms는 기본 설정으로는 읽히지 않을 수 있습니다.
|
|
210
|
+
|
|
211
|
+
기존 자료와 Classroom 학생 정보를 읽으려면 설치와 로그인에 `--read`를 붙이세요. 서비스별 읽기 전용 범위는 Google에서 민감 범위로 분류하므로 기본으로 요청하지 않습니다.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
npx -y edu-workspace-mcp@1.1.0 install claude --read
|
|
215
|
+
npx -y edu-workspace-mcp@1.1.0 login --read
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
MCP 클라이언트 설정에 넣을 때는 `env` 에 적습니다.
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"mcpServers": {
|
|
223
|
+
"edu-workspace": {
|
|
224
|
+
"command": "npx",
|
|
225
|
+
"args": ["-y", "edu-workspace-mcp"],
|
|
226
|
+
"env": { "EDU_WORKSPACE_READ_ACCESS": "1" }
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
껐다 켰다 하면 요청 범위가 달라지므로, 바꾼 뒤에는 **반드시 다시 로그인**해야 합니다.
|
|
233
|
+
`workspace_get_auth_status` 로 지금 허용된 범위를 확인할 수 있습니다.
|
|
234
|
+
|
|
235
|
+
`claude`는 Claude Code의 사용자 범위에 등록되어 모든 프로젝트에서 동작합니다. Claude Desktop은 `install claude-desktop --read`를 사용하세요. 사용 예:
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
sheets_list_sheets { "spreadsheet": "https://docs.google.com/spreadsheets/d/<ID>/edit" }
|
|
239
|
+
sheets_read_values { "spreadsheet": "<ID>", "range": "'AI 피드백'!A1:J40", "maxRows": 40 }
|
|
240
|
+
sheets_inspect_workbook { "spreadsheet": "<ID>", "includeHidden": true }
|
|
241
|
+
education_create_assessment_tracker { "title": "5학년 평가 관리", "className": "5학년 3반", "schoolYear": 2026, "semester": "2학기", "students": [{ "number": 1, "name": "학생01" }] }
|
|
242
|
+
docs_read_document { "document": "https://docs.google.com/document/d/<ID>/edit" }
|
|
243
|
+
forms_list_responses { "form": "https://docs.google.com/forms/d/<ID>/edit", "maxResponses": 100 }
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
- `spreadsheet` 는 ID 와 전체 URL 을 모두 받습니다.
|
|
247
|
+
- `range` 를 비우면 첫 시트를 읽습니다.
|
|
248
|
+
- 값은 화면에 보이는 대로 읽으므로 수식과 `IMPORTRANGE` 결과도 그대로 들어옵니다. 원본 값이 필요하면 `raw: true`.
|
|
249
|
+
- 기본 200행까지만 돌려주고(`maxRows` 로 최대 2,000), 잘렸으면 `truncated: true` 로 알려 줍니다.
|
|
250
|
+
- 개인정보가 있는 복잡한 시트의 설계만 점검할 때는 `sheets_inspect_workbook`을 사용하세요. 셀 값과 수식 본문은 반환하지 않고 함수명 통계·시트 의존성·오류 위치만 알려 줍니다.
|
|
251
|
+
|
|
75
252
|
## 요구 사항
|
|
76
253
|
|
|
77
254
|
- Node.js 20 이상
|
|
@@ -80,23 +257,33 @@
|
|
|
80
257
|
|
|
81
258
|
## 빠른 설치 — 최종 사용자
|
|
82
259
|
|
|
83
|
-
|
|
260
|
+
macOS, Windows, Linux에서 사용할 AI 클라이언트를 한 번만 전체 프로젝트 설정에 등록합니다. Google Cloud Console 설정은 필요하지 않습니다.
|
|
84
261
|
|
|
85
262
|
```bash
|
|
86
|
-
|
|
87
|
-
npx -y edu-workspace-mcp
|
|
263
|
+
# 하나만 선택
|
|
264
|
+
npx -y edu-workspace-mcp@1.1.0 install codex
|
|
265
|
+
npx -y edu-workspace-mcp@1.1.0 install claude # Claude Code, 사용자 범위
|
|
266
|
+
npx -y edu-workspace-mcp@1.1.0 install claude-desktop
|
|
267
|
+
npx -y edu-workspace-mcp@1.1.0 install cursor
|
|
268
|
+
|
|
269
|
+
# 사용자별·컴퓨터별 최초 1회 Google 연결
|
|
270
|
+
npx -y edu-workspace-mcp@1.1.0 login
|
|
88
271
|
```
|
|
89
272
|
|
|
90
|
-
|
|
273
|
+
기존 Google 자료까지 읽을 사용자는 두 명령 모두에 `--read`를 붙입니다.
|
|
274
|
+
|
|
275
|
+
AI 클라이언트를 재시작한 뒤 새 프로젝트에서도 같은 MCP를 사용할 수 있습니다. 브라우저에서 Google 로그인과 권한 승인을 마치면 됩니다. 학교 계정에서 기관 관리자가 제3자 앱을 차단한 경우에는 관리자에게 앱 허용을 요청해야 합니다.
|
|
276
|
+
|
|
277
|
+
- [학교 Google Workspace 관리자 허용 안내](docs/ADMIN_GUIDE.md)
|
|
91
278
|
|
|
92
279
|
```bash
|
|
93
|
-
npx -y edu-workspace-mcp doctor
|
|
280
|
+
npx -y edu-workspace-mcp@1.1.0 doctor
|
|
94
281
|
```
|
|
95
282
|
|
|
96
|
-
Google 토큰은 `~/.edu-workspace-mcp/token.json`에 사용자 전용 권한으로 저장됩니다. 연결을
|
|
283
|
+
Google 토큰은 `~/.edu-workspace-mcp/token.json`에 사용자 전용 권한으로 저장됩니다. 연결을 해제하면 Google 측 권한 철회와 로컬 토큰 삭제를 함께 수행합니다.
|
|
97
284
|
|
|
98
285
|
```bash
|
|
99
|
-
npx -y edu-workspace-mcp disconnect
|
|
286
|
+
npx -y edu-workspace-mcp@1.1.0 disconnect
|
|
100
287
|
```
|
|
101
288
|
|
|
102
289
|
## MCP 클라이언트 연결
|
|
@@ -108,7 +295,7 @@ Claude Desktop과 Cursor 계열 JSON 설정:
|
|
|
108
295
|
"mcpServers": {
|
|
109
296
|
"edu-workspace": {
|
|
110
297
|
"command": "npx",
|
|
111
|
-
"args": ["-y", "edu-workspace-mcp"]
|
|
298
|
+
"args": ["-y", "edu-workspace-mcp@1.1.0"]
|
|
112
299
|
}
|
|
113
300
|
}
|
|
114
301
|
}
|
|
@@ -117,9 +304,9 @@ Claude Desktop과 Cursor 계열 JSON 설정:
|
|
|
117
304
|
Codex·ChatGPT Desktop 계열 TOML 설정:
|
|
118
305
|
|
|
119
306
|
```toml
|
|
120
|
-
[mcp_servers.
|
|
307
|
+
[mcp_servers.edu-workspace]
|
|
121
308
|
command = "npx"
|
|
122
|
-
args = ["-y", "edu-workspace-mcp"]
|
|
309
|
+
args = ["-y", "edu-workspace-mcp@1.1.0"]
|
|
123
310
|
default_tools_approval_mode = "writes"
|
|
124
311
|
```
|
|
125
312
|
|
|
@@ -143,13 +330,39 @@ node dist/cli.js login
|
|
|
143
330
|
## 보안 모델
|
|
144
331
|
|
|
145
332
|
- 필요한 Google OAuth 범위만 요청합니다.
|
|
333
|
+
- OAuth 로그인에 PKCE(S256), 무작위 `state`, 5분 만료와 loopback 콜백 검증을 적용합니다.
|
|
146
334
|
- 사용자의 OAuth 액세스·갱신 토큰은 Git에 포함되지 않고 로컬 사용자 폴더에만 저장됩니다.
|
|
147
335
|
- 설치형 앱은 비밀을 유지할 수 없는 공개 클라이언트이므로 배포용 데스크톱 client ID와 client secret은 앱에 포함됩니다.
|
|
336
|
+
- 기존 자료 읽기 범위는 기본으로 요청하지 않고 `--read` 또는 `EDU_WORKSPACE_READ_ACCESS=1`로 켠 사람에게만 추가합니다.
|
|
148
337
|
- 검색·조회 도구에는 `readOnlyHint`를 표시합니다.
|
|
338
|
+
- 교육과정 도구는 패키지에 들어 있는 정리본만 읽고 네트워크를 쓰지 않습니다(`openWorldHint: false`).
|
|
149
339
|
- Classroom 게시와 Drive 공유에는 `destructiveHint`를 표시합니다.
|
|
150
340
|
- Classroom 과제는 먼저 `DRAFT`로 만들고 별도 게시 도구에서 일회성 승인을 검증합니다.
|
|
151
341
|
- Drive 공유도 준비와 확정 단계를 분리합니다.
|
|
152
342
|
- 실제 학생 데이터가 아닌 별도 테스트 수업에서 먼저 검증하세요.
|
|
343
|
+
- Google API 할당량 오류에는 제한적 지수 백오프를 적용하고, 중복 생성 위험이 있는 모호한 오류는 자동 재시도하지 않습니다.
|
|
344
|
+
|
|
345
|
+
### 이 서버가 하는 일과 하지 않는 일
|
|
346
|
+
|
|
347
|
+
| 구분 | 내용 |
|
|
348
|
+
| --- | --- |
|
|
349
|
+
| 읽기 | 앱이 만든 파일, 그리고 `--read`를 켠 경우 교사가 주소나 ID로 지정한 Docs·Sheets·Slides·Forms와 Classroom 수업·과제·명단·제출 현황 |
|
|
350
|
+
| 만들기 | 새 폴더·문서·시트·슬라이드·퀴즈, Classroom **초안** 과제. 만든 직후 그 파일에만 서식·인쇄 설정을 입히고 지정한 폴더로 옮김 |
|
|
351
|
+
| 확인 후에만 | Classroom 과제 게시, Drive 공유. 15분 동안 한 번만 쓰는 승인 ID가 있어야 함. 이메일 주소로 공유하면 Google이 공유 알림 메일을 보냄 |
|
|
352
|
+
| 하지 않음 | 파일·폴더 삭제나 휴지통 이동, 이 앱이 만들지 않은 기존 파일의 내용 수정, Classroom 점수 입력·반환, 인터넷 전체 편집 공유 |
|
|
353
|
+
| 네트워크 | Google API(`googleapis.com`)와 로그인용 로컬 주소(`127.0.0.1`)만 씁니다. 교육과정 도구는 네트워크를 쓰지 않습니다 |
|
|
354
|
+
|
|
355
|
+
### Google이 멈추거나 느릴 때
|
|
356
|
+
|
|
357
|
+
- 할당량 초과(429)와 일시 오류는 정해진 횟수만 간격을 늘려 다시 시도합니다.
|
|
358
|
+
- 만들기 요청은 결과가 모호한 오류에서 **다시 시도하지 않습니다**. 같은 자료가 두 개 생기지 않게 하려는 것이니, 실패하면 Drive에서 먼저 확인한 뒤 다시 요청하세요.
|
|
359
|
+
- 문서는 만들어졌는데 A4·글꼴 같은 인쇄 설정만 실패하면 문서를 남기고 `warning`을 돌려줍니다.
|
|
360
|
+
- 교육과정 도구(`curriculum_*`)는 Google과 인터넷 없이도 계속 동작합니다.
|
|
361
|
+
|
|
362
|
+
### 자동 보안 검사에서 보일 수 있는 것
|
|
363
|
+
|
|
364
|
+
- `src/auth/bundled-oauth-client.ts`의 `GOCSPX-…` 값은 Google이 **공개 클라이언트**로 취급하는 데스크톱 앱용 client secret입니다. 설치형 앱은 이 값을 비밀로 지킬 수 없으므로 앱에 포함되며, 대신 PKCE(S256)와 `state` 검증으로 로그인을 보호합니다. 패턴 검사기가 "하드코딩된 시크릿"으로 표시할 수 있습니다.
|
|
365
|
+
- `spawn`·`spawnSync`는 두 곳뿐입니다. `src/auth/google-auth.ts`는 로그인 주소를 기본 브라우저로 여는 데(`open`·`xdg-open`·`rundll32`), `src/install/configure-client.ts`는 사용자가 `install codex`를 실행했을 때 `codex mcp` 명령으로 설정을 등록하는 데 씁니다. 실행할 프로그램은 고정되어 있고 셸을 거치지 않습니다.
|
|
153
366
|
|
|
154
367
|
Google OAuth 브랜딩과 개인정보처리방침을 공개해야 하며, Google Workspace for Education 관리자가 제3자 앱을 허용해야 할 수 있습니다.
|
|
155
368
|
|
|
@@ -170,17 +383,23 @@ Google API 실계정 테스트에는 별도 테스트 계정을 사용하세요.
|
|
|
170
383
|
|
|
171
384
|
- [x] OAuth 로그인·토큰 저장·연결 해제
|
|
172
385
|
- [x] Drive 검색·폴더 생성·승인 공유
|
|
173
|
-
- [x] Docs·Sheets·Slides·Forms 생성
|
|
386
|
+
- [x] Docs·Sheets·Slides·Forms 생성 및 내용 읽기
|
|
387
|
+
- [x] 과정중심평가·Classroom 제출 대시보드 교육 템플릿
|
|
388
|
+
- [x] 개인정보 비노출 Sheets 구조·수식 오류 진단
|
|
174
389
|
- [x] Classroom 수업 조회·과제 초안·승인 게시
|
|
175
390
|
- [x] macOS·Windows·Linux 공통 npm 실행 구조
|
|
176
391
|
- [x] 단위·MCP 통합·stdio 스모크 테스트
|
|
177
392
|
- [x] 실계정 OAuth·Classroom 조회·Sheets 생성 E2E 테스트
|
|
178
|
-
- [
|
|
393
|
+
- [x] Google OAuth 브랜딩 검증·프로덕션 게시·비민감 범위 판정
|
|
394
|
+
- [x] PKCE·state·토큰 파일 보호·할당량 재시도 정책
|
|
395
|
+
- [x] Codex·Claude Code·Claude Desktop·Cursor 전역 자동 설치
|
|
396
|
+
- [x] 초등 2022 개정 교육과정 성취기준 연결(정리본·`standardCodes`·수업 패키지 프롬프트)
|
|
179
397
|
- [ ] 호스팅형 Streamable HTTP MCP
|
|
180
398
|
- [ ] Calendar·Gmail·Tasks 확장
|
|
181
399
|
|
|
182
400
|
전체 제품 계획은 [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md)를 참고하세요.
|
|
401
|
+
정식판 출시 기준과 운영 정책은 [정식 배포 운영 기준](docs/PRODUCTION_READINESS.md), 버전별 변경 사항은 [CHANGELOG](CHANGELOG.md)를 참고하세요.
|
|
183
402
|
|
|
184
403
|
## 라이선스
|
|
185
404
|
|
|
186
|
-
[MIT](LICENSE)
|
|
405
|
+
[MIT](LICENSE). 포함된 교육과정 데이터의 원천과 라이선스는 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)를 참고하세요.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
## 초등 2022 개정 교육과정 성취기준 데이터
|
|
4
|
+
|
|
5
|
+
`data/curriculum/elementary-2022.json` 은 아래 두 원천으로 만든 정리본입니다.
|
|
6
|
+
`scripts/build-curriculum-data.mjs` 로 다시 만들 수 있습니다.
|
|
7
|
+
|
|
8
|
+
### 1. korean-elementary-learning-map-mcp (MIT)
|
|
9
|
+
|
|
10
|
+
- 저장소: https://github.com/taehyeonglim/korean-elementary-learning-map-mcp
|
|
11
|
+
- 사용한 버전: 0.5.1 (`devDependencies` 에 고정)
|
|
12
|
+
- 사용한 파일: `data/kr/curriculum-standards.json`(성취기준 코드·학년군·영역·요지), `data/kr/standard-texts.json`(성취기준 문장)
|
|
13
|
+
- 학습 지도 연동: `topics.json`, `dependencies.json`의 해시를 검사한 뒤 필요한 필드를 `data/curriculum/learning-map.json`으로 묶었습니다. 세부 주제·관찰 증거·평가 발문·선수관계는 DECK의 설계 자료이며 공식 수업 순서를 의미하지 않습니다. `scripts/build-learning-map.mjs`로 재생성합니다.
|
|
14
|
+
- 바꾼 점: 문장 뒤에 붙은 다음 단원 제목·쪽 번호·탐구 활동 목록을 잘라 냈고, PDF 줄바꿈으로 생긴 띄어쓰기 오류 중 확인한 것만 고쳤으며,
|
|
15
|
+
표 내용이 섞였거나 해설 문단이 들어간 문장은 싣지 않았습니다(`text: null`). 항목별 정리 내역은 `textNotes` 에 있습니다.
|
|
16
|
+
|
|
17
|
+
원천 패키지의 라이선스 전문:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
MIT License
|
|
21
|
+
|
|
22
|
+
Copyright (c) 2026 DECK (github.com/DECK6)
|
|
23
|
+
|
|
24
|
+
This repository — including its build scripts, validators, dataset,
|
|
25
|
+
ontology artifacts, and documentation — is an original work by the
|
|
26
|
+
copyright holder, compiled from publicly available information about
|
|
27
|
+
the national elementary curriculum of the Republic of Korea. It was
|
|
28
|
+
inspired by, but does not copy content or data from, the Marble Skill
|
|
29
|
+
Taxonomy. No rights to the official curriculum source documents
|
|
30
|
+
themselves are granted or implied — see NOTICE.md.
|
|
31
|
+
|
|
32
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
33
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
34
|
+
in the Software without restriction, including without limitation the rights
|
|
35
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
36
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
37
|
+
furnished to do so, subject to the following conditions:
|
|
38
|
+
|
|
39
|
+
The above copyright notice and this permission notice shall be included in all
|
|
40
|
+
copies or substantial portions of the Software.
|
|
41
|
+
|
|
42
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
43
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
44
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
45
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
46
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
47
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
48
|
+
SOFTWARE.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2. 성취기준 문장의 출처
|
|
52
|
+
|
|
53
|
+
성취기준 문장은 교육부 고시 제2022-33호(2026 일부 개정 포함) 교육과정 문서로, 국가교육과정정보센터(NCIC,
|
|
54
|
+
https://ncic.re.kr)가 공개한 PDF에서 추출한 것입니다. 교육부가 공표한 공공저작물로서 저작권법 제24조의2(공공저작물의
|
|
55
|
+
자유이용)에 따라 출처를 표기해 이용합니다. 이 데이터는 교육부·국가교육위원회·NCIC의 공식 산출물이 아니며,
|
|
56
|
+
공식 문서로 쓰기 전에는 NCIC 원문과 대조해야 합니다.
|
|
57
|
+
|
|
58
|
+
## kordoc (MIT)
|
|
59
|
+
|
|
60
|
+
- 저장소: https://github.com/chrisryugj/kordoc
|
|
61
|
+
- 사용한 버전: 4.15.4 (`dependencies`에 고정)
|
|
62
|
+
- 용도: HWP/HWPX·DOCX 파싱과 HWPX 생성. 원본 파일을 다시 배포하지 않으며 패키지는 npm에서 설치됩니다.
|
|
63
|
+
- 라이선스: MIT. 패키지의 `LICENSE` 및 저장소 고지를 따릅니다.
|
|
64
|
+
|
|
65
|
+
## Workspace Lab product artwork
|
|
66
|
+
|
|
67
|
+
Google Docs, Sheets, Slides, Forms, Drive and Classroom product icons in `web/assets/google` were supplied by the project owner. Google product names and artwork remain the property of Google. They identify connected services; Workspace Lab is an independent application. Source mappings are in `docs/ASSETS.md`.
|