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