Skip to main content
Glama
simplepush

Simplepush MCP Server

Official
by simplepush

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SP_KEYSNoPersonal encryption keys, comma-separated list. A bare base64 key is the Personal Password key; topic=key binds a key to a topic.
SP_BASE_URLNoAPI origin. Point at http://localhost:8000 for local development.https://api.simplepu.sh
SP_MCP_PORTNoListen port for the hosted HTTP transport.8787
SP_API_TOKENNoPersonal API token from the app. Required for personal mode.
SP_OAUTH_ISSUERNoOrigin of the authorization server, as clients see it.https://api.simplepu.sh
SP_CANONICAL_URINoPublic URL clients reach this server at, e.g. https://mcp.simplepu.sh/mcp. Tokens are audience-bound to it. Required for hosted HTTP transport.
SP_AUTH_SERVER_URLNoWhere this server reaches the authorization server for token introspection. Defaults to SP_OAUTH_ISSUER.https://api.simplepu.sh
SP_MAX_WAIT_SECONDSNoCeiling on how long send_task may block. Per-call wait_seconds is clamped to it.900
SP_POLL_INTERVAL_MSNoGap between answer polls while blocking.2000
SP_INTEGRATION_TOKENNoOrg integration token from `sp integration create`. Required for organization mode.
SP_INTROSPECTION_SECRETNoBearer for the AS introspection endpoint. Must match the backend's oauth.introspectionSecret. Required for hosted HTTP transport.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
send_notificationA

Send a push notification to phones. A notification lives only in the banner: once dismissed it is gone, so it suits alerts and heads-ups, not questions that must be answered. It can still carry one input — a text input, a choice, or action buttons. By default the call returns right after sending and the answer is readable later with get_notification_answer; set wait_seconds to wait for it in the same call. Each recipient gets their own copy by default; with several recipients the result lists one notification_id per person. For a question that needs an answer, a photo, file, location, slider or several inputs, use send_task.

send_taskA

Create a task on people's phones and wait for the answers. content says what to do or answer; inputs says how to answer: one or more of text, choice (single or multi), action buttons, slider, photo, voice recording, file, location, all answered in one submission. reply opens a comment thread on the task instead of, or in addition to, inputs. By default every recipient gets their own copy of the task, tied together by a group; the call waits up to wait_seconds (default 90s) for ALL of them to answer and returns per-recipient results, with whoever has not answered yet marked pending — a timeout is not a cancellation, the tasks stay live and get_group_status or get_task_answer resolve them later. shared: true sends ONE task that all recipients see and answer together (the first answer resolves it) — use it for questions where any one person's answer settles the matter. Every result carries an append_token for append_subtask.

append_subtaskA

Add a follow-up question or checklist item to a task sent with send_task. Pass the append_token from that result: a task's token appends to that one task; a group's token appends to every instance of the group (narrow with instances). Subtasks take the same content, inputs and reply as send_task and are answered on their own; read them with get_task (the chain) or get_group_status. Never waits.

cancel_taskA

Withdraw something sent earlier: pass a task_id (tsk_...), subtask_id (sub_...) or group_id (grptsk_...). Pending recipients see it as canceled and can no longer answer; answers already given stay. Canceling a group cancels every still-pending instance and reports how many were already finished. Not undoable.

get_task_answerA

Check whether a task sent with send_task, or a subtask added with append_subtask, has been answered. Pass exactly one of task_id or subtask_id. Returns the answer, or pending if the person has not replied yet; for a subtask the result also names its parent task. A photo, voice or file answer carries its inputId for download_attachment. For the whole task including every subtask, use get_task.

get_notification_answerA

Check whether a notification sent with send_notification and an input has been answered. Pass the notification_id it returned. Returns the pick, pending if untouched, or delivered when the notification carried no input (nothing to answer).

query_tasksA

Answers 'which tasks are open, expired, declined or done, and who has them'. Status only — it never shows what people answered or reported; for that use get_task, query_events or get_activity. One page of compact summaries, newest first: id, title, tag, topic, status, recipients, input kinds and reply mode (what sort of answer it expects), attachment kinds (file, link), sent time, and a per-status count of the task's subtasks (checklist items). Filter by status, time window, topic, member, or group.

get_taskA

Answers 'what exactly was asked and answered on this task'. The full content of one task and every subtask appended to it: the questions, the answers given, replies, declines, and the uploads (inputId) and reply files (id) for download_attachment. Use after query_tasks or get_activity has identified the task. A task sent to several people carries its grptsk_ groupId — follow it with get_group_status for the other recipients' copies.

get_group_statusA

Answers 'who has answered and who has not' for a task sent to several people as independent copies (a grptsk_ group id, as shown on tasks from query_tasks): one summary per recipient plus a count per status.

query_eventsA

Answers 'what happened' — the place to look for anything reported, answered, replied, declined or cancelled, oldest first, each with who did it and when. This is where problems surface; query_tasks does not contain them. Defaults to the last 7 days. Filter by member or by event type (TaskCompleted, TaskInputCompleted, SubtaskCompleted, ReplyAppended, SubmissionCreated, TaskDeclinedByRecipient, TaskCanceled, TaskExpired, ...). For a ready-made bundle per member use get_activity; for ad-hoc reports alone use query_submissions.

query_submissionsA

Answers 'did anyone report something on their own' — reports people sent without being asked (not answers to a task): text, photo, file, voice note, location, with who sent it and when. Check this whenever a question is about problems or reports; the task index never shows these. Oldest first; defaults to the last 7 days. Photos and files carry their id for download_attachment (scope_id = the sbm_ id).

search_knowledgeA

Full-text and location search over everything this credential reads — the organization's records, or what a personal account sent and submitted: task titles and content, answers, replies, notifications and their answers, and ad-hoc submissions — across all time, ranked. Use it for 'anything about X?', 'what was said about X?', 'who mentioned X?'. Words match literally, and by stem in the languages the organization configured (so 'leak' finds 'leaking' only where stemming is on); several words must all appear; quote a phrase for adjacency. For 'what happened around ?' pass center/radius_meters instead of (or on top of) the query: alone they return the location answers, replies and submissions recorded within the radius, nearest first; with a query, text hits are kept only when their task or submission carries an in-radius point. For a shape rather than a circle — a site, a block, a stretch of road — pass area_points, a polygon of 3 to 50 corners, instead; those hits carry no distance and come newest first. Resolve a street or site name to coordinates yourself first, and prefer a generous radius when the coordinates are geocoded rather than known. Each hit carries the id to read in full (tsk_/sub_ with get_task, grptsk_ — a task sent to several people — with get_group_status, ntf_ with get_notification_answer, sbm_ with query_submissions) and a snippet with the matching words in brackets (a location hit carries its point and distance instead). Encrypted records are not searchable.

get_activityA

Use this first for 'any problems with ?', 'what is going on with / at the site?', 'catch me up', 'anything I should know?'. One call returns the bundle: open tasks, tasks that were declined or expired, and the window's answers, replies, declines, cancellations and ad-hoc submissions — with who and when. Defaults to the last 7 days. Omit member for the whole organization.

download_attachmentA

Fetches a photo, voice recording or file by the id of what holds it and the id of the file, the same pair the SDK's download takes. Images come back inline so you can look at them; other files come back as a short-lived download URL plus metadata. Needs the 'files:read' scope.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources