@withpica/mcp-server 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +305 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +33 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/pica-sdk.d.ts +1162 -0
- package/dist/pica-sdk.d.ts.map +1 -0
- package/dist/pica-sdk.js +1371 -0
- package/dist/pica-sdk.js.map +1 -0
- package/dist/prompts/index.d.ts +78 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +513 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +64 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +310 -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 +67 -0
- package/dist/resources/llms-primer.js.map +1 -0
- package/dist/server.d.ts +27 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +140 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/agreement-types.d.ts +37 -0
- package/dist/tools/agreement-types.d.ts.map +1 -0
- package/dist/tools/agreement-types.js +579 -0
- package/dist/tools/agreement-types.js.map +1 -0
- package/dist/tools/agreements.d.ts +21 -0
- package/dist/tools/agreements.d.ts.map +1 -0
- package/dist/tools/agreements.js +328 -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 +126 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/assets.d.ts +23 -0
- package/dist/tools/assets.d.ts.map +1 -0
- package/dist/tools/assets.js +220 -0
- package/dist/tools/assets.js.map +1 -0
- package/dist/tools/audio-files.d.ts +21 -0
- package/dist/tools/audio-files.d.ts.map +1 -0
- package/dist/tools/audio-files.js +358 -0
- package/dist/tools/audio-files.js.map +1 -0
- package/dist/tools/bulk.d.ts +16 -0
- package/dist/tools/bulk.d.ts.map +1 -0
- package/dist/tools/bulk.js +82 -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 +69 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/collaborators.d.ts +17 -0
- package/dist/tools/collaborators.d.ts.map +1 -0
- package/dist/tools/collaborators.js +133 -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 +86 -0
- package/dist/tools/comparisons.js.map +1 -0
- package/dist/tools/credits.d.ts +17 -0
- package/dist/tools/credits.d.ts.map +1 -0
- package/dist/tools/credits.js +136 -0
- package/dist/tools/credits.js.map +1 -0
- package/dist/tools/dashboard.d.ts +20 -0
- package/dist/tools/dashboard.d.ts.map +1 -0
- package/dist/tools/dashboard.js +156 -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 +108 -0
- package/dist/tools/directory.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 +66 -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 +38 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/duplicates.d.ts +16 -0
- package/dist/tools/duplicates.d.ts.map +1 -0
- package/dist/tools/duplicates.js +72 -0
- package/dist/tools/duplicates.js.map +1 -0
- package/dist/tools/enrichment.d.ts +23 -0
- package/dist/tools/enrichment.d.ts.map +1 -0
- package/dist/tools/enrichment.js +207 -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 +155 -0
- package/dist/tools/exports.js.map +1 -0
- package/dist/tools/health.d.ts +17 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +69 -0
- package/dist/tools/health.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 +191 -0
- package/dist/tools/import-documents.js.map +1 -0
- package/dist/tools/import.d.ts +29 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +404 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/index.d.ts +48 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +394 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/integrations.d.ts +15 -0
- package/dist/tools/integrations.d.ts.map +1 -0
- package/dist/tools/integrations.js +102 -0
- package/dist/tools/integrations.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 +121 -0
- package/dist/tools/memory.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 +293 -0
- package/dist/tools/multimedia.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 +126 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/notifications.d.ts +17 -0
- package/dist/tools/notifications.d.ts.map +1 -0
- package/dist/tools/notifications.js +117 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/tools/people.d.ts +53 -0
- package/dist/tools/people.d.ts.map +1 -0
- package/dist/tools/people.js +534 -0
- package/dist/tools/people.js.map +1 -0
- package/dist/tools/pica-score.d.ts +15 -0
- package/dist/tools/pica-score.d.ts.map +1 -0
- package/dist/tools/pica-score.js +30 -0
- package/dist/tools/pica-score.js.map +1 -0
- package/dist/tools/projects.d.ts +19 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +142 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/purchases.d.ts +15 -0
- package/dist/tools/purchases.d.ts.map +1 -0
- package/dist/tools/purchases.js +65 -0
- package/dist/tools/purchases.js.map +1 -0
- package/dist/tools/recordings.d.ts +41 -0
- package/dist/tools/recordings.d.ts.map +1 -0
- package/dist/tools/recordings.js +293 -0
- package/dist/tools/recordings.js.map +1 -0
- package/dist/tools/registration.d.ts +16 -0
- package/dist/tools/registration.d.ts.map +1 -0
- package/dist/tools/registration.js +52 -0
- package/dist/tools/registration.js.map +1 -0
- package/dist/tools/releases.d.ts +18 -0
- package/dist/tools/releases.d.ts.map +1 -0
- package/dist/tools/releases.js +138 -0
- package/dist/tools/releases.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 +263 -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 +117 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/send.d.ts +18 -0
- package/dist/tools/send.d.ts.map +1 -0
- package/dist/tools/send.js +189 -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 +107 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/settings.d.ts +18 -0
- package/dist/tools/settings.d.ts.map +1 -0
- package/dist/tools/settings.js +98 -0
- package/dist/tools/settings.js.map +1 -0
- package/dist/tools/share-links.d.ts +19 -0
- package/dist/tools/share-links.d.ts.map +1 -0
- package/dist/tools/share-links.js +126 -0
- package/dist/tools/share-links.js.map +1 -0
- package/dist/tools/split-sheets.d.ts +24 -0
- package/dist/tools/split-sheets.d.ts.map +1 -0
- package/dist/tools/split-sheets.js +189 -0
- package/dist/tools/split-sheets.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 +139 -0
- package/dist/tools/team.js.map +1 -0
- package/dist/tools/telegram.d.ts +20 -0
- package/dist/tools/telegram.d.ts.map +1 -0
- package/dist/tools/telegram.js +94 -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 +159 -0
- package/dist/tools/uploads.js.map +1 -0
- package/dist/tools/works.d.ts +53 -0
- package/dist/tools/works.d.ts.map +1 -0
- package/dist/tools/works.js +517 -0
- package/dist/tools/works.js.map +1 -0
- package/dist/utils/credit-gate.d.ts +17 -0
- package/dist/utils/credit-gate.d.ts.map +1 -0
- package/dist/utils/credit-gate.js +111 -0
- package/dist/utils/credit-gate.js.map +1 -0
- package/dist/utils/errors.d.ts +29 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +114 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/formatting.d.ts +63 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +130 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/mpp.d.ts +78 -0
- package/dist/utils/mpp.d.ts.map +1 -0
- package/dist/utils/mpp.js +136 -0
- package/dist/utils/mpp.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
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 (6 tools)**
|
|
43
|
+
|
|
44
|
+
- `pica_recordings_list` - List recordings
|
|
45
|
+
- `pica_recordings_get` - Get recording details
|
|
46
|
+
- `pica_recordings_create` - Create new recording
|
|
47
|
+
- `pica_recordings_update` - Update recording
|
|
48
|
+
- `pica_recordings_delete` - Delete recording
|
|
49
|
+
- `pica_recordings_by_work` - Get recordings of a work
|
|
50
|
+
|
|
51
|
+
**Search & Analytics (2 tools)**
|
|
52
|
+
|
|
53
|
+
- `pica_search_all` - Search across all entities
|
|
54
|
+
- `pica_catalog_stats` - Get catalog statistics
|
|
55
|
+
|
|
56
|
+
### 4 Data Resources
|
|
57
|
+
|
|
58
|
+
Read-only access to catalog data:
|
|
59
|
+
|
|
60
|
+
- `works://list` - All works
|
|
61
|
+
- `people://list` - All people
|
|
62
|
+
- `recordings://list` - All recordings
|
|
63
|
+
- `catalog://stats` - Catalog statistics
|
|
64
|
+
|
|
65
|
+
### 4 Workflow Prompts
|
|
66
|
+
|
|
67
|
+
Pre-configured prompts for common tasks:
|
|
68
|
+
|
|
69
|
+
- `analyze-catalog` - Comprehensive catalog analysis
|
|
70
|
+
- `find-duplicates` - Find duplicate entries
|
|
71
|
+
- `enrich-metadata` - Identify enrichment opportunities
|
|
72
|
+
- `verify-works` - Review unverified works
|
|
73
|
+
|
|
74
|
+
## Installation
|
|
75
|
+
|
|
76
|
+
### NPM (Recommended)
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm install -g @withpica/mcp-server
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### From Source
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
cd mcp-server
|
|
86
|
+
npm install
|
|
87
|
+
npm run build
|
|
88
|
+
npm link
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Configuration
|
|
92
|
+
|
|
93
|
+
### Get Your PICA API Key
|
|
94
|
+
|
|
95
|
+
1. Log into PICA at https://withpica.com
|
|
96
|
+
2. Go to Settings → API Keys
|
|
97
|
+
3. Generate a new API key
|
|
98
|
+
4. Copy the key for use below
|
|
99
|
+
|
|
100
|
+
### Claude Desktop Setup
|
|
101
|
+
|
|
102
|
+
Add to your Claude Desktop configuration file:
|
|
103
|
+
|
|
104
|
+
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
105
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"mcpServers": {
|
|
110
|
+
"pica": {
|
|
111
|
+
"command": "npx",
|
|
112
|
+
"args": ["-y", "@withpica/mcp-server"],
|
|
113
|
+
"env": {
|
|
114
|
+
"PICA_API_KEY": "your-api-key-here"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Other MCP-Compatible AI Assistants
|
|
122
|
+
|
|
123
|
+
The setup process is similar for any MCP-compatible tool:
|
|
124
|
+
|
|
125
|
+
1. Configure the MCP server command: `npx -y @withpica/mcp-server`
|
|
126
|
+
2. Set the `PICA_API_KEY` environment variable
|
|
127
|
+
3. The AI can now access all PICA tools and resources
|
|
128
|
+
|
|
129
|
+
## Usage Examples
|
|
130
|
+
|
|
131
|
+
### Example 1: List Your Works
|
|
132
|
+
|
|
133
|
+
**User**: "Show me my musical works"
|
|
134
|
+
|
|
135
|
+
**AI** uses: `pica_works_list`
|
|
136
|
+
|
|
137
|
+
**Result**: List of works with titles, ISWCs, verification status, etc.
|
|
138
|
+
|
|
139
|
+
### Example 2: Create a Work
|
|
140
|
+
|
|
141
|
+
**User**: "Create a new composition called 'Moonlight Sonata No. 2'"
|
|
142
|
+
|
|
143
|
+
**AI** uses: `pica_works_create` with appropriate parameters
|
|
144
|
+
|
|
145
|
+
**Result**: New work created with generated ID
|
|
146
|
+
|
|
147
|
+
### Example 3: Analyze Catalog
|
|
148
|
+
|
|
149
|
+
**User**: "Analyze my catalog"
|
|
150
|
+
|
|
151
|
+
**AI** uses: `analyze-catalog` prompt
|
|
152
|
+
|
|
153
|
+
**AI calls**:
|
|
154
|
+
|
|
155
|
+
- `pica_catalog_stats` - Get statistics
|
|
156
|
+
- `pica_works_list` - Review works
|
|
157
|
+
- `pica_people_list` - Review people
|
|
158
|
+
|
|
159
|
+
**Result**: Comprehensive analysis with insights and recommendations
|
|
160
|
+
|
|
161
|
+
### Example 4: Find Duplicates
|
|
162
|
+
|
|
163
|
+
**User**: "Find duplicate entries"
|
|
164
|
+
|
|
165
|
+
**AI** uses: `find-duplicates` prompt
|
|
166
|
+
|
|
167
|
+
**AI calls**:
|
|
168
|
+
|
|
169
|
+
- `pica_works_list` - Get all works
|
|
170
|
+
- `pica_people_list` - Get all people
|
|
171
|
+
|
|
172
|
+
**Result**: List of potential duplicates with merge recommendations
|
|
173
|
+
|
|
174
|
+
### Example 5: Enrich Metadata
|
|
175
|
+
|
|
176
|
+
**User**: "Enrich Mozart's profile from ISNI"
|
|
177
|
+
|
|
178
|
+
**AI** uses: `pica_people_enrich_isni` with person ID and ISNI
|
|
179
|
+
|
|
180
|
+
**Result**: Person record updated with enriched data from ISNI
|
|
181
|
+
|
|
182
|
+
## Use Cases
|
|
183
|
+
|
|
184
|
+
### For Catalog Managers
|
|
185
|
+
|
|
186
|
+
- "Show me all unverified works"
|
|
187
|
+
- "Find duplicate entries"
|
|
188
|
+
- "List works missing ISWC codes"
|
|
189
|
+
- "Enrich all people from ISNI"
|
|
190
|
+
|
|
191
|
+
### For Data Analysis
|
|
192
|
+
|
|
193
|
+
- "What's the average duration of my compositions?"
|
|
194
|
+
- "Who are my most prolific composers?"
|
|
195
|
+
- "Which works have the most recordings?"
|
|
196
|
+
- "Show me catalog statistics"
|
|
197
|
+
|
|
198
|
+
### For Enrichment
|
|
199
|
+
|
|
200
|
+
- "Find all people that could be enriched from MusicBrainz"
|
|
201
|
+
- "Suggest ISNI matches for unverified artists"
|
|
202
|
+
- "Which works are missing metadata?"
|
|
203
|
+
|
|
204
|
+
### For Bulk Operations
|
|
205
|
+
|
|
206
|
+
- "Create works from this list"
|
|
207
|
+
- "Verify all completed works"
|
|
208
|
+
- "Delete test entries"
|
|
209
|
+
|
|
210
|
+
## Environment Variables
|
|
211
|
+
|
|
212
|
+
- `PICA_API_KEY` (required) - Your PICA API key
|
|
213
|
+
- `PICA_API_URL` (optional) - API base URL (default: https://withpica.com/api)
|
|
214
|
+
- `DEBUG` (optional) - Enable debug logging (set to 'true' or '1')
|
|
215
|
+
|
|
216
|
+
## Development
|
|
217
|
+
|
|
218
|
+
### Build
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
npm run build
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Development Mode
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
npm run dev
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Local Testing
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
PICA_API_KEY=your-key npm run dev
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Troubleshooting
|
|
237
|
+
|
|
238
|
+
### "PICA_API_KEY environment variable is required"
|
|
239
|
+
|
|
240
|
+
Make sure you've set the API key in your MCP server configuration:
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"env": {
|
|
245
|
+
"PICA_API_KEY": "your-actual-api-key"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### "Authentication failed"
|
|
251
|
+
|
|
252
|
+
- Verify your API key is correct
|
|
253
|
+
- Check that the API key hasn't been revoked
|
|
254
|
+
- Generate a new API key if needed
|
|
255
|
+
|
|
256
|
+
### Tools Not Showing Up
|
|
257
|
+
|
|
258
|
+
1. Restart your AI assistant after configuring the MCP server
|
|
259
|
+
2. Check the MCP server logs for errors
|
|
260
|
+
3. Verify the configuration file syntax is correct
|
|
261
|
+
|
|
262
|
+
### Connection Issues
|
|
263
|
+
|
|
264
|
+
- Ensure you have an internet connection
|
|
265
|
+
- Check that https://withpica.com is accessible
|
|
266
|
+
- Verify no firewall is blocking the connection
|
|
267
|
+
|
|
268
|
+
## Architecture
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
MCP Server for PICA
|
|
272
|
+
├── Protocol Handler (MCP standard)
|
|
273
|
+
├── Authentication (API key)
|
|
274
|
+
├── Tools (24 AI-callable functions)
|
|
275
|
+
│ ├── Works Management (8)
|
|
276
|
+
│ ├── People Management (8)
|
|
277
|
+
│ ├── Recordings Management (6)
|
|
278
|
+
│ └── Search & Analytics (2)
|
|
279
|
+
├── Resources (4 data providers)
|
|
280
|
+
└── Prompts (4 workflows)
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Security
|
|
284
|
+
|
|
285
|
+
- All requests require a valid PICA API key
|
|
286
|
+
- API keys are transmitted securely over HTTPS
|
|
287
|
+
- Data access is scoped to your organization
|
|
288
|
+
- No data is stored by the MCP server
|
|
289
|
+
|
|
290
|
+
## Support
|
|
291
|
+
|
|
292
|
+
- **Documentation**: https://docs.withpica.com
|
|
293
|
+
- **Issues**: https://github.com/withpica/pica/issues
|
|
294
|
+
- **Email**: support@withpica.com
|
|
295
|
+
|
|
296
|
+
## License
|
|
297
|
+
|
|
298
|
+
MIT
|
|
299
|
+
|
|
300
|
+
## Credits
|
|
301
|
+
|
|
302
|
+
Built with:
|
|
303
|
+
|
|
304
|
+
- [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) - MCP SDK
|
|
305
|
+
- [@withpica/sdk](https://www.npmjs.com/package/@withpica/sdk) - PICA TypeScript SDK
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Configuration
|
|
3
|
+
*/
|
|
4
|
+
export interface ServerConfig {
|
|
5
|
+
/**
|
|
6
|
+
* PICA API key for authentication
|
|
7
|
+
*/
|
|
8
|
+
picaApiKey: string;
|
|
9
|
+
/**
|
|
10
|
+
* PICA API base URL
|
|
11
|
+
*/
|
|
12
|
+
picaApiUrl: string;
|
|
13
|
+
/**
|
|
14
|
+
* Server name shown to AI assistants
|
|
15
|
+
*/
|
|
16
|
+
serverName: string;
|
|
17
|
+
/**
|
|
18
|
+
* Server version
|
|
19
|
+
*/
|
|
20
|
+
version: string;
|
|
21
|
+
/**
|
|
22
|
+
* Enable debug logging
|
|
23
|
+
*/
|
|
24
|
+
debug: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Load configuration from environment variables
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadConfig(): ServerConfig;
|
|
30
|
+
/**
|
|
31
|
+
* Validate configuration
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateConfig(config: ServerConfig): void;
|
|
34
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAkBzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAQzD"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Configuration
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Load configuration from environment variables
|
|
6
|
+
*/
|
|
7
|
+
export function loadConfig() {
|
|
8
|
+
const picaApiKey = process.env.PICA_API_KEY;
|
|
9
|
+
if (!picaApiKey) {
|
|
10
|
+
throw new Error("PICA_API_KEY environment variable is required.\n" +
|
|
11
|
+
"Please set it to your PICA API key:\n" +
|
|
12
|
+
'export PICA_API_KEY="your-api-key-here"');
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
picaApiKey,
|
|
16
|
+
picaApiUrl: process.env.PICA_API_URL || "https://withpica.com/api",
|
|
17
|
+
serverName: "pica-mcp-server",
|
|
18
|
+
version: "2.1.0",
|
|
19
|
+
debug: process.env.DEBUG === "true" || process.env.DEBUG === "1",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate configuration
|
|
24
|
+
*/
|
|
25
|
+
export function validateConfig(config) {
|
|
26
|
+
if (!config.picaApiKey || config.picaApiKey.trim() === "") {
|
|
27
|
+
throw new Error("PICA API key cannot be empty");
|
|
28
|
+
}
|
|
29
|
+
if (!config.picaApiUrl || !config.picaApiUrl.startsWith("http")) {
|
|
30
|
+
throw new Error("Invalid PICA API URL");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAE5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,kDAAkD;YAChD,uCAAuC;YACvC,yCAAyC,CAC5C,CAAC;IACJ,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,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG;KACjE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,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.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* PICA MCP Server
|
|
4
|
+
* Entry point for the Model Context Protocol server
|
|
5
|
+
*/
|
|
6
|
+
import { loadConfig, validateConfig } from "./config.js";
|
|
7
|
+
import { PicaMcpServer } from "./server.js";
|
|
8
|
+
async function main() {
|
|
9
|
+
try {
|
|
10
|
+
// Load and validate configuration
|
|
11
|
+
const config = loadConfig();
|
|
12
|
+
validateConfig(config);
|
|
13
|
+
// Create and start server
|
|
14
|
+
const server = new PicaMcpServer(config);
|
|
15
|
+
await server.start();
|
|
16
|
+
// Handle graceful shutdown
|
|
17
|
+
process.on("SIGINT", async () => {
|
|
18
|
+
console.error("[MCP Server] Shutting down...");
|
|
19
|
+
await server.stop();
|
|
20
|
+
process.exit(0);
|
|
21
|
+
});
|
|
22
|
+
process.on("SIGTERM", async () => {
|
|
23
|
+
console.error("[MCP Server] Shutting down...");
|
|
24
|
+
await server.stop();
|
|
25
|
+
process.exit(0);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error("[MCP Server] Fatal error:", error instanceof Error ? error.message : String(error));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
main();
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;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,kCAAkC;QAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,0BAA0B;QAC1B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,2BAA2B;QAC3B,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"}
|