edu-workspace-mcp 0.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/LICENSE +21 -0
- package/README.md +186 -0
- package/dist/approvals/service.d.ts +9 -0
- package/dist/approvals/service.js +27 -0
- package/dist/approvals/service.js.map +1 -0
- package/dist/auth/bundled-oauth-client.d.ts +11 -0
- package/dist/auth/bundled-oauth-client.js +12 -0
- package/dist/auth/bundled-oauth-client.js.map +1 -0
- package/dist/auth/google-auth.d.ts +12 -0
- package/dist/auth/google-auth.js +145 -0
- package/dist/auth/google-auth.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +63 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.js +18 -0
- package/dist/config.js.map +1 -0
- package/dist/google/classroom.d.ts +39 -0
- package/dist/google/classroom.js +77 -0
- package/dist/google/classroom.js.map +1 -0
- package/dist/google/docs.d.ts +9 -0
- package/dist/google/docs.js +30 -0
- package/dist/google/docs.js.map +1 -0
- package/dist/google/drive.d.ts +4 -0
- package/dist/google/drive.js +61 -0
- package/dist/google/drive.js.map +1 -0
- package/dist/google/forms.d.ts +14 -0
- package/dist/google/forms.js +57 -0
- package/dist/google/forms.js.map +1 -0
- package/dist/google/sheets.d.ts +9 -0
- package/dist/google/sheets.js +33 -0
- package/dist/google/sheets.js.map +1 -0
- package/dist/google/slides.d.ts +9 -0
- package/dist/google/slides.js +63 -0
- package/dist/google/slides.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.js +211 -0
- package/dist/server.js.map +1 -0
- package/package.json +39 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createApproval, consumeApproval } from "./approvals/service.js";
|
|
4
|
+
import { getAuthStatus } from "./auth/google-auth.js";
|
|
5
|
+
import { createAssignmentDraft, listCourses, publishAssignment } from "./google/classroom.js";
|
|
6
|
+
import { createDocument } from "./google/docs.js";
|
|
7
|
+
import { createFolder, searchFiles, shareFile } from "./google/drive.js";
|
|
8
|
+
import { createQuiz } from "./google/forms.js";
|
|
9
|
+
import { createWorkbook } from "./google/sheets.js";
|
|
10
|
+
import { createPresentation } from "./google/slides.js";
|
|
11
|
+
const readOnly = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true };
|
|
12
|
+
const createAction = { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true };
|
|
13
|
+
const externalChange = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true };
|
|
14
|
+
function jsonResult(value) {
|
|
15
|
+
return { content: [{ type: "text", text: JSON.stringify(value, null, 2) }], structuredContent: value };
|
|
16
|
+
}
|
|
17
|
+
function errorResult(code, error) {
|
|
18
|
+
return jsonResult({ error: code, message: error instanceof Error ? error.message : String(error) });
|
|
19
|
+
}
|
|
20
|
+
const defaultServices = {
|
|
21
|
+
getAuthStatus, listCourses, searchFiles, createFolder, createDocument, createWorkbook,
|
|
22
|
+
createPresentation, createQuiz, createAssignmentDraft, publishAssignment, shareFile
|
|
23
|
+
};
|
|
24
|
+
export function createServer(overrides = {}) {
|
|
25
|
+
const services = { ...defaultServices, ...overrides };
|
|
26
|
+
const server = new McpServer({ name: "edu-workspace-mcp", version: "0.1.0" }, { instructions: "Google Workspace for Education MCP입니다. 검색·조회 도구로 대상을 먼저 확인하세요. 생성 도구는 요청한 콘텐츠만 만듭니다. Classroom 게시와 Drive 공유는 대상·마감·첨부·권한을 사용자에게 보여 주고 명시적으로 확인받은 경우에만 확정 도구를 호출하세요." });
|
|
27
|
+
async function requireAuth() {
|
|
28
|
+
const status = await services.getAuthStatus();
|
|
29
|
+
return status.authenticated ? undefined : jsonResult({ error: "AUTH_REQUIRED", message: status.message });
|
|
30
|
+
}
|
|
31
|
+
server.registerTool("workspace_get_auth_status", {
|
|
32
|
+
title: "Google 연결 상태 확인", description: "Google Workspace 연결 상태와 허용 범위를 확인합니다.", annotations: readOnly
|
|
33
|
+
}, async () => jsonResult(await services.getAuthStatus()));
|
|
34
|
+
server.registerTool("classroom_list_courses", {
|
|
35
|
+
title: "Classroom 수업 조회", description: "로그인한 교사가 접근할 수 있는 활성 Google Classroom 수업을 조회합니다.",
|
|
36
|
+
inputSchema: { query: z.string().max(200).optional() }, annotations: readOnly
|
|
37
|
+
}, async ({ query }) => {
|
|
38
|
+
const authError = await requireAuth();
|
|
39
|
+
if (authError)
|
|
40
|
+
return authError;
|
|
41
|
+
try {
|
|
42
|
+
return jsonResult({ courses: await services.listCourses(query) });
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return errorResult("CLASSROOM_LIST_FAILED", error);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
server.registerTool("drive_search_files", {
|
|
49
|
+
title: "Drive 파일 검색", description: "Google Drive에서 이름, MIME 유형, 상위 폴더로 파일을 검색합니다.",
|
|
50
|
+
inputSchema: { query: z.string().max(200).optional(), mimeType: z.string().max(200).optional(), parentId: z.string().max(200).optional() }, annotations: readOnly
|
|
51
|
+
}, async ({ query, mimeType, parentId }) => {
|
|
52
|
+
const authError = await requireAuth();
|
|
53
|
+
if (authError)
|
|
54
|
+
return authError;
|
|
55
|
+
try {
|
|
56
|
+
return jsonResult({ files: await services.searchFiles(query, mimeType, parentId) });
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return errorResult("DRIVE_SEARCH_FAILED", error);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
server.registerTool("drive_create_folder", {
|
|
63
|
+
title: "Drive 폴더 생성", description: "Google Drive에 새 폴더를 만듭니다.",
|
|
64
|
+
inputSchema: { name: z.string().trim().min(1).max(200), parentId: z.string().max(200).optional() }, annotations: createAction
|
|
65
|
+
}, async ({ name, parentId }) => {
|
|
66
|
+
const authError = await requireAuth();
|
|
67
|
+
if (authError)
|
|
68
|
+
return authError;
|
|
69
|
+
try {
|
|
70
|
+
return jsonResult({ folder: await services.createFolder(name, parentId) });
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return errorResult("FOLDER_CREATE_FAILED", error);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const blockSchema = z.object({ heading: z.string().trim().min(1).max(200).optional(), text: z.string().max(20_000) });
|
|
77
|
+
server.registerTool("docs_create_document", {
|
|
78
|
+
title: "Google Docs 문서 생성", description: "제목과 본문 블록으로 Google Docs 문서를 생성합니다.",
|
|
79
|
+
inputSchema: { title: z.string().trim().min(1).max(200), blocks: z.array(blockSchema).max(100).default([]), parentFolderId: z.string().max(200).optional() }, annotations: createAction
|
|
80
|
+
}, async ({ title, blocks, parentFolderId }) => {
|
|
81
|
+
const authError = await requireAuth();
|
|
82
|
+
if (authError)
|
|
83
|
+
return authError;
|
|
84
|
+
try {
|
|
85
|
+
return jsonResult({ document: await services.createDocument(title, blocks, parentFolderId) });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return errorResult("DOCUMENT_CREATE_FAILED", error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
const cellSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
|
|
92
|
+
server.registerTool("sheets_create_workbook", {
|
|
93
|
+
title: "Google Sheets 생성", description: "여러 시트와 초기 행 데이터를 포함한 Google Sheets 파일을 생성합니다. 문자열 수식도 지원합니다.",
|
|
94
|
+
inputSchema: {
|
|
95
|
+
title: z.string().trim().min(1).max(200),
|
|
96
|
+
sheets: z.array(z.object({ title: z.string().trim().min(1).max(100), rows: z.array(z.array(cellSchema).max(100)).max(10_000).optional() })).min(1).max(50),
|
|
97
|
+
parentFolderId: z.string().max(200).optional()
|
|
98
|
+
}, annotations: createAction
|
|
99
|
+
}, async ({ title, sheets, parentFolderId }) => {
|
|
100
|
+
const authError = await requireAuth();
|
|
101
|
+
if (authError)
|
|
102
|
+
return authError;
|
|
103
|
+
try {
|
|
104
|
+
return jsonResult({ spreadsheet: await services.createWorkbook(title, sheets, parentFolderId) });
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return errorResult("SPREADSHEET_CREATE_FAILED", error);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
server.registerTool("slides_create_presentation", {
|
|
111
|
+
title: "Google Slides 생성", description: "제목과 본문으로 구성된 Google Slides 프레젠테이션을 생성합니다.",
|
|
112
|
+
inputSchema: { title: z.string().trim().min(1).max(200), slides: z.array(z.object({ title: z.string().max(500), body: z.string().max(20_000).optional() })).min(1).max(100), parentFolderId: z.string().max(200).optional() }, annotations: createAction
|
|
113
|
+
}, async ({ title, slides, parentFolderId }) => {
|
|
114
|
+
const authError = await requireAuth();
|
|
115
|
+
if (authError)
|
|
116
|
+
return authError;
|
|
117
|
+
try {
|
|
118
|
+
return jsonResult({ presentation: await services.createPresentation(title, slides, parentFolderId) });
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return errorResult("PRESENTATION_CREATE_FAILED", error);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const quizQuestionSchema = z.object({
|
|
125
|
+
title: z.string().trim().min(1).max(2_000), type: z.enum(["MULTIPLE_CHOICE", "SHORT_ANSWER", "PARAGRAPH"]),
|
|
126
|
+
choices: z.array(z.string().min(1).max(1_000)).min(2).max(20).optional(), correctAnswer: z.string().max(1_000).optional(),
|
|
127
|
+
points: z.number().int().min(0).max(100).optional(), required: z.boolean().optional()
|
|
128
|
+
}).refine((value) => value.type !== "MULTIPLE_CHOICE" || Boolean(value.choices?.length), { message: "객관식 문항에는 choices가 필요합니다." });
|
|
129
|
+
server.registerTool("forms_create_quiz", {
|
|
130
|
+
title: "Google Forms 퀴즈 생성", description: "객관식·단답형·서술형 문항과 정답·배점이 포함된 Google Forms 퀴즈를 생성합니다.",
|
|
131
|
+
inputSchema: { title: z.string().trim().min(1).max(200), description: z.string().max(5_000).optional(), questions: z.array(quizQuestionSchema).min(1).max(200), parentFolderId: z.string().max(200).optional() }, annotations: createAction
|
|
132
|
+
}, async ({ title, description, questions, parentFolderId }) => {
|
|
133
|
+
const authError = await requireAuth();
|
|
134
|
+
if (authError)
|
|
135
|
+
return authError;
|
|
136
|
+
try {
|
|
137
|
+
return jsonResult({ form: await services.createQuiz(title, description, questions, parentFolderId) });
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return errorResult("QUIZ_CREATE_FAILED", error);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
server.registerTool("classroom_create_assignment_draft", {
|
|
144
|
+
title: "Classroom 과제 초안 생성", description: "Classroom에 DRAFT 과제를 생성하고 게시 승인 ID를 반환합니다. 학생에게 아직 보이지 않습니다.",
|
|
145
|
+
inputSchema: {
|
|
146
|
+
courseId: z.string().min(1).max(200), title: z.string().trim().min(1).max(300), description: z.string().max(30_000).optional(),
|
|
147
|
+
dueAt: z.string().datetime({ offset: true }).optional(), maxPoints: z.number().min(0).max(10_000).optional(),
|
|
148
|
+
materials: z.array(z.object({ title: z.string().max(500), url: z.string().url() })).max(20).optional()
|
|
149
|
+
}, annotations: createAction
|
|
150
|
+
}, async (input) => {
|
|
151
|
+
const authError = await requireAuth();
|
|
152
|
+
if (authError)
|
|
153
|
+
return authError;
|
|
154
|
+
try {
|
|
155
|
+
const assignment = await services.createAssignmentDraft(input);
|
|
156
|
+
const approval = createApproval("classroom.publish", assignment);
|
|
157
|
+
return jsonResult({ assignment, approval, message: "게시 전 수업·제목·마감·첨부 자료를 사용자에게 확인하세요." });
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return errorResult("ASSIGNMENT_DRAFT_FAILED", error);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
server.registerTool("classroom_publish_assignment", {
|
|
164
|
+
title: "Classroom 과제 게시", description: "승인된 과제 초안을 학생에게 게시합니다. 바로 전에 사용자 확인을 받아야 합니다.",
|
|
165
|
+
inputSchema: { courseId: z.string().min(1).max(200), courseWorkId: z.string().min(1).max(200), approvalId: z.string().uuid(), confirmation: z.literal("PUBLISH") }, annotations: externalChange
|
|
166
|
+
}, async ({ courseId, courseWorkId, approvalId }) => {
|
|
167
|
+
const authError = await requireAuth();
|
|
168
|
+
if (authError)
|
|
169
|
+
return authError;
|
|
170
|
+
try {
|
|
171
|
+
const approval = consumeApproval(approvalId, "classroom.publish");
|
|
172
|
+
if (approval.summary.courseId !== courseId || approval.summary.courseWorkId !== courseWorkId)
|
|
173
|
+
throw new Error("승인된 과제와 게시 대상이 일치하지 않습니다.");
|
|
174
|
+
return jsonResult({ assignment: await services.publishAssignment(courseId, courseWorkId) });
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return errorResult("ASSIGNMENT_PUBLISH_FAILED", error);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
server.registerTool("drive_prepare_share", {
|
|
181
|
+
title: "Drive 공유 승인 준비", description: "공유 내용을 정리하고 15분간 유효한 승인 ID를 만듭니다. 아직 권한은 바뀌지 않습니다.",
|
|
182
|
+
inputSchema: { fileId: z.string().min(1).max(200), type: z.enum(["user", "group", "domain", "anyone"]), role: z.enum(["reader", "commenter", "writer"]), emailAddress: z.string().email().optional(), domain: z.string().max(253).optional() }, annotations: createAction
|
|
183
|
+
}, async (input) => {
|
|
184
|
+
const authError = await requireAuth();
|
|
185
|
+
if (authError)
|
|
186
|
+
return authError;
|
|
187
|
+
if ((input.type === "user" || input.type === "group") && !input.emailAddress)
|
|
188
|
+
return errorResult("INVALID_SHARE_TARGET", "user 또는 group 공유에는 emailAddress가 필요합니다.");
|
|
189
|
+
if (input.type === "domain" && !input.domain)
|
|
190
|
+
return errorResult("INVALID_SHARE_TARGET", "domain 공유에는 domain이 필요합니다.");
|
|
191
|
+
return jsonResult({ approval: createApproval("drive.share", input), message: "공유 대상과 권한을 사용자에게 확인하세요." });
|
|
192
|
+
});
|
|
193
|
+
server.registerTool("drive_share_file", {
|
|
194
|
+
title: "Drive 파일 공유", description: "승인된 대상에게 Drive 파일 권한을 부여합니다. 바로 전에 사용자 확인을 받아야 합니다.",
|
|
195
|
+
inputSchema: { approvalId: z.string().uuid(), confirmation: z.literal("SHARE") }, annotations: externalChange
|
|
196
|
+
}, async ({ approvalId }) => {
|
|
197
|
+
const authError = await requireAuth();
|
|
198
|
+
if (authError)
|
|
199
|
+
return authError;
|
|
200
|
+
try {
|
|
201
|
+
const approval = consumeApproval(approvalId, "drive.share");
|
|
202
|
+
const input = approval.summary;
|
|
203
|
+
return jsonResult({ permission: await services.shareFile(input.fileId, input.type, input.role, input.emailAddress, input.domain) });
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
return errorResult("DRIVE_SHARE_FAILED", error);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
return server;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "edu-workspace-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Google Workspace for Education MCP server",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"edu-workspace-mcp": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "node scripts/clean.mjs && tsc -p tsconfig.build.json",
|
|
19
|
+
"dev": "tsx src/index.ts",
|
|
20
|
+
"start": "node dist/index.js",
|
|
21
|
+
"cli": "tsx src/cli.ts",
|
|
22
|
+
"check": "tsc --noEmit -p tsconfig.json",
|
|
23
|
+
"test": "npm run build && node scripts/run-tests.mjs",
|
|
24
|
+
"test:mcp": "npm run build && tsx src/tests/mcp-smoke.ts",
|
|
25
|
+
"prepack": "npm run check && npm test"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": { "access": "public" },
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
30
|
+
"google-auth-library": "^10.9.1",
|
|
31
|
+
"googleapis": "^169.0.0",
|
|
32
|
+
"zod": "^3.24.2"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^22.15.3",
|
|
36
|
+
"tsx": "^4.19.3",
|
|
37
|
+
"typescript": "^5.8.3"
|
|
38
|
+
}
|
|
39
|
+
}
|