@vibeuniv/mcp-server 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.
Files changed (50) hide show
  1. package/README.md +200 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +37 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/api-client.d.ts +16 -0
  7. package/dist/lib/api-client.d.ts.map +1 -0
  8. package/dist/lib/api-client.js +78 -0
  9. package/dist/lib/api-client.js.map +1 -0
  10. package/dist/lib/config.d.ts +6 -0
  11. package/dist/lib/config.d.ts.map +1 -0
  12. package/dist/lib/config.js +13 -0
  13. package/dist/lib/config.js.map +1 -0
  14. package/dist/lib/file-scanner.d.ts +10 -0
  15. package/dist/lib/file-scanner.d.ts.map +1 -0
  16. package/dist/lib/file-scanner.js +300 -0
  17. package/dist/lib/file-scanner.js.map +1 -0
  18. package/dist/tools/analyze.d.ts +8 -0
  19. package/dist/tools/analyze.d.ts.map +1 -0
  20. package/dist/tools/analyze.js +57 -0
  21. package/dist/tools/analyze.js.map +1 -0
  22. package/dist/tools/ask-tutor.d.ts +9 -0
  23. package/dist/tools/ask-tutor.d.ts.map +1 -0
  24. package/dist/tools/ask-tutor.js +24 -0
  25. package/dist/tools/ask-tutor.js.map +1 -0
  26. package/dist/tools/get-learning.d.ts +8 -0
  27. package/dist/tools/get-learning.d.ts.map +1 -0
  28. package/dist/tools/get-learning.js +43 -0
  29. package/dist/tools/get-learning.js.map +1 -0
  30. package/dist/tools/log-session.d.ts +10 -0
  31. package/dist/tools/log-session.d.ts.map +1 -0
  32. package/dist/tools/log-session.js +36 -0
  33. package/dist/tools/log-session.js.map +1 -0
  34. package/dist/tools/submit-analysis.d.ts +9 -0
  35. package/dist/tools/submit-analysis.d.ts.map +1 -0
  36. package/dist/tools/submit-analysis.js +37 -0
  37. package/dist/tools/submit-analysis.js.map +1 -0
  38. package/dist/tools/sync-project.d.ts +9 -0
  39. package/dist/tools/sync-project.d.ts.map +1 -0
  40. package/dist/tools/sync-project.js +126 -0
  41. package/dist/tools/sync-project.js.map +1 -0
  42. package/dist/tools/upload-files.d.ts +9 -0
  43. package/dist/tools/upload-files.d.ts.map +1 -0
  44. package/dist/tools/upload-files.js +72 -0
  45. package/dist/tools/upload-files.js.map +1 -0
  46. package/dist/types.d.ts +55 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +40 -0
