Skip to main content
Glama

Tua — the local-first archive for everything you make with AI

Tua turns every piece of AI work into an atom: a plain markdown file in a folder you own, with provenance (project, conversation, source, date) attached automatically. Save with one sentence, find it again from any project or tool, and bring in your whole history from Claude Code, Cowork and Claude Desktop without exports. Nothing leaves your machine — Tua has no server, no account and no key to your content.

Tua is a Norwegian-language product (tool descriptions, skills and answers are in Norwegian). The archive format is plain UTF-8 markdown with YAML front matter, readable in Finder, Spotlight, Explorer, Obsidian or any editor.

Surfaces: Claude Code (MCP server, skills, hooks) · Claude Desktop and claude.ai Cowork (MCP server, skills, the Tua card as an MCP App) · macOS, Windows and Linux.

Norsk bruksanvisning: se Norsk lenger ned.

What you get

Part

What it does

MCP server tua

Eleven tools: tua_save, tua_search, tua_get, tua_list, tua_link, tua_unlink, tua_compose, tua_setup, tua_import, tua_card, tua_open. Every tool has a title and readOnlyHint/destructiveHint; no tool ever deletes anything.

Skill tua

How to save, find and share atoms: short ingress (S) always, summary (M) for long content, fetch M before L, offer before writing.

Skill tua_auto

Mirror a git project (commit log, manifest, decision log, PDF-backed documents) into Tua after every commit.

Hooks (Claude Code only)

SessionStart reminder when history is waiting to be imported · Stop saves long answers · PostToolUse Write/Edit saves text documents you write · PreCompact/SessionEnd saves a session summary. All can be turned off with the plugin setting Automatisk fangst.

The Tua card

An MCP App (ui://tua/kort) that renders a hit list or one atom inside Claude Desktop, claude.ai, Cursor and VS Code, with S → M → L on demand and "Open in …" buttons.

How an atom works

Every atom has three levels: S (ingress, ≤ 300 characters), M (summary, written when content is long) and L (everything). Search answers with S. Claude fetches M before L, and other projects see an atom only at the level you give them (tua_link). Levels are stored in the file itself, so the archive stays readable without Tua.

~/Dropbox/Tua/                 ← or iCloud Drive, OneDrive, Google Drive, or a local folder
  Riulf/Likviditet høst 2026.md
  Hytta/Vedlikehold 2027.md
  Innboks/                     ← drop exports or shared links here
  .tua/                        ← index, versions, logs (metadata only)

Related MCP server: AIBrain

Install

Tua needs Node.js 22.15 or newer (24 recommended) on the PATH. Dependencies are installed by Claude Code from package-lock.json when the plugin is installed.

From the directory (once listed): add Tua from claude.ai › Customize › Plugins. It syncs to Claude Code and Cowork.

From this repository:

claude plugin marketplace add github:tuacircles/tua-plugin
claude plugin install tua@tua-lokal

From a local checkout: claude --plugin-dir ./tua-plugin (no persistent configuration), or claude plugin marketplace add ./tua-plugin && claude plugin install tua@tua-lokal.

Claude Desktop (standalone, without the plugin system): node pakk.mjs builds dist/tua.mcpb; double-click it in Claude Desktop.

First run

The first tool call asks where the archive should live — iCloud Drive, Dropbox, OneDrive, Google Drive or a local folder (~/Tua). Tua never guesses: in Claude Code the question is a form; elsewhere Claude asks you and calls tua_setup. The choice is stored in ~/.tua/config.json and the folder gets one welcome atom. Then Tua offers, once, to bring in your history ("Jeg fant N Code-økter …"); nothing is imported without your yes.

Settings

Setting

Effect

Arkivmappe

Overrides the archive location (TUA_FILES_ROOT). Leave empty to be asked on first use.

Automatisk fangst i Claude Code

On by default. Off = hooks save nothing; you save only when you say "lagre dette til Tua". The SessionStart reminder stays.

What the plugin runs, reads, writes and sends

This section exists so that nothing Tua does is a surprise. It is the complete list.

Runs: node server/server.js (the MCP server, over stdio) and node hooks/tua-hook.mjs (the hooks). The server spawns, with fixed arguments and never through a shell: on macOS open, mdfind, mdls, xattr and python3 (Finder tags); on Windows explorer.exe, rundll32.exe and tar; on Linux xdg-open; on all platforms unzip or tar (exports in Innboks) and git (only when you run the tua_auto skill). Optional, started by you: node server/bridge.js — a local map of the archive on http://127.0.0.1:5274/, bound to loopback only.

Reads (local, read-only): your archive folder; ~/.claude/projects/*/*.jsonl (Claude Code sessions); Claude Desktop's own data folder — the HTTP cache (Cache/Cache_Data, copied to a temp file before decoding, never written) and Cowork sessions (local-agent-mode-sessions/*/audit.jsonl); download metadata in Downloads, Documents and Desktop (Spotlight "where from" on macOS, Zone.Identifier on Windows) plus file hashes to match documents Claude wrote. Hooks read the hook input Claude Code gives them (the last answer, the file you wrote, the transcript path).

