Skip to content
Agentmart
Submit a tool

LucidLink

Read, write, search, lock and audit files in LucidLink filespaces, plus workspace admin tools.

Connector by lucidlink.comOfficial · Domain verified by the MCP Registry

IndexedLicenseRef-ProprietaryLocal (stdio)
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/lucidlink-com-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Read, write, search, lock and audit files in LucidLink filespaces, plus workspace admin tools.

Use cases: file-management

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Runs code on install

Its package runs an install script (such as npm postinstall or setup.py code) as soon as you install it, before any tool is called. Read the script first.

Tools
19 read · 15 write · 7 delete · 6 not yet classified
Secrets
1 (API keys, tokens or passwords)
Install scripts
Runs code on install
Runs as
Python package

Tools by what they do 47

Read from the source code; the running server may list different tools.

Read 19 · Look things up without changing anything.

  • count_files
  • current_filespace
  • filespace_stats
  • find_files
  • get_entry
  • grep_files
  • list_accounts
  • list_data_stores
  • list_external_files
  • list_files
  • list_filespaces
  • list_locks_held
Show 7 more tools
  • poll_changes
  • read_audit_trail
  • read_file
  • read_lines
  • search_replace
  • verify_token
  • whoami

Write 15 · Create, change, send or run things.

  • append_file
  • create_directory
  • edit_lines
  • link_filespace
  • lock_byte_range
  • move_path
  • register_account
  • register_data_store
  • release_file
  • subscribe_changes
  • unlock_byte_range
  • unsubscribe_changes
Show 3 more tools
  • update_external_url
  • write_at
  • write_file

Delete 7 · Delete, drop, revoke or wipe things.

  • delete_path
  • sync_filespace
  • truncate_file
  • unlink_external_file
  • unlink_filespace
  • unregister_account
  • unregister_data_store

Not yet classified 6 · We could not tell from the name and description.

  • claim_file
  • copy_file
  • link_external_file
  • link_external_url
  • tree
  • use_account

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • LUCIDLINK_TOKEN

Other settings (environment variables or headers).

  • LUCIDLINK_FILESPACE
  • LUCIDLINK_MCP_READ_ONLY
  • LUCIDLINK_MCP_TOOLSETS

Files it touches

  • Any path the agent passes to its tools

