Connapse exposes 11 tools via the Model Context Protocol server at /mcp. All tools require authentication — see Using with Claude (MCP) for setup.
| Tool | Description | Access |
|---|---|---|
container_create |
Create a new container for organizing documents | Write |
container_list |
List all containers with document counts | Read |
container_delete |
Delete a container | Write |
container_stats |
Get container statistics | Read |
upload_file |
Upload a single file | Write |
bulk_upload |
Upload up to 100 files | Write |
list_files |
List files and folders at a path | Read |
get_document |
Retrieve full text of a document | Read |
delete_file |
Delete a file and its vectors | Write |
bulk_delete |
Delete up to 100 files | Write |
search_knowledge |
Semantic, keyword, or hybrid search | Read |
Create a new container for organizing documents. Use when setting up a new knowledge domain or project.
| Name | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Container name (lowercase alphanumeric and hyphens, 2-128 chars) |
description |
string | No | Optional description for the container |
Container '<name>' created.
ID: <uuid>
Error: Container name must be 2-128 chars, lowercase alphanumeric and hyphens.Error: Container '<name>' already exists.
"Create a container called 'project-docs' for storing our project documentation"
List all containers with document counts. Use to discover available knowledge bases before searching.
None.
Found 2 container(s):
- my-docs (15 files) — Project documentation
ID: <uuid>
- research (8 files) — Research papers
ID: <uuid>
Returns No containers found. when empty.
None.
"What knowledge bases are available?"
Delete a container. MinIO containers must be emptied first. Filesystem/S3/Azure files are not deleted — only the index is removed.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
Container '<name>' deleted.
Error: Container '<id>' not found.Error: Container '<id>' is not empty. Delete all files first.(MinIO only)
"Delete the 'old-project' container"
Get container statistics: document counts, chunk count, storage size, and embedding model info.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
Container: my-docs
Type: MinIO
Documents: 15
Chunks: 342
Storage: 2.4 MB
Embedding model: text-embedding-3-small (1536 dims, 342 vectors)
Last indexed: 2026-03-15 10:30:00Z
Created: 2026-03-10 08:00:00Z
When any documents are processing or failed:
Documents: 15 (12 ready, 2 processing, 1 failed)
Error: Container '<id>' not found.
"How many documents and chunks are in the 'research' container?"
Upload a file to be parsed, chunked, embedded, and made searchable. Provide either content (base64) or textContent (raw text), not both.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
content |
string | No | Base64-encoded file content. For binary files (PDF, DOCX, images). Mutually exclusive with textContent. |
textContent |
string | No | Raw text content for text-based files (Markdown, TXT, CSV, JSON, etc.). Mutually exclusive with content. |
fileName |
string | Yes | Original file name with extension |
path |
string | No | Destination folder path (e.g., /docs/2026/). Default: / |
strategy |
string | No | Chunking strategy: Semantic, FixedSize, or Recursive. Default: Semantic |
File 'readme.md' uploaded to /docs/readme.md and queued for ingestion.
Document ID: <uuid>
Job ID: <uuid>
The file will be parsed, chunked, and embedded in the background.
Error: 'fileName' is required.Error: invalid filename '<name>' — must not contain path separators or '..' segments.Error: file type '<ext>' is not supported. Supported types: ...Error: Provide either 'content' or 'textContent', not both.Error: Provide either 'content' (base64) or 'textContent' (raw text).Error: Container '<id>' not found.Error: 'content' must be valid base64-encoded data.- Write guard errors for read-only containers (S3, AzureBlob)
"Upload this markdown content as 'meeting-notes.md' to the 'project-docs' container"
Upload up to 100 files in one call. Each file is parsed, chunked, and embedded. Returns per-file results.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
files |
string | Yes | JSON array of file objects. Each: {"filename":"name.txt", "content":"...", "encoding":"text|base64", "folderPath":"/optional/"}. Max 100. |
Uploaded 3 of 3 file(s) to container 'my-docs'.
All files queued for ingestion (parsing, chunking, embedding).
With failures:
Uploaded 2 of 3 file(s) to container 'my-docs'.
Failures:
- item[2]: missing 'filename'
Error: 'files' must be a valid JSON array of file objects.Error: 'files' array must not be empty.Error: Maximum 100 files per bulk_upload call.Error: Container '<id>' not found.- Per-file:
missing 'filename',missing 'content',invalid base64 content
"Upload these three research papers to the 'research' container"
List files and folders at a path within a container. Use to browse container contents before retrieving documents.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
path |
string | No | Folder path to list. Default: root / |
Contents of /:
[DIR] docs/
[DIR] images/
[FILE] readme.md (1,234 bytes) ID: <uuid>
[FILE] notes.txt (567 bytes) ID: <uuid>
Empty folders show (empty).
Error: Container '<id>' not found.Error: Folder '<path>' not found in this container.
"What files are in the 'project-docs' container under /docs/?"
Retrieve a document's full text by ID or path. Returns extracted text for binary formats (PDF, DOCX, PPTX).
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
fileId |
string | Yes | Document ID (UUID) or virtual path (e.g., /docs/readme.md) |
Document: readme.md
Path: /docs/readme.md
ID: <uuid>
Size: 1,234 bytes
Created: 2026-03-15 10:30:00Z
---
<full document text content>
Error: Container '<id>' not found.Error: Container '<id>' could not be loaded.(rare — container deleted between checks)Error: Document '<id>' not found in this container.Error: Document '<name>' is still being ingested (status: Processing). Try again later.Error: Document '<name>' failed ingestion: <message>Error: No parser available for '<ext>' files.Error: The backing file for '<name>' could not be read from storage.Document '<name>' exists but contains no readable text content.
"Show me the contents of /docs/architecture.md in the 'project-docs' container"
Delete a file and all its chunks and vectors. To update a file, delete it first then re-upload with upload_file.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
fileId |
string | Yes | File (document) ID to delete |
File 'readme.md' (ID: <uuid>) deleted.
If backing storage cleanup fails:
File 'readme.md' (ID: <uuid>) deleted from database, but the backing storage file could not be removed and may need manual cleanup.
Error: Container '<id>' not found.Error: File '<id>' not found in this container.- Write guard errors for read-only containers (S3, AzureBlob)
"Delete the file with ID abc-123 from the 'project-docs' container"
Delete up to 100 files in one call. Returns per-file success/failure results.
| Name | Type | Required | Description |
|---|---|---|---|
containerId |
string | Yes | Container ID (UUID) or name |
fileIds |
string | Yes | JSON array of file (document) IDs to delete, e.g. ["id1","id2"]. Max 100. |
Deleted 3 of 3 file(s).
With warnings (backing storage cleanup failed):
Deleted 3 of 3 file(s).
Warnings (1):
- <id>: storage cleanup failed
With failures:
Deleted 2 of 3 file(s).
Failures:
- <id>: File '<id>' not found in this container.
Error: 'fileIds' must be a valid JSON array of strings.Error: 'fileIds' array must not be empty.Error: Maximum 100 files per bulk_delete call.Error: Container '<id>' not found.
"Delete these three files from the 'old-data' container: id1, id2, id3"
Search a container using semantic, keyword, or hybrid mode. Returns ranked document chunks with scores. Use when answering questions from stored knowledge.
| Name | Type | Required | Description |
|---|---|---|---|
query |
string | Yes | The search query text |
containerId |
string | Yes | Container ID (UUID) or name to search within |
mode |
string | No | Search mode: Semantic (vector), Keyword (full-text), or Hybrid (both). Default: Hybrid |
topK |
integer | No | Number of results to return. Default: 10 |
path |
string | No | Filter results to a folder subtree (e.g., /docs/) |
minScore |
number | No | Minimum similarity score threshold (0.0-1.0). Defaults to server setting. |
Found 3 result(s) in 45ms (mode: Hybrid):
--- Result 1 ---
When results are truncated by topK:
Showing 10 of 25 matching chunk(s) in 62ms (mode: Hybrid):
--- Result 1 ---
Score: 0.847
File: architecture.md
Path: /docs/architecture.md
Chunk: 2
DocumentId: <uuid>
Content:
<chunk text>
--- Result 2 ---
Score: 0.723
File: readme.md
Path: /readme.md
Chunk: 0
DocumentId: <uuid>
Content:
<chunk text>
Returns No results found. when no matches.
Error: Container '<id>' not found.Query must not exceed <N> characters.(thrown as exception)topK must be between <min> and <max>.(thrown as exception)minScore must be between 0.0 and 1.0.(thrown as exception)
"Search the 'research' container for information about vector indexing strategies"
Write operations (upload_file, bulk_upload, delete_file, bulk_delete) are subject to per-connector permissions:
| Connector | Upload | Delete | Notes |
|---|---|---|---|
| MinIO | Yes | Yes | Full read/write access |
| InMemory | Yes | Yes | Full read/write access |
| Filesystem | Configurable | Configurable | Per-container allowUpload / allowDelete flags (default: allowed) |
| S3 | No | No | Read-only — synced from source |
| AzureBlob | No | No | Read-only — synced from source |
Write tools return a descriptive error when the container's connector blocks the operation.
For MCP client setup (Claude Desktop, Claude Code, Cursor, etc.), see Using with Claude (MCP) in the main README.