suchi mcp runs a thin Model Context Protocol adapter over the existing HTTP
API. Tool calls use an ordinary Suchi token, object permissions, and audit
path; the MCP process does not bypass application authorization.
The token binds one filing system as its default and ceiling. Ordinary unqualified
MCP calls therefore stay there, including search, tasks and shares; membership
and document ACLs still apply. A different system needs a new bound token.
Removing membership revokes the credential and re-adding it does not revive it.
Configure a local client
suchi-mcp as a symlink to the same binary. Use a
dedicated user and the minimum token scopes the client needs, not an
administrator token.
--url and --token override SUCHI_URL and SUCHI_TOKEN.
The adapter never follows HTTP redirects, so it cannot forward its token to a
redirect target. API responses must be bounded, valid application/json;
redirects, unexpected content types, and malformed or oversized bodies fail
closed.
Failures expose the operation, HTTP status and safe error code when available;
request queries, response bodies and transport diagnostics are not copied into
tool errors. A transport failure means the configured server could not be
reached; verify its address and connectivity before retrying.
Transports
The listener has no separate client authentication: every caller can exercise
the Suchi token held by that adapter process. Bind to loopback by default. For
remote use, expose it only through a VPN, firewall rule, or TLS reverse proxy
that authenticates callers.
Tools
search_documents
Calls ranked GET /api/search/ with the same query language
as the web app. Matching, BM25, recency, snippets, errors, and ACLs are not
reimplemented by MCP; see Search architecture: MCP.
field:, has-field:, tag:, jd:,
sensitivity:, and the other operators documented in the shared query
language. Exact custom-field clauses use the definition’s name and typed value;
call list_custom_fields first when the schema is not known.
query: required stringpage_size: optional integer, default 10 and maximum 25
documents:read.
get_document
Returns one document through GET /api/documents/{id} in the token’s bound
filing system.
id: required document ID
list_inbox
Returns up to 50 durable jobs and actionable approval tasks visible to the
caller through GET /api/tasks/?limit=50. Approvals bound to trashed documents
disappear; they can reappear after restoration only while the task and its run
remain active. Requires documents:read for API-token callers.
resolve_approval_task
Resolves a task through POST /api/approvals/tasks/{id}/resolve.
Requires documents:write for API-token callers.
task_id: required task IDchoice: required declared choice
create_share_link
Creates a link for 1 to 200 live documents in the token’s bound system through
POST /api/share_links/. The creator must own each document or be an administrator,
in addition to system entry. Requires documents:write for API-token callers and
the share-links capability for non-admin users; mere view permission is insufficient.
doc_ids: required document ID arraylabel: optional labelvisibility: requirednetworkorpublicexpires_in_sec: optional for Network links; Public links require 1–31,536,000 secondspassword: optional recipient password
/s/<token> URL. Network links use
PUBLIC_URL; Public links use the configured SHARE_PUBLIC_URL and fail while
public ingress is unavailable.
list_custom_fields
Lists custom-field definitions in the token’s bound system through
GET /api/custom_fields/?page_size=500: ID, name, data_type, and type
options such as select choices. A documentlink field is a named relationship
to another document. Requires documents:read.
set_custom_field
Writes one value through PUT /api/documents/{id}/custom_fields/{field} and
replaces any existing value. Requires documents:write.
document_id: required source document IDfield: required exact field name or numeric ID in the bound systemvalue: required typed value; fordocumentlink, the target document ID
clear_custom_field.
Values belong to one exact version. A replacement version starts without them,
and a link keeps naming the version it was written to, so agents should link
the current version that search_documents returns. The tool returns
{"document_id":…,"field":…,"status":"set"}.
clear_custom_field
Removes one value, including a link, through
DELETE /api/documents/{id}/custom_fields/{field}. Takes document_id and
field; requires documents:write.
Current limits
MCP v0.1 does not expose arbitrary document mutation, raw document listing, MCP Resources, or bulk maintenance operations. Apart from resolving approvals, custom-field values and document links are the only document metadata it changes. It cannot read Documents linking to this version; outgoing links appear inget_document. Add server behavior to the REST API first; MCP tools
should remain curated adapters rather than a second business-logic surface.
See Connect an MCP client for client-specific examples
and API for the underlying endpoint contracts.