digital-samba-mcp-server
Version:
Digital Samba MCP Server - Model Context Protocol server for Digital Samba's video conferencing API
641 lines (486 loc) • 20.1 kB
Markdown
# Digital Samba MCP Server



A Model Context Protocol (MCP) server implementation for Digital Samba's video conferencing API, allowing AI agents like Claude to seamlessly interact with Digital Samba rooms, participants, and meetings.
## Table of Contents
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Claude Desktop Integration](#claude-desktop-integration)
- [CLI Usage](#cli-usage)
- [API Usage](#api-usage)
- [Features](#features)
- [Configuration](#configuration)
- [Advanced Usage](#advanced-usage)
- [Metrics Collection with Prometheus](#metrics-collection-with-prometheus)
- [Custom Error Handling](#custom-error-handling)
- [Webhook Handling](#webhook-handling)
- [Advanced Configuration](#advanced-configuration-with-rate-limiting-and-caching)
- [Examples](#examples)
- [Troubleshooting](#troubleshooting)
- [License](#license)
## Installation
### Local Installation (Recommended)
```bash
npm install digital-samba-mcp-server
```
Then use with npx:
```bash
npx digital-samba-mcp-server --api-key YOUR_API_KEY
```
### Global Installation
While global installation is supported, we recommend local installation for better version management and dependency control.
```bash
npm install -g digital-samba-mcp-server
digital-samba-mcp-server --api-key YOUR_API_KEY
```
## Quick Start
### Using the CLI
The fastest way to get started is to use the command-line interface with npx:
```bash
npx digital-samba-mcp-server --api-key YOUR_DIGITAL_SAMBA_API_KEY
```
This will start the MCP server on port 3000 and expose resources and tools for Digital Samba's video conferencing functionality.
### Using the API
```javascript
import { startServer } from 'digital-samba-mcp-server';
// Start the server with options
const server = startServer({
port: 4000,
apiUrl: 'https://api.digitalsamba.com/api/v1',
webhookSecret: 'your_webhook_secret',
publicUrl: 'https://your-server.example.com'
});
```
## Claude Desktop Integration
The Digital Samba MCP Server is designed to work seamlessly with Claude Desktop, enabling Claude to create and manage Digital Samba video conferencing sessions.
### Configure Claude Desktop
1. Start the Digital Samba MCP Server locally:
```bash
npx digital-samba-mcp-server --api-key YOUR_DIGITAL_SAMBA_API_KEY
```
2. Open Claude Desktop and navigate to Settings > Advanced > MCP Servers:
- Click "Add Server"
- Enter the following information:
- Name: `Digital Samba`
- URL: `http://localhost:3000/mcp`
- Add the following header:
- Name: `Authorization`
- Value: `Bearer YOUR_DIGITAL_SAMBA_API_KEY`
- Click "Save"
3. Select "Digital Samba" from the MCP server dropdown in Claude Desktop.
4. You can now ask Claude to interact with Digital Samba:
- "List my Digital Samba rooms"
- "Create a new Digital Samba meeting called 'Team Weekly'"
- "Generate a join link for room XYZ"
- "Show me participants in my active meetings"
### Example Claude Prompts
Here are examples of requests you can make to Claude once the Digital Samba MCP server is connected:
**List Rooms**
```
Show me all my Digital Samba meeting rooms.
```
**Create Room**
```
Create a new Digital Samba meeting room called "Weekly Team Sync" with a maximum of 20 participants.
```
**Generate Join Link**
```
Generate a join link for my "Weekly Team Sync" room with the name "Meeting Host".
```
**View Participants**
```
Show me who's currently in my Digital Samba meetings.
```
**Schedule Meeting**
```
Schedule a Digital Samba meeting called "Quarterly Review" for next Monday at 10 AM Eastern Time with the following participants: [email list].
```
## CLI Usage
```
npx digital-samba-mcp-server [options]
Options:
-p, --port <port> Port to run the server on (default: 3000)
-k, --api-key <key> Digital Samba API key
-u, --api-url <url> Digital Samba API URL (default: https://api.digitalsamba.com/api/v1)
-l, --log-level <level> Log level (default: info)
-w, --webhook-secret <secret> Secret for webhook verification
-e, --webhook-endpoint <path> Webhook endpoint path (default: /webhooks/digitalsamba)
--public-url <url> Public URL for the server (for webhook callbacks)
--enable-rate-limiting Enable rate limiting for API requests
--rate-limit-requests-per-minute Maximum requests per minute per API key (default: 60)
--enable-cache Enable caching of API responses
--cache-ttl Cache Time-To-Live in milliseconds (default: 300000)
--enable-metrics Enable Prometheus metrics collection
--metrics-endpoint <path> Path for metrics endpoint (default: /metrics)
--metrics-prefix <prefix> Prefix for metrics names (default: digital_samba_mcp_)
--collect-default-metrics Collect default Node.js metrics (default: true)
-h, --help Display help message
```
### Environment Variables
All CLI options can also be specified as environment variables:
- `PORT` - Port to run the server on
- `DIGITAL_SAMBA_API_KEY` - Digital Samba API key
- `DIGITAL_SAMBA_API_URL` - Digital Samba API URL
- `LOG_LEVEL` - Log level (error, warn, info, http, verbose, debug, silly)
- `WEBHOOK_SECRET` - Secret for webhook verification
- `WEBHOOK_ENDPOINT` - Webhook endpoint path
- `PUBLIC_URL` - Public URL for the server
- `ENABLE_RATE_LIMITING` - Enable rate limiting (true/false)
- `RATE_LIMIT_REQUESTS_PER_MINUTE` - Maximum requests per minute
- `ENABLE_CACHE` - Enable caching (true/false)
- `CACHE_TTL` - Cache TTL in milliseconds
- `ENABLE_METRICS` - Enable Prometheus metrics collection (true/false)
- `METRICS_ENDPOINT` - Endpoint path for metrics (default: /metrics)
- `METRICS_PREFIX` - Prefix for metrics names (default: digital_samba_mcp_)
- `COLLECT_DEFAULT_METRICS` - Collect default Node.js metrics (true/false)
## API Usage
### Creating a Server
```javascript
import { createServer } from 'digital-samba-mcp-server';
const { server, port, apiUrl } = createServer({
port: 4000,
apiUrl: 'https://api.digitalsamba.com/api/v1',
webhookSecret: 'your_webhook_secret',
webhookEndpoint: '/webhooks/digitalsamba',
publicUrl: 'https://your-server.example.com'
});
```
### Starting a Server
```javascript
import { startServer } from 'digital-samba-mcp-server';
const httpServer = startServer({
port: 4000,
apiUrl: 'https://api.digitalsamba.com/api/v1'
});
// Later, if needed:
httpServer.close();
```
### Using the Digital Samba API Client Directly
```javascript
import { DigitalSambaApiClient } from 'digital-samba-mcp-server/client';
const client = new DigitalSambaApiClient(
'your_api_key',
'https://api.digitalsamba.com/api/v1'
);
// List rooms
const { data: rooms } = await client.listRooms();
// Create a room
const room = await client.createRoom({
name: 'My Meeting Room',
privacy: 'private'
});
// Generate a room token
const token = await client.generateRoomToken(room.id, {
u: 'User Name'
});
console.log('Join URL:', token.link);
```
## Features
The Digital Samba MCP Server provides the following functionality:
### Performance Optimization
- **Rate Limiting**: Configurable API request rate limiting to prevent abuse and ensure fair usage
- **Response Caching**: Memory-based caching of API responses for improved performance
- **Metrics Collection**: Prometheus-compatible metrics for monitoring server performance and usage
### Room Management
- List, create, update, and delete rooms
- Generate room tokens for participant access
- Manage room settings and participant permissions
### Meeting Scheduling
- Schedule, update, and cancel meetings
- Manage meeting participants
- Find available meeting times
- Generate meeting join links
### Recording Functionality
- Start and stop room recordings
- List and access recordings
- Manage recording settings
### Moderation Tools
- Mute/unmute participants
- Ban/unban participants
- Lock/unlock rooms
- Manage media settings
### Breakout Rooms
- Create and manage breakout rooms
- Assign participants to breakout rooms
- Broadcast messages to breakout rooms
### Webhook Integration
- Register webhooks to receive event notifications
- Listen for room, participant, and recording events
- Secure webhook verification with signatures
## Configuration
### Server Options
The `createServer` and `startServer` functions accept the following options:
| Option | Type | Description | Default |
|--------|------|-------------|---------|
| `port` | number | Port to run the server on | 3000 |
| `apiUrl` | string | Digital Samba API URL | https://api.digitalsamba.com/api/v1 |
| `webhookSecret` | string | Secret for webhook verification | undefined |
| `webhookEndpoint` | string | Webhook endpoint path | /webhooks/digitalsamba |
| `publicUrl` | string | Public URL for the server | http://localhost:{port} |
| `enableRateLimiting` | boolean | Enable API request rate limiting | false |
| `rateLimitRequestsPerMinute` | number | Maximum requests per minute per API key | 60 |
| `enableCache` | boolean | Enable API response caching | false |
| `cacheTtl` | number | Cache Time-To-Live in milliseconds | 300000 (5 minutes) |
| `enableMetrics` | boolean | Enable Prometheus metrics collection | false |
| `metricsEndpoint` | string | Endpoint for exposing metrics | /metrics |
| `metricsPrefix` | string | Prefix for metrics names | digital_samba_mcp_ |
| `collectDefaultMetrics` | boolean | Collect default Node.js metrics | true |
### API Client Options
The `DigitalSambaApiClient` constructor takes the following parameters:
| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `apiKey` | string | Digital Samba API key | undefined |
| `apiUrl` | string | Digital Samba API URL | https://api.digitalsamba.com/api/v1 |
## Available MCP Resources and Tools
The Digital Samba MCP Server exposes the following resources and tools to MCP clients like Claude Desktop:
### Resources
| Resource URI | Description |
|--------------|-------------|
| `digitalsamba://rooms` | List all rooms |
| `digitalsamba://rooms/{roomId}` | Get details for a specific room |
| `digitalsamba://rooms/{roomId}/participants` | List participants in a room |
| `digitalsamba://recordings` | List all recordings |
| `digitalsamba://recordings/{recordingId}` | Get details for a specific recording |
| `digitalsamba://webhooks` | List all registered webhooks |
| `digitalsamba://meetings` | List all scheduled meetings |
| `digitalsamba://meetings/{meetingId}` | Get details for a specific meeting |
### Tools
| Tool Name | Description |
|-----------|-------------|
| `create-room` | Create a new room |
| `update-room` | Update an existing room |
| `delete-room` | Delete a room |
| `generate-token` | Generate a token for room access |
| `register-webhook` | Register a webhook for events |
| `delete-webhook` | Delete a registered webhook |
| `list-webhooks` | List all registered webhooks |
| `list-webhook-events` | List available webhook event types |
| `start-recording` | Start recording in a room |
| `stop-recording` | Stop recording in a room |
| `delete-recording` | Delete a recording |
| `ban-participant` | Ban a participant from a room |
| `unban-participant` | Unban a participant from a room |
| `mute-participant` | Mute a participant |
| `create-breakout-rooms` | Create breakout rooms for a parent room |
| `assign-participants` | Assign participants to breakout rooms |
| `broadcast-message` | Broadcast a message to all breakout rooms |
| `create-meeting` | Schedule a new meeting |
| `update-meeting` | Update a scheduled meeting |
| `cancel-meeting` | Cancel a scheduled meeting |
| `add-participants` | Add participants to a meeting |
## Advanced Usage
### Metrics Collection with Prometheus
The Digital Samba MCP Server includes built-in support for Prometheus metrics, which allows you to monitor server performance, API calls, caching, and more.
#### Enabling Metrics
Metrics can be enabled via CLI arguments:
```bash
npx digital-samba-mcp-server --enable-metrics --metrics-endpoint /metrics --metrics-prefix digital_samba_mcp_
```
Or via environment variables:
```bash
ENABLE_METRICS=true METRICS_ENDPOINT=/metrics METRICS_PREFIX=digital_samba_mcp_ npx digital-samba-mcp-server
```
Or when using the API:
```javascript
import { startServer } from 'digital-samba-mcp-server';
const server = startServer({
enableMetrics: true,
metricsEndpoint: '/metrics',
metricsPrefix: 'digital_samba_mcp_',
collectDefaultMetrics: true
});
```
#### Available Metrics
The server exposes the following metrics:
- HTTP metrics (request counts, duration, response sizes)
- API client metrics (requests, errors, latency)
- Cache metrics (hits, misses, size)
- Rate limiting metrics
- Connection metrics (active sessions, connections)
- Default Node.js metrics (memory, CPU, etc.)
#### Setting Up Prometheus
For detailed instructions on setting up Prometheus to scrape metrics from the Digital Samba MCP Server, see the [Prometheus Setup Guide](docs/prometheus-setup.md).
A sample Grafana dashboard is also available in the [docs/grafana-dashboard.json](docs/grafana-dashboard.json) file.
### Custom Error Handling
The package includes standardized error types that can be used for consistent error handling:
```javascript
import {
DigitalSambaError,
AuthenticationError,
ResourceNotFoundError
} from 'digital-samba-mcp-server/server';
try {
// Some operation that might fail
} catch (error) {
if (error instanceof AuthenticationError) {
console.log('Authentication failed:', error.message);
} else if (error instanceof ResourceNotFoundError) {
console.log(`Resource not found: ${error.resourceType} with ID ${error.resourceId}`);
} else if (error instanceof DigitalSambaError) {
console.log('Digital Samba error:', error.message);
} else {
console.log('Unknown error:', error);
}
}
```
### Webhook Handling
```javascript
import express from 'express';
import { WebhookService, setupWebhookTools } from 'digital-samba-mcp-server/server';
const app = express();
app.use(express.json());
const webhookService = new WebhookService(mcpServer, {
secret: 'your_webhook_secret',
endpoint: '/webhooks/digitalsamba'
});
// Register webhooks
webhookService.registerWebhookEndpoint(app);
// Register custom event handlers
webhookService.on('room.created', async (payload) => {
console.log('Room created:', payload.data.id);
});
webhookService.on('participant.joined', async (payload) => {
console.log('Participant joined:', payload.data.name);
});
```
### Advanced Configuration with Rate Limiting and Caching
```javascript
import { startServer } from 'digital-samba-mcp-server';
// Start the server with advanced configuration
const server = startServer({
port: 4000,
apiUrl: 'https://api.digitalsamba.com/api/v1',
// Enable rate limiting
enableRateLimiting: true,
rateLimitRequestsPerMinute: 60, // 60 requests per minute per API key
// Enable response caching
enableCache: true,
cacheTtl: 60000, // Cache responses for 1 minute
});
```
## Examples
### Creating a Room and Generating Join Links
```javascript
import { DigitalSambaApiClient } from 'digital-samba-mcp-server/client';
const client = new DigitalSambaApiClient('your_api_key');
async function createMeetingRoom() {
// Create a room
const room = await client.createRoom({
name: 'Team Meeting',
privacy: 'private',
max_participants: 10
});
console.log(`Room created: ${room.id}`);
// Generate join links for participants
const hostToken = await client.generateRoomToken(room.id, {
u: 'Meeting Host',
role: 'host'
});
const participantToken = await client.generateRoomToken(room.id, {
u: 'Team Member'
});
console.log(`Host link: ${hostToken.link}`);
console.log(`Participant link: ${participantToken.link}`);
}
createMeetingRoom().catch(console.error);
```
### Scheduling a Meeting
```javascript
import { DigitalSambaApiClient } from 'digital-samba-mcp-server/client';
const client = new DigitalSambaApiClient('your_api_key');
async function scheduleMeeting() {
const meeting = await client.createScheduledMeeting({
title: 'Weekly Team Sync',
description: 'Weekly sync meeting to discuss ongoing projects',
start_time: '2025-06-01T14:00:00Z',
end_time: '2025-06-01T15:00:00Z',
timezone: 'UTC',
host_name: 'Team Lead',
host_email: 'team.lead@example.com',
participants: [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'bob@example.com' }
],
recurring: true,
recurrence_pattern: 'FREQ=WEEKLY;BYDAY=MO',
send_invitations: true
});
console.log(`Meeting scheduled: ${meeting.id}`);
console.log(`Starts: ${new Date(meeting.start_time).toLocaleString()}`);
}
scheduleMeeting().catch(console.error);
```
## Testing with MCP Inspector
You can test the Digital Samba MCP Server using the MCP Inspector tool:
1. Install the MCP Inspector:
```bash
npm install -g @modelcontextprotocol/inspector
```
2. Start the Digital Samba MCP Server:
```bash
npx digital-samba-mcp-server --api-key YOUR_DIGITAL_SAMBA_API_KEY
```
3. Run the MCP Inspector:
```bash
mcp-inspector --url http://localhost:3000/mcp --header "Authorization: Bearer YOUR_DIGITAL_SAMBA_API_KEY"
```
4. The MCP Inspector will allow you to:
- Browse available resources and tools
- Try out tool calls
- Explore resource URIs
- Verify MCP protocol compliance
## Local Development Testing
If you're developing the Digital Samba MCP package locally and want to test it without publishing to npm, you can use the following methods:
### Method 1: Using npm link
This method creates a global link to your local package:
```bash
# In the digital-samba-mcp-server directory
npm run build:clean # Build the package first
npm link
# Now you can use it from anywhere
npx digital-samba-mcp-server YOUR_API_KEY
```
For Windows users, you can use the included script:
```bash
link-local-test.bat
```
### Method 2: Using Local Test Scripts
The package includes scripts for testing locally:
```bash
# In the digital-samba-mcp-server directory
test-local-npm.bat YOUR_API_KEY
```
Or with additional options:
```bash
test-local-npm.bat YOUR_API_KEY --port 4000 --log-level debug
```
### Method 3: Direct Integration with Claude Desktop
For optimal Claude Desktop integration, use the dedicated Windows batch file wrapper:
```json
"Digital_Samba": {
"command": "C:\\path\\to\\digital-samba-mcp-server\\claude-desktop-wrapper.bat",
"args": ["YOUR_API_KEY"]
}
```
Using a .bat file avoids Windows "Open with" prompts since Windows knows how to execute batch files natively.
The batch file wrapper:
- Redirects log output to a file for debugging (claude-desktop.log)
- Sets up proper environment variables for JSON-RPC communication
- Logs startup information for troubleshooting
Add this configuration to Claude Desktop's MCP Server setup.
## Troubleshooting
For common issues and solutions, please see the [TROUBLESHOOTING.md](TROUBLESHOOTING.md) file.
### Common Issues
1. **Authentication Errors**
- Make sure you're using a valid Digital Samba API key
- Ensure the Authorization header is formatted correctly: `Bearer YOUR_API_KEY`
2. **Connection Issues**
- Verify the server is running on the expected port
- Check firewall settings if connecting remotely
- Ensure the MCP client is using the correct URL
3. **Rate Limiting**
- If you encounter 429 Too Many Requests errors, you may be exceeding the rate limit
- Enable rate limiting with a higher threshold or add caching to reduce API calls
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.