Tools (47)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • append_file

    Append to a file (creates if missing). ``content`` is plain UTF-8 text by default; pass ``encoding='base64'`` with base64-encoded content to append binary bytes. Use for log-style writes where you don't want to read-modify-write the whole file. Syncs to the hub after the append.

  • claim_file

    Acquire an exclusive (or shared) lock over an ENTIRE file. Convenience over ``lock_byte_range`` — gets the file's current size and locks from offset 0. Useful when an agent just wants "let me edit this file safely without worrying about byte ranges." Returns an opaque handle_id; pass it to ``release_file`` when done. ``blocking=false`` returns ``BLOCKED`` instead of waiting. Advisory, like ``lock_byte_range``: it excludes other lock takers, not plain writes. Note: if the file grows after you claim it, the new bytes are NOT covered by your lock. For files that may grow during your edit, use …

  • copy_file

    Copy/duplicate/back up a file within the filespace. Streams ``src`` to ``dst`` in chunks through the daemon's encryption layer (ZK preserved end-to-end; memory stays bounded, so large media files are fine). Set ``overwrite=true`` to replace an existing destination.

  • count_files

    Count files and directories under a path, optionally filtered by name pattern. Walks the tree like ``tree`` / ``find_files`` but only returns totals — useful for quick "how big is this directory?" checks before deciding to grep through it. Honors the global walk budgets. ``include_pattern``/``exclude_pattern`` are fnmatch globs on the entry NAME (``*.mp4``), not the path; exclude wins, and an excluded directory is skipped whole: nothing below it is counted or visited. ``path_prefix`` itself is never excluded.

  • create_directory

    Create a directory, including any missing parent directories (``mkdir -p``). Succeeds if the directory already exists.

  • current_filespace

    Return the current account's linked filespaces (current one first), or a hint if none is linked.

  • delete_path

    Delete a file or directory. For directories, pass ``recursive=true`` to delete non-empty ones. Hosts that honor tool annotations prompt before this fires.

  • edit_lines

    Replace lines [start_line, end_line] (inclusive, 1-indexed) with ``new_content``. ``new_content`` may be empty (deletes those lines) or contain newlines (multi-line replacement). A trailing newline is added to the file body if missing. Pass ``dry_run=true`` for a preview without writing. ``expected_content`` (recommended): the text you believe lines [start_line, end_line] currently contain. If the file has changed since you read it, the edit is refused and the actual content is shown — so you never clobber lines that drifted under you. In multi-agent filespaces, pair this with ``claim_file``…

  • filespace_stats

    Summarize the linked filespace: entry count, stored size, and external-file totals. For a files-vs-directories breakdown, use ``count_files`` (a tree walk).

  • find_files

    Find files / directories by name (fnmatch glob). ``name_pattern``: shell-style glob, e.g. ``'*.py'``, ``'*report*'``. ``limit``: max paths returned (clamped to 1000). Walks the filespace tree under ``path_prefix``. Stops at the configured walk budget (default 5000 entries / 30s) and reports partial results.

  • get_entry

    Return metadata for a single file or directory. ``ctime``/``mtime`` are epoch nanoseconds; the ``*_iso`` twins are the same instants in ISO 8601 UTC — paste them straight into ``read_audit_trail``'s ``time_range`` (e.g. ``'<ctime_iso>/'``) to scope an audit query to the entry's lifetime.

  • grep_files

    Search file CONTENTS via Python regex (re.search). ``pattern`` is a Python regex applied per line. ``include_pattern`` / ``exclude_pattern`` are fnmatch globs filtering filenames before reading; an excluded directory is skipped whole (``exclude_pattern='node_modules'`` never enters one). ``path_prefix`` itself is never excluded. Files larger than ``max_file_size_bytes`` are skipped. ``limit`` is clamped to 1000; the walk stops at the global budget and reports partial results. Walking the tree via the SDK is slower than native grep on a local FS — prefer narrow ``path_prefix`` and ``include_p…

  • link_external_file

    Link an S3 object as a read-only file in the linked filespace. ``data_store_name`` is an S3 data store; ``object_id`` is the S3 object key, which the daemon looks up in the bucket before linking.

  • link_external_url

    Link a direct HTTP/HTTPS URL as a read-only file in the filespace. On filespace format 3.8 and newer the link belongs to an HTTP-link data store: pass its ``data_store_name`` (list_data_stores shows them, register_data_store(kind="http_link") makes one). Below 3.8 omit it; a wrong choice is answered with the rule for this filespace. The URL is passed as an argument, so avoid embedding long-lived secrets; prefer public or short-lived signed URLs.

  • link_filespace

    Make a filespace the current one for filesystem / locking / audit tools, linking it if needed. ``name`` accepts the short name, the id, or the globally unique full name ``<filespace>.<workspace>``. Resolution is CROSS-ACCOUNT: when the current account can't see it, the other configured accounts are searched and the current account switches automatically (the output says so) — no use_account needed first. ADDITIVE: any previously linked filespaces stay live (their locks and subscriptions survive), so switching back later is instant. Links count against a per-account cap (``maxLinkedFilespaces…

