baas-sms-mcp


Namebaas-sms-mcp JSON
Version 0.1.3 PyPI version JSON
download
home_pageNone
SummaryA Model Context Protocol server for SMS and MMS messaging services
upload_time2025-07-31 01:39:07
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords mcp messaging mms model-context-protocol sms
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # BaaS SMS/MCP Server

[![npm version](https://badge.fury.io/js/baas-sms-mcp.svg)](https://badge.fury.io/js/baas-sms-mcp)
[![PyPI version](https://badge.fury.io/py/baas-sms-mcp.svg)](https://badge.fury.io/py/baas-sms-mcp)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

A Model Context Protocol (MCP) server for SMS and MMS messaging services. This server enables Claude to help developers easily implement messaging features in web and mobile applications by providing direct integration with BaaS API services.

## Features

- **Developer-Friendly**: Claude can automatically generate messaging code for your applications
- **SMS Sending**: Send SMS messages to single or multiple recipients
- **MMS Sending**: Send MMS messages with image attachments
- **Message Status**: Check sending status and delivery confirmation
- **Send History**: Retrieve message sending history for projects
- **Multi-Framework Support**: Works with React, Vue, Node.js, Python, and more
- **Project Isolation**: Multi-tenant support with project-based access control
- **Error Handling**: Comprehensive error handling with detailed error codes

## Use Cases

- **Authentication**: SMS verification codes for user registration/login
- **Notifications**: Order confirmations, shipping updates, alerts
- **Marketing**: Promotional messages, event notifications
- **Two-Factor Authentication**: Security verification messages
- **Customer Support**: Automated support messages and updates

## Installation

### Using npm (Recommended)

```bash
npm install -g baas-sms-mcp
```

Or run directly without installation:
```bash
npx baas-sms-mcp
```

### Using pip

```bash
pip install baas-sms-mcp
```

### From Source

```bash
git clone https://github.com/your-org/baas-sms-mcp.git
cd baas-sms-mcp
npm install

## Configuration

Set the following environment variables:

```bash
export BAAS_API_KEY="your_baas_api_key_here"  
export PROJECT_ID="your_project_uuid_here"
```

Note: `BAAS_API_BASE_URL` is fixed to `https://api.aiapp.link` and doesn't need to be configured.

## Usage

### Command Line

After installation, you can run the server directly:

```bash
baas-sms-mcp
```

### With Claude Desktop

Add this server to your Claude Desktop configuration:

```json
{
  "mcpServers": {
    "baas-sms-mcp": {
      "command": "npx",
      "args": ["baas-sms-mcp"],
      "env": {
        "BAAS_API_KEY": "your_api_key",
        "PROJECT_ID": "your_project_id"
      }
    }
  }
}
```

Or if installed globally:

```json
{
  "mcpServers": {
    "baas-sms-mcp": {
      "command": "baas-sms-mcp",
      "env": {
        "BAAS_API_KEY": "your_api_key",
        "PROJECT_ID": "your_project_id"
      }
    }
  }
}
```

### Programmatic Usage

```python
from baas_sms_mcp import main

# Run the MCP server
main()
```

## Developer Examples

### Example 1: User Registration with SMS Verification

**Prompt to Claude:**
> "Create a user registration API that sends SMS verification codes"

**Claude will generate:**

```javascript
// Node.js/Express example
app.post('/register', async (req, res) => {
  const { phoneNumber, username } = req.body;
  
  // Generate verification code
  const verificationCode = Math.floor(100000 + Math.random() * 900000);
  
  // Send SMS using BaaS MCP
  const smsResult = await sendSMS({
    recipients: [{ phone_number: phoneNumber, member_code: username }],
    message: `Your verification code is: ${verificationCode}`,
    callback_number: "02-1234-5678"
  });
  
  if (smsResult.success) {
    // Store verification code in database
    await saveVerificationCode(phoneNumber, verificationCode);
    res.json({ success: true, message: "Verification code sent" });
  } else {
    res.status(500).json({ error: "Failed to send SMS" });
  }
});
```

### Example 2: Order Confirmation MMS

**Prompt to Claude:**
> "Send MMS with order details and product image when order is placed"

**Claude will generate:**

```python
# Python/Django example
def send_order_confirmation(order_id, customer_phone):
    order = Order.objects.get(id=order_id)
    
    message = f"""
    Order Confirmation #{order.id}
    
    Items: {order.get_items_summary()}
    Total: ${order.total}
    
    Thank you for your order!
    """
    
    # Send MMS with product image
    result = send_mms(
        recipients=[{
            "phone_number": customer_phone,
            "member_code": f"customer_{order.customer.id}"
        }],
        message=message,
        subject="Order Confirmation",
        callback_number="02-1234-5678",
        image_urls=[order.get_product_image_url()]
    )
    
    return result
```

### Example 3: Real-time Status Checking

**Prompt to Claude:**
> "Create a webhook endpoint that checks SMS delivery status"

**Claude will generate:**

```javascript
// Real-time status checking
app.get('/sms-status/:groupId', async (req, res) => {
  const { groupId } = req.params;
  
  try {
    const status = await checkMessageStatus(groupId);
    
    res.json({
      groupId: status.group_id,
      status: status.status,
      delivered: status.success_count,
      failed: status.failed_count,
      pending: status.pending_count,
      messages: status.messages
    });
  } catch (error) {
    res.status(500).json({ error: "Failed to check status" });
  }
});
```

## Available Tools

### 1. send_sms

Send SMS message to one or multiple recipients.

**Parameters:**
- `recipients`: List of recipients with `phone_number` and `member_code`
- `message`: SMS message content (max 2000 characters)
- `callback_number`: Sender callback number
- `project_id`: Project UUID (required)
- `baas_api_key`: BaaS API key for authentication (required)

**Example:**
```python
await send_sms(
    recipients=[
        {"phone_number": "010-1234-5678", "member_code": "user123"}
    ],
    message="Hello, this is a test SMS!",
    callback_number="02-1234-5678"
)
```

**Response:**
```json
{
    "success": true,
    "group_id": 12345,
    "message": "SMS sent successfully",
    "sent_count": 1,
    "failed_count": 0
}
```

### 2. send_mms

Send MMS message with images to one or multiple recipients.

**Parameters:**
- `recipients`: List of recipients with `phone_number` and `member_code`
- `message`: MMS message content (max 2000 characters)
- `subject`: MMS subject line (max 40 characters)
- `callback_number`: Sender callback number
- `image_urls`: List of image URLs to attach (max 5 images, optional)
- `project_id`: Project UUID (optional, uses env var if not provided)

**Example:**
```python
await send_mms(
    recipients=[
        {"phone_number": "010-1234-5678", "member_code": "user123"}
    ],
    message="Check out this image!",
    subject="Image MMS",
    callback_number="02-1234-5678",
    image_urls=["https://example.com/image.jpg"]
)
```

### 3. get_message_status

Get message sending status by group ID.

**Parameters:**
- `group_id`: Message group ID to check status

**Response:**
```json
{
    "group_id": 12345,
    "status": "성공",
    "total_count": 1,
    "success_count": 1,
    "failed_count": 0,
    "pending_count": 0,
    "messages": [
        {
            "phone": "010-1234-5678",
            "name": "홍길동",
            "status": "성공",
            "reason": null
        }
    ]
}
```

### 4. get_send_history

Get message sending history for a project.

**Parameters:**
- `project_id`: Project UUID (optional, uses env var if not provided)
- `offset`: Number of records to skip (default: 0)
- `limit`: Maximum number of records to return (default: 20, max: 100)
- `message_type`: Filter by message type ("SMS", "MMS", "ALL")

## Error Handling

The server provides comprehensive error handling with the following error codes:

- `MISSING_PROJECT_ID`: PROJECT_ID is required
- `INVALID_RECIPIENTS_COUNT`: Recipients count must be between 1 and 1000
- `MESSAGE_TOO_LONG`: Message length exceeds maximum allowed
- `SUBJECT_TOO_LONG`: Subject length exceeds 40 characters
- `TOO_MANY_IMAGES`: Maximum 5 images allowed for MMS
- `API_ERROR`: External API call failed
- `INTERNAL_ERROR`: Internal server error

## API Integration

This MCP server integrates with the BaaS API endpoints:

- `POST /message/sms` - Send SMS messages
- `POST /message/mms` - Send MMS messages  
- `GET /message/send_history/sms/{group_id}/messages` - Get message status

## Quick Start Templates

### Authentication Service Template

```javascript
// Express.js SMS verification service
const express = require('express');
const app = express();

// Store verification codes (use Redis/Database in production)
const verificationCodes = new Map();

app.post('/send-verification', async (req, res) => {
  const { phoneNumber, memberCode } = req.body;
  const code = Math.floor(100000 + Math.random() * 900000);
  
  // Store code with expiration (5 minutes)
  verificationCodes.set(phoneNumber, {
    code,
    expires: Date.now() + 5 * 60 * 1000
  });
  
  // Claude will use your MCP server to send SMS
  const result = await sendSMS({
    recipients: [{ phone_number: phoneNumber, member_code: memberCode }],
    message: `Your verification code: ${code}`,
    callback_number: "02-1234-5678"
  });
  
  res.json({ success: result.success });
});

app.post('/verify-code', (req, res) => {
  const { phoneNumber, code } = req.body;
  const stored = verificationCodes.get(phoneNumber);
  
  if (stored && stored.code == code && Date.now() < stored.expires) {
    verificationCodes.delete(phoneNumber);
    res.json({ success: true, message: "Verified!" });
  } else {
    res.json({ success: false, message: "Invalid or expired code" });
  }
});
```

### E-commerce Notification Template

```python
# Django e-commerce SMS notifications
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Order

@receiver(post_save, sender=Order)
def send_order_notifications(sender, instance, created, **kwargs):
    if created:
        # New order - send confirmation SMS
        send_sms(
            recipients=[{
                "phone_number": instance.customer.phone,
                "member_code": f"customer_{instance.customer.id}"
            }],
            message=f"Order #{instance.id} confirmed! Total: ${instance.total}. We'll notify you when it ships.",
            callback_number="02-1234-5678"
        )
    
    elif instance.status == 'shipped':
        # Order shipped - send tracking SMS with image
        send_mms(
            recipients=[{
                "phone_number": instance.customer.phone,
                "member_code": f"customer_{instance.customer.id}"
            }],
            message=f"Order #{instance.id} shipped! Track: {instance.tracking_number}",
            subject="Order Shipped",
            callback_number="02-1234-5678",
            image_urls=[instance.get_shipping_label_url()]
        )
```

### React Admin Dashboard Template

```jsx
// React component for SMS campaign management
import React, { useState } from 'react';

function SMSCampaign() {
  const [recipients, setRecipients] = useState('');
  const [message, setMessage] = useState('');
  const [status, setStatus] = useState(null);

  const sendCampaign = async () => {
    const recipientList = recipients.split('\n').map((line, index) => {
      const [phone, name] = line.split(',');
      return { phone_number: phone.trim(), member_code: name?.trim() || `user_${index}` };
    });

    // Claude will help implement this API call
    const response = await fetch('/api/send-sms-campaign', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        recipients: recipientList,
        message,
        callback_number: "02-1234-5678"
      })
    });

    const result = await response.json();
    setStatus(result);
  };

  return (
    <div className="sms-campaign">
      <h2>SMS Campaign</h2>
      <textarea
        placeholder="Phone numbers (one per line): 010-1234-5678,John"
        value={recipients}
        onChange={(e) => setRecipients(e.target.value)}
      />
      <textarea
        placeholder="Message content"
        value={message}
        onChange={(e) => setMessage(e.target.value)}
      />
      <button onClick={sendCampaign}>Send Campaign</button>
      {status && (
        <div className="status">
          Sent: {status.sent_count}, Failed: {status.failed_count}
        </div>
      )}
    </div>
  );
}
```

## Development

### Installing Development Dependencies

```bash
uv sync --group dev
```

### Code Formatting

```bash
uv run black baas_sms_mcp/
```

### Type Checking

```bash
uv run mypy baas_sms_mcp/
```

### Testing

```bash
uv run pytest
```

### Building Package

```bash
uv build
```

### Publishing to PyPI

```bash
uv publish
```

## License

MIT License - see [LICENSE](LICENSE) file for details.

## Language

- [English](README.md)
- [한국어](README.ko.md)

## Support

For support and questions, please contact: support@aiapp.link
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "baas-sms-mcp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "mcp, messaging, mms, model-context-protocol, sms",
    "author": null,
    "author_email": "mBaaS Team <support@aiapp.link>",
    "download_url": "https://files.pythonhosted.org/packages/46/26/de5b5250d8250c39947492c658cef03bbc06c97d8d2aff33918026220bb4/baas_sms_mcp-0.1.3.tar.gz",
    "platform": null,
    "description": "# BaaS SMS/MCP Server\n\n[![npm version](https://badge.fury.io/js/baas-sms-mcp.svg)](https://badge.fury.io/js/baas-sms-mcp)\n[![PyPI version](https://badge.fury.io/py/baas-sms-mcp.svg)](https://badge.fury.io/py/baas-sms-mcp)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA Model Context Protocol (MCP) server for SMS and MMS messaging services. This server enables Claude to help developers easily implement messaging features in web and mobile applications by providing direct integration with BaaS API services.\n\n## Features\n\n- **Developer-Friendly**: Claude can automatically generate messaging code for your applications\n- **SMS Sending**: Send SMS messages to single or multiple recipients\n- **MMS Sending**: Send MMS messages with image attachments\n- **Message Status**: Check sending status and delivery confirmation\n- **Send History**: Retrieve message sending history for projects\n- **Multi-Framework Support**: Works with React, Vue, Node.js, Python, and more\n- **Project Isolation**: Multi-tenant support with project-based access control\n- **Error Handling**: Comprehensive error handling with detailed error codes\n\n## Use Cases\n\n- **Authentication**: SMS verification codes for user registration/login\n- **Notifications**: Order confirmations, shipping updates, alerts\n- **Marketing**: Promotional messages, event notifications\n- **Two-Factor Authentication**: Security verification messages\n- **Customer Support**: Automated support messages and updates\n\n## Installation\n\n### Using npm (Recommended)\n\n```bash\nnpm install -g baas-sms-mcp\n```\n\nOr run directly without installation:\n```bash\nnpx baas-sms-mcp\n```\n\n### Using pip\n\n```bash\npip install baas-sms-mcp\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/your-org/baas-sms-mcp.git\ncd baas-sms-mcp\nnpm install\n\n## Configuration\n\nSet the following environment variables:\n\n```bash\nexport BAAS_API_KEY=\"your_baas_api_key_here\"  \nexport PROJECT_ID=\"your_project_uuid_here\"\n```\n\nNote: `BAAS_API_BASE_URL` is fixed to `https://api.aiapp.link` and doesn't need to be configured.\n\n## Usage\n\n### Command Line\n\nAfter installation, you can run the server directly:\n\n```bash\nbaas-sms-mcp\n```\n\n### With Claude Desktop\n\nAdd this server to your Claude Desktop configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"baas-sms-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"baas-sms-mcp\"],\n      \"env\": {\n        \"BAAS_API_KEY\": \"your_api_key\",\n        \"PROJECT_ID\": \"your_project_id\"\n      }\n    }\n  }\n}\n```\n\nOr if installed globally:\n\n```json\n{\n  \"mcpServers\": {\n    \"baas-sms-mcp\": {\n      \"command\": \"baas-sms-mcp\",\n      \"env\": {\n        \"BAAS_API_KEY\": \"your_api_key\",\n        \"PROJECT_ID\": \"your_project_id\"\n      }\n    }\n  }\n}\n```\n\n### Programmatic Usage\n\n```python\nfrom baas_sms_mcp import main\n\n# Run the MCP server\nmain()\n```\n\n## Developer Examples\n\n### Example 1: User Registration with SMS Verification\n\n**Prompt to Claude:**\n> \"Create a user registration API that sends SMS verification codes\"\n\n**Claude will generate:**\n\n```javascript\n// Node.js/Express example\napp.post('/register', async (req, res) => {\n  const { phoneNumber, username } = req.body;\n  \n  // Generate verification code\n  const verificationCode = Math.floor(100000 + Math.random() * 900000);\n  \n  // Send SMS using BaaS MCP\n  const smsResult = await sendSMS({\n    recipients: [{ phone_number: phoneNumber, member_code: username }],\n    message: `Your verification code is: ${verificationCode}`,\n    callback_number: \"02-1234-5678\"\n  });\n  \n  if (smsResult.success) {\n    // Store verification code in database\n    await saveVerificationCode(phoneNumber, verificationCode);\n    res.json({ success: true, message: \"Verification code sent\" });\n  } else {\n    res.status(500).json({ error: \"Failed to send SMS\" });\n  }\n});\n```\n\n### Example 2: Order Confirmation MMS\n\n**Prompt to Claude:**\n> \"Send MMS with order details and product image when order is placed\"\n\n**Claude will generate:**\n\n```python\n# Python/Django example\ndef send_order_confirmation(order_id, customer_phone):\n    order = Order.objects.get(id=order_id)\n    \n    message = f\"\"\"\n    Order Confirmation #{order.id}\n    \n    Items: {order.get_items_summary()}\n    Total: ${order.total}\n    \n    Thank you for your order!\n    \"\"\"\n    \n    # Send MMS with product image\n    result = send_mms(\n        recipients=[{\n            \"phone_number\": customer_phone,\n            \"member_code\": f\"customer_{order.customer.id}\"\n        }],\n        message=message,\n        subject=\"Order Confirmation\",\n        callback_number=\"02-1234-5678\",\n        image_urls=[order.get_product_image_url()]\n    )\n    \n    return result\n```\n\n### Example 3: Real-time Status Checking\n\n**Prompt to Claude:**\n> \"Create a webhook endpoint that checks SMS delivery status\"\n\n**Claude will generate:**\n\n```javascript\n// Real-time status checking\napp.get('/sms-status/:groupId', async (req, res) => {\n  const { groupId } = req.params;\n  \n  try {\n    const status = await checkMessageStatus(groupId);\n    \n    res.json({\n      groupId: status.group_id,\n      status: status.status,\n      delivered: status.success_count,\n      failed: status.failed_count,\n      pending: status.pending_count,\n      messages: status.messages\n    });\n  } catch (error) {\n    res.status(500).json({ error: \"Failed to check status\" });\n  }\n});\n```\n\n## Available Tools\n\n### 1. send_sms\n\nSend SMS message to one or multiple recipients.\n\n**Parameters:**\n- `recipients`: List of recipients with `phone_number` and `member_code`\n- `message`: SMS message content (max 2000 characters)\n- `callback_number`: Sender callback number\n- `project_id`: Project UUID (required)\n- `baas_api_key`: BaaS API key for authentication (required)\n\n**Example:**\n```python\nawait send_sms(\n    recipients=[\n        {\"phone_number\": \"010-1234-5678\", \"member_code\": \"user123\"}\n    ],\n    message=\"Hello, this is a test SMS!\",\n    callback_number=\"02-1234-5678\"\n)\n```\n\n**Response:**\n```json\n{\n    \"success\": true,\n    \"group_id\": 12345,\n    \"message\": \"SMS sent successfully\",\n    \"sent_count\": 1,\n    \"failed_count\": 0\n}\n```\n\n### 2. send_mms\n\nSend MMS message with images to one or multiple recipients.\n\n**Parameters:**\n- `recipients`: List of recipients with `phone_number` and `member_code`\n- `message`: MMS message content (max 2000 characters)\n- `subject`: MMS subject line (max 40 characters)\n- `callback_number`: Sender callback number\n- `image_urls`: List of image URLs to attach (max 5 images, optional)\n- `project_id`: Project UUID (optional, uses env var if not provided)\n\n**Example:**\n```python\nawait send_mms(\n    recipients=[\n        {\"phone_number\": \"010-1234-5678\", \"member_code\": \"user123\"}\n    ],\n    message=\"Check out this image!\",\n    subject=\"Image MMS\",\n    callback_number=\"02-1234-5678\",\n    image_urls=[\"https://example.com/image.jpg\"]\n)\n```\n\n### 3. get_message_status\n\nGet message sending status by group ID.\n\n**Parameters:**\n- `group_id`: Message group ID to check status\n\n**Response:**\n```json\n{\n    \"group_id\": 12345,\n    \"status\": \"\uc131\uacf5\",\n    \"total_count\": 1,\n    \"success_count\": 1,\n    \"failed_count\": 0,\n    \"pending_count\": 0,\n    \"messages\": [\n        {\n            \"phone\": \"010-1234-5678\",\n            \"name\": \"\ud64d\uae38\ub3d9\",\n            \"status\": \"\uc131\uacf5\",\n            \"reason\": null\n        }\n    ]\n}\n```\n\n### 4. get_send_history\n\nGet message sending history for a project.\n\n**Parameters:**\n- `project_id`: Project UUID (optional, uses env var if not provided)\n- `offset`: Number of records to skip (default: 0)\n- `limit`: Maximum number of records to return (default: 20, max: 100)\n- `message_type`: Filter by message type (\"SMS\", \"MMS\", \"ALL\")\n\n## Error Handling\n\nThe server provides comprehensive error handling with the following error codes:\n\n- `MISSING_PROJECT_ID`: PROJECT_ID is required\n- `INVALID_RECIPIENTS_COUNT`: Recipients count must be between 1 and 1000\n- `MESSAGE_TOO_LONG`: Message length exceeds maximum allowed\n- `SUBJECT_TOO_LONG`: Subject length exceeds 40 characters\n- `TOO_MANY_IMAGES`: Maximum 5 images allowed for MMS\n- `API_ERROR`: External API call failed\n- `INTERNAL_ERROR`: Internal server error\n\n## API Integration\n\nThis MCP server integrates with the BaaS API endpoints:\n\n- `POST /message/sms` - Send SMS messages\n- `POST /message/mms` - Send MMS messages  \n- `GET /message/send_history/sms/{group_id}/messages` - Get message status\n\n## Quick Start Templates\n\n### Authentication Service Template\n\n```javascript\n// Express.js SMS verification service\nconst express = require('express');\nconst app = express();\n\n// Store verification codes (use Redis/Database in production)\nconst verificationCodes = new Map();\n\napp.post('/send-verification', async (req, res) => {\n  const { phoneNumber, memberCode } = req.body;\n  const code = Math.floor(100000 + Math.random() * 900000);\n  \n  // Store code with expiration (5 minutes)\n  verificationCodes.set(phoneNumber, {\n    code,\n    expires: Date.now() + 5 * 60 * 1000\n  });\n  \n  // Claude will use your MCP server to send SMS\n  const result = await sendSMS({\n    recipients: [{ phone_number: phoneNumber, member_code: memberCode }],\n    message: `Your verification code: ${code}`,\n    callback_number: \"02-1234-5678\"\n  });\n  \n  res.json({ success: result.success });\n});\n\napp.post('/verify-code', (req, res) => {\n  const { phoneNumber, code } = req.body;\n  const stored = verificationCodes.get(phoneNumber);\n  \n  if (stored && stored.code == code && Date.now() < stored.expires) {\n    verificationCodes.delete(phoneNumber);\n    res.json({ success: true, message: \"Verified!\" });\n  } else {\n    res.json({ success: false, message: \"Invalid or expired code\" });\n  }\n});\n```\n\n### E-commerce Notification Template\n\n```python\n# Django e-commerce SMS notifications\nfrom django.db.models.signals import post_save\nfrom django.dispatch import receiver\nfrom .models import Order\n\n@receiver(post_save, sender=Order)\ndef send_order_notifications(sender, instance, created, **kwargs):\n    if created:\n        # New order - send confirmation SMS\n        send_sms(\n            recipients=[{\n                \"phone_number\": instance.customer.phone,\n                \"member_code\": f\"customer_{instance.customer.id}\"\n            }],\n            message=f\"Order #{instance.id} confirmed! Total: ${instance.total}. We'll notify you when it ships.\",\n            callback_number=\"02-1234-5678\"\n        )\n    \n    elif instance.status == 'shipped':\n        # Order shipped - send tracking SMS with image\n        send_mms(\n            recipients=[{\n                \"phone_number\": instance.customer.phone,\n                \"member_code\": f\"customer_{instance.customer.id}\"\n            }],\n            message=f\"Order #{instance.id} shipped! Track: {instance.tracking_number}\",\n            subject=\"Order Shipped\",\n            callback_number=\"02-1234-5678\",\n            image_urls=[instance.get_shipping_label_url()]\n        )\n```\n\n### React Admin Dashboard Template\n\n```jsx\n// React component for SMS campaign management\nimport React, { useState } from 'react';\n\nfunction SMSCampaign() {\n  const [recipients, setRecipients] = useState('');\n  const [message, setMessage] = useState('');\n  const [status, setStatus] = useState(null);\n\n  const sendCampaign = async () => {\n    const recipientList = recipients.split('\\n').map((line, index) => {\n      const [phone, name] = line.split(',');\n      return { phone_number: phone.trim(), member_code: name?.trim() || `user_${index}` };\n    });\n\n    // Claude will help implement this API call\n    const response = await fetch('/api/send-sms-campaign', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        recipients: recipientList,\n        message,\n        callback_number: \"02-1234-5678\"\n      })\n    });\n\n    const result = await response.json();\n    setStatus(result);\n  };\n\n  return (\n    <div className=\"sms-campaign\">\n      <h2>SMS Campaign</h2>\n      <textarea\n        placeholder=\"Phone numbers (one per line): 010-1234-5678,John\"\n        value={recipients}\n        onChange={(e) => setRecipients(e.target.value)}\n      />\n      <textarea\n        placeholder=\"Message content\"\n        value={message}\n        onChange={(e) => setMessage(e.target.value)}\n      />\n      <button onClick={sendCampaign}>Send Campaign</button>\n      {status && (\n        <div className=\"status\">\n          Sent: {status.sent_count}, Failed: {status.failed_count}\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n## Development\n\n### Installing Development Dependencies\n\n```bash\nuv sync --group dev\n```\n\n### Code Formatting\n\n```bash\nuv run black baas_sms_mcp/\n```\n\n### Type Checking\n\n```bash\nuv run mypy baas_sms_mcp/\n```\n\n### Testing\n\n```bash\nuv run pytest\n```\n\n### Building Package\n\n```bash\nuv build\n```\n\n### Publishing to PyPI\n\n```bash\nuv publish\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Language\n\n- [English](README.md)\n- [\ud55c\uad6d\uc5b4](README.ko.md)\n\n## Support\n\nFor support and questions, please contact: support@aiapp.link",
    "bugtrack_url": null,
    "license": null,
    "summary": "A Model Context Protocol server for SMS and MMS messaging services",
    "version": "0.1.3",
    "project_urls": {
        "Documentation": "https://github.com/your-org/baas-sms-mcp#readme",
        "Homepage": "https://github.com/your-org/baas-sms-mcp",
        "Issues": "https://github.com/your-org/baas-sms-mcp/issues",
        "Repository": "https://github.com/your-org/baas-sms-mcp.git"
    },
    "split_keywords": [
        "mcp",
        " messaging",
        " mms",
        " model-context-protocol",
        " sms"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "57b7f14b2904309a433e68fbc5537aa036d1df643b79926a5469b34d10ab9890",
                "md5": "d4029fc0c8a68ae52681346d49712644",
                "sha256": "e1b9a3a38855acd1c7d1269592456e58e904ad670b1beb556f1d52dfcd2883a4"
            },
            "downloads": -1,
            "filename": "baas_sms_mcp-0.1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d4029fc0c8a68ae52681346d49712644",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 10587,
            "upload_time": "2025-07-31T01:39:05",
            "upload_time_iso_8601": "2025-07-31T01:39:05.658433Z",
            "url": "https://files.pythonhosted.org/packages/57/b7/f14b2904309a433e68fbc5537aa036d1df643b79926a5469b34d10ab9890/baas_sms_mcp-0.1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4626de5b5250d8250c39947492c658cef03bbc06c97d8d2aff33918026220bb4",
                "md5": "0fd69d293f2adc9227cf83f89eebdd95",
                "sha256": "05fb16730a54e469b2e8b05ab1ffee49217f1b19020e5f75bfdcf5ac1d326d51"
            },
            "downloads": -1,
            "filename": "baas_sms_mcp-0.1.3.tar.gz",
            "has_sig": false,
            "md5_digest": "0fd69d293f2adc9227cf83f89eebdd95",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 62897,
            "upload_time": "2025-07-31T01:39:07",
            "upload_time_iso_8601": "2025-07-31T01:39:07.812156Z",
            "url": "https://files.pythonhosted.org/packages/46/26/de5b5250d8250c39947492c658cef03bbc06c97d8d2aff33918026220bb4/baas_sms_mcp-0.1.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-31 01:39:07",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "your-org",
    "github_project": "baas-sms-mcp#readme",
    "github_not_found": true,
    "lcname": "baas-sms-mcp"
}
        
Elapsed time: 1.24867s