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/mcp

What 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/mcp

Then 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/mcp

Then authenticate:

codex mcp login activitysmith

Other MCP Clients#

For any client that asks for a remote MCP server URL, use:

https://mcp.activitysmith.com/mcp

The 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.

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.
Send a remote approval before deploying to production.

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.

API key administration remains in the ActivitySmith web app and is not exposed to MCP clients.

ResourceToolDescription
Approvalsrequest_approvalSend a remote approval and wait for the decision.
Approvalswait_for_approvalContinue waiting for a pending approval.
Approvalsget_approvalGet the current state of an approval without waiting.
Approvalscancel_approvalCancel a pending approval that is no longer needed.
Approvalsrequest_approval_taskCreate a durable approval task in MCP clients that support MCP Tasks.
Push Notificationssend_push_notificationSend a Push Notification, with optional actions, media, and channel targeting.
Push Notificationslist_push_notificationsList Push Notification history for the account.
Push Notificationsget_push_notificationGet one Push Notification by public ID.
App Icon Badge Countupdate_app_icon_badge_countSet or clear the App Icon Badge Count, with optional channel targeting.
Live Activitiesset_live_activity_streamStart or update a managed Live Activity stream.
Live Activitiespause_live_activity_streamPause a stream and end its current Live Activity.
Live Activitiesresume_live_activity_streamResume a paused stream so updates apply again.
Live Activitiesend_live_activity_streamEnd the current Live Activity and remove the stream key.
Live Activitieslist_live_activitiesList Live Activities for the account.
Lock Screen Widgetscreate_widget_metricCreate a widget metric definition.
Lock Screen Widgetsset_widget_metric_valueSet the latest value for a widget metric.
Lock Screen Widgetsupdate_widget_metricUpdate a widget metric definition.
Lock Screen Widgetslist_widget_metricsList widget metrics for the account.
Lock Screen Widgetsdelete_widget_metricDelete a widget metric.
Tagslist_tagsList tags and their usage across Push Notifications and Live Activities.
Channelscreate_channelCreate a channel for targeting Push Notifications and Live Activities.
Channelsget_channelGet one channel with its assigned users and devices.
Channelslist_channelsList channels for the account.
Channelsupdate_channelUpdate a channel slug.
Channelsset_channel_usersReplace the user membership for a channel.
Channelsset_channel_devicesReplace explicit device assignments for a channel.
Channelsdelete_channelDelete a channel.
Users and Deviceslist_account_usersList users in the account for channel assignment.
Users and Deviceslist_account_devicesList active devices for explicit channel assignment.

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.

ToolDefault limitMaximum limitOrdering
list_push_notifications50100Newest first; equal creation times use descending ID order
list_live_activities50100Newest first; equal creation times use descending ID order
list_tags50100Alphabetical by slug, then ID
list_account_devices100100Active 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, or null when 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.