@h-ear/mcp-server 1.0.9 → 1.1.0-dev.202604170830

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 (71) hide show
  1. package/dist/schemas/index.d.ts +129 -0
  2. package/dist/schemas/index.d.ts.map +1 -0
  3. package/dist/schemas/index.js +269 -0
  4. package/dist/schemas/index.js.map +1 -0
  5. package/dist/server.d.ts.map +1 -1
  6. package/dist/server.js +4 -0
  7. package/dist/server.js.map +1 -1
  8. package/dist/tools/classify-audio.d.ts.map +1 -1
  9. package/dist/tools/classify-audio.js +73 -62
  10. package/dist/tools/classify-audio.js.map +1 -1
  11. package/dist/tools/classify-batch.d.ts.map +1 -1
  12. package/dist/tools/classify-batch.js +2 -22
  13. package/dist/tools/classify-batch.js.map +1 -1
  14. package/dist/tools/create-webhook.d.ts.map +1 -1
  15. package/dist/tools/create-webhook.js +2 -15
  16. package/dist/tools/create-webhook.js.map +1 -1
  17. package/dist/tools/delete-webhook.d.ts.map +1 -1
  18. package/dist/tools/delete-webhook.js +2 -5
  19. package/dist/tools/delete-webhook.js.map +1 -1
  20. package/dist/tools/get-job-audio.d.ts.map +1 -1
  21. package/dist/tools/get-job-audio.js +2 -10
  22. package/dist/tools/get-job-audio.js.map +1 -1
  23. package/dist/tools/get-job-events.d.ts.map +1 -1
  24. package/dist/tools/get-job-events.js +2 -34
  25. package/dist/tools/get-job-events.js.map +1 -1
  26. package/dist/tools/get-job-report.d.ts +4 -0
  27. package/dist/tools/get-job-report.d.ts.map +1 -0
  28. package/dist/tools/get-job-report.js +16 -0
  29. package/dist/tools/get-job-report.js.map +1 -0
  30. package/dist/tools/get-job-waveform.d.ts.map +1 -1
  31. package/dist/tools/get-job-waveform.js +2 -14
  32. package/dist/tools/get-job-waveform.js.map +1 -1
  33. package/dist/tools/get-job.d.ts.map +1 -1
  34. package/dist/tools/get-job.js +2 -5
  35. package/dist/tools/get-job.js.map +1 -1
  36. package/dist/tools/get-upload-status.d.ts +3 -0
  37. package/dist/tools/get-upload-status.d.ts.map +1 -0
  38. package/dist/tools/get-upload-status.js +18 -0
  39. package/dist/tools/get-upload-status.js.map +1 -0
  40. package/dist/tools/get-webhook.d.ts.map +1 -1
  41. package/dist/tools/get-webhook.js +2 -5
  42. package/dist/tools/get-webhook.js.map +1 -1
  43. package/dist/tools/health-check.d.ts.map +1 -1
  44. package/dist/tools/health-check.js +7 -2
  45. package/dist/tools/health-check.js.map +1 -1
  46. package/dist/tools/list-classes.d.ts.map +1 -1
  47. package/dist/tools/list-classes.js +2 -15
  48. package/dist/tools/list-classes.js.map +1 -1
  49. package/dist/tools/list-jobs.d.ts.map +1 -1
  50. package/dist/tools/list-jobs.js +2 -15
  51. package/dist/tools/list-jobs.js.map +1 -1
  52. package/dist/tools/list-webhook-deliveries.d.ts.map +1 -1
  53. package/dist/tools/list-webhook-deliveries.js +2 -7
  54. package/dist/tools/list-webhook-deliveries.js.map +1 -1
  55. package/dist/tools/list-webhooks.d.ts.map +1 -1
  56. package/dist/tools/list-webhooks.js +2 -1
  57. package/dist/tools/list-webhooks.js.map +1 -1
  58. package/dist/tools/ping-webhook.d.ts.map +1 -1
  59. package/dist/tools/ping-webhook.js +2 -5
  60. package/dist/tools/ping-webhook.js.map +1 -1
  61. package/dist/tools/update-webhook.d.ts.map +1 -1
  62. package/dist/tools/update-webhook.js +2 -19
  63. package/dist/tools/update-webhook.js.map +1 -1
  64. package/dist/tools/usage.d.ts.map +1 -1
  65. package/dist/tools/usage.js +2 -1
  66. package/dist/tools/usage.js.map +1 -1
  67. package/dist/upload-tracker.d.ts +31 -0
  68. package/dist/upload-tracker.d.ts.map +1 -0
  69. package/dist/upload-tracker.js +34 -0
  70. package/dist/upload-tracker.js.map +1 -0
  71. package/package.json +7 -2
