Back to Documentation
DocsConnect an AI Assistant (MCP)

Connect an AI Assistant (MCP)

Connect an AI Assistant (MCP)

Version 1.2 | Updated: 2026-07-22 | App version: 0.2.x

DMH exposes an MCP server so an AI assistant — Claude Code, the Claude desktop/mobile app, or a voice assistant — can manage your tasks for you. Ask it in plain language ("what's due today?", "postpone my bank-call reminder", "create a task to call the bank at 3pm") and it calls DMH on your behalf.

Access is authenticated with a personal MCP token. Read and owner-mutation tools are scoped to your own tasks. The sole cross-owner exception is complete_task: an ASSIGNEE may submit completion for a private Challenge shared with them. You create tokens in Settings, and you can revoke any of them at any time.


1. What is MCP?

MCP (Model Context Protocol) is an open standard that lets AI assistants connect to external tools. DMH runs an MCP server at:

https://dmh.syntrope.app/api/mcp

When you connect an assistant with your token, it gains a set of task-management tools (see Available tools) scoped to your account, plus the private-Challenge assignee completion exception described below.


2. Create a token

  1. Open Settings → Profile.
  2. Find the AI Assistant (MCP) section.
  3. Type a name that helps you recognize the token later (for example "Claude on my laptop" or "Phone voice assistant") and select Create token.
  4. The token is shown once, in a dialog, in the form dmh_mcp_…. Copy it immediately with the Copy button — you will not be able to see it again. If you lose it, revoke it and create a new one.

Treat the token like a password. Anyone who has it can manage your tasks.


3. Connect an assistant

Claude Code (CLI)

