skip to content
$mdflow team create

A shared workspace that is still just markdown

Members, roles and per-workspace permissions over plain markdown files — with your team's own share links and domain, and scoped tokens so the team's agents read exactly what the team decided.

$cat the-problem.txt
Working together meant leaving markdown behind.

The moment a second person needs the document, the usual answer is a workspace tool with its own block format, its own export that loses half the structure, and a permission model that either shows everyone everything or takes an afternoon to configure. The files you could have kept in a folder become rows in someone else's database.

A Team account keeps the files. Same markdown, same folders, same editor, same .md download — with members, roles, and per-workspace access on top, and a tokened API and MCP server so the automations and agents you already run can reach the shared content without anyone sharing a password.

$mdflow team --steps

Three steps to a shared workspace

  1. 01

    Create the Team

    A Team account gets its own workspaces, folders and documents, opened from the Teams entry in the source rail. It never changes who owns your personal notes.

  2. 02

    Invite with the access already set

    Invite by email as an admin or a member, and choose each workspace permission before the invitation goes out. It stays editable while it is pending, and it also waits for them inside MDflow if the mail goes astray.

  3. 03

    Write, share, automate

    The same editor as everywhere else — plus Team share links, a Team custom domain, and scoped tokens for the team's agents.

$mdflow team --vs-personal

Two tiers that never blur

A Team account sits beside your personal workspaces rather than absorbing them. The separation is deliberate, and it holds everywhere it matters.

  • Team content has its own section. Team workspaces open from a Teams entry in the source rail, not mixed into your personal tree. On Teams routes the workspace switcher lists Team accounts and their workspaces; everywhere else it lists yours.
  • Links and quick open never cross tiers. ⌘K inside a Team workspace lists that workspace's documents, and typing @ in a Team document suggests only its own workspace — so a link is always one every reader of that document can actually open.
  • Take a copy into your own workspace. Any Team document can be imported into one of your personal workspaces from its row menu. It is a snapshot: editing the copy changes nothing in the Team account, and read-only members can take one too, because the copy is written to their workspace rather than the Team's.
  • Two subscriptions, neither implies the other. A Team seat grants Pro-equivalent entitlement for Team content — autosave and version history for every active member — without granting personal Pro. Personal Pro does not grant Team access either. Billing, grace and read-only states are tracked separately on both sides.
$mdflow team members --access

Permissions people actually use

Two roles and three per-workspace levels — enough to model a real team, few enough to hold in your head.

  • Owner, admin, member. Owners and admins reach every Team workspace and can create, rename, describe, download or delete whole workspaces. Regular members get the workspaces they were given, and nothing else.
  • Three levels, per workspace. No access hides a workspace completely. Read only keeps reading, search, copy, download, export, import and presentation while every Team-content change is off. Read, write & delete adds creating, organizing, editing, sharing, encrypting, restoring versions and deleting.
  • Set before the invitation is answered. Workspace access on a pending invitation stays editable — including for workspaces created after it was sent — so the grants you chose apply the moment it is accepted. Failed deliveries are listed and can be retried.
  • An invitation that does not need its email. Every invitation still waiting for someone is listed at the top of their Teams page, addressed to the email they signed in with, with accept and decline right there. A mail lost to a spam folder is no longer a dead end — and nobody has to forward a link that was only ever meant for one person.
  • Promotion is a decision, not a slip. Promoting a member to admin clears their per-workspace access, because admins do not need it — and demoting them does not restore it. So the promotion asks for confirmation first.
  • A 365-day audit feed. Every account, membership, invitation, workspace, folder, document, restore and export change is recorded in a Team-only feed, including writes made by an agent holding a Team token.
$mdflow team edit

Everything the editor already does

A Team document is an MDflow document. The capabilities do not thin out because it is shared.

  • The same editor, not a lesser one. Monaco with split preview, GitHub Flavored Markdown, source-scoped local drafts and conflict-aware saves — a stale save cannot silently overwrite a newer edit. Team documents rename inline from their row, and workspaces and folders take a description explaining what belongs in them.
  • Images in Team documents. Drag, drop or paste JPEG, PNG or WebP up to 20 MB. Images are private to the people who can read that workspace, follow the document through duplication and public sharing, and a Team account can hold up to 10,000.
  • Encryption the server cannot undo. The same password-based client-side encryption as personal documents. Anyone who knows the password can unlock the document on their own device — the password is shared between people directly, and MDflow never holds a key.
  • Versions, decks and a way out. Bounded version history that active members can compare and restore, any document presentable as a slide deck, and a ZIP export of any workspace you are authorized for — the folder hierarchy and the markdown files, exactly as you would expect to get them back.
