@h-ear/mcp-server 0.1.8 → 0.2.0-dev.202604040406
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/get-job-audio.d.ts +4 -0
- package/dist/tools/get-job-audio.d.ts.map +1 -0
- package/dist/tools/get-job-audio.js +24 -0
- package/dist/tools/get-job-audio.js.map +1 -0
- package/dist/tools/get-job-events.d.ts +4 -0
- package/dist/tools/get-job-events.d.ts.map +1 -0
- package/dist/tools/get-job-events.js +52 -0
- package/dist/tools/get-job-events.js.map +1 -0
- package/dist/tools/get-job-waveform.d.ts +4 -0
- package/dist/tools/get-job-waveform.d.ts.map +1 -0
- package/dist/tools/get-job-waveform.js +28 -0
- package/dist/tools/get-job-waveform.js.map +1 -0
- package/dist/tools/list-jobs.d.ts.map +1 -1
- package/dist/tools/list-jobs.js +6 -0
- package/dist/tools/list-jobs.js.map +1 -1
- package/dist/version-check.d.ts +3 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +68 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9,9 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @see https://h-ear.world
|
|
11
11
|
*/
|
|
12
|
+
import { createRequire } from 'module';
|
|
12
13
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
13
14
|
import { resolveConfig } from './config.js';
|
|
14
15
|
import { createServer } from './server.js';
|
|
16
|
+
import { checkForUpdates } from './version-check.js';
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
const { version: currentVersion } = require('../package.json');
|
|
15
19
|
async function main() {
|
|
16
20
|
// Help flag
|
|
17
21
|
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
@@ -70,6 +74,7 @@ async function main() {
|
|
|
70
74
|
const transport = new StdioServerTransport();
|
|
71
75
|
await server.connect(transport);
|
|
72
76
|
process.stderr.write('[h-ear-mcp] Server started on stdio\n');
|
|
77
|
+
checkForUpdates(server, currentVersion);
|
|
73
78
|
}
|
|
74
79
|
main().catch((error) => {
|
|
75
80
|
process.stderr.write(`[h-ear-mcp] Fatal: ${error instanceof Error ? error.message : String(error)}\n`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtF,KAAK,UAAU,IAAI;IACf,YAAY;IACZ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkC1B,CAAC,CAAC;QACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAExC,mFAAmF;IACnF,2FAA2F;IAC3F,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC;IACtD,oBAAoB,CAAC,SAAS,CAAC,IAAI,GAAG,UAAsC,OAAgB;QACxF,MAAM,GAAG,GAAG,OAAkC,CAAC;QAC/C,IAAI,GAAG,EAAE,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAiC,CAAC;YACrD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAA2B,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC9J,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAyB,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC9D,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAqB/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAkC/F"}
|
package/dist/server.js
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* H-ear MCP Server — registers all tools, resources, and prompts.
|
|
3
3
|
* Exported for testing (InMemoryTransport) and programmatic use.
|
|
4
4
|
*/
|
|
5
|
+
import { createRequire } from 'module';
|
|
5
6
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
const { version } = require('../package.json');
|
|
6
9
|
import { HearApiClient } from '@h-ear/core';
|
|
7
10
|
import { registerHealthCheck } from './tools/health-check.js';
|
|
8
11
|
import { registerListClasses } from './tools/list-classes.js';
|
|
@@ -11,6 +14,9 @@ import { registerClassifyBatch } from './tools/classify-batch.js';
|
|
|
11
14
|
import { registerUsage } from './tools/usage.js';
|
|
12
15
|
import { registerListJobs } from './tools/list-jobs.js';
|
|
13
16
|
import { registerGetJob } from './tools/get-job.js';
|
|
17
|
+
import { registerGetJobEvents } from './tools/get-job-events.js';
|
|
18
|
+
import { registerGetJobAudio } from './tools/get-job-audio.js';
|
|
19
|
+
import { registerGetJobWaveform } from './tools/get-job-waveform.js';
|
|
14
20
|
import { registerCreateWebhook } from './tools/create-webhook.js';
|
|
15
21
|
import { registerListWebhooks } from './tools/list-webhooks.js';
|
|
16
22
|
import { registerGetWebhook } from './tools/get-webhook.js';
|
|
@@ -21,7 +27,7 @@ import { registerListWebhookDeliveries } from './tools/list-webhook-deliveries.j
|
|
|
21
27
|
import { registerApiStatus } from './resources/api-status.js';
|
|
22
28
|
import { registerClassifyAudioPrompt } from './prompts/classify-audio.js';
|
|
23
29
|
export function createServer(config) {
|
|
24
|
-
const server = new McpServer({ name: 'h-ear-mcp', version
|
|
30
|
+
const server = new McpServer({ name: 'h-ear-mcp', version }, { capabilities: { logging: {} } });
|
|
25
31
|
const client = new HearApiClient(config);
|
|
26
32
|
// Tools
|
|
27
33
|
registerHealthCheck(server, client);
|
|
@@ -31,6 +37,9 @@ export function createServer(config) {
|
|
|
31
37
|
registerUsage(server, client);
|
|
32
38
|
registerListJobs(server, client);
|
|
33
39
|
registerGetJob(server, client);
|
|
40
|
+
registerGetJobEvents(server, client);
|
|
41
|
+
registerGetJobAudio(server, client);
|
|
42
|
+
registerGetJobWaveform(server, client);
|
|
34
43
|
registerCreateWebhook(server, client);
|
|
35
44
|
registerListWebhooks(server, client);
|
|
36
45
|
registerGetWebhook(server, client);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job-audio.d.ts","sourceRoot":"","sources":["../../src/tools/get-job-audio.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,CA0BlF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerGetJobAudio(server, client) {
|
|
3
|
+
server.tool('getJobAudio', 'Get a time-limited SAS URL for streaming the source audio of a classification job. ' +
|
|
4
|
+
'Returns a 1-hour URL for direct audio playback via HTML5 <audio> element or fetch. ' +
|
|
5
|
+
'The URL supports HTTP Range requests — browsers can seek without downloading the full file. ' +
|
|
6
|
+
'For event-specific playback, append a Media Fragment time range to the URL: audioUrl + "#t=1.92,5.76". ' +
|
|
7
|
+
'Only available for jobs submitted via file upload (not URL-submitted jobs). ' +
|
|
8
|
+
'Requires API key.', {
|
|
9
|
+
jobId: z.string().min(1)
|
|
10
|
+
.describe('Job ID from classifyAudio, classifyBatch, or listJobs.'),
|
|
11
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: false }, async (params) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await client.getJobAudio(params.jobId);
|
|
14
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return {
|
|
18
|
+
content: [{ type: 'text', text: `Get job audio failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
19
|
+
isError: true,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=get-job-audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job-audio.js","sourceRoot":"","sources":["../../src/tools/get-job-audio.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,qFAAqF;QACrF,qFAAqF;QACrF,8FAA8F;QAC9F,yGAAyG;QACzG,8EAA8E;QAC9E,mBAAmB,EACnB;QACI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACnB,QAAQ,CAAC,wDAAwD,CAAC;KAC1E,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAC3F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtD,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job-events.d.ts","sourceRoot":"","sources":["../../src/tools/get-job-events.ts"],"names":[],"mappings":"AACA,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,CAsDnF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerGetJobEvents(server, client) {
|
|
3
|
+
server.tool('getJobEvents', 'Get paginated and filtered noise events for a completed classification job. ' +
|
|
4
|
+
'Use minConfidence to filter by confidence threshold (e.g. 0.7 for ≥70%). ' +
|
|
5
|
+
'Use category to filter by sound class tier (e.g. "Animal", "Music", "Vehicle"). ' +
|
|
6
|
+
'Use startTime/endTime to get events within a time window in seconds. ' +
|
|
7
|
+
'Returns startTime, endTime, tier1 class, confidence, decibelLevel, and realTimeStart for each event. ' +
|
|
8
|
+
'Requires API key.', {
|
|
9
|
+
jobId: z.string().min(1)
|
|
10
|
+
.describe('Job ID from classifyAudio, classifyBatch, or listJobs.'),
|
|
11
|
+
taxonomy: z.string().optional()
|
|
12
|
+
.describe('Filter by taxonomy: audioset-yamnet-521, audioset-panns-527, or species.'),
|
|
13
|
+
minConfidence: z.number().min(0).max(1).optional()
|
|
14
|
+
.describe('Minimum confidence threshold (0.0–1.0). e.g. 0.7 returns only events ≥70% confidence.'),
|
|
15
|
+
category: z.string().optional()
|
|
16
|
+
.describe('Filter by tier1 category (e.g. "Animal", "Music", "Vehicle", "Nature").'),
|
|
17
|
+
startTime: z.number().min(0).optional()
|
|
18
|
+
.describe('Only return events starting at or after this time in seconds.'),
|
|
19
|
+
endTime: z.number().min(0).optional()
|
|
20
|
+
.describe('Only return events ending at or before this time in seconds.'),
|
|
21
|
+
sourceId: z.string().optional()
|
|
22
|
+
.describe('Filter by noise source cluster ID.'),
|
|
23
|
+
sort: z.string().optional()
|
|
24
|
+
.describe('Sort field:direction — e.g. "startTime:asc", "confidence:desc", "decibelLevel:desc".'),
|
|
25
|
+
limit: z.number().int().positive().max(5000).default(100)
|
|
26
|
+
.describe('Max events per page (1–5000, default 100).'),
|
|
27
|
+
offset: z.number().int().min(0).default(0)
|
|
28
|
+
.describe('Pagination offset.'),
|
|
29
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }, async (params) => {
|
|
30
|
+
try {
|
|
31
|
+
const result = await client.getJobEvents(params.jobId, {
|
|
32
|
+
taxonomy: params.taxonomy,
|
|
33
|
+
minConfidence: params.minConfidence,
|
|
34
|
+
category: params.category,
|
|
35
|
+
startTime: params.startTime,
|
|
36
|
+
endTime: params.endTime,
|
|
37
|
+
sourceId: params.sourceId,
|
|
38
|
+
sort: params.sort,
|
|
39
|
+
limit: params.limit,
|
|
40
|
+
offset: params.offset,
|
|
41
|
+
});
|
|
42
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return {
|
|
46
|
+
content: [{ type: 'text', text: `Get job events failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
47
|
+
isError: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=get-job-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job-events.js","sourceRoot":"","sources":["../../src/tools/get-job-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job-waveform.d.ts","sourceRoot":"","sources":["../../src/tools/get-job-waveform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA8BrF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerGetJobWaveform(server, client) {
|
|
3
|
+
server.tool('getJobWaveform', 'Get pre-computed waveform data and audio URL for a completed classification job. ' +
|
|
4
|
+
'Returns waveformUrl (peaks.js-compatible .dat binary) and audioUrl for synchronized playback. ' +
|
|
5
|
+
'Initialize peaks.js with: Peaks.init({ dataUri: { arraybuffer: waveformUrl }, mediaElement: audioEl }). ' +
|
|
6
|
+
'If waveformUrl is null, use wavesurfer.js with audioUrl instead (decodes via Web Audio API). ' +
|
|
7
|
+
'Zoom controls resolution: 256=high detail, 1024=standard (default), 4096=overview. ' +
|
|
8
|
+
'Both URLs expire in 1 hour. ' +
|
|
9
|
+
'For event navigation, combine with getJobEvents to get startTime values for seeking. ' +
|
|
10
|
+
'Requires API key.', {
|
|
11
|
+
jobId: z.string().min(1)
|
|
12
|
+
.describe('Job ID from classifyAudio, classifyBatch, or listJobs.'),
|
|
13
|
+
zoom: z.union([z.literal(256), z.literal(1024), z.literal(4096)]).default(1024)
|
|
14
|
+
.describe('Waveform resolution in samples-per-pixel: 256 (high detail), 1024 (default), 4096 (overview).'),
|
|
15
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: false }, async (params) => {
|
|
16
|
+
try {
|
|
17
|
+
const result = await client.getJobWaveform(params.jobId, { zoom: params.zoom });
|
|
18
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: 'text', text: `Get job waveform failed: ${error instanceof Error ? error.message : String(error)}` }],
|
|
23
|
+
isError: true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=get-job-waveform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job-waveform.js","sourceRoot":"","sources":["../../src/tools/get-job-waveform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAqB;IAC3E,MAAM,CAAC,IAAI,CACP,gBAAgB,EAChB,mFAAmF;QACnF,gGAAgG;QAChG,0GAA0G;QAC1G,+FAA+F;QAC/F,qFAAqF;QACrF,8BAA8B;QAC9B,uFAAuF;QACvF,mBAAmB,EACnB;QACI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACnB,QAAQ,CAAC,wDAAwD,CAAC;QACvE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;aAC1E,QAAQ,CAAC,+FAA+F,CAAC;KACjH,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAC3F,KAAK,EAAE,MAAM,EAAE,EAAE;QACb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAyB,EAAE,CAAC,CAAC;YACrG,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,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAChI,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,
|
|
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"}
|
package/dist/tools/list-jobs.js
CHANGED
|
@@ -7,6 +7,12 @@ export function registerListJobs(server, client) {
|
|
|
7
7
|
.describe('Number of jobs to skip (pagination).'),
|
|
8
8
|
status: z.enum(['processing', 'completed', 'failed']).optional()
|
|
9
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").'),
|
|
10
16
|
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
|
|
11
17
|
try {
|
|
12
18
|
const result = await client.listJobs(params);
|
|
@@ -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;
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuDpE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAoB/E"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
4
|
+
const PACKAGE_NAME = '@h-ear/mcp-server';
|
|
5
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
6
|
+
const CACHE_DIR = join(homedir(), '.config', 'h-ear-mcp');
|
|
7
|
+
const CACHE_FILE = join(CACHE_DIR, 'update-check.json');
|
|
8
|
+
function readCache() {
|
|
9
|
+
try {
|
|
10
|
+
if (!existsSync(CACHE_FILE))
|
|
11
|
+
return null;
|
|
12
|
+
return JSON.parse(readFileSync(CACHE_FILE, 'utf8'));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function writeCache(latestVersion) {
|
|
19
|
+
try {
|
|
20
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
21
|
+
writeFileSync(CACHE_FILE, JSON.stringify({ timestamp: Date.now(), latestVersion }));
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// ignore
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function getLatestVersion() {
|
|
28
|
+
const cache = readCache();
|
|
29
|
+
if (cache && Date.now() - cache.timestamp < CACHE_TTL_MS) {
|
|
30
|
+
return cache.latestVersion;
|
|
31
|
+
}
|
|
32
|
+
const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}/latest`, {
|
|
33
|
+
signal: AbortSignal.timeout(5000),
|
|
34
|
+
});
|
|
35
|
+
const json = (await res.json());
|
|
36
|
+
writeCache(json.version);
|
|
37
|
+
return json.version;
|
|
38
|
+
}
|
|
39
|
+
function isNewer(latest, current) {
|
|
40
|
+
const parse = (v) => v.split('.').map(Number);
|
|
41
|
+
const [lMaj, lMin, lPat] = parse(latest);
|
|
42
|
+
const [cMaj, cMin, cPat] = parse(current);
|
|
43
|
+
if (lMaj !== cMaj)
|
|
44
|
+
return lMaj > cMaj;
|
|
45
|
+
if (lMin !== cMin)
|
|
46
|
+
return lMin > cMin;
|
|
47
|
+
return lPat > cPat;
|
|
48
|
+
}
|
|
49
|
+
export function checkForUpdates(server, currentVersion) {
|
|
50
|
+
void (async () => {
|
|
51
|
+
try {
|
|
52
|
+
const latestVersion = await getLatestVersion();
|
|
53
|
+
if (!isNewer(latestVersion, currentVersion))
|
|
54
|
+
return;
|
|
55
|
+
const msg = `[h-ear-mcp] Update available: ${latestVersion} (current: ${currentVersion})\n` +
|
|
56
|
+
` Run: npm install -g ${PACKAGE_NAME}@${latestVersion}`;
|
|
57
|
+
process.stderr.write(msg + '\n');
|
|
58
|
+
await server.sendLoggingMessage({
|
|
59
|
+
level: 'notice',
|
|
60
|
+
data: { message: msg, latestVersion, currentVersion },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// silent — update check must never affect server startup
|
|
65
|
+
}
|
|
66
|
+
})();
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAExE,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AACrD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAOxD,SAAS,SAAS;IACd,IAAI,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,aAAqB;IACrC,IAAI,CAAC;QACD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACL,SAAS;IACb,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC3B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC,aAAa,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,8BAA8B,kBAAkB,CAAC,YAAY,CAAC,SAAS,EAAE;QAC7F,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;KACpC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;IACvD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,OAAe;IAC5C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,GAAG,IAAI,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,cAAsB;IACrE,KAAK,CAAC,KAAK,IAAI,EAAE;QACb,IAAI,CAAC;YACD,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC;gBAAE,OAAO;YAEpD,MAAM,GAAG,GACL,iCAAiC,aAAa,cAAc,cAAc,KAAK;gBAC/E,yBAAyB,YAAY,IAAI,aAAa,EAAE,CAAC;YAE7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YAEjC,MAAM,MAAM,CAAC,kBAAkB,CAAC;gBAC5B,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE;aACxD,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACL,yDAAyD;QAC7D,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;AACT,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h-ear/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-dev.202604040406",
|
|
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",
|