@orchyn/mcp 1.12.2 → 1.12.3
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/dist/shared/tools.js +1 -1
- package/dist/shared/ui-template.js +84 -14
- package/package.json +1 -1
package/dist/shared/tools.js
CHANGED
|
@@ -11,7 +11,7 @@ import { OrchynError } from "./orchyn.js";
|
|
|
11
11
|
import { formatPaywallError, runVideoAnalysis, validatePostUrl } from "./video.js";
|
|
12
12
|
import { ORCHYN_UI_TEMPLATE } from "./ui-template.js";
|
|
13
13
|
/** Current MCP server version — bumped on every deploy for traceability. */
|
|
14
|
-
export const MCP_SERVER_VERSION = "1.12.
|
|
14
|
+
export const MCP_SERVER_VERSION = "1.12.2";
|
|
15
15
|
/** MCP Apps extension identifier */
|
|
16
16
|
const UI_EXTENSION = "io.modelcontextprotocol/ui";
|
|
17
17
|
/** MIME type for MCP Apps HTML resources */
|
|
@@ -36,10 +36,13 @@ export const ORCHYN_UI_TEMPLATE = `<!DOCTYPE html>
|
|
|
36
36
|
body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--bg);color:var(--fg);padding:16px;line-height:1.5;}
|
|
37
37
|
|
|
38
38
|
/* ─── Loading / Skeleton ─── */
|
|
39
|
-
.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:
|
|
40
|
-
.
|
|
39
|
+
.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:12px;}
|
|
40
|
+
.orchyn-logo{animation:logoSpin 3s ease-in-out infinite;}
|
|
41
|
+
@keyframes logoSpin{0%,100%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(1.1)}}
|
|
42
|
+
.loading-brand{font-size:18px;font-weight:700;letter-spacing:-0.02em;color:var(--fg);}
|
|
43
|
+
.loading-spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;}
|
|
41
44
|
@keyframes spin{to{transform:rotate(360deg)}}
|
|
42
|
-
.loading-text{font-size:
|
|
45
|
+
.loading-text{font-size:13px;color:var(--muted);animation:pulse 1.5s ease-in-out infinite;}
|
|
43
46
|
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}
|
|
44
47
|
|
|
45
48
|
.skeleton{background:var(--tag);border-radius:var(--radius-sm);overflow:hidden;position:relative;}
|
|
@@ -165,14 +168,30 @@ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--
|
|
|
165
168
|
<body>
|
|
166
169
|
<div id="app">
|
|
167
170
|
<div class="loading-container">
|
|
168
|
-
<div class="
|
|
169
|
-
|
|
171
|
+
<div class="orchyn-logo">
|
|
172
|
+
<svg width="40" height="40" viewBox="0 0 48 48" fill="none">
|
|
173
|
+
<g fill="var(--accent)" transform="translate(24 24)">
|
|
174
|
+
<circle r="4.1"/>
|
|
175
|
+
<g id="r"><path d="M-2.85 -5.2 L0 -20.6 L2.85 -5.2 L1.15 1.1 L-1.15 1.1 Z"/></g>
|
|
176
|
+
<use href="#r" transform="rotate(45)"/>
|
|
177
|
+
<use href="#r" transform="rotate(90)"/>
|
|
178
|
+
<use href="#r" transform="rotate(135)"/>
|
|
179
|
+
<use href="#r" transform="rotate(180)"/>
|
|
180
|
+
<use href="#r" transform="rotate(225)"/>
|
|
181
|
+
<use href="#r" transform="rotate(270)"/>
|
|
182
|
+
<use href="#r" transform="rotate(315)"/>
|
|
183
|
+
</g>
|
|
184
|
+
</svg>
|
|
185
|
+
</div>
|
|
186
|
+
<div class="loading-brand">Orchyn</div>
|
|
187
|
+
<div class="loading-text">Analyzing…</div>
|
|
170
188
|
</div>
|
|
171
189
|
</div>
|
|
172
190
|
<script>
|
|
173
191
|
(function(){
|
|
174
192
|
var nextId=1;var pending=new Map();
|
|
175
193
|
var loadingTimer=null;
|
|
194
|
+
var currentTool="";
|
|
176
195
|
|
|
177
196
|
function send(method,params){
|
|
178
197
|
var id=nextId++;
|
|
@@ -197,6 +216,7 @@ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--
|
|
|
197
216
|
render(d.params);
|
|
198
217
|
}
|
|
199
218
|
if(d.method==="ui/notifications/tool-input-partial"){
|
|
219
|
+
currentTool=d.params&&d.params.name?d.params.name:"";
|
|
200
220
|
updateProgress(d.params);
|
|
201
221
|
}
|
|
202
222
|
});
|
|
@@ -204,7 +224,7 @@ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--
|
|
|
204
224
|
// Show skeleton after 300ms of waiting (feels instant but shows loading for slow tools)
|
|
205
225
|
loadingTimer=setTimeout(function(){
|
|
206
226
|
var app=document.getElementById("app");
|
|
207
|
-
if(app)app.innerHTML=renderSkeleton();
|
|
227
|
+
if(app)app.innerHTML=renderSkeleton(currentTool);
|
|
208
228
|
},300);
|
|
209
229
|
|
|
210
230
|
// Fallback: if no tool-result arrives within 3s, check if data is embedded
|
|
@@ -228,11 +248,12 @@ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--
|
|
|
228
248
|
if(decoded&&typeof decoded==="object"){render(decoded);return;}
|
|
229
249
|
}
|
|
230
250
|
}catch(e){}
|
|
231
|
-
// Last resort: show a
|
|
251
|
+
// Last resort: show a branded card indicating results are available
|
|
232
252
|
var app=document.getElementById("app");
|
|
233
|
-
if(app)app.innerHTML='<div class="card card-wide fade-in"><div class="card-body">'
|
|
234
|
-
+'<
|
|
235
|
-
+'<div style="font-size:
|
|
253
|
+
if(app)app.innerHTML='<div class="card card-wide fade-in"><div class="card-body" style="text-align:center;padding:24px">'
|
|
254
|
+
+'<svg width="28" height="28" viewBox="0 0 48 48" fill="none" style="margin-bottom:8px"><g fill="var(--accent)" transform="translate(24 24)"><circle r="4.1"/><g id="rf"><path d="M-2.85 -5.2 L0 -20.6 L2.85 -5.2 L1.15 1.1 L-1.15 1.1 Z"/></g><use href="#rf" transform="rotate(45)"/><use href="#rf" transform="rotate(90)"/><use href="#rf" transform="rotate(135)"/><use href="#rf" transform="rotate(180)"/><use href="#rf" transform="rotate(225)"/><use href="#rf" transform="rotate(270)"/><use href="#rf" transform="rotate(315)"/></g></svg>'
|
|
255
|
+
+'<div style="font-size:14px;font-weight:600;margin-bottom:4px">✅ Results ready</div>'
|
|
256
|
+
+'<div style="font-size:12px;color:var(--muted)">Orchyn analysis complete — see the full response in the chat.</div>'
|
|
236
257
|
+'</div></div>';
|
|
237
258
|
},3000);
|
|
238
259
|
|
|
@@ -256,9 +277,46 @@ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--
|
|
|
256
277
|
}
|
|
257
278
|
|
|
258
279
|
// ─── Skeleton ───
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
280
|
+
// Tools that analyze/fetch a single URL: show 1 wide card skeleton
|
|
281
|
+
var SINGLE_URL_TOOLS={analyze_post:1,get_social_media:1,understand_social_post:1,get_post_comments:1,analyze_creator_profile:1};
|
|
282
|
+
// Tools that return galleries: show multiple small card skeletons
|
|
283
|
+
var GALLERY_TOOLS={discover_social_posts:1,get_user_posts:1,search_creators:1,get_similar_creators:1,discover_sounds:1};
|
|
284
|
+
// Tools that return credits/checkout: show 1 credit card skeleton
|
|
285
|
+
var CREDIT_TOOLS={check_orchyn_credits:1,buy_orchyn_credits:1};
|
|
286
|
+
|
|
287
|
+
function renderSkeleton(toolName){
|
|
288
|
+
// Branded header above skeletons
|
|
289
|
+
var brandHeader='<div style="display:flex;align-items:center;gap:8px;margin-bottom:14px;justify-content:center">'
|
|
290
|
+
+'<svg width="20" height="20" viewBox="0 0 48 48" fill="none"><g fill="var(--accent)" transform="translate(24 24)"><circle r="4.1"/><g id="sb"><path d="M-2.85 -5.2 L0 -20.6 L2.85 -5.2 L1.15 1.1 L-1.15 1.1 Z"/></g><use href="#sb" transform="rotate(45)"/><use href="#sb" transform="rotate(90)"/><use href="#sb" transform="rotate(135)"/><use href="#sb" transform="rotate(180)"/><use href="#sb" transform="rotate(225)"/><use href="#sb" transform="rotate(270)"/><use href="#sb" transform="rotate(315)"/></g></svg>'
|
|
291
|
+
+'<span style="font-size:13px;font-weight:600;color:var(--muted)">Orchyn</span></div>';
|
|
292
|
+
// Single URL tools → 1 wide card skeleton
|
|
293
|
+
if(SINGLE_URL_TOOLS[toolName]){
|
|
294
|
+
return brandHeader+'<div class="fade-in" style="max-width:520px">'
|
|
295
|
+
+'<div class="skeleton-card" style="width:100%">'
|
|
296
|
+
+'<div class="skeleton skeleton-thumb" style="height:220px"></div>'
|
|
297
|
+
+'<div style="padding:14px 16px">'
|
|
298
|
+
+'<div class="skeleton skeleton-badge"></div>'
|
|
299
|
+
+'<div class="skeleton skeleton-line" style="width:90%"></div>'
|
|
300
|
+
+'<div class="skeleton skeleton-line medium"></div>'
|
|
301
|
+
+'<div style="display:flex;gap:6px;margin-top:10px">'
|
|
302
|
+
+'<div class="skeleton" style="width:70px;height:28px;border-radius:999px"></div>'
|
|
303
|
+
+'<div class="skeleton" style="width:60px;height:28px;border-radius:999px"></div>'
|
|
304
|
+
+'<div class="skeleton" style="width:65px;height:28px;border-radius:999px"></div>'
|
|
305
|
+
+'</div></div></div></div>';
|
|
306
|
+
}
|
|
307
|
+
// Credit tools → credit card skeleton
|
|
308
|
+
if(CREDIT_TOOLS[toolName]){
|
|
309
|
+
return brandHeader+'<div class="fade-in" style="max-width:380px">'
|
|
310
|
+
+'<div class="credits-card" style="margin:0">'
|
|
311
|
+
+'<div class="skeleton" style="width:120px;height:20px;margin-bottom:14px"></div>'
|
|
312
|
+
+'<div class="skeleton" style="width:80px;height:40px;margin-bottom:8px"></div>'
|
|
313
|
+
+'<div class="skeleton" style="width:140px;height:14px"></div>'
|
|
314
|
+
+'</div></div>';
|
|
315
|
+
}
|
|
316
|
+
// Gallery tools → multiple small card skeletons (default)
|
|
317
|
+
var count=toolName==='discover_sounds'?4:toolName==='search_creators'||toolName==='get_similar_creators'?3:6;
|
|
318
|
+
return brandHeader+'<div class="skeleton-gallery stagger">'
|
|
319
|
+
+Array(count).fill(0).map(function(){
|
|
262
320
|
return '<div class="skeleton-card">'
|
|
263
321
|
+'<div class="skeleton skeleton-thumb"></div>'
|
|
264
322
|
+'<div class="skeleton skeleton-badge"></div>'
|
|
@@ -436,9 +494,21 @@ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:var(--
|
|
|
436
494
|
function updateProgress(params){
|
|
437
495
|
var app=document.getElementById("app");
|
|
438
496
|
if(!app)return;
|
|
497
|
+
// If we just learned the tool name and the current skeleton is wrong,
|
|
498
|
+
// re-render with the correct skeleton type
|
|
499
|
+
var toolName=params&¶ms.name?params.name:currentTool;
|
|
500
|
+
if(toolName&&toolName!==currentTool){
|
|
501
|
+
currentTool=toolName;
|
|
502
|
+
// Only re-render skeleton if we're still in loading state (no result yet)
|
|
503
|
+
var el=document.getElementById("app");
|
|
504
|
+
if(el&&(el.querySelector(".loading-spinner")||el.querySelector(".skeleton"))){
|
|
505
|
+
el.innerHTML=renderSkeleton(currentTool);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
439
508
|
var text=params&¶ms.arguments?JSON.stringify(params.arguments):"Processing…";
|
|
440
509
|
app.innerHTML='<div class="loading-container fade-in">'
|
|
441
|
-
+'<div class="
|
|
510
|
+
+'<div class="orchyn-logo"><svg width="36" height="36" viewBox="0 0 48 48" fill="none"><g fill="var(--accent)" transform="translate(24 24)"><circle r="4.1"/><g id="rp"><path d="M-2.85 -5.2 L0 -20.6 L2.85 -5.2 L1.15 1.1 L-1.15 1.1 Z"/></g><use href="#rp" transform="rotate(45)"/><use href="#rp" transform="rotate(90)"/><use href="#rp" transform="rotate(135)"/><use href="#rp" transform="rotate(180)"/><use href="#rp" transform="rotate(225)"/><use href="#rp" transform="rotate(270)"/><use href="#rp" transform="rotate(315)"/></g></svg></div>'
|
|
511
|
+
+'<div class="loading-brand">Orchyn</div>'
|
|
442
512
|
+'<div class="loading-text">'+esc(text.length>80?text.slice(0,80)+"…":text)+'</div>'
|
|
443
513
|
+'<div class="progress-bar" style="width:200px"><div class="progress-fill" style="width:60%"></div></div>'
|
|
444
514
|
+'</div>';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orchyn/mcp",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.3",
|
|
4
4
|
"description": "MCP server for orchyn - fetch, discover and understand TikTok/Instagram/YouTube/X posts with AI (media metadata, niche discovery, hook & viral analysis)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|