Skip to main content
Glama
infino-ai

Infino MCP server

Official

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
INFINO_MCP_URINoData to serve: a local path or a bucket URI. Defaults to ~/.infino/mcp (persistent).~/.infino/mcp
INFINO_MCP_VALIDATENoWhen set (e.g., '1', 'true', 'yes'), validates storage credentials at startup.off
INFINO_MCP_EMBED_MODELNoEmbedding model name. Default is 'Xenova/all-MiniLM-L6-v2' for local, 'text-embedding-3-small' for openai.Xenova/all-MiniLM-L6-v2 (local) / text-embedding-3-small (openai)
INFINO_MCP_EMBED_API_KEYNoAPI key for the 'openai' provider. Optional for unauthenticated endpoints.
INFINO_MCP_ENABLE_WRITESNoWhen set (e.g., '1', 'true', 'yes'), enables write tools and DDL/DML. Omit for read-only.off
INFINO_MCP_EMBED_BASE_URLNoBase URL of the OpenAI-compatible embeddings API (e.g., https://api.openai.com/v1). Required if provider is 'openai'.
INFINO_MCP_EMBED_PROVIDERNoEmbedding provider: 'local' (default, no key) or 'openai'. Inferred as 'openai' when INFINO_MCP_EMBED_BASE_URL is set.local

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
infino_list_tablesA

List the tables in the connected catalog. Call this first to discover what is available to search or query.

infino_describe_tableA

Return a table's column names and types — call before searching so you know which column to target and what fields each result row carries.

infino_create_databaseA

Provision the database named in the connection. On Infino Cloud this registers the database; on a local path or bucket the catalog root is the database, so this is a no-op success. Idempotent: an existing database is reported as created: false. Call it when a hosted connection answers 404.

infino_create_tableA

Create a table from a {column: type} descriptor. Full-text (BM25) indexes go on the columns named in 'fts' (default: every large_utf8 column; the index requires that type). With vector: true the server adds an 'embedding' column sized to its embedder and a cosine vector index on it, so semantic and hybrid search work and rows added without a vector are embedded from their text. Every column is required in every row you add, so declare only columns you will always fill. Give every table a stable key column of type utf8 so rows can be replaced or removed later by predicate (e.g. key = 'doc-1'); keep utf8 for ids and short labels and large_utf8 for the text to search, so the searches infer the right column.

infino_drop_tableA

Drop a table from the catalog and, by default, delete its storage objects too. Pass purge: false to only unregister the table and leave the bytes in place. Irreversible.

infino_semantic_searchA

Use when searching for a concept by meaning and the exact wording is unknown — this retrieves paraphrases and synonyms, not just literal matches. Embeds the query with a local model (no API key) and ranks a table's embedding column by vector similarity. Each hit carries a score that is a DISTANCE (lower is closer) plus the columns you project ('columns'; the full text column by default). Optional 'filter' restricts the ranking to rows whose keyword column matches a predicate first (a pushdown pre-filter, e.g. semantic search only within rows tagged 'billing'). For exact terms use infino_keyword_search; when the query has both literal terms and an intent use infino_hybrid_search.

infino_keyword_searchA

Use when the query is literal terms — identifiers, error codes, product names, exact phrases — and you want results ranked by relevance. BM25 full-text search over a text column: ranks rows by how well the query's tokens (and their stems) match, each with a relevance score (higher is better) plus the columns you project ('columns'; the full text column by default). Matches exact tokens, not synonyms or paraphrases. Prefer this over SQL LIKE for known literal terms. For meaning-based search use infino_semantic_search; for both at once use infino_hybrid_search.

infino_hybrid_searchA

Use when a query carries both specific terms and an intent — you want exact-term precision without giving up paraphrase recall. Fuses BM25 over a text column with vector similarity over the embedding column in a single ranking pass, so rows matching the literal terms AND the meaning rank highest; the score is the fused rank (higher is better) plus the columns you project ('columns'; the full text column by default). Embeds the query with a local model (no API key). Sits between infino_keyword_search (literal only) and infino_semantic_search (meaning only).

infino_token_matchA

Use when you need the SET of rows containing a keyword, not a ranked order — a fast unranked keyword filter. Returns rows whose text column contains the token(s), matching indexed tokens and their stems. For ranked results use infino_keyword_search; for analytical filtering across columns use infino_sql.

infino_exact_matchA

Use to fetch rows whose column exactly equals a value — a tag, status, or id string. Unranked exact-equality filter over an indexed column. For ranked text relevance use infino_keyword_search; for multi-column analytical filtering use infino_sql.

infino_countA

Use when you only need HOW MANY rows match a keyword query, not the rows themselves — a fast tally over a text column, without fetching or ranking. Cheaper than infino_keyword_search when a number is all you need (e.g. 'how many docs mention X'). For the matching rows use infino_keyword_search or infino_token_match.

infino_sqlA

Use for structural or analytical questions — counts, GROUP BY, joins, aggregates, filtering by column value — returning result rows. The engine's search functions are callable as table-valued relations, so a single query can rank AND aggregate: bm25_search('table','text_col','terms', k) — also bm25_search_prefix / token_match / exact_match — need no embedding. vector_search('table','vec_col', {{q}}, k) and hybrid_search('table','text_col','terms','vec_col', {{q}}, k) need a query vector: put a {{name}} placeholder where the vector goes and pass embed:{"name":"query text"} — the server embeds the text and substitutes the vector in. Example: SELECT path, SUM(end_line - start_line + 1) AS lines FROM bm25_search('docs','body','error timeout', 300) GROUP BY path ORDER BY lines DESC. Any single statement is allowed, DDL/DML included.

infino_add_documentsA

Append documents (rows, as JSON objects keyed by column name) to a table; one call is one commit. If the table has a vector index and a document omits the vector, the server embeds its text column (a local model, no API key). Send tens of rows per call; for a whole corpus use the infino CLI or an SDK.

infino_update_documentsA

Replace the rows matching a SQL predicate with new documents, 1:1; the number of matched rows must equal the number of replacement documents. As with add, a row that omits its vector has it embedded from the text column (local model, no API key). Requires durable storage (not memory://).

infino_delete_documentsA

Delete the rows matching a SQL predicate, e.g. "status = 'spam'". Returns how many rows matched and were removed. Check the predicate first with infino_count or infino_sql. Requires durable storage (not memory://).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 15 tools

Disambiguation4/5

The distinct resource actions (tables, documents, search, SQL) are clearly separated, and the search variants are carefully cross-referenced. Minor ambiguity remains between token_match, exact_match, and count since all are unranked filtered lookups, though the descriptions provide enough guidance for most cases.

Naming Consistency4/5

Most tools follow an infino_verb_noun pattern like infino_create_table and infino_delete_documents, with the search tools forming a consistent infino_<type>_search family. A few exceptions like infino_sql and infino_count deviate from the verb-noun structure but remain readable and predictable.

Tool Count5/5

Fifteen tools is at the upper edge of the ideal range but each one earns its place for a database/search server: schema management, document CRUD, multiple retrieval modes, and a powerful SQL escape hatch. Nothing feels redundant or extraneous.

Completeness5/5

The set covers the full table lifecycle (list, describe, create, drop), document lifecycle (add, update, delete, query), and diverse search needs (keyword, semantic, hybrid, exact, token, count, and SQL). There are no major dead ends or obvious missing operations for the stated purpose.

Maintenance

ActivityActive
ResponsivenessNo issues