@@ -0,0 +1,18 @@
1
+ import { trackerGet } from '../upload-tracker.js';
2
+ import { GET_UPLOAD_STATUS_SHAPE, toolDescriptions } from '../schemas/index.js';
3
+ export function registerGetUploadStatus(server) {
4
+ server.tool('getUploadStatus', toolDescriptions.getUploadStatus, GET_UPLOAD_STATUS_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }, async (params) => {
5
+ const state = trackerGet(params.uploadSessionId);
6
+ if (!state) {
7
+ return {
8
+ content: [{
9
+ type: 'text',
10
+ text: `No upload session found in this MCP process for ${params.uploadSessionId}. The MCP server may have restarted, or the session may have been started by a different process. The server-side session itself may still be live (10-min TTL) — try listJobs to see if the upload completed.`,
11
+ }],
12
+ isError: true,
13
+ };
14
+ }
15
+ return { content: [{ type: 'text', text: JSON.stringify(state, null, 2) }] };
16
+ });
17
+ }
18
+ //# sourceMappingURL=get-upload-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-upload-status.js","sourceRoot":"","sources":["../../src/tools/get-upload-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACP,iBAAiB,EACjB,gBAAgB,CAAC,eAAe,EAChC,uBAAuB,EACvB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAC1F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,mDAAmD,MAAM,CAAC,eAAe,gNAAgN;qBAClS,CAAC;gBACF,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-webhook.d.ts","sourceRoot":"","sources":["../../src/tools/get-webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAqBjF"}
1
+ {"version":3,"file":"get-webhook.d.ts","sourceRoot":"","sources":["../../src/tools/get-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBjF"}
@@ -1,9 +1,6 @@
1
- import { z } from 'zod';
1
+ import { GET_WEBHOOK_SHAPE, toolDescriptions } from '../schemas/index.js';
2
2
  export function registerGetWebhook(server, client) {
3
- server.tool('getWebhook', 'Get detailed information about a specific enterprise webhook, including delivery stats, notification filters, and status. Requires Bearer token (enterprise subscription).', {
4
- webhookId: z.string().min(1)
5
- .describe('The webhook ID to retrieve.'),
6
- }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
3
+ server.tool('getWebhook', toolDescriptions.getWebhook, GET_WEBHOOK_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
7
4
  try {
8
5
  const result = await client.getEnterpriseWebhook(params.webhookId);
9
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"get-webhook.js","sourceRoot":"","sources":["../../src/tools/get-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAqB;IACvE,MAAM,CAAC,IAAI,CACP,YAAY,EACZ,4KAA4K,EAC5K;QACI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB,QAAQ,CAAC,6BAA6B,CAAC;KAC/C,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"get-webhook.js","sourceRoot":"","sources":["../../src/tools/get-webhook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAqB;IACvE,MAAM,CAAC,IAAI,CACP,YAAY,EACZ,gBAAgB,CAAC,UAAU,EAC3B,iBAAiB,EACjB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBlF"}
1
+ {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAmBlF"}
@@ -1,7 +1,12 @@
1
+ import { createRequire } from 'module';
2
+ import { HEALTH_CHECK_SHAPE, toolDescriptions } from '../schemas/index.js';
3
+ const require = createRequire(import.meta.url);
4
+ const { version: mcpServerVersion } = require('../../package.json');
1
5
  export function registerHealthCheck(server, client) {
2
- server.tool('healthCheck', 'Check H-ear API health and liveness. No authentication required. Returns status, version, and deployment timestamp.', {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => {
6
+ server.tool('healthCheck', toolDescriptions.healthCheck, HEALTH_CHECK_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => {
3
7
  try {
4
- const result = await client.health();
8
+ const api = await client.health();
9
+ const result = { ...api, mcpServerVersion };
5
10
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
6
11
  }
7
12
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IACxE,MAAM,CAAC,IAAI,CACP,aAAa,EACb,qHAAqH,EACrH,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAE3F,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IACxE,MAAM,CAAC,IAAI,CACP,aAAa,EACb,gBAAgB,CAAC,WAAW,EAC5B,kBAAkB,EAClB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,gBAAgB,EAAE,CAAC;YAC5C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-classes.d.ts","sourceRoot":"","sources":["../../src/tools/list-classes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+BlF"}
1
+ {"version":3,"file":"list-classes.d.ts","sourceRoot":"","sources":["../../src/tools/list-classes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBlF"}
@@ -1,19 +1,6 @@
1
- import { z } from 'zod';
1
+ import { LIST_CLASSES_SHAPE, toolDescriptions } from '../schemas/index.js';
2
2
  export function registerListClasses(server, client) {
3
- server.tool('listClasses', 'List supported audio classification classes. Default taxonomy: audioset-yamnet-521 (521 classes across 7 categories). Also available: audioset-panns-527 (527 classes), species (6522 bird species). ' +
4
- 'Each class has a tierDepth (1–5) indicating its position in the AudioSet hierarchy, but filtering in getJobEvents and webhook notifications is supported up to tier 3 only. ' +
5
- 'Response fields: total and totalFiltered both reflect the post-filter count; totalAvailable is the unfiltered class count for the entire taxonomy. ' +
6
- 'Some AudioSet indices are retired and absent (e.g. 79, 83, 87) — this is normal, do not treat index gaps as errors. ' +
7
- 'No authentication required.', {
8
- taxonomy: z.enum(['audioset-yamnet-521', 'audioset-panns-527', 'species']).optional()
9
- .describe('Taxonomy to query. Defaults to audioset-yamnet-521.'),
10
- category: z.string().optional()
11
- .describe('Filter by category name (case-insensitive partial match). E.g. "Animal", "Human sounds", "Music".'),
12
- limit: z.number().int().positive().optional()
13
- .describe('Max classes to return (pagination).'),
14
- offset: z.number().int().min(0).optional()
15
- .describe('Number of classes to skip (pagination).'),
16
- }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
3
+ server.tool('listClasses', toolDescriptions.listClasses, LIST_CLASSES_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
17
4
  try {
18
5
  const result = await client.listClasses(params);
19
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"list-classes.js","sourceRoot":"","sources":["../../src/tools/list-classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IACxE,MAAM,CAAC,IAAI,CACP,aAAa,EACb,uMAAuM;QACvM,8KAA8K;QAC9K,qJAAqJ;QACrJ,sHAAsH;QACtH,6BAA6B,EAC7B;QACI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;aAChF,QAAQ,CAAC,qDAAqD,CAAC;QACpE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,mGAAmG,CAAC;QAClH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;aACxC,QAAQ,CAAC,qCAAqC,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACrC,QAAQ,CAAC,yCAAyC,CAAC;KAC3D,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"list-classes.js","sourceRoot":"","sources":["../../src/tools/list-classes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IACxE,MAAM,CAAC,IAAI,CACP,aAAa,EACb,gBAAgB,CAAC,WAAW,EAC5B,kBAAkB,EAClB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-jobs.d.ts","sourceRoot":"","sources":["../../src/tools/list-jobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+B/E"}
1
+ {"version":3,"file":"list-jobs.d.ts","sourceRoot":"","sources":["../../src/tools/list-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB/E"}
@@ -1,19 +1,6 @@
1
- import { z } from 'zod';
1
+ import { LIST_JOBS_SHAPE, toolDescriptions } from '../schemas/index.js';
2
2
  export function registerListJobs(server, client) {
3
- server.tool('listJobs', 'List recent classification jobs with status, file name, event count, and timestamps. Supports pagination. Requires API key (HEAR_API_KEY).', {
4
- limit: z.number().int().positive().max(100).default(10)
5
- .describe('Max jobs to return (1-100, default 10).'),
6
- offset: z.number().int().min(0).default(0)
7
- .describe('Number of jobs to skip (pagination).'),
8
- status: z.enum(['processing', 'completed', 'failed']).optional()
9
- .describe('Filter by job status.'),
10
- batchId: z.string().optional()
11
- .describe('Filter by batch ID (from classifyBatch).'),
12
- startDate: z.string().optional()
13
- .describe('ISO8601 date range start — jobs created on or after this date (e.g. "2026-01-01T00:00:00Z").'),
14
- endDate: z.string().optional()
15
- .describe('ISO8601 date range end — jobs created on or before this date (e.g. "2026-04-04T23:59:59Z").'),
16
- }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
3
+ server.tool('listJobs', toolDescriptions.listJobs, LIST_JOBS_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
17
4
  try {
18
5
  const result = await client.listJobs(params);
19
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"list-jobs.js","sourceRoot":"","sources":["../../src/tools/list-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAqB;IACrE,MAAM,CAAC,IAAI,CACP,UAAU,EACV,4IAA4I,EAC5I;QACI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAClD,QAAQ,CAAC,yCAAyC,CAAC;QACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;aACrC,QAAQ,CAAC,sCAAsC,CAAC;QACrD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;aAC3D,QAAQ,CAAC,uBAAuB,CAAC;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACzB,QAAQ,CAAC,0CAA0C,CAAC;QACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,8FAA8F,CAAC;QAC7G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACzB,QAAQ,CAAC,6FAA6F,CAAC;KAC/G,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACzH,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"list-jobs.js","sourceRoot":"","sources":["../../src/tools/list-jobs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAqB;IACrE,MAAM,CAAC,IAAI,CACP,UAAU,EACV,gBAAgB,CAAC,QAAQ,EACzB,eAAe,EACf,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACzH,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-webhook-deliveries.d.ts","sourceRoot":"","sources":["../../src/tools/list-webhook-deliveries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAuB5F"}
1
+ {"version":3,"file":"list-webhook-deliveries.d.ts","sourceRoot":"","sources":["../../src/tools/list-webhook-deliveries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB5F"}
@@ -1,11 +1,6 @@
1
- import { z } from 'zod';
1
+ import { LIST_WEBHOOK_DELIVERIES_SHAPE, toolDescriptions } from '../schemas/index.js';
2
2
  export function registerListWebhookDeliveries(server, client) {
3
- server.tool('listWebhookDeliveries', 'List recent delivery attempts for an enterprise webhook. Shows event type, HTTP response status, success/failure, timing, and attempt count for audit trail. Requires Bearer token (enterprise subscription).', {
4
- webhookId: z.string().min(1)
5
- .describe('The webhook ID to get deliveries for.'),
6
- limit: z.number().int().positive().max(100).default(20)
7
- .describe('Max deliveries to return (1-100, default 20).'),
8
- }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
3
+ server.tool('listWebhookDeliveries', toolDescriptions.listWebhookDeliveries, LIST_WEBHOOK_DELIVERIES_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
9
4
  try {
10
5
  const result = await client.getEnterpriseWebhookDeliveries(params.webhookId, { limit: params.limit });
11
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"list-webhook-deliveries.js","sourceRoot":"","sources":["../../src/tools/list-webhook-deliveries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,6BAA6B,CAAC,MAAiB,EAAE,MAAqB;IAClF,MAAM,CAAC,IAAI,CACP,uBAAuB,EACvB,+MAA+M,EAC/M;QACI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB,QAAQ,CAAC,uCAAuC,CAAC;QACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAClD,QAAQ,CAAC,+CAA+C,CAAC;KACjE,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC/H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"list-webhook-deliveries.js","sourceRoot":"","sources":["../../src/tools/list-webhook-deliveries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,UAAU,6BAA6B,CAAC,MAAiB,EAAE,MAAqB;IAClF,MAAM,CAAC,IAAI,CACP,uBAAuB,EACvB,gBAAgB,CAAC,qBAAqB,EACtC,6BAA6B,EAC7B,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC/H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/list-webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBnF"}
1
+ {"version":3,"file":"list-webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/list-webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBnF"}
@@ -1,5 +1,6 @@
1
+ import { LIST_WEBHOOKS_SHAPE, toolDescriptions } from '../schemas/index.js';
1
2
  export function registerListWebhooks(server, client) {
2
- server.tool('listWebhooks', 'List all enterprise webhook registrations. Shows URL, subscribed events, status, failure count, and notification filter config. Requires Bearer token (enterprise subscription).', {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => {
3
+ server.tool('listWebhooks', toolDescriptions.listWebhooks, LIST_WEBHOOKS_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => {
3
4
  try {
4
5
  const result = await client.listEnterpriseWebhooks();
5
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"list-webhooks.js","sourceRoot":"","sources":["../../src/tools/list-webhooks.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAqB;IACzE,MAAM,CAAC,IAAI,CACP,cAAc,EACd,kLAAkL,EAClL,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC7H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"list-webhooks.js","sourceRoot":"","sources":["../../src/tools/list-webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAqB;IACzE,MAAM,CAAC,IAAI,CACP,cAAc,EACd,gBAAgB,CAAC,YAAY,EAC7B,mBAAmB,EACnB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC7H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ping-webhook.d.ts","sourceRoot":"","sources":["../../src/tools/ping-webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAqBlF"}
1
+ {"version":3,"file":"ping-webhook.d.ts","sourceRoot":"","sources":["../../src/tools/ping-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBlF"}
@@ -1,9 +1,6 @@
1
- import { z } from 'zod';
1
+ import { PING_WEBHOOK_SHAPE, toolDescriptions } from '../schemas/index.js';
2
2
  export function registerPingWebhook(server, client) {
3
- server.tool('pingWebhook', 'Send a test ping event to an enterprise webhook to verify connectivity. Returns delivery result with response status and timing. Requires Bearer token (enterprise subscription).', {
4
- webhookId: z.string().min(1)
5
- .describe('The webhook ID to ping.'),
6
- }, { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }, async (params) => {
3
+ server.tool('pingWebhook', toolDescriptions.pingWebhook, PING_WEBHOOK_SHAPE, { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }, async (params) => {
7
4
  try {
8
5
  const result = await client.pingEnterpriseWebhook(params.webhookId);
9
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"ping-webhook.js","sourceRoot":"","sources":["../../src/tools/ping-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IACxE,MAAM,CAAC,IAAI,CACP,aAAa,EACb,mLAAmL,EACnL;QACI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB,QAAQ,CAAC,yBAAyB,CAAC;KAC3C,EACD,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAC3F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"ping-webhook.js","sourceRoot":"","sources":["../../src/tools/ping-webhook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IACxE,MAAM,CAAC,IAAI,CACP,aAAa,EACb,gBAAgB,CAAC,WAAW,EAC5B,kBAAkB,EAClB,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAC3F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-webhook.d.ts","sourceRoot":"","sources":["../../src/tools/update-webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAoCpF"}
1
+ {"version":3,"file":"update-webhook.d.ts","sourceRoot":"","sources":["../../src/tools/update-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAmBpF"}
@@ -1,23 +1,6 @@
1
- import { z } from 'zod';
1
+ import { UPDATE_WEBHOOK_SHAPE, toolDescriptions } from '../schemas/index.js';
2
2
  export function registerUpdateWebhook(server, client) {
3
- server.tool('updateWebhook', 'Update an enterprise webhook registration. Change events, URL, status (active/paused), or notification filters. Set status to "paused" to temporarily disable without deleting. Requires Bearer token (enterprise subscription).', {
4
- webhookId: z.string().min(1)
5
- .describe('The webhook ID to update.'),
6
- url: z.string().url().optional()
7
- .describe('New HTTPS webhook URL.'),
8
- events: z.array(z.string()).optional()
9
- .describe('New event types to subscribe to.'),
10
- status: z.enum(['active', 'paused']).optional()
11
- .describe('Set to "paused" to disable or "active" to re-enable.'),
12
- description: z.string().max(200).optional()
13
- .describe('Updated description.'),
14
- taxonomyFilter: z.array(z.string()).nullable().optional()
15
- .describe('Scope to taxonomies. Pass null to clear filter.'),
16
- notificationTierDepth: z.number().int().min(1).max(3).nullable().optional()
17
- .describe('AudioSet tier depth (1=coarse, 2=mid, 3=fine). Max depth is 3 — tiers 4-5 exist in the taxonomy but are not supported for webhook filtering. Pass null to clear. Must pair with notificationTierValues.'),
18
- notificationTierValues: z.array(z.string()).nullable().optional()
19
- .describe('Tier labels to match. Pass null to clear. Must pair with notificationTierDepth.'),
20
- }, { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
3
+ server.tool('updateWebhook', toolDescriptions.updateWebhook, UPDATE_WEBHOOK_SHAPE, { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
21
4
  try {
22
5
  const { webhookId, ...updates } = params;
23
6
  const result = await client.updateEnterpriseWebhook(webhookId, updates);
@@ -1 +1 @@
1
- {"version":3,"file":"update-webhook.js","sourceRoot":"","sources":["../../src/tools/update-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,MAAM,CAAC,IAAI,CACP,eAAe,EACf,kOAAkO,EAClO;QACI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB,QAAQ,CAAC,2BAA2B,CAAC;QAC1C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,wBAAwB,CAAC;QACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;aACjC,QAAQ,CAAC,kCAAkC,CAAC;QACjD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;aAC1C,QAAQ,CAAC,sDAAsD,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;aACtC,QAAQ,CAAC,sBAAsB,CAAC;QACrC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;aACpD,QAAQ,CAAC,iDAAiD,CAAC;QAChE,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;aACtE,QAAQ,CAAC,yMAAyM,CAAC;QACxN,sBAAsB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;aAC5D,QAAQ,CAAC,iFAAiF,CAAC;KACnG,EACD,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAC1F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC9H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"update-webhook.js","sourceRoot":"","sources":["../../src/tools/update-webhook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,MAAM,CAAC,IAAI,CACP,eAAe,EACf,gBAAgB,CAAC,aAAa,EAC9B,oBAAoB,EACpB,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAC1F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC9H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB5E"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB5E"}
@@ -1,5 +1,6 @@
1
+ import { USAGE_SHAPE, toolDescriptions } from '../schemas/index.js';
1
2
  export function registerUsage(server, client) {
2
- server.tool('usage', 'Get H-ear API usage statistics: minutes used, calls today, quota remaining, active keys. Requires API key (HEAR_API_KEY).', {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => {
3
+ server.tool('usage', toolDescriptions.usage, USAGE_SHAPE, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => {
3
4
  try {
4
5
  const result = await client.usage();
5
6
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAqB;IAClE,MAAM,CAAC,IAAI,CACP,OAAO,EACP,2HAA2H,EAC3H,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAqB;IAClE,MAAM,CAAC,IAAI,CACP,OAAO,EACP,gBAAgB,CAAC,KAAK,EACtB,WAAW,EACX,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EACzF,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3H,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * In-memory tracker for in-flight byte-slice uploads on the MCP stdio server.
3
+ *
4
+ * Why this exists: `classifyAudio` returns immediately after slice 0 to stay
5
+ * within the MCP client's tool-call wall budget. The tail upload (slices 1..N)
6
+ * runs in the background of the same Node process. AI agents poll
7
+ * `getUploadStatus(uploadSessionId)` to learn when the tail has produced a
8
+ * `requestId` they can pass to `getJob`.
9
+ *
10
+ * Lifetime: lives in the singleton MCP server process between tool calls.
11
+ * Lost on process restart — same blast radius as today's in-flight promise.
12
+ */
13
+ export type UploadState = {
14
+ uploadSessionId: string;
15
+ fileName: string;
16
+ totalSlices: number;
17
+ slicesUploaded: number;
18
+ totalBytes: number;
19
+ startedAt: string;
20
+ lastUpdatedAt: string;
21
+ status: 'uploading' | 'complete' | 'failed';
22
+ requestId?: string;
23
+ error?: string;
24
+ };
25
+ export declare function trackerStart(state: Omit<UploadState, 'lastUpdatedAt'>): void;
26
+ export declare function trackerUpdate(uploadSessionId: string, patch: Partial<UploadState>): void;
27
+ export declare function trackerGet(uploadSessionId: string): UploadState | undefined;
28
+ export declare function trackerSize(): number;
29
+ /** Test-only: clear the tracker between cases. */
30
+ export declare function trackerReset(): void;
31
+ //# sourceMappingURL=upload-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-tracker.d.ts","sourceRoot":"","sources":["../src/upload-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,WAAW,GAAG;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,IAAI,CAE5E;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAIxF;AAED,wBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE3E;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,kDAAkD;AAClD,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * In-memory tracker for in-flight byte-slice uploads on the MCP stdio server.
3
+ *
4
+ * Why this exists: `classifyAudio` returns immediately after slice 0 to stay
5
+ * within the MCP client's tool-call wall budget. The tail upload (slices 1..N)
6
+ * runs in the background of the same Node process. AI agents poll
7
+ * `getUploadStatus(uploadSessionId)` to learn when the tail has produced a
8
+ * `requestId` they can pass to `getJob`.
9
+ *
10
+ * Lifetime: lives in the singleton MCP server process between tool calls.
11
+ * Lost on process restart — same blast radius as today's in-flight promise.
12
+ */
13
+ const tracker = new Map();
14
+ export function trackerStart(state) {
15
+ tracker.set(state.uploadSessionId, { ...state, lastUpdatedAt: state.startedAt });
16
+ }
17
+ export function trackerUpdate(uploadSessionId, patch) {
18
+ const existing = tracker.get(uploadSessionId);
19
+ if (!existing) {
20
+ return;
21
+ }
22
+ tracker.set(uploadSessionId, { ...existing, ...patch, lastUpdatedAt: new Date().toISOString() });
23
+ }
24
+ export function trackerGet(uploadSessionId) {
25
+ return tracker.get(uploadSessionId);
26
+ }
27
+ export function trackerSize() {
28
+ return tracker.size;
29
+ }
30
+ /** Test-only: clear the tracker between cases. */
31
+ export function trackerReset() {
32
+ tracker.clear();
33
+ }
34
+ //# sourceMappingURL=upload-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-tracker.js","sourceRoot":"","sources":["../src/upload-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,KAAyC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,eAAuB,EAAE,KAA2B;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,eAAuB;IAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,YAAY;IACxB,OAAO,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h-ear/mcp-server",
3
- "version": "1.0.9",
3
+ "version": "1.1.0-dev.202604170830",
4
4
  "mcpName": "io.github.badajoz95/h-ear",
5
5
  "description": "MCP server for the H-ear World audio classification API — connect Claude, ChatGPT, and other AI agents to 521+ sound classes",
6
6
  "type": "module",
@@ -17,6 +17,10 @@
17
17
  "./server": {
18
18
  "import": "./dist/server.js",
19
19
  "types": "./dist/server.d.ts"
20
+ },
21
+ "./schemas": {
22
+ "import": "./dist/schemas/index.js",
23
+ "types": "./dist/schemas/index.d.ts"
20
24
  }
21
25
  },
22
26
  "publishConfig": {
@@ -38,7 +42,8 @@
38
42
  },
39
43
  "dependencies": {
40
44
  "@h-ear/core": "^1.0.0",
41
- "@modelcontextprotocol/sdk": "^1.26.0"
45
+ "@modelcontextprotocol/sdk": "^1.26.0",
46
+ "zod-to-json-schema": "^3.25.2"
42
47
  },
43
48
  "devDependencies": {
44
49
  "@eslint/js": "^10.0.1",