@withpica/mcp-server 2.5.2 → 2.6.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/assets/fonts/GeistSans-Light.woff2 +0 -0
- package/assets/fonts/InstrumentSerif-Italic.woff2 +0 -0
- package/assets/fonts/InstrumentSerif-Regular.woff2 +0 -0
- package/dist/apps/download.d.ts +2 -0
- package/dist/apps/download.d.ts.map +1 -0
- package/dist/apps/download.js +125 -0
- package/dist/apps/download.js.map +1 -0
- package/dist/apps/generated/shared-bundle.d.ts +5 -0
- package/dist/apps/generated/shared-bundle.d.ts.map +1 -0
- package/dist/apps/generated/shared-bundle.js +7 -0
- package/dist/apps/generated/shared-bundle.js.map +1 -0
- package/dist/apps/shared.d.ts +15 -0
- package/dist/apps/shared.d.ts.map +1 -0
- package/dist/apps/shared.js +480 -0
- package/dist/apps/shared.js.map +1 -0
- package/dist/apps/upload.d.ts +2 -0
- package/dist/apps/upload.d.ts.map +1 -0
- package/dist/apps/upload.js +280 -0
- package/dist/apps/upload.js.map +1 -0
- package/dist/config.d.ts +4 -25
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -12
- package/dist/config.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/prompts/index.js +24 -24
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/index.d.ts +4 -2
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +133 -54
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/llms-primer.d.ts +1 -1
- package/dist/resources/llms-primer.d.ts.map +1 -1
- package/dist/resources/llms-primer.js +4 -4
- package/dist/server-instructions.d.ts +9 -0
- package/dist/server-instructions.d.ts.map +1 -0
- package/dist/server-instructions.js +34 -0
- package/dist/server-instructions.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +46 -12
- package/dist/server.js.map +1 -1
- package/dist/tools/agreement-types.d.ts +10 -20
- package/dist/tools/agreement-types.d.ts.map +1 -1
- package/dist/tools/agreement-types.js +203 -419
- package/dist/tools/agreement-types.js.map +1 -1
- package/dist/tools/agreements.d.ts +3 -4
- package/dist/tools/agreements.d.ts.map +1 -1
- package/dist/tools/agreements.js +72 -52
- package/dist/tools/agreements.js.map +1 -1
- package/dist/tools/analytics.d.ts +1 -1
- package/dist/tools/analytics.d.ts.map +1 -1
- package/dist/tools/analytics.js +1 -1
- package/dist/tools/analytics.js.map +1 -1
- package/dist/tools/app-tools.d.ts +21 -0
- package/dist/tools/app-tools.d.ts.map +1 -0
- package/dist/tools/app-tools.js +248 -0
- package/dist/tools/app-tools.js.map +1 -0
- package/dist/tools/assets.d.ts +2 -4
- package/dist/tools/assets.d.ts.map +1 -1
- package/dist/tools/assets.js +278 -59
- package/dist/tools/assets.js.map +1 -1
- package/dist/tools/audio-files.d.ts +3 -4
- package/dist/tools/audio-files.d.ts.map +1 -1
- package/dist/tools/audio-files.js +63 -35
- package/dist/tools/audio-files.js.map +1 -1
- package/dist/tools/auth.d.ts +20 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +200 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/bulk.d.ts +1 -1
- package/dist/tools/bulk.d.ts.map +1 -1
- package/dist/tools/bulk.js +1 -1
- package/dist/tools/bulk.js.map +1 -1
- package/dist/tools/calendar.d.ts +1 -1
- package/dist/tools/calendar.d.ts.map +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/collaborators.d.ts +1 -1
- package/dist/tools/collaborators.d.ts.map +1 -1
- package/dist/tools/collaborators.js +2 -2
- package/dist/tools/collaborators.js.map +1 -1
- package/dist/tools/comparisons.d.ts +1 -1
- package/dist/tools/comparisons.d.ts.map +1 -1
- package/dist/tools/comparisons.js +1 -1
- package/dist/tools/comparisons.js.map +1 -1
- package/dist/tools/credits.d.ts +1 -1
- package/dist/tools/credits.d.ts.map +1 -1
- package/dist/tools/credits.js +130 -20
- package/dist/tools/credits.js.map +1 -1
- package/dist/tools/dashboard.d.ts +2 -3
- package/dist/tools/dashboard.d.ts.map +1 -1
- package/dist/tools/dashboard.js +20 -28
- package/dist/tools/dashboard.js.map +1 -1
- package/dist/tools/directory.d.ts +1 -1
- package/dist/tools/directory.d.ts.map +1 -1
- package/dist/tools/directory.js +1 -1
- package/dist/tools/directory.js.map +1 -1
- package/dist/tools/discovery.d.ts +28 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +560 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/disputes.d.ts +1 -1
- package/dist/tools/disputes.d.ts.map +1 -1
- package/dist/tools/disputes.js +1 -1
- package/dist/tools/disputes.js.map +1 -1
- package/dist/tools/documents.d.ts +1 -1
- package/dist/tools/documents.d.ts.map +1 -1
- package/dist/tools/documents.js +1 -1
- package/dist/tools/documents.js.map +1 -1
- package/dist/tools/duplicates.d.ts +1 -1
- package/dist/tools/duplicates.d.ts.map +1 -1
- package/dist/tools/duplicates.js +18 -1
- package/dist/tools/duplicates.js.map +1 -1
- package/dist/tools/enrichment.d.ts +1 -4
- package/dist/tools/enrichment.d.ts.map +1 -1
- package/dist/tools/enrichment.js +19 -122
- package/dist/tools/enrichment.js.map +1 -1
- package/dist/tools/exports.d.ts +1 -1
- package/dist/tools/exports.d.ts.map +1 -1
- package/dist/tools/exports.js +2 -2
- package/dist/tools/exports.js.map +1 -1
- package/dist/tools/import-documents.d.ts +4 -4
- package/dist/tools/import-documents.d.ts.map +1 -1
- package/dist/tools/import-documents.js +65 -51
- package/dist/tools/import-documents.js.map +1 -1
- package/dist/tools/import.d.ts +2 -1
- package/dist/tools/import.d.ts.map +1 -1
- package/dist/tools/import.js +64 -2
- package/dist/tools/import.js.map +1 -1
- package/dist/tools/index.d.ts +50 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +440 -84
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/integrations.d.ts +1 -1
- package/dist/tools/integrations.d.ts.map +1 -1
- package/dist/tools/integrations.js +1 -1
- package/dist/tools/integrations.js.map +1 -1
- package/dist/tools/licensing.d.ts +1 -1
- package/dist/tools/licensing.d.ts.map +1 -1
- package/dist/tools/licensing.js +1 -1
- package/dist/tools/licensing.js.map +1 -1
- package/dist/tools/memory.d.ts +1 -1
- package/dist/tools/memory.d.ts.map +1 -1
- package/dist/tools/memory.js +1 -1
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/metadata.d.ts +15 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +1069 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/multimedia.d.ts +1 -1
- package/dist/tools/multimedia.d.ts.map +1 -1
- package/dist/tools/multimedia.js +1 -1
- package/dist/tools/multimedia.js.map +1 -1
- package/dist/tools/notes.d.ts +1 -1
- package/dist/tools/notes.d.ts.map +1 -1
- package/dist/tools/notes.js +1 -1
- package/dist/tools/notes.js.map +1 -1
- package/dist/tools/notifications.d.ts +1 -1
- package/dist/tools/notifications.d.ts.map +1 -1
- package/dist/tools/notifications.js +1 -1
- package/dist/tools/notifications.js.map +1 -1
- package/dist/tools/people.d.ts +5 -13
- package/dist/tools/people.d.ts.map +1 -1
- package/dist/tools/people.js +148 -109
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/projects.d.ts +1 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +1 -1
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/publishers.d.ts +16 -0
- package/dist/tools/publishers.d.ts.map +1 -0
- package/dist/tools/publishers.js +69 -0
- package/dist/tools/publishers.js.map +1 -0
- package/dist/tools/purchases.d.ts +1 -1
- package/dist/tools/purchases.d.ts.map +1 -1
- package/dist/tools/purchases.js +1 -1
- package/dist/tools/purchases.js.map +1 -1
- package/dist/tools/recordings.d.ts +9 -9
- package/dist/tools/recordings.d.ts.map +1 -1
- package/dist/tools/recordings.js +121 -48
- package/dist/tools/recordings.js.map +1 -1
- package/dist/tools/recovery-hints.d.ts +14 -0
- package/dist/tools/recovery-hints.d.ts.map +1 -0
- package/dist/tools/recovery-hints.js +277 -0
- package/dist/tools/recovery-hints.js.map +1 -0
- package/dist/tools/releases.d.ts +1 -1
- package/dist/tools/releases.d.ts.map +1 -1
- package/dist/tools/releases.js +1 -1
- package/dist/tools/releases.js.map +1 -1
- package/dist/tools/royalties.d.ts +1 -1
- package/dist/tools/royalties.d.ts.map +1 -1
- package/dist/tools/royalties.js +2 -2
- package/dist/tools/royalties.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +3 -3
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/send.d.ts +2 -3
- package/dist/tools/send.d.ts.map +1 -1
- package/dist/tools/send.js +20 -28
- package/dist/tools/send.js.map +1 -1
- package/dist/tools/sessions.d.ts +1 -1
- package/dist/tools/sessions.d.ts.map +1 -1
- package/dist/tools/sessions.js +1 -1
- package/dist/tools/sessions.js.map +1 -1
- package/dist/tools/settings.d.ts +1 -1
- package/dist/tools/settings.d.ts.map +1 -1
- package/dist/tools/settings.js +1 -1
- package/dist/tools/settings.js.map +1 -1
- package/dist/tools/share-links.d.ts +1 -1
- package/dist/tools/share-links.d.ts.map +1 -1
- package/dist/tools/share-links.js +1 -1
- package/dist/tools/share-links.js.map +1 -1
- package/dist/tools/split-sheets.d.ts +1 -1
- package/dist/tools/split-sheets.d.ts.map +1 -1
- package/dist/tools/split-sheets.js +13 -1
- package/dist/tools/split-sheets.js.map +1 -1
- package/dist/tools/team.d.ts +1 -1
- package/dist/tools/team.d.ts.map +1 -1
- package/dist/tools/team.js +1 -1
- package/dist/tools/team.js.map +1 -1
- package/dist/tools/telegram.d.ts +1 -1
- package/dist/tools/telegram.d.ts.map +1 -1
- package/dist/tools/telegram.js +1 -1
- package/dist/tools/telegram.js.map +1 -1
- package/dist/tools/uploads.d.ts +1 -1
- package/dist/tools/uploads.d.ts.map +1 -1
- package/dist/tools/uploads.js +1 -1
- package/dist/tools/uploads.js.map +1 -1
- package/dist/tools/works.d.ts +5 -13
- package/dist/tools/works.d.ts.map +1 -1
- package/dist/tools/works.js +201 -116
- package/dist/tools/works.js.map +1 -1
- package/package.json +5 -1
- package/scripts/bundle-apps.ts +61 -0
- package/.mcpregistry_github_token +0 -1
- package/.mcpregistry_registry_token +0 -1
- package/dist/pica-sdk.d.ts +0 -1170
- package/dist/pica-sdk.d.ts.map +0 -1
- package/dist/pica-sdk.js +0 -1403
- package/dist/pica-sdk.js.map +0 -1
- package/dist/tools/health.d.ts +0 -17
- package/dist/tools/health.d.ts.map +0 -1
- package/dist/tools/health.js +0 -67
- package/dist/tools/health.js.map +0 -1
- package/dist/tools/pica-score.d.ts +0 -15
- package/dist/tools/pica-score.d.ts.map +0 -1
- package/dist/tools/pica-score.js +0 -28
- package/dist/tools/pica-score.js.map +0 -1
- package/dist/tools/registration.d.ts +0 -16
- package/dist/tools/registration.d.ts.map +0 -1
- package/dist/tools/registration.js +0 -50
- package/dist/tools/registration.js.map +0 -1
- package/dist/utils/credit-gate.d.ts +0 -17
- package/dist/utils/credit-gate.d.ts.map +0 -1
- package/dist/utils/credit-gate.js +0 -100
- package/dist/utils/credit-gate.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -29
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -115
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -63
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -125
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/mpp.d.ts +0 -63
- package/dist/utils/mpp.d.ts.map +0 -1
- package/dist/utils/mpp.js +0 -137
- package/dist/utils/mpp.js.map +0 -1
- package/dist/utils/notify-parties.d.ts +0 -35
- package/dist/utils/notify-parties.d.ts.map +0 -1
- package/dist/utils/notify-parties.js +0 -59
- package/dist/utils/notify-parties.js.map +0 -1
- package/server.json +0 -30
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
/**
|
|
3
|
+
* pica_upload MCP App card — generic drop zone.
|
|
4
|
+
*
|
|
5
|
+
* Renders a drop zone + file input, instantiates createUploadManager() from
|
|
6
|
+
* shared.ts, and reports uploaded file metadata back to the agent via
|
|
7
|
+
* app.updateModelContext() once all files have settled.
|
|
8
|
+
*
|
|
9
|
+
* DOM API only — never innerHTML.
|
|
10
|
+
*/
|
|
11
|
+
import { buildAppHtml } from "./shared.js";
|
|
12
|
+
const UPLOAD_BODY = `
|
|
13
|
+
<div class="stack gap-6">
|
|
14
|
+
<header>
|
|
15
|
+
<h1 class="heading heading-lg" id="up-title">upload files</h1>
|
|
16
|
+
<p class="text-secondary" id="up-subtitle">drop files here or click to browse</p>
|
|
17
|
+
</header>
|
|
18
|
+
|
|
19
|
+
<section>
|
|
20
|
+
<div id="up-dropzone" class="up-dropzone">
|
|
21
|
+
<p class="text-secondary" id="up-dropzone-label">drop files here or click to browse</p>
|
|
22
|
+
<input type="file" id="up-input" multiple style="display: none;" />
|
|
23
|
+
</div>
|
|
24
|
+
<div id="up-thumbnails" class="up-thumbnails"></div>
|
|
25
|
+
<p class="text-tertiary" id="up-max-msg" style="margin-top: 8px; display: none;"></p>
|
|
26
|
+
<p class="text-tertiary" id="up-status" style="margin-top: 12px; display: none;"></p>
|
|
27
|
+
</section>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<style>
|
|
31
|
+
.up-dropzone {
|
|
32
|
+
background: rgba(255,255,255,0.03);
|
|
33
|
+
border: 1px dashed rgba(255,255,255,0.15);
|
|
34
|
+
border-radius: 12px;
|
|
35
|
+
padding: 64px 24px;
|
|
36
|
+
text-align: center;
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
transition: background 0.15s, border-color 0.15s;
|
|
39
|
+
}
|
|
40
|
+
.up-dropzone.dragover {
|
|
41
|
+
background: rgba(184,115,51,0.05);
|
|
42
|
+
border-color: var(--accent);
|
|
43
|
+
}
|
|
44
|
+
.up-thumbnails {
|
|
45
|
+
display: flex;
|
|
46
|
+
gap: 12px;
|
|
47
|
+
flex-wrap: wrap;
|
|
48
|
+
margin-top: 16px;
|
|
49
|
+
}
|
|
50
|
+
.up-thumb {
|
|
51
|
+
position: relative;
|
|
52
|
+
min-width: 120px;
|
|
53
|
+
max-width: 180px;
|
|
54
|
+
padding: 12px;
|
|
55
|
+
border-radius: 8px;
|
|
56
|
+
border: 1px solid var(--card-border);
|
|
57
|
+
background: rgba(255,255,255,0.03);
|
|
58
|
+
font-size: 12px;
|
|
59
|
+
}
|
|
60
|
+
.up-thumb-filename {
|
|
61
|
+
color: var(--text-primary);
|
|
62
|
+
word-break: break-all;
|
|
63
|
+
margin-bottom: 4px;
|
|
64
|
+
}
|
|
65
|
+
.up-thumb-state {
|
|
66
|
+
color: var(--text-tertiary);
|
|
67
|
+
font-size: 11px;
|
|
68
|
+
}
|
|
69
|
+
.up-thumb-state-failed { border-color: rgba(255,80,80,0.5); }
|
|
70
|
+
.up-thumb-state-network_error { border-color: rgba(255,165,0,0.4); }
|
|
71
|
+
.up-thumb-state-uploaded { border-color: rgba(135,169,107,0.5); }
|
|
72
|
+
.up-thumb-remove {
|
|
73
|
+
position: absolute; top: 4px; right: 4px;
|
|
74
|
+
width: 18px; height: 18px; border-radius: 50%;
|
|
75
|
+
background: rgba(0,0,0,0.6);
|
|
76
|
+
color: white; font-size: 11px; border: none; cursor: pointer;
|
|
77
|
+
display: flex; align-items: center; justify-content: center;
|
|
78
|
+
}
|
|
79
|
+
@media (max-width: 600px) {
|
|
80
|
+
.up-dropzone { padding: 40px 16px; }
|
|
81
|
+
}
|
|
82
|
+
</style>
|
|
83
|
+
`;
|
|
84
|
+
const UPLOAD_JS = `
|
|
85
|
+
var upState = {
|
|
86
|
+
config: { accept: "any", purpose: null, max_files: null },
|
|
87
|
+
manager: null,
|
|
88
|
+
reported: false,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
function upAcceptToAttr(accept) {
|
|
92
|
+
switch (accept) {
|
|
93
|
+
case "image": return "image/*";
|
|
94
|
+
case "audio": return "audio/*";
|
|
95
|
+
case "video": return "video/*";
|
|
96
|
+
case "document": return ".pdf,.doc,.docx,.txt,.csv,.xls,.xlsx,.rtf,.md";
|
|
97
|
+
default: return "";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function upRender(files) {
|
|
102
|
+
var container = document.getElementById("up-thumbnails");
|
|
103
|
+
if (!container) return;
|
|
104
|
+
container.textContent = "";
|
|
105
|
+
|
|
106
|
+
files.forEach(function (f) {
|
|
107
|
+
var thumb = document.createElement("div");
|
|
108
|
+
thumb.className = "up-thumb up-thumb-state-" + f.state;
|
|
109
|
+
|
|
110
|
+
var name = document.createElement("div");
|
|
111
|
+
name.className = "up-thumb-filename";
|
|
112
|
+
name.textContent = f.filename;
|
|
113
|
+
thumb.appendChild(name);
|
|
114
|
+
|
|
115
|
+
var stateEl = document.createElement("div");
|
|
116
|
+
stateEl.className = "up-thumb-state";
|
|
117
|
+
if (f.state === "uploading") stateEl.textContent = "uploading...";
|
|
118
|
+
else if (f.state === "uploaded") stateEl.textContent = "uploaded";
|
|
119
|
+
else if (f.state === "failed") stateEl.textContent = "failed — click to retry";
|
|
120
|
+
else if (f.state === "network_error") stateEl.textContent = "network error — check connection or use web dashboard";
|
|
121
|
+
else stateEl.textContent = f.state;
|
|
122
|
+
thumb.appendChild(stateEl);
|
|
123
|
+
|
|
124
|
+
if (f.state === "failed") {
|
|
125
|
+
thumb.style.cursor = "pointer";
|
|
126
|
+
thumb.onclick = function () { upState.manager.retryFile(f.id); };
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
var removeBtn = document.createElement("button");
|
|
130
|
+
removeBtn.className = "up-thumb-remove";
|
|
131
|
+
removeBtn.textContent = "\\u00D7";
|
|
132
|
+
removeBtn.onclick = function (e) {
|
|
133
|
+
e.stopPropagation();
|
|
134
|
+
upState.manager.removeFile(f.id);
|
|
135
|
+
};
|
|
136
|
+
thumb.appendChild(removeBtn);
|
|
137
|
+
|
|
138
|
+
container.appendChild(thumb);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
upMaybeReport(files);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function upMaybeReport(files) {
|
|
145
|
+
if (upState.reported) return;
|
|
146
|
+
if (files.length === 0) return;
|
|
147
|
+
var settled = files.every(function (f) {
|
|
148
|
+
return f.state === "uploaded" || f.state === "failed" || f.state === "network_error";
|
|
149
|
+
});
|
|
150
|
+
if (!settled) return;
|
|
151
|
+
|
|
152
|
+
var uploaded = files
|
|
153
|
+
.filter(function (f) { return f.state === "uploaded"; })
|
|
154
|
+
.map(function (f) {
|
|
155
|
+
return {
|
|
156
|
+
id: f.upload_id || null,
|
|
157
|
+
url: f.url,
|
|
158
|
+
mime_type: f.mime_type,
|
|
159
|
+
size: f.size,
|
|
160
|
+
filename: f.filename,
|
|
161
|
+
uploaded_at: f.uploaded_at,
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
upState.reported = true;
|
|
166
|
+
|
|
167
|
+
var status = document.getElementById("up-status");
|
|
168
|
+
if (status) {
|
|
169
|
+
status.style.display = "block";
|
|
170
|
+
status.textContent = uploaded.length + " file(s) uploaded — returning to agent";
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (app && typeof app.updateModelContext === "function") {
|
|
174
|
+
try {
|
|
175
|
+
app.updateModelContext({
|
|
176
|
+
context: [{
|
|
177
|
+
type: "text",
|
|
178
|
+
text: JSON.stringify({ uploaded: uploaded }),
|
|
179
|
+
}],
|
|
180
|
+
});
|
|
181
|
+
} catch (err) {
|
|
182
|
+
console.warn("[pica_upload] updateModelContext failed:", err);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function upEnforceMaxFiles(incoming) {
|
|
188
|
+
var maxMsgEl = document.getElementById("up-max-msg");
|
|
189
|
+
if (maxMsgEl) {
|
|
190
|
+
maxMsgEl.style.display = "none";
|
|
191
|
+
maxMsgEl.textContent = "";
|
|
192
|
+
}
|
|
193
|
+
var max = upState.config.max_files;
|
|
194
|
+
if (!max || !upState.manager) return incoming;
|
|
195
|
+
var currentCount = upState.manager.getFiles().length;
|
|
196
|
+
var remaining = max - currentCount;
|
|
197
|
+
if (remaining <= 0) {
|
|
198
|
+
if (maxMsgEl) {
|
|
199
|
+
maxMsgEl.textContent = "max " + max + " files — extras ignored";
|
|
200
|
+
maxMsgEl.style.display = "block";
|
|
201
|
+
}
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
if (incoming.length > remaining) {
|
|
205
|
+
if (maxMsgEl) {
|
|
206
|
+
maxMsgEl.textContent = "max " + max + " files — extras ignored";
|
|
207
|
+
maxMsgEl.style.display = "block";
|
|
208
|
+
}
|
|
209
|
+
return Array.prototype.slice.call(incoming, 0, remaining);
|
|
210
|
+
}
|
|
211
|
+
return incoming;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function upSetup() {
|
|
215
|
+
var dz = document.getElementById("up-dropzone");
|
|
216
|
+
var input = document.getElementById("up-input");
|
|
217
|
+
var title = document.getElementById("up-title");
|
|
218
|
+
var subtitle = document.getElementById("up-subtitle");
|
|
219
|
+
var dzLabel = document.getElementById("up-dropzone-label");
|
|
220
|
+
|
|
221
|
+
if (upState.config.purpose && title) {
|
|
222
|
+
title.textContent = "upload: " + upState.config.purpose;
|
|
223
|
+
}
|
|
224
|
+
if (upState.config.accept && upState.config.accept !== "any" && subtitle) {
|
|
225
|
+
subtitle.textContent = "drop " + upState.config.accept + " files here or click to browse";
|
|
226
|
+
if (dzLabel) dzLabel.textContent = "drop " + upState.config.accept + " files here";
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (input) {
|
|
230
|
+
input.accept = upAcceptToAttr(upState.config.accept);
|
|
231
|
+
}
|
|
232
|
+
if (!dz || !input) return;
|
|
233
|
+
|
|
234
|
+
dz.addEventListener("click", function () { input.click(); });
|
|
235
|
+
input.addEventListener("change", function (e) {
|
|
236
|
+
if (e.target.files && e.target.files.length) {
|
|
237
|
+
var allowed = upEnforceMaxFiles(e.target.files);
|
|
238
|
+
if (allowed.length) {
|
|
239
|
+
upState.reported = false;
|
|
240
|
+
upState.manager.addFiles(allowed);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
input.value = "";
|
|
244
|
+
});
|
|
245
|
+
dz.addEventListener("dragover", function (e) {
|
|
246
|
+
e.preventDefault();
|
|
247
|
+
dz.classList.add("dragover");
|
|
248
|
+
});
|
|
249
|
+
dz.addEventListener("dragleave", function () { dz.classList.remove("dragover"); });
|
|
250
|
+
dz.addEventListener("drop", function (e) {
|
|
251
|
+
e.preventDefault();
|
|
252
|
+
dz.classList.remove("dragover");
|
|
253
|
+
if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length) {
|
|
254
|
+
var allowed = upEnforceMaxFiles(e.dataTransfer.files);
|
|
255
|
+
if (allowed.length) {
|
|
256
|
+
upState.reported = false;
|
|
257
|
+
upState.manager.addFiles(allowed);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
window.onPicaToolResult = function (data) {
|
|
264
|
+
if (data && data.config) {
|
|
265
|
+
upState.config = {
|
|
266
|
+
accept: data.config.accept || "any",
|
|
267
|
+
purpose: data.config.purpose || null,
|
|
268
|
+
max_files: data.config.max_files || null,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
upState.manager = createUploadManager({
|
|
272
|
+
accept: upState.config.accept,
|
|
273
|
+
onStateChange: upRender,
|
|
274
|
+
app: app,
|
|
275
|
+
});
|
|
276
|
+
upSetup();
|
|
277
|
+
};
|
|
278
|
+
`;
|
|
279
|
+
export const UPLOAD_HTML = buildAppHtml("pica \u2014 upload", UPLOAD_BODY, UPLOAD_JS);
|
|
280
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/apps/upload.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEnB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkMjB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CACrC,oBAAoB,EACpB,WAAW,EACX,SAAS,CACV,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,34 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Server Configuration
|
|
3
|
-
*/
|
|
4
1
|
export interface ServerConfig {
|
|
5
|
-
|
|
6
|
-
* PICA API key for authentication
|
|
7
|
-
*/
|
|
8
|
-
picaApiKey: string;
|
|
9
|
-
/**
|
|
10
|
-
* PICA API base URL
|
|
11
|
-
*/
|
|
2
|
+
picaApiKey: string | null;
|
|
12
3
|
picaApiUrl: string;
|
|
13
|
-
/**
|
|
14
|
-
* Server name shown to AI assistants
|
|
15
|
-
*/
|
|
16
4
|
serverName: string;
|
|
17
|
-
/**
|
|
18
|
-
* Server version
|
|
19
|
-
*/
|
|
20
5
|
version: string;
|
|
21
|
-
/**
|
|
22
|
-
* Enable debug logging
|
|
23
|
-
*/
|
|
24
6
|
debug: boolean;
|
|
7
|
+
lobbyMode: boolean;
|
|
8
|
+
credentialsPath: string;
|
|
9
|
+
discoveryMode: boolean;
|
|
25
10
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Load configuration from environment variables
|
|
28
|
-
*/
|
|
29
11
|
export declare function loadConfig(): ServerConfig;
|
|
30
|
-
/**
|
|
31
|
-
* Validate configuration
|
|
32
|
-
*/
|
|
33
12
|
export declare function validateConfig(config: ServerConfig): void;
|
|
34
13
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,UAAU,IAAI,YAAY,CAwCzC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAWzD"}
|
package/dist/config.js
CHANGED
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* MCP Server Configuration
|
|
4
4
|
*/
|
|
5
|
+
import { readCredentials, getDefaultCredentialsPath, } from "@withpica/mcp-utils";
|
|
5
6
|
export function loadConfig() {
|
|
6
|
-
const
|
|
7
|
+
const credentialsPath = process.env.PICA_CREDENTIALS_PATH || getDefaultCredentialsPath();
|
|
8
|
+
const debug = process.env.DEBUG === "true" || process.env.DEBUG === "1";
|
|
9
|
+
// Priority 1: env var
|
|
10
|
+
let picaApiKey = process.env.PICA_API_KEY || null;
|
|
11
|
+
// Priority 2: credentials file
|
|
7
12
|
if (!picaApiKey) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
const creds = readCredentials(credentialsPath);
|
|
14
|
+
if (creds) {
|
|
15
|
+
picaApiKey = creds.api_key;
|
|
16
|
+
if (debug) {
|
|
17
|
+
console.error(`[MCP Server] Loaded credentials for ${creds.email}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const lobbyMode = !picaApiKey;
|
|
22
|
+
const discoveryMode = process.env.MCP_LAYERED_DISCOVERY === "1";
|
|
23
|
+
if (lobbyMode && debug) {
|
|
24
|
+
console.error("[MCP Server] No API key found — starting in lobby mode");
|
|
25
|
+
}
|
|
26
|
+
if (discoveryMode && debug) {
|
|
27
|
+
console.error("[MCP Server] Layered discovery mode enabled");
|
|
11
28
|
}
|
|
12
29
|
return {
|
|
13
30
|
picaApiKey,
|
|
14
31
|
picaApiUrl: process.env.PICA_API_URL || "https://withpica.com/api",
|
|
15
32
|
serverName: "pica-mcp-server",
|
|
16
|
-
version: "2.
|
|
17
|
-
debug
|
|
33
|
+
version: "2.5.0",
|
|
34
|
+
debug,
|
|
35
|
+
lobbyMode,
|
|
36
|
+
credentialsPath,
|
|
37
|
+
discoveryMode,
|
|
18
38
|
};
|
|
19
39
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate configuration
|
|
22
|
-
*/
|
|
23
40
|
export function validateConfig(config) {
|
|
24
|
-
if (!config.
|
|
25
|
-
|
|
41
|
+
if (!config.lobbyMode &&
|
|
42
|
+
(!config.picaApiKey || config.picaApiKey.trim() === "")) {
|
|
43
|
+
throw new Error("PICA API key cannot be empty when not in lobby mode");
|
|
26
44
|
}
|
|
27
45
|
if (!config.picaApiUrl || !config.picaApiUrl.startsWith("http")) {
|
|
28
46
|
throw new Error("Invalid PICA API URL");
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,6DAA6D;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAa7B,MAAM,UAAU,UAAU;IACxB,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,yBAAyB,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;IAExE,sBAAsB;IACtB,IAAI,UAAU,GAAkB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;IAEjE,+BAA+B;IAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,uCAAuC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC;IAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC;IAEhE,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,aAAa,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO;QACL,UAAU;QACV,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,0BAA0B;QAClE,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,OAAO;QAChB,KAAK;QACL,SAAS;QACT,eAAe;QACf,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IACE,CAAC,MAAM,CAAC,SAAS;QACjB,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EACvD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,13 @@ import { loadConfig, validateConfig } from "./config.js";
|
|
|
8
8
|
import { PicaMcpServer } from "./server.js";
|
|
9
9
|
async function main() {
|
|
10
10
|
try {
|
|
11
|
-
// Load and validate configuration
|
|
12
11
|
const config = loadConfig();
|
|
13
12
|
validateConfig(config);
|
|
14
|
-
|
|
13
|
+
if (config.lobbyMode) {
|
|
14
|
+
console.error('[MCP Server] Starting in lobby mode — say "sign me in" to connect');
|
|
15
|
+
}
|
|
15
16
|
const server = new PicaMcpServer(config);
|
|
16
17
|
await server.start();
|
|
17
|
-
// Handle graceful shutdown
|
|
18
18
|
process.on("SIGINT", async () => {
|
|
19
19
|
console.error("[MCP Server] Shutting down...");
|
|
20
20
|
await server.stop();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,6DAA6D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,6DAA6D;AAE7D;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CACX,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,2BAA2B,EAC3B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -113,9 +113,9 @@ export class PromptRegistry {
|
|
|
113
113
|
|
|
114
114
|
Use the following tools to gather data:
|
|
115
115
|
1. pica_catalog_stats - Get overall statistics
|
|
116
|
-
2.
|
|
117
|
-
3.
|
|
118
|
-
4.
|
|
116
|
+
2. pica_works_query - Review works data
|
|
117
|
+
3. pica_people_query - Review people data
|
|
118
|
+
4. pica_recordings_query - Review recordings data
|
|
119
119
|
|
|
120
120
|
Analyze and report on:
|
|
121
121
|
- Overall catalog size and composition
|
|
@@ -144,8 +144,8 @@ Please provide specific, actionable insights.`,
|
|
|
144
144
|
text: `Please help me find potential duplicate works and people in my catalog.
|
|
145
145
|
|
|
146
146
|
Use these tools:
|
|
147
|
-
1.
|
|
148
|
-
2.
|
|
147
|
+
1. pica_works_query - Get all works
|
|
148
|
+
2. pica_people_query - Get all people
|
|
149
149
|
|
|
150
150
|
Look for:
|
|
151
151
|
- Works with very similar or identical titles
|
|
@@ -177,8 +177,8 @@ Be thorough but conservative - only flag items that have a strong likelihood of
|
|
|
177
177
|
text: `Please identify works and people that could benefit from metadata enrichment.
|
|
178
178
|
|
|
179
179
|
Use these tools:
|
|
180
|
-
1.
|
|
181
|
-
2.
|
|
180
|
+
1. pica_works_query - Get all works
|
|
181
|
+
2. pica_people_query - Get all people
|
|
182
182
|
|
|
183
183
|
Identify:
|
|
184
184
|
- People without ISNI identifiers who might have one
|
|
@@ -211,9 +211,9 @@ Focus on people and works where enrichment would add the most value.`,
|
|
|
211
211
|
text: `Please review unverified works and suggest which ones are ready for verification.
|
|
212
212
|
|
|
213
213
|
Use these tools:
|
|
214
|
-
1.
|
|
214
|
+
1. pica_works_query with verified: false - Get unverified works
|
|
215
215
|
2. pica_recordings_by_work - Check if works have recordings
|
|
216
|
-
3.
|
|
216
|
+
3. pica_people_query - Check for associated people/credits
|
|
217
217
|
|
|
218
218
|
For each unverified work, assess:
|
|
219
219
|
- Does it have complete metadata (title, type, duration)?
|
|
@@ -245,9 +245,9 @@ Provide specific recommendations for each category, including what's needed to m
|
|
|
245
245
|
text: `Please assess the health of my music catalog using the PICA Score.
|
|
246
246
|
|
|
247
247
|
Use these tools:
|
|
248
|
-
1.
|
|
248
|
+
1. pica_works_inspect({ sections: ["score"] }) - Get the PICA Score with pillar breakdown
|
|
249
249
|
2. pica_catalog_stats - Get raw catalog statistics for additional context
|
|
250
|
-
3.
|
|
250
|
+
3. pica_works_query - Sample works data to understand quality
|
|
251
251
|
|
|
252
252
|
Analyze:
|
|
253
253
|
- The composite score and grade — is this catalog ready for commercial use?
|
|
@@ -278,9 +278,9 @@ Provide:
|
|
|
278
278
|
text: `Please audit the credits across my music catalog to find gaps and issues.
|
|
279
279
|
|
|
280
280
|
Use these tools:
|
|
281
|
-
1.
|
|
281
|
+
1. pica_works_query - Get all works
|
|
282
282
|
2. pica_credits_list - Check credits for each work (sample at least 20 works, prioritizing recent ones)
|
|
283
|
-
3.
|
|
283
|
+
3. pica_people_query - Cross-reference credited people
|
|
284
284
|
|
|
285
285
|
Look for:
|
|
286
286
|
- Works with no credits at all (no collaborators assigned)
|
|
@@ -327,7 +327,7 @@ After importing, guide me through closing the loop on each work:
|
|
|
327
327
|
- Who wrote these songs? (pica_credits_update — add writers and set splits)
|
|
328
328
|
- Are there publishing details registered? (pica_enrich_work_mlc — check MLC)
|
|
329
329
|
- Do I have audio files to upload? (pica_audio_presigned_upload — for analysis)
|
|
330
|
-
- What identifiers are missing? (
|
|
330
|
+
- What identifiers are missing? (pica_works_inspect with sections: ["enrichment"] — check coverage)
|
|
331
331
|
|
|
332
332
|
Don't push — let me stop whenever I want. But always let me know what the next valuable step would be.
|
|
333
333
|
|
|
@@ -346,8 +346,8 @@ Important: I can always log in at withpica.com to see, verify, and manage everyt
|
|
|
346
346
|
*/
|
|
347
347
|
getCloseTheLoopPrompt(workId) {
|
|
348
348
|
const workInstruction = workId
|
|
349
|
-
? `Check completeness for work ${workId} using
|
|
350
|
-
: `Ask me which work I'd like to check, or use
|
|
349
|
+
? `Check completeness for work ${workId} using pica_works_inspect({ id: "${workId || "..."}", sections: ["completeness"] }).`
|
|
350
|
+
: `Ask me which work I'd like to check, or use pica_works_query({ health_filter: "low_completeness" }) to find works that need the most attention.`;
|
|
351
351
|
return {
|
|
352
352
|
messages: [
|
|
353
353
|
{
|
|
@@ -359,9 +359,9 @@ Important: I can always log in at withpica.com to see, verify, and manage everyt
|
|
|
359
359
|
${workInstruction}
|
|
360
360
|
|
|
361
361
|
For the work, check every aspect of completeness:
|
|
362
|
-
1.
|
|
362
|
+
1. pica_works_inspect with sections: ["completeness"] — get the full gap analysis
|
|
363
363
|
2. pica_credits_list — check if credits and splits are assigned
|
|
364
|
-
3.
|
|
364
|
+
3. pica_works_inspect with sections: ["enrichment"] — check what enrichment sources have been tried
|
|
365
365
|
|
|
366
366
|
For each gap found, offer a specific action:
|
|
367
367
|
- Missing credits → "Want me to add writers? Who wrote this song?"
|
|
@@ -371,7 +371,7 @@ For each gap found, offer a specific action:
|
|
|
371
371
|
- No audio → "Got a master recording to upload?"
|
|
372
372
|
- Audio not analysed → "Want me to analyse the audio for BPM, key, and mood?"
|
|
373
373
|
- No agreements → "Is there a publishing agreement for this work?"
|
|
374
|
-
- Not registered → "Want me to check registration status?" (
|
|
374
|
+
- Not registered → "Want me to check registration status?" (pica_works_inspect with sections: ["registration"])
|
|
375
375
|
|
|
376
376
|
Work through each gap one at a time. Let me skip any I'm not ready for. After each fix, check if the completeness score improved.
|
|
377
377
|
|
|
@@ -394,8 +394,8 @@ Keep it conversational — don't list all gaps at once. Start with the most impo
|
|
|
394
394
|
text: `Help me check which of my works are registered and which still need registration.
|
|
395
395
|
|
|
396
396
|
Steps:
|
|
397
|
-
1.
|
|
398
|
-
2. For works that aren't registered, use
|
|
397
|
+
1. pica_works_query — list works, then use pica_works_inspect with sections: ["registration"] to check registration status across PROs (PRS, MCPS, PPL, MLC)
|
|
398
|
+
2. For works that aren't registered, use pica_works_inspect with sections: ["registration", "completeness"] on a sample to understand what's blocking registration
|
|
399
399
|
3. Identify common blockers:
|
|
400
400
|
- Missing ISWC (needed for PRS/MCPS) → suggest pica_enrich_work_mlc
|
|
401
401
|
- Missing ISRC (needed for PPL) → check if recordings have ISRCs
|
|
@@ -439,7 +439,7 @@ If the catalog is EMPTY (0 works):
|
|
|
439
439
|
→ Use the new-catalog-setup workflow. Welcome me, explain how to import music (Spotify link, spreadsheet, screenshot, or just describe songs), and get started.
|
|
440
440
|
|
|
441
441
|
If the catalog has works but LOW completeness (PICA Score below 50 or many gaps):
|
|
442
|
-
→ Use
|
|
442
|
+
→ Use pica_works_query({ health_filter: "low_completeness" }) to find the works that need the most attention.
|
|
443
443
|
→ Pick the top 3 and offer to run close-the-loop on them one at a time.
|
|
444
444
|
→ Tell me: "Your catalog has [N] works but many have gaps. Want me to start closing the loop on the ones that need the most attention?"
|
|
445
445
|
|
|
@@ -453,7 +453,7 @@ If the catalog is HEALTHY (score above 70, few gaps):
|
|
|
453
453
|
→ Use assess-catalog-health for a maintenance check. Tell me: "Your catalog looks solid. Here's a quick health check and what could still improve."
|
|
454
454
|
|
|
455
455
|
If none of the above clearly applies:
|
|
456
|
-
→ Use pica_catalog_stats and
|
|
456
|
+
→ Use pica_catalog_stats and pica_works_inspect({ sections: ["score"] }) to give me a quick summary, then ask what I'd like to focus on.
|
|
457
457
|
|
|
458
458
|
Step 3 — Explain your routing:
|
|
459
459
|
Tell me WHY you chose the workflow you did, in one sentence. Example: "Your catalog has 42 works but 28 are missing credits, so let's close those gaps first."
|
|
@@ -481,7 +481,7 @@ Important: Don't run all workflows at once. Pick the single most valuable action
|
|
|
481
481
|
|
|
482
482
|
Steps:
|
|
483
483
|
1. pica_catalog_stats — get an overview of the catalog
|
|
484
|
-
2.
|
|
484
|
+
2. pica_works_query — sample works to check what's missing for sync readiness
|
|
485
485
|
3. For each work, check:
|
|
486
486
|
- Has audio been uploaded? (supervisors need to hear it)
|
|
487
487
|
- Has audio been analysed? (BPM, key, energy, mood — needed for search)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Resource Registry for MCP Server
|
|
3
3
|
* Manages read-only data resources that AI assistants can access
|
|
4
4
|
*/
|
|
5
|
-
import { PicaClient } from "
|
|
5
|
+
import { PicaClient } from "@withpica/mcp-sdk";
|
|
6
|
+
import { ServerConfig } from "../config.js";
|
|
6
7
|
export interface ResourceDefinition {
|
|
7
8
|
uri: string;
|
|
8
9
|
name: string;
|
|
@@ -19,7 +20,8 @@ export interface ResourceContent {
|
|
|
19
20
|
export type ResourceResult = any;
|
|
20
21
|
export declare class ResourceRegistry {
|
|
21
22
|
private pica;
|
|
22
|
-
|
|
23
|
+
private config?;
|
|
24
|
+
constructor(pica: PicaClient | null, config?: ServerConfig);
|
|
23
25
|
/**
|
|
24
26
|
* List all available resources
|
|
25
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAO/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5C,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,KAAK,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC;AAEjC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAe;gBAElB,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY;IAK1D;;OAEG;IACH,aAAa,IAAI,kBAAkB,EAAE;IA8FrC;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IA8G7C;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,aAAa;IA4B3B;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;YACW,eAAe;IAoD7B;;OAEG;YACW,gBAAgB;IAc9B;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;YACW,eAAe;CAa9B"}
|