A single local Go binary that builds AADE myDATA invoices and keeps them in sync with AADE — with a tview TUI for humans and an MCP stdio server for AI agents, over one embedded bbolt file.
The whole product is one verb. An invoice you create is pending until you sync; a sync pushes every pending invoice, then walks AADE's MARK sequence and mirrors back everything filed since the last run — the invoices this business has filed (from here, from the AADE portal, or from other software) and the expense documents other entities have filed against it.
docs/SPECIFICATIONS.md is the contract: it defines what this app is, and code follows it.
CLAUDE.md fixes the architecture and dependency rule.
yourdata # launch the TUI (sections: Invoices, Expenses, Counterparties, Catalog, Settings)
yourdata mcp # serve MCP over stdio for AI agents
yourdata --dev # use the AADE development (test) endpoint instead of production
yourdata -db /path/to/file.db # explicit database fileThe database defaults to $YOURDATA_DB, else $XDG_DATA_HOME/yourdata/yourdata.db
(~/.local/share/yourdata/yourdata.db when XDG_DATA_HOME is unset). The TUI and
the MCP server can run simultaneously against the same file — neither holds a lock while idle.
Requires Go 1.26 or newer, plus SSH access to code.techthos.systems for the private SDK:
go env -w 'GOPRIVATE=github.com/techthos/*'
git config --global url."git@code.techthos.systems:TECHTHOS/".insteadOf "https://github.com/techthos/"make build # go build ./... + emit the binary at bin/yourdata
make run # go run .
make test # go test ./... -race -cover
make lint # golangci-lint run
make fmt # gofumpt -w .
make check # fmt + tidy + lint + testNot needed to build or test, but make lint and make fmt require:
go install mvdan.cc/gofumpt@latest
go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latestGitHub Actions runs the build and race-enabled tests on every push and pull request to main
(.github/workflows/ci.yml); the runner fetches the private SDK via the SDK_DEPLOY_KEY
repository secret (a read-only deploy key for code.techthos.systems). Pushing a v* tag re-runs
the tests as a release gate, cross-compiles for linux/darwin/windows on amd64 and arm64 (except
windows/arm64) and publishes the binaries as a GitHub Release
(.github/workflows/build-and-release.yml).
AADE credentials are read from the environment and are never persisted:
| Variable | Required | Purpose |
|---|---|---|
YOURDATA_USERNAME |
yes | myDATA user id |
YOURDATA_SUBSCRIPTION_KEY |
yes | myDATA subscription key |
YOURDATA_ENDPOINT |
no | Explicit endpoint override (default: production; --dev forces the test endpoint and wins over this) |
YOURDATA_MCP_ALLOW_SYNC |
no | Set to 1 to expose the gated MCP tools that transmit — sync_now, push_invoice, preview_sync (sandbox only — they always refuse on production) |
YOURDATA_DB |
no | Database file path override |
The binary refuses to start — in every mode — when YOURDATA_USERNAME or
YOURDATA_SUBSCRIPTION_KEY is unset, exiting with an error naming the missing variables. The active
environment is rendered permanently in the TUI status bar as [TEST] or [PROD].
Register with an MCP client as command yourdata, args ["mcp"]. The server exposes the whole
invoice-building and read surface (33 tools), the AADE code catalogues as resources
(yourdata://enums/*, yourdata://status, yourdata://issuer) and two prompts (new_invoice,
review_period). Filing a real tax document remains a human act at the TUI: sync_now,
push_invoice and preview_sync are absent unless gated in with YOURDATA_MCP_ALLOW_SYNC=1, and
even then they refuse on the production endpoint.
In an MCP Apps-capable host, the same
surface renders as interactive widgets built with github.com/techthos/gomukit — invoices,
expenses, customers and catalog items as card carousels that grow through "Load more" rather than
paged tables, and syncing or issuing a credit note as a detailed, confirm-before-you-act preview
rather than a one-shot call. See docs/SPECIFICATIONS.md § MCP Apps UI for the full widget
table.