Triagic docs
Integrations

Databases

Step-by-step connection and configuration for MongoDB, PostgreSQL, MySQL, Redis, ClickHouse, Snowflake, BigQuery, DynamoDB and Supabase.

Nine integrations that let the agent look up the row behind a ticket. Every one of them should be given a credential that cannot write; where the server enforces that itself, this page says so, and where it does not, it says that too.

MongoDB

mongodb · runs mongodb-mcp-server via npx · read-only enforced by the server's --readOnly flag, which blocks writes and admin commands.

Create a read-only user. In mongosh, against the database the tickets are about:

db.getSiblingDB("admin").createUser({
  user: "triagic",
  pwd: "…",
  roles: [{ role: "read", db: "orders" }]
})

Note which database the user is defined in — that is the authSource, and it is the commonest cause of a rejected login.

Assemble the connection string, including that auth source: mongodb+srv://triagic:…@cluster0.abc.mongodb.net/orders?authSource=admin. For Atlas, add the machine's egress IP to the cluster's IP access list first.

Fill the form.

FieldRequiredWhat to put
Connection stringyesThe full URI above, credentials included. Stored encrypted, returned masked.
Read-onlyno, defaults onLeave on. It is the server's own write block; turning it off is a deliberate act.

Verify. The desktop proves the credential with list-databases before reporting running.

If it reportsIt usually means
connection string is not validNot the URI — this is also what the server says when the host simply isn't reachable. Check the host and port answer from that machine, and that an SRV or replica-set name resolves, before editing anything.
authentication failed / bad authThe username or password was rejected, or authSource points at the wrong database.

PostgreSQL

postgres · runs @modelcontextprotocol/server-postgres via npx · the server ships a query tool only.

Create a read-only role.

CREATE ROLE triagic LOGIN PASSWORD '…';
GRANT CONNECT ON DATABASE billing TO triagic;
GRANT USAGE ON SCHEMA public TO triagic;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO triagic;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO triagic;

The last line is the one people forget: without it, tables created later are invisible.

Fill the form.

FieldRequiredWhat to put
Connection URLyespostgres://triagic:…@host:5432/billing. Any sslmode you set is replaced by the toggle below.
Verify TLS certificateno, defaults onTurn off for managed Postgres (RDS, DigitalOcean, Supabase) and internal clusters whose certificate is signed by a private CA. Traffic stays encrypted.

Verify. Health check is SELECT 1.

If it reportsIt usually means
self-signed certificate in certificate chain, unable to verify local issuerThe certificate isn't signed by a CA that machine trusts — usual for managed Postgres. Turn off Verify TLS certificate, or install the provider's CA bundle on the machine. The failure appears on the health check, not at startup, because the driver connects lazily.

MySQL

mysql · runs mysql-mcp-server via uvx.

Create a read-only user.

CREATE USER 'triagic'@'%' IDENTIFIED BY '…';
GRANT SELECT ON shop.* TO 'triagic'@'%';

Fill the form. This one takes the parts, not a URL.

FieldRequiredWhat to put
HostyesHostname or IP reachable from the member's machine.
Portno, defaults 3306
Useryestriagic
PasswordnoBlank is accepted for a passwordless user.
DatabaseyesThe default schema queries run against.

Verify. Health check is SELECT 1 through the execute_sql tool.

Redis

redis · runs @modelcontextprotocol/server-redis via npx.

Create a restricted ACL user so a cached-value lookup cannot become a FLUSHALL:

ACL SETUSER triagic on >… ~* +@read +@keyspace

Fill the form.

FieldRequiredWhat to put
Connection URLyesredis://triagic:…@host:6379, or rediss:// for TLS.

Verify. Health check lists keys matching a pattern that matches nothing, so it proves the connection without reading data.

ClickHouse

clickhouse · runs mcp-clickhouse via uvx · read-only twice over: writes are disabled in the server, and each query is sent with ClickHouse's own readonly setting where the user's grants allow it.

Create a read-only user.

CREATE USER triagic IDENTIFIED BY '…' SETTINGS readonly = 1;
GRANT SELECT ON events.* TO triagic;

Fill the form.

FieldRequiredWhat to put
Hostyesabc123.us-east-1.aws.clickhouse.cloud, or your own hostname.
PortnoLeave blank and it follows TLS: 8443 with, 8123 without.
Useryestriagic, or default on a fresh Cloud service.
PasswordnoBlank is allowed for a passwordless user.
DatabasenoDefault database for queries. Blank browses them all.
Use TLSno, defaults onTurn off only for a plain-HTTP cluster, typically self-hosted on 8123.
Verify TLS certificateno, defaults onTurn off for a self-signed certificate.

Verify. Health check is list_databases.

If it reportsIt usually means
Code: 516 / Authentication failedThe user or password was rejected. Remember ClickHouse Cloud always requires TLS on 8443.

Snowflake

snowflake · runs simple-snowflake-mcp via uvx · the server pins its own read-only mode on and gives clients no way to relax it, but its guard is a SQL keyword check — defense-in-depth, not a permission boundary.

Create a service user whose default role can only read. The connector never sends a role, so the user's DEFAULT_ROLE is what applies — there is no role field on this form.

