The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Calypso Multimodal RAG MCP listing page.
Hosted multimodal RAG for Claude Desktop, Cursor, and agent workflows — in one npx command.
Ask questions across PDFs, screenshots, charts, and diagrams, and upload new source material, without running a vector store, a Docker stack, or an OCR pipeline. Answers come back with citations you can check.
This server is a Calypso Context surface — the same knowledge layer that backs Calypso on WhatsApp, exposed to MCP clients. How the pieces fit →
npx -y @calypsohq/multimodal-rag-mcp-server --api-key sk-your-key-here/new resetGitHub | Docs | Smithery | Official MCP Registry
Tags: multimodal-rag, gemini-rag, hosted-rag-mcp, mcp-server
Instead of wiring each agent or workflow to a one-off document search stack, use this MCP as the agent-facing entry point to one reusable answer layer: upload source material once, retrieve across text and visual content, and return answers with evidence users can verify.
Or with environment variables:
Then add the same command to Claude Desktop, Cursor, or Smithery using the configuration examples below.
No local vector store, no Docker Compose, and no separate OCR or vision pipeline before an agent can ask a grounded question. Point the server at a Calypso API key and it discovers your team's agents and knowledge buckets on connect.
npx command; nothing to host or operate.Most company knowledge is not only text. The answer often lives across a setup screenshot, a PDF table, a product diagram, a help-center page, or a chart inside a report. Calypso packages that full knowledge surface into a single retrieval layer so agents can ask grounded questions without guessing from generic model memory.
In practice, this means your agent can answer questions like:
With calypso-agent you can:
model argument/v1/responses conversation model/newcalypso-agentfetch, Headers, Request, Response, FormData, Blob, and File) for API calls and SDK compatibility. The package bootstraps missing globals at startup for MCP runtimes that expose only part of the Node 18+ Web API surface.POST /v1/responsesGET /v1/rag-agent/modelsGET /v1/knowledge/bucketsPOST /v1/knowledge/files/upload-sessionPOST /v1/knowledge/files/upload-session/{session_id}/finalizePOST /v1/knowledge/files:batch/upload-sessionPOST /v1/knowledge/files:batch/upload-session/{batch_id}/finalizeGET /v1/knowledge/batches/{batch_id}sk-...)Environment variables:
CALYPSO_API_KEY (required)CALYPSO_API_BASE_URL (optional, default https://api.calypso.so/v1)CLI flags:
--api-key--api-base-urlConfiguration precedence:
https://api.calypso.so/v1)Add a new MCP server (command type) like:
In Claude Desktop:
Claude -> Settings -> Developer -> Edit Config
On macOS, the file is usually:
Claude Desktop uses claude_desktop_config.json for desktop MCP servers. Claude Code uses separate config locations such as ~/.claude.json or project-level .mcp.json.
Paste this into claude_desktop_config.json:
Replace:
sk-your-calypso-api-keywith your real Calypso API key.
Fully quit Claude Desktop, then reopen it.
Do not only close the window. On macOS:
After restart, the MCP should appear in Claude with these tools available:
calypso-agentcalypso-list-bucketscalypso-upload-filecalypso-upload-files-batchCalypso provides hosted multimodal RAG tools. It does not write generated reports, summaries, CSVs, JSON files, or web-search artifacts directly to your local computer.
To let Claude Desktop save generated files locally, add the standard filesystem MCP server alongside Calypso and restrict it to a dedicated safe folder.
Create the folder first:
Then add both servers to claude_desktop_config.json:
Fully quit and reopen Claude Desktop after changing the config.
Example prompt:
For safety, only grant filesystem access to a dedicated folder such as ~/Claude, not your whole home directory.
| Concern | Best Owner |
|---|---|
| Source-backed RAG answers | Calypso MCP |
| Uploading files into Calypso | Calypso MCP |
Writing .md, .pdf, .json, .csv, etc. to your Mac | filesystem MCP |
| Web search artifacts from Claude | Claude plus filesystem MCP prompt |
The server is available on Smithery and launches through the same npx package path used by desktop clients.
Smithery user config:
calypsoApiKey (required)calypsoApiBaseUrl (optional, defaults to https://api.calypso.so/v1)The Smithery launch path is equivalent to:
Use calypsoApiBaseUrl only when targeting a self-hosted Calypso-compatible deployment. The cloud default does not need an override.
--api-key or CALYPSO_API_KEY--api-base-url / CALYPSO_API_BASE_URL ends in /v1https://api.calypso.so/v1npx -y @calypsohq/multimodal-rag-mcp-server path instead of running node dist/index.js from a fresh cloneFormData is not defined or Headers is not defined: upgrade to the latest package. The MCP server bootstraps missing Web Fetch API globals before upload tools run./mnt/user-data/uploads/...: that path belongs to a hosted agent or attachment sandbox, not necessarily to the MCP server. Retry with contentBase64 instead of filePath.filePath vs contentBase64Use filePath for local MCP installs, including Claude Desktop and Cursor configs that launch this package with a local command such as:
In that setup, the MCP server process runs on your machine and can read paths available to the same user account. Pass the local path directly; the server reads raw bytes and uploads them through the Calypso upload-session URL. You do not need to base64-encode local files.
Use contentBase64 for hosted or remote MCP clients, including Smithery-hosted servers, browser/cloud runtimes, generated in-memory content, and agent containers. In those environments, a path on your Mac or workstation is not readable by the MCP server process.
If a path starts with /mnt/user-data/uploads, /mnt/data, /mnt/attachments, or another hosted sandbox prefix, do not send it as filePath unless this MCP server is running in that same sandbox. Use contentBase64 or another inline byte source instead.
calypso-agentDirect Calypso agent access.
Notes:
calypso-agent variants at startup.model argument to choose a named variant such as calypso-agent:pricing.POST /v1/responses instead of POST /v1/chat/completions.previous_response_id.fileIds are supported for retrieval-scoped questions. New uploads should use the durable knowledge upload tools and wait for indexing before asking./new as the prompt to reset the MCP conversation.calypso-searchSearches your knowledge directly and returns matching passages, without asking an agent to compose an answer.
Use it when you want evidence rather than prose — checking whether something is indexed at all, gathering sources before a decision, or letting a calling agent do its own reasoning over the passages.
Notes:
POST /v1/search.query is required.agent scopes the search to one agent variant's knowledge; buckets narrows it to specific buckets.maxResults is clamped to 1–20.Example:
calypso-list-bucketsLists buckets for the team tied to the configured Calypso API key.
Notes:
GET /v1/knowledge/buckets.team_id; Calypso derives team scope from the API key.includeArchived: true when you need archived buckets for audits or cleanup.calypso-upload-file or calypso-upload-files-batch when you need to choose a destination bucket.calypso://rag-agent-models answers which buckets are bound to each RAG variant. calypso-list-buckets answers which buckets exist for the API key's team.Example:
calypso-get-fileFetches one knowledge file's metadata and indexing status by file id.
Notes:
GET /v1/knowledge/files/{file_id}.fileIds from calypso-list-buckets into filename, mime type, size, indexing status, and per-bucket sync state.verify: true to cross-check against the provider (?verify=gemini) — slower, but authoritative when a status looks stale.Example:
calypso-add-websiteIngests a website into a knowledge bucket, so page content becomes queryable alongside uploaded files.
Notes:
POST /v1/knowledge/websites.url is required, and so is a destination — one of bucketIds, bucketSlugs, or bucket.title, tagsHint, and preferredLanguage help classify the source.idempotencyKey to make a retry safe; it is sent as the Idempotency-Key header.Example:
calypso-create-bucketCreates an empty bucket for the create-then-fill workflow.
Notes:
POST /v1/knowledge/buckets (requires a backend with this endpoint deployed and the knowledge:bucket:create capability on the API key).bucket_slug_exists error.idempotencyKey replays return the existing bucket instead of erroring.bucketSlugs + createMissingBuckets; this tool exists for creating the destination first.Example:
calypso-create-agentCreates a Calypso agent variant bound to one or more buckets.
Notes:
POST /v1/rag-agent/agents (requires a backend with this endpoint deployed and the rag:agent:create capability on the API key).model — pass it straight to calypso-agent.bucket_not_found; agent id collisions return agent_id_exists; the plan's agent cap returns agent_limit_reached.tools/list_changed + resources/list_changed notifications, so the new variant is usable without reconnecting.Example:
calypso-upload-fileUploads a file into the durable bucket-backed knowledge store and indexing pipeline.
Notes:
POST /v1/knowledge/files/upload-session, uploads bytes directly to storage, then finalizes with POST /v1/knowledge/files/upload-session/{session_id}/finalize.PUTs, not multipart form uploads.file_id.bucketIds, bucketSlugs, or bucket.filePath for local Claude Desktop/Cursor MCP installs where the server can read the path. Use contentBase64 for hosted or remote MCP clients that cannot read local paths./mnt/user-data/uploads/file.pdf, it should not send that as filePath; it should send the file bytes as contentBase64.title, tags, metadata, and idempotencyKey.bucketIds or bucketSlugs, or use bucket as a single-slug shortcut.createMissingBuckets: true with bucket slugs when you want Calypso to create missing destinations during upload.Example:
calypso-upload-files-batchUploads 1 to 100 files into the durable knowledge store in one request.
Notes:
POST /v1/knowledge/files:batch/upload-session, uploads each accepted item directly to storage, then finalizes with POST /v1/knowledge/files:batch/upload-session/{batch_id}/finalize.PUTs, not multipart form uploads.batchIdempotencyKey; Calypso uses it to derive the durable batch id for retries.bucketIds, bucketSlugs, or bucket, unless every item provides its own bucket destination.bucketIds, bucketSlugs, bucket, and createMissingBuckets defaults, plus per-item overrides.filePath for local Claude Desktop/Cursor MCP installs where the server can read each path. Use per-item contentBase64 for hosted or remote MCP clients that cannot read local paths.client_file_id values when clientFileId is omitted.accepted or queued means the upload is durable, not necessarily query-ready. Use waitForBatchReady: true to poll GET /v1/knowledge/batches/{batch_id}?include_items=true.bucketSyncStatus, and bucketSync to distinguish indexed content from bucket-ready retrieval.Example:
calypso://server-infoRead-only server metadata, including package version, API base URL, transport, authentication model, and exposed capabilities.
calypso://rag-agent-modelsRead-only runtime catalog of team-scoped calypso-agent model variants discovered from the configured API key, including each variant's active buckets, bucket_ids, and missing_bucket_ids. If discovery is unavailable, this resource falls back to the base calypso-agent.
calypso://bucketsRead-only runtime list of knowledge buckets for the team tied to the configured API key. Use it to inspect bucket ids/slugs and bucket-store readiness before uploads.
calypso://workflowsA compact guide to the supported RAG and file-upload workflows.
calypso://securityOperational security notes for API keys, local file reads, uploads, and logging.
calypso-question: draft a grounded knowledge-base question for calypso-agentcalypso-ingestion: prepare a durable knowledge-store upload and follow-up querycalypso-reset-conversation: start a clean RAG thread with /newSummarize the knowledge base guidance for campaign approvalsWhat does our documentation say about indexing retries?Compare file indexing with retrieval execution in the current architecture/newFocus only on the ingestion path and ignore retrievalExplain which documented components are involved and whycalypso-list-buckets or read calypso://buckets before choosing a destinationcalypso-upload-file with the file payload and optional title, tags, or metadatafilePath for local Claude Desktop/Cursor MCP installs; use contentBase64 for hosted or remote MCP clients that cannot read local pathsbucket: "support-handbook" for one destination, bucketSlugs for multiple slug-based destinations, or bucketIds when you already have stable bucket idscreateMissingBuckets: true when using slug-based bucket assignment and the destination may not exist yetwaitForIndexing: true if you want the tool to block until the knowledge file is indexedcalypso-upload-files-batch with items, batchIdempotencyKey, and filePath per item for local MCP installs; use contentBase64 per item for hosted or remote MCP clientsbucket, bucketSlugs, bucketIds, or createMissingBuckets on the tool call, then override per item only when neededwaitForBatchReady: true and inspect returned item status plus bucket sync fields before querying fresh content/new to reset the MCP conversation (new conversation_id + cleared response chain).| Version | Notes |
|---|---|
| 3.0.0 | Breaking. Removed legacy calypso-rag-agent model-id support — an unrecognized id is now an error rather than being rewritten to the canonical family. Documented calypso-search and calypso-add-website, and fixed calypso://server-info, which had been omitting calypso-add-website. |
| 2.4.0 | Renamed the ask tool calypso-rag-agent → calypso-agent. The model catalog now takes its default from discovery instead of a hardcoded constant. |
| 2.3.x | Search release and follow-up fixes. |
See CHANGELOG.md for detail.
Two renames landed across 2.4.0 and 3.0.0, and neither is aliased.
calypso-agent (was calypso-rag-agent). MCP clients pick this up on their next tools/list, but any saved prompt, agent instruction, or documentation that names the tool as a string needs updating.calypso-rag-agent and calypso-rag-agent:{id} are no longer rewritten to calypso-agent[:{id}]. Passing one now fails with Unknown Calypso agent model, which names calypso://rag-agent-models as the place to find valid ids. Read that resource, or omit model to use the discovered default.The calypso://rag-agent-models resource URI is deliberately unchanged. It is a published address, not a compatibility shim.