@@ -0,0 +1,126 @@
1
+ import { z } from "zod";
2
+ import { scanProjectFiles } from "../lib/file-scanner.js";
3
+ export const syncProjectSchema = {
4
+ project_name: z.string().optional().describe("Name for the project (defaults to directory name)"),
5
+ description: z.string().optional().describe("Short description of the project"),
6
+ };
7
+ export function registerSyncProject(server, client) {
8
+ server.tool("vibeuniv_sync_project", "Sync current project's tech stack information to VibeUniv platform for analysis and learning", syncProjectSchema, { readOnlyHint: false, destructiveHint: false, openWorldHint: true }, async ({ project_name, description }) => {
9
+ try {
10
+ const cwd = process.cwd();
11
+ const defaultName = cwd.split("/").pop() || "unnamed-project";
12
+ console.error(`[vibeuniv] Scanning project files in ${cwd}...`);
13
+ const files = await scanProjectFiles(cwd);
14
+ if (files.length === 0) {
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: "No tech stack files detected in the current directory. Make sure you're in a project root directory.",
20
+ },
21
+ ],
22
+ isError: true,
23
+ };
24
+ }
25
+ console.error(`[vibeuniv] Creating/updating project...`);
26
+ const project = await client.createProject({
27
+ name: project_name || defaultName,
28
+ description,
29
+ });
30
+ console.error(`[vibeuniv] Uploading ${files.length} files...`);
31
+ await client.uploadFiles(project.id, files);
32
+ const fileList = files.map((f) => ` - ${f.relativePath} (${f.size} bytes)`).join("\n");
33
+ return {
34
+ content: [
35
+ {
36
+ type: "text",
37
+ text: [
38
+ `✅ 프로젝트 "${project.name}" 동기화 완료!`,
39
+ `Project ID: ${project.id}`,
40
+ "",
41
+ `${files.length}개 파일 감지:`,
42
+ fileList,
43
+ "",
44
+ "─".repeat(50),
45
+ "",
46
+ "📚 **교육적 분석 요청**",
47
+ "",
48
+ "더 좋은 학습 커리큘럼을 생성하기 위해 이 프로젝트의 교육적 분석을 수행해 주세요.",
49
+ "프로젝트의 주요 파일들을 읽고, 아래 JSON 형식으로 분석 결과를 생성한 후",
50
+ "`vibeuniv_submit_analysis` 도구로 전송해 주세요.",
51
+ "",
52
+ "### 분석 항목",
53
+ "",
54
+ "```json",
55
+ "{",
56
+ ' "project_overview": {',
57
+ ' "one_liner": "이 앱이 무엇을 하는지 한 문장 요약",',
58
+ ' "app_type": "saas | ecommerce | social | blog | dashboard | game | tool | portfolio | api_service | other",',
59
+ ' "target_users": "이 앱의 주요 사용자",',
60
+ ' "core_features": ["핵심 기능 3-5개"],',
61
+ ' "tech_stack_metaphors": [{"tech_name": "기술명", "metaphor": "일상 비유"}]',
62
+ " },",
63
+ ' "user_flows": [{',
64
+ ' "name": "플로우 이름 (예: 로그인)",',
65
+ ' "trigger": "사용자 액션",',
66
+ ' "steps": [{"description": "단계 설명", "file": "파일 경로", "line_range": "시작-끝", "concepts": ["관련 개념"]}],',
67
+ ' "difficulty": "beginner | intermediate | advanced"',
68
+ " }],",
69
+ ' "file_analysis": [{',
70
+ ' "path": "파일 경로",',
71
+ ' "role": "이 파일의 역할 한 문장",',
72
+ ' "complexity": "1-5 (숫자)",',
73
+ ' "difficulty": "beginner | intermediate | advanced",',
74
+ ' "key_concepts": ["핵심 개념"],',
75
+ ' "prerequisites": ["선행 지식"],',
76
+ ' "gotchas": ["초보자가 놓치기 쉬운 점"],',
77
+ ' "teaching_notes": "이 파일을 어떻게 가르칠지",',
78
+ ' "connections": {"imports_from": ["의존 파일"], "imported_by": ["사용하는 파일"], "data_flow": "데이터 흐름"}',
79
+ " }],",
80
+ ' "architecture": {',
81
+ ' "layers": [{"name": "레이어명", "description": "설명", "files": ["파일"], "patterns": ["패턴"]}],',
82
+ ' "design_patterns": [{"name": "패턴명", "where_used": ["파일:라인"], "why_used": "이유", "teaching_level": "beginner | intermediate | advanced"}],',
83
+ ' "data_flow_summary": "전체 데이터 흐름 요약 (마크다운)"',
84
+ " },",
85
+ ' "code_quality": {',
86
+ ' "good_practices": [{"description": "잘한 점", "files": ["파일"], "concept": "교육 포인트"}],',
87
+ ' "improvement_areas": [{"description": "개선점", "severity": "info | warning | important", "files": ["파일"], "teaching_opportunity": "교육 기회"}],',
88
+ ' "security_notes": [{"observation": "보안 관찰", "files": ["파일"], "teaching_concept": "교육 포인트"}]',
89
+ " },",
90
+ ' "learning_priorities": {',
91
+ ' "beginner": {"start_with": ["먼저 볼 것"], "focus_on": ["집중할 것"], "skip_for_now": ["나중에 볼 것"]},',
92
+ ' "intermediate": {"start_with": [], "focus_on": [], "deep_dive": ["깊이 파볼 것"]},',
93
+ ' "advanced": {"start_with": [], "focus_on": [], "challenge_topics": ["심화 주제"]}',
94
+ " },",
95
+ ' "repeated_patterns": [{',
96
+ ' "name": "패턴명",',
97
+ ' "description": "설명",',
98
+ ' "occurrences": [{"file": "파일", "line_range": "범위"}],',
99
+ ' "teaching_value": "왜 가르쳐야 하는지"',
100
+ " }]",
101
+ "}",
102
+ "```",
103
+ "",
104
+ "### 분석 가이드",
105
+ "",
106
+ "1. 프로젝트의 주요 소스 파일들을 읽어주세요",
107
+ "2. 위 JSON 스키마에 맞게 분석 결과를 생성해 주세요",
108
+ "3. `vibeuniv_submit_analysis` 도구를 호출하여 결과를 전송해 주세요",
109
+ `4. 전송 시 project_id는 "${project.id}"를 사용해 주세요`,
110
+ "",
111
+ "분석이 완료되면 `vibeuniv_analyze`로 기술 스택 분석을 진행할 수 있습니다.",
112
+ ].join("\n"),
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ catch (error) {
118
+ const message = error instanceof Error ? error.message : String(error);
119
+ return {
120
+ content: [{ type: "text", text: `Failed to sync project: ${message}` }],
121
+ isError: true,
122
+ };
123
+ }
124
+ });
125
+ }
126
+ //# sourceMappingURL=sync-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-project.js","sourceRoot":"","sources":["../../src/tools/sync-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { VibeUnivClient } from "../lib/api-client.js";
4
+ export declare const uploadFilesSchema: {
5
+ project_id: z.ZodString;
6
+ file_paths: z.ZodArray<z.ZodString, "many">;
7
+ };
8
+ export declare function registerUploadFiles(server: McpServer, client: VibeUnivClient): void;
9
+ //# sourceMappingURL=upload-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-files.d.ts","sourceRoot":"","sources":["../../src/tools/upload-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKtD,eAAO,MAAM,iBAAiB;;;CAG7B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA2EnF"}
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ import { readFile, stat } from "node:fs/promises";
3
+ import { createHash } from "node:crypto";
4
+ import { resolve, relative, basename } from "node:path";
5
+ const MAX_FILE_SIZE = 50 * 1024; // 50KB
6
+ export const uploadFilesSchema = {
7
+ project_id: z.string().describe("The VibeUniv project ID"),
8
+ file_paths: z.array(z.string()).describe("Array of file paths to upload (relative or absolute)"),
9
+ };
10
+ export function registerUploadFiles(server, client) {
11
+ server.tool("vibeuniv_upload_files", "Upload specific project files to VibeUniv for detailed analysis", uploadFilesSchema, { readOnlyHint: false, destructiveHint: false, openWorldHint: true }, async ({ project_id, file_paths }) => {
12
+ try {
13
+ const cwd = process.cwd();
14
+ const files = [];
15
+ const errors = [];
16
+ for (const filePath of file_paths) {
17
+ const absolutePath = resolve(cwd, filePath);
18
+ try {
19
+ const fileStat = await stat(absolutePath);
20
+ if (!fileStat.isFile()) {
21
+ errors.push(`${filePath}: not a file`);
22
+ continue;
23
+ }
24
+ let content = await readFile(absolutePath, "utf-8");
25
+ if (Buffer.byteLength(content, "utf-8") > MAX_FILE_SIZE) {
26
+ content = content.slice(0, MAX_FILE_SIZE);
27
+ }
28
+ const sha256 = createHash("sha256").update(content, "utf-8").digest("hex");
29
+ files.push({
30
+ name: basename(absolutePath),
31
+ relativePath: relative(cwd, absolutePath),
32
+ size: fileStat.size,
33
+ content,
34
+ sha256,
35
+ });
36
+ }
37
+ catch {
38
+ errors.push(`${filePath}: file not found or unreadable`);
39
+ }
40
+ }
41
+ if (files.length === 0) {
42
+ return {
43
+ content: [
44
+ {
45
+ type: "text",
46
+ text: `No valid files to upload.\nErrors:\n${errors.map((e) => ` - ${e}`).join("\n")}`,
47
+ },
48
+ ],
49
+ isError: true,
50
+ };
51
+ }
52
+ await client.uploadFiles(project_id, files);
53
+ let result = `Successfully uploaded ${files.length} file(s):\n`;
54
+ result += files.map((f) => ` - ${f.relativePath} (${f.size} bytes)`).join("\n");
55
+ if (errors.length > 0) {
56
+ result += `\n\nSkipped ${errors.length} file(s):\n`;
57
+ result += errors.map((e) => ` - ${e}`).join("\n");
58
+ }
59
+ return {
60
+ content: [{ type: "text", text: result }],
61
+ };
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ return {
66
+ content: [{ type: "text", text: `Failed to upload files: ${message}` }],
67
+ isError: true,
68
+ };
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=upload-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-files.js","sourceRoot":"","sources":["../../src/tools/upload-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface ProjectFile {
2
+ name: string;
3
+ relativePath: string;
4
+ size: number;
5
+ content: string;
6
+ sha256: string;
7
+ }
8
+ export interface Project {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ createdAt: string;
13
+ updatedAt: string;
14
+ }
15
+ export interface CreateProjectInput {
16
+ name: string;
17
+ description?: string;
18
+ }
19
+ export interface AnalysisResult {
20
+ id: string;
21
+ projectId: string;
22
+ status: "pending" | "processing" | "completed" | "failed";
23
+ techStack?: TechStackItem[];
24
+ summary?: string;
25
+ createdAt: string;
26
+ }
27
+ export interface TechStackItem {
28
+ name: string;
29
+ category: string;
30
+ version?: string;
31
+ confidence: number;
32
+ }
33
+ export interface LearningPath {
34
+ id: string;
35
+ projectId: string;
36
+ modules: LearningModule[];
37
+ createdAt: string;
38
+ }
39
+ export interface LearningModule {
40
+ id: string;
41
+ title: string;
42
+ description: string;
43
+ topics: string[];
44
+ order: number;
45
+ }
46
+ export interface SessionLog {
47
+ summary: string;
48
+ filesChanged?: string[];
49
+ }
50
+ export interface ApiResponse<T> {
51
+ success: boolean;
52
+ data?: T;
53
+ error?: string;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1D,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@vibeuniv/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "VibeUniv MCP Server - Sync your vibe-coded projects for tech stack analysis and learning",
5
+ "type": "module",
6
+ "bin": {
7
+ "vibeuniv-mcp": "dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "scripts": {
11
+ "build": "tsc && chmod 755 dist/index.js",
12
+ "dev": "tsx src/index.ts"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "keywords": [
18
+ "mcp",
19
+ "vibeuniv",
20
+ "vibe-coding",
21
+ "tech-stack",
22
+ "learning"
23
+ ],
24
+ "license": "MIT",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/vibestack/vibestack.git",
28
+ "directory": "packages/mcp-server"
29
+ },
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.12.1",
32
+ "glob": "^11.0.0",
33
+ "zod": "^3.24.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.0.0",
37
+ "tsx": "^4.19.0",
38
+ "typescript": "^5.7.0"
39
+ }
40
+ }