Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/org-quicko/silo/llms.txt

Use this file to discover all available pages before exploring further.

Silo speaks MCP (Model Context Protocol) at POST /api/mcp, using the same API key as the HTTP API. The key’s claims decide exactly what the AI client may do — a call the key is not allowed to make comes back as a refusal that names the missing claim, so the model can reason about what went wrong. There is nothing extra to install and nothing extra to start.

Transport options

Two transports are available. Use the URL transport when your client can send an HTTP header. Use silo mcp when your client can only spawn a local process.

Streamable HTTP

Send the key as Authorization: Bearer <key> to <your-silo>/api/mcp.
claude mcp add --transport http silo https://cms.example.com/api/mcp \
  --header "Authorization: Bearer $SILO_API_KEY"

stdio via silo mcp

silo mcp speaks MCP on stdin and stdout and forwards every message to a running Silo instance. It accepts --url and --key flags, or reads the same values from SILO_URL and SILO_API_KEY environment variables.
Prefer environment variables over flags. A key on the command line is visible to every process on the machine.
Claude Desktop (claude_desktop_config.json)
{
  "mcpServers": {
    "silo": {
      "command": "silo",
      "args": ["mcp", "--url", "http://localhost:8090"],
      "env": { "SILO_API_KEY": "silo_..." }
    }
  }
}
Claude Code can also use the stdio bridge directly:
claude mcp add silo --env SILO_API_KEY=silo_... -- silo mcp --url http://localhost:8090

Connect from Silo Admin

Settings > AI assistants prepares client-specific setup using the API key already saved for the current Silo connection. It does not create a new key or widen access — the assistant can do exactly what the current connection can do. Each client is named silo, so setting up a second connection replaces the first.

Claude Desktop

Download the extension (silo.mcpb), then open the file. It appears as Silo under Settings > Extensions, with the server URL and API key pre-filled from the current connection. No separate Node or Silo installation is needed. The downloaded file contains the saved API key as a default; keep it private.

Claude Code

Copy and run the displayed user-scope command. It removes an existing user-scope silo server first, so running it again from a different connection switches Claude Code over automatically.

Codex

Copy the setup prompt into a local Codex task and approve the configuration change when asked. The page also shows the TOML block for manual setup. A cloud task cannot change a local configuration.

Cursor

Click Add to Cursor to open Cursor directly, or merge the manual JSON shown on the page. The credential is not sent through a web proxy.

Available tools

Every key sees the same tool list. What differs is which calls succeed. The claim column names what the route requires — <p>/<e>/<c> stands for project, environment, and collection.
ToolWhat it doesClaim needed
whoamiKey label and claimsany key
list_projectsProjects the key can seeany collection claim in the project
create_projectCreate a projectcollections:<p>/*/*:create
list_environmentsEnvironments of a projectany collection claim in the environment
create_environmentCreate an environmentcollections:<p>/<e>/*:create
list_variablesDeclared variables with this environment’s valuescollections:<p>/<e>/*:entries:read
list_collectionsCollections with entry countscollections:<p>/<e>/<c>:schema:read per collection
get_schemaOne collection’s JSON Schema, references bundledcollections:<p>/<e>/<c>:schema:read
create_collectionCreate a collection from a schemacollections:<p>/<e>/<c>:create
update_schemaReplace a schema (frozen while entries exist)collections:<p>/<e>/<c>:schema:update
delete_collectionDelete a collection; force erases its entriescollections:<p>/<e>/<c>:delete, plus entries:delete with force
list_entriesFiltered, sorted page of entriescollections:<p>/<e>/<c>:entries:read
get_entryOne entry with its revcollections:<p>/<e>/<c>:entries:read
create_entryCreate an entry, validated against the schemacollections:<p>/<e>/<c>:entries:create
update_entryReplace an entry’s fields, with the rev you readcollections:<p>/<e>/<c>:entries:update
delete_entryDelete an entry, with the rev you readcollections:<p>/<e>/<c>:entries:delete
searchText search across one collection, environment, or everythingentries:read where it looks
list_mediaMedia catalog, filtered and pagedpublic read (the MCP endpoint still needs a key)
get_mediaOne asset’s catalog recordpublic read (the MCP endpoint still needs a key)
Media uploads have no MCP tool — a tool call carries JSON and a file is bytes. Upload media directly with POST /api/media.
list_entries and search accept the same filter, sort, limit, and offset parameters as the HTTP routes. The filter is the JSON AST described in the HTTP API guide, passed as an object.
Mint a read-only key with --preset read to give a model a CMS it can browse freely but not modify.

Protocol details

Silo implements initialize, ping, tools/list, and tools/call, and accepts notifications/* messages. It has no resources, no prompts, and never sends requests of its own. The endpoint is stateless. There is no Mcp-Session-Id, so nothing expires and any number of clients may share one key. GET /api/mcp and DELETE /api/mcp return 405 — there is no event stream to open and no session to close. A JSON array (batch request) is accepted and answered as an array. A notification (a message without an id) returns 202 with no body. A request without a key returns 401 with a WWW-Authenticate: Bearer challenge, even on an instance with public collections — the endpoint requires a key regardless of collection visibility. The endpoint sits under /api/*, so CORS, the JSON body size limit, and the auth middleware all apply exactly as they do on every other API route.

Build docs developers (and LLMs) love