@withpica/mcp-server-directory 1.4.1 → 1.5.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.
Files changed (98) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/README.md +63 -0
  3. package/dist/client.d.ts +14 -0
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +29 -2
  6. package/dist/client.js.map +1 -1
  7. package/dist/config.js +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/changelog.generated.d.ts +2 -2
  11. package/dist/lib/changelog.generated.d.ts.map +1 -1
  12. package/dist/lib/changelog.generated.js +3 -3
  13. package/dist/lib/changelog.generated.js.map +1 -1
  14. package/dist/lib/changelog.js +1 -1
  15. package/dist/prompts/index.js +2 -2
  16. package/dist/prompts/index.js.map +1 -1
  17. package/dist/prompts/public-question-atlas.d.ts.map +1 -1
  18. package/dist/prompts/public-question-atlas.js +15 -1
  19. package/dist/prompts/public-question-atlas.js.map +1 -1
  20. package/dist/resources/llms-primer.d.ts +1 -1
  21. package/dist/resources/llms-primer.d.ts.map +1 -1
  22. package/dist/resources/llms-primer.js +7 -3
  23. package/dist/resources/llms-primer.js.map +1 -1
  24. package/dist/server.js +1 -1
  25. package/dist/skills/index.js +1 -1
  26. package/dist/skills/skills.generated.js +2 -2
  27. package/dist/skills/skills.generated.js.map +1 -1
  28. package/dist/tools/chain.js +1 -1
  29. package/dist/tools/enquiries.d.ts +19 -0
  30. package/dist/tools/enquiries.d.ts.map +1 -0
  31. package/dist/tools/enquiries.js +190 -0
  32. package/dist/tools/enquiries.js.map +1 -0
  33. package/dist/tools/index.d.ts +4 -3
  34. package/dist/tools/index.d.ts.map +1 -1
  35. package/dist/tools/index.js +3 -1
  36. package/dist/tools/index.js.map +1 -1
  37. package/dist/tools/people.js +1 -1
  38. package/dist/tools/recordings.js +1 -1
  39. package/dist/tools/release-notes.d.ts.map +1 -1
  40. package/dist/tools/release-notes.js +3 -2
  41. package/dist/tools/release-notes.js.map +1 -1
  42. package/dist/tools/search.js +1 -1
  43. package/dist/tools/skills.d.ts.map +1 -1
  44. package/dist/tools/skills.js +5 -3
  45. package/dist/tools/skills.js.map +1 -1
  46. package/dist/tools/works.d.ts.map +1 -1
  47. package/dist/tools/works.js +18 -2
  48. package/dist/tools/works.js.map +1 -1
  49. package/dist/utils/errors.d.ts.map +1 -1
  50. package/dist/utils/errors.js +57 -4
  51. package/dist/utils/errors.js.map +1 -1
  52. package/dist/utils/formatting.d.ts.map +1 -1
  53. package/dist/utils/formatting.js +9 -3
  54. package/dist/utils/formatting.js.map +1 -1
  55. package/jest.config.js +4 -1
  56. package/package.json +9 -5
  57. package/scripts/build-changelog.ts +2 -2
  58. package/scripts/build-skills.ts +9 -4
  59. package/src/__tests__/prompts/index.test.ts +1 -1
  60. package/src/__tests__/prompts/prompt-eval-harness.test.ts +4 -3
  61. package/src/__tests__/skills/skills-registry.test.ts +2 -5
  62. package/src/__tests__/skills/skills-tools.test.ts +5 -13
  63. package/src/__tests__/tools/chain.test.ts +1 -1
  64. package/src/__tests__/tools/composability-chains.test.ts +15 -26
  65. package/src/__tests__/tools/enquiries.test.ts +135 -0
  66. package/src/__tests__/tools/people.test.ts +1 -1
  67. package/src/__tests__/tools/search.test.ts +1 -1
  68. package/src/__tests__/tools/tool-count-parity.test.ts +63 -0
  69. package/src/__tests__/tools/works.test.ts +4 -1
  70. package/src/__tests__/utils/errors.test.ts +68 -0
  71. package/src/client.ts +38 -2
  72. package/src/config.ts +1 -1
  73. package/src/index.ts +1 -2
  74. package/src/lib/changelog.ts +1 -1
  75. package/src/prompts/index.ts +2 -2
  76. package/src/prompts/public-question-atlas.ts +16 -1
  77. package/src/resources/llms-primer.ts +7 -3
  78. package/src/server.ts +1 -1
  79. package/src/skills/find-music-for-sync-brief/SKILL.md +2 -2
  80. package/src/skills/index.ts +1 -1
  81. package/src/skills/skills.generated.ts +2 -2
  82. package/src/tools/__tests__/release-notes.test.ts +1 -1
  83. package/src/tools/chain.ts +1 -1
  84. package/src/tools/enquiries.ts +210 -0
  85. package/src/tools/index.ts +7 -4
  86. package/src/tools/people.ts +1 -1
  87. package/src/tools/recordings.ts +1 -1
  88. package/src/tools/release-notes.ts +3 -2
  89. package/src/tools/search.ts +1 -1
  90. package/src/tools/skills.ts +5 -3
  91. package/src/tools/works.ts +20 -2
  92. package/src/utils/errors.ts +72 -4
  93. package/src/utils/formatting.ts +9 -3
  94. package/tsconfig.build.json +10 -0
  95. package/dist/tools/__tests__/release-notes.test.d.ts +0 -2
  96. package/dist/tools/__tests__/release-notes.test.d.ts.map +0 -1
  97. package/dist/tools/__tests__/release-notes.test.js +0 -49
  98. package/dist/tools/__tests__/release-notes.test.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -8,11 +8,63 @@ for breaking tool-surface changes.
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [1.5.0] - 2026-09-26
12
+
13
+ ### Fixed
14
+
15
+ - The `pica-directory-mcp` bin entry is written `dist/index.js`. npm 11.13
16
+ rejects the `./dist/index.js` form at publish and silently drops the bin,
17
+ which would have broken `npx @withpica/mcp-server-directory`.
18
+
19
+ ### Added
20
+
21
+ - **`directory_send_licensing_enquiry`** (tier `write`, the directory's first
22
+ non-read tool). An agent helping someone find music can now, with their
23
+ go-ahead, send the owner a licensing enquiry through the same public route
24
+ as the directory's web form. The enquiry is passed to the owner, who can reply
25
+ by email; a confirmation to the requester is usually sent but not
26
+ guaranteed. Nothing is agreed or priced, and a budget is optional. Refusals
27
+ come back as not sent, with the reason (403 owner not taking enquiries, 404
28
+ not listed, 429 too many); a server error or lost answer comes back as an
29
+ unknown outcome, so an agent does not resend a stored enquiry.
30
+ - `directory_lookup_work` now ends with a **Licensing** section: the work's
31
+ public page and whether enquiries are open (`work_page_url`,
32
+ `enquiries_open` in structured content).
33
+
34
+ ### Changed
35
+
36
+ - The `find-music-for-sync-brief` skill points at the enquiry tool instead of
37
+ telling the user to find the rights holder themselves.
38
+
39
+ ## [1.4.2] - 2026-08-24
40
+
41
+ ### Added
42
+
43
+ - **A README on the npm page.** This package published with no README at all, so
44
+ its npm listing showed only the one-line description — a stranger evaluating it
45
+ had nothing to read. The README is now generated by
46
+ `scripts/build-mcp-readmes.mjs` from the tool registry and `package.json`, so
47
+ the install command, the tool inventory and the version cannot drift from the
48
+ code the way a hand-written one did. `--check` fails CI on drift.
49
+ - `homepage` and `bugs.email` in `package.json`, so the npm page links somewhere
50
+ and a problem has a route back.
51
+
52
+ ### Fixed
53
+
54
+ - **The published tool count drifted to 9 of 11** — `directory_release_notes`, `directory_skill_get` and `directory_skill_list` had been added without the count following; now derived from the registry with a parity tripwire, and the one destructive tool no longer wears a write tier (pica #2024).
55
+
56
+ - `formatAsText`: bare array payloads are wrapped in the standard
57
+ `{ items, count }` list envelope — MCP requires structuredContent to be a
58
+ record, and the SDK server rejects arrays with -32602 (latent here: no
59
+ current call sites, fixed in lockstep with `@withpica/mcp-utils`).
60
+
11
61
  ## [1.4.1] - 2026-05-16
12
62
 
13
63
  ### Changed
14
64
 
15
- - Brand consistency: "PICA" → "withPICA" in package metadata (description, author).
65
+ - Branding pass: "PICA" → "withPICA" in package metadata
66
+ (commit `9787d4c37`). Published to npm 2026-05-16 without committing the
67
+ version bump — repo realigned 2026-06-12.
16
68
 
17
69
  ## [1.4.0] - 2026-05-13
18
70
 
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ <!-- GENERATED FILE — do not edit by hand.
2
+ Prose lives in mcp-server/README.intro.md; the tool inventory is
3
+ derived from the source registries. Regenerate with
4
+ `node scripts/build-mcp-readmes.mjs`; `--check` fails on drift. -->
5
+
6
+ # @withpica/mcp-server-directory
7
+
8
+ MCP server for the **withPICA public directory** — search over works, recordings and creators that rights holders have chosen to publish, plus one write: sending a licensing enquiry to an owner, when the user asks. No account, no API key, no setup.
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ claude mcp add withpica-directory -- npx --yes @withpica/mcp-server-directory@latest
14
+ ```
15
+
16
+ ## What it can answer
17
+
18
+ Who wrote this song. What the ISWC is. Which recordings exist of a work and what their ISRCs are. Which creators match a name, an ISNI or an IPI. Which published recordings sit in a tempo, key, energy or mood range. And, in one call, the rights chain for a work: writers, publishers, recording, audio.
19
+
20
+ Every entry is published deliberately by its rights holder, with attested credits and verified identifiers.
21
+
22
+ ## REST, if you would rather not run a process
23
+
24
+ - `GET https://withpica.com/api/public/directory/works`
25
+ - `GET https://withpica.com/api/public/directory/people`
26
+ - `GET https://withpica.com/api/public/directory/search?q={query}`
27
+ - `GET https://withpica.com/api/public/directory/recordings`
28
+ - `GET https://withpica.com/api/public/directory/consent?iswc={iswc}`
29
+
30
+ 100 requests/minute unauthenticated. Licensing keys unlock extended fields and their own limits.
31
+
32
+ ## Before you train on any of this
33
+
34
+ withpica.com publishes a blanket TDM reservation at <https://withpica.com/.well-known/tdmrep.json> (`"tdm-reservation": 1`). Nothing here is licensed for text-and-data mining or model training by default.
35
+
36
+ The `consent` endpoint above is the granular counterpart: ask it about an identifier and it reports what the rights holders have actually cleared, and at what level. A work is cleared at a level only when every credited contributor has granted at least that level; one refusal blocks it. Read `no_assertion_published` literally — it means no permission is published for that identifier, which is not a maybe.
37
+
38
+ ## Links
39
+
40
+ - Directory: <https://directory.withpica.com>
41
+ - Machine-readable: <https://withpica.com/directory/llms.txt>
42
+ - Support: support@withpica.com
43
+
44
+ ## Tools
45
+
46
+ 12 tools, all read-only except `directory_send_licensing_enquiry`:
47
+
48
+ - `directory_chain` — Graph lookup — resolves a query, ISWC, or ISRC to its full rights chain in one call
49
+ - `directory_list_people` — Browse and filter creators in the PICA public directory
50
+ - `directory_list_works` — Browse and filter verified musical works in the PICA public directory
51
+ - `directory_lookup_isrc` — Shortcut: look up the work(s) associated with a recording identifier (ISRC)
52
+ - `directory_lookup_person` — Get full details of a creator by global creator ID (UUID), ISNI, IPI number, or MusicBrainz ID
53
+ - `directory_lookup_work` — Get full details of a single work by ISWC or work UUID
54
+ - `directory_release_notes` — Returns recent releases of the PICA directory MCP server — what shipped in the public catalogue surface itself
55
+ - `directory_search` — Convenience fan-out across works and creators — runs list_works and list_people with the same query and returns the union
56
+ - `directory_search_recordings` — Find tracks by BPM, key, energy, danceability, duration, and more
57
+ - `directory_send_licensing_enquiry` — Sends a licensing enquiry to the owner of a work listed in the public directory
58
+ - `directory_skill_get` — Returns the full methodology body for one directory skill — markdown with step-by-step instructions and tool chains
59
+ - `directory_skill_list` — Returns the list of downloadable directory skill methodologies — name, description, trigger phrases
60
+
61
+ ---
62
+
63
+ Generated for `@withpica/mcp-server-directory@1.5.0`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.
package/dist/client.d.ts CHANGED
@@ -7,6 +7,20 @@ export declare class DirectoryClient {
7
7
  private debug;
8
8
  constructor(config: DirectoryClientConfig);
9
9
  private fetchWithTimeout;
10
+ /** The public page for a directory work, for a human to open. */
11
+ workPageUrl(workId: string): string;
12
+ /**
13
+ * Send a licensing enquiry through the public enquiry route (the same one
14
+ * the directory's web form uses). ONE attempt, never retried: a retry after
15
+ * a timeout or a 5xx could store the enquiry twice and email the owner
16
+ * twice. Resolves with the status and parsed body for every HTTP answer,
17
+ * so the caller can tell a refusal (400/403/404/429) from a failure;
18
+ * throws only when no answer arrived.
19
+ */
20
+ sendLicensingEnquiry(body: Record<string, unknown>): Promise<{
21
+ status: number;
22
+ json: any;
23
+ }>;
10
24
  request<T>(path: string, params?: Record<string, string>): Promise<T>;
11
25
  }
12
26
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,EAAE,qBAAqB;YAK3B,gBAAgB;IAmBxB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAgF5E"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,EAAE,qBAAqB;YAK3B,gBAAgB;IAqB9B,iEAAiE;IACjE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAInC;;;;;;;OAOG;IACG,oBAAoB,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC;IAmBnC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAgF5E"}
package/dist/client.js CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  const DEFAULT_TIMEOUT_MS = 15_000;
3
3
  const MAX_RETRIES = 2;
