mindyard
Your personal LLM wiki: a git-versioned Markdown vault, served over MCP to Claude.ai, Claude Desktop, Claude Code or any MCP client.
The model reads, searches and edits your wiki through six tools. The server does the bookkeeping that keeps the wiki trustworthy, and no model runs on it:
- every write is a git commit, applied atomically: a batch of edits lands whole or not at all;
- no lost updates: editing a page requires the version you read, and a stale one is rejected (optimistic concurrency);
- write zones: sources in
raw/are create-only, the index, log and schema cannot be deleted, andwiki.yaml(the rules) is read-only for the model; - the protocol travels with the server: clients without any skill still get the method through the MCP instructions and tool descriptions;
- a deterministic linter checks links, orphans, frontmatter and the rules
your
wiki.yamldeclares (required fields, closed status lists, statuses implied by dates).
Status: early release (0.1).
Quickstart
uv tool install mindyard # or prefix each command with `uvx`, or `pip install mindyard`
mindyard init ./data/vaults/garden --demo
mindyard lint ./data/vaults/garden
MINDYARD_DATA_ROOT=./data mindyard serve # http://127.0.0.1:8787/mcp, no auth, loopback only
mindyard init DIR without --demo creates an empty vault. Every directory under
<data root>/vaults/ holding a wiki.yaml is served as one wiki.
A vault
garden/
wiki.yaml # enforced: layout, entity kinds, lint rules (read-only for the model)
schema.md # advisory: what the wiki is about, conventions, for the model
index.md # one line per page
log.md # one entry per operation
raw/ # sources, verbatim, create-only
wiki/ # distilled pages, linked with [[wikilinks]] (Obsidian-compatible)
Authentication
Set MINDYARD_AUTH:
| Value | For | Notes |
|---|---|---|
none |
local use | refuses to listen beyond loopback |
bearer |
Claude Code, Claude Desktop, scripts | mindyard token new laptop prints a token once; only its SHA-256 is stored |
google |
Claude.ai (OAuth) | needs MINDYARD_BASE_URL, MINDYARD_GOOGLE_CLIENT_ID, MINDYARD_GOOGLE_CLIENT_SECRET, MINDYARD_ALLOWED_EMAILS; an account off the list is refused at sign-in |
Claude Code with a bearer token:
claude mcp add --transport http mindyard https://wiki.example.org/mcp \
--header "Authorization: Bearer $MINDYARD_TOKEN"
Claude.ai custom connectors accept static headers for some accounts only; OAuth
(google) is the route that works everywhere.
Configuration
| Variable | Default | |
|---|---|---|
MINDYARD_DATA_ROOT |
(required) | holds vaults/, tokens.yaml, state/ |
MINDYARD_AUTH |
none |
none, bearer, google |
MINDYARD_TENANCY |
single |
mapped: several tenants, see below |
MINDYARD_HOST, MINDYARD_PORT, MINDYARD_PATH |
127.0.0.1, 8787, /mcp |
|
MINDYARD_BASE_URL |
public URL, for OAuth | |
MINDYARD_ALLOWED_EMAILS |
comma-separated, verified emails only | |
MINDYARD_TELEMETRY |
1 |
one log line per tool call; argument values are never logged |
state/ holds the OAuth proxy's client registrations and tokens. It is not a
cache: deleting it signs every client out.
Several tenants. With MINDYARD_TENANCY=mapped, tenants.yaml maps identities
(issuer and subject, never the email) to tenants, whose vaults live under
tenants/<tenant>/. A caller only ever sees its own tenant's wikis; no tool
takes a tenant argument.
Docker
cp compose.example.yaml compose.yaml # adjust user, auth, volume
docker compose up -d
Put a TLS reverse proxy in front; the server itself enforces authentication.
Development
uv sync
uv run ruff check && uv run ruff format --check && uv run mypy && uv run pytest
A client skill carrying the editorial method is in skills/mindyard/.
Contributions are welcome: see CONTRIBUTING.md. Contributors sign a license agreement (CLA.md). Security issues: SECURITY.md.
License
AGPL-3.0-or-later. See LICENSE.
Metadata
Release files for mindyard 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mindyard-0.1.0.tar.gz | 197.5 kB | With provenance | Details for mindyard-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mindyard-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for mindyard-0.1.0-py3-none-any.whl |
Total release size: 276.5 kB
Release files / mindyard-0.1.0.tar.gz
| Download URL | mindyard-0.1.0.tar.gz |
|---|---|
| Size | 197.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42372460cd8b62ababb295a2c816e7619c062eed9770343c09e7c48259eb2e24
|
|
BLAKE2b-256 checksum How to use checksums |
31927654092a889ce6096382e502a61a31d29792b8cddb623f38be384b8eac22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logRelease files / mindyard-0.1.0-py3-none-any.whl
| Download URL | mindyard-0.1.0-py3-none-any.whl |
|---|---|
| Size | 79.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d1123788b4a2b98c50e13effa55dcfaddc09681225eb386b76dab2df7da78ec0
|
|
BLAKE2b-256 checksum How to use checksums |
e9a74daff77587f6d4cd9eb5e6140ab71e9cf8a0f48290ecb5be520f7bae3d53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logSecurity for mindyard 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for mindyard-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.