# The Infino playground, for agents

One retrieval layer, three query modes. This is a shared, read-only Infino
Cloud database with published credentials: keyword (BM25), semantic (vector),
and hybrid search answered from the same rows of one Parquet table. No
account, no signup. The human version of this page is
https://infino.ai/playground/

## Credentials

Fetch https://infino.ai/sandbox.json for the current base URL, database name,
and read-only API key. The key can rotate, so fetch it rather than caching it.
The key is scoped to this database and can read, not write.

## Tables

- papers (the default): 45,012 arXiv computer-science abstracts, 1993 to 2021
  (arXiv metadata snapshot, CC0). Columns: title, cat, abstract, embedding.
  Full-text indexes on abstract and title, cosine vector index on embedding.
- movies: 42,207 movie plot summaries (CMU Movie Summary Corpus, CC BY-SA).
  Columns: title, year, plot, embedding. Full-text indexes on plot and title,
  cosine vector index on embedding.

Embeddings in both tables are bge-small-en-v1.5, 384 dimensions, normalized,
passage mode (bare text). To run a vector or hybrid query, embed the query
text with the same model prefixed with "Represent this sentence for searching
relevant passages: ", normalized.

## REST

POST {base}/v1/{operation}/{database} with headers:

    Authorization: Bearer {api_key}
    Content-Type: application/json
    Accept: application/json

The default response encoding is Arrow IPC; the Accept header selects JSON.
Operations and example bodies:

- bm25_search:
  {"table_name":"movies","field_name":"plot","query":"dinosaur park","k":5,"mode":"or","projection":["title","year"]}
- vector_search:
  {"table_name":"movies","field_name":"embedding","query":[/* 384 floats */],"k":5,"projection":["title","year"]}
- hybrid_search:
  {"table_name":"movies","text_field":"plot","text_query":"dinosaur park","mode":"or","vector_field":"embedding","vector_query":[/* 384 floats */],"k":5,"projection":["title","year"]}
- count:
  {"table_name":"movies","field_name":"plot","query":"dinosaur park","mode":"or"}
- query_sql:
  {"query":"SELECT ..."}
- list_tables: {}

The full API reference is at https://infino.ai/docs/api-reference and the
OpenAPI description at https://infino.ai/docs/api-reference/openapi.json

## Complex questions in a single query

The search modes are functions inside SQL, so one statement can rank, join,
filter, and aggregate. This runs against the sandbox as written:

    SELECT substr(t.year, 1, 3) || '0s' AS decade, count(*) AS n
    FROM bm25_search('movies', 'plot', 'dinosaur park', 500) h
    JOIN "movies" t ON t._id = h._id
    GROUP BY decade ORDER BY n DESC

POST it as the query field of /v1/query_sql/{database}.

## MCP

The published MCP server gives any MCP client these tables as tools,
embedding included. The embed model must be pinned to match this corpus:

    {
      "mcpServers": {
        "infino-playground": {
          "command": "npx",
          "args": ["-y", "@infino-ai/mcp-server"],
          "env": {
            "INFINO_MCP_URI": "https://api.platform.infino.ws/playground",
            "INFINO_API_KEY": "<from https://infino.ai/sandbox.json>",
            "INFINO_MCP_EMBED_MODEL": "Xenova/bge-small-en-v1.5"
          }
        }
      }
    }

## Limits

The sandbox is shared and rate-limited. Reads only. For your own database
with write access, sign up at
https://platform.infino.ws/signup?utm_source=infino.ai&utm_medium=inline-link&utm_campaign=cloud-signup&utm_content=playground-md