Writes (local): atoms as markdown files in your archive folder and metadata under <archive>/.tua/ (index, previous versions, delivery log, hook log — never content outside the atoms); ~/.tua/config.json (archive location); a small machine-local cache in the plugin data directory (TUA_DATA_DIR: derived index, Desktop-cache and Finder scan state); when you run tua_auto in a repository: .tua-sync.json and .git/hooks/post-commit in that repository. Finder tags on macOS. Tua never deletes a file; files in Innboks are moved to Innboks/Ferdig after import.

Sends / fetches over the network: nothing, with two exceptions, both local-first and disclosed in the tool descriptions. (1) tua_import(kilde=lenke) fetches a public https://claude.ai/share/<id> page that you pasted, with one plain GET, no cookies, no login; today that page is an app shell, so the atom is a pointer that fills in when you open the link in Claude Desktop. (2) tua_open(target=kart) sends one HEAD to http://127.0.0.1:5274/ to check whether your local map is running. Tua never calls claude.ai's internal API, never uses cookies or tokens, has no telemetry, no analytics and no update check. Your cloud provider syncs the folder if you chose one — that is your account, not ours.

Credentials: none. Tua needs no API key, no login and reads none of yours.

Privacy Policy

Also published as PRIVACY.md in this repository and at https://tuacircles.com/privacy-policy. Last updated 19 October 2026.

Who we are. Tua Circles Holding AS, Oslo, Norway (org. no. in the Norwegian Register of Business Enterprises). Contact: tech@tuacircles.com.

Data collection. The Tua plugin collects no data for us. It runs entirely on your computer. We receive nothing when you install, run or remove it — no usage statistics, no crash reports, no identifiers.

What the plugin processes locally. On your request it reads your own content — conversations and documents from Claude Code, Cowork and Claude Desktop stored on your machine, text you ask it to save, exports you place in Innboks — and writes it as markdown files to the archive folder you chose. Conversation content captured by the hooks (long answers, documents, session summaries) is personal data about you and whoever appears in it; it stays in your folder.

