edu-workspace-mcp 1.0.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 +150 -14
- 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.js +7 -0
- package/dist/auth/google-auth.js.map +1 -1
- package/dist/cli.js +14 -0
- package/dist/cli.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/docs.d.ts +28 -17
- package/dist/google/docs.js +150 -127
- 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/education-sheets.d.ts +10 -0
- package/dist/google/education-sheets.js +19 -3
- package/dist/google/education-sheets.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/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/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 +6 -1
- package/dist/server.js +250 -20
- package/dist/server.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- 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 +29 -4
- 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
|
@@ -8,7 +8,34 @@
|
|
|
8
8
|
|
|
9
9
|
## 할 수 있는 일
|
|
10
10
|
|
|
11
|
-
|
|
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 문서 생성
|
|
12
39
|
- 학생 명단·평가계획·평가기록·제출현황·관찰기록·대시보드가 연결된 Google Sheets 생성
|
|
13
40
|
- 셀 값과 수식 본문을 노출하지 않는 기존 Sheets 구조·수식 오류 진단
|
|
14
41
|
- Classroom 명단·제출 상태를 개인정보 최소화 시트로 변환
|
|
@@ -18,11 +45,25 @@
|
|
|
18
45
|
- Google Drive 파일 검색, 폴더 생성, 승인 후 공유
|
|
19
46
|
- 교사가 담당하는 Classroom 수업·과제·학생 명단·제출 현황 조회
|
|
20
47
|
- Classroom 과제 초안 생성, 사용자 승인 후 게시
|
|
48
|
+
- 초등 2022 개정 교육과정 성취기준 620개 찾기(인터넷·Google 로그인 불필요), 수업안·퀴즈·과제·평가계획에 원문과 출처 넣기
|
|
21
49
|
|
|
22
50
|
예시 요청:
|
|
23
51
|
|
|
24
52
|
> “`소화와 순환` 단원의 5문항 퀴즈와 학습지, 6장짜리 수업 슬라이드를 만들고 `2학년 과학` 클래스룸에 금요일 오후 6시 마감 과제 초안으로 등록해줘.”
|
|
25
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
|
+
|
|
26
67
|
## 실제 교육 활용 데모
|
|
27
68
|
|
|
28
69
|
한 번의 자연어 요청으로 여러 Google 교육 도구를 연결할 수 있습니다.
|
|
@@ -59,11 +100,80 @@
|
|
|
59
100
|
|
|
60
101
|
> 읽기 확장 모드에서는 기존 자료를 조회·분석할 수 있습니다. 교육용 평가·제출 템플릿에는 차트·드롭다운·조건부 서식이 포함됩니다. 기존 문서나 임의 범위의 범용 부분 편집은 아직 지원하지 않습니다. 자세한 지원 범위는 [활용 예시 문서](docs/EDUCATOR_USE_CASES.md#현재-버전에서-가능한-범위)를 확인하세요.
|
|
61
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
|
+
```
|
|
169
|
+
|
|
62
170
|
## MCP 도구
|
|
63
171
|
|
|
64
172
|
| 도구 | 동작 | 성격 |
|
|
65
173
|
| --- | --- | --- |
|
|
66
174
|
| `workspace_get_auth_status` | Google 연결 상태와 범위 확인 | 읽기 |
|
|
175
|
+
| `curriculum_search_standards` | 초등 성취기준을 교과·학년·낱말로 찾기 (로그인·인터넷 불필요) | 읽기 (로컬) |
|
|
176
|
+
| `curriculum_get_standards` | 성취기준 코드로 원문·영역·출처·정리 내역 확인 | 읽기 (로컬) |
|
|
67
177
|
| `classroom_list_courses` | 교사가 담당하는 활성 수업 조회 | 읽기 |
|
|
68
178
|
| `classroom_list_coursework` | 수업의 과제·자료·마감·배점 조회 | 읽기 |
|
|
69
179
|
| `classroom_list_students` | 수업 학생 명단 조회 | 읽기 |
|
|
@@ -71,7 +181,9 @@
|
|
|
71
181
|
| `drive_search_files` | 앱이 접근 가능한 파일을 이름·유형·폴더로 검색 | 읽기 |
|
|
72
182
|
| `drive_get_file_metadata` | Drive 파일 정보와 권한 상태 조회 | 읽기 |
|
|
73
183
|
| `drive_create_folder` | Drive 폴더 생성 | 생성 |
|
|
74
|
-
| `docs_create_document` | Docs 문서 생성 | 생성 |
|
|
184
|
+
| `docs_create_document` | 제목 상자·절 제목·글머리·표·참고 상자가 있는 A4 Docs 문서 생성 | 생성 |
|
|
185
|
+
| `docs_create_lesson_plan` | 교수·학습 과정안(기본 정보표·차시별 흐름·단계별 과정표·평가 계획표) 생성 | 생성 |
|
|
186
|
+
| `docs_create_worksheet` | 학생용 학습지(이름 칸·이름표 달린 답 칸·빈 표·○ 자기 점검표) 생성 | 생성 |
|
|
75
187
|
| `docs_read_document` | Docs 본문·표·모든 문서 탭 읽기 | 읽기 |
|
|
76
188
|
| `sheets_create_workbook` | 여러 탭과 초기 데이터가 있는 Sheets 생성 | 생성 |
|
|
77
189
|
| `sheets_list_sheets` | 스프레드시트의 탭 목록과 크기 확인 | 읽기 |
|
|
@@ -99,8 +211,8 @@
|
|
|
99
211
|
기존 자료와 Classroom 학생 정보를 읽으려면 설치와 로그인에 `--read`를 붙이세요. 서비스별 읽기 전용 범위는 Google에서 민감 범위로 분류하므로 기본으로 요청하지 않습니다.
|
|
100
212
|
|
|
101
213
|
```bash
|
|
102
|
-
npx -y edu-workspace-mcp@1.
|
|
103
|
-
npx -y edu-workspace-mcp@1.
|
|
214
|
+
npx -y edu-workspace-mcp@1.1.0 install claude --read
|
|
215
|
+
npx -y edu-workspace-mcp@1.1.0 login --read
|
|
104
216
|
```
|
|
105
217
|
|
|
106
218
|
MCP 클라이언트 설정에 넣을 때는 `env` 에 적습니다.
|
|
@@ -149,13 +261,13 @@ macOS, Windows, Linux에서 사용할 AI 클라이언트를 한 번만 전체
|
|
|
149
261
|
|
|
150
262
|
```bash
|
|
151
263
|
# 하나만 선택
|
|
152
|
-
npx -y edu-workspace-mcp@1.
|
|
153
|
-
npx -y edu-workspace-mcp@1.
|
|
154
|
-
npx -y edu-workspace-mcp@1.
|
|
155
|
-
npx -y edu-workspace-mcp@1.
|
|
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
|
|
156
268
|
|
|
157
269
|
# 사용자별·컴퓨터별 최초 1회 Google 연결
|
|
158
|
-
npx -y edu-workspace-mcp@1.
|
|
270
|
+
npx -y edu-workspace-mcp@1.1.0 login
|
|
159
271
|
```
|
|
160
272
|
|
|
161
273
|
기존 Google 자료까지 읽을 사용자는 두 명령 모두에 `--read`를 붙입니다.
|
|
@@ -165,13 +277,13 @@ AI 클라이언트를 재시작한 뒤 새 프로젝트에서도 같은 MCP를
|
|
|
165
277
|
- [학교 Google Workspace 관리자 허용 안내](docs/ADMIN_GUIDE.md)
|
|
166
278
|
|
|
167
279
|
```bash
|
|
168
|
-
npx -y edu-workspace-mcp@1.
|
|
280
|
+
npx -y edu-workspace-mcp@1.1.0 doctor
|
|
169
281
|
```
|
|
170
282
|
|
|
171
283
|
Google 토큰은 `~/.edu-workspace-mcp/token.json`에 사용자 전용 권한으로 저장됩니다. 연결을 해제하면 Google 측 권한 철회와 로컬 토큰 삭제를 함께 수행합니다.
|
|
172
284
|
|
|
173
285
|
```bash
|
|
174
|
-
npx -y edu-workspace-mcp@1.
|
|
286
|
+
npx -y edu-workspace-mcp@1.1.0 disconnect
|
|
175
287
|
```
|
|
176
288
|
|
|
177
289
|
## MCP 클라이언트 연결
|
|
@@ -183,7 +295,7 @@ Claude Desktop과 Cursor 계열 JSON 설정:
|
|
|
183
295
|
"mcpServers": {
|
|
184
296
|
"edu-workspace": {
|
|
185
297
|
"command": "npx",
|
|
186
|
-
"args": ["-y", "edu-workspace-mcp@1.
|
|
298
|
+
"args": ["-y", "edu-workspace-mcp@1.1.0"]
|
|
187
299
|
}
|
|
188
300
|
}
|
|
189
301
|
}
|
|
@@ -194,7 +306,7 @@ Codex·ChatGPT Desktop 계열 TOML 설정:
|
|
|
194
306
|
```toml
|
|
195
307
|
[mcp_servers.edu-workspace]
|
|
196
308
|
command = "npx"
|
|
197
|
-
args = ["-y", "edu-workspace-mcp@1.
|
|
309
|
+
args = ["-y", "edu-workspace-mcp@1.1.0"]
|
|
198
310
|
default_tools_approval_mode = "writes"
|
|
199
311
|
```
|
|
200
312
|
|
|
@@ -223,12 +335,35 @@ node dist/cli.js login
|
|
|
223
335
|
- 설치형 앱은 비밀을 유지할 수 없는 공개 클라이언트이므로 배포용 데스크톱 client ID와 client secret은 앱에 포함됩니다.
|
|
224
336
|
- 기존 자료 읽기 범위는 기본으로 요청하지 않고 `--read` 또는 `EDU_WORKSPACE_READ_ACCESS=1`로 켠 사람에게만 추가합니다.
|
|
225
337
|
- 검색·조회 도구에는 `readOnlyHint`를 표시합니다.
|
|
338
|
+
- 교육과정 도구는 패키지에 들어 있는 정리본만 읽고 네트워크를 쓰지 않습니다(`openWorldHint: false`).
|
|
226
339
|
- Classroom 게시와 Drive 공유에는 `destructiveHint`를 표시합니다.
|
|
227
340
|
- Classroom 과제는 먼저 `DRAFT`로 만들고 별도 게시 도구에서 일회성 승인을 검증합니다.
|
|
228
341
|
- Drive 공유도 준비와 확정 단계를 분리합니다.
|
|
229
342
|
- 실제 학생 데이터가 아닌 별도 테스트 수업에서 먼저 검증하세요.
|
|
230
343
|
- Google API 할당량 오류에는 제한적 지수 백오프를 적용하고, 중복 생성 위험이 있는 모호한 오류는 자동 재시도하지 않습니다.
|
|
231
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` 명령으로 설정을 등록하는 데 씁니다. 실행할 프로그램은 고정되어 있고 셸을 거치지 않습니다.
|
|
366
|
+
|
|
232
367
|
Google OAuth 브랜딩과 개인정보처리방침을 공개해야 하며, Google Workspace for Education 관리자가 제3자 앱을 허용해야 할 수 있습니다.
|
|
233
368
|
|
|
234
369
|
요청 범위의 상세 설명은 [OAuth 범위 문서](docs/OAUTH_SCOPES.md), 공개 데이터 처리 방침은 [개인정보처리방침](https://edu.jeld.kr/privacy.html)을 참고하세요. 공개 배포를 위한 범위별 사용 사유와 데모 영상 시나리오는 [OAuth 검수 제출 가이드](docs/OAUTH_VERIFICATION_GUIDE.md)에 정리되어 있습니다.
|
|
@@ -258,6 +393,7 @@ Google API 실계정 테스트에는 별도 테스트 계정을 사용하세요.
|
|
|
258
393
|
- [x] Google OAuth 브랜딩 검증·프로덕션 게시·비민감 범위 판정
|
|
259
394
|
- [x] PKCE·state·토큰 파일 보호·할당량 재시도 정책
|
|
260
395
|
- [x] Codex·Claude Code·Claude Desktop·Cursor 전역 자동 설치
|
|
396
|
+
- [x] 초등 2022 개정 교육과정 성취기준 연결(정리본·`standardCodes`·수업 패키지 프롬프트)
|
|
261
397
|
- [ ] 호스팅형 Streamable HTTP MCP
|
|
262
398
|
- [ ] Calendar·Gmail·Tasks 확장
|
|
263
399
|
|
|
@@ -266,4 +402,4 @@ Google API 실계정 테스트에는 별도 테스트 계정을 사용하세요.
|
|
|
266
402
|
|
|
267
403
|
## 라이선스
|
|
268
404
|
|
|
269
|
-
[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`.
|