npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dashtray/mcp-server

v1.0.2

Published

Dashtray MCP Server - send notifications to your phone via MCP agents

Readme

Dashtray MCP Server

Model Context Protocol server for Dashtray - send notifications to your phone from AI agents, build scripts, and automation tools.

Features

  • Single, focused tool: send_notification - send alerts to your phone
  • No preset management: Notifications are automatically logged in history
  • Auto-prefixed: All notifications prefixed with "MCP - " for clarity
  • Rate-limited: Per-plan limits (Starter 100/min, Pro 1000/min)
  • Secure: SHA256-hashed API keys, bearer token auth
  • Lightweight: Minimal dependencies, ~30KB bundle

Installation

Option 1: From npm

npm install @dashtray/mcp-server
# or run directly:
npx @dashtray/mcp-server

Setup

1. Get Your API Key

  1. Open Dashtray on your phone
  2. Go to Settings → Integrations → API Keys
  3. Tap Generate New Key
  4. Give it a name (e.g., "Claude Desktop")
  5. Copy the full key (starts with sk_test_)
  6. Save it securely - you won't see it again

2. Set Environment Variables

Create a .env file or export in your shell:

export DASHTRAY_API_KEY="sk_test_your_key_here"
export DASHTRAY_API_ENDPOINT="https://api.dashtray.app"  # Optional, uses default if omitted

3. Configure Your Agent

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "dashtray": {
      "command": "npx",
      "args": ["-y", "@dashtray/mcp-server"],
      "env": {
        "DASHTRAY_API_KEY": "sk_test_your_key_here",
        "DASHTRAY_API_ENDPOINT": "https://api.dashtray.app"
      }
    }
  }
}

Then restart Claude Desktop.

Cline

In your project's .cline/config.json:

{
  "mcpServers": {
    "dashtray": {
      "command": "npx",
      "args": ["-y", "@dashtray/mcp-server"],
      "env": {
        "DASHTRAY_API_KEY": "sk_test_your_key_here"
      }
    }
  }
}

Custom Agents

Start the server and connect via stdio:

import { ChildProcess, spawn } from "child_process";

const server = spawn("node", ["/path/to/dashtray/packages/mcp-server/dist/index.js"], {
  env: {
    ...process.env,
    DASHTRAY_API_KEY: "sk_test_your_key_here",
  },
});

// Connect to server via server.stdio

Usage

Send a Notification

// The send_notification tool accepts:
{
  "title": "Build Passed",        // Required: notification title (max 200 chars)
  "body": "Production build #42 completed in 3m 21s"  // Required: details (max 500 chars)
}

Examples

Build Alert:

Title: Build Failed
Body: Docker image build failed. Error: unauthorized. Check credentials.

Deployment Status:

Title: Deployment Complete
Body: App v1.2.3 deployed to production. 50 instances running, health check passed.

Test Results:

Title: Tests Passed
Body: All 342 tests passed. Coverage: 87%. Duration: 2m 15s.

Long-Running Task:

Title: Analysis Complete
Body: Dataset processed. 1.2M records. Anomalies: 3. Report: https://...

API Reference

Tool: send_notification

Description: Send a notification to your Dashtray account. Notifications appear on your phone with "MCP - " prefix and are logged in history.

Inputs: | Field | Type | Required | Max Length | Notes | |-------|------|----------|-----------|-------| | title | string | Yes | 200 | Notification title. Auto-prefixed with "MCP - " | | body | string | Yes | 500 | Notification details/body |

Outputs:

{
  "success": true,
  "message": "Notification sent successfully!\n\nTitle: Build Passed\nBody: ...\n\nIt will appear on your phone with the \"MCP - \" prefix..."
}

Errors:

  • DASHTRAY_API_KEY not set - Missing environment variable
  • Invalid input: title is required - Missing or empty title
  • Invalid input: body must be 500 chars or less - Body too long
  • API error: 401 Unauthorized - Invalid API key
  • API error: 429 Too Many Requests - Rate limit exceeded
  • API error: 500 Internal Server Error - Server error

Configuration

Environment Variables

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | DASHTRAY_API_KEY | Yes | - | API key from Dashtray app | | DASHTRAY_API_ENDPOINT | No | https://api.dashtray.app | Dashtray API URL (self-hosted or cloud) |

API Key Format

All keys are generated with the sk_test_ prefix followed by 48 hex characters, regardless of plan.

Rate Limiting

Notifications are rate-limited per-plan:

| Plan | Limit | Window | |------|-------|--------| | Starter | 100/min | Fixed 1-minute window | | Pro | 1000/min | Fixed 1-minute window |

When rate limit is exceeded, the API returns 429 Too Many Requests.

Troubleshooting

"DASHTRAY_API_KEY environment variable is not set"

Solution: Set the environment variable in your shell or config file.

export DASHTRAY_API_KEY="sk_test_..."

"API error: 401 Unauthorized"

Solution: Check your API key:

  1. Open Dashtray app
  2. Go to Settings → Integrations → API Keys
  3. Verify the key is still active (hasn't been revoked)
  4. Generate a new key if needed

"API error: 429 Too Many Requests"

Solution: You've hit your rate limit for this plan. Either:

  • Wait a minute and retry
  • Upgrade your plan in the app
  • Batch notifications together

"Failed to send notification: ECONNREFUSED"

Solution: Check that:

  1. DASHTRAY_API_ENDPOINT is correct
  2. The endpoint is reachable from your network
  3. No firewall is blocking the connection

Tool not appearing in Claude Desktop

Solution:

  1. Restart Claude Desktop completely
  2. Check claude_desktop_config.json is valid JSON
  3. Verify Node 18+ is installed (node --version) so npx can fetch the server

"Invalid input: title is required"

Solution: The title must be a non-empty string:

// ❌ Wrong
send_notification({ body: "Only body" })

// ✓ Right
send_notification({ title: "Alert", body: "Details" })

Development

Build

npm run build

Watch Mode

npm run watch

Manual Testing

export DASHTRAY_API_KEY="sk_test_..."
node dist/index.js

Then send a test request (requires MCP client like Claude Desktop).

Support

License

MIT


Dashtray MCP Server - Minimal, focused, production-ready.