Show 32 more tools
  • list_accounts

    List the configured named accounts (service-account identities). Marks the current account (the one tools use when no ``account`` argument is given) and shows each account's login state and linked filespaces. Switch with ``use_account(name)``. Single-token setups have exactly one account named "default".

  • list_data_stores

    List data stores registered on the linked filespace, with their kind.

  • list_external_files

    Paginated listing of files linked from a data store. Pass the ``cursor`` from the output's "more available" note to fetch the next page.

  • list_files

    List entries in a directory of the linked filespace. ``pattern`` is an fnmatch glob applied to entry names.

  • list_filespaces

    List filespaces visible to a service account. Returns a newline-separated list of ``name (id)`` entries, marking the ones currently linked. Call this first if you don't know which filespace to operate on. ``account`` selects a configured account (default: the current one; see ``list_accounts``).

  • list_locks_held

    List byte-range locks currently held by THIS MCP process. Shows handle_id, filespace, path, byte range, mode, and how long held — across every linked filespace and account. Process-local — locks held by other agents (other MCP servers / other clients) won't appear here, and no API exists to enumerate them. To probe whether someone else holds a lock, attempt a non-blocking acquire (``blocking=false``): a ``BLOCKED`` answer means it's held. The audit trail records file operations, not lock events.

  • lock_byte_range

    Acquire a byte-range lock on a file in the current filespace. ``mode``: ``exclusive`` excludes every other lock taker; ``shared``/ ``read`` (synonyms) admit other shared takers; ``write`` is a protected write lock. Locks are advisory: they exclude other lock takers (``lock_byte_range``, ``claim_file``, ``exclusive=true`` writes), never plain reads or writes, so every writer to be kept out must take the lock too. ``blocking=true`` waits until acquired, up to the daemon's IO timeout (then errors — call again to keep waiting); ``false`` returns immediately with ``BLOCKED`` when the range is held…

  • move_path

    Move/rename within the same filespace (atomic where possible).

  • poll_changes

    Return audit events newer than the last poll, oldest-first. Rows are raw audit records: ONE user-visible action can fan out to many (a macOS safe-save of a single file emits create/write/move/move/delete across a temp sibling). Read the sequence, don't count it. ``limit`` clamps to 200; anything over stays queued for the next poll.

  • read_audit_trail

    Query the linked filespace's audit trail (NDJSON under .lucid_audit/). Events are returned NEWEST FIRST; ``limit`` keeps the newest N, so "what changed last?" is one call: mode=search, a small limit, and optionally action=FileWritten / FileCreate to exclude reads. Note a recording-to-readable LAG: an event can take a short while to appear here after the operation. Don't treat a just-made change being absent as "not recorded" — re-read after a moment. Mode extras: user_activity needs user, file_history needs path_prefix, aggregate needs group_by — and ignores limit (top 50 groups). path_pref…

  • read_file

    Read file content from the linked filespace. ``offset``/``length`` are byte counts (use ``read_lines`` for line ranges). With no ``length``, a file over the read cap is refused — pass a ``length`` slice; a ``length`` over the cap is clipped and the result says so. The cap is the ``readSizeCap`` config key. ``encoding``: ``auto`` (default) returns plain UTF-8 text for text content (``OK text N bytes:``) and base64 for binary (``OK base64 N bytes:``); ``text`` forces text (errors on binary); ``base64`` forces base64 (binary-safe round-trips).

  • read_lines

    Read a line-range from a text file. Lines are 1-indexed and inclusive. Omit ``end_line`` to read to EOF. Useful for inspecting a specific section of a large file without pulling the whole thing across the wire.

  • register_account

    Register a minted credential as a named account for THIS session. Reads the bearer token from a credential file that ``mint_service_account_admin`` / ``create_identity_admin`` wrote (``~/.lucidlink/sa-<frag>.id-<frag>.token`` — the mint output prints the exact path); the token itself never appears in tool output. Session-scoped: gone on server restart — persist an account with ``lucidlink-mcp-setup --account NAME`` instead. Switch to it with ``use_account(name)``; authentication happens lazily on first use.

  • register_data_store

    Register a data store on the linked filespace. ``kind="s3"`` links S3 objects (link_external_file). Its credentials are NOT passed to this tool: an operator stores them in ~/.lucidlink/data-stores.json (mode 0600), keyed by store name, and this reads the entry for ``name``, so S3 keys never enter the conversation. ``kind="http_link"`` groups URL links (link_external_url) on filespace format 3.8 and newer and needs nothing. Returns identity only, never credentials.

  • release_file

    Release a previously claimed file (companion to ``claim_file``). Releases all byte-range locks held on the handle and closes it. Equivalent to ``unlock_byte_range(handle_id)`` with no offset/length.

  • search_replace

    sed-style find-and-replace within a single text file. ``regex=false`` does literal substring replace. ``regex=true`` treats ``find`` as a Python regex; ``\1`` etc. in ``replace`` reference groups. ``dry_run=true`` reports what would change without writing. Omit ``max_replacements`` to replace every match.

  • subscribe_changes

    Open a cursor on audit events under a path prefix of the CURRENT filespace. Returns a ``subscription_id``. Call ``poll_changes(subscription_id=...)`` to retrieve events newer than the last poll — the cursor stays bound to this filespace even if you switch to another one. Call ``unsubscribe_changes`` to stop; unlinking the filespace drops it. PULL-based: nothing arrives between your ``poll_changes`` calls, and the FIRST poll replays up to an hour of pre-subscribe history rather than starting empty. ``poll_interval`` is an advisory pacing hint only.

  • sync_filespace

    Flush all pending writes to the hub, making them durable and visible to other clients. Call this after ``write_file(sync=false)`` batches; unsynced writes are lost if the session ends before a sync.

  • tree

    Map the directory hierarchy, grouped under full directory paths. ``ls -R`` style: every directory is named in full once, with its entries beneath it and a blank line between directories, so each path in the output is usable as-is — nothing has to be rebuilt from indentation. A directory shown with a trailing ``…`` was not expanded because ``max_depth`` stopped there; a header with nothing beneath it is an empty directory. ``max_entries_per_dir`` caps each listing; out-of-range arguments are clamped and the clamp is reported. ``exclude_pattern`` (fnmatch on entry names) hides matching entries…

  • truncate_file

    Truncate or extend an existing file to exactly ``size`` bytes. ``size=0`` clears the file in place (keeps the path); a smaller size drops the tail; a larger size pads with zero bytes. Moves no file data, so it is cheap on large files. Use it to roll back an append, repair a partial write, or empty a file. Syncs to the hub after.

  • unlink_external_file

    Remove an external-file link from the filespace. Inverse of ``link_external_file`` / ``link_external_url``: drops the link only; the S3 object or URL target is untouched. A link is removed like any file, so on a regular file this is a delete: confirm the path with list_external_files first, and use delete_path for regular files.

  • unlink_filespace

    Detach ONE linked filespace (the current one when ``name`` is omitted); other links stay live. Releases that link's connection to the hub and frees a slot under the link cap; its disk cache stays until the server exits. Its byte-range locks and change subscriptions are dropped — locks and subscriptions on OTHER filespaces are untouched. A named filespace is resolved across every account's live links. The next filespace operation falls back to another linked filespace, or re-links automatically (the default/only filespace, or it asks you to pick).

  • unlock_byte_range

    Release a byte-range lock and close the underlying handle. Pass both ``offset`` and ``length`` to unlock that range, or neither to unlock every range on the handle — one without the other is rejected.

  • unregister_account

    Drop a session-registered account (the inverse of ``register_account``). Unlinks its filespaces and closes its client. Only accounts added via ``register_account`` can be dropped — configured accounts can't (they would come back on restart), and neither can the CURRENT account (switch away with ``use_account`` first). Typical teardown order: switch home → revoke/delete the credential → unregister.

  • unregister_data_store

    Remove (unregister) a data store from the linked filespace. Inverse of ``register_data_store``, either kind. Refused while any external file is still linked from the store: list them with list_external_files and remove them with unlink_external_file first. The S3 objects and URL targets themselves are never touched.

  • unsubscribe_changes

    Close a subscription's cursor (on whichever filespace it lives).

  • update_external_url

    Repoint an existing HTTP/HTTPS external-file link to a new URL. ``path`` is an existing link created by ``link_external_url``. The new URL must serve the same content (the daemon refuses a different size): this refreshes an expired or moved URL, it does not swap the content.

  • use_account

    Switch the current account for subsequent tool calls. Filespace links (and their locks/subscriptions) are PER ACCOUNT and stay live across switches — switching back restores that account's context as you left it. Authentication happens lazily on the first filespace operation.

  • verify_token

    Check whether the CURRENT account's LucidLink token is accepted. Follows use_account switches. Does NOT require the daemon. Single HTTPS round-trip (~0.5s). Returns a one-line status; a missing or rejected token is an error carrying a hint to fix it.

  • whoami

    Return the current agent's identity and session state. Includes service account name + id, workspace id, token status/expiry, and the currently-linked filespace (if any). Use it at the start of a multi-agent session so each agent knows which identity it is acting as.

  • write_at

    Overwrite bytes at a byte ``offset`` in an existing file, preserving the rest. Unlike ``write_file`` (which replaces the whole file), this patches in place: it writes the given bytes starting at ``offset`` and leaves every other byte untouched. It never truncates and never creates the file. Use it for fixed-layout edits — a header, a fixed-width record, a reserved placeholder. To coordinate the same range with other writers, take a ``lock_byte_range`` first, or pass ``exclusive=true`` for a one-call whole-file-locked patch. ``content`` is plain UTF-8 text by default; pass ``encoding='base64'…

  • write_file

    Write file content to the linked filespace. ``content`` is plain UTF-8 text by default; pass ``encoding='base64'`` with base64-encoded content to write binary bytes. Missing parent directories are created automatically; pass ``create_parents=false`` to error on a missing parent instead. ``exclusive=true`` holds a whole-file exclusive lock for the write (released on close) to coordinate with other clients writing the same file. ``sync=true`` (default) flushes to the hub immediately, so the write is durable and visible to other clients. ``sync=false`` skips that flush for fast bulk writes; y…

Signals

Weekly downloads
299
Last release
Oct 20, 2026 (8 days ago)
Last package publish
Oct 20, 2026 (8 days ago)

From the package registry.

Details

Registry name
com.lucidlink/mcp
Version
1.0.0
Auth
API key
Packages
pypi lucidlink-mcp
License
LicenseRef-Proprietary
First seen
Oct 24, 2026
Last checked
Oct 24, 2026
Cite this page

LucidLink MCP server. Agent Mart. https://agentmart.dev/connectors/lucidlink-com-mcp (last updated 2026-10-24)