MCP Server
Let AI agents send Push Notifications, show real-time progress with Live Activities, update Lock Screen Widgets, and request approval on your iPhone or iPad.
Server URL#
https://mcp.activitysmith.com/mcpWhat Agents Can Do#
Push Notifications
Send Push Notifications to your paired devices.
Live Activities
Show real-time business metrics, operational state, or ongoing work on your Lock Screen.
Lock Screen Widgets
Update values shown in Lock Screen widgets.
Remote Approvals
Send remote approvals that you can accept or reject from your iPhone.
App Icon Badge Count
Set or clear the App Icon Badge Count on paired devices.
History
Review Push Notification and Live Activity history.
Setup Instructions#
The server URL is the same in every client. Approve the OAuth screen in your browser to make the ActivitySmith tools available in new sessions.
Claude Code#
claude mcp add --transport http activitysmith https://mcp.activitysmith.com/mcpThen run /mcp inside a Claude Code session to go through the authentication flow.
Cursor#
Install in Cursor with one click.
If you prefer manual setup, add the server to ~/.cursor/mcp.json:
{ "mcpServers": { "activitysmith": { "url": "https://mcp.activitysmith.com/mcp" } }}Cursor prompts you to log in the first time the server is used.
Codex#
codex mcp add activitysmith --url https://mcp.activitysmith.com/mcpThen authenticate:
codex mcp login activitysmithOther MCP Clients#
For any client that asks for a remote MCP server URL, use:
https://mcp.activitysmith.com/mcpThe authorization flow happens in ActivitySmith. After approval, tools run against the account you authorized.
OAuth#
ActivitySmith MCP uses OAuth. You do not need to create or paste an ActivitySmith API key into an agent prompt.
During authorization, ActivitySmith shows the access requested by the client. Most clients request read and write access so the agent can inspect current state and then take action when you ask it to.
Manage API keys#
The approval screen also has an optional Manage API keys checkbox. It is unchecked by default. Tick it when you want the agent to set up code that calls the ActivitySmith API on its own, for example by creating a key for a CI job and saving it as a secret.
With this permission the agent can list, create, rename, and delete API keys. It never sees existing key secrets, only the secret of a key it creates. Keys an agent creates keep working after you disconnect the agent, so delete them on the API Keys page when you no longer need them. Each one is labeled with the agent that created it.
If you skipped the checkbox, the API key tools return an error that asks you to reconnect ActivitySmith and tick it. The OAuth scope is api_keys:write. ActivitySmith grants it only when you tick the checkbox, even if the client requests it.
Example Prompts#
Notify me on my iPhone when this is done.Show me the progress visible on my Lock Screen with a Live Activity.Send me a Push Notification if this task gets blocked.Ask me for approval on my iPhone before sending any email to customers.Tools#
The server exposes the following MCP tools, grouped by resource. Keep tool confirmation enabled in your client when possible, especially when you connect multiple MCP servers to the same agent session.
The API key tools only work if you ticked the optional Manage API keys checkbox when you approved the agent in ActivitySmith. See Manage API keys.
| Resource | Tool | Description |
|---|---|---|
| Approvals | request_approval | Send a remote approval and wait for the decision. |
| Approvals | wait_for_approval | Continue waiting for a pending approval. |
| Approvals | get_approval | Get the current state of an approval without waiting. |
| Approvals | cancel_approval | Cancel a pending approval that is no longer needed. |
| Approvals | request_approval_task | Create a durable approval task in MCP clients that support MCP Tasks. |
| Push Notifications | send_push_notification | Send a Push Notification, with optional icon, interruption level, actions, media, and channel targeting. |
| Push Notifications | replace_push_notification | Silently replace a sent Push Notification on the Lock Screen and in history, using its notification_id. |
| Push Notifications | list_push_notifications | List Push Notification history for the account. |
| Push Notifications | get_push_notification | Get one Push Notification by public ID. |
| App Icon Badge Count | update_app_icon_badge_count | Set or clear the App Icon Badge Count, with optional channel targeting. |
| Live Activities | set_live_activity_stream | Start or update a managed Live Activity stream. |
| Live Activities | pause_live_activity_stream | Pause a stream and end its current Live Activity. |
| Live Activities | resume_live_activity_stream | Resume a paused stream so updates apply again. |
| Live Activities | end_live_activity_stream | End the current Live Activity and remove the stream key. |
| Live Activities | list_live_activities | List Live Activities for the account. |
| Live Activities | get_live_activity | Get one Live Activity with its metadata, tags, channels, and actions. |
| Lock Screen Widgets | create_widget_metric | Create a widget metric definition. |
| Lock Screen Widgets | set_widget_metric_value | Set the latest value for a widget metric. |
| Lock Screen Widgets | update_widget_metric | Update a widget metric definition. |
| Lock Screen Widgets | list_widget_metrics | List widget metrics for the account. |
| Lock Screen Widgets | delete_widget_metric | Delete a widget metric. |
| Tags | list_tags | List tags and their usage across Push Notifications and Live Activities. |
| Channels | create_channel | Create a channel for targeting Push Notifications and Live Activities. |
| Channels | get_channel | Get one channel with its assigned users and devices. |
| Channels | list_channels | List channels for the account. |
| Channels | update_channel | Update a channel slug. |
| Channels | set_channel_users | Replace the user membership for a channel. |
| Channels | set_channel_devices | Replace explicit device assignments for a channel. |
| Channels | delete_channel | Delete a channel. |
| Users and Devices | list_account_users | List users in the account for channel assignment. |
| Users and Devices | list_account_devices | List active devices for explicit channel assignment. |
| API Keys | list_api_keys | List API keys without their secrets. |
| API Keys | create_api_key | Create an API key and return its secret once. |
| API Keys | rename_api_key | Rename an API key. |
| API Keys | delete_api_key | Delete an API key. |
Pagination#
list_push_notifications, list_live_activities, list_tags, and list_account_devices support offset pagination. Other list tools currently return their complete result without pagination.
| Tool | Default limit | Maximum limit | Ordering |
|---|---|---|---|
list_push_notifications | 50 | 100 | Newest first; equal creation times use descending ID order |
list_live_activities | 50 | 100 | Newest first; equal creation times use descending ID order |
list_tags | 50 | 100 | Alphabetical by slug, then ID |
list_account_devices | 100 | 100 | Active devices first, then most recently updated and created; ties use device and owner identifiers |
For all four tools, limit must be an integer from 1 to 100. offset defaults to 0 and must be a nonnegative integer.
For example, call list_push_notifications with:
{ "limit": 50, "offset": 0 }A page containing the first 50 of 120 matching records includes this metadata:
{ "meta": { "total": 120, "limit": 50, "offset": 0, "has_more": true, "next_offset": 50 }}Records appear in data, except list_account_devices, which returns devices.
total: matching records when counted; this can change between requests.limit: the requested maximum page size.offset: how many records were skipped.has_more: whether another page is available.next_offset: the offset for the next request, ornullwhen finished.
Use next_offset as the next request's offset, keeping the same tool, filters, and limit. Stop when next_offset is null. An empty page also ends pagination, including when the offset is beyond the available results.
New or removed records, or changes to sort values, can move results between pages. When processing multiple pages, deduplicate by record identifier. Offset pagination does not guarantee a complete snapshot while results are changing.