@koderlabs/inbox-mcp 0.1.1 → 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 +79 -63
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,51 +1,19 @@
|
|
|
1
1
|
# @koderlabs/inbox-mcp
|
|
2
2
|
|
|
3
|
-
MCP server for InstantInbox
|
|
4
|
-
disposable inboxes and read received emails so any app's email-driven flow
|
|
5
|
-
(signup verification, password reset, magic link, OTP) can be tested end-to-end.
|
|
3
|
+
MCP server for [InstantInbox](https://inbox.koderlabs.net) — disposable email inboxes for end-to-end testing.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
Lets AI coding agents (Claude Desktop, Claude Code, Cursor, etc.) create temporary email addresses on demand and read messages received at them. Useful for testing any email-driven flow: signup verification, password reset, magic links, OTP codes, transactional notifications.
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|---|---|
|
|
11
|
-
| Port | 10405 |
|
|
12
|
-
| Transports | Streamable HTTP (`/mcp`) + stdio (`instantinbox-mcp`) |
|
|
13
|
-
| Auth | Bearer token: user JWT or `sk_live_*` / `sk_test_*` key |
|
|
14
|
-
| Scopes | `inbox:read`, `inbox:write`, `email:read`, `email:write` |
|
|
7
|
+
## Install
|
|
15
8
|
|
|
16
|
-
|
|
9
|
+
No global install needed. MCP clients launch it via `npx`.
|
|
17
10
|
|
|
18
|
-
|
|
19
|
-
|---|---|---|
|
|
20
|
-
| `whoami` | (none) | Confirm token + show granted scopes |
|
|
21
|
-
| `list_inboxes` | `inbox:read` | List the caller's inboxes |
|
|
22
|
-
| `create_inbox` | `inbox:write` | Create a new disposable inbox; returns the email address |
|
|
23
|
-
| `get_inbox` | `inbox:read` | Look up an inbox by id or address |
|
|
24
|
-
| `delete_inbox` | `inbox:write` | Permanently delete an inbox |
|
|
25
|
-
| `list_emails` | `email:read`, `inbox:read` | List emails in an inbox (headers only) |
|
|
26
|
-
| `get_email` | `email:read` | Fetch a single email's full body |
|
|
27
|
-
| `wait_for_email` | `email:read`, `inbox:read` | Long-poll until a matching email arrives (or timeout) |
|
|
28
|
-
| `delete_email` | `email:write` | Delete one email |
|
|
29
|
-
| `mark_email_read` | `email:write` | Mark read / unread |
|
|
30
|
-
|
|
31
|
-
`wait_for_email` is the killer tool — most email tests are
|
|
32
|
-
`trigger → wait → extract link/code → click`.
|
|
11
|
+
## Configure
|
|
33
12
|
|
|
34
|
-
|
|
13
|
+
### Claude Desktop
|
|
35
14
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
| `PORT` | `10405` | HTTP transport |
|
|
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
|
-
| `INBOX_API_KEY` | — | stdio: required Bearer token |
|
|
42
|
-
| `MCP_ALLOWED_ORIGINS` | empty | CSV; required for browser-hosted clients |
|
|
43
|
-
| `MCP_RATE_LIMIT_RPM` | `120` | Per-token request budget per minute |
|
|
44
|
-
| `MCP_MAX_BODY_BYTES` | `1048576` | POST /mcp body cap |
|
|
45
|
-
| `MCP_INTROSPECT_KEY` | — | Future OAuth introspection key (not yet required) |
|
|
46
|
-
| `MCP_PUBLIC_URL` | `https://inbox.koderlabs.net/mcp` | OAuth discovery |
|
|
47
|
-
|
|
48
|
-
## Claude Desktop configuration
|
|
15
|
+
`~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
|
|
16
|
+
`%APPDATA%\Claude\claude_desktop_config.json` (Windows)
|
|
49
17
|
|
|
50
18
|
```json
|
|
51
19
|
{
|
|
@@ -54,7 +22,6 @@ disposable inboxes and read received emails so any app's email-driven flow
|
|
|
54
22
|
"command": "npx",
|
|
55
23
|
"args": ["-y", "@koderlabs/inbox-mcp"],
|
|
56
24
|
"env": {
|
|
57
|
-
"INBOX_API_BASE_URL": "https://inbox.koderlabs.net/api/v1",
|
|
58
25
|
"INBOX_API_KEY": "<your token>"
|
|
59
26
|
}
|
|
60
27
|
}
|
|
@@ -62,30 +29,79 @@ disposable inboxes and read received emails so any app's email-driven flow
|
|
|
62
29
|
}
|
|
63
30
|
```
|
|
64
31
|
|
|
65
|
-
|
|
32
|
+
### Claude Code
|
|
66
33
|
|
|
67
|
-
|
|
68
|
-
1. create_inbox → returns ab12cd@inbox.koderlabs.net (id u_abc)
|
|
69
|
-
2. (agent triggers signup with that address in the app under test)
|
|
70
|
-
3. wait_for_email → inboxId=u_abc, subjectContains="verify", timeoutSec=60
|
|
71
|
-
4. (parse verification link from returned body)
|
|
72
|
-
5. (agent visits link to complete signup)
|
|
73
|
-
6. delete_inbox → cleanup
|
|
74
|
-
```
|
|
34
|
+
Add to `.mcp.json` in your project root, same shape as above.
|
|
75
35
|
|
|
76
|
-
|
|
36
|
+
### Cursor
|
|
77
37
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
38
|
+
**Settings → MCP Servers → Add Server**
|
|
39
|
+
- Command: `npx`
|
|
40
|
+
- Args: `-y @koderlabs/inbox-mcp`
|
|
41
|
+
- Env: `INBOX_API_KEY=<your token>`
|
|
42
|
+
|
|
43
|
+
### Getting a token
|
|
44
|
+
|
|
45
|
+
1. Sign up at [inbox.koderlabs.net](https://inbox.koderlabs.net)
|
|
46
|
+
2. Generate an API key from **Settings → API Keys**, or use your session JWT
|
|
47
|
+
|
|
48
|
+
Restart your MCP client after editing config.
|
|
49
|
+
|
|
50
|
+
## Tools
|
|
51
|
+
|
|
52
|
+
| Tool | Purpose |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `whoami` | Show identity + granted scopes |
|
|
55
|
+
| `list_inboxes` | List your inboxes |
|
|
56
|
+
| `create_inbox` | Create a disposable inbox. Returns full email address (e.g. `ab12cd@inbox.koderlabs.net`) |
|
|
57
|
+
| `get_inbox` | Look up by id or address |
|
|
58
|
+
| `delete_inbox` | Permanently delete an inbox |
|
|
59
|
+
| `list_emails` | List emails in an inbox (headers only) |
|
|
60
|
+
| `get_email` | Fetch a single email's full body (text + html + headers) |
|
|
61
|
+
| `wait_for_email` | Long-poll until a matching email arrives (up to 120s). Filter by `subjectContains`, `fromContains`. |
|
|
62
|
+
| `delete_email` | Delete one email |
|
|
63
|
+
| `mark_email_read` | Mark email read / unread |
|
|
64
|
+
|
|
65
|
+
`wait_for_email` is the workhorse — most email tests are `trigger → wait → extract → click`.
|
|
66
|
+
|
|
67
|
+
## Example agent prompts
|
|
68
|
+
|
|
69
|
+
> Create a disposable inbox, sign up at https://example.com using that address, then read the verification email and click the link.
|
|
70
|
+
|
|
71
|
+
> Test the password-reset flow on staging: create an inbox, request reset, wait for the email, extract the reset token, and confirm reset works with a new password.
|
|
72
|
+
|
|
73
|
+
> Spin up 5 disposable inboxes and trigger our newsletter signup with each — verify the welcome email arrives within 30 seconds.
|
|
74
|
+
|
|
75
|
+
## Environment variables
|
|
76
|
+
|
|
77
|
+
| Variable | Default | Purpose |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `INBOX_API_KEY` | — | **Required.** Bearer token for the InstantInbox API |
|
|
80
|
+
| `INBOX_API_BASE_URL` | `https://inbox.koderlabs.net/api/v1` | API base — override only if self-hosting |
|
|
81
|
+
|
|
82
|
+
## Scopes
|
|
83
|
+
|
|
84
|
+
Tokens carry scopes; tools require specific ones:
|
|
85
|
+
|
|
86
|
+
| Scope | Grants |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `inbox:read` | View inboxes |
|
|
89
|
+
| `inbox:write` | Create / delete inboxes |
|
|
90
|
+
| `email:read` | Read emails |
|
|
91
|
+
| `email:write` | Delete / mark emails |
|
|
92
|
+
|
|
93
|
+
The server returns a clear error if a tool is called without the required scope.
|
|
94
|
+
|
|
95
|
+
## Self-hosting
|
|
96
|
+
|
|
97
|
+
Besides stdio, this package also ships a Streamable-HTTP transport for self-hosted deployments. See [the repo](https://github.com/jawaidgadiwala/instant-inbox) for source, docker compose, and configuration details.
|
|
98
|
+
|
|
99
|
+
## Links
|
|
100
|
+
|
|
101
|
+
- **Service:** [inbox.koderlabs.net](https://inbox.koderlabs.net)
|
|
102
|
+
- **Source:** [github.com/jawaidgadiwala/instant-inbox](https://github.com/jawaidgadiwala/instant-inbox)
|
|
103
|
+
- **Issues:** [github.com/jawaidgadiwala/instant-inbox/issues](https://github.com/jawaidgadiwala/instant-inbox/issues)
|
|
82
104
|
|
|
83
|
-
##
|
|
105
|
+
## License
|
|
84
106
|
|
|
85
|
-
|
|
86
|
-
`/audit/mcp` endpoint yet. Add later if needed.
|
|
87
|
-
- Auth currently delegates to `GET /auth/me` and grants all four scopes
|
|
88
|
-
on success; the inbox API has no per-key scoping today. Swap to real
|
|
89
|
-
introspection once the API has it.
|
|
90
|
-
- OAuth flow is a stub — it tries `POST /oauth/introspect` and fails
|
|
91
|
-
cleanly if absent.
|
|
107
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@koderlabs/inbox-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
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": [
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|
|
38
|
-
"url": "git+https://github.com/jawaidgadiwala/inbox.git",
|
|
38
|
+
"url": "git+https://github.com/jawaidgadiwala/instant-inbox.git",
|
|
39
39
|
"directory": "apps/mcp"
|
|
40
40
|
},
|
|
41
41
|
"bugs": {
|
|
42
|
-
"url": "https://github.com/jawaidgadiwala/inbox/issues"
|
|
42
|
+
"url": "https://github.com/jawaidgadiwala/instant-inbox/issues"
|
|
43
43
|
},
|
|
44
44
|
"homepage": "https://inbox.koderlabs.net",
|
|
45
45
|
"engines": {
|