@withpica/mcp-server 1.3.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/.claude/settings.local.json +5 -0
- package/CHANGELOG.md +1850 -0
- package/README.md +304 -0
- 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/release.d.ts +2 -0
- package/dist/apps/release.d.ts.map +1 -0
- package/dist/apps/release.js +69 -0
- package/dist/apps/release.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 +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +86 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +645 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/agent-guide.d.ts +15 -0
- package/dist/resources/agent-guide.d.ts.map +1 -0
- package/dist/resources/agent-guide.js +284 -0
- package/dist/resources/agent-guide.js.map +1 -0
- package/dist/resources/index.d.ts +66 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +510 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/llms-primer.d.ts +2 -0
- package/dist/resources/llms-primer.d.ts.map +1 -0
- package/dist/resources/llms-primer.js +68 -0
- package/dist/resources/llms-primer.js.map +1 -0
- package/dist/resources/required-schemas.generated.d.ts +455 -0
- package/dist/resources/required-schemas.generated.d.ts.map +1 -0
- package/dist/resources/required-schemas.generated.js +1041 -0
- package/dist/resources/required-schemas.generated.js.map +1 -0
- package/dist/resources/required-schemas.source.d.ts +53 -0
- package/dist/resources/required-schemas.source.d.ts.map +1 -0
- package/dist/resources/required-schemas.source.js +493 -0
- package/dist/resources/required-schemas.source.js.map +1 -0
- package/dist/resources/welcome.d.ts +14 -0
- package/dist/resources/welcome.d.ts.map +1 -0
- package/dist/resources/welcome.js +26 -0
- package/dist/resources/welcome.js.map +1 -0
- package/dist/server-instructions.d.ts +60 -0
- package/dist/server-instructions.d.ts.map +1 -0
- package/dist/server-instructions.js +93 -0
- package/dist/server-instructions.js.map +1 -0
- package/dist/server.d.ts +52 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +334 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/access-simulate.d.ts +23 -0
- package/dist/tools/access-simulate.d.ts.map +1 -0
- package/dist/tools/access-simulate.js +162 -0
- package/dist/tools/access-simulate.js.map +1 -0
- package/dist/tools/agent-identity.d.ts +36 -0
- package/dist/tools/agent-identity.d.ts.map +1 -0
- package/dist/tools/agent-identity.js +274 -0
- package/dist/tools/agent-identity.js.map +1 -0
- package/dist/tools/agreement-types.d.ts +27 -0
- package/dist/tools/agreement-types.d.ts.map +1 -0
- package/dist/tools/agreement-types.js +281 -0
- package/dist/tools/agreement-types.js.map +1 -0
- package/dist/tools/agreements.d.ts +20 -0
- package/dist/tools/agreements.d.ts.map +1 -0
- package/dist/tools/agreements.js +282 -0
- package/dist/tools/agreements.js.map +1 -0
- package/dist/tools/analytics.d.ts +20 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +130 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/app-tools.d.ts +15 -0
- package/dist/tools/app-tools.d.ts.map +1 -0
- package/dist/tools/app-tools.js +388 -0
- package/dist/tools/app-tools.js.map +1 -0
- package/dist/tools/assets.d.ts +25 -0
- package/dist/tools/assets.d.ts.map +1 -0
- package/dist/tools/assets.js +454 -0
- package/dist/tools/assets.js.map +1 -0
- package/dist/tools/audio-files.d.ts +20 -0
- package/dist/tools/audio-files.d.ts.map +1 -0
- package/dist/tools/audio-files.js +409 -0
- package/dist/tools/audio-files.js.map +1 -0
- package/dist/tools/audit.d.ts +19 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +58 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/auth.d.ts +22 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +212 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/bulk.d.ts +22 -0
- package/dist/tools/bulk.d.ts.map +1 -0
- package/dist/tools/bulk.js +164 -0
- package/dist/tools/bulk.js.map +1 -0
- package/dist/tools/calendar.d.ts +15 -0
- package/dist/tools/calendar.d.ts.map +1 -0
- package/dist/tools/calendar.js +68 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/collaborators.d.ts +21 -0
- package/dist/tools/collaborators.d.ts.map +1 -0
- package/dist/tools/collaborators.js +381 -0
- package/dist/tools/collaborators.js.map +1 -0
- package/dist/tools/comparisons.d.ts +22 -0
- package/dist/tools/comparisons.d.ts.map +1 -0
- package/dist/tools/comparisons.js +80 -0
- package/dist/tools/comparisons.js.map +1 -0
- package/dist/tools/credits.d.ts +39 -0
- package/dist/tools/credits.d.ts.map +1 -0
- package/dist/tools/credits.js +541 -0
- package/dist/tools/credits.js.map +1 -0
- package/dist/tools/custody-hints.d.ts +16 -0
- package/dist/tools/custody-hints.d.ts.map +1 -0
- package/dist/tools/custody-hints.js +27 -0
- package/dist/tools/custody-hints.js.map +1 -0
- package/dist/tools/custody.d.ts +38 -0
- package/dist/tools/custody.d.ts.map +1 -0
- package/dist/tools/custody.js +281 -0
- package/dist/tools/custody.js.map +1 -0
- package/dist/tools/dashboard.d.ts +22 -0
- package/dist/tools/dashboard.d.ts.map +1 -0
- package/dist/tools/dashboard.js +258 -0
- package/dist/tools/dashboard.js.map +1 -0
- package/dist/tools/directory.d.ts +15 -0
- package/dist/tools/directory.d.ts.map +1 -0
- package/dist/tools/directory.js +107 -0
- package/dist/tools/directory.js.map +1 -0
- package/dist/tools/discovery.d.ts +49 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +851 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/disputes.d.ts +18 -0
- package/dist/tools/disputes.d.ts.map +1 -0
- package/dist/tools/disputes.js +62 -0
- package/dist/tools/disputes.js.map +1 -0
- package/dist/tools/documents.d.ts +15 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +37 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/duplicates.d.ts +25 -0
- package/dist/tools/duplicates.d.ts.map +1 -0
- package/dist/tools/duplicates.js +108 -0
- package/dist/tools/duplicates.js.map +1 -0
- package/dist/tools/enrichment.d.ts +56 -0
- package/dist/tools/enrichment.d.ts.map +1 -0
- package/dist/tools/enrichment.js +616 -0
- package/dist/tools/enrichment.js.map +1 -0
- package/dist/tools/exports.d.ts +19 -0
- package/dist/tools/exports.d.ts.map +1 -0
- package/dist/tools/exports.js +184 -0
- package/dist/tools/exports.js.map +1 -0
- package/dist/tools/feedback.d.ts +22 -0
- package/dist/tools/feedback.d.ts.map +1 -0
- package/dist/tools/feedback.js +100 -0
- package/dist/tools/feedback.js.map +1 -0
- package/dist/tools/forbidden-keywords.d.ts +62 -0
- package/dist/tools/forbidden-keywords.d.ts.map +1 -0
- package/dist/tools/forbidden-keywords.js +99 -0
- package/dist/tools/forbidden-keywords.js.map +1 -0
- package/dist/tools/gap-hints.d.ts +53 -0
- package/dist/tools/gap-hints.d.ts.map +1 -0
- package/dist/tools/gap-hints.js +245 -0
- package/dist/tools/gap-hints.js.map +1 -0
- package/dist/tools/groups.d.ts +29 -0
- package/dist/tools/groups.d.ts.map +1 -0
- package/dist/tools/groups.js +186 -0
- package/dist/tools/groups.js.map +1 -0
- package/dist/tools/import-documents.d.ts +21 -0
- package/dist/tools/import-documents.d.ts.map +1 -0
- package/dist/tools/import-documents.js +206 -0
- package/dist/tools/import-documents.js.map +1 -0
- package/dist/tools/import.d.ts +31 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +610 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/index.d.ts +293 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1182 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/integrations.d.ts +19 -0
- package/dist/tools/integrations.d.ts.map +1 -0
- package/dist/tools/integrations.js +120 -0
- package/dist/tools/integrations.js.map +1 -0
- package/dist/tools/labels.d.ts +20 -0
- package/dist/tools/labels.d.ts.map +1 -0
- package/dist/tools/labels.js +48 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/licensing.d.ts +40 -0
- package/dist/tools/licensing.d.ts.map +1 -0
- package/dist/tools/licensing.js +436 -0
- package/dist/tools/licensing.js.map +1 -0
- package/dist/tools/memory.d.ts +21 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +120 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/metadata.d.ts +15 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +1532 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/multimedia.d.ts +19 -0
- package/dist/tools/multimedia.d.ts.map +1 -0
- package/dist/tools/multimedia.js +371 -0
- package/dist/tools/multimedia.js.map +1 -0
- package/dist/tools/my-reported-issues.d.ts +32 -0
- package/dist/tools/my-reported-issues.d.ts.map +1 -0
- package/dist/tools/my-reported-issues.js +123 -0
- package/dist/tools/my-reported-issues.js.map +1 -0
- package/dist/tools/notes.d.ts +21 -0
- package/dist/tools/notes.d.ts.map +1 -0
- package/dist/tools/notes.js +115 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/notifications.d.ts +28 -0
- package/dist/tools/notifications.d.ts.map +1 -0
- package/dist/tools/notifications.js +417 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/tools/onboarding.d.ts +24 -0
- package/dist/tools/onboarding.d.ts.map +1 -0
- package/dist/tools/onboarding.js +81 -0
- package/dist/tools/onboarding.js.map +1 -0
- package/dist/tools/people.d.ts +254 -0
- package/dist/tools/people.d.ts.map +1 -0
- package/dist/tools/people.js +481 -0
- package/dist/tools/people.js.map +1 -0
- package/dist/tools/projects.d.ts +20 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +316 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/public-filter.d.ts +43 -0
- package/dist/tools/public-filter.d.ts.map +1 -0
- package/dist/tools/public-filter.js +356 -0
- package/dist/tools/public-filter.js.map +1 -0
- package/dist/tools/publishers.d.ts +30 -0
- package/dist/tools/publishers.d.ts.map +1 -0
- package/dist/tools/publishers.js +105 -0
- package/dist/tools/publishers.js.map +1 -0
- package/dist/tools/purchases.d.ts +27 -0
- package/dist/tools/purchases.d.ts.map +1 -0
- package/dist/tools/purchases.js +9 -0
- package/dist/tools/purchases.js.map +1 -0
- package/dist/tools/recording-attribution-hints.d.ts +24 -0
- package/dist/tools/recording-attribution-hints.d.ts.map +1 -0
- package/dist/tools/recording-attribution-hints.js +27 -0
- package/dist/tools/recording-attribution-hints.js.map +1 -0
- package/dist/tools/recordings.d.ts +96 -0
- package/dist/tools/recordings.d.ts.map +1 -0
- package/dist/tools/recordings.js +564 -0
- package/dist/tools/recordings.js.map +1 -0
- package/dist/tools/recovery-hints.d.ts +40 -0
- package/dist/tools/recovery-hints.d.ts.map +1 -0
- package/dist/tools/recovery-hints.js +827 -0
- package/dist/tools/recovery-hints.js.map +1 -0
- package/dist/tools/release-rich.d.ts +31 -0
- package/dist/tools/release-rich.d.ts.map +1 -0
- package/dist/tools/release-rich.js +245 -0
- package/dist/tools/release-rich.js.map +1 -0
- package/dist/tools/releases.d.ts +36 -0
- package/dist/tools/releases.d.ts.map +1 -0
- package/dist/tools/releases.js +649 -0
- package/dist/tools/releases.js.map +1 -0
- package/dist/tools/report-issue.d.ts +21 -0
- package/dist/tools/report-issue.d.ts.map +1 -0
- package/dist/tools/report-issue.js +101 -0
- package/dist/tools/report-issue.js.map +1 -0
- package/dist/tools/royalties.d.ts +23 -0
- package/dist/tools/royalties.d.ts.map +1 -0
- package/dist/tools/royalties.js +262 -0
- package/dist/tools/royalties.js.map +1 -0
- package/dist/tools/search.d.ts +30 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +115 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/send.d.ts +17 -0
- package/dist/tools/send.d.ts.map +1 -0
- package/dist/tools/send.js +188 -0
- package/dist/tools/send.js.map +1 -0
- package/dist/tools/sessions.d.ts +18 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +153 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/settings.d.ts +23 -0
- package/dist/tools/settings.d.ts.map +1 -0
- package/dist/tools/settings.js +365 -0
- package/dist/tools/settings.js.map +1 -0
- package/dist/tools/share-links.d.ts +22 -0
- package/dist/tools/share-links.d.ts.map +1 -0
- package/dist/tools/share-links.js +188 -0
- package/dist/tools/share-links.js.map +1 -0
- package/dist/tools/signup.d.ts +26 -0
- package/dist/tools/signup.d.ts.map +1 -0
- package/dist/tools/signup.js +266 -0
- package/dist/tools/signup.js.map +1 -0
- package/dist/tools/split-sheets.d.ts +25 -0
- package/dist/tools/split-sheets.d.ts.map +1 -0
- package/dist/tools/split-sheets.js +309 -0
- package/dist/tools/split-sheets.js.map +1 -0
- package/dist/tools/storage-config.d.ts +13 -0
- package/dist/tools/storage-config.d.ts.map +1 -0
- package/dist/tools/storage-config.js +245 -0
- package/dist/tools/storage-config.js.map +1 -0
- package/dist/tools/subscription.d.ts +60 -0
- package/dist/tools/subscription.d.ts.map +1 -0
- package/dist/tools/subscription.js +440 -0
- package/dist/tools/subscription.js.map +1 -0
- package/dist/tools/sync-placements.d.ts +31 -0
- package/dist/tools/sync-placements.d.ts.map +1 -0
- package/dist/tools/sync-placements.js +431 -0
- package/dist/tools/sync-placements.js.map +1 -0
- package/dist/tools/team.d.ts +22 -0
- package/dist/tools/team.d.ts.map +1 -0
- package/dist/tools/team.js +144 -0
- package/dist/tools/team.js.map +1 -0
- package/dist/tools/telegram.d.ts +21 -0
- package/dist/tools/telegram.d.ts.map +1 -0
- package/dist/tools/telegram.js +144 -0
- package/dist/tools/telegram.js.map +1 -0
- package/dist/tools/uploads.d.ts +17 -0
- package/dist/tools/uploads.d.ts.map +1 -0
- package/dist/tools/uploads.js +165 -0
- package/dist/tools/uploads.js.map +1 -0
- package/dist/tools/works.d.ts +71 -0
- package/dist/tools/works.d.ts.map +1 -0
- package/dist/tools/works.js +694 -0
- package/dist/tools/works.js.map +1 -0
- package/package.json +54 -0
- package/scripts/build-required-schemas.ts +233 -0
- package/scripts/bundle-apps.ts +61 -0
- package/scripts/refresh-schema-mirror.ts +182 -0
- package/server.json +20 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
import { formatAsText, formatSuccess } from "@withpica/mcp-utils";
|
|
3
|
+
export class AnalyticsTools {
|
|
4
|
+
pica;
|
|
5
|
+
constructor(pica) {
|
|
6
|
+
this.pica = pica;
|
|
7
|
+
}
|
|
8
|
+
getTools() {
|
|
9
|
+
return [
|
|
10
|
+
// --- Carbon footprint ---
|
|
11
|
+
{
|
|
12
|
+
definition: {
|
|
13
|
+
name: "pica_carbon_footprint",
|
|
14
|
+
description: "Get the carbon footprint summary for your catalog — " +
|
|
15
|
+
"streaming, physical distribution, and production emissions.",
|
|
16
|
+
workflows: "infrastructure",
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: "object",
|
|
19
|
+
properties: {},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
executor: this.carbonSummary.bind(this),
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
definition: {
|
|
26
|
+
name: "pica_carbon_live",
|
|
27
|
+
description: "Get live/real-time carbon metrics for ongoing streaming and distribution activity.",
|
|
28
|
+
workflows: "infrastructure",
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
executor: this.carbonLive.bind(this),
|
|
35
|
+
},
|
|
36
|
+
// --- Provenance ---
|
|
37
|
+
{
|
|
38
|
+
definition: {
|
|
39
|
+
name: "pica_provenance_stats",
|
|
40
|
+
description: "Get provenance statistics — how many works have chain-of-title records, " +
|
|
41
|
+
"attestation coverage, and verification status.",
|
|
42
|
+
workflows: "infrastructure",
|
|
43
|
+
inputSchema: {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
executor: this.provenanceStats.bind(this),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
definition: {
|
|
52
|
+
name: "pica_provenance_work",
|
|
53
|
+
description: "Get the full provenance chain for a specific work — " +
|
|
54
|
+
"creation history, ownership transfers, attestations, and verification entries.",
|
|
55
|
+
workflows: "infrastructure",
|
|
56
|
+
inputSchema: {
|
|
57
|
+
type: "object",
|
|
58
|
+
properties: {
|
|
59
|
+
work_id: {
|
|
60
|
+
type: "string",
|
|
61
|
+
description: "The work ID to get provenance for",
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
required: ["work_id"],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
executor: this.provenanceWork.bind(this),
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
definition: {
|
|
71
|
+
name: "pica_provenance_certificate",
|
|
72
|
+
description: "Generate a provenance certificate for a work — " +
|
|
73
|
+
"a downloadable chain-of-title document with attestation details.",
|
|
74
|
+
workflows: "infrastructure",
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: "object",
|
|
77
|
+
properties: {
|
|
78
|
+
work_id: {
|
|
79
|
+
type: "string",
|
|
80
|
+
description: "The work ID to generate a certificate for",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
required: ["work_id"],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
executor: this.provenanceCertificate.bind(this),
|
|
87
|
+
},
|
|
88
|
+
// --- Catalog diligence ---
|
|
89
|
+
{
|
|
90
|
+
definition: {
|
|
91
|
+
name: "pica_catalog_diligence",
|
|
92
|
+
description: "Generate a technical due diligence report for the catalog — " +
|
|
93
|
+
"ownership clarity, registration coverage, identifier completeness, " +
|
|
94
|
+
"and readiness for lending, licensing, or acquisition.",
|
|
95
|
+
workflows: "infrastructure",
|
|
96
|
+
inputSchema: {
|
|
97
|
+
type: "object",
|
|
98
|
+
properties: {},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
executor: this.catalogDiligence.bind(this),
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
async carbonSummary(_args) {
|
|
106
|
+
const result = await this.pica.analytics.carbonSummary();
|
|
107
|
+
return formatSuccess("Carbon footprint summary", result);
|
|
108
|
+
}
|
|
109
|
+
async carbonLive(_args) {
|
|
110
|
+
const result = await this.pica.analytics.carbonLive();
|
|
111
|
+
return formatSuccess("Live carbon metrics", result);
|
|
112
|
+
}
|
|
113
|
+
async provenanceStats(_args) {
|
|
114
|
+
const result = await this.pica.analytics.provenanceStats();
|
|
115
|
+
return formatAsText(result);
|
|
116
|
+
}
|
|
117
|
+
async provenanceWork(args) {
|
|
118
|
+
const result = await this.pica.analytics.provenanceWork(args.work_id);
|
|
119
|
+
return formatAsText(result);
|
|
120
|
+
}
|
|
121
|
+
async provenanceCertificate(args) {
|
|
122
|
+
const result = await this.pica.analytics.provenanceCertificate(args.work_id);
|
|
123
|
+
return formatSuccess(`Provenance certificate generated for work ${args.work_id}`, result);
|
|
124
|
+
}
|
|
125
|
+
async catalogDiligence(_args) {
|
|
126
|
+
const result = await this.pica.analytics.catalogDiligence();
|
|
127
|
+
return formatSuccess("Catalog diligence report", result);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PicaClient } from "@withpica/mcp-sdk";
|
|
2
|
+
import { ToolDefinition, ToolExecutor } from "./index.js";
|
|
3
|
+
export declare class AppTools {
|
|
4
|
+
private pica;
|
|
5
|
+
private exportTools;
|
|
6
|
+
constructor(pica: PicaClient);
|
|
7
|
+
getTools(): Array<{
|
|
8
|
+
definition: ToolDefinition;
|
|
9
|
+
executor: ToolExecutor;
|
|
10
|
+
}>;
|
|
11
|
+
private carPreview;
|
|
12
|
+
private upload;
|
|
13
|
+
private download;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=app-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tools.d.ts","sourceRoot":"","sources":["../../src/tools/app-tools.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,cAAc,EACd,YAAY,EAGb,MAAM,YAAY,CAAC;AAgCpB,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,WAAW,CAAc;gBAErB,IAAI,EAAE,UAAU;IAK5B,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YAoK3D,UAAU;YAuEV,MAAM;YAsGN,QAAQ;CAyCvB"}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any -- ToolExecutor signature uses Record<string, any> */
|
|
3
|
+
/**
|
|
4
|
+
* MCP App Tools — tools with _meta.ui for interactive iframe rendering.
|
|
5
|
+
*
|
|
6
|
+
* ADR-152: scope reduced to two generic cards (pica_upload, pica_download).
|
|
7
|
+
* ADR-200 Phase 1: portable upload sessions for non-Apps clients.
|
|
8
|
+
* - MCP Apps clients: render the iframe via _meta.ui.resourceUri (unchanged).
|
|
9
|
+
* - Clients with capabilities.elicitation.url: receive an elicitation/create
|
|
10
|
+
* url request pointing at the workspace upload page.
|
|
11
|
+
* - All clients: response includes a `resource_link` content block as the
|
|
12
|
+
* universal floor — every MCP client can render or open it.
|
|
13
|
+
*/
|
|
14
|
+
import { randomUUID } from "node:crypto";
|
|
15
|
+
import { ExportTools } from "./exports.js";
|
|
16
|
+
import { clientSupportsUrlElicitation } from "@withpica/mcp-utils";
|
|
17
|
+
const DEFAULT_PICA_API_URL = "https://withpica.com/api";
|
|
18
|
+
/**
|
|
19
|
+
* Derive the user-facing web base URL from the configured MCP API URL.
|
|
20
|
+
* `https://withpica.com/api` → `https://withpica.com`.
|
|
21
|
+
*
|
|
22
|
+
* Centralised so the elicitation URL and the resource_link uri agree.
|
|
23
|
+
* ADR-200 Phase 1.5 will swap this for a per-session JWT-bound URL on
|
|
24
|
+
* `connect.withpica.com/upload/<token>`. For now we point at the
|
|
25
|
+
* existing authenticated workspace upload affordance — already shipped
|
|
26
|
+
* behind session auth, no new auth surface required.
|
|
27
|
+
*/
|
|
28
|
+
function deriveWebBaseUrl() {
|
|
29
|
+
const apiUrl = process.env.PICA_API_URL || DEFAULT_PICA_API_URL;
|
|
30
|
+
// Strip trailing /api or /api/ — leaves the user-facing origin.
|
|
31
|
+
const trimmed = apiUrl.replace(/\/api\/?$/, "");
|
|
32
|
+
return trimmed || apiUrl;
|
|
33
|
+
}
|
|
34
|
+
function formatBytes(bytes) {
|
|
35
|
+
if (bytes == null || isNaN(bytes))
|
|
36
|
+
return "";
|
|
37
|
+
if (bytes < 1024)
|
|
38
|
+
return `${bytes} B`;
|
|
39
|
+
if (bytes < 1024 * 1024)
|
|
40
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
41
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
42
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
43
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
|
|
44
|
+
}
|
|
45
|
+
export class AppTools {
|
|
46
|
+
pica;
|
|
47
|
+
exportTools;
|
|
48
|
+
constructor(pica) {
|
|
49
|
+
this.pica = pica;
|
|
50
|
+
this.exportTools = new ExportTools(pica);
|
|
51
|
+
}
|
|
52
|
+
getTools() {
|
|
53
|
+
return [
|
|
54
|
+
{
|
|
55
|
+
definition: {
|
|
56
|
+
name: "pica_upload",
|
|
57
|
+
description: "Open a file upload card for the user to drop files in. Use when the user " +
|
|
58
|
+
"has files on their device that PICA needs — audio, photos, documents, stems, " +
|
|
59
|
+
"session files, anything. Returns metadata for each uploaded file " +
|
|
60
|
+
"(id, url, mime_type, size) so you can link them to works, recordings, " +
|
|
61
|
+
"assets, agreements, or wherever they belong. " +
|
|
62
|
+
"Portable across clients. MCP Apps " +
|
|
63
|
+
"clients (Claude Desktop, Claude.ai web, Cursor, VS Code MCP) render the " +
|
|
64
|
+
"iframe in-chat. Other clients (ChatGPT, Gemini) receive a resource_link " +
|
|
65
|
+
"to a JWT-bound /upload/<token> URL scoped to the caller's org with a " +
|
|
66
|
+
"10-minute TTL; clients advertising elicitation/create url additionally " +
|
|
67
|
+
"receive a server-issued consent prompt to open it. After completion, " +
|
|
68
|
+
"the agent learns about the new file via _meta.session_state.pending_uploads " +
|
|
69
|
+
"decrementing and a discovery_events row surfacing on the next inspect call. " +
|
|
70
|
+
"For programmatic uploads where you already have file details: " +
|
|
71
|
+
"call pica_upload_file + pica_upload_complete.",
|
|
72
|
+
workflows: "infrastructure",
|
|
73
|
+
inputSchema: {
|
|
74
|
+
type: "object",
|
|
75
|
+
properties: {
|
|
76
|
+
accept: {
|
|
77
|
+
type: "string",
|
|
78
|
+
enum: ["image", "audio", "video", "document", "any"],
|
|
79
|
+
description: "Filter the file picker. 'audio' routes through pica_audio_presigned_upload " +
|
|
80
|
+
"for automatic BPM/key analysis. Defaults to 'any'.",
|
|
81
|
+
},
|
|
82
|
+
purpose: {
|
|
83
|
+
type: "string",
|
|
84
|
+
description: "Human-readable hint shown in the card heading (e.g. 'session stems', " +
|
|
85
|
+
"'rights evidence', 'gear photos'). Does not affect how files are stored.",
|
|
86
|
+
},
|
|
87
|
+
max_files: {
|
|
88
|
+
type: "number",
|
|
89
|
+
description: "Maximum number of files. Defaults to unlimited.",
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
_meta: {
|
|
94
|
+
ui: { resourceUri: "ui://pica/upload" },
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
executor: this.upload.bind(this),
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
definition: {
|
|
101
|
+
name: "pica_download",
|
|
102
|
+
description: "Open a download card for a file PICA has produced. Use after any export " +
|
|
103
|
+
"tool (pica_export_catalog_csv, pica_export_catalog_asset_report, " +
|
|
104
|
+
"pica_export_industry_ready, pica_export_song_registration, pica_export_ai_consent, " +
|
|
105
|
+
"etc.) to deliver the file directly to the user's device. The card shows file " +
|
|
106
|
+
"name, size, type, and a download button. " +
|
|
107
|
+
"Portable across clients. MCP Apps clients render the iframe; " +
|
|
108
|
+
"other clients receive a `resource_link` content block pointing at the signed URL " +
|
|
109
|
+
"alongside the JSON envelope so the agent can present a normal click-to-download.",
|
|
110
|
+
workflows: "infrastructure",
|
|
111
|
+
inputSchema: {
|
|
112
|
+
type: "object",
|
|
113
|
+
properties: {
|
|
114
|
+
url: {
|
|
115
|
+
type: "string",
|
|
116
|
+
description: "Presigned download URL (required)",
|
|
117
|
+
},
|
|
118
|
+
filename: {
|
|
119
|
+
type: "string",
|
|
120
|
+
description: "Suggested filename for the download (required)",
|
|
121
|
+
},
|
|
122
|
+
mime_type: {
|
|
123
|
+
type: "string",
|
|
124
|
+
description: "MIME type (e.g. 'application/pdf', 'text/csv')",
|
|
125
|
+
},
|
|
126
|
+
size: {
|
|
127
|
+
type: "number",
|
|
128
|
+
description: "File size in bytes, if known",
|
|
129
|
+
},
|
|
130
|
+
description: {
|
|
131
|
+
type: "string",
|
|
132
|
+
description: "Short description of what the file contains",
|
|
133
|
+
},
|
|
134
|
+
expires_at: {
|
|
135
|
+
type: "string",
|
|
136
|
+
description: "ISO timestamp when the presigned URL expires. Card warns user if download isn't started before then.",
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
required: ["url", "filename"],
|
|
140
|
+
},
|
|
141
|
+
_meta: {
|
|
142
|
+
ui: { resourceUri: "ui://pica/download" },
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
executor: this.download.bind(this),
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
definition: {
|
|
149
|
+
name: "pica_car_preview",
|
|
150
|
+
description: "Generate a Catalog Asset Report (CAR) PDF/ZIP and deliver it via the download card. " +
|
|
151
|
+
"Thin orchestration wrapper around pica_export_catalog_asset_report — runs the same " +
|
|
152
|
+
"export then returns a download-shaped payload that renders " +
|
|
153
|
+
"in the ui://pica/download card. " +
|
|
154
|
+
"IMPORTANT: Before calling, confirm verbally with the user that the catalog data is " +
|
|
155
|
+
"accurate and they attest to its completeness. The 'lending' format is a " +
|
|
156
|
+
"legally-weighted export — the user must verbally attest before this tool is called. " +
|
|
157
|
+
"Attestation does not happen inside the card; it happens in conversation.",
|
|
158
|
+
workflows: "infrastructure",
|
|
159
|
+
inputSchema: {
|
|
160
|
+
type: "object",
|
|
161
|
+
properties: {
|
|
162
|
+
format: {
|
|
163
|
+
type: "string",
|
|
164
|
+
enum: ["assessment", "lending"],
|
|
165
|
+
description: "Stage of the export. 'assessment' is an internal/preview run; 'lending' is " +
|
|
166
|
+
"the legally-weighted version (requires verbal user attestation before calling). " +
|
|
167
|
+
"Defaults to 'assessment'.",
|
|
168
|
+
},
|
|
169
|
+
sections: {
|
|
170
|
+
type: "object",
|
|
171
|
+
description: "Which sections to include. Ownership is always included. Same shape as " +
|
|
172
|
+
"pica_export_catalog_asset_report.",
|
|
173
|
+
properties: {
|
|
174
|
+
valuation: {
|
|
175
|
+
type: "boolean",
|
|
176
|
+
description: "Include financial valuation section",
|
|
177
|
+
},
|
|
178
|
+
assets: {
|
|
179
|
+
type: "boolean",
|
|
180
|
+
description: "Include multimedia and production assets section",
|
|
181
|
+
},
|
|
182
|
+
agreements: {
|
|
183
|
+
type: "boolean",
|
|
184
|
+
description: "Include agreements and licensing section",
|
|
185
|
+
},
|
|
186
|
+
intelligence: {
|
|
187
|
+
type: "boolean",
|
|
188
|
+
description: "Include market intelligence section",
|
|
189
|
+
},
|
|
190
|
+
audio: {
|
|
191
|
+
type: "boolean",
|
|
192
|
+
description: "Include audio analysis section",
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
_meta: {
|
|
199
|
+
ui: { resourceUri: "ui://pica/download" },
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
executor: this.carPreview.bind(this),
|
|
203
|
+
},
|
|
204
|
+
];
|
|
205
|
+
}
|
|
206
|
+
async carPreview(args) {
|
|
207
|
+
const format = args.format ?? "assessment";
|
|
208
|
+
// Reuse the subscription-gated executor from ExportTools so billing-gate
|
|
209
|
+
// semantics stay in one place.
|
|
210
|
+
const carTool = this.exportTools
|
|
211
|
+
.getTools()
|
|
212
|
+
.find((t) => t.definition.name === "pica_export_catalog_asset_report");
|
|
213
|
+
if (!carTool) {
|
|
214
|
+
throw new Error("pica_export_catalog_asset_report not found — ExportTools wiring changed");
|
|
215
|
+
}
|
|
216
|
+
// Credit-gate refusal throws before returning, so any non-throwing result
|
|
217
|
+
// here is a success envelope from formatSuccess(summary, data).
|
|
218
|
+
const carResult = await carTool.executor({ sections: args.sections });
|
|
219
|
+
let data = null;
|
|
220
|
+
try {
|
|
221
|
+
const text = carResult.content?.[0]?.text ?? "";
|
|
222
|
+
const parsed = JSON.parse(text);
|
|
223
|
+
data = parsed?.data ?? parsed;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
data = null;
|
|
227
|
+
}
|
|
228
|
+
if (!data || (!data.download_url && !data.url)) {
|
|
229
|
+
// Success envelope without a URL means the underlying tool changed its
|
|
230
|
+
// output shape — fail loudly instead of silently leaking the raw result.
|
|
231
|
+
throw new Error("pica_car_preview: underlying export returned success without a download URL");
|
|
232
|
+
}
|
|
233
|
+
const url = data.download_url ?? data.url;
|
|
234
|
+
const filename = data.filename ??
|
|
235
|
+
(url.split("/").pop()?.split("?")[0] || "catalog-asset-report.pdf");
|
|
236
|
+
const size = data.file_size_bytes ?? data.size ?? null;
|
|
237
|
+
const mime_type = data.mime_type ??
|
|
238
|
+
(filename.endsWith(".zip") ? "application/zip" : "application/pdf");
|
|
239
|
+
const expires_at = data.expires_at ?? null;
|
|
240
|
+
const workCount = data.work_count ?? data.works_included ?? null;
|
|
241
|
+
const description = `catalog asset report${workCount ? ` — ${workCount} works` : ""}, ${format} format`;
|
|
242
|
+
const sizeLabel = size != null ? ` (${formatBytes(size)})` : "";
|
|
243
|
+
const text_summary = `catalog asset report ready: ${filename}${sizeLabel}\nformat: ${format}\ndirect link: ${url}`;
|
|
244
|
+
return {
|
|
245
|
+
content: [
|
|
246
|
+
{
|
|
247
|
+
type: "text",
|
|
248
|
+
text: JSON.stringify({
|
|
249
|
+
text_summary,
|
|
250
|
+
file: {
|
|
251
|
+
url,
|
|
252
|
+
filename,
|
|
253
|
+
mime_type,
|
|
254
|
+
size,
|
|
255
|
+
description,
|
|
256
|
+
expires_at,
|
|
257
|
+
},
|
|
258
|
+
}),
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
async upload(args, ctx) {
|
|
264
|
+
const accept = args.accept ?? "any";
|
|
265
|
+
const purpose = args.purpose ?? null;
|
|
266
|
+
const max_files = args.max_files ?? null;
|
|
267
|
+
// ADR-208 Phase 2 (Path B per § Primitive C amendment, commit 5fef3204d):
|
|
268
|
+
// server-side JWT mint via pica.uploads.createSession. The PICA backend
|
|
269
|
+
// resolves the caller's org/user from auth, mints an HS256 JWT bound
|
|
270
|
+
// to {orgId, userId, purpose, acceptFilter, exp ≈ now + 10min},
|
|
271
|
+
// atomically increments organisations.pending_uploads_count, and
|
|
272
|
+
// returns the URL. The signing secret never leaves the backend; the
|
|
273
|
+
// S3 storage key is computed at upload time from claims.orgId so a
|
|
274
|
+
// valid signature attests to the org binding without needing a
|
|
275
|
+
// tamper-target `bucketKey` claim.
|
|
276
|
+
//
|
|
277
|
+
// Fail-soft: if createSession fails (network blip, route 5xx, etc.) we
|
|
278
|
+
// fall back to the legacy workspace URL so the user can still upload
|
|
279
|
+
// manually. The agent surfaces the failure in textSummary.
|
|
280
|
+
let uploadUrl;
|
|
281
|
+
let sessionError = null;
|
|
282
|
+
try {
|
|
283
|
+
const session = await this.pica.uploads.createSession({
|
|
284
|
+
purpose,
|
|
285
|
+
acceptFilter: accept,
|
|
286
|
+
maxFiles: max_files,
|
|
287
|
+
});
|
|
288
|
+
uploadUrl = session.url;
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
sessionError =
|
|
292
|
+
err instanceof Error ? err.message : "upload session mint failed";
|
|
293
|
+
uploadUrl = `${deriveWebBaseUrl()}/workspace`;
|
|
294
|
+
}
|
|
295
|
+
const acceptLabel = accept === "any"
|
|
296
|
+
? "files"
|
|
297
|
+
: `${accept} file${accept === "audio" ? "s" : "s"}`;
|
|
298
|
+
const textSummary = sessionError
|
|
299
|
+
? `ready to receive ${acceptLabel}. Couldn't mint a scoped upload session (${sessionError}); falling back to ${uploadUrl} — please open the workspace and upload manually.`
|
|
300
|
+
: `ready to receive ${acceptLabel} — drop them here in a PICA Apps client, or open ${uploadUrl} to upload from a browser. Link expires in 10 minutes.`;
|
|
301
|
+
// Universal floor: every MCP client can show a resource_link, so it
|
|
302
|
+
// ships in every response regardless of capability detection. The
|
|
303
|
+
// text envelope keeps the existing config payload for MCP Apps
|
|
304
|
+
// clients that read it from `content[0].text`.
|
|
305
|
+
const resourceLink = {
|
|
306
|
+
type: "resource_link",
|
|
307
|
+
uri: uploadUrl,
|
|
308
|
+
name: purpose ? `Upload ${purpose}` : "Upload to PICA",
|
|
309
|
+
description: accept === "any"
|
|
310
|
+
? "Open the PICA workspace to drop files into your catalog."
|
|
311
|
+
: `Open the PICA workspace to drop ${accept} files into your catalog.`,
|
|
312
|
+
mimeType: "text/html",
|
|
313
|
+
};
|
|
314
|
+
const baseContent = [
|
|
315
|
+
{
|
|
316
|
+
type: "text",
|
|
317
|
+
text: JSON.stringify({
|
|
318
|
+
text_summary: textSummary,
|
|
319
|
+
config: { accept, purpose, max_files },
|
|
320
|
+
upload_url: uploadUrl,
|
|
321
|
+
}),
|
|
322
|
+
},
|
|
323
|
+
resourceLink,
|
|
324
|
+
];
|
|
325
|
+
// Headline path: clients that advertise `capabilities.elicitation.url`
|
|
326
|
+
// get a server-issued elicitation/create request pointing at the
|
|
327
|
+
// upload page. The capability gate (ADR-200 helper) is mandatory —
|
|
328
|
+
// calling elicitInput against a non-supporter throws synchronously.
|
|
329
|
+
if (clientSupportsUrlElicitation(ctx?.server)) {
|
|
330
|
+
try {
|
|
331
|
+
await ctx.server.elicitInput({
|
|
332
|
+
mode: "url",
|
|
333
|
+
url: uploadUrl,
|
|
334
|
+
elicitationId: `pica-upload-${randomUUID()}`,
|
|
335
|
+
message: purpose != null
|
|
336
|
+
? `Open this URL to upload ${purpose}.`
|
|
337
|
+
: "Open this URL to upload files to PICA.",
|
|
338
|
+
}, { timeout: 60_000 });
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
// The user declined / cancelled / the elicitation timed out.
|
|
342
|
+
// The resource_link in the response below remains usable, so
|
|
343
|
+
// we degrade silently rather than fail the tool.
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return { content: baseContent };
|
|
347
|
+
}
|
|
348
|
+
async download(args) {
|
|
349
|
+
const url = args.url;
|
|
350
|
+
const filename = args.filename;
|
|
351
|
+
const mime_type = args.mime_type ?? "application/octet-stream";
|
|
352
|
+
const size = args.size ?? null;
|
|
353
|
+
const description = args.description ?? null;
|
|
354
|
+
const expires_at = args.expires_at ?? null;
|
|
355
|
+
const sizeLabel = size != null ? ` (${formatBytes(size)})` : "";
|
|
356
|
+
const textSummary = `download ready: ${filename}${sizeLabel}\ndirect link: ${url}`;
|
|
357
|
+
// ADR-200 Phase 1 universal floor: the signed download URL ships as a
|
|
358
|
+
// resource_link content block alongside the existing text envelope.
|
|
359
|
+
// Every MCP client can render or open it; MCP Apps clients still
|
|
360
|
+
// pick up the iframe via _meta.ui.resourceUri unchanged.
|
|
361
|
+
return {
|
|
362
|
+
content: [
|
|
363
|
+
{
|
|
364
|
+
type: "text",
|
|
365
|
+
text: JSON.stringify({
|
|
366
|
+
text_summary: textSummary,
|
|
367
|
+
file: {
|
|
368
|
+
url,
|
|
369
|
+
filename,
|
|
370
|
+
mime_type,
|
|
371
|
+
size,
|
|
372
|
+
description,
|
|
373
|
+
expires_at,
|
|
374
|
+
},
|
|
375
|
+
}),
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
type: "resource_link",
|
|
379
|
+
uri: url,
|
|
380
|
+
name: filename,
|
|
381
|
+
description: description ?? `Download ${filename}`,
|
|
382
|
+
mimeType: mime_type,
|
|
383
|
+
},
|
|
384
|
+
],
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=app-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tools.js","sourceRoot":"","sources":["../../src/tools/app-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Physical Assets Tools - MCP tools for managing equipment, instruments, and studio gear
|
|
3
|
+
*/
|
|
4
|
+
import { PicaClient } from "@withpica/mcp-sdk";
|
|
5
|
+
import { ToolDefinition, ToolExecutor } from "./index.js";
|
|
6
|
+
export declare class AssetsTools {
|
|
7
|
+
private pica;
|
|
8
|
+
constructor(pica: PicaClient);
|
|
9
|
+
getTools(): Array<{
|
|
10
|
+
definition: ToolDefinition;
|
|
11
|
+
executor: ToolExecutor;
|
|
12
|
+
}>;
|
|
13
|
+
private listAssets;
|
|
14
|
+
private inspectAsset;
|
|
15
|
+
private createAsset;
|
|
16
|
+
private updateAsset;
|
|
17
|
+
private deleteAsset;
|
|
18
|
+
private assetStats;
|
|
19
|
+
private assetExport;
|
|
20
|
+
private linkAssetToWork;
|
|
21
|
+
private linkAssetToRecording;
|
|
22
|
+
private unlinkWorkAsset;
|
|
23
|
+
private unlinkRecordingAsset;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/tools/assets.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAatE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YA8U3D,UAAU;YAWV,YAAY;YAkHZ,WAAW;YAOX,WAAW;YAQX,WAAW;YAOX,UAAU;YAOV,WAAW;YASX,eAAe;YAef,oBAAoB;YAepB,eAAe;YAYf,oBAAoB;CAWnC"}
|