@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.
- package/LICENSE +23 -0
- package/dist/__tests__/core.test.d.ts +2 -0
- package/dist/__tests__/core.test.d.ts.map +1 -0
- package/dist/__tests__/core.test.js +80 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/__tests__/stdio.test.d.ts +2 -0
- package/dist/__tests__/stdio.test.d.ts.map +1 -0
- package/dist/__tests__/stdio.test.js +37 -0
- package/dist/__tests__/stdio.test.js.map +1 -0
- package/dist/client/index.d.ts +97 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +570 -0
- package/dist/client/index.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +687 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +155 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/storage/index.d.ts +78 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +199 -0
- package/dist/storage/index.js.map +1 -0
- package/package.json +67 -0
|
@@ -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
|
+
}
|