@dashtray/mcp-server 1.0.0 → 1.0.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.
Files changed (3) hide show
  1. package/README.md +11 -39
  2. package/dist/index.js +12 -0
  3. package/package.json +8 -13
package/README.md CHANGED
@@ -21,15 +21,6 @@ npm install @dashtray/mcp-server
21
21
  npx @dashtray/mcp-server
22
22
  ```
23
23
 
24
- ### Option 2: From source
25
-
26
- ```bash
27
- git clone https://github.com/bhupeshpr25/dashtray.git
28
- cd dashtray/packages/mcp-server
29
- npm install
30
- npm run build
31
- ```
32
-
33
24
  ## Setup
34
25
 
35
26
  ### 1. Get Your API Key
@@ -38,7 +29,7 @@ npm run build
38
29
  2. Go to **Settings → Integrations → API Keys**
39
30
  3. Tap **Generate New Key**
40
31
  4. Give it a name (e.g., "Claude Desktop")
41
- 5. **Copy the full key** (starts with `sk_test_` or `sk_live_`)
32
+ 5. **Copy the full key** (starts with `sk_test_`)
42
33
  6. Save it securely - you won't see it again
43
34
 
44
35
  ### 2. Set Environment Variables
@@ -70,24 +61,6 @@ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o
70
61
  }
71
62
  }
72
63
  ```
73
-
74
- Or if installed from source, point `command` at `node` with the built path:
75
-
76
- ```json
77
- {
78
- "mcpServers": {
79
- "dashtray": {
80
- "command": "node",
81
- "args": ["/path/to/dashtray/packages/mcp-server/dist/index.js"],
82
- "env": {
83
- "DASHTRAY_API_KEY": "sk_test_your_key_here",
84
- "DASHTRAY_API_ENDPOINT": "https://api.dashtray.app"
85
- }
86
- }
87
- }
88
- }
89
- ```
90
-
91
64
  Then restart Claude Desktop.
92
65
 
93
66
  #### Cline