DMH (Dead Man's Hand) — Watchdog timer and postponed reminder system

Run this once, replacing <token> with the token you copied:

claude mcp add --transport http dmh-tasks https://dmh.syntrope.app/api/mcp \
  --header "Authorization: Bearer <token>"

Then in a Claude Code session you can say things like "list my active tasks" or "create a reminder to submit the report tomorrow at 9am".

Claude.ai custom connector (desktop and mobile, incl. voice)

  1. In the Claude app or on claude.ai, open Settings → Connectors.
  2. Add a custom / remote connector.
  3. Set the server URL to https://dmh.syntrope.app/api/mcp.
  4. Add an HTTP header: name Authorization, value Bearer <token>.
  5. Save and enable the connector.

On mobile you can then use voice — see the next section for how to run your whole task list hands-free.


4. Control your tasks by voice

Once the connector is enabled in the Claude mobile app, you can manage DMH entirely by speaking — no typing, no opening the DMH app.

Set up voice once

  1. Connect the assistant as described in Connect an assistant (the custom connector works on both iOS and Android Claude apps).
  2. In the Claude app, start a voice conversation (the microphone / voice mode button next to the message box).
  3. Say "ping my DMH tasks" — if you hear a confirmation ("pong"), the connection works.

What to say — examples

You don't need special phrasing; speak naturally. Claude picks the right tool from context:

You sayWhat happens
"What's on my list today?"Lists your active tasks (list_tasks).
"Do I have anything overdue?"Lists tasks and checks their deadlines.
"Create a reminder to call the bank tomorrow at 3pm."Creates a REMINDER task (create_task).
"Rename the bank task to 'call the mortgage department'."Updates the task title (update_task).
"I finished the bank-call reminder, mark it done."Completes the task (complete_task).
"Postpone my watchdog check-in."Pushes the deadline out by the task's postpone period (postpone_task).
"Delete the old dentist reminder after confirming its title with me."Deletes the task immediately (delete_task); deletion cannot be undone.

Useful voice habits:

  • Refer to tasks by title, not id. Claude will list your tasks and match the one you mean; if several match, it asks which one.
  • Say times naturally ("tomorrow at nine", "in two hours", "next Monday"). Claude converts them to exact timestamps using your timezone.
  • Chain requests — "postpone the check-in and read me what's left for today" works as one command.
  • Require confirmation before destructive actions. The MCP server does not add a confirmation step: delete_task deletes immediately and cannot be undone. Ask the assistant to read back the task title and wait for your confirmation before it calls the tool.

Limits to know

Voice goes through the same MCP tools as text, so the same safety limits apply. create_task supports every DMH task type, including dead man's switches and Service Monitors, but a DEVICE Healthcheck still needs a separate sensor-pairing step in the DMH app before you activate it. postpone_task also has narrower rules than creation; see the exact list below.

If a command is refused, Claude will tell you which limit it hit — that's intentional, not a bug.


5. Available tools

ToolWhat it does
pingHealth check — confirms the connection works.
list_tasksLists your tasks with skip/take. The optional status filter runs after that page is fetched, so a filtered page can contain fewer than take results even when later matches exist.
get_taskShows one of your tasks by id.
create_taskCreates any of the five task types with a strict, type-specific configuration.
update_taskEdits a task's title, description, start time, or status.
complete_taskCompletes your task, or submits completion for a private Challenge assigned to you. Its optional comment is stored only as evidence for that shared private-Challenge assignee path; owner-task comments are ignored.
postpone_taskPushes a task's next fire time out by its configured period.
delete_taskDeletes a task.

6. create_task schema

The common fields are:

FieldMeaning
titleRequired, non-blank task title (maximum 200 characters).
descriptionOptional description (maximum 5,000 characters).
start_atOptional ISO 8601 date-time with an offset, such as 2026-08-01T09:00:00Z.
taskTypeREMINDER, CHALLENGE, PUBLICATION, DEADMANS_SWITCH, or SERVICE_MONITOR; defaults to REMINDER.
postpone_periodOptional positive postpone period in milliseconds.
statusOptional initial INACTIVE or ACTIVE status.
isPublic, maxParticipants, iconUrlOptional safe common task fields.
type_configOptional or required type-specific object described below. Its type must match taskType.

type_config is a strict typed object, not arbitrary metadata:

Task typePrimary type_config variants and fields
REMINDEROptional. mode is ALARM (default), POMODORO, or SPACED_REPETITION; soundEnabled defaults to true. Exact mode fields and defaults are listed below.
CHALLENGEOptional. firstWarningMinutes/secondWarningMinutes default to 5/2, votingEnabled defaults to false, and schedule optionally supplies canonical recurrence. Recurring schedules are materialized before activation.
PUBLICATIONOptional. Publication content and an optional imageUrl.
DEADMANS_SWITCHRequired. recipientEmail, subject, and content; postponeShiftMode defaults to false. It also accepts the warning fields and paired archiveFile/archiveFileName. This configuration remains redacted from tool results.
SERVICE_MONITORRequired. mode is URL or DEVICE; intervalMinutes defaults to 60 (range 1–10,080) and offlineAlertEnabled defaults to true. Exact mode fields are listed below.

Reminder mode details:

  • ALARM: alarmRepeat defaults to NONE and also accepts DAILY, MONTHLY, or YEARLY. alarmDays uses unique weekday numbers 0–6 and is valid only with DAILY.
  • POMODORO: workDuration, breakDuration, longBreakDuration, and sessionsBeforeLongBreak default to 25, 5, 15, and 4. Their ranges are 1–120, 1–30, 1–60, and 1–10. Optional workingPeriodStart and workingPeriodEnd are paired hours from 0–23, with the end after the start.
  • SPACED_REPETITION: spacedRepetitionFormat defaults to MULTI_DAY and also accepts INTRA_DAY; contentToMemorize is optional.

Service Monitor mode details:

  • URL: requires an HTTPS url. expectedStatus defaults to 200 and may be 100–599; optional expectedBody is limited to 8 KiB.
  • DEVICE: motionAlarmEnabled and motionSensorLockEnabled both default to false; URL probe fields are not accepted.

Creating a DEVICE task as INACTIVE is recommended: pair its hardware separately in the DMH app, then activate it. ACTIVE creation is allowed and derives the first deadline from the configured interval, but pairing first prevents false alarms while no sensor is attached.

DEVICE liveness example

Motion counts as successful activity and re-arms the timer:

{
  "title": "Workshop motion heartbeat",
  "taskType": "SERVICE_MONITOR",
  "status": "INACTIVE",
  "type_config": {
    "type": "SERVICE_MONITOR",
    "mode": "DEVICE",
    "intervalMinutes": 60,
    "motionAlarmEnabled": false
  }
}

DEVICE alarm example

Motion raises an alarm; heartbeat and motion still keep the sensor-liveness timer armed:

{
  "title": "Workshop motion alarm",
  "taskType": "SERVICE_MONITOR",
  "status": "INACTIVE",
  "type_config": {
    "type": "SERVICE_MONITOR",
    "mode": "DEVICE",
    "intervalMinutes": 10,
    "motionAlarmEnabled": true
  }
}

After either call, open the created Healthcheck in DMH, pair the intended device, and only then activate the task. One paired device belongs to one Healthcheck task.


7. Safety limits

The MCP server keeps these boundaries:

  • create_task accepts DMS configuration, but tools never return task metadata; recipient addresses, message contents, and archive data remain redacted.
  • DEVICE Healthchecks can be defined through MCP, but hardware pairing remains a separate owner/device-credential flow in the DMH app and must happen before activation.
  • postpone_task works only for ACTIVE reminders, dead man's switches, and private non-recurring challenges. It rejects public or recurring per-occurrence challenges. PUBLICATION and SERVICE_MONITOR tasks cannot be postponed.
  • update_task edits common task fields only; use the app for later changes to type-specific configuration.
  • Read, create, update, postpone, and delete operations act only on your tasks. The sole cross-owner operation is complete_task for a private Challenge shared with you as ASSIGNEE; the domain use case verifies that role.

8. Revoke a token

If a device is lost, a token leaks, or you simply stop using an assistant:

  1. Open Settings → Profile → AI Assistant (MCP).
  2. Select the trash icon next to the token.
  3. Confirm.

The token stops working immediately. Any assistant still configured with it will get a 401 Unauthorized on its next request. Create a fresh token to reconnect.


9. Troubleshooting

  • Assistant says it can't reach DMH — check the URL is exactly https://dmh.syntrope.app/api/mcp and the header is Authorization: Bearer <token> (note the single space after Bearer).
  • Suddenly getting "unauthorized" — the token was probably revoked (by you or from another device). Create a new one in Settings.
  • A specific action is refused — it's likely one of the safety limits above.
  • Voice command misheard a task name — ask Claude to "list my tasks" first, then refer to the task by its position or a distinctive word from its title.