CREATE ROLE triagic_reader;
GRANT USAGE ON WAREHOUSE analytics_wh TO ROLE triagic_reader;
GRANT USAGE ON DATABASE prod TO ROLE triagic_reader;
GRANT USAGE ON ALL SCHEMAS IN DATABASE prod TO ROLE triagic_reader;
GRANT SELECT ON ALL TABLES IN DATABASE prod TO ROLE triagic_reader;
CREATE USER triagic PASSWORD = '…' DEFAULT_ROLE = triagic_reader;
GRANT ROLE triagic_reader TO USER triagic;

It must be a password user: SSO and MFA accounts cannot sign in here.

Fill the form.

FieldRequiredWhat to put
Account identifieryesJust the identifier — myorg-myaccount, or a locator plus region like xy12345.us-east-1. Never the full …snowflakecomputing.com URL.
Useryestriagic
Passwordyes
WarehouseyesQueries need one. Metadata calls work without it; SELECTs do not.
DatabasenoDefault database, or leave blank and fully qualify names in queries.
Schemano

Verify. Health check is list-databases.

If it reportsIt usually means
250001 / Failed to connect to DBAlmost always the account identifier, not the network. Pasting the full URL is the classic mistake.
Incorrect username or passwordCheck both — and note SSO/MFA users cannot authenticate with a password here.

BigQuery

bigquery · runs mcp-server-bigquery via uvx.

Writes are not blocked here

The query tool runs whatever SQL it is given. IAM is the only control, so the service account's roles are the boundary.

Create a service account with exactly two roles: BigQuery Data Viewer (roles/bigquery.dataViewer) to read, and BigQuery Job User (roles/bigquery.jobUser) to run queries. Nothing else.

Download its JSON key and place it on the machine that runs Triagic — an absolute path readable by the desktop app, e.g. /opt/triagic/bigquery-sa.json. Skip this if that machine already has Application Default Credentials configured.

Fill the form.

FieldRequiredWhat to put
Project IDyesmy-project-123
Locationyes, defaults USWhere the datasets live: a multi-region (US, EU) or a region like europe-west9. A mismatch returns no results rather than an error.
Service account key pathnoAbsolute path to the JSON above. Blank falls back to Application Default Credentials.

Verify. Health check is list-tables.

If it reportsIt usually means
Could not automatically determine credentialsNo Google credentials on that machine. Set the key path, or run gcloud auth application-default login there.
403 / Access DeniedA missing role — it needs both Data Viewer and Job User on this project.

DynamoDB

dynamodb · runs awslabs.aws-api-mcp-server via uvx, locked to read-only operations · every command is matched against AWS's read-only action list before it runs, local file access is refused outright, and upstream telemetry is off.

Create an IAM user with AmazonDynamoDBReadOnlyAccess, or a policy granting dynamodb:List*, dynamodb:Describe*, dynamodb:Query, dynamodb:Scan and dynamodb:GetItem on the tables you need. Generate an access key for it.

Fill the form.

FieldRequiredWhat to put
AWS access key IDyesAKIA…
AWS secret access keyyes
Regionyes, defaults us-east-1DynamoDB tables are per-region — this has to be the region the table lives in.
Session tokennoOnly for temporary (STS) credentials.

Verify. No health check runs for this one: the underlying tool returns AWS errors as successful results with an error field, so a check could not tell a working credential from a denied one. It is start-checked only — the first real tool call is what proves the credential.

If it reportsIt usually means
InvalidClientTokenId, SignatureDoesNotMatchKey ID and secret aren't a matching pair, or the key is inactive. Temporary credentials also need Session token filled in.
AccessDeniedCredentials are valid, the IAM policy is not.
ResourceNotFoundExceptionRight credentials, wrong Region.
…is a write operationExpected. This integration refuses writes before they reach AWS.

Supabase

supabase · runs @supabase/mcp-server-supabase via npx with --read-only · SQL executes inside a read-only transaction, and the migration, branching, storage and edge-function deploy tools are not offered at all.

The tool surface is deliberately narrowed to three feature groups: database (list tables, extensions, migrations, run SQL), debugging (query logs, security and performance advisors) and docs. Account-level tools are excluded on purpose — they reach across projects, which would undo the per-project scoping below.

Generate a personal access token at supabase.com/dashboard/account/tokens. It inherits its owner's organization access, so create it from an account that is a member of the organization owning the project — ideally a dedicated one.

The project's anon and service_role keys are a different credential and are not accepted here.

Find the project ref. Project Settings → General → Reference ID, a 20-character string. It is also the subdomain of the project's …supabase.co URL.

Fill the form.

FieldRequiredWhat to put
Personal access tokenyessbp_…
Project refyesThe reference ID. One configuration is one project — add a second instance for a second project.

Verify. Health check is list_tables, which runs real SQL through the platform API, so it fails on both a bad token and a project the token cannot reach.

If it reportsIt usually means
401 / invalid tokenNot a personal access token. It must start sbp_ and come from the account tokens page.
403The token's owner is not a member of the organization that owns this project.
404 / project not foundWrong ref — use the 20-character reference ID, not the project's display name.
cannot execute … in a read-only transactionExpected, and deliberate.

On this page