BetterDB MCP server
OFFICIAL SERVERQuery a BetterDB monitor's Valkey and Redis metrics, slowlogs, hot keys and cache proposals from a chat
Query, write to and administer InfluxDB 3 time-series databases from an MCP client
Official · InfluxData TypeScript Local · stdio DatabasesDevOps and monitoring
49 popularity score ★ 38 ↓ 593/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs INFLUX_DB_PRODUCT_TYPE, INFLUX_DB_INSTANCE_URL, INFLUX_DB_TOKEN. Replace each <NAME> with your value.
claude mcp add influxdb-3 -e INFLUX_DB_PRODUCT_TYPE=<INFLUX_DB_PRODUCT_TYPE> -e INFLUX_DB_INSTANCE_URL=<INFLUX_DB_INSTANCE_URL> -e INFLUX_DB_TOKEN=<INFLUX_DB_TOKEN> -- npx -y @influxdata/influxdb3-mcp-server{
"mcpServers": {
"influxdb-3": {
"command": "npx",
"args": [
"-y",
"@influxdata/influxdb3-mcp-server"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}{
"mcpServers": {
"influxdb-3": {
"command": "npx",
"args": [
"-y",
"@influxdata/influxdb3-mcp-server"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}{
"servers": {
"influxdb-3": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@influxdata/influxdb3-mcp-server"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}[mcp_servers.influxdb-3]
command = "npx"
args = ["-y", "@influxdata/influxdb3-mcp-server"]
[mcp_servers.influxdb-3.env]
INFLUX_DB_PRODUCT_TYPE = "<INFLUX_DB_PRODUCT_TYPE>"
INFLUX_DB_INSTANCE_URL = "<INFLUX_DB_INSTANCE_URL>"
INFLUX_DB_TOKEN = "<INFLUX_DB_TOKEN>"gemini mcp add --scope user -e INFLUX_DB_PRODUCT_TYPE=<INFLUX_DB_PRODUCT_TYPE> -e INFLUX_DB_INSTANCE_URL=<INFLUX_DB_INSTANCE_URL> -e INFLUX_DB_TOKEN=<INFLUX_DB_TOKEN> influxdb-3 npx -- -y @influxdata/influxdb3-mcp-serverOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs INFLUX_DB_PRODUCT_TYPE, INFLUX_DB_INSTANCE_URL, INFLUX_DB_TOKEN. Replace each <NAME> with your value.
claude mcp add influxdb-3 -e INFLUX_DB_PRODUCT_TYPE=<INFLUX_DB_PRODUCT_TYPE> -e INFLUX_DB_INSTANCE_URL=<INFLUX_DB_INSTANCE_URL> -e INFLUX_DB_TOKEN=<INFLUX_DB_TOKEN> -- docker run --rm -i -e INFLUX_DB_INSTANCE_URL -e INFLUX_DB_TOKEN -e INFLUX_DB_PRODUCT_TYPE influxdata/influxdb3-mcp-server{
"mcpServers": {
"influxdb-3": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"INFLUX_DB_INSTANCE_URL",
"-e",
"INFLUX_DB_TOKEN",
"-e",
"INFLUX_DB_PRODUCT_TYPE",
"influxdata/influxdb3-mcp-server"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}{
"mcpServers": {
"influxdb-3": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"INFLUX_DB_INSTANCE_URL",
"-e",
"INFLUX_DB_TOKEN",
"-e",
"INFLUX_DB_PRODUCT_TYPE",
"influxdata/influxdb3-mcp-server"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}{
"servers": {
"influxdb-3": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"INFLUX_DB_INSTANCE_URL",
"-e",
"INFLUX_DB_TOKEN",
"-e",
"INFLUX_DB_PRODUCT_TYPE",
"influxdata/influxdb3-mcp-server"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}[mcp_servers.influxdb-3]
command = "docker"
args = ["run", "--rm", "-i", "-e", "INFLUX_DB_INSTANCE_URL", "-e", "INFLUX_DB_TOKEN", "-e", "INFLUX_DB_PRODUCT_TYPE", "influxdata/influxdb3-mcp-server"]
[mcp_servers.influxdb-3.env]
INFLUX_DB_PRODUCT_TYPE = "<INFLUX_DB_PRODUCT_TYPE>"
INFLUX_DB_INSTANCE_URL = "<INFLUX_DB_INSTANCE_URL>"
INFLUX_DB_TOKEN = "<INFLUX_DB_TOKEN>"gemini mcp add --scope user -e INFLUX_DB_PRODUCT_TYPE=<INFLUX_DB_PRODUCT_TYPE> -e INFLUX_DB_INSTANCE_URL=<INFLUX_DB_INSTANCE_URL> -e INFLUX_DB_TOKEN=<INFLUX_DB_TOKEN> influxdb-3 docker -- run --rm -i -e INFLUX_DB_INSTANCE_URL -e INFLUX_DB_TOKEN -e INFLUX_DB_PRODUCT_TYPE influxdata/influxdb3-mcp-serverOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs INFLUX_DB_PRODUCT_TYPE, INFLUX_DB_INSTANCE_URL, INFLUX_DB_TOKEN. Replace each <NAME> with your value.
git clone https://github.com/influxdata/influxdb3_mcp_server.git
cd influxdb3_mcp_server
corepack enable
pnpm install
pnpm run buildclaude mcp add influxdb-3 -e INFLUX_DB_PRODUCT_TYPE=<INFLUX_DB_PRODUCT_TYPE> -e INFLUX_DB_INSTANCE_URL=<INFLUX_DB_INSTANCE_URL> -e INFLUX_DB_TOKEN=<INFLUX_DB_TOKEN> -- node '<ABSOLUTE_PATH_TO_CLONE>/build/index.js'{
"mcpServers": {
"influxdb-3": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/build/index.js"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}{
"mcpServers": {
"influxdb-3": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/build/index.js"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}{
"servers": {
"influxdb-3": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/build/index.js"
],
"env": {
"INFLUX_DB_PRODUCT_TYPE": "<INFLUX_DB_PRODUCT_TYPE>",
"INFLUX_DB_INSTANCE_URL": "<INFLUX_DB_INSTANCE_URL>",
"INFLUX_DB_TOKEN": "<INFLUX_DB_TOKEN>"
}
}
}
}[mcp_servers.influxdb-3]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/build/index.js"]
[mcp_servers.influxdb-3.env]
INFLUX_DB_PRODUCT_TYPE = "<INFLUX_DB_PRODUCT_TYPE>"
INFLUX_DB_INSTANCE_URL = "<INFLUX_DB_INSTANCE_URL>"
INFLUX_DB_TOKEN = "<INFLUX_DB_TOKEN>"gemini mcp add --scope user -e INFLUX_DB_PRODUCT_TYPE=<INFLUX_DB_PRODUCT_TYPE> -e INFLUX_DB_INSTANCE_URL=<INFLUX_DB_INSTANCE_URL> -e INFLUX_DB_TOKEN=<INFLUX_DB_TOKEN> influxdb-3 node -- '<ABSOLUTE_PATH_TO_CLONE>/build/index.js'INFLUX_DB_PRODUCT_TYPE |
Required: core, enterprise, cloud-serverless, cloud-dedicated or clustered; the server refuses to start without a valid value. |
|---|---|
INFLUX_DB_INSTANCE_URL |
Required: Address of the instance, e.g. http://localhost:8181/; checked at start for Core, Enterprise and Cloud Serverless, and needed for Clustered. |
INFLUX_MCP_TOOL_PROFILE |
Optional: Set to readonly to expose only the nine read-only tools; any other value keeps all tools. |
| Set together: credentials | |
INFLUX_DB_TOKEN secret |
Required: Admin, scoped or database token, sent as a Bearer header; on Dedicated/Clustered INFLUX_DB_MANAGEMENT_TOKEN can stand in. INFLUX_DB_DATABASE_TOKEN is read as a fallback. |
INFLUX_DB_MANAGEMENT_TOKEN secret |
Optional: Management token for the cloud management API. |
| Set together: cloud-dedicated | |
INFLUX_DB_CLUSTER_ID |
Optional: Cluster ID; required for Cloud Dedicated. |
INFLUX_DB_ACCOUNT_ID |
Optional: Account ID; needed with the management token on Cloud Dedicated. |
| Set together: logging | |
MCP_LOG_TOOL_CALLS |
Optional: Set to false to stop the tool-call log; on by default. |
MCP_LOG_BACKEND |
Optional: file writes the log to MCP_LOG_FILE (falls back to stderr if unset); stdout is also accepted but shares the MCP channel. |
MCP_LOG_FILE |
Optional: Path of the log file when MCP_LOG_BACKEND=file. |
In a container, a setting goes in with -e NAME=value after docker run.
InfluxData's own MCP server for InfluxDB 3. You point it at one instance of Core, Enterprise, Cloud Serverless, Cloud Dedicated or Clustered with INFLUX_DB_PRODUCT_TYPE, and it runs on your machine over stdio, from npm or as a container.
An assistant can use it to list databases and tables, look at column schemas, run SQL or InfluxQL, and write points in line protocol. It can also manage databases and tokens. The token tools depend on the product: admin tokens on Core and Enterprise, resource tokens on Enterprise only, and the cloud_* token tools on Cloud Dedicated and Clustered. There are four resources, three prompts, and a load_database_context tool that hands back a context file you write yourself to describe your data.
Version 2.0 changed the shape of query results and health-check output, so a client that parses those needs updating. execute_query is deprecated since 2.0.0 and stays only for older clients. Use query_sql instead, which returns 1000 rows by default and caps maxRows at 5000 (src/tools/categories/query.tools.ts).
All tools are exposed unless INFLUX_MCP_TOOL_PROFILE=readonly is set. That profile keeps nine of them: the context loader, help, health, database and table listing, table description, the two bounded query tools and a discovery pass. The config at v2.0.0 also takes readwrite and operator as values, but only readonly filters anything (src/tools/index.ts). Each tool call is written as a JSON line to stderr unless MCP_LOG_TOOL_CALLS=false. Tokens and query text are left out of that log.
| Runtime | Node.js 22+Docker |
|---|---|
| Runs on | macOS, Windows, Linux |
| InfluxDB 3 | Your own instanceCore, Enterprise or Clustered you run, or a Cloud Serverless or Cloud Dedicated account, plus a token for it |
A reachable InfluxDB 3 instance and a token for it. Cloud Dedicated also needs its cluster ID, and an account ID plus management token for database management. The README asks for Node.js 22.23.4+, 24.22.1+ or 26.12.1+ for npx, because older releases trust root certificates tied to compromised eMudhra/emSign CAs. package.json still allows Node 20.11. Docker is the alternative, and its image ships a current Node 24.
Works with InfluxDB 3 products only. On Cloud Dedicated and Clustered, a database token alone gives query and write tools but no database management, and a management token alone gives management but no queries; both are needed for everything. query_sql and query_influxql return 1000 rows by default, 5000 at most; execute_query returns JSON only on Cloud Dedicated, Cloud Serverless and Clustered. The README's npx section still says it will not work until the package is published, which is out of date; its Docker examples use locally built image names (mcp/influxdb, influxdb-mcp-server), while released images are on Docker Hub as influxdata/influxdb3-mcp-server.
Suits teams running InfluxDB 3 who want an assistant to explore schemas, answer questions in SQL or InfluxQL, or work out why a dashboard query broke. Use the readonly profile when it should change nothing. The full profile can also delete databases and manage tokens, so give it a token scoped to what you are willing to let it do. It covers InfluxDB 3 products only, so for InfluxDB 1.x or 2.x look elsewhere.
15 only read, 8 change things, 4 can delete or overwrite. A ? marks an optional parameter.
load_database_contextget_helpwrite_line_protocol changescreate_database changesupdate_database changesdelete_database deletesexecute_query changesdatabase: stringquery: stringformat?: enumquery_sqldb?: stringq?: stringdatabase?: stringquery?: stringparams?: anyformat?: enummaxRows?: integertimeoutMs?: integerquery_influxqldb?: stringq?: stringdatabase?: stringquery?: stringparams?: anyformat?: enummaxRows?: integertimeoutMs?: integerget_measurementsdatabase: stringget_measurement_schemadatabase: stringmeasurement: stringlist_tablesdb: stringdescribe_tabledb: stringtable: stringinvestigate_databasedb: stringincludeSamples?: booleanmaxTables?: integersampleWindowHours?: integersampleRowsPerTable?: integercreate_admin_token changeslist_admin_tokenscreate_resource_token changeslist_resource_tokensdelete_token deletesregenerate_operator_token deletescloud_list_database_tokenscloud_get_database_tokencloud_create_database_token changescloud_update_database_token changescloud_delete_database_token deleteslist_databaseshealth_checkinflux://configinflux://statusinflux://databasesinflux://contextlist-databasescheck-healthload-context