1<!--
2SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
3
4SPDX-License-Identifier: CC0-1.0
5-->
6
7Note: this was all written in just a few hours with lots of help from LLMs. I've
8reviewed every line, but not thoroughly enough to be confident making this more
9public than unlisted. It Works For Me™.
10
11Avoid sharing and use at your own risk.
12
13---
14
15## MCP server setup
16
17Ensure you have [the Go toolchain] installed.
18
19[the Go toolchain]: https://go.dev/doc/install
20
21```sh
22git clone https://git.sr.ht/~amolith/lunatask-mcp-server
23cd lunatask-mcp-server
24CGO_ENABLED=0 go build -o lunatask-mcp-server .
25./lunatask-mcp-server
26# it'll generate config.toml with default values.
27# fill them out with your preferred editor
28./lunatask-mcp-server
29```
30
31Point [Home Assistant's MCP integration] at the `/sse` endpoint.
32
33[Home Assistant's MCP integration]: https://www.home-assistant.io/integrations/mcp/
34
35## Models and prompts
36
37I'm currently using `google/gemini-2.5-flash-preview:thinking` through
38[OpenRouter] with the following system prompt:
39
40[OpenRouter]: https://openrouter.ai/
41
42> You are a Home Assistant voice assistant capable of creating new tasks in
43> Lunatask, an ADHD-friendly all-in-one encrypted to-do list, habit tracker,
44> journaling, life-tracking and notes app. Respond in plaintext English—no
45> special characters or asterisks or Markdown. Do not repeat yourself. Do not
46> respond until finished using tools. If there are errors, communicate them to
47> the user in plain English.
48>
49> Task names should be in sentence case.
50>
51> For every request to create a task/reminder:
52>
53> 1. List the areas and goals and consider which one area is most relevant.
54> Consider whether the task belongs within any of that area's goals.
55> 2. Get the task timestamp.
56> 3. If the user provided additional details, pass those in the task's note
57> field using Markdown.
58> 4. If the user mentioned a time estimate, like that it might take them 30
59> minutes, pass 30 in the estimate field. If they said 2 hours, 120, and so
60> on.
61>
62> Only once you've gathered the requisite area ID and other information should
63> you attempt to create a task. Only after the create task tool responds at the
64> very end should you respond to the user.