@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 @@
|
|
|
1
|
+
{"version":3,"file":"works.js","sourceRoot":"","sources":["../../src/tools/works.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@withpica/mcp-server",
|
|
3
|
+
"mcpName": "io.github.withpica/pica",
|
|
4
|
+
"version": "1.3.0",
|
|
5
|
+
"description": "MCP Server for PICA Platform - enables AI assistants to interact with PICA",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"pica-mcp": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"prebuild": "tsx scripts/bundle-apps.ts && tsx scripts/build-required-schemas.ts",
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"dev": "tsx src/index.ts",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
17
|
+
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
|
|
18
|
+
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage",
|
|
19
|
+
"lint:required-schemas": "tsx ../scripts/lint-required-schemas.ts",
|
|
20
|
+
"lint:agent-guide": "tsx ../scripts/lint-agent-guide.ts",
|
|
21
|
+
"prepublishOnly": "npm run build && tsx ../scripts/check-mcp-bundle.ts && tsx ../scripts/lint-mcp-tools.ts && npm run lint:required-schemas && npm run lint:agent-guide"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"mcp",
|
|
25
|
+
"model-context-protocol",
|
|
26
|
+
"pica",
|
|
27
|
+
"ai",
|
|
28
|
+
"assistant",
|
|
29
|
+
"claude",
|
|
30
|
+
"chatgpt"
|
|
31
|
+
],
|
|
32
|
+
"author": "PICA Platform",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
36
|
+
"@withpica/mcp-sdk": "^1.22.0",
|
|
37
|
+
"@withpica/mcp-utils": "^1.18.0",
|
|
38
|
+
"mppx": "^0.5.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@modelcontextprotocol/ext-apps": "^1.5.0",
|
|
42
|
+
"@types/jest": "^29.5.14",
|
|
43
|
+
"@types/node": "^20.10.0",
|
|
44
|
+
"@types/pg": "^8.11.0",
|
|
45
|
+
"jest": "^29.7.0",
|
|
46
|
+
"pg": "^8.13.0",
|
|
47
|
+
"ts-jest": "^29.4.5",
|
|
48
|
+
"tsx": "^4.7.0",
|
|
49
|
+
"typescript": "^5.3.3"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ADR-214 — generator for `required-schemas.generated.ts`.
|
|
5
|
+
*
|
|
6
|
+
* Reads three inputs:
|
|
7
|
+
* 1. ToolRegistry (instantiated from src) → tool inputSchemas
|
|
8
|
+
* 2. mcp-server/src/resources/required-schemas.source.ts → narrative + companion_calls
|
|
9
|
+
* 3. mcp-server/src/resources/schema-mirror.json → CHECK constraint enums
|
|
10
|
+
*
|
|
11
|
+
* Joins them and emits `mcp-server/src/resources/required-schemas.generated.ts`,
|
|
12
|
+
* a TypeScript module exporting `REQUIRED_SCHEMAS` consumed by ResourceRegistry.
|
|
13
|
+
*
|
|
14
|
+
* Determinism: object keys sorted alphabetically, arrays preserved in source
|
|
15
|
+
* order. Re-running with no source changes produces a byte-identical file.
|
|
16
|
+
*
|
|
17
|
+
* Wired into mcp-server/package.json as part of `prebuild` (after
|
|
18
|
+
* bundle-apps.ts). Runs via tsx; no build step required.
|
|
19
|
+
*
|
|
20
|
+
* Failure modes:
|
|
21
|
+
* - source.ts references a tool not in ToolRegistry → exit 1, name file to fix
|
|
22
|
+
* - companion_calls[].tool not in ToolRegistry → exit 1
|
|
23
|
+
* - enum_tables references missing table/column in mirror → exit 1
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
27
|
+
import { dirname, join } from "node:path";
|
|
28
|
+
import { fileURLToPath } from "node:url";
|
|
29
|
+
import {
|
|
30
|
+
REQUIRED_SCHEMAS_SOURCE,
|
|
31
|
+
type RequiredSchemaSource,
|
|
32
|
+
} from "../src/resources/required-schemas.source.js";
|
|
33
|
+
import { ToolRegistry, type ToolDefinition } from "../src/tools/index.js";
|
|
34
|
+
|
|
35
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
36
|
+
const __dirname = dirname(__filename);
|
|
37
|
+
const MCP_SERVER_ROOT = join(__dirname, "..");
|
|
38
|
+
const MIRROR_PATH = join(
|
|
39
|
+
MCP_SERVER_ROOT,
|
|
40
|
+
"src/resources/schema-mirror.json",
|
|
41
|
+
);
|
|
42
|
+
const OUTPUT_PATH = join(
|
|
43
|
+
MCP_SERVER_ROOT,
|
|
44
|
+
"src/resources/required-schemas.generated.ts",
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
interface SchemaMirror {
|
|
48
|
+
[table: string]: string[] | Record<string, string[]> | string | undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function loadMirror(): SchemaMirror {
|
|
52
|
+
const raw = readFileSync(MIRROR_PATH, "utf-8");
|
|
53
|
+
return JSON.parse(raw) as SchemaMirror;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function loadRegistry(): Map<string, ToolDefinition> {
|
|
57
|
+
const stubPica = {} as never;
|
|
58
|
+
const stubConfig = {
|
|
59
|
+
picaApiKey: "stub",
|
|
60
|
+
picaApiUrl: "https://stub.example.com/api",
|
|
61
|
+
serverName: "schema-generator",
|
|
62
|
+
version: "0.0.0",
|
|
63
|
+
debug: false,
|
|
64
|
+
lobbyMode: false,
|
|
65
|
+
credentialsPath: "",
|
|
66
|
+
discoveryMode: false,
|
|
67
|
+
} as never;
|
|
68
|
+
|
|
69
|
+
const registry = new ToolRegistry(
|
|
70
|
+
stubPica,
|
|
71
|
+
stubConfig,
|
|
72
|
+
() => {},
|
|
73
|
+
{ callerIdentity: "schema-generator", transport: "stdio" } as never,
|
|
74
|
+
() => {},
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const map = new Map<string, ToolDefinition>();
|
|
78
|
+
// ToolRegistry.tools is private but read-accessible from sibling code in
|
|
79
|
+
// the same workspace (matches existing pattern in scripts/lint-mcp-tools.ts).
|
|
80
|
+
const tools = (registry as unknown as {
|
|
81
|
+
tools: Map<string, { definition: ToolDefinition }>;
|
|
82
|
+
}).tools;
|
|
83
|
+
for (const [name, entry] of tools) {
|
|
84
|
+
map.set(name, entry.definition);
|
|
85
|
+
}
|
|
86
|
+
return map;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function fail(msg: string): never {
|
|
90
|
+
console.error(`[build-required-schemas] ERROR: ${msg}`);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function getRequiredAndProperties(
|
|
95
|
+
tools: Map<string, ToolDefinition>,
|
|
96
|
+
toolName: string,
|
|
97
|
+
source: string,
|
|
98
|
+
): { required: string[]; properties: string[] } {
|
|
99
|
+
const def = tools.get(toolName);
|
|
100
|
+
if (!def) {
|
|
101
|
+
fail(
|
|
102
|
+
`${source} references tool '${toolName}' which is not in ToolRegistry. ` +
|
|
103
|
+
`Edit mcp-server/src/resources/required-schemas.source.ts and remove or rename the reference.`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
const schema = def.inputSchema;
|
|
107
|
+
const required = Array.isArray(schema.required) ? [...schema.required] : [];
|
|
108
|
+
const properties = Object.keys(schema.properties ?? {});
|
|
109
|
+
return { required, properties };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function buildEnums(
|
|
113
|
+
mirror: SchemaMirror,
|
|
114
|
+
tables: RequiredSchemaSource["enum_tables"],
|
|
115
|
+
workflow: string,
|
|
116
|
+
): Record<string, string[]> {
|
|
117
|
+
if (!tables || tables.length === 0) return {};
|
|
118
|
+
const out: Record<string, string[]> = {};
|
|
119
|
+
for (const { table, columns } of tables) {
|
|
120
|
+
const tableEntry = mirror[table];
|
|
121
|
+
if (!tableEntry || typeof tableEntry !== "object" || Array.isArray(tableEntry)) {
|
|
122
|
+
fail(
|
|
123
|
+
`Workflow '${workflow}' references table '${table}' missing from schema-mirror.json. ` +
|
|
124
|
+
`Run \`tsx mcp-server/scripts/refresh-schema-mirror.ts\` against staging to regenerate.`,
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
const tableMap = tableEntry as Record<string, string[]>;
|
|
128
|
+
for (const col of columns) {
|
|
129
|
+
const values = tableMap[col];
|
|
130
|
+
if (!Array.isArray(values)) {
|
|
131
|
+
fail(
|
|
132
|
+
`Workflow '${workflow}' references ${table}.${col} missing from schema-mirror.json.`,
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
out[col] = [...values].sort();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function buildCompanion(
|
|
142
|
+
tools: Map<string, ToolDefinition>,
|
|
143
|
+
companion: RequiredSchemaSource["companion_calls"][number],
|
|
144
|
+
workflow: string,
|
|
145
|
+
): Record<string, unknown> {
|
|
146
|
+
// Verify the tool exists; we don't pull required[] from its inputSchema
|
|
147
|
+
// since companion_calls already declare what the call requires (often a
|
|
148
|
+
// wrapper/batch shape rather than the raw entity required-fields).
|
|
149
|
+
if (!tools.has(companion.tool)) {
|
|
150
|
+
fail(
|
|
151
|
+
`Workflow '${workflow}' companion '${companion.tool}' not in ToolRegistry. ` +
|
|
152
|
+
`Edit required-schemas.source.ts.`,
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
const out: Record<string, unknown> = {
|
|
156
|
+
tool: companion.tool,
|
|
157
|
+
when: companion.when,
|
|
158
|
+
required: companion.required,
|
|
159
|
+
};
|
|
160
|
+
if (companion.per_row_required) {
|
|
161
|
+
out.per_row_required = companion.per_row_required;
|
|
162
|
+
}
|
|
163
|
+
if (companion.constraint) {
|
|
164
|
+
out.constraint = companion.constraint;
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function buildResource(
|
|
170
|
+
tools: Map<string, ToolDefinition>,
|
|
171
|
+
mirror: SchemaMirror,
|
|
172
|
+
source: RequiredSchemaSource,
|
|
173
|
+
): Record<string, unknown> {
|
|
174
|
+
const { required, properties } = getRequiredAndProperties(
|
|
175
|
+
tools,
|
|
176
|
+
source.primary_tool,
|
|
177
|
+
`Workflow '${source.workflow}' primary_tool`,
|
|
178
|
+
);
|
|
179
|
+
const recommended = properties.filter((p) => !required.includes(p));
|
|
180
|
+
const enums = buildEnums(mirror, source.enum_tables, source.workflow);
|
|
181
|
+
const companions = source.companion_calls.map((c) =>
|
|
182
|
+
buildCompanion(tools, c, source.workflow),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
workflow: source.workflow,
|
|
187
|
+
summary: source.summary,
|
|
188
|
+
primary_tool: source.primary_tool,
|
|
189
|
+
primary_required: required,
|
|
190
|
+
primary_recommended: recommended,
|
|
191
|
+
enums,
|
|
192
|
+
companion_calls: companions,
|
|
193
|
+
example: source.example,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function emit(resources: Record<string, Record<string, unknown>>): string {
|
|
198
|
+
// Sort keys deterministically so re-runs produce byte-identical output.
|
|
199
|
+
const sortedKeys = Object.keys(resources).sort();
|
|
200
|
+
const sortedResources: Record<string, Record<string, unknown>> = {};
|
|
201
|
+
for (const k of sortedKeys) sortedResources[k] = resources[k];
|
|
202
|
+
|
|
203
|
+
const json = JSON.stringify(sortedResources, null, 2);
|
|
204
|
+
return [
|
|
205
|
+
"// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.",
|
|
206
|
+
"//",
|
|
207
|
+
"// AUTO-GENERATED by mcp-server/scripts/build-required-schemas.ts.",
|
|
208
|
+
"// Do not edit by hand. Re-run via `cd mcp-server && npm run prebuild`.",
|
|
209
|
+
"// Source: required-schemas.source.ts + schema-mirror.json + ToolRegistry inputSchemas.",
|
|
210
|
+
"// ADR-214 — required-fields contracts per workflow.",
|
|
211
|
+
"",
|
|
212
|
+
"export const REQUIRED_SCHEMAS = " + json + " as const;",
|
|
213
|
+
"",
|
|
214
|
+
"export type RequiredSchemaKey = keyof typeof REQUIRED_SCHEMAS;",
|
|
215
|
+
"",
|
|
216
|
+
].join("\n");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function main(): void {
|
|
220
|
+
const tools = loadRegistry();
|
|
221
|
+
const mirror = loadMirror();
|
|
222
|
+
const out: Record<string, Record<string, unknown>> = {};
|
|
223
|
+
for (const [key, source] of Object.entries(REQUIRED_SCHEMAS_SOURCE)) {
|
|
224
|
+
out[key] = buildResource(tools, mirror, source);
|
|
225
|
+
}
|
|
226
|
+
const text = emit(out);
|
|
227
|
+
writeFileSync(OUTPUT_PATH, text, "utf-8");
|
|
228
|
+
console.log(
|
|
229
|
+
`[build-required-schemas] wrote ${Object.keys(out).length} schemas to ${OUTPUT_PATH}`,
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
main();
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Build script: reads font files + ext-apps browser bridge,
|
|
5
|
+
* writes src/apps/generated/shared-bundle.ts with const string exports.
|
|
6
|
+
* Run via: npm run prebuild (before tsc)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
10
|
+
import { join, dirname } from "path";
|
|
11
|
+
import { fileURLToPath } from "url";
|
|
12
|
+
import { createRequire } from "module";
|
|
13
|
+
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
const root = join(__dirname, "..");
|
|
17
|
+
|
|
18
|
+
// Read fonts as base64
|
|
19
|
+
const fontsDir = join(root, "assets/fonts");
|
|
20
|
+
const instrumentSerifRegular = readFileSync(
|
|
21
|
+
join(fontsDir, "InstrumentSerif-Regular.woff2"),
|
|
22
|
+
).toString("base64");
|
|
23
|
+
const instrumentSerifItalic = readFileSync(
|
|
24
|
+
join(fontsDir, "InstrumentSerif-Italic.woff2"),
|
|
25
|
+
).toString("base64");
|
|
26
|
+
const geistSansLight = readFileSync(
|
|
27
|
+
join(fontsDir, "GeistSans-Light.woff2"),
|
|
28
|
+
).toString("base64");
|
|
29
|
+
|
|
30
|
+
// Read ext-apps browser bridge bundle (devDependency — may not be installed in CI)
|
|
31
|
+
const require = createRequire(import.meta.url);
|
|
32
|
+
let appBridgeJs: string;
|
|
33
|
+
try {
|
|
34
|
+
const appBridgePath =
|
|
35
|
+
require.resolve("@modelcontextprotocol/ext-apps/app-with-deps");
|
|
36
|
+
appBridgeJs = readFileSync(appBridgePath, "utf-8");
|
|
37
|
+
} catch {
|
|
38
|
+
console.warn(
|
|
39
|
+
"[bundle-apps] @modelcontextprotocol/ext-apps not installed — writing stub (MCP Apps will not render)",
|
|
40
|
+
);
|
|
41
|
+
appBridgeJs = "/* ext-apps bridge not available */";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Write generated file
|
|
45
|
+
const outDir = join(root, "src/apps/generated");
|
|
46
|
+
mkdirSync(outDir, { recursive: true });
|
|
47
|
+
|
|
48
|
+
const output = `// Auto-generated by scripts/bundle-apps.ts — do not edit
|
|
49
|
+
// Re-run: npm run prebuild
|
|
50
|
+
|
|
51
|
+
export const INSTRUMENT_SERIF_REGULAR_BASE64 = "${instrumentSerifRegular}";
|
|
52
|
+
export const INSTRUMENT_SERIF_ITALIC_BASE64 = "${instrumentSerifItalic}";
|
|
53
|
+
export const GEIST_SANS_LIGHT_BASE64 = "${geistSansLight}";
|
|
54
|
+
export const APP_BRIDGE_JS = ${JSON.stringify(appBridgeJs)};
|
|
55
|
+
`;
|
|
56
|
+
|
|
57
|
+
writeFileSync(join(outDir, "shared-bundle.ts"), output, "utf-8");
|
|
58
|
+
|
|
59
|
+
console.log(
|
|
60
|
+
`[bundle-apps] Generated shared-bundle.ts (${Math.round(output.length / 1024)}KB)`,
|
|
61
|
+
);
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ADR-214 — refresh schema-mirror.json against staging or prod.
|
|
5
|
+
*
|
|
6
|
+
* Connects to the configured Postgres URL (env var SUPABASE_DB_URL or
|
|
7
|
+
* DATABASE_URL) and queries pg_constraint for CHECK constraints on the
|
|
8
|
+
* tables backing Phase 1 schema resources. Parses the constraint
|
|
9
|
+
* definitions, extracts enum values, writes a deterministic JSON file at
|
|
10
|
+
* mcp-server/src/resources/schema-mirror.json.
|
|
11
|
+
*
|
|
12
|
+
* NOT run by CI — humans run this when they suspect or know that a CHECK
|
|
13
|
+
* constraint changed in production. The mirror is committed to git so PR
|
|
14
|
+
* diffs surface drift.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* SUPABASE_DB_URL=postgres://... npx tsx mcp-server/scripts/refresh-schema-mirror.ts
|
|
18
|
+
*
|
|
19
|
+
* Optional dep: `pg` (added as devDependency on mcp-server).
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
23
|
+
import { dirname, join } from "node:path";
|
|
24
|
+
import { fileURLToPath } from "node:url";
|
|
25
|
+
|
|
26
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
27
|
+
const __dirname = dirname(__filename);
|
|
28
|
+
const MIRROR_PATH = join(
|
|
29
|
+
__dirname,
|
|
30
|
+
"..",
|
|
31
|
+
"src/resources/schema-mirror.json",
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
interface MirrorContent {
|
|
35
|
+
_generated_at: string;
|
|
36
|
+
_source: string;
|
|
37
|
+
_note: string;
|
|
38
|
+
[table: string]:
|
|
39
|
+
| string
|
|
40
|
+
| Record<string, string[]>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const TABLES_TO_MIRROR: Array<{ table: string; columns: string[] }> = [
|
|
44
|
+
{ table: "audio_files", columns: ["classification", "file_type"] },
|
|
45
|
+
{ table: "recording_credits", columns: ["role"] },
|
|
46
|
+
{ table: "recordings", columns: ["version_type"] },
|
|
47
|
+
{
|
|
48
|
+
table: "work_credits",
|
|
49
|
+
columns: ["attestation_status", "credit_type", "rights_type"],
|
|
50
|
+
},
|
|
51
|
+
{ table: "works", columns: ["work_status", "work_type"] },
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
function fail(msg: string): never {
|
|
55
|
+
console.error(`[refresh-schema-mirror] ERROR: ${msg}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Parse a CHECK constraint definition string for ANY-of-array shapes.
|
|
61
|
+
* Postgres formats vary; common shapes:
|
|
62
|
+
* CHECK ((work_type = ANY (ARRAY['song'::text, 'instrumental'::text, ...])))
|
|
63
|
+
* CHECK ((work_type::text = ANY (ARRAY['song'::text, ...])))
|
|
64
|
+
* CHECK (work_type IN ('song', 'instrumental', ...))
|
|
65
|
+
* Returns the literal values in source order; caller sorts for determinism.
|
|
66
|
+
*/
|
|
67
|
+
function parseEnumFromCheckDef(def: string): string[] | null {
|
|
68
|
+
// Match ARRAY[...] form
|
|
69
|
+
const arrayMatch = def.match(/ARRAY\[([^\]]+)\]/);
|
|
70
|
+
if (arrayMatch) {
|
|
71
|
+
const inside = arrayMatch[1];
|
|
72
|
+
const literals = [...inside.matchAll(/'([^']+)'/g)].map((m) => m[1]);
|
|
73
|
+
return literals.length > 0 ? literals : null;
|
|
74
|
+
}
|
|
75
|
+
// Match IN (...) form
|
|
76
|
+
const inMatch = def.match(/IN\s*\(([^)]+)\)/i);
|
|
77
|
+
if (inMatch) {
|
|
78
|
+
const inside = inMatch[1];
|
|
79
|
+
const literals = [...inside.matchAll(/'([^']+)'/g)].map((m) => m[1]);
|
|
80
|
+
return literals.length > 0 ? literals : null;
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async function main(): Promise<void> {
|
|
86
|
+
const dbUrl = process.env.SUPABASE_DB_URL ?? process.env.DATABASE_URL;
|
|
87
|
+
if (!dbUrl) {
|
|
88
|
+
fail(
|
|
89
|
+
"SUPABASE_DB_URL (or DATABASE_URL) env var not set. Provide a Postgres connection string for staging or prod.",
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Lazy-import pg so the file type-checks even if pg isn't installed.
|
|
94
|
+
// Generator is the hot path; refresh is operator-only.
|
|
95
|
+
let Client: typeof import("pg").Client;
|
|
96
|
+
try {
|
|
97
|
+
({ Client } = await import("pg"));
|
|
98
|
+
} catch {
|
|
99
|
+
fail(
|
|
100
|
+
"pg npm package not installed. Run: cd mcp-server && npm install --save-dev pg @types/pg",
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const client = new Client({ connectionString: dbUrl });
|
|
105
|
+
await client.connect();
|
|
106
|
+
|
|
107
|
+
const out: Record<string, Record<string, string[]>> = {};
|
|
108
|
+
|
|
109
|
+
for (const { table, columns } of TABLES_TO_MIRROR) {
|
|
110
|
+
out[table] = {};
|
|
111
|
+
for (const col of columns) {
|
|
112
|
+
// Find a CHECK constraint on this column. Look for any constraint
|
|
113
|
+
// whose pg_get_constraintdef text references the column name and
|
|
114
|
+
// contains an ANY/IN enum list.
|
|
115
|
+
const result = await client.query<{ def: string }>(
|
|
116
|
+
`
|
|
117
|
+
SELECT pg_get_constraintdef(oid) AS def
|
|
118
|
+
FROM pg_constraint
|
|
119
|
+
WHERE conrelid = $1::regclass
|
|
120
|
+
AND contype = 'c'
|
|
121
|
+
AND pg_get_constraintdef(oid) ILIKE $2
|
|
122
|
+
`,
|
|
123
|
+
[`public.${table}`, `%${col}%`],
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
let values: string[] | null = null;
|
|
127
|
+
for (const row of result.rows) {
|
|
128
|
+
const parsed = parseEnumFromCheckDef(row.def);
|
|
129
|
+
if (parsed && parsed.length > 0) {
|
|
130
|
+
values = parsed;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!values) {
|
|
135
|
+
console.warn(
|
|
136
|
+
`[refresh-schema-mirror] warn: no enum CHECK found for ${table}.${col}; leaving empty array`,
|
|
137
|
+
);
|
|
138
|
+
values = [];
|
|
139
|
+
}
|
|
140
|
+
out[table][col] = [...values].sort();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
await client.end();
|
|
145
|
+
|
|
146
|
+
// Preserve metadata from existing mirror if present.
|
|
147
|
+
let existingNote =
|
|
148
|
+
"CHECK constraint enums for tables backing ADR-214 Phase 1 schemas. Refresh via `npx tsx mcp-server/scripts/refresh-schema-mirror.ts` against staging. Committed so PR diffs surface schema drift. See ADR-214 Decision section, Drift Prevention #3.";
|
|
149
|
+
try {
|
|
150
|
+
const prev = JSON.parse(
|
|
151
|
+
readFileSync(MIRROR_PATH, "utf-8"),
|
|
152
|
+
) as MirrorContent;
|
|
153
|
+
if (typeof prev._note === "string") existingNote = prev._note;
|
|
154
|
+
} catch {
|
|
155
|
+
// first run — fine
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const sortedTables = Object.keys(out).sort();
|
|
159
|
+
const sortedOut: Record<string, Record<string, string[]>> = {};
|
|
160
|
+
for (const t of sortedTables) {
|
|
161
|
+
const cols = Object.keys(out[t]).sort();
|
|
162
|
+
sortedOut[t] = {};
|
|
163
|
+
for (const c of cols) sortedOut[t][c] = out[t][c];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const final: MirrorContent = {
|
|
167
|
+
_generated_at: new Date().toISOString(),
|
|
168
|
+
_source: dbUrl.replace(/:[^:@]+@/, ":***@"),
|
|
169
|
+
_note: existingNote,
|
|
170
|
+
...sortedOut,
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
writeFileSync(MIRROR_PATH, JSON.stringify(final, null, 2) + "\n", "utf-8");
|
|
174
|
+
console.log(
|
|
175
|
+
`[refresh-schema-mirror] wrote ${sortedTables.length} tables to ${MIRROR_PATH}`,
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
main().catch((err) => {
|
|
180
|
+
console.error(err);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
});
|
package/server.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.withpica/pica",
|
|
4
|
+
"description": "manage your music catalog through conversation — works, recordings, credits, agreements, royalties",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/withpica/pica",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "2.48.0",
|
|
10
|
+
"packages": [
|
|
11
|
+
{
|
|
12
|
+
"registryType": "npm",
|
|
13
|
+
"identifier": "@withpica/mcp-server",
|
|
14
|
+
"version": "2.48.0",
|
|
15
|
+
"transport": {
|
|
16
|
+
"type": "stdio"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|