Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

LucidLink

PYPI · LUCIDLINK-MCP

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

Available components

+3 this week 44 Trust /100

Last scanned (2 hours ago)

Scores higher than 43% of PyPI servers

Category Documents and Files

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security26
  • Malware scan not yet available for this package.Unverified
  • CVE check failed: a known high-severity CVE affects mcp 2.0.0, a direct dependency. A fixed version is available. View diagnostics → Fail
  • Declares code that runs automatically (setup.py, a custom setup.py cmdclass) and that we could not recognise. It may be perfectly ordinary, but we have not established what it does. View diagnostics → Partial
  • 1 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency6
Schema Quality & AI Usability64
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 7491 tokens (~159/item across 47 items; 47 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management53
  • Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage79
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 28% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 48 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +16
    • Malware scan: unverified → pass ▲ security
  • 29 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 28 Oct 26 +1
    • CVE-2026-116685 affects this package: high ▼ security
    • CVE-2026-116686 affects this package: high ▼ security
    • CVE-2026-116684 affects this package: high ▼ security
  • 26 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 25 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/lucidlink-mcp@1.0.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi
Reason No attestation published

Background: How many MCP packages publish verified provenance →

Install scripts 3 scripts
Hook Tier Command
build_backend allowlisted setuptools.build_meta
setup_py unreviewed <setup.py, unreviewed>
cmdclass unreviewed <custom, unreviewed>

Background: Why install scripts are a supply-chain risk →

Vulnerabilities 4 findings
ID CVE Severity Vector Fix available
GHSA-5h93-6whr-6q8j CVE-2026-116685 medium CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N yes
GHSA-84m7-p3x7-pcfv CVE-2026-59951 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-rwrf-2pqf-9j8j CVE-2026-116686 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H yes
GHSA-w4fh-qvv9-3v23 CVE-2026-116684 medium CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 32 packages
Packages resolved 32
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 47 exposed · ~6,312 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
append_file ~116

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.

NameTypeReqDescription
contentstringyes–
encodingstring––
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

claim_file ~222

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 ``lock_byte_range`` with an explicit, conservative length.

NameTypeReqDescription
blockingboolean––
modestring–exclusive = no other locks; shared = concurrent readers ('read' is an alias for it); write = protected write lock
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

copy_file ~126

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.

NameTypeReqDescription
dststringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
overwriteboolean––
srcstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

count_files ~163

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.

NameTypeReqDescription
exclude_pattern–––
include_pattern–––
path_prefixstring–POSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

create_directory ~59

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

NameTypeReqDescription
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

current_filespace ~30

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

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

delete_path ~70

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

NameTypeReqDescription
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
recursiveboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

edit_lines ~262

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``. NOTE: the file is rewritten with LF line endings — CRLF (and unicode line separators) are normalized to ``\n`` across the whole file. Use ``search_replace`` to edit a CRLF file without changing its endings.

NameTypeReqDescription
dry_runboolean––
end_lineintegeryes–
expected_content–––
new_contentstringyes–
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
start_lineintegeryes–
NameTypeReqDescription
resultstringyes–

No examples provided.

filespace_stats ~49

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

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

find_files ~142

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.

NameTypeReqDescription
limitinteger––
name_patternstringyes–
path_prefixstring–POSIX-style filespace path, rooted at / (e.g. /data/file.txt)
type_filter–––
NameTypeReqDescription
resultstringyes–

No examples provided.

get_entry ~115

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.

NameTypeReqDescription
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

grep_files ~217

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_pattern`` for large filespaces.

NameTypeReqDescription
case_sensitiveboolean––
exclude_pattern–––
include_pattern–––
limitinteger––
max_file_size_bytesinteger––
path_prefixstring–POSIX-style filespace path, rooted at / (e.g. /data/file.txt)
patternstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

link_external_file ~102

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.

NameTypeReqDescription
data_store_namestringyes–
object_idstringyes–
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

link_external_url ~184

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.

NameTypeReqDescription
data_store_name–––
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
urlstringyesDirect http(s) URL; the daemon fetches it server-side (internal/loopback hosts refused unless the operator allows them)
NameTypeReqDescription
resultstringyes–

No examples provided.

link_filespace ~211

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``); ``unlink_filespace(name=...)`` frees a slot. A linked filespace allocates a 1 GiB disk cache that stays until the server exits. ``account`` pins the lookup to one configured account; a successful link always makes its account the current one.

NameTypeReqDescription
account–––
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

list_accounts ~71

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".

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

list_data_stores ~24

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

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

list_external_files ~62

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

NameTypeReqDescription
cursor–––
data_store_namestringyes–
limitinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

list_files ~62

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

NameTypeReqDescription
pathstring–POSIX-style filespace path, rooted at / (e.g. /data/file.txt)
pattern–––
NameTypeReqDescription
resultstringyes–

No examples provided.

list_filespaces ~79

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``).

NameTypeReqDescription
account–––
NameTypeReqDescription
resultstringyes–

No examples provided.

list_locks_held ~124

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

lock_byte_range ~305

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. Returns an opaque handle_id token. Pass it to ``unlock_byte_range`` to release (works even after switching filespace or account — the handle remembers where it lives). To modify the locked range, use ``write_at(path, offset, ...)`` for a positional patch (or ``write_file`` to replace the whole file).

NameTypeReqDescription
blockingboolean––
lengthintegeryes–
modestring–exclusive = no other locks; shared = concurrent readers ('read' is an alias for it); write = protected write lock
offsetintegeryes–
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

move_path ~71

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

NameTypeReqDescription
dststringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
srcstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

poll_changes ~100

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.

NameTypeReqDescription
limitinteger––
subscription_idstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