$mdflow team presence

Know who is in the room

Shared documents get edited at awkward moments. MDflow shows you the people, so you can decide what to do about it.

  • See who else has it open. Open a Team document and the people who currently have it open appear as a stack of faces in the header, each marked viewing, editing or idle. Several tabs of one person collapse into one face, and someone who closes the document drops out of the stack within seconds.
  • The sidebar keeps itself current. When a teammate creates, renames, moves or deletes a document or folder, your tree updates on its own a moment later — no manual refresh, and no reload that would cost you an unsaved draft. A body-only save sends nothing, so nobody's typing refreshes everybody else's screen.
  • Presence carries no document text. What travels between tabs is who is here, not what anyone is writing. Each reader re-reads the tree under their own permissions, so the notice that something changed can never show a workspace that person is not allowed to see.
  • A face has to prove it belongs there. Nobody is identified by what their browser claims. Identity travels as a sealed ticket bound to one document, workspace and session, re-issued every minute — so a member whose access is withdrawn disappears from the room in seconds rather than lingering until they leave.
$mdflow team share --public

Publish outside the team

The same public link, the same reader — on your Team's own domain if you connect one.

  • The same switch as a personal document. A writer flips public sharing on and anyone with the unguessable link can read the document, download it, fetch the raw .md twin, present it, or clone it into their own MDflow account. No sign-in, no install.
  • Your Team’s own domain. The owner can connect one custom domain for the whole Team from Team settings. MDflow shows the DNS records to add and reports the connection status while DNS propagates, and the mdflow.cz link keeps working as the permanent backup so nothing already sent breaks.
  • Internal links never leak. If a shared document links to another Team document, the link resolves to that document's own public share when it has one, and is stripped to plain text otherwise. A share never exposes an internal address.
  • Links follow the subscription, not the mood. Team share links keep working through grace and read-only states and go dark only if the account is deleted. Turning sharing off invalidates a link permanently, and every toggle is recorded in the audit feed.
$mdflow team token --create

Tokens your agents can hold

Agent access is the reason most teams end up sharing a personal API key. A Team token means nobody has to.

  • Tokens scoped to workspaces, not to everything. Any member can mint a named mdt_ token from the Team's API Access page, bound to that one Team account, granted only the workspaces they pick, and capped at read-only or read-and-write. It never gains access to workspaces created later.
  • Checked live, on every request. Effective access is the token grant ∩ the creator's current membership and role ∩ their current per-workspace permission ∩ the Team account's state. Removing a member deletes their tokens instantly; only a SHA-256 hash is stored and the plaintext is shown exactly once.
  • A content-only REST API. /api/team/v1 lists accessible workspaces with their effective access level, and creates, reads, updates, moves and deletes folders and documents — with the same 60/min rate limits as the personal API. Membership, invitations and billing are deliberately not exposed.
  • A hosted Team MCP server. /api/team/mcp exposes 16 mdflow_team_* tools, including a get_context retrieval that ranks folder descriptions first. Writes are attributed to the token's creator in the audit feed, so the log names a person, not “the API”.

Connect an MCP client

$json
{
  "mcpServers": {
    "mdflow-team": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mdflow.cz/api/team/mcp",
               "--header", "Authorization: Bearer mdt_YOUR_TEAM_TOKEN"]
    }
  }
}

Or call it directly

$bash
# List the Team workspaces this token can reach
curl https://mdflow.cz/api/team/v1/workspaces \
  -H "Authorization: Bearer mdt_YOUR_TEAM_TOKEN"

# Write a document into one of them
curl -X POST https://mdflow.cz/api/team/v1/documents \
  -H "Authorization: Bearer mdt_YOUR_TEAM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"folderId":"<folder-id>","title":"Release notes","body":"# 0.20.0\n"}'
