Install
openclaw skills install encrypted-docsEnd-to-end encrypted .md documents for agents & humans to collaborate. This is a multiplayer alternative to gog and Google Docs that lets people (via CLI) an...
openclaw skills install encrypted-docsEnd-to-end encrypted .md documents for agents & humans to collaborate. This is a multiplayer alternative to gog and Google Docs that lets people (via CLI) and agents create, search and sync encrypted markdown docs. This service leverages https://ddocs.new which can be enabled locally or via your preferred cloud set-up to make docs accessible across any device or chatbot interface in complete privacy.
Note: A document created via this service is commonly called ddoc or fileverse doc. Each document has a unique randomly generated ddocId.
There are different ways to connect to the Fileverse API. First, you need to get the <SERVER_URL> from the user.
The fastest way to start is by adding the Fileverse MCP server to your client.
claude mcp add --transport http fileverse-api <SERVER_URL>
Add this to your ~/.cursor/config/mcp.json:
{
"mcpServers": {
"fileverse-api": {
"type": "streamable-http",
"url": "<SERVER_URL>"
}
}
}
Add this to your MCP config:
{
"mcpServers": {
"fileverse-api": {
"type": "streamable-http",
"url": "<SERVER_URL>"
}
}
}
Note: if for some reason MCP is not supported you can fallback to API and check the documentation on the guide.md for exact API Docs.
ChatGPT supports MCP connectors via Developer Mode (available for Pro, Plus, Team, Enterprise, and Edu users).
Setup steps:
Open ChatGPT > Settings > Apps > Advanced > toggle Developer Mode on
Go to Settings > Apps > click Create
Fill in:
https://<your-server-url>/ (e.g. https://abc123.ngrok.app/mcp)Check "I trust this provider"
Click Create
Using in a chat:
Open Claude > Settings > Connector > Add Custom Connector
Fill in:
https://<your-server-url>/ (e.g. https://abc123.ngrok.app/)Click Add
The Fileverse MCP server exposes 8 tools. All tools return JSON responses.
List documents stored in Fileverse. Returns an array of documents with their metadata and sync status.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| limit | number | No | Maximum number of documents to return (default: 10) |
| skip | number | No | Number of documents to skip (for pagination) |
Returns:
{
"ddocs": [{ "ddocId": "...", "title": "...", "content": "...", "syncStatus": "synced", "link": "..." }],
"total": 42,
"hasNext": true
}
Usage notes:
skip and limit to paginate through large document setshasNext to determine if more documents are availablesyncStatus and linkGet a single document by its ddocId. Returns the full document including content, sync status, and content hash.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| ddocId | string | Yes | The unique document identifier |
Returns:
{
"ddocId": "abc123",
"title": "My Document",
"content": "# Hello World\n\nThis is my document.",
"syncStatus": "synced",
"link": "https://ddocs.new/d/abc123#encryptionKey",
"localVersion": 3,
"onchainVersion": 3,
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-02T00:00:00.000Z"
}
Usage notes:
link field is only available when syncStatus is "synced"# for end-to-end encryptionCreate a new document and wait for syncing. Returns the document with its sync status and public link once synced.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Document title |
| content | string | Yes | Document content (plain text or markdown) |
Returns:
{
"ddocId": "newDoc123",
"title": "My New Document",
"content": "...",
"syncStatus": "synced",
"link": "https://ddocs.new/d/newDoc123#encryptionKey"
}
Usage notes:
link is a shareable, encrypted URL to view the document on ddocs.newsyncStatus: "pending" - use fileverse_get_sync_status to poll laterUpdate an existing document's title and/or content, then wait for the syncing with decentralized storage networks.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| ddocId | string | Yes | The unique document identifier |
| title | string | No | New document title |
| content | string | No | New document content |
At least one of title or content must be provided.
Returns: Updated document object with sync status and link.
Usage notes:
localVersionDelete a document by its ddocId.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| ddocId | string | Yes | The unique document identifier to delete |
Returns:
{
"message": "Document deleted successfully",
"data": { "ddocId": "abc123", "..." }
}
Usage notes:
Search documents by text query. Returns matching documents ranked by relevance.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| query | string | Yes | Search query string |
| limit | number | No | Maximum number of results (default: 10) |
| skip | number | No | Number of results to skip |
Returns:
{
"nodes": [{ "ddocId": "...", "title": "...", "content": "...", "syncStatus": "..." }],
"total": 5,
"hasNext": false
}
Usage notes:
skip and limit for paginationCheck the sync status of a document. Returns the current syncStatus and link if synced.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
| ddocId | string | Yes | The unique document identifier |
Returns:
{
"ddocId": "abc123",
"syncStatus": "synced",
"link": "https://ddocs.new/d/abc123#encryptionKey",
"localVersion": 3,
"onchainVersion": 3
}
Usage notes:
syncStatus can be: "pending", "synced", or "failed"localVersion vs onchainVersion shows if there are unsynced changesRetry all failed decentralized storage networks sync events. Use this when documents are stuck in "failed" sync status.
Parameters: None
Returns:
{
"retried": 3
}
Usage notes:
syncStatus: "failed"Understanding the sync lifecycle helps agents work effectively:
Create/Update → syncStatus: "pending" → decentralized storage networks sync → syncStatus: "synced"
→ syncStatus: "failed" (retry with fileverse_retry_failed_events)
linkfileverse_retry_failed_events to retryThe create and update tools automatically poll for up to 60 seconds. If sync hasn't completed by then, use fileverse_get_sync_status to check later.
| Constraint | Value |
|---|---|
| Max file upload size | 10 MB |
| Default page size | 10 documents |
| Sync polling timeout | 60 seconds |
| Sync poll interval | 3 seconds |
| Max event retries | 10 attempts |
| Worker concurrency | 5 concurrent events |
Creating documents from local files:
Generating new content:
Managing existing documents:
Sharing:
link field to the user so they can view/share itsyncStatus is "failed", call fileverse_retry_failed_events and inform the userskip and limit when listing documents to avoid loading everything at oncesyncStatus: "pending", poll with fileverse_get_sync_status until it's "synced" before giving the user the link/ddoc create, /ddoc list)