Reference Markdown

MCP tools

Every tool on SkimmerDB's MCP server, its arguments, what it answers and which connections see it.

The tools on https://api.skimmerdb.com/mcp. Each runs the same code as its REST call, with the same limits, metering and errors. See Connect an agent to set it up.

Results are typed. Every tool declares an outputSchema (JSON Schema) in tools/list, and a call answers structuredContent matching it: the same fields as the REST call's answer (the API reference describes them). The same JSON also comes as one text content item, for clients that read only text. A failed call answers isError: true with the error's JSON ({"error", "code"}).

Each tool's output schema is its REST call's answer, from the same OpenAPI component, so the typed result can't drift from the API:

ToolOutput schema
list_namespacesNamespaceList
create_namespace, update_namespaceNamespace
delete_namespace{"deleted": true}
write_documents, delete_documentsWriteResult
searchSearchResult
countCountResult
get_documentStoredDocument
warm_namespaceWarmResult
sql_querySqlResult
tools/call answer
{"jsonrpc": "2.0", "id": 2, "result": {
  "content": [{"type": "text", "text": "{\"namespace\":\"support\",\"hits\":[...],\"next\":\"\",...}"}],
  "structuredContent": {"namespace": "support", "hits": [...], "next": "", "docs": 2, "took_ms": 0.41, "partial": false},
  "isError": false}}
ToolTitleKindSeen byREST equivalent
list_namespacesList namespacesreadevery connectionGET /v1/namespaces
create_namespaceCreate a namespacewriteread-and-writePOST /v1/namespaces
update_namespaceChange a namespace's embedding modelwriteread-and-writePATCH /v1/namespaces/{name}
delete_namespaceDelete a namespacedestructiveread-and-writeDELETE /v1/namespaces/{name}
write_documentsWrite documentswriteread-and-writePOST /v1/namespaces/{name}/docs
delete_documentsDelete documentsdestructiveread-and-writePOST /v1/namespaces/{name}/delete
searchSearch documentsreadevery connectionPOST /v1/namespaces/{name}/search
countCount documentsreadevery connectionPOST /v1/namespaces/{name}/count
get_documentRead a documentreadevery connectionGET /v1/namespaces/{name}/docs/{id}
sql_queryQuery with SQLreadevery connectionPOST /v1/namespaces/{name}/sql
warm_namespaceWarm a namespacereadevery connectionPOST /v1/namespaces/{name}/warm

Read tools carry readOnlyHint: true; delete_namespace and delete_documents carry destructiveHint: true. A read-only connection (or a read key) is offered only the read tools. Namespace limits on the connection apply to every tool.

list_namespaces

Lists your namespaces by name, with what each stores.

ArgumentType
afterstringlist names after this one (the previous page's next)
limitintegerhow many (default 100)

create_namespace

Creates an empty namespace. With dims, it stores your own embeddings too; with embed_provider, documents' text is embedded for you (see Embeddings) and search takes semantic. Writing documents to a new name also creates it, so this is only needed to choose vector settings up front.

ArgumentType
namestring, required1 to 64 of a-z, 0-9, -, _ and .
dimsintegerembeddings' length (e.g. 768); leave out for text only
metricstringcosine (default) or euclidean
embed_providerstringopenai, voyage, gemini or cohere (the tenant's own key, stored in the dashboard), or skimmerdb (hosted, at cost)
embed_modelstringthe provider's model (defaults per provider: see Embeddings)

update_namespace

Sets, changes or stops a namespace's embedding model. The model must make vectors of the namespace's length. Leave embed_provider out (or empty) to stop embedding. Provider keys are not an MCP tool on purpose: they're pasted in the dashboard.

ArgumentType
namestring, requiredthe namespace
embed_providerstringas for create_namespace; empty: stop embedding
embed_modelstringthe provider's model

delete_namespace

Deletes a namespace and every document in it, for good. Answers {"deleted": true}.

ArgumentType
namestring, requiredthe namespace

write_documents

Stores (upserts) documents: an id written again replaces its earlier version. May also delete ids in the same call. Durable when it answers; searchable within about a second, or before it answers with wait.

ArgumentType
namespacestring, requiredthe namespace (made if it doesn't exist)
docsarray of {id, text, meta, vector}id required; meta an object of strings, numbers and booleans; vector as many numbers as the namespace's dims
deletesarray of stringsids to delete
waitbooleananswer only once the documents are searchable

delete_documents

Deletes documents by id, for good. Ids that don't exist are ignored.

ArgumentType
namespacestring, requiredthe namespace
idsarray of strings, requiredthe ids
waitbooleananswer only once the deletes are visible

Finds documents containing some text or matching a regex, optionally only those whose meta matches a filter. Newest first; each hit has the id, the matched text, the line around it, meta and when it was written. With vector (or semantic, a text, in a namespace with an embedding model): the nearest documents by meaning (among those matching query and filter, if given), with a score.

ArgumentType
namespacestring, requiredthe namespace
querystringplain text, matched literally and ignoring case; empty lists documents
regexbooleanread query as an RE2 regex (case-sensitive unless it starts with (?i))
filterobject{"type": "invoice"}, {"type": ["a", "b"]}, {"amount": {"gte": 10, "lt": 100}}, {"tag": {"ne": "x"}}: see Filters
limitintegerhow many results (default 20, at most 1,000)
cursorstringthe previous answer's next, for the next page
vectorarray of numbersthe query's embedding: nearest first
semanticstringa text embedded with the namespace's model, then searched like vector

count

Counts every document that contains some text or matches a regex (and the filter), exactly, with a sample of ids; or estimates fast with exact: false.

ArgumentType
namespacestring, requiredthe namespace
querystringas for search
regexbooleanas for search
filterobjectas for search
exactbooleanfalse: a fast estimate for big namespaces (no filter); default true

get_document

Reads one document whole: its text, meta, vector (if any) and when it was written.

ArgumentType
namespacestring, requiredthe namespace
idstring, requiredthe document's id

sql_query

Counts, groups, aggregates and filters a namespace's documents with SQL over their metadata, combined with exact text or regex matches. Answers columns, types and rows (at most 10,000). Run SHOW COLUMNS first to see the columns. See the SQL reference.

ArgumentType
namespacestring, requiredthe namespace
sqlstring, requiredone SELECT ... FROM docs, or SHOW COLUMNS

warm_namespace

Opens a namespace the agent is about to search, and fetches what the given searches will need, so they answer at warm speed. Says how warm it was (warm, local or cold).

ArgumentType
namespacestring, requiredthe namespace
queriesarray of stringssearches about to run (up to 20)
regexbooleanthe queries are regexes