Skip to main content
Glama
README.md
<h1 align="center">
  🧰 mcp-saas-toolkit (Power Edition)
</h1>

<p align="center">
  <strong>Give Claude superpowers over your SaaS stack.</strong><br />
  A production-ready MCP server with 24 tools for Stripe, Twilio, Resend, GitHub, and Slack — plus pre-built workflow prompts and live resources.
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/mcp-saas-toolkit"><img src="https://img.shields.io/npm/v/mcp-saas-toolkit?style=flat-square&color=CB3837" alt="npm version" /></a>
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License: MIT" /></a>
  <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-8A2BE2?style=flat-square" alt="MCP Compatible" /></a>
</p>

<p align="center">
  <em>Supported by Claude for Open Source</em>
</p>

---

## What is this?

**mcp-saas-toolkit** is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that equips Claude with tools to call popular SaaS APIs on your behalf. Instead of copy-pasting API keys into chat, you configure the server once and then ask Claude things like:

> *"Onboard a new customer named Alice with email alice@example.com (customer, email, slack announcement)."*
> *"Create a payment link for price_1ABC, email it to them, and let me know on Slack when sent."*
> *"Open a GitHub issue for the memory leak and assign it to John."*

Claude uses the right tools, calls the right APIs, handles failures via built-in retry backoffs, and gives you the result — all within the conversation.

---

## ✨ Supported Integrations & Features

**24 Tools across 5 Services:**
*   **Stripe (8):** List/create customers, create invoices/payment links, check subscriptions, issue refunds, get balance, list products.
*   **Twilio (4):** Send SMS, check message delivery, list message history, initiate voice calls (TTS/TwiML).
*   **Resend (3):** Send structured emails, fetch delivery status, batch send up to 100 emails.
*   **GitHub (5):** List repos, get rich repo stats, list issues, create issues, open pull requests.
*   **Slack (4):** Send messages (with thread support), list channels, set topics, add emoji reactions.

**🔋 MCP Prompts (Workflow Templates):**
- `onboard_customer`: Create Stripe customer → Send welcome email → Notify Slack
- `invoice_reminder`: Check Stripe subscription → Create invoice → Email/SMS customer
- `incident_report`: Create GitHub issue → Alert Slack → Email stakeholders
- `new_release`: Fetch recent commits → Create GitHub issue → Announce on Slack

**📊 MCP Resources (Live Feeds):**
- `saas://stripe/balance`: Read current Stripe account balance
- `saas://stripe/recent-charges`: Fetch recent charges instantly
- `saas://github/{owner}/{repo}/overview`: Dynamic rich repository telemetry

---

## 🚀 Quick Start

### 1. Install & Configure

```bash
npm install -g mcp-saas-toolkit
# Or use directly via npx mcp-saas-toolkit
```

Copy the example `.env` file and fill in your keys:

```env
# Logging level (debug, info, warn, error)
LOG_LEVEL=info

# Services (Only set keys for the ones you want to use)
GITHUB_TOKEN=ghp_...
SLACK_BOT_TOKEN=xoxb-...
STRIPE_SECRET_KEY=sk_test_...
TWILIO_ACCOUNT_SID=AC...
TWILIO_AUTH_TOKEN=...
TWILIO_PHONE_NUMBER=+1234567890
RESEND_API_KEY=re_...
```

### 2. Add to Claude Desktop

Open your config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS or `%APPDATA%\Claude\claude_desktop_config.json` on Windows):

```json
{
  "mcpServers": {
    "saas-toolkit": {
      "command": "npx",
      "args": ["-y", "mcp-saas-toolkit"],
      "env": {
        "GITHUB_TOKEN": "ghp_...",
        "STRIPE_SECRET_KEY": "sk_test_...",
        "SLACK_BOT_TOKEN": "xoxb-..."
      }
    }
  }
}
```

Restart Claude Desktop. You should see all tools, resources, and templates appear!

## 💬 Example Prompts

Once the server is connected, try these multi-tool workflows:

> **"Look up the Stripe customer with email john@acme.com, check their subscription, and if it's past due, send them an SMS reminder at +15551234567."**
>
> **"We have a prod incident. Open a bug report on the frontend repo, email the on-call at ops@co.com, and drop a red alert in the Slack #engineering channel."**
>
> **"Read my Stripe balance resource, and summarize how we did this week to the #general channel."**

---

## 🏗️ Architecture & Development

Built with robustness in mind:
- **Resiliency:** All external API interactions are wrapped in an exponential backoff retry handler to safely absorb rate limits and 5xx errors.
- **Lazy Initialization:** SDK clients are booted only when first invoked. Missing API keys will not crash the server but will cleanly surface actionably errors.
- **Strict Formatting:** Input schemas strictly define all expectations. Output always maps to an `{ success: true, data }` envelope.

### Local verification
```bash
npm install
npm run build
npx @modelcontextprotocol/inspector node dist/index.js
```

TDQS

A3.6/5.0

Scored across 24 tools

Disambiguation5/5

Each tool is clearly scoped to a specific service and action, with no overlap across services or within service groups. For example, github_create_issue and github_list_issues are distinct, and tools from different services (e.g., Slack vs. Twilio) address unrelated domains.

Naming Consistency5/5

All tools follow a consistent service_verb_noun pattern using snake_case (e.g., stripe_get_balance, slack_send_message). The service prefix provides immediate context, and verbs (create, get, list, send) are uniformly applied.

Tool Count4/5

With 24 tools across five SaaS services, the count is slightly high but appropriate for a 'toolkit' that aims to cover common operations for each integration. Each service has a focused subset (3-8 tools), avoiding excessive bloat while providing meaningful functionality.

Completeness3/5

Each service covers core operations but lacks update/delete endpoints (e.g., GitHub has no update_issue, Stripe no update_customer). While the basics for reading and creating are present, notable gaps in lifecycle management will force agents to rely on other means for modifications.

Maintenance

ActivityInactive
ResponsivenessNo issues