$cat limitations.txt

What it doesn't do

A Team account is shared markdown with real permissions — not a whole collaboration suite. What it deliberately does not do:

  • No real-time co-editing of the text. You can see who else has the document open, but not their cursor or their keystrokes. Concurrent edits are still handled by conflict-aware saves and version history rather than by merging.
  • No comments, collections or favorites on Team documents. Those personal features are held back until they have Team-specific persistence and authorization designs.
  • The Team API is content only. Workspaces, folders and documents. Membership, invitations and billing are administered by people, in the app.
  • Team MCP wants a bearer header. Claude Code, Cursor, Codex and mcp-remote work today; per-user OAuth for the hosted Claude.ai and ChatGPT connectors is a later phase.
  • One domain per account, one account per domain. A Team connects a single custom domain, and a hostname can belong to only one MDflow account — personal or Team — at a time.
$man mdflow-team --faq

Questions

How much does a Team account cost?
€9.99 per active member each month, with a seven-day free trial. It is one licensed seat per membership, billed on the Team account's own Stripe subscription — separate from personal Pro in both directions. A Team seat does not grant personal Pro, and personal Pro does not grant Team access.
Does a Team account change who owns my personal notes?
No. Team content is stored in a separate tenant and opened from its own section in the source rail. Your personal workspaces stay yours, your personal plan stays yours, and leaving a Team removes nothing from your own account. You can import a Team document into your personal workspace, but that makes a snapshot copy — editing it afterwards changes nothing in the Team.
Can I give someone access to one workspace only?
Yes, and that is the normal case. Each regular member gets No access, Read only, or Read, write & delete on each workspace individually. A workspace with no access is hidden completely rather than shown-but-locked, and new workspaces grant no member access until an owner or admin assigns it. Owners and admins reach everything by design.
Can two people edit the same Team document at once?
Not the same text at the same time — MDflow has no shared cursor. What it does have is live presence: open a Team document and you see the other members who currently have it open, each marked viewing, editing or idle, so you know before you start typing. If you both write anyway, conflict-aware saving catches it: a save against a document that changed on the server is stopped rather than applied, your local draft is preserved, and the recovery flow lets you compare and keep the right text. Bounded version history is there to compare and restore either way.
What if the invitation email never arrives?
It is not a dead end. Any invitation waiting for the address you signed in with is listed at the top of your Teams page, with accept and decline on the row — so a mail that landed in spam, or was never delivered at all, costs nothing. The link in the email keeps working too, and the person who sent the invitation can see failed deliveries and retry them.
Does the Team sidebar show what my colleagues are doing?
It shows their results, not their keystrokes. When someone creates, renames, moves or deletes a document or folder, your Team sidebar picks the change up on its own within a moment, and every reader re-reads the tree under their own permissions — so you never see a workspace you were not given access to. Editing a document body broadcasts nothing at all.
Can our AI agents read the Team workspace?
Yes, with a Team access token. It authenticates a content-only REST API at /api/team/v1 and a hosted MCP server at /api/team/mcp with 16 mdflow_team_* tools, and works with MCP clients that send a bearer header — Claude Code, Cursor, Codex and mcp-remote. Per-user OAuth for the hosted Claude.ai and ChatGPT connectors is a planned later phase; today those connect to personal workspaces.
What happens if the Team subscription lapses?
The account goes to grace and then read-only: content stays readable, search, download, export and presentation keep working, and share links keep resolving — but Team content cannot be edited and the Pro-equivalent feature set withdraws. Recovering the subscription restores it. A Team custom domain is disconnected automatically in read-only, while the mdflow.cz share links keep working.
Can we get our documents out?
Any active member can export an authorized Team workspace as a ZIP of its folder hierarchy and markdown files, and export stays available during grace and read-only. Individual documents download as .md or export as PDF, and the raw .md twin of any Team share is fetchable over HTTP. Team images and audit data are not part of the ZIP.
$mdflow team invite

Shared documents, without leaving markdown

Create a Team account, invite the people who need it with the access already chosen, and hand your agents a token scoped to exactly the workspaces they should see.

Team accounts are €9.99 per active member each month with a 7-day free trial, billed separately from personal Pro.