unntak-mcp
local MCP server for the unntak.no agent API at
https://app.unntak.no. it lets an
MCP client read, create, time, comment on, and complete tasks inside an agent's
tag scope.
all supported accounts are end-to-end encrypted. encrypted task content is decrypted only inside this local process. unntak.no receives the inner scoped API credential and ciphertext; the master key from the combined token is never sent to the server.
setup
- in app.unntak.no, open
:)→ settings → agents and create an agent token. copy the complete token once. encrypted tokens start withunntak-agent-v2.. - add the local server to your MCP client:
read -s "UNNTAK_TOKEN?Agent token: "
echo
claude mcp add --scope user unntak \
-e UNNTAK_TOKEN="$UNNTAK_TOKEN" \
-- uvx unntak-mcp
unset UNNTAK_TOKEN
for a local Unntak instance, also add
-e UNNTAK_URL=http://localhost:8000 before --.
the complete token is a password and, for encrypted accounts, also contains the key needed to read the agent's task content. never commit it, paste it into issues, or include it in logs. revoke it in Unntak settings if it is exposed.
only combined unntak-agent-v2. tokens are accepted.
upgrade an existing installation
uvx installs published versions on demand. force it to refresh the cached
package, then verify the token and E2EE decryption:
read -s "UNNTAK_TOKEN?Agent token: "
echo
export UNNTAK_TOKEN
uvx --refresh-package unntak-mcp unntak-mcp --check
unset UNNTAK_TOKEN
restart the MCP client afterwards. to replace a revoked token:
read -s "UNNTAK_TOKEN?New agent token: "
echo
claude mcp remove --scope user unntak
claude mcp add --scope user unntak \
-e UNNTAK_TOKEN="$UNNTAK_TOKEN" \
-- uvx unntak-mcp
unset UNNTAK_TOKEN
then confirm the connection:
claude mcp list
connection check
the check is read-only. success prints the decrypted agent name, scope, and open task count:
{"agent":"007","open_tasks":0,"scope":"agent;007"}
agent flow
the server sends these rules to the model automatically on connect: check
list_tasks at session start, read a task and its comments before working,
start the timer, comment progress, and always complete or stop the task before
ending the session.
tools
whoami— agent name, scope, and open task countlist_tasks— open tasks in the agent's scopeget_task— one task with commentsadd_task— create a scoped taskstart_task/stop_task— operate the live focus timerlog_time— log a block of seconds without the live timercomment— comment under the agent's namecomplete_task— finish a task and archive it
encryption
combined v2 tokens use AES-256-GCM task and comment payloads, authenticated agent metadata, and HMAC-SHA-256 blind scope tokens. plaintext tokens and responses are rejected.
the combined token is split locally. only its inner API token is used as the HTTP bearer credential. ciphertext, keys, and combined tokens are removed from MCP tool results and error messages.
skill/SKILL.md documents the agent workflow for clients with skill support.
encrypted accounts must use this MCP package or another compatible local E2EE
client because the combined token must never be sent whole as an HTTP bearer.
development
uv sync --locked --dev
uv run pytest
uv build --no-sources
test the built wheel instead of the editable source:
UNNTAK_TOKEN=unntak-agent-v2... \
uvx --from ./dist/unntak_mcp-0.3.1-py3-none-any.whl unntak-mcp --check
release
CI tests Python 3.11 and 3.14, builds both distributions, and smoke-tests the
built artifacts. publishing uses the pypi GitHub environment and PyPI trusted
publishing, so no PyPI password is stored in GitHub.
create a tag matching the package version only after CI passes:
uv run pytest
uv build --no-sources
git tag -a v0.3.1 -m v0.3.1
git push origin v0.3.1
the tag publishes to PyPI. server.json can then be published separately to
the official MCP registry for discovery.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unntak_mcp-0.3.1.tar.gz.
File metadata
- Download URL: unntak_mcp-0.3.1.tar.gz
- Upload date:
- Size: 57.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcba1974018b8aa0f67f71ce4a0fe82f0ccd6f4f062ab06012af3c5d67693be2
|
|
| MD5 |
8ab82ce71650a9cd84b9567665c3b5d0
|
|
| BLAKE2b-256 |
b13259777e128f792e58503246845778982e93efa875d5eccf7595ad60b71d73
|
File details
Details for the file unntak_mcp-0.3.1-py3-none-any.whl.
File metadata
- Download URL: unntak_mcp-0.3.1-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ba5802195a04a850be645e4fe3f1d9cda07cad4c30f21cfa22e5b50c110cb1c
|
|
| MD5 |
946b7f9207710007483abe76fa53fc07
|
|
| BLAKE2b-256 |
34c5d853fbc0dc17e0733f6019b4ed36b5d8a14e4432fee23b8823cf51d88521
|