@koderlabs/inbox-mcp 0.1.0 → 0.1.1

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
@@ -1,4 +1,4 @@
1
- # @koderlabs/inbox-mcp-server
1
+ # @koderlabs/inbox-mcp
2
2
 
3
3
  MCP server for InstantInbox (inbox.koderlabs.net). Lets AI dev agents create
4
4
  disposable inboxes and read received emails so any app's email-driven flow
@@ -9,7 +9,7 @@ disposable inboxes and read received emails so any app's email-driven flow
9
9
  | | |
10
10
  |---|---|
11
11
  | Port | 10405 |
12
- | Transports | Streamable HTTP (`/mcp`) + stdio (`instantinbox-mcp-stdio`) |
12
+ | Transports | Streamable HTTP (`/mcp`) + stdio (`instantinbox-mcp`) |
13
13
  | Auth | Bearer token: user JWT or `sk_live_*` / `sk_test_*` key |
14
14
  | Scopes | `inbox:read`, `inbox:write`, `email:read`, `email:write` |
15
15
 
@@ -36,8 +36,8 @@ disposable inboxes and read received emails so any app's email-driven flow
36
36
  | Var | Default | Notes |
37
37
  |---|---|---|
38
38
  | `PORT` | `10405` | HTTP transport |
39
- | `API_BASE_URL` | `http://localhost:10402/api/v1` | InstantInbox API |
40
- | `INBOX_API_BASE_URL` | same | stdio override |
39
+ | `API_BASE_URL` | `http://localhost:10402/api/v1` | HTTP transport — points at local API (self-host) |
40
+ | `INBOX_API_BASE_URL` | `https://inbox.koderlabs.net/api/v1` | stdio transport — defaults to hosted instance |
41
41
  | `INBOX_API_KEY` | — | stdio: required Bearer token |
42
42
  | `MCP_ALLOWED_ORIGINS` | empty | CSV; required for browser-hosted clients |
43
43
  | `MCP_RATE_LIMIT_RPM` | `120` | Per-token request budget per minute |
