toonify-mcp 0.3.1 → 0.4.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/README.md +30 -0
- package/dist/optimizer/caching/cache-types.d.ts +34 -0
- package/dist/optimizer/caching/cache-types.d.ts.map +1 -1
- package/dist/optimizer/caching/index.d.ts +2 -0
- package/dist/optimizer/caching/index.d.ts.map +1 -1
- package/dist/optimizer/caching/index.js +2 -0
- package/dist/optimizer/caching/index.js.map +1 -1
- package/dist/optimizer/caching/lru-cache.d.ts +70 -0
- package/dist/optimizer/caching/lru-cache.d.ts.map +1 -0
- package/dist/optimizer/caching/lru-cache.js +230 -0
- package/dist/optimizer/caching/lru-cache.js.map +1 -0
- package/dist/optimizer/caching/persistent-cache.d.ts +82 -0
- package/dist/optimizer/caching/persistent-cache.d.ts.map +1 -0
- package/dist/optimizer/caching/persistent-cache.js +237 -0
- package/dist/optimizer/caching/persistent-cache.js.map +1 -0
- package/dist/optimizer/token-optimizer.d.ts +31 -1
- package/dist/optimizer/token-optimizer.d.ts.map +1 -1
- package/dist/optimizer/token-optimizer.js +100 -5
- package/dist/optimizer/token-optimizer.js.map +1 -1
- package/dist/optimizer/types.d.ts +3 -2
- package/dist/optimizer/types.d.ts.map +1 -1
- package/dist/server/mcp-server.d.ts +8 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +112 -40
- package/dist/server/mcp-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -53,55 +53,127 @@ export class ToonifyMCPServer {
|
|
|
53
53
|
properties: {},
|
|
54
54
|
},
|
|
55
55
|
},
|
|
56
|
+
{
|
|
57
|
+
name: 'clear_cache',
|
|
58
|
+
description: 'Clear the optimization result cache',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'get_cache_stats',
|
|
66
|
+
description: 'Get detailed cache statistics (LRU cache + Prompt cache)',
|
|
67
|
+
inputSchema: {
|
|
68
|
+
type: 'object',
|
|
69
|
+
properties: {},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'cleanup_expired_cache',
|
|
74
|
+
description: 'Clean up expired cache entries and return the number of entries removed',
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
56
80
|
],
|
|
57
81
|
}));
|
|
58
82
|
// Handle tool calls
|
|
59
83
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
60
84
|
const { name, arguments: args } = request.params;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
85
|
+
try {
|
|
86
|
+
switch (name) {
|
|
87
|
+
case 'optimize_content': {
|
|
88
|
+
const { content, toolName } = args;
|
|
89
|
+
// Validate input
|
|
90
|
+
if (!content || typeof content !== 'string') {
|
|
91
|
+
return this.formatErrorResponse('INVALID_INPUT', 'content must be a non-empty string');
|
|
92
|
+
}
|
|
93
|
+
const result = await this.optimizer.optimize(content, {
|
|
94
|
+
toolName: toolName || 'unknown',
|
|
95
|
+
size: content.length,
|
|
96
|
+
});
|
|
97
|
+
// Record metrics
|
|
98
|
+
await this.metrics.record({
|
|
99
|
+
timestamp: new Date().toISOString(),
|
|
100
|
+
toolName: toolName || 'unknown',
|
|
101
|
+
originalTokens: result.originalTokens,
|
|
102
|
+
optimizedTokens: result.optimizedTokens || result.originalTokens,
|
|
103
|
+
savings: result.savings?.tokens || 0,
|
|
104
|
+
savingsPercentage: result.savings?.percentage || 0,
|
|
105
|
+
wasOptimized: result.optimized,
|
|
106
|
+
format: result.format,
|
|
107
|
+
reason: result.reason,
|
|
108
|
+
});
|
|
109
|
+
return this.formatSuccessResponse(result, 'Content optimization completed');
|
|
110
|
+
}
|
|
111
|
+
case 'get_stats': {
|
|
112
|
+
const stats = await this.metrics.getStats();
|
|
113
|
+
return this.formatSuccessResponse(stats, 'Statistics retrieved successfully');
|
|
114
|
+
}
|
|
115
|
+
case 'clear_cache': {
|
|
116
|
+
this.optimizer.clearResultCache();
|
|
117
|
+
return this.formatSuccessResponse({ cleared: true }, 'Cache cleared successfully');
|
|
118
|
+
}
|
|
119
|
+
case 'get_cache_stats': {
|
|
120
|
+
const cacheStats = this.optimizer.getCacheStats();
|
|
121
|
+
return this.formatSuccessResponse(cacheStats, 'Cache statistics retrieved successfully');
|
|
122
|
+
}
|
|
123
|
+
case 'cleanup_expired_cache': {
|
|
124
|
+
const removedCount = this.optimizer.cleanupExpiredCache();
|
|
125
|
+
return this.formatSuccessResponse({ removedEntries: removedCount }, `Cleaned up ${removedCount} expired cache entries`);
|
|
126
|
+
}
|
|
127
|
+
default:
|
|
128
|
+
return this.formatErrorResponse('UNKNOWN_TOOL', `Unknown tool: ${name}`);
|
|
99
129
|
}
|
|
100
|
-
|
|
101
|
-
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Catch any unhandled errors
|
|
133
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
134
|
+
const errorCode = error instanceof Error && error.name ? error.name : 'INTERNAL_ERROR';
|
|
135
|
+
console.error(`[ToonifyMCPServer] Error in tool ${name}:`, error);
|
|
136
|
+
return this.formatErrorResponse(errorCode, errorMessage);
|
|
102
137
|
}
|
|
103
138
|
});
|
|
104
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Format successful response in standardized format
|
|
142
|
+
*/
|
|
143
|
+
formatSuccessResponse(data, message) {
|
|
144
|
+
return {
|
|
145
|
+
content: [
|
|
146
|
+
{
|
|
147
|
+
type: 'text',
|
|
148
|
+
text: JSON.stringify({
|
|
149
|
+
success: true,
|
|
150
|
+
data,
|
|
151
|
+
message,
|
|
152
|
+
}, null, 2),
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Format error response in standardized format
|
|
159
|
+
*/
|
|
160
|
+
formatErrorResponse(code, message) {
|
|
161
|
+
return {
|
|
162
|
+
content: [
|
|
163
|
+
{
|
|
164
|
+
type: 'text',
|
|
165
|
+
text: JSON.stringify({
|
|
166
|
+
success: false,
|
|
167
|
+
error: {
|
|
168
|
+
code,
|
|
169
|
+
message,
|
|
170
|
+
},
|
|
171
|
+
}, null, 2),
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
isError: true,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
105
177
|
async start() {
|
|
106
178
|
const transport = new StdioServerTransport();
|
|
107
179
|
await this.server.connect(transport);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAS;IACf,SAAS,CAAiB;IAC1B,OAAO,CAAmB;IAElC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,kBAAkB;oBACxB,WAAW,EAAE,yEAAyE;oBACtF,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,OAAO,EAAE;gCACP,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8CAA8C;6BAC5D;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8CAA8C;6BAC5D;yBACF;wBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;qBACtB;iBACF;gBACD;oBACE,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,mCAAmC;oBAChD,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;qBACf;iBACF;aACF;SACF,CAAC,CAAC,CAAC;QAEJ,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,QAAQ,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAS;IACf,SAAS,CAAiB;IAC1B,OAAO,CAAmB;IAElC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,kBAAkB;oBACxB,WAAW,EAAE,yEAAyE;oBACtF,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,OAAO,EAAE;gCACP,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8CAA8C;6BAC5D;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8CAA8C;6BAC5D;yBACF;wBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;qBACtB;iBACF;gBACD;oBACE,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,mCAAmC;oBAChD,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;qBACf;iBACF;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,qCAAqC;oBAClD,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;qBACf;iBACF;gBACD;oBACE,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,0DAA0D;oBACvE,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;qBACf;iBACF;gBACD;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,WAAW,EAAE,yEAAyE;oBACtF,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;qBACf;iBACF;aACF;SACF,CAAC,CAAC,CAAC;QAEJ,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,kBAAkB,CAAC,CAAC,CAAC;wBACxB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAG7B,CAAC;wBAEF,iBAAiB;wBACjB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;4BAC5C,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,oCAAoC,CAAC,CAAC;wBACzF,CAAC;wBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;4BACpD,QAAQ,EAAE,QAAQ,IAAI,SAAS;4BAC/B,IAAI,EAAE,OAAO,CAAC,MAAM;yBACrB,CAAC,CAAC;wBAEH,iBAAiB;wBACjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;4BACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACnC,QAAQ,EAAE,QAAQ,IAAI,SAAS;4BAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;4BACrC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,cAAc;4BAChE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;4BACpC,iBAAiB,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC;4BAClD,YAAY,EAAE,MAAM,CAAC,SAAS;4BAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,MAAM,EAAE,MAAM,CAAC,MAAM;yBACtB,CAAC,CAAC;wBAEH,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;oBAC9E,CAAC;oBAED,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;wBAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;oBAChF,CAAC;oBAED,KAAK,aAAa,CAAC,CAAC,CAAC;wBACnB,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;wBAClC,OAAO,IAAI,CAAC,qBAAqB,CAC/B,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,4BAA4B,CAC7B,CAAC;oBACJ,CAAC;oBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;wBAClD,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,yCAAyC,CAAC,CAAC;oBAC3F,CAAC;oBAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;wBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;wBAC1D,OAAO,IAAI,CAAC,qBAAqB,CAC/B,EAAE,cAAc,EAAE,YAAY,EAAE,EAChC,cAAc,YAAY,wBAAwB,CACnD,CAAC;oBACJ,CAAC;oBAED;wBACE,OAAO,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,iBAAiB,IAAI,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,6BAA6B;gBAC7B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;gBACvF,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAEvF,OAAO,CAAC,KAAK,CAAC,oCAAoC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAS,EAAE,OAAgB;QACvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,IAAI;wBACb,IAAI;wBACJ,OAAO;qBACR,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,OAAe;QACvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE;4BACL,IAAI;4BACJ,OAAO;yBACR;qBACF,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAErC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACvD,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "toonify-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "MCP server + Claude Code Plugin for TOON format token optimization. Reduces token usage by 30-65% (typically 50-55%) on JSON/CSV/YAML data via multilingual-aware optimization.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|