OneSignal MCP服务器
用于与OneSignal API交互的综合模型上下文协议(MCP)服务器。该服务器提供了一个完整的界面,用于通过OneSignal的REST API管理推送通知、电子邮件、SMS、用户、设备、细分市场、模板、分析等。
 ](https://github.com/weirdbrains/onesignal-mcp) 
概述
此MCP服务器提供对 OneSignal REST API,提供 57工具 涵盖所有主要的OneSignal操作:
🚀 主要特点
- 多通道消息传递:发送推送通知、电子邮件、短信和事务消息
- 用户和设备管理:完成用户、设备和订阅的CRUD操作
- 高级细分:使用复杂的过滤器创建和管理用户细分
- 模板系统:创建、更新和管理邮件模板
- iOS直播活动:完全支持iOS直播活动
- 分析和导出:查看结果数据并导出到CSV
- 多应用支持:无缝管理多个OneSignal应用程序
- API密钥管理:创建、更新、旋转和删除API密钥
- 组织级运营:管理整个组织中的应用程序
需求
- Python 3.7或更高版本
python-dotenv包裹requests包裹mcp包裹- 具有API证书的OneSignal帐户
安装
选项1:从GitHub克隆
# Clone the repository
git clone https://github.com/weirdbrains/onesignal-mcp.git
cd onesignal-mcp
# Install dependencies
pip install -r requirements.txt选项2:打包安装(即将推出)
pip install onesignal-mcp配置
- 创建
.env根目录中的文件,其中包含您的OneSignal凭据:
# Default app credentials (optional, you can also add apps via the API)
ONESIGNAL_APP_ID=your_app_id_here
ONESIGNAL_API_KEY=your_rest_api_key_here
# Organization API key (for org-level operations)
ONESIGNAL_ORG_API_KEY=your_organization_api_key_here
# Optional: Multiple app configurations
ONESIGNAL_AIBOOKCRAFT_APP_ID=aibookcraft_app_id
ONESIGNAL_AIBOOKCRAFT_API_KEY=aibookcraft_api_key
ONESIGNAL_WEIRDBRAINS_APP_ID=weirdbrains_app_id
ONESIGNAL_WEIRDBRAINS_API_KEY=weirdbrains_api_key
# Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
LOG_LEVEL=INFO- 查找您的OneSignal凭据:
- 应用程序ID:设置>按键和ID>OneSignal应用程序ID - REST API密钥:设置>密钥和ID>REST API密钥 - 组织API密钥:组织设置>API密钥
用法
运行服务器
python onesignal_server.py服务器将启动并向MCP系统注册,使所有57个工具可供使用。
完整工具参考(57个工具)
📱 应用程序管理(5个工具)
list_apps-列出所有已配置的OneSignal应用程序add_app-在本地添加新的OneSignal应用程序配置update_local_app_config-更新现有的本地应用程序配置remove_app-删除本地OneSignal应用程序配置switch_app-将当前应用程序切换为用于API请求
📨 消息传递(8个工具)
send_push_notification-发送推送通知send_email-通过OneSignal发送电子邮件send_sms-通过OneSignal发送短信/彩信send_transactional_message-发送即时送达消息view_messages-查看最近发送的消息view_message_details-获取有关邮件的详细信息view_message_history-查看邮件历史记录/收件人cancel_message-取消已安排的消息
📱 设备/播放器(6个工具)
view_devices-查看订阅您应用程序的设备view_device_details-获取设备的详细信息add_player-添加新玩家/设备edit_player-编辑现有播放器/设备delete_player-删除玩家/设备记录edit_tags_with_external_user_id-按外部ID批量编辑标签
🎯 分段(3个工具)
view_segments-列出所有分段create_segment-创建新分段delete_segment-删除分段
📄 模板(6个工具)
view_templates-列出所有模板view_template_details-获取模板详细信息create_template-创建新模板update_template-更新现有模板delete_template-删除模板copy_template_to_app-将模板复制到另一个应用程序
🏢 应用程序(6个工具)
view_app_details-获取已配置应用程序的详细信息view_apps-列出所有组织应用程序create_app-创建新的OneSignal应用程序update_app-更新现有应用程序view_app_api_keys-查看应用程序的API密钥create_app_api_key-创建新的API密钥
🔑 API密钥管理(3个工具)
delete_app_api_key-删除API密钥update_app_api_key-更新API密钥rotate_app_api_key-旋转API键
👤 用户(6工具)
create_user-创建新用户view_user-查看用户详细信息update_user-更新用户信息delete_user-删除用户view_user_identity-获取用户身份信息view_user_identity_by_subscription-通过订阅获取身份
🏷️ 别名(3个工具)
create_or_update_alias-创建或更新用户别名delete_alias-删除用户别名create_alias_by_subscription-按订阅ID创建别名
📬 订阅(5个工具)
create_subscription-创建新订阅update_subscription-更新订阅delete_subscription-删除订阅transfer_subscription-在用户之间转移订阅unsubscribe_email-使用电子邮件令牌取消订阅
🎯 现场活动(3个工具)
start_live_activity-启动iOS实时活动update_live_activity-更新iOS实时活动end_live_activity-结束iOS实时活动
📊 分析和导出(3个工具)
view_outcomes-查看结果/转换数据export_players_csv-将玩家数据导出到CSVexport_messages_csv-将邮件导出到CSV
用法示例
多通道消息传递
# Send a push notification
await send_push_notification(
title="Hello World",
message="This is a test notification",
segments=["Subscribed Users"]
)
# Send an email
await send_email(
subject="Welcome!",
body="Thank you for joining us",
email_body="
Welcome!
",
include_emails=["user@example.com"]
)
# Send an SMS
await send_sms(
message="Your verification code is 12345",
phone_numbers=["+15551234567"]
)
# Send a transactional message
await send_transactional_message(
channel="email",
content={"subject": "Order Confirmation", "body": "Your order has been confirmed"},
recipients={"include_external_user_ids": ["user123"]}
)用户和设备管理
# Create a user
user = await create_user(
name="John Doe",
email="john@example.com",
external_id="user123",
tags={"plan": "premium", "joined": "2024-01-01"}
)
# Add a device
device = await add_player(
device_type=1, # Android
identifier="device_token_here",
language="en",
tags={"app_version": "1.0.0"}
)
# Update user tags across all devices
await edit_tags_with_external_user_id(
external_user_id="user123",
tags={"last_active": "2024-01-15", "purchases": "5"}
)iOS直播活动
# Start a Live Activity
await start_live_activity(
activity_id="delivery_123",
push_token="live_activity_push_token",
subscription_id="user_subscription_id",
activity_attributes={"order_number": "12345"},
content_state={"status": "preparing", "eta": "15 mins"}
)
# Update the Live Activity
await update_live_activity(
activity_id="delivery_123",
name="delivery_update",
event="update",
content_state={"status": "on_the_way", "eta": "5 mins"}
)分析和导出
# View conversion outcomes
outcomes = await view_outcomes(
outcome_names=["purchase", "session_duration"],
outcome_time_range="7d",
outcome_platforms=["ios", "android"]
)
# Export player data
export = await export_players_csv(
start_date="2024-01-01T00:00:00Z",
end_date="2024-01-31T23:59:59Z",
segment_names=["Active Users"]
)测试
服务器包括一个全面的测试套件。要运行测试,请执行以下操作:
# Run the test script
python test_onesignal_mcp.py
# Or use unittest
python -m unittest discover tests错误处理
服务器提供一致的错误处理:
- 所有错误均以标准格式返回
- 详细的错误消息有助于识别问题
- 瞬态故障的自动重试逻辑
- 正确的身份验证错误消息
速率限制
OneSignal对API请求强制执行速率限制:
- 标准限制:每秒10个请求
- 批量操作:可能有较低的限制
- 服务器包括关于处理速率限制的指导
贡献
我们欢迎捐款!请看 贡献.md 作为指导方针。
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
致谢
- OneSignal 感谢他们出色的通知服务
- 模型上下文协议的MCP社区
- 此项目的所有贡献者