Usage and storage. Everything is stored in the folder you chose (~/Tua, or a folder synced by iCloud Drive, Dropbox, OneDrive or Google Drive — then that provider's terms apply to the sync, exactly as for any other file in that folder), in ~/.tua/config.json, and in a machine-local cache. We have no access to any of it.

Third-party sharing. None. The plugin sends no data to Tua Circles, to Anthropic beyond what the Claude client itself does when it calls a tool, or to anyone else. The only outbound requests are the two listed above (a public share link you pasted; a loopback check), and neither carries your content.

Data retention. Data stays as long as you keep the files. Delete an atom by deleting its file; delete everything by deleting the folder and ~/.tua. Previous versions live in <archive>/.tua/versions/ and the delivery log in <archive>/.tua/utlevering.jsonl (metadata only: tool, atom id, level, time) until you delete them. Uninstalling the plugin removes the plugin's cache directory, never your archive.

Your rights. Because we hold no data about you, there is nothing for us to access, correct or erase on request — you hold it all. For questions, or to report a security issue, write to tech@tuacircles.com.

Support and documentation

Norsk

Tua er arkivet for det du lager med AI. Hvert stykke arbeid blir et atom: en markdown-fil i din egen mappe, med proveniens (prosjekt, samtale, kilde, dato) festet automatisk. Lagre med «lagre dette til Tua», finn igjen med «hva har jeg om …» fra et hvilket som helst prosjekt, og ta med hele historikken fra Claude Code, Cowork og Claude Desktop uten eksport. Ingenting forlater maskinen din.

Slik virker det. Si «lagre dette til Tua» — Claude skriver ingressen (S) selv, og sammendraget (M) når innholdet er langt. Spør «hva har jeg om likviditet» — treffene svarer med S, og Claude henter M før L. Si «gjør dette synlig i Riulf» — atomet blir en referanse i det prosjektet, på nivået du velger. Si «lag et styrenotat av disse» — tua_compose bygger en leveranse med sporing tilbake til kildene.

Første gang spør Tua hvor arkivet skal ligge (iCloud Drive, Dropbox, OneDrive, Google Drive eller lokalt). Valget lagres i ~/.tua/config.json og kan endres med tua_setup. Deretter tilbyr Tua én gang å ta med historikken: tua_import(kilde=alt, dryRun=true) viser tallene først, og ingenting importeres uten at du sier ja.

Historikken (M17): «Ta med historikken» leser alt som finnes lokalt, uten eksport og uten innlogging: Code-økter (~/.claude/projects), Cowork-økter (audit.jsonl), Desktop-samtaler (fra Claude Desktops egen cache — alt som har vært åpnet i Desktop, med prosjekt; leses også av seg selv hvert 10. minutt) og dokumenter med AI-opphav i Nedlastinger/Dokumenter/Skrivebord (ved referanse, aldri kopi). Delte lenker (claude.ai/share/…) limes inn eller legges i Innboks; innholdet fylles når lenken åpnes i Desktop. Tua kaller aldri claude.ai sitt interne API.

Installere lokalt: claude plugin marketplace add ./tua-plugin og claude plugin install tua@tua-lokal, eller claude --plugin-dir ./tua-plugin for én økt. node pakk.mjs lager dist/tua-plugin.zip (claude.ai › Customize › Plugins › Upload) og dist/tua.mcpb (Claude Desktop). Tester: npm test (MCP over stdio), node server/test-tools.mjs (alle elleve verktøy én gang), node server/test-platform.mjs (Windows/Linux-grenene simulert på macOS) — alle mot en tom scratch-mappe, aldri mot arkivet ditt.

Ærlige grenser. Chat på claude.ai (web/mobil) kjører ikke lokale servere — der virker bare skillene. Hooks finnes bare i Claude Code (og Cowork), ikke i Desktop-chat; Desktop-samtaler fanges i stedet fra appens cache. Finder-tagger settes bare på macOS; på Windows og Linux står taggene i fila. Plugins forutsetter betalt Claude-plan. Node 22.15 eller nyere kreves (zstd-dekoding av Desktop-cachen).

Available Tools

11 tools
tua_cardVis Tua-kortA
Read-onlyIdempotent

Vis et kort fra Tua inne i samtalen (MCP App). Med id: ett atom med ingressen (S) først, knapper for M og L, «Bygget av», «Synlig for», relaterte og «Åpne i …» (Claude, Finder, Code, kartet). Med query: en treffliste med ingresser, nyeste først, der brukeren kan lese M direkte. Bruk dette når brukeren vil se et atom eller treff; bruk tua_search/tua_get når du selv trenger teksten. I klienter uten kort-visning får du det samme som tekst.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAtom-id → kort for ett atom
levelNoNivå for atom-kortet. Standard S (V12). Klippes av referansens nivå og Vault.
limitNoAntall treff (standard 5)
queryNoSøkeord → treffliste (S per treff)
quietNoInternt: kortet henter M/L for visning; logges, men svarer uten preik
contextNoVis som dette prosjektet ser det — aldri mer enn nivået prosjektet har fått
projectNoAvgrens trefflista til ett prosjekt

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuinely non-obvious behavior — that this renders an interactive MCP App surface (M/L buttons, 'Bygget av', 'Synlig for', 'Åpne i …') and degrades to plain text in clients without card support. It does not state ordering/pagination details for the id-mode or any latency/limit behavior beyond the schema's limit field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the two modes, then the routing rule and the fallback — a logical order with almost no filler. It is dense (three long sentences) but every clause carries distinct information; only the enumeration of UI chips is slightly listy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only renderer with no output schema, the description fully explains what the caller will observe in both modes and what happens when the host cannot render cards. With annotations covering safety and the schema covering all seven parameters, nothing material is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the per-field descriptions already carry the baseline. The description goes beyond them by explaining how `id` and `query` select entirely different result shapes (single atom card vs. newest-first hit list) and that the ingress level S is rendered first, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Vis et kort fra Tua inne i samtalen') and immediately decomposes into the two operating modes: `id` renders a single atom card with its UI affordances, `query` renders a ranked hit list. It also explicitly names the siblings it is not (tua_search/tua_get), so an agent can discriminate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit selection rule: use this when the *user* wants to see an atom or hits, use tua_search/tua_get when the agent itself needs the text. It also covers the degraded-client case ('I klienter uten kort-visning får du det samme som tekst'), so the agent knows the call still works when card rendering is unavailable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_composeBygg en leveranse av atomerA

