@h-ear/mcp-server 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,7 +8,23 @@ MCP server for the [H-ear World](https://h-ear.world) audio classification API.
8
8
  npx @h-ear/mcp-server --key ncm_sk_your_key
9
9
  ```
10
10
 
11
- ## Claude Desktop
11
+ ## Authentication
12
+
13
+ Three ways to authenticate, from easiest to most manual:
14
+
15
+ | Method | Setup | Best For |
16
+ |--------|-------|----------|
17
+ | **claude.ai Connector** | Click "Add" in claude.ai Connectors Directory | claude.ai web/mobile (OAuth automatic) |
18
+ | **API Key (stdio)** | Set `HEAR_API_KEY` in config | Claude Desktop, Claude Code |
19
+ | **OAuth 2.1 (Streamable HTTP)** | Connect to `https://api.h-ear.world/mcp` | Claude Code remote, custom MCP clients |
20
+
21
+ Two tools (`healthCheck`, `listClasses`) work without any authentication.
22
+
23
+ ### claude.ai (easiest — zero config)
24
+
25
+ Search for "H-ear" in **Settings > Connectors** on claude.ai. OAuth login is automatic.
26
+
27
+ ### Claude Desktop (API key)
12
28
 
13
29
  Add to `claude_desktop_config.json`:
14
30
 
@@ -18,13 +34,15 @@ Add to `claude_desktop_config.json`:
18
34
  "h-ear": {
19
35
  "command": "npx",
20
36
  "args": ["-y", "@h-ear/mcp-server"],
21
- "env": { "HEAR_API_KEY": "ncm_sk_your_key" }
37
+ "env": { "HEAR_API_KEY": "ncm_sk_your_key", "HEAR_ENV": "prod" }
22
38
  }
23
39
  }
24
40
  }
25
41
  ```
26
42
 
27
- ## Claude Code
43
+ > **Windows MSIX users:** The config file is at `%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json`, NOT at `%APPDATA%\Claude\`. The "Edit Config" button opens the wrong path.
44
+
45
+ ### Claude Code (API key)
28
46
 
29
47
  Add to `.claude/settings.json`:
30
48
 
@@ -34,12 +52,20 @@ Add to `.claude/settings.json`:
34
52
  "h-ear": {
35
53
  "command": "npx",
36
54
  "args": ["-y", "@h-ear/mcp-server"],
37
- "env": { "HEAR_API_KEY": "ncm_sk_your_key" }
55
+ "env": { "HEAR_API_KEY": "ncm_sk_your_key", "HEAR_ENV": "prod" }
38
56
  }
39
57
  }
40
58
  }
41
59
  ```
42
60
 
61
+ ### Claude Code (OAuth — remote)
62
+
63
+ ```bash
64
+ claude mcp add --transport http h-ear https://api.h-ear.world/mcp
65
+ ```
66
+
67
+ OAuth discovery is automatic via [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728) Protected Resource Metadata. Run `/mcp` in Claude Code to authenticate via browser.
68
+
43
69
  ## Tools
44
70
 
45
71
  | Tool | Description | Auth |
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAwB,MAAM,aAAa,CAAC;AAEpF,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,wBAAgB,aAAa,IAAI,YAAY,CAmB5C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAwB,MAAM,aAAa,CAAC;AAEpF,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,wBAAgB,aAAa,IAAI,YAAY,CAoB5C"}
package/dist/config.js CHANGED
@@ -12,11 +12,10 @@ function getCliArg(name) {
12
12
  export function resolveConfig() {
13
13
  const apiKey = getCliArg('key') || process.env.HEAR_API_KEY;
14
14
  const bearerToken = getCliArg('bearer-token') || process.env.HEAR_BEARER_TOKEN || undefined;
15
- if (!apiKey && !bearerToken)
16
- throw new Error('HEAR_API_KEY or HEAR_BEARER_TOKEN is required. Set env var or pass --key / --bearer-token');
17
- const envStr = getCliArg('env') || process.env.HEAR_ENV;
18
- if (!envStr)
19
- throw new Error('HEAR_ENV is required. Set HEAR_ENV env var or pass --env <env>');
15
+ if (!apiKey && !bearerToken) {
16
+ process.stderr.write('[h-ear-mcp] Warning: No API key provided. Tools requiring auth (classifyAudio, classifyBatch) will fail.\n Set HEAR_API_KEY env var or pass --key <key>\n');
17
+ }
18
+ const envStr = getCliArg('env') || process.env.HEAR_ENV || 'prod';
20
19
  const environment = (Object.keys(ENVIRONMENTS).includes(envStr) ? envStr : 'prod');
21
20
  const envConfig = ENVIRONMENTS[environment];
22
21
  const baseUrl = getCliArg('base-url') || process.env.HEAR_BASE_URL || envConfig.baseUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS,SAAS,CAAC,IAAY;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAC;IAC5F,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;IAC1I,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAE/F,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAoB,CAAC;IACtG,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC,OAAO,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAElC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,WAAW,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IAEnF,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4KAA4K,CAAC,CAAC;IACvM,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS,SAAS,CAAC,IAAY;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAC;IAC5F,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4JAA4J,CAAC,CAAC;IACvL,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;IAElE,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAoB,CAAC;IACtG,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC,OAAO,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAElC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,WAAW,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IAEnF,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4KAA4K,CAAC,CAAC;IACvM,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAChF,CAAC"}
package/dist/index.js CHANGED
@@ -45,7 +45,7 @@ async function main() {
45
45
  "h-ear": {
46
46
  "command": "npx",
47
47
  "args": ["-y", "@h-ear/mcp-server"],
48
- "env": { "HEAR_API_KEY": "ncm_sk_your_key" }
48
+ "env": { "HEAR_API_KEY": "ncm_sk_your_key", "HEAR_ENV": "prod" }
49
49
  }
50
50
  }
51
51
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h-ear/mcp-server",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
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",