4
4
  const RETRY_BASE_MS = 500;
@@ -23,7 +23,7 @@ export class DirectoryClient {
23
23
  }
24
24
  catch (err) {
25
25
  if (err.name === "AbortError") {
26
- throw new Error(`Request timed out after ${timeoutMs}ms: GET ${url}`);
26
+ throw new Error(`Request timed out after ${timeoutMs}ms: ${init.method ?? "GET"} ${url}`);
27
27
  }
28
28
  throw err;
29
29
  }
@@ -31,6 +31,33 @@ export class DirectoryClient {
31
31
  clearTimeout(timer);
32
32
  }
33
33
  }
34
+ /** The public page for a directory work, for a human to open. */
35
+ workPageUrl(workId) {
36
+ return `${this.baseUrl}/directory/works/${encodeURIComponent(workId)}`;
37
+ }
38
+ /**
39
+ * Send a licensing enquiry through the public enquiry route (the same one
40
+ * the directory's web form uses). ONE attempt, never retried: a retry after
41
+ * a timeout or a 5xx could store the enquiry twice and email the owner
42
+ * twice. Resolves with the status and parsed body for every HTTP answer,
43
+ * so the caller can tell a refusal (400/403/404/429) from a failure;
44
+ * throws only when no answer arrived.
45
+ */
46
+ async sendLicensingEnquiry(body) {
47
+ const url = `${this.baseUrl}/api/shop/license-enquiries`;
48
+ if (this.debug)
49
+ console.error(`[Directory MCP] POST ${url}`);
50
+ const response = await this.fetchWithTimeout(url, {
51
+ method: "POST",
52
+ headers: {
53
+ Accept: "application/json",
54
+ "Content-Type": "application/json",
55
+ },
56
+ body: JSON.stringify(body),
57
+ }, DEFAULT_TIMEOUT_MS);
58
+ const json = await response.json().catch(() => null);
59
+ return { status: response.status, json };
60
+ }
34
61
  async request(path, params) {
35
62
  const url = new URL(`${this.baseUrl}/api/public/directory${path}`);
36
63
  if (params) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC;AAC9E,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAOD,MAAM,OAAO,eAAe;IAClB,OAAO,CAAS;IAChB,KAAK,CAAU;IAEvB,YAAY,MAA6B;QACvC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,GAAW,EACX,IAAiB,EACjB,SAAiB;QAEjB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,WAAW,GAAG,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,MAA+B;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,wBAAwB,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,uBAAuB,GAAG,CAAC,QAAQ,EAAE,cAAc,kBAAkB,KAAK,CAC3E,CAAC;QACJ,CAAC;QAED,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC1C,GAAG,CAAC,QAAQ,EAAE,EACd,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAC1D,kBAAkB,CACnB,CAAC;gBAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,oCAAoC,CAAC,CAAC;oBACtE,CAAC;oBACD,OAAO,IAAS,CAAC;gBACnB,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAExC,uCAAuC;gBACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvD,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CACzD,CAAC;gBACJ,CAAC;gBAED,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBAChE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACvD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC3D,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;wBAC5B,CAAC,CAAC,MAAM,GAAG,IAAI;wBACf,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACzC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CACX,mBAAmB,QAAQ,CAAC,MAAM,eAAe,OAAO,GAAG,CAAC,iBAAiB,OAAO,IAAI,CACzF,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;oBACrB,SAAS;gBACX,CAAC;gBAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAY,CAAC;gBACzB,IACG,GAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC;oBAC7C,OAAO,GAAG,WAAW,EACrB,CAAC;oBACD,MAAM,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACrD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CACX,sCAAsC,OAAO,GAAG,CAAC,iBAAiB,OAAO,IAAI,CAC9E,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;oBACrB,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC/D,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  export function loadConfig() {
3
3
  return {
4
4
  directoryUrl: process.env.PICA_DIRECTORY_URL || "https://withpica.com",
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
3
3
  import { loadConfig, validateConfig } from "./config.js";
4
4
  import { DirectoryMcpServer } from "./server.js";
5
5
  async function main() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,6DAA6D;AAG7D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,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,kCAAkC,CAAC,CAAC;YAClD,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,8BAA8B,EAC9B,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,6DAA6D;AAE7D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,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,kCAAkC,CAAC,CAAC;YAClD,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,8BAA8B,EAC9B,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"}
@@ -1,4 +1,4 @@
1
- export declare const CHANGELOG_MD = "# Changelog\n\nAll notable changes to `@withpica/mcp-server-directory` are documented here.\n\nThe format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to semantic versioning where the major number is incremented\nfor breaking tool-surface changes.\n\n## [Unreleased]\n\n## [1.4.1] - 2026-05-16\n\n### Changed\n\n- Brand consistency: \"PICA\" \u2192 \"withPICA\" in package metadata (description, author).\n\n## [1.4.0] - 2026-05-13\n\n### Added\n\n- **`directory_release_notes` tool + `release-notes://withpica/mcp-server-directory/latest` Resource (PR #414).**\n Agent-facing surface for directory MCP release notes. Reads `CHANGELOG.md`\n embedded at build time via `scripts/build-changelog.ts`. Returns the\n last 3 versions by default with optional `since_version` and `sections`\n filters. Resource counterpart serves the full CHANGELOG for\n Resource-native clients. Sister of `pica_release_notes` (creator MCP)\n and `team_release_notes` (team MCP). Disambiguated from catalogue-content\n searches (`directory_search` / `directory_list_works` / `directory_chain`)\n by the NOT-FOR clause in the description.\n\n## [1.3.0] - 2026-05-11\n\n### Added\n\n- **`directory_skill_list` + `directory_skill_get` \u2014 skill discovery on the public directory MCP (ADR-140 Phase 2b, PR #371).**\n Lazy-loaded skill catalogue exposed via two meta-tools + one `skill://`\n Resource per shipped skill (SEP-2640 bridge pattern). v1 ships\n `find-music-for-sync-brief` \u2014 a methodology for searching the public\n directory by audio characteristics + free-text brief. Skill metadata is\n static at boot; bodies load on `skill_get` call. IP-protection lint\n (Rule 14) gates skill content against trade-secret directories before\n publish; cross-coverage parity lint asserts skill resource URIs match\n between stdio and HTTP transports.\n\n## [1.1.0] - 2026-04-21\n\nShipped as minor rather than major despite the `*_full` tool removal:\nthe removed names had near-zero external adoption (they shipped recently\nand weren't advertised externally), and staying on the 1.x line keeps\n`^1.0.0` consumers on the upgrade path rather than stranding them on\nthe broken cascade. Clients that cached the `*_full` names will see a\ntool-not-found error and need to refresh their tool list.\n\n### Breaking\n\n- **Removed `directory_lookup_person_full` and `directory_lookup_work_full`.**\n Both tools hit the same upstream endpoints as their non-`_full` counterparts\n with only a formatting difference \u2014 there was no capability delta. The\n `_full` variants are now the canonical names (`directory_lookup_person`\n and `directory_lookup_work`); the thin variants have been deleted. Clients\n that cached the `_full` names need to update their tool list; the\n replacements return a superset of the prior data, so no output is lost.\n\n### Added\n\n- **`directory_chain` tool** \u2014 one-call rights-chain lookup. Accepts a\n free-text query, a direct ISWC/ISRC `identifier`, or audio-only filters\n (BPM / key / energy / mood). Returns the already-public `ChainResult`\n shape: work + writers + publishers (names + roles only, no IPIs or\n splits) + linked recording + audio characteristics. Wraps the existing\n public `/api/public/directory/chain` endpoint \u2014 no new backing API work.\n- `directory_list_people` now accepts `letter` (A\u2013Z, `#`) for alphabetical\n browsing. The backend has supported this for months; only the MCP tool\n was missing the parameter.\n- `directory_list_works` now accepts `letter`, `sort` (`title` | `recent`),\n and `isrc` \u2014 all previously backend-only.\n\n### Changed\n\n- **`directory_lookup_person` now matches its description.** Previously the\n tool advertised ISNI / IPI / MusicBrainz ID support but the backing query\n only matched `global_creator_id` \u2014 any non-UUID identifier silently 404'd.\n The query now cascades through `global_creator_id` \u2192 `isni` \u2192\n `cae_ipi_number` \u2192 `musicbrainz_id`, first hit wins.\n- `directory_search` description rewritten to drop the false \"ranked\" claim.\n The backing endpoint is a fan-out (`listWorks` + `listPeople`,\n half-limit each), not cross-type ranking. Callers should prefer typed\n list tools when they know the entity type.\n- `directory_lookup_isrc` description rewritten to frame it honestly as a\n pinned filter preset on `list_works` rather than a distinct lookup.\n";
1
+ export declare const CHANGELOG_MD = "# Changelog\n\nAll notable changes to `@withpica/mcp-server-directory` are documented here.\n\nThe format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to semantic versioning where the major number is incremented\nfor breaking tool-surface changes.\n\n## [Unreleased]\n\n## [1.5.0] - 2026-09-26\n\n### Fixed\n\n- The `pica-directory-mcp` bin entry is written `dist/index.js`. npm 11.13\n rejects the `./dist/index.js` form at publish and silently drops the bin,\n which would have broken `npx @withpica/mcp-server-directory`.\n\n### Added\n\n- **`directory_send_licensing_enquiry`** (tier `write`, the directory's first\n non-read tool). An agent helping someone find music can now, with their\n go-ahead, send the owner a licensing enquiry through the same public route\n as the directory's web form. The enquiry is passed to the owner, who can reply\n by email; a confirmation to the requester is usually sent but not\n guaranteed. Nothing is agreed or priced, and a budget is optional. Refusals\n come back as not sent, with the reason (403 owner not taking enquiries, 404\n not listed, 429 too many); a server error or lost answer comes back as an\n unknown outcome, so an agent does not resend a stored enquiry.\n- `directory_lookup_work` now ends with a **Licensing** section: the work's\n public page and whether enquiries are open (`work_page_url`,\n `enquiries_open` in structured content).\n\n### Changed\n\n- The `find-music-for-sync-brief` skill points at the enquiry tool instead of\n telling the user to find the rights holder themselves.\n\n## [1.4.2] - 2026-08-24\n\n### Added\n\n- **A README on the npm page.** This package published with no README at all, so\n its npm listing showed only the one-line description \u2014 a stranger evaluating it\n had nothing to read. The README is now generated by\n `scripts/build-mcp-readmes.mjs` from the tool registry and `package.json`, so\n the install command, the tool inventory and the version cannot drift from the\n code the way a hand-written one did. `--check` fails CI on drift.\n- `homepage` and `bugs.email` in `package.json`, so the npm page links somewhere\n and a problem has a route back.\n\n### Fixed\n\n- **The published tool count drifted to 9 of 11** \u2014 `directory_release_notes`, `directory_skill_get` and `directory_skill_list` had been added without the count following; now derived from the registry with a parity tripwire, and the one destructive tool no longer wears a write tier (pica #2024).\n\n- `formatAsText`: bare array payloads are wrapped in the standard\n `{ items, count }` list envelope \u2014 MCP requires structuredContent to be a\n record, and the SDK server rejects arrays with -32602 (latent here: no\n current call sites, fixed in lockstep with `@withpica/mcp-utils`).\n\n## [1.4.1] - 2026-05-16\n\n### Changed\n\n- Branding pass: \"PICA\" \u2192 \"withPICA\" in package metadata\n (commit `9787d4c37`). Published to npm 2026-05-16 without committing the\n version bump \u2014 repo realigned 2026-06-12.\n\n## [1.4.0] - 2026-05-13\n\n### Added\n\n- **`directory_release_notes` tool + `release-notes://withpica/mcp-server-directory/latest` Resource (PR #414).**\n Agent-facing surface for directory MCP release notes. Reads `CHANGELOG.md`\n embedded at build time via `scripts/build-changelog.ts`. Returns the\n last 3 versions by default with optional `since_version` and `sections`\n filters. Resource counterpart serves the full CHANGELOG for\n Resource-native clients. Sister of `pica_release_notes` (creator MCP)\n and `team_release_notes` (team MCP). Disambiguated from catalogue-content\n searches (`directory_search` / `directory_list_works` / `directory_chain`)\n by the NOT-FOR clause in the description.\n\n## [1.3.0] - 2026-05-11\n\n### Added\n\n- **`directory_skill_list` + `directory_skill_get` \u2014 skill discovery on the public directory MCP (ADR-140 Phase 2b, PR #371).**\n Lazy-loaded skill catalogue exposed via two meta-tools + one `skill://`\n Resource per shipped skill (SEP-2640 bridge pattern). v1 ships\n `find-music-for-sync-brief` \u2014 a methodology for searching the public\n directory by audio characteristics + free-text brief. Skill metadata is\n static at boot; bodies load on `skill_get` call. IP-protection lint\n (Rule 14) gates skill content against trade-secret directories before\n publish; cross-coverage parity lint asserts skill resource URIs match\n between stdio and HTTP transports.\n\n## [1.1.0] - 2026-04-21\n\nShipped as minor rather than major despite the `*_full` tool removal:\nthe removed names had near-zero external adoption (they shipped recently\nand weren't advertised externally), and staying on the 1.x line keeps\n`^1.0.0` consumers on the upgrade path rather than stranding them on\nthe broken cascade. Clients that cached the `*_full` names will see a\ntool-not-found error and need to refresh their tool list.\n\n### Breaking\n\n- **Removed `directory_lookup_person_full` and `directory_lookup_work_full`.**\n Both tools hit the same upstream endpoints as their non-`_full` counterparts\n with only a formatting difference \u2014 there was no capability delta. The\n `_full` variants are now the canonical names (`directory_lookup_person`\n and `directory_lookup_work`); the thin variants have been deleted. Clients\n that cached the `_full` names need to update their tool list; the\n replacements return a superset of the prior data, so no output is lost.\n\n### Added\n\n- **`directory_chain` tool** \u2014 one-call rights-chain lookup. Accepts a\n free-text query, a direct ISWC/ISRC `identifier`, or audio-only filters\n (BPM / key / energy / mood). Returns the already-public `ChainResult`\n shape: work + writers + publishers (names + roles only, no IPIs or\n splits) + linked recording + audio characteristics. Wraps the existing\n public `/api/public/directory/chain` endpoint \u2014 no new backing API work.\n- `directory_list_people` now accepts `letter` (A\u2013Z, `#`) for alphabetical\n browsing. The backend has supported this for months; only the MCP tool\n was missing the parameter.\n- `directory_list_works` now accepts `letter`, `sort` (`title` | `recent`),\n and `isrc` \u2014 all previously backend-only.\n\n### Changed\n\n- **`directory_lookup_person` now matches its description.** Previously the\n tool advertised ISNI / IPI / MusicBrainz ID support but the backing query\n only matched `global_creator_id` \u2014 any non-UUID identifier silently 404'd.\n The query now cascades through `global_creator_id` \u2192 `isni` \u2192\n `cae_ipi_number` \u2192 `musicbrainz_id`, first hit wins.\n- `directory_search` description rewritten to drop the false \"ranked\" claim.\n The backing endpoint is a fan-out (`listWorks` + `listPeople`,\n half-limit each), not cross-type ranking. Callers should prefer typed\n list tools when they know the entity type.\n- `directory_lookup_isrc` description rewritten to frame it honestly as a\n pinned filter preset on `list_works` rather than a distinct lookup.\n";
2
2
  export declare const PACKAGE_NAME = "@withpica/mcp-server-directory";
3
- export declare const PACKAGE_VERSION = "1.4.1";
3
+ export declare const PACKAGE_VERSION = "1.5.0";
4
4
  //# sourceMappingURL=changelog.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"changelog.generated.d.ts","sourceRoot":"","sources":["../../src/lib/changelog.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,y4IAA60I,CAAC;AACv2I,eAAO,MAAM,YAAY,mCAAmC,CAAC;AAC7D,eAAO,MAAM,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"changelog.generated.d.ts","sourceRoot":"","sources":["../../src/lib/changelog.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,28NAA23N,CAAC;AACr5N,eAAO,MAAM,YAAY,mCAAmC,CAAC;AAC7D,eAAO,MAAM,eAAe,UAAU,CAAC"}
@@ -1,6 +1,6 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  // Generated by scripts/build-changelog.ts — do not edit.
3
- export const CHANGELOG_MD = "# Changelog\n\nAll notable changes to `@withpica/mcp-server-directory` are documented here.\n\nThe format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to semantic versioning where the major number is incremented\nfor breaking tool-surface changes.\n\n## [Unreleased]\n\n## [1.4.1] - 2026-05-16\n\n### Changed\n\n- Brand consistency: \"PICA\" → \"withPICA\" in package metadata (description, author).\n\n## [1.4.0] - 2026-05-13\n\n### Added\n\n- **`directory_release_notes` tool + `release-notes://withpica/mcp-server-directory/latest` Resource (PR #414).**\n Agent-facing surface for directory MCP release notes. Reads `CHANGELOG.md`\n embedded at build time via `scripts/build-changelog.ts`. Returns the\n last 3 versions by default with optional `since_version` and `sections`\n filters. Resource counterpart serves the full CHANGELOG for\n Resource-native clients. Sister of `pica_release_notes` (creator MCP)\n and `team_release_notes` (team MCP). Disambiguated from catalogue-content\n searches (`directory_search` / `directory_list_works` / `directory_chain`)\n by the NOT-FOR clause in the description.\n\n## [1.3.0] - 2026-05-11\n\n### Added\n\n- **`directory_skill_list` + `directory_skill_get` — skill discovery on the public directory MCP (ADR-140 Phase 2b, PR #371).**\n Lazy-loaded skill catalogue exposed via two meta-tools + one `skill://`\n Resource per shipped skill (SEP-2640 bridge pattern). v1 ships\n `find-music-for-sync-brief` — a methodology for searching the public\n directory by audio characteristics + free-text brief. Skill metadata is\n static at boot; bodies load on `skill_get` call. IP-protection lint\n (Rule 14) gates skill content against trade-secret directories before\n publish; cross-coverage parity lint asserts skill resource URIs match\n between stdio and HTTP transports.\n\n## [1.1.0] - 2026-04-21\n\nShipped as minor rather than major despite the `*_full` tool removal:\nthe removed names had near-zero external adoption (they shipped recently\nand weren't advertised externally), and staying on the 1.x line keeps\n`^1.0.0` consumers on the upgrade path rather than stranding them on\nthe broken cascade. Clients that cached the `*_full` names will see a\ntool-not-found error and need to refresh their tool list.\n\n### Breaking\n\n- **Removed `directory_lookup_person_full` and `directory_lookup_work_full`.**\n Both tools hit the same upstream endpoints as their non-`_full` counterparts\n with only a formatting difference — there was no capability delta. The\n `_full` variants are now the canonical names (`directory_lookup_person`\n and `directory_lookup_work`); the thin variants have been deleted. Clients\n that cached the `_full` names need to update their tool list; the\n replacements return a superset of the prior data, so no output is lost.\n\n### Added\n\n- **`directory_chain` tool** — one-call rights-chain lookup. Accepts a\n free-text query, a direct ISWC/ISRC `identifier`, or audio-only filters\n (BPM / key / energy / mood). Returns the already-public `ChainResult`\n shape: work + writers + publishers (names + roles only, no IPIs or\n splits) + linked recording + audio characteristics. Wraps the existing\n public `/api/public/directory/chain` endpoint — no new backing API work.\n- `directory_list_people` now accepts `letter` (A–Z, `#`) for alphabetical\n browsing. The backend has supported this for months; only the MCP tool\n was missing the parameter.\n- `directory_list_works` now accepts `letter`, `sort` (`title` | `recent`),\n and `isrc` — all previously backend-only.\n\n### Changed\n\n- **`directory_lookup_person` now matches its description.** Previously the\n tool advertised ISNI / IPI / MusicBrainz ID support but the backing query\n only matched `global_creator_id` — any non-UUID identifier silently 404'd.\n The query now cascades through `global_creator_id` → `isni` →\n `cae_ipi_number` → `musicbrainz_id`, first hit wins.\n- `directory_search` description rewritten to drop the false \"ranked\" claim.\n The backing endpoint is a fan-out (`listWorks` + `listPeople`,\n half-limit each), not cross-type ranking. Callers should prefer typed\n list tools when they know the entity type.\n- `directory_lookup_isrc` description rewritten to frame it honestly as a\n pinned filter preset on `list_works` rather than a distinct lookup.\n";
3
+ export const CHANGELOG_MD = "# Changelog\n\nAll notable changes to `@withpica/mcp-server-directory` are documented here.\n\nThe format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to semantic versioning where the major number is incremented\nfor breaking tool-surface changes.\n\n## [Unreleased]\n\n## [1.5.0] - 2026-09-26\n\n### Fixed\n\n- The `pica-directory-mcp` bin entry is written `dist/index.js`. npm 11.13\n rejects the `./dist/index.js` form at publish and silently drops the bin,\n which would have broken `npx @withpica/mcp-server-directory`.\n\n### Added\n\n- **`directory_send_licensing_enquiry`** (tier `write`, the directory's first\n non-read tool). An agent helping someone find music can now, with their\n go-ahead, send the owner a licensing enquiry through the same public route\n as the directory's web form. The enquiry is passed to the owner, who can reply\n by email; a confirmation to the requester is usually sent but not\n guaranteed. Nothing is agreed or priced, and a budget is optional. Refusals\n come back as not sent, with the reason (403 owner not taking enquiries, 404\n not listed, 429 too many); a server error or lost answer comes back as an\n unknown outcome, so an agent does not resend a stored enquiry.\n- `directory_lookup_work` now ends with a **Licensing** section: the work's\n public page and whether enquiries are open (`work_page_url`,\n `enquiries_open` in structured content).\n\n### Changed\n\n- The `find-music-for-sync-brief` skill points at the enquiry tool instead of\n telling the user to find the rights holder themselves.\n\n## [1.4.2] - 2026-08-24\n\n### Added\n\n- **A README on the npm page.** This package published with no README at all, so\n its npm listing showed only the one-line description — a stranger evaluating it\n had nothing to read. The README is now generated by\n `scripts/build-mcp-readmes.mjs` from the tool registry and `package.json`, so\n the install command, the tool inventory and the version cannot drift from the\n code the way a hand-written one did. `--check` fails CI on drift.\n- `homepage` and `bugs.email` in `package.json`, so the npm page links somewhere\n and a problem has a route back.\n\n### Fixed\n\n- **The published tool count drifted to 9 of 11** — `directory_release_notes`, `directory_skill_get` and `directory_skill_list` had been added without the count following; now derived from the registry with a parity tripwire, and the one destructive tool no longer wears a write tier (pica #2024).\n\n- `formatAsText`: bare array payloads are wrapped in the standard\n `{ items, count }` list envelope — MCP requires structuredContent to be a\n record, and the SDK server rejects arrays with -32602 (latent here: no\n current call sites, fixed in lockstep with `@withpica/mcp-utils`).\n\n## [1.4.1] - 2026-05-16\n\n### Changed\n\n- Branding pass: \"PICA\" → \"withPICA\" in package metadata\n (commit `9787d4c37`). Published to npm 2026-05-16 without committing the\n version bump — repo realigned 2026-06-12.\n\n## [1.4.0] - 2026-05-13\n\n### Added\n\n- **`directory_release_notes` tool + `release-notes://withpica/mcp-server-directory/latest` Resource (PR #414).**\n Agent-facing surface for directory MCP release notes. Reads `CHANGELOG.md`\n embedded at build time via `scripts/build-changelog.ts`. Returns the\n last 3 versions by default with optional `since_version` and `sections`\n filters. Resource counterpart serves the full CHANGELOG for\n Resource-native clients. Sister of `pica_release_notes` (creator MCP)\n and `team_release_notes` (team MCP). Disambiguated from catalogue-content\n searches (`directory_search` / `directory_list_works` / `directory_chain`)\n by the NOT-FOR clause in the description.\n\n## [1.3.0] - 2026-05-11\n\n### Added\n\n- **`directory_skill_list` + `directory_skill_get` — skill discovery on the public directory MCP (ADR-140 Phase 2b, PR #371).**\n Lazy-loaded skill catalogue exposed via two meta-tools + one `skill://`\n Resource per shipped skill (SEP-2640 bridge pattern). v1 ships\n `find-music-for-sync-brief` — a methodology for searching the public\n directory by audio characteristics + free-text brief. Skill metadata is\n static at boot; bodies load on `skill_get` call. IP-protection lint\n (Rule 14) gates skill content against trade-secret directories before\n publish; cross-coverage parity lint asserts skill resource URIs match\n between stdio and HTTP transports.\n\n## [1.1.0] - 2026-04-21\n\nShipped as minor rather than major despite the `*_full` tool removal:\nthe removed names had near-zero external adoption (they shipped recently\nand weren't advertised externally), and staying on the 1.x line keeps\n`^1.0.0` consumers on the upgrade path rather than stranding them on\nthe broken cascade. Clients that cached the `*_full` names will see a\ntool-not-found error and need to refresh their tool list.\n\n### Breaking\n\n- **Removed `directory_lookup_person_full` and `directory_lookup_work_full`.**\n Both tools hit the same upstream endpoints as their non-`_full` counterparts\n with only a formatting difference — there was no capability delta. The\n `_full` variants are now the canonical names (`directory_lookup_person`\n and `directory_lookup_work`); the thin variants have been deleted. Clients\n that cached the `_full` names need to update their tool list; the\n replacements return a superset of the prior data, so no output is lost.\n\n### Added\n\n- **`directory_chain` tool** — one-call rights-chain lookup. Accepts a\n free-text query, a direct ISWC/ISRC `identifier`, or audio-only filters\n (BPM / key / energy / mood). Returns the already-public `ChainResult`\n shape: work + writers + publishers (names + roles only, no IPIs or\n splits) + linked recording + audio characteristics. Wraps the existing\n public `/api/public/directory/chain` endpoint — no new backing API work.\n- `directory_list_people` now accepts `letter` (A–Z, `#`) for alphabetical\n browsing. The backend has supported this for months; only the MCP tool\n was missing the parameter.\n- `directory_list_works` now accepts `letter`, `sort` (`title` | `recent`),\n and `isrc` — all previously backend-only.\n\n### Changed\n\n- **`directory_lookup_person` now matches its description.** Previously the\n tool advertised ISNI / IPI / MusicBrainz ID support but the backing query\n only matched `global_creator_id` — any non-UUID identifier silently 404'd.\n The query now cascades through `global_creator_id` → `isni` →\n `cae_ipi_number` → `musicbrainz_id`, first hit wins.\n- `directory_search` description rewritten to drop the false \"ranked\" claim.\n The backing endpoint is a fan-out (`listWorks` + `listPeople`,\n half-limit each), not cross-type ranking. Callers should prefer typed\n list tools when they know the entity type.\n- `directory_lookup_isrc` description rewritten to frame it honestly as a\n pinned filter preset on `list_works` rather than a distinct lookup.\n";
4
4
  export const PACKAGE_NAME = "@withpica/mcp-server-directory";
5
- export const PACKAGE_VERSION = "1.4.1";
5
+ export const PACKAGE_VERSION = "1.5.0";
6
6
  //# sourceMappingURL=changelog.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"changelog.generated.js","sourceRoot":"","sources":["../../src/lib/changelog.generated.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,yDAAyD;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAG,00IAA00I,CAAC;AACv2I,MAAM,CAAC,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"changelog.generated.js","sourceRoot":"","sources":["../../src/lib/changelog.generated.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,yDAAyD;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAG,w3NAAw3N,CAAC;AACr5N,MAAM,CAAC,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC"}
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  export const CHANGELOG_SECTION_NAMES = [
3
3
  "Added",
4
4
  "Changed",
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  export class PromptRegistry {
3
3
  listPrompts() {
4
4
  return [
@@ -155,7 +155,7 @@ If I want to BROWSE what's in the directory:
155
155
 
156
156
  Tell me which workflow you chose and why, in one sentence. Offer alternatives.
157
157
 
158
- Important: This is a read-only public directory. I can search and look up, but I can't create or modify anything. Only works from organisations that opted into the directory are visible.`,
158
+ Important: The directory's catalogue is read-only: I can search and look up, but I can't create or modify anything in it. The one thing I can send, and only if you ask, is a licensing enquiry to a work's owner, with your own name and email. Only works from organisations that opted into the directory are visible.`,
159
159
  },
160
160
  },
161
161
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AA8B7D,MAAM,OAAO,cAAc;IACzB,WAAW;QACT,OAAO;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,sGAAsG;gBACxG,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,OAAO;wBACb,WAAW,EACT,+EAA+E;wBACjF,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EACT,sHAAsH;gBACxH,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,mDAAmD;wBAChE,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EACT,2IAA2I;gBAC7I,SAAS,EAAE,EAAE;aACd;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,IAA0B;QAE1B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9C,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACzD,KAAK,qBAAqB;gBACxB,OAAO,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAC5C;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,MAAM,gBAAgB,GAAG,KAAK;YAC5B,CAAC,CAAC,6BAA6B,KAAK,iDAAiD;YACrF,CAAC,CAAC,8GAA8G,CAAC;QAEnH,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;EAEhB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;kIAyBgH;qBACvH;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,QAAiB;QAChD,MAAM,iBAAiB,GAAG,QAAQ;YAChC,CAAC,CAAC,aAAa,QAAQ,4JAA4J;YACnL,CAAC,CAAC,qEAAqE,CAAC;QAE1E,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;EAEhB,iBAAiB;;;;;;;;;;;;;;;;;;;;0IAoBuH;qBAC/H;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,2BAA2B;QACjC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;2LAwByK;qBAChL;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AA8B7D,MAAM,OAAO,cAAc;IACzB,WAAW;QACT,OAAO;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,sGAAsG;gBACxG,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,OAAO;wBACb,WAAW,EACT,+EAA+E;wBACjF,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EACT,sHAAsH;gBACxH,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,mDAAmD;wBAChE,QAAQ,EAAE,KAAK;qBAChB;iBACF;aACF;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EACT,2IAA2I;gBAC7I,SAAS,EAAE,EAAE;aACd;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,IAA0B;QAE1B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9C,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACzD,KAAK,qBAAqB;gBACxB,OAAO,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAC5C;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,MAAM,gBAAgB,GAAG,KAAK;YAC5B,CAAC,CAAC,6BAA6B,KAAK,iDAAiD;YACrF,CAAC,CAAC,8GAA8G,CAAC;QAEnH,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;EAEhB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;kIAyBgH;qBACvH;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,QAAiB;QAChD,MAAM,iBAAiB,GAAG,QAAQ;YAChC,CAAC,CAAC,aAAa,QAAQ,4JAA4J;YACnL,CAAC,CAAC,qEAAqE,CAAC;QAE1E,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;EAEhB,iBAAiB;;;;;;;;;;;;;;;;;;;;0IAoBuH;qBAC/H;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,2BAA2B;QACjC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;0TAwBwS;qBAC/S;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"public-question-atlas.d.ts","sourceRoot":"","sources":["../../src/prompts/public-question-atlas.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,eAAe,CAAC;IAC7B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,aAAa,CAAC;IACpC,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC,mEAAmE;IACnE,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,EAWnC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAAU,EA+apC,CAAC"}
1
+ {"version":3,"file":"public-question-atlas.d.ts","sourceRoot":"","sources":["../../src/prompts/public-question-atlas.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,eAAe,CAAC;IAC7B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,aAAa,CAAC;IACpC,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC,mEAAmE;IACnE,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,EAWnC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAAU,EA8bpC,CAAC"}
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  /**
3
3
  * Names known-ambiguous in the music-metadata domain — multiple persons
4
4
  * sharing a stage name, or artist project names that collide with
@@ -430,5 +430,19 @@ export const PUBLIC_ATLAS = [
430
430
  ],
431
431
  resolves_to: { kind: "tool", name: "directory_release_notes" },
432
432
  },
433
+ // ─────────────────────────────────────────────────────────────────
434
+ // Reaching an owner — the directory's one write
435
+ // ─────────────────────────────────────────────────────────────────
436
+ {
437
+ question: "can I license this song?",
438
+ synonyms: [
439
+ "ask the owner if I can use this",
440
+ "send a licensing enquiry",
441
+ "contact the rights holder",
442
+ "who do I ask to license this?",
443
+ "I want to use this track in my project",
444
+ ],
445
+ resolves_to: { kind: "tool", name: "directory_send_licensing_enquiry" },
446
+ },
433
447
  ];
434
448
  //# sourceMappingURL=public-question-atlas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-question-atlas.js","sourceRoot":"","sources":["../../src/prompts/public-question-atlas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public-question-atlas.js","sourceRoot":"","sources":["../../src/prompts/public-question-atlas.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const DIRECTORY_PRIMER = "# PICA Directory \u2014 Public Music Catalog Search\n\nRead-only access to published music catalog data. No authentication required.\nWorks and people are only visible if the owning organisation has opted into\nthe directory.\n\n## First Connection\n\nIf you're not sure where to start, invoke the **directory-autopilot** prompt.\nIt asks what you need and routes to the right workflow: sync search, rights\nresearch, or identifier lookup.\n\n## What You Can Do\n- Search works by title, ISWC, publisher, label\n- Search people by name, ISNI, IPI\n- Look up works by recording ISRC (directory_lookup_isrc)\n- Search recordings by audio characteristics (BPM, key, mood, energy)\n\n## What You Cannot Do\n- Create, update, or delete anything (read-only)\n- Access unpublished works or private catalog data\n- See financial data, agreements, or internal metadata\n\n## Entity Model\n- **Work**: composition with title, ISWC, credits, recordings\n- **Person**: writer/composer/performer with IPI, ISNI identifiers\n- **Recording**: audio capture with ISRC, linked to one work\n\n## Recommended Flow\n1. directory_search (broad text search across works + people)\n2. directory_lookup_work or directory_lookup_person (detailed view)\n3. directory_search_recordings (audio characteristic search for sync)\n";
1
+ export declare const DIRECTORY_PRIMER = "# PICA Directory \u2014 Public Music Catalog Search\n\nRead access to published music catalog data, plus one write: sending a\nlicensing enquiry to a work's owner when the user asks. No authentication\nrequired.\nWorks and people are only visible if the owning organisation has opted into\nthe directory.\n\n## First Connection\n\nIf you're not sure where to start, invoke the **directory-autopilot** prompt.\nIt asks what you need and routes to the right workflow: sync search, rights\nresearch, or identifier lookup.\n\n## What You Can Do\n- Search works by title, ISWC, publisher, label\n- Search people by name, ISNI, IPI\n- Look up works by recording ISRC (directory_lookup_isrc)\n- Search recordings by audio characteristics (BPM, key, mood, energy)\n- Send a licensing enquiry to a work's owner (directory_send_licensing_enquiry),\n only when the user asks and gives their own name, email and project\n\n## What You Cannot Do\n- Create, update, or delete catalogue data (the catalogue is read-only)\n- Access unpublished works or private catalog data\n- See financial data, agreements, or internal metadata\n\n## Entity Model\n- **Work**: composition with title, ISWC, credits, recordings\n- **Person**: writer/composer/performer with IPI, ISNI identifiers\n- **Recording**: audio capture with ISRC, linked to one work\n\n## Recommended Flow\n1. directory_search (broad text search across works + people)\n2. directory_lookup_work or directory_lookup_person (detailed view)\n3. directory_search_recordings (audio characteristic search for sync)\n";
2
2
  //# sourceMappingURL=llms-primer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llms-primer.d.ts","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,wxCAgC5B,CAAC"}
1
+ {"version":3,"file":"llms-primer.d.ts","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,uhDAoC5B,CAAC"}
@@ -1,7 +1,9 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  export const DIRECTORY_PRIMER = `# PICA Directory — Public Music Catalog Search
3
3
 
4
- Read-only access to published music catalog data. No authentication required.
4
+ Read access to published music catalog data, plus one write: sending a
5
+ licensing enquiry to a work's owner when the user asks. No authentication
6
+ required.
5
7
  Works and people are only visible if the owning organisation has opted into
6
8
  the directory.
7
9
 
@@ -16,9 +18,11 @@ research, or identifier lookup.
16
18
  - Search people by name, ISNI, IPI
17
19
  - Look up works by recording ISRC (directory_lookup_isrc)
18
20
  - Search recordings by audio characteristics (BPM, key, mood, energy)
21
+ - Send a licensing enquiry to a work's owner (directory_send_licensing_enquiry),
22
+ only when the user asks and gives their own name, email and project
19
23
 
20
24
  ## What You Cannot Do
21
- - Create, update, or delete anything (read-only)
25
+ - Create, update, or delete catalogue data (the catalogue is read-only)
22
26
  - Access unpublished works or private catalog data
23
27
  - See financial data, agreements, or internal metadata
24
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"llms-primer.js","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC/B,CAAC"}
1
+ {"version":3,"file":"llms-primer.js","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoC/B,CAAC"}
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  /**
3
3
  * Skills Registry — directory MCP, ADR-140 Phase 2b
4
4
  *
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  export const SKILLS = {
3
3
  "find-music-for-sync-brief": {
4
4
  name: "find-music-for-sync-brief",
@@ -7,7 +7,7 @@ export const SKILLS = {
7
7
  audience: "sync supervisor / music library / ad agency / film & TV music team",
8
8
  tools_required: ["directory_search_recordings", "directory_lookup_work", "directory_lookup_person"],
9
9
  output: "A rights-aware shortlist — each result with title, artist, audio characteristics (BPM, key, energy), credits summary for licensing contact, and any flags (unattested credits, low registration score, missing ISRC).",
10
- body: "# find-music-for-sync-brief\n\nHelp the user find music in PICA's public directory for a sync brief. Translate their description (mood, vibe, scene, era, vocal style) into search parameters, run the search, and return a shortlist that includes the information they need to license — not just the track.\n\nThis is a public skill — any AI agent connected to the directory MCP can use it. The directory only contains works from organisations that have opted in.\n\n## Step 1 — Translate the brief\n\nMost sync briefs are described in natural language. Translate before searching:\n\n| User says | Search parameters |\n|---|---|\n| upbeat / uplifting / driving | `min_energy: 0.6`, `min_danceability: 0.5` |\n| dark / moody / brooding | `max_energy: 0.4`, `key_mode: minor` |\n| chill / ambient / background | `max_energy: 0.4`, `max_bpm: 100` |\n| epic / cinematic | `min_energy: 0.7`, often longer durations |\n| specific BPM (\"around 120bpm\") | `min_bpm: 115`, `max_bpm: 125` |\n| acoustic / sparse | typically lower `danceability` and `energy` |\n| vocal / instrumental | filter on `has_vocals` if available |\n\nIf the user gives an artist or song reference (\"something like X\"), look up that reference first via `directory_lookup_work` or `directory_search_recordings` by title — then mimic its audio profile in the new search.\n\n## Step 2 — Search\n\nCall `directory_search_recordings` with the parameters from step 1. Default limit is fine for an initial scan.\n\nIf the brief is vague, do two searches with slightly different parameters and compare. If too many results, narrow on BPM or key. If too few, widen the BPM range first, then drop key_mode.\n\n## Step 3 — Lookup full details\n\nFor the top 5-10 promising results, call `directory_lookup_work` to get:\n\n- **Who wrote it** — credits with IPI numbers (essential for the licensing contact path)\n- **Whether credits are attested** — an unattested credit means the ownership claim hasn't been verified; flag this\n- **DSP links** (Spotify, Apple Music) — the user wants to listen before shortlisting\n- **Registration score** — higher score = cleaner rights chain = easier to license\n\nFor high-value matches where the user wants to know more about the creator, call `directory_lookup_person` with the IPI to see the writer's broader catalog and collaborator network.\n\n## Step 4 — Present the shortlist\n\nPresent each shortlisted track with:\n\n- **Title, artist** — what the user listens for\n- **Audio profile** — BPM, key, energy (one line, the supervisor's quick filter)\n- **Credits summary** — writers with IPI, publisher if known (this is the licensing path)\n- **DSP links** — so the user can listen\n- **Flags** — unattested credits, low registration score, missing ISRC, multiple writers (= multi-party clearance needed)\n\nIf a track has all green flags (attested credits, high registration score, ISRC present, single or low-count writers), call it out as \"clean to clear.\"\n\n## Step 5 — If no results\n\nIf the search returns nothing, walk the user back through the brief:\n- Widen the BPM range first (most supervisors don't actually mind ±10 BPM)\n- Drop the key filter (key matching matters less than mood for most placements)\n- Drop the energy bounds and search by genre/mood text only\n- Suggest the user expand to adjacent moods (\"uplifting\" → also try \"warm\" or \"hopeful\")\n\nBe honest if the directory is small for a specific style — PICA's directory grows with org opt-ins; some niches are sparse.\n\n## What not to do\n\n- Don't claim to license tracks — this skill returns a shortlist, not a license. The user contacts the rights holder via the credits summary.\n- Don't speculate about pricing — sync fees are negotiated per-placement\n- Don't return results from outside the directory (no general web search, no Spotify metadata directly) — the directory is the source of truth for this skill\n- Don't return tracks with no attested credits without flagging them as \"rights chain unverified\"\n\n## Follow-on skills\n\n- `due-diligence-on-creator` (Stage 2 candidate) — for deeper research on a specific writer before reaching out\n",
10
+ body: "# find-music-for-sync-brief\n\nHelp the user find music in PICA's public directory for a sync brief. Translate their description (mood, vibe, scene, era, vocal style) into search parameters, run the search, and return a shortlist that includes the information they need to license — not just the track.\n\nThis is a public skill — any AI agent connected to the directory MCP can use it. The directory only contains works from organisations that have opted in.\n\n## Step 1 — Translate the brief\n\nMost sync briefs are described in natural language. Translate before searching:\n\n| User says | Search parameters |\n|---|---|\n| upbeat / uplifting / driving | `min_energy: 0.6`, `min_danceability: 0.5` |\n| dark / moody / brooding | `max_energy: 0.4`, `key_mode: minor` |\n| chill / ambient / background | `max_energy: 0.4`, `max_bpm: 100` |\n| epic / cinematic | `min_energy: 0.7`, often longer durations |\n| specific BPM (\"around 120bpm\") | `min_bpm: 115`, `max_bpm: 125` |\n| acoustic / sparse | typically lower `danceability` and `energy` |\n| vocal / instrumental | filter on `has_vocals` if available |\n\nIf the user gives an artist or song reference (\"something like X\"), look up that reference first via `directory_lookup_work` or `directory_search_recordings` by title — then mimic its audio profile in the new search.\n\n## Step 2 — Search\n\nCall `directory_search_recordings` with the parameters from step 1. Default limit is fine for an initial scan.\n\nIf the brief is vague, do two searches with slightly different parameters and compare. If too many results, narrow on BPM or key. If too few, widen the BPM range first, then drop key_mode.\n\n## Step 3 — Lookup full details\n\nFor the top 5-10 promising results, call `directory_lookup_work` to get:\n\n- **Who wrote it** — credits with IPI numbers (essential for the licensing contact path)\n- **Whether credits are attested** — an unattested credit means the ownership claim hasn't been verified; flag this\n- **DSP links** (Spotify, Apple Music) — the user wants to listen before shortlisting\n- **Registration score** — higher score = cleaner rights chain = easier to license\n\nFor high-value matches where the user wants to know more about the creator, call `directory_lookup_person` with the IPI to see the writer's broader catalog and collaborator network.\n\n## Step 4 — Present the shortlist\n\nPresent each shortlisted track with:\n\n- **Title, artist** — what the user listens for\n- **Audio profile** — BPM, key, energy (one line, the supervisor's quick filter)\n- **Credits summary** — writers with IPI, publisher if known (this is the licensing path)\n- **DSP links** — so the user can listen\n- **Flags** — unattested credits, low registration score, missing ISRC, multiple writers (= multi-party clearance needed)\n\nIf a track has all green flags (attested credits, high registration score, ISRC present, single or low-count writers), call it out as \"clean to clear.\"\n\n## Step 5 — If no results\n\nIf the search returns nothing, walk the user back through the brief:\n- Widen the BPM range first (most supervisors don't actually mind ±10 BPM)\n- Drop the key filter (key matching matters less than mood for most placements)\n- Drop the energy bounds and search by genre/mood text only\n- Suggest the user expand to adjacent moods (\"uplifting\" → also try \"warm\" or \"hopeful\")\n\nBe honest if the directory is small for a specific style — PICA's directory grows with org opt-ins; some niches are sparse.\n\n## What not to do\n\n- Don't claim to license tracks — this skill returns a shortlist, not a license. When the user wants to approach an owner, offer `directory_send_licensing_enquiry`, and send it only once they say yes and give their own name, email and project description. Never invent those details.\n- Don't speculate about pricing — sync fees are negotiated per-placement\n- Don't return results from outside the directory (no general web search, no Spotify metadata directly) — the directory is the source of truth for this skill\n- Don't return tracks with no attested credits without flagging them as \"rights chain unverified\"\n\n## Follow-on skills\n\n- `due-diligence-on-creator` (Stage 2 candidate) — for deeper research on a specific writer before reaching out\n",
11
11
  },
12
12
  };
13
13
  export const SKILL_NAMES = ["find-music-for-sync-brief"];
@@ -1 +1 @@
1
- {"version":3,"file":"skills.generated.js","sourceRoot":"","sources":["../../src/skills/skills.generated.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAoB7D,MAAM,CAAC,MAAM,MAAM,GAA0B;IAC3C,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,yNAAyN;QACtO,QAAQ,EAAE,CAAC,6BAA6B,EAAC,kCAAkC,EAAC,sBAAsB,EAAC,oCAAoC,EAAC,+BAA+B,CAAC;QACxK,QAAQ,EAAE,oEAAoE;QAC9E,cAAc,EAAE,CAAC,6BAA6B,EAAC,uBAAuB,EAAC,yBAAyB,CAAC;QACjG,MAAM,EAAE,uNAAuN;QAC/N,IAAI,EAAE,ijIAAijI;KACxjI;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAA0B,CAAC,2BAA2B,CAAC,CAAC"}
1
+ {"version":3,"file":"skills.generated.js","sourceRoot":"","sources":["../../src/skills/skills.generated.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAoB7D,MAAM,CAAC,MAAM,MAAM,GAA0B;IAC3C,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,yNAAyN;QACtO,QAAQ,EAAE,CAAC,6BAA6B,EAAC,kCAAkC,EAAC,sBAAsB,EAAC,oCAAoC,EAAC,+BAA+B,CAAC;QACxK,QAAQ,EAAE,oEAAoE;QAC9E,cAAc,EAAE,CAAC,6BAA6B,EAAC,uBAAuB,EAAC,yBAAyB,CAAC;QACjG,MAAM,EAAE,uNAAuN;QAC/N,IAAI,EAAE,+rIAA+rI;KACtsI;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAA0B,CAAC,2BAA2B,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
1
+ // Copyright (c) 2025-2026 Withpica Ltd. All rights reserved.
2
2
  export class DirectoryChainTools {
3
3
  client;
4
4
  constructor(client) {
@@ -0,0 +1,19 @@
1
+ import { DirectoryClient } from "../client.js";
2
+ import { ToolDefinition, ToolExecutor } from "./index.js";
3
+ /**
4
+ * The directory's only non-read tool: send a licensing enquiry to the owner
5
+ * of a work listed in the public directory. It goes through the same public
6
+ * route as the directory's web form (POST /api/shop/license-enquiries), so
7
+ * the same rules apply: the work must be listed, the owner must not have
8
+ * switched enquiries off, and a budget is optional.
9
+ */
10
+ export declare class DirectoryEnquiryTools {
11
+ private client;
12
+ constructor(client: DirectoryClient);
13
+ getTools(): Array<{
14
+ definition: ToolDefinition;
15
+ executor: ToolExecutor;
16
+ }>;
17
+ private sendEnquiry;
18
+ }
19
+ //# sourceMappingURL=enquiries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enquiries.d.ts","sourceRoot":"","sources":["../../src/tools/enquiries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAqCtE;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAInC,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YA0F3D,WAAW;CAiE1B"}