read_audit_trail ~511

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_prefix scopes to one entry: the exact path or anything under it as a directory (/reports does not match /reports-archive). time_range accepts '24h' / '7d' / '30m' or an ISO range 'from/to' with either side omittable ('2026-01-01/2026-02-01', '2026-07-01/'); range ends are midnight-UTC of the named day, so an inclusive "through June" range ends at 07-01. Epoch seconds/millis/ micros/nanos also work as range endpoints. Pass time_range=None for no time filter — '' is rejected, as is path_prefix=''. SCOPING FOR SPEED: logs are month-partitioned and pruned by time_range BEFORE any I/O — a tight range skips whole months of reading. For one existing file's history, call get_entry(path) first and start the range at creation: time_range='<ctime_iso>/'. Its mtime_iso is a safe UPPER bound only for content-write history (moves/renames do not bump mtime; reads never do) — for move/delete/read history leave the range open-ended. Deleted files have no get_entry: fall back to path_prefix (or action=FileDelete) over an explicit wider range. Renames change entry_path, so path_prefix misses pre-rename history regardless of time scoping.

NameTypeReqDescription
action–––
group_by–––
limitinteger––
modestring––
path_prefix––scope to this entry and everything under it (/reports does not match /reports-archive)
time_range–––
user–––
NameTypeReqDescription
resultstringyes–

No examples provided.

read_file ~201

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).

NameTypeReqDescription
encodingstring––
length–––
offsetinteger––
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

read_lines ~97

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.

NameTypeReqDescription
end_line–––
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
start_lineinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

register_account ~146

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.

NameTypeReqDescription
namestringyes–
token_pathstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

register_data_store ~143

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.

NameTypeReqDescription
kindstringyes–
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

release_file ~60

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.

NameTypeReqDescription
handle_idintegeryes–
NameTypeReqDescription
resultstringyes–

No examples provided.

search_replace ~152

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.

NameTypeReqDescription
case_sensitiveboolean––
dry_runboolean––
findstringyes–
max_replacements–––
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
regexboolean––
replacestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

subscribe_changes ~163

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.

NameTypeReqDescription
path_prefixstring–POSIX-style filespace path, rooted at / (e.g. /data/file.txt)
poll_interval–––
NameTypeReqDescription
resultstringyes–

No examples provided.

sync_filespace ~53

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

tree ~260

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 and skips their subtrees entirely, so they cost nothing against the walk budget. The default hides the audit trail — query that with ``read_audit_trail``, or map it via ``tree(path="/.lucid_audit")``, which works because exclusion never applies to ``path`` itself. Pass null to map everything.

NameTypeReqDescription
exclude_pattern–––
max_depthinteger––
max_entries_per_dirinteger––
pathstring–POSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

truncate_file ~125

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.

NameTypeReqDescription
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
sizeintegeryes–
NameTypeReqDescription
resultstringyes–

No examples provided.

unlink_external_file ~111

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.

NameTypeReqDescription
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

unlink_filespace ~141

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).

NameTypeReqDescription
account–––
name–––
NameTypeReqDescription
resultstringyes–

No examples provided.

unlock_byte_range ~72

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.

NameTypeReqDescription
handle_idintegeryes–
length–––
offset–––
NameTypeReqDescription
resultstringyes–

No examples provided.

unregister_account ~96

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.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

unregister_data_store ~83

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.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

unsubscribe_changes ~29

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

NameTypeReqDescription
subscription_idstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

update_external_url ~130

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.

NameTypeReqDescription
new_urlstringyesDirect http(s) URL; the daemon fetches it server-side (internal/loopback hosts refused unless the operator allows them)
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
NameTypeReqDescription
resultstringyes–

No examples provided.

use_account ~69

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.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

verify_token ~67

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

whoami ~65

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

write_at ~345

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'`` with base64-encoded content to write binary bytes. Mirrors POSIX ``pwrite``: an ``offset`` past the end of the file zero-fills the gap, so a large ``offset`` grows the file with zero bytes. When a write grows the file the result says ``GREW file old->new bytes`` — for a fixed-layout patch that usually means the ``offset`` was wrong. ``sync=true`` (default) flushes to the hub immediately; ``sync=false`` skips the flush for bulk writes — you MUST call ``sync_filespace`` afterward or the unsynced writes are LOST when the session ends.

NameTypeReqDescription
contentstringyes–
encodingstring––
exclusiveboolean––
offsetintegeryes–
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
syncboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

write_file ~227

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; you MUST call ``sync_filespace`` afterward or the unsynced writes are LOST when the session ends.

NameTypeReqDescription
contentstringyes–
create_parentsboolean––
encodingstring––
exclusiveboolean––
pathstringyesPOSIX-style filespace path, rooted at / (e.g. /data/file.txt)
syncboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

Install

How do I install the LucidLink MCP server?

LucidLink runs locally as a PyPI package, launched with uvx lucidlink-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · lucidlink-mcp

# add to Claude Code
claude mcp add com-lucidlink-mcp -- uvx lucidlink-mcp
Common questions

What is the LucidLink MCP server?

LucidLink is an MCP server listed in the public MCP registry as com.lucidlink/mcp. Read, write, search, lock and audit files in LucidLink filespaces, plus workspace admin tools. This page covers its PyPI package (lucidlink-mcp).

Is the LucidLink MCP server safe to use?

LucidLink scores 44 out of 100 on VerifyMCP. We recorded 4 known advisories against it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the LucidLink MCP server expose?

LucidLink exposes 47 tools: list_filespaces, link_filespace, current_filespace, unlink_filespace, list_accounts, and 42 more. Their descriptions and schemas cost roughly 6,312 tokens of context every time the server is loaded.

Is the LucidLink MCP server still maintained?

LucidLink is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the LucidLink MCP server under?

LucidLink declares the LicenseRef-Proprietary licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.