Sett sammen flere atomer til én leveranse (markdown) og lagre den som et nytt atom med proveniens tilbake til kildene (hvilken versjon, hvilket nivå). Bruk når brukeren sier «lag et notat/dokument/sammendrag av disse», «sett sammen X, Y og Z». Standard nivå er M (sammendragene) — L bare når brukeren ber om hele innholdet. Vault-merkede atomer tas med bare som S. Du får markdown-kilden tilbake: skriv den om i husstilen om nødvendig og lagre resultatet med tua_save(key=samme key), og fest html/pdf som renders etterpå.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesAtom-id-ene som skal inn, i den rekkefølgen de skal stå.
keyNoStabil nøkkel (f.eks. «lev:riulf-styrenotat») så en ny kjøring erstatter forrige versjon.
nameYesTittel på leveransen, f.eks. «Styrenotat Riulf — oktober 2026».
tagsNo
convoNoSamtalen/oppgaven dette lages i.
introNoValgfri ingress/innledning øverst i leveransen.
levelNoNivået kildene leses på: S, M (standard) eller L.
contextNoBygg som dette prosjektet ser kildene (aldri mer enn nivået det har fått).
projectNoProsjektet leveransen hører til. Standard: det første kildeatomets prosjekt.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: the tool returns the raw markdown source and does not itself finalize the deliverable, provenance records which version and level were used, and the key parameter makes a re-run replace the previous version. That last point sits in mild tension with idempotentHint=false, though versioned replacement on a stable key is not a true contradiction. No permissions or error behavior is described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the when-to-use triggers, then level rules, then the follow-up workflow. Dense but nearly every sentence carries actionable information; only the house-style/HTML-PDF tail is slightly tangential to invoking the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by stating exactly what comes back (the markdown source) and what the agent must do next (rewrite and save via tua_save with the same key). For a 9-parameter mutation tool this is close to complete, though failure modes and the exact provenance artifact remain unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 89%, so the baseline is 3, but the description genuinely adds meaning: level defaults to M with L only on request, context is capped at the level it was given, and vault-tagged atoms are forced to S. It also clarifies that ids are order-sensitive and that project defaults to the first source atom's project.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: compose several atoms into one deliverable in markdown and persist it as a new atom with provenance back to sources. The scope, output format and the persisted artifact are all named, making it clearly distinguishable from siblings like tua_get or tua_save.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases («lag et notat/dokument/sammendrag av disse», «sett sammen X, Y og Z»), specifies the default level (M) and the exception (L only on explicit request), and explains the vault-atom rule (included only as S). It also draws an explicit boundary with the sibling tua_save by saying the write-back happens in a separate call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_getHent atom fra TuaA
Read-onlyIdempotent