@@ -132,8 +105,8 @@ const server = spawn("node", ["/path/to/dashtray/packages/mcp-server/dist/index.
132
105
  ```typescript
133
106
  // The send_notification tool accepts:
134
107
  {
135
- "title": "Build Passed", // Required: notification title (max 255 chars)
136
- "body": "Production build #42 completed in 3m 21s" // Required: details (max 1000 chars)
108
+ "title": "Build Passed", // Required: notification title (max 200 chars)
109
+ "body": "Production build #42 completed in 3m 21s" // Required: details (max 500 chars)
137
110
  }
138
111
  ```
139
112
 
@@ -172,8 +145,8 @@ Body: Dataset processed. 1.2M records. Anomalies: 3. Report: https://...
172
145
  **Inputs:**
173
146
  | Field | Type | Required | Max Length | Notes |
174
147
  |-------|------|----------|-----------|-------|
175
- | `title` | string | Yes | 255 | Notification title. Auto-prefixed with "MCP - " |
176
- | `body` | string | Yes | 1000 | Notification details/body |
148
+ | `title` | string | Yes | 200 | Notification title. Auto-prefixed with "MCP - " |
149
+ | `body` | string | Yes | 500 | Notification details/body |
177
150
 
178
151
  **Outputs:**
179
152
  ```json
@@ -186,7 +159,7 @@ Body: Dataset processed. 1.2M records. Anomalies: 3. Report: https://...
186
159
  **Errors:**
187
160
  - `DASHTRAY_API_KEY not set` - Missing environment variable
188
161
  - `Invalid input: title is required` - Missing or empty title
189
- - `Invalid input: body must be 1000 chars or less` - Body too long
162
+ - `Invalid input: body must be 500 chars or less` - Body too long
190
163
  - `API error: 401 Unauthorized` - Invalid API key
191
164
  - `API error: 429 Too Many Requests` - Rate limit exceeded
192
165
  - `API error: 500 Internal Server Error` - Server error
@@ -200,10 +173,9 @@ Body: Dataset processed. 1.2M records. Anomalies: 3. Report: https://...
200
173
  | `DASHTRAY_API_KEY` | Yes | - | API key from Dashtray app |
201
174
  | `DASHTRAY_API_ENDPOINT` | No | https://api.dashtray.app | Dashtray API URL (self-hosted or cloud) |
202
175
 
203
- ### API Key Formats
176
+ ### API Key Format
204
177
 
205
- - `sk_test_*` - Test key (development/staging, no rate limiting)
206
- - `sk_live_*` - Live key (production, subject to rate limits)
178
+ All keys are generated with the `sk_test_` prefix followed by 48 hex characters, regardless of plan.
207
179
 
208
180
  ## Rate Limiting
209
181
 
@@ -211,8 +183,8 @@ Notifications are rate-limited per-plan:
211
183
 
212
184
  | Plan | Limit | Window |
213
185
  |------|-------|--------|
214
- | Starter | 100/min | 1 minute sliding window |
215
- | Pro | 1000/min | 1 minute sliding window |
186
+ | Starter | 100/min | Fixed 1-minute window |
187
+ | Pro | 1000/min | Fixed 1-minute window |
216
188
 
217
189
  When rate limit is exceeded, the API returns `429 Too Many Requests`.
218
190
 
@@ -293,7 +265,7 @@ Then send a test request (requires MCP client like Claude Desktop).
293
265
  ## Support
294
266
 
295
267
  - **Dashtray App Issues:** Settings → Help & Support
296
- - **MCP Server Issues:** GitHub Issues
268
+ - **MCP Server Issues:** support@dashtray.app
297
269
  - **API Questions:** See [API Reference](https://docs.dashtray.app/api-reference/overview)
298
270
 
299
271
  ## License
package/dist/index.js CHANGED
@@ -39,6 +39,11 @@ const NotificationSchema = z.object({
39
39
  .string()
40
40
  .min(1, "Body is required")
41
41
  .max(500, "Body must be 500 chars or less"),
42
+ source: z
43
+ .string()
44
+ .min(1)
45
+ .max(40, "Source must be 40 chars or less")
46
+ .optional(),
42
47
  });
43
48
  /**
44
49
  * Get API credentials from environment
@@ -67,6 +72,7 @@ async function sendNotification(notification, apiKey, endpoint) {
67
72
  body: JSON.stringify({
68
73
  title: notification.title,
69
74
  body: notification.body,
75
+ source: notification.source,
70
76
  }),
71
77
  });
72
78
  if (!response.ok) {
@@ -128,6 +134,12 @@ async function main() {
128
134
  "E2E tests failed on 3 files. See logs for details.",
129
135
  ],
130
136
  },
137
+ source: {
138
+ type: "string",
139
+ description: "Name of the app/integration that sent this (max 40 chars, e.g. 'OpenCode', 'CI'). " +
140
+ "Notifications with the same source are grouped under one alert named 'MCP - <source>' in the app. " +
141
+ "Omit to group on the generic 'MCP & API' alert.",
142
+ },
131
143
  },
132
144
  required: ["title", "body"],
133
145
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dashtray/mcp-server",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Dashtray MCP Server - send notifications to your phone via MCP agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,6 +18,12 @@
18
18
  "dist",
19
19
  "README.md"
20
20
  ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "node dist/index.js",
24
+ "watch": "tsc --watch",
25
+ "prepublishOnly": "npm run build"
26
+ },
21
27
  "keywords": [
22
28
  "mcp",
23
29
  "model-context-protocol",
@@ -27,16 +33,10 @@
27
33
  ],
28
34
  "author": "Dashtray",
29
35
  "license": "MIT",
30
- "repository": {
31
- "type": "git",
32
- "url": "git+https://github.com/bhupeshpr25/dashtray.git",
33
- "directory": "packages/mcp-server"
34
- },
35
36
  "homepage": "https://dashtray.app",
36
- "bugs": "https://github.com/bhupeshpr25/dashtray/issues",
37
37
  "dependencies": {
38
38
  "@modelcontextprotocol/sdk": "^1.0.0",
39
- "zod": "^4.4.3"
39
+ "zod": "catalog:"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^24.3.0",
@@ -44,10 +44,5 @@
44
44
  },
45
45
  "engines": {
46
46
  "node": ">=18.0.0"
47
- },
48
- "scripts": {
49
- "build": "tsc",
50
- "dev": "node dist/index.js",
51
- "watch": "tsc --watch"
52
47
  }
53
48
  }