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

Your agents ask for your approval, and you approve or reject from your iPhone.

App Icon Badge

Set or clear the App Icon Badge on paired devices with Push Notifications turned on.

History

Review Push Notification and Live Activity history.

Setup Instructions#

Send the setup prompt to your agent, or follow the steps for your client below. The server URL is the same in every client.

Send This Prompt to Your Agent#

Paste it into Claude Code, Codex, Cursor, Hermes, or a chat app like Claude or ChatGPT. Your agent adds the server, walks you through the sign-in, and checks that your iPhone is paired.

Set up ActivitySmith so you can notify me on my iPhone.
Follow https://activitysmith.com/agent-setup.md

Or add it in one click: Add to Cursor or Add to Claude.

Claude#

Open Add to Claude. It fills in the name and server URL. Select Add, then Connect, and approve the sign-in.

To add it yourself, open Customize, then Connectors. Add a custom connector named ActivitySmith with the server URL:

https://mcp.activitysmith.com/mcp

Claude Code#

claude mcp add --transport http --scope user activitysmith https://mcp.activitysmith.com/mcp

User scope makes ActivitySmith available in every project. Start a new Claude Code session, run /mcp, select activitysmith, and approve the sign-in.

ChatGPT#

Open Settings, then Apps. Under Advanced settings, turn on Developer mode. Select Create app, enter ActivitySmith as the name, and paste the server URL:

https://mcp.activitysmith.com/mcp

Approve the sign-in. Custom apps need a ChatGPT plan that supports Developer mode.

Codex#

codex mcp add activitysmith --url https://mcp.activitysmith.com/mcp

Then authenticate:

codex mcp login activitysmith

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.

Grok#

In Grok, open Connectors, select New Connector, then select Custom and enter the server URL:

https://mcp.activitysmith.com/mcp

Complete the OAuth flow in the pop-up window. For Grok Build, add the server from a terminal:

grok mcp add --transport http activitysmith https://mcp.activitysmith.com/mcp

Hermes#

hermes mcp add --url https://mcp.activitysmith.com/mcp --auth oauth activitysmith

Hermes opens the sign-in page in your browser. Approve it, then run /reload-mcp in your Hermes session to load the tools.

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.

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.

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.
Push Notificationssend_push_notificationSend a Push Notification, with optional icon, interruption level, actions, media, and channel targeting.
Push Notificationsreplace_push_notificationSilently replace a sent Push Notification on the Lock Screen and in history, using its notification_id.
Push Notificationsdismiss_push_notificationClear a sent Push Notification from the Lock Screen and Notification Center, using its notification_id. History keeps it.
Push Notificationslist_push_notificationsList Push Notification history for the account.
Push Notificationsget_push_notificationGet one Push Notification by public ID.
App Icon Badgeupdate_app_icon_badge_countSet or clear the App Icon Badge, 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.
Live Activitiesget_live_activityGet one Live Activity with its metadata, tags, channels, and actions.
Lock Screen Widgetscreate_widget_metricCreate a widget metric definition.
Lock Screen Widgetsset_widget_metric_valueSet the latest value for a widget metric. A new key creates the 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.
API Keyslist_api_keysList API keys without their secrets.
API Keyscreate_api_keyCreate an API key and return its secret once.
API Keysrename_api_keyRename an API key.
API Keysdelete_api_keyDelete an API key.
Accountget_accountGet the signed-in email, plan, and trial with days left and an upgrade link.
Feedbacksubmit_feedbackReport a bug, missing feature, or docs problem to the ActivitySmith team. It sends nothing to your devices.

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.