@@ -52,7 +52,7 @@ disposable inboxes and read received emails so any app's email-driven flow
52
52
  "mcpServers": {
53
53
  "instantinbox": {
54
54
  "command": "npx",
55
- "args": ["-y", "@koderlabs/inbox-mcp-server"],
55
+ "args": ["-y", "@koderlabs/inbox-mcp"],
56
56
  "env": {
57
57
  "INBOX_API_BASE_URL": "https://inbox.koderlabs.net/api/v1",
58
58
  "INBOX_API_KEY": "<your token>"
@@ -76,8 +76,8 @@ disposable inboxes and read received emails so any app's email-driven flow
76
76
  ## Local dev
77
77
 
78
78
  ```bash
79
- pnpm --filter @koderlabs/inbox-mcp-server build
80
- PORT=10405 INBOX_API_KEY=<token> pnpm --filter @koderlabs/inbox-mcp-server start
79
+ pnpm --filter @koderlabs/inbox-mcp build
80
+ PORT=10405 INBOX_API_KEY=<token> pnpm --filter @koderlabs/inbox-mcp start
81
81
  ```
82
82
 
83
83
  ## Deviations from InstantTasks MCP
package/dist/stdio.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
 
9
9
  // src/stdio.ts
10
10
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
11
- var API_BASE_URL = (process.env.INBOX_API_BASE_URL ?? "http://localhost:10402/api/v1").replace(/\/$/, "");
11
+ var API_BASE_URL = (process.env.INBOX_API_BASE_URL ?? "https://inbox.koderlabs.net/api/v1").replace(/\/$/, "");
12
12
  var API_KEY = process.env.INBOX_API_KEY ?? "";
13
13
  async function main() {
14
14
  if (!API_KEY) {
package/dist/stdio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stdio.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * stdio transport entry — for `instantinbox-mcp` (Claude Desktop, etc).\n *\n * Env:\n * INBOX_API_BASE_URL — InstantInbox API (default http://localhost:10402/api/v1)\n * INBOX_API_KEY — Bearer token (sk_live_* / sk_test_* / user JWT)\n */\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { createMcpServer } from './server.js';\nimport { ApiClient } from './api-client.js';\nimport { ScopeSet } from './auth/scopes.js';\nimport { validateSecretKey } from './auth/secret-key.js';\n\nconst API_BASE_URL = (process.env.INBOX_API_BASE_URL ?? 'http://localhost:10402/api/v1').replace(/\\/$/, '');\nconst API_KEY = process.env.INBOX_API_KEY ?? '';\n\nasync function main(): Promise<void> {\n if (!API_KEY) {\n process.stderr.write(\n 'Error: INBOX_API_KEY environment variable is required.\\n' +\n 'Set it to a user JWT or sk_live_* / sk_test_* key from your InstantInbox account.\\n',\n );\n process.exit(1);\n }\n\n // Validate once at startup — refuse to start on bad creds, never serve\n // tool calls with permissive scopes.\n let scopes: ScopeSet;\n try {\n const identity = await validateSecretKey(API_KEY, API_BASE_URL);\n scopes = identity.scopes;\n process.stderr.write(\n `InstantInbox MCP stdio: authenticated as ${identity.email ?? identity.userId} ` +\n `(scopes: ${scopes.toArray().join(', ')})\\n`,\n );\n } catch (err) {\n process.stderr.write(`InstantInbox MCP stdio: auth failed — ${(err as Error).message}\\n`);\n process.exit(2);\n throw err; // unreachable — narrows scopes for TS\n }\n\n const apiClient = new ApiClient({ baseUrl: API_BASE_URL, token: API_KEY });\n const server = createMcpServer(() => ({ apiClient, scopes }));\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n process.stderr.write('InstantInbox MCP server ready on stdio.\\n');\n}\n\nmain().catch((err) => {\n process.stderr.write(`Fatal: ${err.message}\\n`);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;AAQA,SAAS,4BAA4B;AAMrC,IAAM,gBAAgB,QAAQ,IAAI,sBAAsB,iCAAiC,QAAQ,OAAO,EAAE;AAC1G,IAAM,UAAU,QAAQ,IAAI,iBAAiB;AAE7C,eAAe,OAAsB;AACnC,MAAI,CAAC,SAAS;AACZ,YAAQ,OAAO;AAAA,MACb;AAAA,IAEF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAIA,MAAI;AACJ,MAAI;AACF,UAAM,WAAW,MAAM,kBAAkB,SAAS,YAAY;AAC9D,aAAS,SAAS;AAClB,YAAQ,OAAO;AAAA,MACb,4CAA4C,SAAS,SAAS,SAAS,MAAM,aACjE,OAAO,QAAQ,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,IACzC;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,OAAO,MAAM,8CAA0C,IAAc,OAAO;AAAA,CAAI;AACxF,YAAQ,KAAK,CAAC;AACd,UAAM;AAAA,EACR;AAEA,QAAM,YAAY,IAAI,UAAU,EAAE,SAAS,cAAc,OAAO,QAAQ,CAAC;AACzE,QAAM,SAAS,gBAAgB,OAAO,EAAE,WAAW,OAAO,EAAE;AAE5D,QAAM,YAAY,IAAI,qBAAqB;AAC3C,QAAM,OAAO,QAAQ,SAAS;AAE9B,UAAQ,OAAO,MAAM,2CAA2C;AAClE;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,OAAO,MAAM,UAAU,IAAI,OAAO;AAAA,CAAI;AAC9C,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/stdio.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * stdio transport entry — for `instantinbox-mcp` (Claude Desktop, etc).\n *\n * Env:\n * INBOX_API_BASE_URL — InstantInbox API (default http://localhost:10402/api/v1)\n * INBOX_API_KEY — Bearer token (sk_live_* / sk_test_* / user JWT)\n */\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { createMcpServer } from './server.js';\nimport { ApiClient } from './api-client.js';\nimport { ScopeSet } from './auth/scopes.js';\nimport { validateSecretKey } from './auth/secret-key.js';\n\nconst API_BASE_URL = (process.env.INBOX_API_BASE_URL ?? 'https://inbox.koderlabs.net/api/v1').replace(/\\/$/, '');\nconst API_KEY = process.env.INBOX_API_KEY ?? '';\n\nasync function main(): Promise<void> {\n if (!API_KEY) {\n process.stderr.write(\n 'Error: INBOX_API_KEY environment variable is required.\\n' +\n 'Set it to a user JWT or sk_live_* / sk_test_* key from your InstantInbox account.\\n',\n );\n process.exit(1);\n }\n\n // Validate once at startup — refuse to start on bad creds, never serve\n // tool calls with permissive scopes.\n let scopes: ScopeSet;\n try {\n const identity = await validateSecretKey(API_KEY, API_BASE_URL);\n scopes = identity.scopes;\n process.stderr.write(\n `InstantInbox MCP stdio: authenticated as ${identity.email ?? identity.userId} ` +\n `(scopes: ${scopes.toArray().join(', ')})\\n`,\n );\n } catch (err) {\n process.stderr.write(`InstantInbox MCP stdio: auth failed — ${(err as Error).message}\\n`);\n process.exit(2);\n throw err; // unreachable — narrows scopes for TS\n }\n\n const apiClient = new ApiClient({ baseUrl: API_BASE_URL, token: API_KEY });\n const server = createMcpServer(() => ({ apiClient, scopes }));\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n process.stderr.write('InstantInbox MCP server ready on stdio.\\n');\n}\n\nmain().catch((err) => {\n process.stderr.write(`Fatal: ${err.message}\\n`);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;AAQA,SAAS,4BAA4B;AAMrC,IAAM,gBAAgB,QAAQ,IAAI,sBAAsB,sCAAsC,QAAQ,OAAO,EAAE;AAC/G,IAAM,UAAU,QAAQ,IAAI,iBAAiB;AAE7C,eAAe,OAAsB;AACnC,MAAI,CAAC,SAAS;AACZ,YAAQ,OAAO;AAAA,MACb;AAAA,IAEF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAIA,MAAI;AACJ,MAAI;AACF,UAAM,WAAW,MAAM,kBAAkB,SAAS,YAAY;AAC9D,aAAS,SAAS;AAClB,YAAQ,OAAO;AAAA,MACb,4CAA4C,SAAS,SAAS,SAAS,MAAM,aACjE,OAAO,QAAQ,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,IACzC;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,OAAO,MAAM,8CAA0C,IAAc,OAAO;AAAA,CAAI;AACxF,YAAQ,KAAK,CAAC;AACd,UAAM;AAAA,EACR;AAEA,QAAM,YAAY,IAAI,UAAU,EAAE,SAAS,cAAc,OAAO,QAAQ,CAAC;AACzE,QAAM,SAAS,gBAAgB,OAAO,EAAE,WAAW,OAAO,EAAE;AAE5D,QAAM,YAAY,IAAI,qBAAqB;AAC3C,QAAM,OAAO,QAAQ,SAAS;AAE9B,UAAQ,OAAO,MAAM,2CAA2C;AAClE;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,OAAO,MAAM,UAAU,IAAI,OAAO;AAAA,CAAI;AAC9C,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koderlabs/inbox-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "license": "MIT",
5
5
  "description": "InstantInbox MCP server — disposable email inboxes for AI agent E2E testing. Streamable HTTP + stdio transports.",
6
6
  "keywords": [