@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
package/README.md
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# PICA MCP Server
|
|
2
|
+
|
|
3
|
+
Model Context Protocol (MCP) server for the PICA Platform. Enables **any MCP-compatible AI assistant** to interact with your PICA music catalog.
|
|
4
|
+
|
|
5
|
+
## What is MCP?
|
|
6
|
+
|
|
7
|
+
The Model Context Protocol (MCP) is an open standard that enables AI assistants to securely access external data and functionality. With this MCP server, any MCP-compatible AI can interact with your PICA catalog.
|
|
8
|
+
|
|
9
|
+
## Compatible AI Assistants
|
|
10
|
+
|
|
11
|
+
- **Claude Desktop** - Anthropic's desktop AI assistant
|
|
12
|
+
- **ChatGPT** - OpenAI's assistant (when MCP support is available)
|
|
13
|
+
- **Custom AI tools** - Any application that implements the MCP protocol
|
|
14
|
+
- **Future AI assistants** - As more tools adopt MCP
|
|
15
|
+
|
|
16
|
+
## Features
|
|
17
|
+
|
|
18
|
+
### 24 AI-Callable Tools
|
|
19
|
+
|
|
20
|
+
**Works Management (8 tools)**
|
|
21
|
+
|
|
22
|
+
- `pica_works_list` - List musical works
|
|
23
|
+
- `pica_works_get` - Get work details
|
|
24
|
+
- `pica_works_create` - Create new work
|
|
25
|
+
- `pica_works_update` - Update work
|
|
26
|
+
- `pica_works_delete` - Delete work
|
|
27
|
+
- `pica_works_verify` - Verify work
|
|
28
|
+
- `pica_works_search` - Search works
|
|
29
|
+
- `pica_works_bulk_delete` - Delete multiple works
|
|
30
|
+
|
|
31
|
+
**People Management (8 tools)**
|
|
32
|
+
|
|
33
|
+
- `pica_people_list` - List people
|
|
34
|
+
- `pica_people_get` - Get person details
|
|
35
|
+
- `pica_people_create` - Create new person
|
|
36
|
+
- `pica_people_update` - Update person
|
|
37
|
+
- `pica_people_delete` - Delete person
|
|
38
|
+
- `pica_people_search` - Search people
|
|
39
|
+
- `pica_people_enrich_isni` - Enrich from ISNI
|
|
40
|
+
- `pica_people_enrich_musicbrainz` - Enrich from MusicBrainz
|
|
41
|
+
|
|
42
|
+
**Recordings Management (5 tools)**
|
|
43
|
+
|
|
44
|
+
- `pica_recordings_query` - List/search recordings; filter by `work_id` (replaces removed `pica_recordings_by_work`)
|
|
45
|
+
- `pica_recordings_inspect` - Get recording details (sections-based)
|
|
46
|
+
- `pica_recordings_create` - Create new recording
|
|
47
|
+
- `pica_recordings_update` - Update recording
|
|
48
|
+
- `pica_recordings_delete` - Delete recording
|
|
49
|
+
|
|
50
|
+
**Search & Analytics (2 tools)**
|
|
51
|
+
|
|
52
|
+
- `pica_search_all` - Search across all entities
|
|
53
|
+
- `pica_catalog_stats` - Get catalog statistics
|
|
54
|
+
|
|
55
|
+
### 4 Data Resources
|
|
56
|
+
|
|
57
|
+
Read-only access to catalog data:
|
|
58
|
+
|
|
59
|
+
- `works://list` - All works
|
|
60
|
+
- `people://list` - All people
|
|
61
|
+
- `recordings://list` - All recordings
|
|
62
|
+
- `catalog://stats` - Catalog statistics
|
|
63
|
+
|
|
64
|
+
### 4 Workflow Prompts
|
|
65
|
+
|
|
66
|
+
Pre-configured prompts for common tasks:
|
|
67
|
+
|
|
68
|
+
- `analyze-catalog` - Comprehensive catalog analysis
|
|
69
|
+
- `find-duplicates` - Find duplicate entries
|
|
70
|
+
- `enrich-metadata` - Identify enrichment opportunities
|
|
71
|
+
- `verify-works` - Review unverified works
|
|
72
|
+
|
|
73
|
+
## Installation
|
|
74
|
+
|
|
75
|
+
### NPM (Recommended)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npm install -g @withpica/mcp-server
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### From Source
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
cd mcp-server
|
|
85
|
+
npm install
|
|
86
|
+
npm run build
|
|
87
|
+
npm link
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Configuration
|
|
91
|
+
|
|
92
|
+
### Get Your PICA API Key
|
|
93
|
+
|
|
94
|
+
1. Log into PICA at https://withpica.com
|
|
95
|
+
2. Go to Settings → API Keys
|
|
96
|
+
3. Generate a new API key
|
|
97
|
+
4. Copy the key for use below
|
|
98
|
+
|
|
99
|
+
### Claude Desktop Setup
|
|
100
|
+
|
|
101
|
+
Add to your Claude Desktop configuration file:
|
|
102
|
+
|
|
103
|
+
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
104
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"mcpServers": {
|
|
109
|
+
"pica": {
|
|
110
|
+
"command": "npx",
|
|
111
|
+
"args": ["-y", "@withpica/mcp-server"],
|
|
112
|
+
"env": {
|
|
113
|
+
"PICA_API_KEY": "your-api-key-here"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Other MCP-Compatible AI Assistants
|
|
121
|
+
|
|
122
|
+
The setup process is similar for any MCP-compatible tool:
|
|
123
|
+
|
|
124
|
+
1. Configure the MCP server command: `npx -y @withpica/mcp-server`
|
|
125
|
+
2. Set the `PICA_API_KEY` environment variable
|
|
126
|
+
3. The AI can now access all PICA tools and resources
|
|
127
|
+
|
|
128
|
+
## Usage Examples
|
|
129
|
+
|
|
130
|
+
### Example 1: List Your Works
|
|
131
|
+
|
|
132
|
+
**User**: "Show me my musical works"
|
|
133
|
+
|
|
134
|
+
**AI** uses: `pica_works_list`
|
|
135
|
+
|
|
136
|
+
**Result**: List of works with titles, ISWCs, verification status, etc.
|
|
137
|
+
|
|
138
|
+
### Example 2: Create a Work
|
|
139
|
+
|
|
140
|
+
**User**: "Create a new composition called 'Moonlight Sonata No. 2'"
|
|
141
|
+
|
|
142
|
+
**AI** uses: `pica_works_create` with appropriate parameters
|
|
143
|
+
|
|
144
|
+
**Result**: New work created with generated ID
|
|
145
|
+
|
|
146
|
+
### Example 3: Analyze Catalog
|
|
147
|
+
|
|
148
|
+
**User**: "Analyze my catalog"
|
|
149
|
+
|
|
150
|
+
**AI** uses: `analyze-catalog` prompt
|
|
151
|
+
|
|
152
|
+
**AI calls**:
|
|
153
|
+
|
|
154
|
+
- `pica_catalog_stats` - Get statistics
|
|
155
|
+
- `pica_works_list` - Review works
|
|
156
|
+
- `pica_people_list` - Review people
|
|
157
|
+
|
|
158
|
+
**Result**: Comprehensive analysis with insights and recommendations
|
|
159
|
+
|
|
160
|
+
### Example 4: Find Duplicates
|
|
161
|
+
|
|
162
|
+
**User**: "Find duplicate entries"
|
|
163
|
+
|
|
164
|
+
**AI** uses: `find-duplicates` prompt
|
|
165
|
+
|
|
166
|
+
**AI calls**:
|
|
167
|
+
|
|
168
|
+
- `pica_works_list` - Get all works
|
|
169
|
+
- `pica_people_list` - Get all people
|
|
170
|
+
|
|
171
|
+
**Result**: List of potential duplicates with merge recommendations
|
|
172
|
+
|
|
173
|
+
### Example 5: Enrich Metadata
|
|
174
|
+
|
|
175
|
+
**User**: "Enrich Mozart's profile from ISNI"
|
|
176
|
+
|
|
177
|
+
**AI** uses: `pica_people_enrich_isni` with person ID and ISNI
|
|
178
|
+
|
|
179
|
+
**Result**: Person record updated with enriched data from ISNI
|
|
180
|
+
|
|
181
|
+
## Use Cases
|
|
182
|
+
|
|
183
|
+
### For Catalog Managers
|
|
184
|
+
|
|
185
|
+
- "Show me all unverified works"
|
|
186
|
+
- "Find duplicate entries"
|
|
187
|
+
- "List works missing ISWC codes"
|
|
188
|
+
- "Enrich all people from ISNI"
|
|
189
|
+
|
|
190
|
+
### For Data Analysis
|
|
191
|
+
|
|
192
|
+
- "What's the average duration of my compositions?"
|
|
193
|
+
- "Who are my most prolific composers?"
|
|
194
|
+
- "Which works have the most recordings?"
|
|
195
|
+
- "Show me catalog statistics"
|
|
196
|
+
|
|
197
|
+
### For Enrichment
|
|
198
|
+
|
|
199
|
+
- "Find all people that could be enriched from MusicBrainz"
|
|
200
|
+
- "Suggest ISNI matches for unverified artists"
|
|
201
|
+
- "Which works are missing metadata?"
|
|
202
|
+
|
|
203
|
+
### For Bulk Operations
|
|
204
|
+
|
|
205
|
+
- "Create works from this list"
|
|
206
|
+
- "Verify all completed works"
|
|
207
|
+
- "Delete test entries"
|
|
208
|
+
|
|
209
|
+
## Environment Variables
|
|
210
|
+
|
|
211
|
+
- `PICA_API_KEY` (required) - Your PICA API key
|
|
212
|
+
- `PICA_API_URL` (optional) - API base URL (default: https://withpica.com/api)
|
|
213
|
+
- `DEBUG` (optional) - Enable debug logging (set to 'true' or '1')
|
|
214
|
+
|
|
215
|
+
## Development
|
|
216
|
+
|
|
217
|
+
### Build
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
npm run build
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Development Mode
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
npm run dev
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Local Testing
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
PICA_API_KEY=your-key npm run dev
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Troubleshooting
|
|
236
|
+
|
|
237
|
+
### "PICA_API_KEY environment variable is required"
|
|
238
|
+
|
|
239
|
+
Make sure you've set the API key in your MCP server configuration:
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"env": {
|
|
244
|
+
"PICA_API_KEY": "your-actual-api-key"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### "Authentication failed"
|
|
250
|
+
|
|
251
|
+
- Verify your API key is correct
|
|
252
|
+
- Check that the API key hasn't been revoked
|
|
253
|
+
- Generate a new API key if needed
|
|
254
|
+
|
|
255
|
+
### Tools Not Showing Up
|
|
256
|
+
|
|
257
|
+
1. Restart your AI assistant after configuring the MCP server
|
|
258
|
+
2. Check the MCP server logs for errors
|
|
259
|
+
3. Verify the configuration file syntax is correct
|
|
260
|
+
|
|
261
|
+
### Connection Issues
|
|
262
|
+
|
|
263
|
+
- Ensure you have an internet connection
|
|
264
|
+
- Check that https://withpica.com is accessible
|
|
265
|
+
- Verify no firewall is blocking the connection
|
|
266
|
+
|
|
267
|
+
## Architecture
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
MCP Server for PICA
|
|
271
|
+
├── Protocol Handler (MCP standard)
|
|
272
|
+
├── Authentication (API key)
|
|
273
|
+
├── Tools (24 AI-callable functions)
|
|
274
|
+
│ ├── Works Management (8)
|
|
275
|
+
│ ├── People Management (8)
|
|
276
|
+
│ ├── Recordings Management (6)
|
|
277
|
+
│ └── Search & Analytics (2)
|
|
278
|
+
├── Resources (4 data providers)
|
|
279
|
+
└── Prompts (4 workflows)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Security
|
|
283
|
+
|
|
284
|
+
- All requests require a valid PICA API key
|
|
285
|
+
- API keys are transmitted securely over HTTPS
|
|
286
|
+
- Data access is scoped to your organization
|
|
287
|
+
- No data is stored by the MCP server
|
|
288
|
+
|
|
289
|
+
## Support
|
|
290
|
+
|
|
291
|
+
- **Documentation**: https://docs.withpica.com
|
|
292
|
+
- **Issues**: https://github.com/withpica/pica/issues
|
|
293
|
+
- **Email**: support@withpica.com
|
|
294
|
+
|
|
295
|
+
## License
|
|
296
|
+
|
|
297
|
+
MIT
|
|
298
|
+
|
|
299
|
+
## Credits
|
|
300
|
+
|
|
301
|
+
Built with:
|
|
302
|
+
|
|
303
|
+
- [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) - MCP SDK
|
|
304
|
+
- [@withpica/sdk](https://www.npmjs.com/package/@withpica/sdk) - PICA TypeScript SDK
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/apps/download.ts"],"names":[],"mappings":"AAgIA,eAAO,MAAM,aAAa,QAIzB,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
/**
|
|
3
|
+
* pica_download MCP App card — file delivery.
|
|
4
|
+
*
|
|
5
|
+
* Shows filename, mime_type, size, and an optional description, then a copper
|
|
6
|
+
* "download" button wired to app.downloadFile(). After dispatch the button
|
|
7
|
+
* flips to a "downloaded" state with a secondary "download again" action.
|
|
8
|
+
*
|
|
9
|
+
* DOM API only — never innerHTML.
|
|
10
|
+
*/
|
|
11
|
+
import { buildAppHtml } from "./shared.js";
|
|
12
|
+
const DOWNLOAD_BODY = `
|
|
13
|
+
<div class="stack gap-6">
|
|
14
|
+
<header>
|
|
15
|
+
<h1 class="heading heading-lg">download ready</h1>
|
|
16
|
+
<p class="text-secondary">your file is ready to save</p>
|
|
17
|
+
</header>
|
|
18
|
+
|
|
19
|
+
<div class="card-flat dl-file">
|
|
20
|
+
<div class="dl-icon" id="dl-icon">\u25CF</div>
|
|
21
|
+
<div class="dl-meta">
|
|
22
|
+
<div class="heading heading-sm" id="dl-filename">file</div>
|
|
23
|
+
<div class="text-tertiary" id="dl-sub" style="font-size: 12px; margin-top: 4px;"></div>
|
|
24
|
+
<div class="text-secondary" id="dl-description" style="font-size: 13px; margin-top: 8px; display: none;"></div>
|
|
25
|
+
<div class="text-tertiary" id="dl-expires" style="font-size: 11px; margin-top: 6px; display: none;"></div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="row" style="gap: 12px;">
|
|
30
|
+
<button class="btn-copper" id="dl-button">download</button>
|
|
31
|
+
<a class="btn-ghost" id="dl-fallback" href="#" target="_blank" rel="noopener">or open in browser</a>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<style>
|
|
36
|
+
.dl-file {
|
|
37
|
+
display: flex;
|
|
38
|
+
gap: 16px;
|
|
39
|
+
align-items: flex-start;
|
|
40
|
+
}
|
|
41
|
+
.dl-icon {
|
|
42
|
+
font-size: 32px;
|
|
43
|
+
color: var(--accent);
|
|
44
|
+
flex: 0 0 auto;
|
|
45
|
+
line-height: 1;
|
|
46
|
+
padding-top: 4px;
|
|
47
|
+
}
|
|
48
|
+
.dl-meta { flex: 1 1 auto; min-width: 0; }
|
|
49
|
+
#dl-filename { word-break: break-all; }
|
|
50
|
+
</style>
|
|
51
|
+
`;
|
|
52
|
+
const DOWNLOAD_JS = `
|
|
53
|
+
var dlState = { file: null };
|
|
54
|
+
|
|
55
|
+
function dlFormatBytes(bytes) {
|
|
56
|
+
if (bytes == null || isNaN(bytes)) return "";
|
|
57
|
+
if (bytes < 1024) return bytes + " B";
|
|
58
|
+
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
|
|
59
|
+
if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(1) + " MB";
|
|
60
|
+
return (bytes / (1024 * 1024 * 1024)).toFixed(2) + " GB";
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function dlRender() {
|
|
64
|
+
var f = dlState.file;
|
|
65
|
+
if (!f) return;
|
|
66
|
+
|
|
67
|
+
var filenameEl = document.getElementById("dl-filename");
|
|
68
|
+
if (filenameEl) filenameEl.textContent = f.filename;
|
|
69
|
+
|
|
70
|
+
var subParts = [];
|
|
71
|
+
if (f.mime_type) subParts.push(f.mime_type);
|
|
72
|
+
if (f.size) subParts.push(dlFormatBytes(f.size));
|
|
73
|
+
var subEl = document.getElementById("dl-sub");
|
|
74
|
+
if (subEl) subEl.textContent = subParts.join(" \u00B7 ");
|
|
75
|
+
|
|
76
|
+
if (f.description) {
|
|
77
|
+
var descEl = document.getElementById("dl-description");
|
|
78
|
+
if (descEl) {
|
|
79
|
+
descEl.textContent = f.description;
|
|
80
|
+
descEl.style.display = "block";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (f.expires_at) {
|
|
85
|
+
var expEl = document.getElementById("dl-expires");
|
|
86
|
+
if (expEl) {
|
|
87
|
+
expEl.textContent = "link expires " + f.expires_at;
|
|
88
|
+
expEl.style.display = "block";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
var fallback = document.getElementById("dl-fallback");
|
|
93
|
+
if (fallback) fallback.setAttribute("href", f.url);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function dlTriggerDownload() {
|
|
97
|
+
var f = dlState.file;
|
|
98
|
+
if (!f) return;
|
|
99
|
+
var btn = document.getElementById("dl-button");
|
|
100
|
+
|
|
101
|
+
if (app && typeof app.downloadFile === "function") {
|
|
102
|
+
try {
|
|
103
|
+
app.downloadFile({ url: f.url, filename: f.filename });
|
|
104
|
+
if (btn) {
|
|
105
|
+
btn.textContent = "download again";
|
|
106
|
+
btn.classList.remove("btn-copper");
|
|
107
|
+
btn.classList.add("btn-ghost");
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
} catch (err) {
|
|
111
|
+
console.warn("[pica_download] downloadFile failed:", err);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
window.onPicaToolResult = function (data) {
|
|
117
|
+
if (!data || !data.file) return;
|
|
118
|
+
dlState.file = data.file;
|
|
119
|
+
dlRender();
|
|
120
|
+
var btn = document.getElementById("dl-button");
|
|
121
|
+
if (btn) btn.addEventListener("click", dlTriggerDownload);
|
|
122
|
+
};
|
|
123
|
+
`;
|
|
124
|
+
export const DOWNLOAD_HTML = buildAppHtml("pica \u2014 download", DOWNLOAD_BODY, DOWNLOAD_JS);
|
|
125
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/apps/download.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCrB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CACvC,sBAAsB,EACtB,aAAa,EACb,WAAW,CACZ,CAAC"}
|