@yumdee/mcp-studio-core 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.
@@ -0,0 +1,155 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Core schemas for MCP Studio
4
+ * These schemas define the contract for:
5
+ * - MCP session recording (every request/response/notification)
6
+ * - Server information and capabilities
7
+ * - Error handling across transports
8
+ */
9
+ // ============================================================================
10
+ // MCP Handshake Schemas
11
+ // ============================================================================
12
+ export const HandshakeRequestSchema = z.object({
13
+ jsonrpc: z.literal("2.0"),
14
+ id: z.number().int(),
15
+ method: z.literal("initialize"),
16
+ params: z.object({
17
+ protocolVersion: z.string(),
18
+ capabilities: z.record(z.unknown()),
19
+ clientInfo: z.object({
20
+ name: z.string(),
21
+ version: z.string(),
22
+ }),
23
+ }),
24
+ });
25
+ export const HandshakeResponseSchema = z.object({
26
+ jsonrpc: z.literal("2.0"),
27
+ id: z.number().int(),
28
+ result: z.object({
29
+ protocolVersion: z.string(),
30
+ capabilities: z.record(z.unknown()),
31
+ serverInfo: z.object({
32
+ name: z.string(),
33
+ version: z.string(),
34
+ }),
35
+ }),
36
+ });
37
+ // ============================================================================
38
+ // Event Schemas (what gets recorded in a session)
39
+ // ============================================================================
40
+ export const McpRequestEventSchema = z.object({
41
+ type: z.literal("request"),
42
+ timestamp: z.string().datetime(),
43
+ id: z.number().int(),
44
+ method: z.string(),
45
+ params: z.unknown().optional(),
46
+ sentAtMs: z.number(), // milliseconds since session start
47
+ });
48
+ export const McpResponseEventSchema = z.object({
49
+ type: z.literal("response"),
50
+ timestamp: z.string().datetime(),
51
+ id: z.number().int(),
52
+ result: z.unknown().optional(),
53
+ error: z
54
+ .object({
55
+ code: z.number(),
56
+ message: z.string(),
57
+ data: z.unknown().optional(),
58
+ })
59
+ .optional(),
60
+ receivedAtMs: z.number(),
61
+ latencyMs: z.number(), // response.receivedAtMs - request.sentAtMs
62
+ });
63
+ export const McpNotificationEventSchema = z.object({
64
+ type: z.literal("notification"),
65
+ timestamp: z.string().datetime(),
66
+ method: z.string(),
67
+ params: z.unknown().optional(),
68
+ sentAtMs: z.number(),
69
+ direction: z.enum(["client->server", "server->client"]),
70
+ });
71
+ export const ErrorEventSchema = z.object({
72
+ type: z.literal("error"),
73
+ timestamp: z.string().datetime(),
74
+ code: z.string(), // e.g., "TRANSPORT_FAILED", "PARSE_ERROR"
75
+ message: z.string(),
76
+ payload: z.unknown().optional(),
77
+ });
78
+ export const McpEventSchema = z.union([
79
+ McpRequestEventSchema,
80
+ McpResponseEventSchema,
81
+ McpNotificationEventSchema,
82
+ ErrorEventSchema,
83
+ ]);
84
+ // ============================================================================
85
+ // Server Info Schemas
86
+ // ============================================================================
87
+ export const ServerInfoSchema = z.object({
88
+ name: z.string(),
89
+ version: z.string(),
90
+ transport: z.enum(["stdio", "sse", "http"]),
91
+ endpoint: z.string().optional(), // for SSE/HTTP
92
+ command: z.string().optional(), // for stdio
93
+ });
94
+ // ============================================================================
95
+ // Tool, Resource, Prompt Definitions
96
+ // ============================================================================
97
+ export const ToolDefinitionSchema = z.object({
98
+ name: z.string(),
99
+ description: z.string().optional(),
100
+ inputSchema: z.record(z.unknown()).optional(),
101
+ });
102
+ export const ResourceDefinitionSchema = z.object({
103
+ uri: z.string(),
104
+ name: z.string().optional(),
105
+ description: z.string().optional(),
106
+ mimeType: z.string().optional(),
107
+ });
108
+ export const PromptDefinitionSchema = z.object({
109
+ name: z.string(),
110
+ description: z.string().optional(),
111
+ arguments: z
112
+ .array(z.object({
113
+ name: z.string(),
114
+ description: z.string().optional(),
115
+ required: z.boolean().optional(),
116
+ }))
117
+ .optional(),
118
+ });
119
+ // ============================================================================
120
+ // Session Schema (the core data structure)
121
+ // ============================================================================
122
+ export const McpSessionSchema = z.object({
123
+ id: z.string().uuid(),
124
+ serverInfo: ServerInfoSchema,
125
+ clientInfo: z.object({
126
+ name: z.literal("yumdee-mcp-studio"),
127
+ version: z.string(),
128
+ }),
129
+ startedAt: z.string().datetime(),
130
+ endedAt: z.string().datetime().optional(),
131
+ events: z.array(McpEventSchema),
132
+ metadata: z
133
+ .object({
134
+ tags: z.array(z.string()).optional(),
135
+ notes: z.string().optional(),
136
+ })
137
+ .passthrough()
138
+ .optional(),
139
+ });
140
+ // ============================================================================
141
+ // Utility Functions
142
+ // ============================================================================
143
+ /**
144
+ * Parse and validate a session from unknown data
145
+ */
146
+ export function parseSession(data) {
147
+ return McpSessionSchema.parse(data);
148
+ }
149
+ /**
150
+ * Parse and validate an event from unknown data
151
+ */
152
+ export function parseEvent(data) {
153
+ return McpEventSchema.parse(data);
154
+ }
155
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Session Storage Implementation
3
+ *
4
+ * Concrete implementations of SessionStorage:
5
+ * - InMemoryStorage (testing & transient dev)
6
+ * - LocalJsonStorage (persistent ~/.mcp-studio/sessions/)
7
+ */
8
+ import { McpSession } from "../schemas/index.js";
9
+ export interface SessionStorage {
10
+ /**
11
+ * Save a session to storage
12
+ * @returns session.id
13
+ */
14
+ save(session: McpSession): Promise<string>;
15
+ /**
16
+ * Load a session by ID
17
+ */
18
+ load(id: string): Promise<McpSession>;
19
+ /**
20
+ * List sessions with optional filtering
21
+ */
22
+ list(filter?: {
23
+ tags?: string[];
24
+ serverName?: string;
25
+ startDate?: Date;
26
+ endDate?: Date;
27
+ }): Promise<McpSession[]>;
28
+ /**
29
+ * Delete a session by ID
30
+ */
31
+ delete(id: string): Promise<void>;
32
+ /**
33
+ * Update a session (metadata, tags, notes)
34
+ */
35
+ update(id: string, updates: Partial<McpSession>): Promise<void>;
36
+ /**
37
+ * Export a session as JSON or JSONL
38
+ */
39
+ export(id: string, format: "json" | "jsonl"): Promise<string>;
40
+ }
41
+ export declare class InMemoryStorage implements SessionStorage {
42
+ private sessions;
43
+ save(session: McpSession): Promise<string>;
44
+ load(id: string): Promise<McpSession>;
45
+ list(filter?: {
46
+ tags?: string[];
47
+ serverName?: string;
48
+ startDate?: Date;
49
+ endDate?: Date;
50
+ }): Promise<McpSession[]>;
51
+ delete(id: string): Promise<void>;
52
+ update(id: string, updates: Partial<McpSession>): Promise<void>;
53
+ export(id: string, format: "json" | "jsonl"): Promise<string>;
54
+ }
55
+ export declare class LocalJsonStorage implements SessionStorage {
56
+ private baseDir;
57
+ private initialized;
58
+ constructor(baseDir?: string);
59
+ private ensureDir;
60
+ private getFilePath;
61
+ save(session: McpSession): Promise<string>;
62
+ load(id: string): Promise<McpSession>;
63
+ list(filter?: {
64
+ tags?: string[];
65
+ serverName?: string;
66
+ startDate?: Date;
67
+ endDate?: Date;
68
+ }): Promise<McpSession[]>;
69
+ delete(id: string): Promise<void>;
70
+ update(id: string, updates: Partial<McpSession>): Promise<void>;
71
+ export(id: string, format: "json" | "jsonl"): Promise<string>;
72
+ }
73
+ export declare class LocalSqliteStorage extends LocalJsonStorage {
74
+ constructor(dbPath?: string);
75
+ }
76
+ export declare function createMemoryStorage(): SessionStorage;
77
+ export declare function createJsonStorage(baseDir?: string): SessionStorage;
78
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Session Storage Implementation
3
+ *
4
+ * Concrete implementations of SessionStorage:
5
+ * - InMemoryStorage (testing & transient dev)
6
+ * - LocalJsonStorage (persistent ~/.mcp-studio/sessions/)
7
+ */
8
+ import { promises as fs } from "fs";
9
+ import * as path from "path";
10
+ import * as os from "os";
11
+ import { parseSession } from "../schemas/index.js";
12
+ // ============================================================================
13
+ // In-Memory Implementation
14
+ // ============================================================================
15
+ export class InMemoryStorage {
16
+ constructor() {
17
+ this.sessions = new Map();
18
+ }
19
+ async save(session) {
20
+ this.sessions.set(session.id, session);
21
+ return session.id;
22
+ }
23
+ async load(id) {
24
+ const session = this.sessions.get(id);
25
+ if (!session) {
26
+ throw new Error(`Session not found: ${id}`);
27
+ }
28
+ return session;
29
+ }
30
+ async list(filter) {
31
+ let results = Array.from(this.sessions.values());
32
+ if (filter?.serverName) {
33
+ results = results.filter((s) => s.serverInfo.name === filter.serverName);
34
+ }
35
+ if (filter?.tags && filter.tags.length > 0) {
36
+ results = results.filter((s) => s.metadata?.tags && filter.tags?.some((tag) => s.metadata?.tags?.includes(tag)));
37
+ }
38
+ if (filter?.startDate) {
39
+ results = results.filter((s) => new Date(s.startedAt) >= filter.startDate);
40
+ }
41
+ if (filter?.endDate) {
42
+ results = results.filter((s) => !s.endedAt || new Date(s.endedAt) <= filter.endDate);
43
+ }
44
+ return results;
45
+ }
46
+ async delete(id) {
47
+ this.sessions.delete(id);
48
+ }
49
+ async update(id, updates) {
50
+ const session = this.sessions.get(id);
51
+ if (!session) {
52
+ throw new Error(`Session not found: ${id}`);
53
+ }
54
+ this.sessions.set(id, { ...session, ...updates });
55
+ }
56
+ async export(id, format) {
57
+ const session = await this.load(id);
58
+ if (format === "json") {
59
+ return JSON.stringify(session, null, 2);
60
+ }
61
+ else if (format === "jsonl") {
62
+ return session.events.map((event) => JSON.stringify(event)).join("\n");
63
+ }
64
+ throw new Error(`Unsupported export format: ${format}`);
65
+ }
66
+ }
67
+ // ============================================================================
68
+ // Local JSON Filesystem Implementation
69
+ // ============================================================================
70
+ export class LocalJsonStorage {
71
+ constructor(baseDir) {
72
+ this.initialized = false;
73
+ if (baseDir) {
74
+ this.baseDir = baseDir.startsWith("~")
75
+ ? path.join(os.homedir(), baseDir.slice(1))
76
+ : path.resolve(baseDir);
77
+ }
78
+ else {
79
+ this.baseDir = path.join(os.homedir(), ".mcp-studio", "sessions");
80
+ }
81
+ }
82
+ async ensureDir() {
83
+ if (!this.initialized) {
84
+ await fs.mkdir(this.baseDir, { recursive: true });
85
+ this.initialized = true;
86
+ }
87
+ }
88
+ getFilePath(id) {
89
+ return path.join(this.baseDir, `${id}.json`);
90
+ }
91
+ async save(session) {
92
+ await this.ensureDir();
93
+ const filePath = this.getFilePath(session.id);
94
+ const tempPath = `${filePath}.tmp.${Date.now()}`;
95
+ const data = JSON.stringify(session, null, 2);
96
+ await fs.writeFile(tempPath, data, "utf8");
97
+ await fs.rename(tempPath, filePath);
98
+ return session.id;
99
+ }
100
+ async load(id) {
101
+ await this.ensureDir();
102
+ const filePath = this.getFilePath(id);
103
+ try {
104
+ const content = await fs.readFile(filePath, "utf8");
105
+ return parseSession(JSON.parse(content));
106
+ }
107
+ catch (err) {
108
+ if (err.code === "ENOENT") {
109
+ throw new Error(`Session not found: ${id}`);
110
+ }
111
+ throw err;
112
+ }
113
+ }
114
+ async list(filter) {
115
+ await this.ensureDir();
116
+ const files = await fs.readdir(this.baseDir);
117
+ const sessions = [];
118
+ for (const file of files) {
119
+ if (!file.endsWith(".json"))
120
+ continue;
121
+ try {
122
+ const filePath = path.join(this.baseDir, file);
123
+ const content = await fs.readFile(filePath, "utf8");
124
+ const session = parseSession(JSON.parse(content));
125
+ let matches = true;
126
+ if (filter?.serverName && session.serverInfo.name !== filter.serverName) {
127
+ matches = false;
128
+ }
129
+ if (filter?.tags && filter.tags.length > 0) {
130
+ const hasTag = session.metadata?.tags?.some((t) => filter.tags?.includes(t));
131
+ if (!hasTag)
132
+ matches = false;
133
+ }
134
+ if (filter?.startDate && new Date(session.startedAt) < filter.startDate) {
135
+ matches = false;
136
+ }
137
+ if (filter?.endDate && session.endedAt && new Date(session.endedAt) > filter.endDate) {
138
+ matches = false;
139
+ }
140
+ if (matches) {
141
+ sessions.push(session);
142
+ }
143
+ }
144
+ catch {
145
+ // Ignore unparseable files
146
+ }
147
+ }
148
+ return sessions.sort((a, b) => new Date(b.startedAt).getTime() - new Date(a.startedAt).getTime());
149
+ }
150
+ async delete(id) {
151
+ await this.ensureDir();
152
+ const filePath = this.getFilePath(id);
153
+ try {
154
+ await fs.unlink(filePath);
155
+ }
156
+ catch (err) {
157
+ if (err.code !== "ENOENT")
158
+ throw err;
159
+ }
160
+ }
161
+ async update(id, updates) {
162
+ const session = await this.load(id);
163
+ const updated = {
164
+ ...session,
165
+ ...updates,
166
+ metadata: {
167
+ ...session.metadata,
168
+ ...updates.metadata,
169
+ },
170
+ };
171
+ await this.save(updated);
172
+ }
173
+ async export(id, format) {
174
+ const session = await this.load(id);
175
+ if (format === "json") {
176
+ return JSON.stringify(session, null, 2);
177
+ }
178
+ else if (format === "jsonl") {
179
+ return session.events.map((event) => JSON.stringify(event)).join("\n");
180
+ }
181
+ throw new Error(`Unsupported export format: ${format}`);
182
+ }
183
+ }
184
+ export class LocalSqliteStorage extends LocalJsonStorage {
185
+ // SQLite compatibility adapter fallback to LocalJsonStorage
186
+ constructor(dbPath) {
187
+ super(dbPath ? path.dirname(dbPath) : undefined);
188
+ }
189
+ }
190
+ // ============================================================================
191
+ // Exports
192
+ // ============================================================================
193
+ export function createMemoryStorage() {
194
+ return new InMemoryStorage();
195
+ }
196
+ export function createJsonStorage(baseDir) {
197
+ return new LocalJsonStorage(baseDir);
198
+ }
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@yumdee/mcp-studio-core",
3
+ "version": "0.1.0",
4
+ "description": "Core session format, MCP client abstraction, and storage interfaces",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./schemas": {
14
+ "import": "./dist/schemas/index.js",
15
+ "types": "./dist/schemas/index.d.ts"
16
+ },
17
+ "./client": {
18
+ "import": "./dist/client/index.js",
19
+ "types": "./dist/client/index.d.ts"
20
+ },
21
+ "./storage": {
22
+ "import": "./dist/storage/index.js",
23
+ "types": "./dist/storage/index.d.ts"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md"
29
+ ],
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/maheshsingh20/YumDee-MCP-Studio.git",
36
+ "directory": "packages/core"
37
+ },
38
+ "author": "Mahesh Singh <maheshsingh20>",
39
+ "license": "MIT",
40
+ "keywords": [
41
+ "mcp",
42
+ "model-context-protocol",
43
+ "agent",
44
+ "ai",
45
+ "llm",
46
+ "sessions",
47
+ "mcp-studio"
48
+ ],
49
+ "dependencies": {
50
+ "zod": "^3.22.0"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^20.0.0",
54
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
55
+ "@typescript-eslint/parser": "^7.0.0",
56
+ "eslint": "^8.0.0",
57
+ "typescript": "^5.3.0",
58
+ "vitest": "^1.0.0"
59
+ },
60
+ "scripts": {
61
+ "dev": "tsc --watch --incremental",
62
+ "build": "tsc",
63
+ "type-check": "tsc --noEmit",
64
+ "lint": "eslint src/",
65
+ "test": "vitest run"
66
+ }
67
+ }