Hent ett atom (id fra tua_search/tua_list) på nivå S, M eller L, pluss proveniens, relaterte atomer (samme samtale, synlig i, felles tagger), adressen i kartet, «Åpne i …»-lenker (Desktop-prosjekt som claude://, fil, repo) og tidligere versjoner. Hent M først; L (alt) bare når svaret krever det. Med version hentes en tidligere versjon.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAtom-id, f.eks. a_m2k…
levelNoS = ingress, M = sammendrag, L = alt (standard). Finnes ikke M, får du starten av L.
contextNoHent som dette prosjektet ser det — aldri mer enn nivået prosjektet har fått.
versionNoTidligere versjon å hente, f.eks. «v1» (navn fra versjonslista). Utelat for gjeldende.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety and idempotency are covered. The description adds the shape of what is returned (provenance, related atoms, links, versions) and the fallback that S is derived from L when M is missing, which is useful, but it discloses nothing about permissions, cost, or limits beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its output contents, then the level strategy, then version selection — each sentence carries distinct information. The one long enumeration sentence is dense but each listed item is a genuine return artifact, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the burden of describing returns, and it does so thoroughly (provenance, related atoms, map address, links, versions) while explaining level and version semantics. It is complete enough to call correctly, with the only gap being any note on payload size or truncation for L.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description adds real strategy beyond the schema: the M-first / L-only-when-needed ordering and the note that a missing M yields the start of L. The `version` behavior (prior version by name) is also echoed clearly, though no new syntax details are added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (hent ett atom) and enumerates exactly what comes back: provenance, related atoms, map address, open-in links, and prior versions. It also names the sibling tools (tua_search/tua_list) as the source of the id, so an agent can tell it apart from the list/search tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit selection guidance for the level parameter: fetch M first, use L (everything) only when the answer requires it, and describes how `version` retrieves a prior version. It routes the agent to tua_search/tua_list for obtaining the id, but does not state an explicit when-not-to-use case beyond the level heuristic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_importTa med historikkenA

Importer tidligere samtaler og dokumenter som søkbare atomer — alt leses lokalt, uten eksport og uten innlogging. kilde=alt (anbefalt ved «ta med historikken»): alle kildene under + Innboks. kilde=code: Claude Code-øktene (~/.claude/projects; én atom per økt + substansielle svar og dokumenter). kilde=cowork: Claude Desktops Cowork-økter (audit.jsonl; prosjekt = mappa valgt i Cowork). kilde=desktop: Desktop-samtalene fra Claude Desktops egen cache — alt som har vært åpnet i Desktop, med prosjekt, verktøykall og filer Claude skrev; leses også av seg selv hvert 10. minutt. kilde=finder: dokumenter med AI-opphav i Nedlastinger/Dokumenter/Skrivebord, ved referanse (aldri kopi). kilde=lenke: en delt Claude-lenke (claude.ai/share/…) brukeren limer inn — gi den i lenke. kilde=innboks: eksport-zip og lenkefiler som ligger i Innboks nå. Bruk når brukeren sier «ta med historikken», «importer samtalene mine», «hent inn gamle økter», «lagre denne delte lenken». Kjør med dryRun=true først og vis tallene. Idempotent — kan kjøres igjen; bare endrede økter får ny versjon. Samtaler som bare finnes på claude.ai web/mobil: be brukeren åpne dem i Desktop eller lage en delt lenke; Tua kaller aldri det interne API-et.

ParametersJSON Schema
NameRequiredDescriptionDefault
etterNoBare økter endret etter dato, ÅÅÅÅ-MM-DD.
kildeNoalt, code (standard), cowork, desktop, finder, lenke eller innboks.
lenkeNoFor kilde=lenke: én eller flere delte lenker (https://claude.ai/share/<id>), eller teksten de står i.
dryRunNoVis hva som ville blitt importert, uten å skrive.
minTegnNoMinste lengde på økta i tegn (standard 600).
projectNoBare økter fra dette prosjektet (repo-/prosjektnavn).

TDQS

A3.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'Idempotent — kan køres igjen; bare endrede økter får ny versjon', which directly contradicts the annotation idempotentHint=false. This is an annotation contradiction, so the behavioral-disclosure score is capped at 1 despite the otherwise useful local-only/no-login and 10-minute auto-read context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and 'alt (anbefalt)' are front-loaded, then a dense but useful per-source list, then usage triggers and dryRun guidance. It is long, but nearly every clause adds operative detail; only the sheer wall-of-text formatting keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-source import with no output schema, the description is unusually complete: it covers sources, triggers, dry-run workflow, idempotency expectations, and the web/mobile limitation. The main residual gap is that it describes 'vis tallene' only loosely re: what the dry-run report contains, but nothing critical for invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema: it explains what each enum value actually scans (e.g. code = ~/.claude/projects, cowork = audit.jsonl, finder = AI-origin docs by reference only), and it ties the lenke parameter to kilde=lenke. That elevates it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb and resource: 'Importer tidligere samtaler og dokumenter som søkbare atomer', and the per-source breakdown (code, cowork, desktop, finder, lenke, innboks) makes it unmistakable how this differs from siblings like tua_save or tua_list. An agent knows exactly what this tool produces without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names concrete user triggers ('ta med historikken', 'importer samtalene mine', 'hent inn gamle økter', 'lagre denne delte lenken'), prescribes a dryRun=true dry pass first, and gives an explicit fallback for web/mobile-only conversations. Both when-to-use and when-not (internal API never called) are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_listOversikt over Tua-arkivetA
Read-onlyIdempotent

Oversikt: alle prosjekter og alle tagger (med antall), pluss de nyeste atomene. Bruk når brukeren vil se hva som finnes («hva har jeg i Tua», «list alt», «hvilke tagger finnes», «vis alle filer/atomer»). Kan filtreres per prosjekt og/eller tag. needs lister atomer som mangler eller har utdatert S/M — grunnlaget for en «Ny gjennomgang».

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoVis bare atomer med denne taggen.
limitNoMaks atomer i lista (standard 20).
needsNoVis bare atomer som mangler eller har utdatert S (ingress) eller M (sammendrag; bare for innhold over ~3 000 tegn).
projectNoVis bare atomer fra dette prosjektet.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuine value by disclosing the return contents (projects, tags with counts, newest atoms) and the semantics of the `needs` mode, which the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the overview scope, then usage triggers, then filtering notes, then the `needs` mode. Dense but every clause carries information; only the parenthetical counts phrasing is slightly loose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates what the overview returns and covers both filter axes and the `needs` mode. An agent could call it correctly, though default limit behavior is left to the schema and no return-shape details are given.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema (tag, project, limit with default, needs enum). The description only adds that `needs` underpins a «Ny gjennomgang», which is marginal beyond the schema's own text; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states concretely what the tool produces: an overview of all projects and all tags with counts, plus the newest atoms. That is far more specific than the bare name/title, though it never explicitly distinguishes itself from siblings like tua_search or tua_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger conditions with quoted user utterances («hva har jeg i Tua», «list alt», «hvilke tagger finnes») and explains the special `needs` mode as the basis for a «Ny gjennomgang». It stops short of naming an alternative tool for narrower lookups, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_openÅpne atom i Finder, Code, Claude eller kartet (fra kortet)A
Read-onlyIdempotent

Brukes av Tua-kortet. Åpner atomets fil i Finder, repoet i Claude Code, Desktop-prosjektet i Claude, eller atomet i kartet (krever at broen kjører). Fast liste, ingen andre mål (V13).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAtom-id
targetYesHva som skal åpnes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-open-world behavior, so the bar is lower. The description adds useful behavioral context beyond the annotations: it requires the bridge to be running and restricts targets to a fixed list. It does not explain the return/success signal, but the added constraints are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler: context first, then the precise actions and constraints. Every clause earns its place, though the structure is more utilitarian than optimally front-loaded for an agent scanning for the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given rich annotations, a fully documented two-parameter schema with an enum, and no output schema, the description covers the essentials: what opens, the prerequisite, and the target restriction. It only omits what a successful invocation returns, which is a minor gap for a launcher tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3. The description improves on this by mapping each enum target ('finder', 'code', 'claude', 'kart') to a concrete outcome, giving the agent meaning beyond the raw enum values. The 'id' parameter is not further described, keeping it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Åpner') and enumerates exactly what is opened for each case: the atom's file in Finder, the repo in Claude Code, the Desktop project in Claude, or the atom in the map. It is easy to distinguish from the data-oriented siblings, though it does not explicitly name or contrast with any of them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the invoking context ('Brukes av Tua-kortet'), a prerequisite ('krever at broen kjører'), and a scope limit ('Fast liste, ingen andre mål'). It does not name alternative tools or spell out when an agent should prefer this over, say, tua_get, but the context is clear enough for correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_saveLagre til TuaA

Lagre et stykke AI-output (eller annet innhold) som et atom i Tua-arkivet. Proveniens (kilde, prosjekt, samtale, tid) festes automatisk. Det finnes ingen mappe å velge — det er hele poenget. Send HELE innholdet i content, og ALLTID en ingress i short (S). Er innholdet over ~3 000 tegn, send også medium (M).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoStabil nøkkel for ting som oppdateres over tid (f.eks. «manifest», «commit-logg», «status»). Finnes et atom med samme key i samme prosjekt, ERSTATTES innholdet — id og synlighet beholdes, versjonen telles opp. Utelat for engangs-innhold.
kindNocapture (standard) eller leveranse (bygget av andre atomer — settes automatisk når derivedFrom sendes).
nameNoTittel. Utelat for å ta første linje automatisk.
tagsNo1–4 korte tagger.
convoNoKort tittel på samtalen/oppgaven dette kom fra — pekeren tilbake til konteksten.
linksNoAtomets egne pekere: fila det ble skrevet til (kind=file, absolutt sti), en nettadresse (url), repoet (repo), eller Desktop-prosjekt/-samtale (claude-project/claude-chat som claude://-lenke). Repo og Desktop-prosjekt for prosjektet legges til automatisk fra prosjektregisteret — send bare det som er spesifikt for dette atomet.
shortNoS — ingressen, 1–3 setninger, maks 300 tegn. Svarer på «hva er dette?»: konklusjonen, tallene som bærer den (beløp, datoer, prosent), status (gjeldende/historisk). Send ALLTID.
mediumNoM — sammendrag, 150–400 ord (maks 2 500 tegn), når innholdet er over ~3 000 tegn: beslutninger, tall, korreksjoner, åpne punkter, struktur. Ikke transkript. Nivå er mengde, ikke redaksjon — ikke utelat navn/tall som står i L.
sourceNoKilde-AI. Standard: Claude.
contentYesHele innholdet som skal lagres (markdown/tekst). Dette er L.
projectNoProsjektet dette hører til (f.eks. «Tua Business»). Bruk brukerens prosjektnavn, ellers repo/mappe-navn.
rendersNoGjengivelser av dette atomet: html/pdf som absolutt sti (sha256 regnes ut), eller artifact som url. Fila er en gjengivelse — atomet (markdown) er sannheten. Send med samme key når du har rendret.
summaryNoÉn linje: HVORFOR ser det slik ut / hva ble bestemt. Lever ved siden av S, ikke i stedet for.
derivedFromNoKildeatomene en leveranse er bygget av: id, versjonen du leste, nivået du leste på. tua_compose fyller dette selv; send det når du bygde leveransen av tua_get-resultater for hånd.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the agent already knows this is a non-destructive write. The description usefully adds that provenance (source, project, conversation, time) is attached automatically and that there is deliberately no folder hierarchy, which is real context beyond the annotations. It omits, however, the key-collision replacement behavior — that is buried in the schema's 'key' description, not in the tool description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with what the tool does, then followed by the two most important call constraints. No filler, though the 'no folder — that's the whole point' aside is personality rather than instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no output schema and no idempotency guarantee, the description covers the input contract well but says nothing about what comes back. With no output schema to lean on, the return value (e.g. the created or replaced atom id/version) should have been described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine call-shaping rules: put the ENTIRE content in 'content', always provide 'short', and add 'medium' when content exceeds ~3000 characters. That sizing guidance goes beyond restating the schema and directly affects how the agent invokes the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: save content as an 'atom' in the Tua archive, with provenance auto-attached and no folder to choose. This is much sharper than a tautology, but it never contrasts itself with the closest siblings (tua_import, tua_compose), so the agent gets purpose but not sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (save a piece of AI output or other content), and it gives operational rules about always sending 'short' and sending 'medium' past ~3000 chars. However it never says when to prefer tua_save over tua_import, tua_compose, or tua_link, and gives no exclusion criteria, so the when-to-use dimension is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tua_setupVelg hvor Tua-arkivet skal liggeA
Idempotent

Første kjøring: velg mappa arkivet skal ligge i — iCloud Drive, Dropbox, OneDrive, Google Drive eller lokalt — eller en egen sti. Kall dette BARE etter at brukeren selv har valgt (svar på en «oppsett:»-linje); gjett aldri. Uten argumenter: viser stedene som finnes på maskinen og hva som er valgt. Valget lagres i ~/.tua/config.json og kan endres senere (innstillinger, M15). Mappa «Tua» lages med et velkomstatom og Innboks.

ParametersJSON Schema
NameRequiredDescriptionDefault
stiNoAlternativt: absolutt sti til en mappe som skal være arkivet.
stedNoSkytjeneste eller lokalt (~/Tua).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations declaring a non-read-only, non-destructive, idempotent write, the description adds real context: the selection is persisted to ~/.tua/config.json, and a «Tua» folder is created containing a welcome atom and an Inbox. It does not say what happens when re-run or whether an existing archive is touched, which is the only meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the primary action, then the critical constraint (never guess), then the no-argument behavior, then persistence details. Every clause carries information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, zero-required setup tool with no output schema, the agent has everything it needs: when to invoke it, what each argument selects, the no-argument fallback, side effects, and where state is stored.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both sti and sted are already fully documented, including the enum values and the absolute-path constraint. The description restates the same set of locations and the custom-path alternative but adds no format or precedence rules beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (choose/create the archive folder) with exact scope: first run, five named backends or a custom path. It is clearly distinguishable from siblings like tua_save or tua_import, which operate on the archive rather than configuring it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use with an exclusion: call ONLY after the user has chosen (an answer to an «oppsett:»-line), never guess. It also documents the zero-argument mode (list existing locations and current selection) and notes the choice can be changed later via settings, covering the main alternative path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.4.0
    • First observedtua_card
    • First observedtua_compose
    • First observedtua_get
    • First observedtua_import
    • First observedtua_link
    • First observedtua_list
    • First observedtua_open
    • First observedtua_save
    • First observedtua_search
    • First observedtua_setup
    • First observedtua_unlink

TDQS

A4/5.0

Scored across 11 tools

Disambiguation4/5

Each tool has a distinct role: save creates atoms, search/get/list retrieve them, compose assembles deliverables, link/unlink manage cross-project visibility, card/open handle UI and external files. The only mild overlap is between search/get (text retrieval) and card (visual display) or card-with-query, but descriptions explicitly steer the agent ('use tua_search/tua_get when you need the text').

Naming Consistency5/5

Every tool uses a consistent tua_ prefix followed by a single lowercase verb in snake_case (save, setup, import, search, get, list, compose, link, unlink, card, open), with a clean link/unlink pairing. No convention mixing anywhere in the set.

Tool Count4/5

11 tools sits comfortably in the well-scoped 3-15 range and covers distinct lifecycle stages. A couple of tools are auxiliary (tua_setup is one-time, tua_open is only used by the card), which slightly dilutes the core surface but doesn't make it bloated.

Completeness4/5

The surface covers create, import, search, retrieve, list, compose, relate, view, and open—strong lifecycle coverage. Minor gaps remain: no explicit delete tool and no dedicated tag/update management (updates seem to rely on re-saving with the same key), which agents must work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides persistent long-term memory for AI assistants with tag-based retrieval, wiki-style linking, and source references, storing memories as markdown files with SQLite index.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A personal, offline-first memory for AI assistants that enables them to read, search, and write to a shared folder of Markdown files, so they all remember you without needing a cloud.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to capture, structure, remember, and retrieve source-backed memory as local Markdown files, with reviewable writes and no cloud dependency.
    213
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients like Claude, ChatGPT, and Cursor to search, read, and write back to one cross-model Markdown library of saved articles, videos, PDFs, notes, and conversations. Hosted remote server with OAuth 2.1 or Agent-key auth and read_only, edit, or full permission tiers.
    MIT