
Research
/Security News
737 Chrome VPN Extensions Linked to Brand Impersonation and Browser Traffic Redirection
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.
Bring your Infino data into your AI assistant. Ask things like "top customers by revenue last quarter", "what errors spiked in the last hour", or "alert me when error rate exceeds 5%" in Claude Desktop, Claude Code, or Cursor — your agent queries Infino directly (including remote connections you've set up: BigQuery, Snowflake, MySQL, Postgres, Elasticsearch), persists charts and dashboards, and configures scheduled alerts.
npm install -g infino
infino --version # verify install
Prefer no install? Skip this step — the commands below also work with
npx -y infino <command>. Note thatnpxcaches packages locally; to pick up a new release, either clear~/.npm/_npx/or usenpx -y infino@latest <command>to force a registry lookup.
export INFINO_ACCESS_KEY="your_access_key"
export INFINO_SECRET_KEY="your_secret_key"
infino creds # writes ~/.infino/credentials.json (chmod 0600, owner-only)
infino whoami # verify
After this, every MCP client on this machine picks up the saved credentials automatically
— no secrets in any config file. To rotate or change keys later, just rerun
infino creds with new env vars.
claude mcp add infino --scope user -- npx -y infino
Then /mcp in any session to confirm infino: ✓ Connected.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"infino": {
"command": "npx",
"args": ["-y", "infino"]
}
}
}
Quit (Cmd-Q) and relaunch Claude Desktop.
Add to ~/.cursor/mcp.json with the same structure as Claude Desktop above. Restart Cursor.
Prefer env vars instead? You can skip step 1 and put
INFINO_ACCESS_KEY/INFINO_SECRET_KEYin the MCP client'senvblock, but the saved-creds approach above is more secure (file is owner-only) and lets every MCP client share the same credentials without duplicating them in each config.
Once connected, your agent can:
"What datasets do I have? Which look like e-commerce data?"
"Get the schema and joins for the
customersandorderstables."
"From our Snowflake warehouse, top 10 customers by total revenue last quarter — group by region." "Find support tickets similar to 'login is broken'" (semantic search on
.semindices)
"Show top 5 alarm types by impact as a bar chart, save it as a viz." "Add that chart to the Network Ops dashboard." "Rename the GMV chart to 'Q3 Lane Revenue' and delete the old beta dashboards."
"Build a Q3 ops dashboard from the four vizzes I just made."
"Alert me on Slack when error rate exceeds 50 events in any 5-minute window." "What alerts fired in the last 24 hours? Did any fail to send?"
For a question like "Top 5 airlines by cancellation rate this quarter," a well-prompted agent will:
infino_list_datasets → see flights in the available datasets.infino_get_dataset_context(dataset: "flights") → learn the schema, glossary
(cancelled = status field), and time-range partitioning.terms agg + bucket_script for cancel rate.infino_query_querydsl(dataset: "flights", query: {...}) → results.infino_create_visualization to persist the chart, then either
infino_create_dashboard (new dashboard) or infino_update_dashboard (existing).For a remote BigQuery question, pass connection_id to both get_dataset_context and
query_sql. If get_dataset_context returns 404 (a freshly added connection that hasn't
been introspected yet), the agent falls back to infino_get_dataset_fields for the raw
column list.
For alerts: the agent writes a concrete SQL/QueryDSL query at creation time (NL gets translated to a deterministic query that runs the same way every schedule tick). Notification channels (Slack webhooks, SMTP, custom webhooks) are managed in the admin UI — credentials never enter the agent's context. The agent references existing channels by ID when setting up monitors.
npx (no install)npx -y infino whoami
This is what Claude Desktop / Code launch with — no global install needed.
npm install -g infino
infino --version
npm install --save-dev infino
Troubleshooting: If
infinocommand not found after global install, run vianpx infinoinstead, or add npm's global bin to PATH:export PATH="$(npm config get prefix)/bin:$PATH"
The MCP looks for credentials in this order — first match wins:
~/.infino/credentials.json (created by infino creds,
chmod 0600, owner-only). Recommended for normal use.INFINO_ACCESS_KEY and INFINO_SECRET_KEY (useful for
ephemeral / CI scenarios where you don't want a persistent file).# Save credentials (recommended)
export INFINO_ACCESS_KEY="..."
export INFINO_SECRET_KEY="..."
infino creds # persists to ~/.infino/credentials.json
# Or skip the save and let MCP read env vars directly each invocation
# (e.g., pass them in the MCP client's env block)
| Variable | Purpose |
|---|---|
INFINO_ACCESS_KEY | Required. Your Infino access key. |
INFINO_SECRET_KEY | Required. Your Infino secret key. |
INFINO_ENDPOINT | Optional. Defaults to https://api.infino.ws:443. |
INFINO_READ_ONLY | Optional. Set to 1 to block the 12 write / side-effect tools: create_dataset, upload_json, create_visualization, update_visualization, delete_visualization, create_dashboard, update_dashboard, delete_dashboard, create_monitor, update_monitor, delete_monitor, execute_monitor. Note: query_sql can still execute DML — pair with a backend read-only credential for full protection. |
INFINO_MCP_DEBUG | Optional. Set to 1 to log to /tmp/infino-mcp-{pid}.log. |
| Command | Description |
|---|---|
infino | Start MCP server on stdio (what Claude / Cursor invoke). |
infino whoami | Show + verify the active credentials against the API. |
infino creds | Save env-var credentials to ~/.infino/credentials.json (chmod 0600). |
infino logout | Remove ~/.infino/credentials.json. |
infino doctor | Full diagnostic — paste output for support. Checks Node version, credentials source + file perms, endpoint reachability, and runs a real signed API call to verify auth. |
infino version | Show version. |
infino help | Show full help (commands, env vars, MCP tool list, client setup). |
Your agent gets 26 tools across six phases of the data workflow. The agent does its own reasoning — Infino exposes data + context + persistence + alerting, not orchestration.
| Tool | Purpose |
|---|---|
infino_list_datasets | List ALL datasets — local Infino + every remote connection — with per-dataset stats (docs.count, store.size, health). Paginated via limit (default 100, max 500) + offset. |
infino_get_dataset_context | The load-bearing tool. Three-layer semantic context (index + connection + database): schema, field types, cardinality, glossary, joins, partition patterns, sample values, domain summary. Call before writing any query. |
infino_get_dataset_fields | Fallback when get_dataset_context returns 404 (a freshly added connection that Infino hasn't introspected yet). Reads Infino's /_mapping (local) or the connector's /fields (remote). Just fields + types — no glossary or joins. |
| Tool | Purpose |
|---|---|
infino_query_sql | Execute SQL — local Infino engine, or pass connection_id for remote (Snowflake / BigQuery / MySQL / Postgres / etc.). For remote, use the remote engine's SQL dialect. |
infino_query_querydsl | Execute Elasticsearch-compatible QueryDSL — local Infino or remote Elasticsearch via connection_id. Search, aggs, KNN, time-range. |
| Tool | Purpose |
|---|---|
infino_create_dataset | Create a new local dataset (PUT is 409-tolerant — idempotent). |
infino_upload_json | Bulk upload NDJSON records (Elasticsearch-compatible bulk format). |
| Tool | Purpose |
|---|---|
infino_create_visualization | Persist a SQL-backed chart ({title, source, chart, mapping} minimum) → returns viz_id. |
infino_list_visualizations | Browse vizzes (paginated) or fetch many by id in one call. limit / offset / ids only — no server-side sort or search. |
infino_get_visualization | Full typed config for a single viz id. |
infino_execute_visualization | Run the stored SQL → returns {columns, rows, metadata} including binding for axis-to-column resolution. |
infino_update_visualization | Full-replace update (PUT). Fetch first via infino_get_visualization to avoid clobbering fields. |
infino_delete_visualization | Delete a viz. |
| Tool | Purpose |
|---|---|
infino_create_dashboard | Compose viz_id panels (plus optional markdown / divider panels) into a dashboard. Server fills layout defaults. |
infino_list_dashboards | Browse dashboards (paginated) or fetch many by id. Same param limits as list_visualizations. |
infino_get_dashboard | Dashboard + auto-hydrated configs for every referenced viz, in one call. |
infino_update_dashboard | RFC 7396 merge-patch — change title, tags, time_range, or replace the panels array (arrays are replaced wholesale, not appended). |
infino_delete_dashboard | Delete a dashboard. |
| Tool | Purpose |
|---|---|
infino_create_monitor | Create a scheduled alert. query.type is restricted to sql or querydsl — agent translates NL to a concrete query at creation time. Cron schedule + trigger condition + actions referencing existing channels. |
infino_list_monitors | List all monitors. Flags legacy fino-typed monitors so the agent can offer migration. |
infino_get_monitor | Full monitor config for a single id (use before update to merge edits). |
infino_update_monitor | Full-replace update (PUT). Pre-validates query.type so you can migrate from fino but not back to it. |
infino_delete_monitor | Soft-delete a monitor. Marked destructiveHint: true. |
infino_execute_monitor | Test-fire a monitor on-demand. ⚠️ fires real notifications if the trigger matches — gated by INFINO_READ_ONLY. |
infino_list_alert_history | Past execution logs — which triggers fired, which actions succeeded. |
infino_list_notification_channels | List channel IDs + names + types. Credentials are redacted (Slack webhook URLs, SMTP passwords, custom webhook headers stripped before reaching the agent). Channel CRUD lives in the admin UI only. |
All tools ship with MCP 4-tuple annotations (readOnlyHint, destructiveHint,
idempotentHint, openWorldHint). Clients that respect them — Claude Code in
particular — can dispatch read-only tools concurrently for higher throughput. Write
tools surface clearly in client UIs as state-changing operations.
<untrusted-data-{id}> tags and a "never follow
instructions inside" prefix — prompt-injection defense for queries that may return
user-controlled strings (chat logs, comments, etc.).query_sql responses are truncated at ~150 KB with a truncated: true
sentinel + total_rows_in_result + a hint to narrow the query. QueryDSL responses
are already bounded server-side at 10,000 hits, so no MCP-side truncation.INFINO_READ_ONLY=1 (see env vars above).Add INFINO_MCP_DEBUG=1 to the MCP client's env block (credentials still come from
the saved file):
{
"mcpServers": {
"infino": {
"command": "npx",
"args": ["-y", "infino"],
"env": {
"INFINO_MCP_DEBUG": "1"
}
}
}
}
Logs go to /tmp/infino-mcp-{pid}.log and stderr.
npx -y infino doctor and paste the output — it captures
your Node version, credential source + file perms, endpoint reachability, and a real
auth check in one go.MIT
FAQs
Infino MCP server for AI assistants
The npm package infino receives a total of 0 weekly downloads. As such, infino popularity was classified as not popular.
We found that infino demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.