#
tokens: 49627/50000 148/784 files (page 1/33)
lines: off (toggle) GitHub
raw markdown copy
This is page 1 of 33. Use http://codebase.md/googleapis/genai-toolbox?page={x} to view the full context.

# Directory Structure

```
├── .ci
│   ├── continuous.release.cloudbuild.yaml
│   ├── generate_release_table.sh
│   ├── integration.cloudbuild.yaml
│   ├── quickstart_test
│   │   ├── go.integration.cloudbuild.yaml
│   │   ├── js.integration.cloudbuild.yaml
│   │   ├── py.integration.cloudbuild.yaml
│   │   ├── run_go_tests.sh
│   │   ├── run_js_tests.sh
│   │   ├── run_py_tests.sh
│   │   └── setup_hotels_sample.sql
│   ├── test_with_coverage.sh
│   └── versioned.release.cloudbuild.yaml
├── .github
│   ├── auto-label.yaml
│   ├── blunderbuss.yml
│   ├── CODEOWNERS
│   ├── header-checker-lint.yml
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── feature_request.yml
│   │   └── question.yml
│   ├── label-sync.yml
│   ├── labels.yaml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── release-please.yml
│   ├── renovate.json5
│   ├── sync-repo-settings.yaml
│   └── workflows
│       ├── cloud_build_failure_reporter.yml
│       ├── deploy_dev_docs.yaml
│       ├── deploy_previous_version_docs.yaml
│       ├── deploy_versioned_docs.yaml
│       ├── docs_deploy.yaml
│       ├── docs_preview_clean.yaml
│       ├── docs_preview_deploy.yaml
│       ├── lint.yaml
│       ├── schedule_reporter.yml
│       ├── sync-labels.yaml
│       └── tests.yaml
├── .gitignore
├── .gitmodules
├── .golangci.yaml
├── .hugo
│   ├── archetypes
│   │   └── default.md
│   ├── assets
│   │   ├── icons
│   │   │   └── logo.svg
│   │   └── scss
│   │       ├── _styles_project.scss
│   │       └── _variables_project.scss
│   ├── go.mod
│   ├── go.sum
│   ├── hugo.toml
│   ├── layouts
│   │   ├── _default
│   │   │   └── home.releases.releases
│   │   ├── index.llms-full.txt
│   │   ├── index.llms.txt
│   │   ├── partials
│   │   │   ├── hooks
│   │   │   │   └── head-end.html
│   │   │   ├── navbar-version-selector.html
│   │   │   ├── page-meta-links.html
│   │   │   └── td
│   │   │       └── render-heading.html
│   │   ├── robot.txt
│   │   └── shortcodes
│   │       ├── include.html
│   │       ├── ipynb.html
│   │       └── regionInclude.html
│   ├── package-lock.json
│   ├── package.json
│   └── static
│       ├── favicons
│       │   ├── android-chrome-192x192.png
│       │   ├── android-chrome-512x512.png
│       │   ├── apple-touch-icon.png
│       │   ├── favicon-16x16.png
│       │   ├── favicon-32x32.png
│       │   └── favicon.ico
│       └── js
│           └── w3.js
├── CHANGELOG.md
├── cmd
│   ├── options_test.go
│   ├── options.go
│   ├── root_test.go
│   ├── root.go
│   └── version.txt
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DEVELOPER.md
├── Dockerfile
├── docs
│   └── en
│       ├── _index.md
│       ├── about
│       │   ├── _index.md
│       │   └── faq.md
│       ├── concepts
│       │   ├── _index.md
│       │   └── telemetry
│       │       ├── index.md
│       │       ├── telemetry_flow.png
│       │       └── telemetry_traces.png
│       ├── getting-started
│       │   ├── _index.md
│       │   ├── colab_quickstart.ipynb
│       │   ├── configure.md
│       │   ├── introduction
│       │   │   ├── _index.md
│       │   │   └── architecture.png
│       │   ├── local_quickstart_go.md
│       │   ├── local_quickstart_js.md
│       │   ├── local_quickstart.md
│       │   ├── mcp_quickstart
│       │   │   ├── _index.md
│       │   │   ├── inspector_tools.png
│       │   │   └── inspector.png
│       │   └── quickstart
│       │       ├── go
│       │       │   ├── genAI
│       │       │   │   ├── go.mod
│       │       │   │   ├── go.sum
│       │       │   │   └── quickstart.go
│       │       │   ├── genkit
│       │       │   │   ├── go.mod
│       │       │   │   ├── go.sum
│       │       │   │   └── quickstart.go
│       │       │   ├── langchain
│       │       │   │   ├── go.mod
│       │       │   │   ├── go.sum
│       │       │   │   └── quickstart.go
│       │       │   ├── openAI
│       │       │   │   ├── go.mod
│       │       │   │   ├── go.sum
│       │       │   │   └── quickstart.go
│       │       │   └── quickstart_test.go
│       │       ├── golden.txt
│       │       ├── js
│       │       │   ├── genAI
│       │       │   │   ├── package-lock.json
│       │       │   │   ├── package.json
│       │       │   │   └── quickstart.js
│       │       │   ├── genkit
│       │       │   │   ├── package-lock.json
│       │       │   │   ├── package.json
│       │       │   │   └── quickstart.js
│       │       │   ├── langchain
│       │       │   │   ├── package-lock.json
│       │       │   │   ├── package.json
│       │       │   │   └── quickstart.js
│       │       │   ├── llamaindex
│       │       │   │   ├── package-lock.json
│       │       │   │   ├── package.json
│       │       │   │   └── quickstart.js
│       │       │   └── quickstart.test.js
│       │       ├── python
│       │       │   ├── __init__.py
│       │       │   ├── adk
│       │       │   │   ├── quickstart.py
│       │       │   │   └── requirements.txt
│       │       │   ├── core
│       │       │   │   ├── quickstart.py
│       │       │   │   └── requirements.txt
│       │       │   ├── langchain
│       │       │   │   ├── quickstart.py
│       │       │   │   └── requirements.txt
│       │       │   ├── llamaindex
│       │       │   │   ├── quickstart.py
│       │       │   │   └── requirements.txt
│       │       │   └── quickstart_test.py
│       │       └── shared
│       │           ├── cloud_setup.md
│       │           ├── configure_toolbox.md
│       │           └── database_setup.md
│       ├── how-to
│       │   ├── _index.md
│       │   ├── connect_via_geminicli.md
│       │   ├── connect_via_mcp.md
│       │   ├── connect-ide
│       │   │   ├── _index.md
│       │   │   ├── alloydb_pg_admin_mcp.md
│       │   │   ├── alloydb_pg_mcp.md
│       │   │   ├── bigquery_mcp.md
│       │   │   ├── cloud_sql_mssql_admin_mcp.md
│       │   │   ├── cloud_sql_mssql_mcp.md
│       │   │   ├── cloud_sql_mysql_admin_mcp.md
│       │   │   ├── cloud_sql_mysql_mcp.md
│       │   │   ├── cloud_sql_pg_admin_mcp.md
│       │   │   ├── cloud_sql_pg_mcp.md
│       │   │   ├── firestore_mcp.md
│       │   │   ├── looker_mcp.md
│       │   │   ├── mssql_mcp.md
│       │   │   ├── mysql_mcp.md
│       │   │   ├── neo4j_mcp.md
│       │   │   ├── postgres_mcp.md
│       │   │   ├── spanner_mcp.md
│       │   │   └── sqlite_mcp.md
│       │   ├── deploy_docker.md
│       │   ├── deploy_gke.md
│       │   ├── deploy_toolbox.md
│       │   ├── export_telemetry.md
│       │   └── toolbox-ui
│       │       ├── edit-headers.gif
│       │       ├── edit-headers.png
│       │       ├── index.md
│       │       ├── optional-param-checked.png
│       │       ├── optional-param-unchecked.png
│       │       ├── run-tool.gif
│       │       ├── tools.png
│       │       └── toolsets.png
│       ├── reference
│       │   ├── _index.md
│       │   ├── cli.md
│       │   └── prebuilt-tools.md
│       ├── resources
│       │   ├── _index.md
│       │   ├── authServices
│       │   │   ├── _index.md
│       │   │   └── google.md
│       │   ├── sources
│       │   │   ├── _index.md
│       │   │   ├── alloydb-admin.md
│       │   │   ├── alloydb-pg.md
│       │   │   ├── bigquery.md
│       │   │   ├── bigtable.md
│       │   │   ├── cassandra.md
│       │   │   ├── clickhouse.md
│       │   │   ├── cloud-monitoring.md
│       │   │   ├── cloud-sql-admin.md
│       │   │   ├── cloud-sql-mssql.md
│       │   │   ├── cloud-sql-mysql.md
│       │   │   ├── cloud-sql-pg.md
│       │   │   ├── couchbase.md
│       │   │   ├── dataplex.md
│       │   │   ├── dgraph.md
│       │   │   ├── firebird.md
│       │   │   ├── firestore.md
│       │   │   ├── http.md
│       │   │   ├── looker.md
│       │   │   ├── mongodb.md
│       │   │   ├── mssql.md
│       │   │   ├── mysql.md
│       │   │   ├── neo4j.md
│       │   │   ├── oceanbase.md
│       │   │   ├── oracle.md
│       │   │   ├── postgres.md
│       │   │   ├── redis.md
│       │   │   ├── spanner.md
│       │   │   ├── sqlite.md
│       │   │   ├── tidb.md
│       │   │   ├── trino.md
│       │   │   ├── valkey.md
│       │   │   └── yugabytedb.md
│       │   └── tools
│       │       ├── _index.md
│       │       ├── alloydb
│       │       │   ├── _index.md
│       │       │   ├── alloydb-create-cluster.md
│       │       │   ├── alloydb-create-instance.md
│       │       │   ├── alloydb-create-user.md
│       │       │   ├── alloydb-get-cluster.md
│       │       │   ├── alloydb-get-instance.md
│       │       │   ├── alloydb-get-user.md
│       │       │   ├── alloydb-list-clusters.md
│       │       │   ├── alloydb-list-instances.md
│       │       │   ├── alloydb-list-users.md
│       │       │   └── alloydb-wait-for-operation.md
│       │       ├── alloydbainl
│       │       │   ├── _index.md
│       │       │   └── alloydb-ai-nl.md
│       │       ├── bigquery
│       │       │   ├── _index.md
│       │       │   ├── bigquery-analyze-contribution.md
│       │       │   ├── bigquery-conversational-analytics.md
│       │       │   ├── bigquery-execute-sql.md
│       │       │   ├── bigquery-forecast.md
│       │       │   ├── bigquery-get-dataset-info.md
│       │       │   ├── bigquery-get-table-info.md
│       │       │   ├── bigquery-list-dataset-ids.md
│       │       │   ├── bigquery-list-table-ids.md
│       │       │   ├── bigquery-search-catalog.md
│       │       │   └── bigquery-sql.md
│       │       ├── bigtable
│       │       │   ├── _index.md
│       │       │   └── bigtable-sql.md
│       │       ├── cassandra
│       │       │   ├── _index.md
│       │       │   └── cassandra-cql.md
│       │       ├── clickhouse
│       │       │   ├── _index.md
│       │       │   ├── clickhouse-execute-sql.md
│       │       │   ├── clickhouse-list-databases.md
│       │       │   ├── clickhouse-list-tables.md
│       │       │   └── clickhouse-sql.md
│       │       ├── cloudmonitoring
│       │       │   ├── _index.md
│       │       │   └── cloud-monitoring-query-prometheus.md
│       │       ├── cloudsql
│       │       │   ├── _index.md
│       │       │   ├── cloudsqlcreatedatabase.md
│       │       │   ├── cloudsqlcreateusers.md
│       │       │   ├── cloudsqlgetinstances.md
│       │       │   ├── cloudsqllistdatabases.md
│       │       │   ├── cloudsqllistinstances.md
│       │       │   ├── cloudsqlmssqlcreateinstance.md
│       │       │   ├── cloudsqlmysqlcreateinstance.md
│       │       │   ├── cloudsqlpgcreateinstances.md
│       │       │   └── cloudsqlwaitforoperation.md
│       │       ├── couchbase
│       │       │   ├── _index.md
│       │       │   └── couchbase-sql.md
│       │       ├── dataform
│       │       │   ├── _index.md
│       │       │   └── dataform-compile-local.md
│       │       ├── dataplex
│       │       │   ├── _index.md
│       │       │   ├── dataplex-lookup-entry.md
│       │       │   ├── dataplex-search-aspect-types.md
│       │       │   └── dataplex-search-entries.md
│       │       ├── dgraph
│       │       │   ├── _index.md
│       │       │   └── dgraph-dql.md
│       │       ├── firebird
│       │       │   ├── _index.md
│       │       │   ├── firebird-execute-sql.md
│       │       │   └── firebird-sql.md
│       │       ├── firestore
│       │       │   ├── _index.md
│       │       │   ├── firestore-add-documents.md
│       │       │   ├── firestore-delete-documents.md
│       │       │   ├── firestore-get-documents.md
│       │       │   ├── firestore-get-rules.md
│       │       │   ├── firestore-list-collections.md
│       │       │   ├── firestore-query-collection.md
│       │       │   ├── firestore-query.md
│       │       │   ├── firestore-update-document.md
│       │       │   └── firestore-validate-rules.md
│       │       ├── http
│       │       │   ├── _index.md
│       │       │   └── http.md
│       │       ├── looker
│       │       │   ├── _index.md
│       │       │   ├── looker-add-dashboard-element.md
│       │       │   ├── looker-conversational-analytics.md
│       │       │   ├── looker-get-dashboards.md
│       │       │   ├── looker-get-dimensions.md
│       │       │   ├── looker-get-explores.md
│       │       │   ├── looker-get-filters.md
│       │       │   ├── looker-get-looks.md
│       │       │   ├── looker-get-measures.md
│       │       │   ├── looker-get-models.md
│       │       │   ├── looker-get-parameters.md
│       │       │   ├── looker-health-analyze.md
│       │       │   ├── looker-health-pulse.md
│       │       │   ├── looker-health-vacuum.md
│       │       │   ├── looker-make-dashboard.md
│       │       │   ├── looker-make-look.md
│       │       │   ├── looker-query-sql.md
│       │       │   ├── looker-query-url.md
│       │       │   ├── looker-query.md
│       │       │   └── looker-run-look.md
│       │       ├── mongodb
│       │       │   ├── _index.md
│       │       │   ├── mongodb-aggregate.md
│       │       │   ├── mongodb-delete-many.md
│       │       │   ├── mongodb-delete-one.md
│       │       │   ├── mongodb-find-one.md
│       │       │   ├── mongodb-find.md
│       │       │   ├── mongodb-insert-many.md
│       │       │   ├── mongodb-insert-one.md
│       │       │   ├── mongodb-update-many.md
│       │       │   └── mongodb-update-one.md
│       │       ├── mssql
│       │       │   ├── _index.md
│       │       │   ├── mssql-execute-sql.md
│       │       │   ├── mssql-list-tables.md
│       │       │   └── mssql-sql.md
│       │       ├── mysql
│       │       │   ├── _index.md
│       │       │   ├── mysql-execute-sql.md
│       │       │   ├── mysql-list-active-queries.md
│       │       │   ├── mysql-list-table-fragmentation.md
│       │       │   ├── mysql-list-tables-missing-unique-indexes.md
│       │       │   ├── mysql-list-tables.md
│       │       │   └── mysql-sql.md
│       │       ├── neo4j
│       │       │   ├── _index.md
│       │       │   ├── neo4j-cypher.md
│       │       │   ├── neo4j-execute-cypher.md
│       │       │   └── neo4j-schema.md
│       │       ├── oceanbase
│       │       │   ├── _index.md
│       │       │   ├── oceanbase-execute-sql.md
│       │       │   └── oceanbase-sql.md
│       │       ├── oracle
│       │       │   ├── _index.md
│       │       │   ├── oracle-execute-sql.md
│       │       │   └── oracle-sql.md
│       │       ├── postgres
│       │       │   ├── _index.md
│       │       │   ├── postgres-execute-sql.md
│       │       │   ├── postgres-list-active-queries.md
│       │       │   ├── postgres-list-available-extensions.md
│       │       │   ├── postgres-list-installed-extensions.md
│       │       │   ├── postgres-list-tables.md
│       │       │   └── postgres-sql.md
│       │       ├── redis
│       │       │   ├── _index.md
│       │       │   └── redis.md
│       │       ├── spanner
│       │       │   ├── _index.md
│       │       │   ├── spanner-execute-sql.md
│       │       │   ├── spanner-list-tables.md
│       │       │   └── spanner-sql.md
│       │       ├── sqlite
│       │       │   ├── _index.md
│       │       │   ├── sqlite-execute-sql.md
│       │       │   └── sqlite-sql.md
│       │       ├── tidb
│       │       │   ├── _index.md
│       │       │   ├── tidb-execute-sql.md
│       │       │   └── tidb-sql.md
│       │       ├── trino
│       │       │   ├── _index.md
│       │       │   ├── trino-execute-sql.md
│       │       │   └── trino-sql.md
│       │       ├── utility
│       │       │   ├── _index.md
│       │       │   └── wait.md
│       │       ├── valkey
│       │       │   ├── _index.md
│       │       │   └── valkey.md
│       │       └── yuagbytedb
│       │           ├── _index.md
│       │           └── yugabytedb-sql.md
│       ├── samples
│       │   ├── _index.md
│       │   ├── alloydb
│       │   │   ├── _index.md
│       │   │   ├── ai-nl
│       │   │   │   ├── alloydb_ai_nl.ipynb
│       │   │   │   └── index.md
│       │   │   └── mcp_quickstart.md
│       │   ├── bigquery
│       │   │   ├── _index.md
│       │   │   ├── colab_quickstart_bigquery.ipynb
│       │   │   ├── local_quickstart.md
│       │   │   └── mcp_quickstart
│       │   │       ├── _index.md
│       │   │       ├── inspector_tools.png
│       │   │       └── inspector.png
│       │   └── looker
│       │       ├── _index.md
│       │       ├── looker_gemini_oauth
│       │       │   ├── _index.md
│       │       │   ├── authenticated.png
│       │       │   ├── authorize.png
│       │       │   └── registration.png
│       │       ├── looker_gemini.md
│       │       └── looker_mcp_inspector
│       │           ├── _index.md
│       │           ├── inspector_tools.png
│       │           └── inspector.png
│       └── sdks
│           ├── _index.md
│           ├── go-sdk.md
│           ├── js-sdk.md
│           └── python-sdk.md
├── go.mod
├── go.sum
├── internal
│   ├── auth
│   │   ├── auth.go
│   │   └── google
│   │       └── google.go
│   ├── log
│   │   ├── handler.go
│   │   ├── log_test.go
│   │   ├── log.go
│   │   └── logger.go
│   ├── prebuiltconfigs
│   │   ├── prebuiltconfigs_test.go
│   │   ├── prebuiltconfigs.go
│   │   └── tools
│   │       ├── alloydb-postgres-admin.yaml
│   │       ├── alloydb-postgres-observability.yaml
│   │       ├── alloydb-postgres.yaml
│   │       ├── bigquery.yaml
│   │       ├── clickhouse.yaml
│   │       ├── cloud-sql-mssql-admin.yaml
│   │       ├── cloud-sql-mssql-observability.yaml
│   │       ├── cloud-sql-mssql.yaml
│   │       ├── cloud-sql-mysql-admin.yaml
│   │       ├── cloud-sql-mysql-observability.yaml
│   │       ├── cloud-sql-mysql.yaml
│   │       ├── cloud-sql-postgres-admin.yaml
│   │       ├── cloud-sql-postgres-observability.yaml
│   │       ├── cloud-sql-postgres.yaml
│   │       ├── dataplex.yaml
│   │       ├── firestore.yaml
│   │       ├── looker-conversational-analytics.yaml
│   │       ├── looker.yaml
│   │       ├── mssql.yaml
│   │       ├── mysql.yaml
│   │       ├── neo4j.yaml
│   │       ├── oceanbase.yaml
│   │       ├── postgres.yaml
│   │       ├── spanner-postgres.yaml
│   │       ├── spanner.yaml
│   │       └── sqlite.yaml
│   ├── server
│   │   ├── api_test.go
│   │   ├── api.go
│   │   ├── common_test.go
│   │   ├── config.go
│   │   ├── mcp
│   │   │   ├── jsonrpc
│   │   │   │   ├── jsonrpc_test.go
│   │   │   │   └── jsonrpc.go
│   │   │   ├── mcp.go
│   │   │   ├── util
│   │   │   │   └── lifecycle.go
│   │   │   ├── v20241105
│   │   │   │   ├── method.go
│   │   │   │   └── types.go
│   │   │   ├── v20250326
│   │   │   │   ├── method.go
│   │   │   │   └── types.go
│   │   │   └── v20250618
│   │   │       ├── method.go
│   │   │       └── types.go
│   │   ├── mcp_test.go
│   │   ├── mcp.go
│   │   ├── server_test.go
│   │   ├── server.go
│   │   ├── static
│   │   │   ├── assets
│   │   │   │   └── mcptoolboxlogo.png
│   │   │   ├── css
│   │   │   │   └── style.css
│   │   │   ├── index.html
│   │   │   ├── js
│   │   │   │   ├── auth.js
│   │   │   │   ├── loadTools.js
│   │   │   │   ├── mainContent.js
│   │   │   │   ├── navbar.js
│   │   │   │   ├── runTool.js
│   │   │   │   ├── toolDisplay.js
│   │   │   │   ├── tools.js
│   │   │   │   └── toolsets.js
│   │   │   ├── tools.html
│   │   │   └── toolsets.html
│   │   ├── web_test.go
│   │   └── web.go
│   ├── sources
│   │   ├── alloydbadmin
│   │   │   ├── alloydbadmin_test.go
│   │   │   └── alloydbadmin.go
│   │   ├── alloydbpg
│   │   │   ├── alloydb_pg_test.go
│   │   │   └── alloydb_pg.go
│   │   ├── bigquery
│   │   │   ├── bigquery_test.go
│   │   │   └── bigquery.go
│   │   ├── bigtable
│   │   │   ├── bigtable_test.go
│   │   │   └── bigtable.go
│   │   ├── cassandra
│   │   │   ├── cassandra_test.go
│   │   │   └── cassandra.go
│   │   ├── clickhouse
│   │   │   ├── clickhouse_test.go
│   │   │   └── clickhouse.go
│   │   ├── cloudmonitoring
│   │   │   ├── cloud_monitoring_test.go
│   │   │   └── cloud_monitoring.go
│   │   ├── cloudsqladmin
│   │   │   ├── cloud_sql_admin_test.go
│   │   │   └── cloud_sql_admin.go
│   │   ├── cloudsqlmssql
│   │   │   ├── cloud_sql_mssql_test.go
│   │   │   └── cloud_sql_mssql.go
│   │   ├── cloudsqlmysql
│   │   │   ├── cloud_sql_mysql_test.go
│   │   │   └── cloud_sql_mysql.go
│   │   ├── cloudsqlpg
│   │   │   ├── cloud_sql_pg_test.go
│   │   │   └── cloud_sql_pg.go
│   │   ├── couchbase
│   │   │   ├── couchbase_test.go
│   │   │   └── couchbase.go
│   │   ├── dataplex
│   │   │   ├── dataplex_test.go
│   │   │   └── dataplex.go
│   │   ├── dgraph
│   │   │   ├── dgraph_test.go
│   │   │   └── dgraph.go
│   │   ├── dialect.go
│   │   ├── firebird
│   │   │   ├── firebird_test.go
│   │   │   └── firebird.go
│   │   ├── firestore
│   │   │   ├── firestore_test.go
│   │   │   └── firestore.go
│   │   ├── http
│   │   │   ├── http_test.go
│   │   │   └── http.go
│   │   ├── ip_type.go
│   │   ├── looker
│   │   │   ├── looker_test.go
│   │   │   └── looker.go
│   │   ├── mongodb
│   │   │   ├── mongodb_test.go
│   │   │   └── mongodb.go
│   │   ├── mssql
│   │   │   ├── mssql_test.go
│   │   │   └── mssql.go
│   │   ├── mysql
│   │   │   ├── mysql_test.go
│   │   │   └── mysql.go
│   │   ├── neo4j
│   │   │   ├── neo4j_test.go
│   │   │   └── neo4j.go
│   │   ├── oceanbase
│   │   │   ├── oceanbase_test.go
│   │   │   └── oceanbase.go
│   │   ├── oracle
│   │   │   └── oracle.go
│   │   ├── postgres
│   │   │   ├── postgres_test.go
│   │   │   └── postgres.go
│   │   ├── redis
│   │   │   ├── redis_test.go
│   │   │   └── redis.go
│   │   ├── sources.go
│   │   ├── spanner
│   │   │   ├── spanner_test.go
│   │   │   └── spanner.go
│   │   ├── sqlite
│   │   │   ├── sqlite_test.go
│   │   │   └── sqlite.go
│   │   ├── tidb
│   │   │   ├── tidb_test.go
│   │   │   └── tidb.go
│   │   ├── trino
│   │   │   ├── trino_test.go
│   │   │   └── trino.go
│   │   ├── util.go
│   │   ├── valkey
│   │   │   ├── valkey_test.go
│   │   │   └── valkey.go
│   │   └── yugabytedb
│   │       ├── yugabytedb_test.go
│   │       └── yugabytedb.go
│   ├── telemetry
│   │   ├── instrumentation.go
│   │   └── telemetry.go
│   ├── testutils
│   │   └── testutils.go
│   ├── tools
│   │   ├── alloydb
│   │   │   ├── alloydbcreatecluster
│   │   │   │   ├── alloydbcreatecluster_test.go
│   │   │   │   └── alloydbcreatecluster.go
│   │   │   ├── alloydbcreateinstance
│   │   │   │   ├── alloydbcreateinstance_test.go
│   │   │   │   └── alloydbcreateinstance.go
│   │   │   ├── alloydbcreateuser
│   │   │   │   ├── alloydbcreateuser_test.go
│   │   │   │   └── alloydbcreateuser.go
│   │   │   ├── alloydbgetcluster
│   │   │   │   ├── alloydbgetcluster_test.go
│   │   │   │   └── alloydbgetcluster.go
│   │   │   ├── alloydbgetinstance
│   │   │   │   ├── alloydbgetinstance_test.go
│   │   │   │   └── alloydbgetinstance.go
│   │   │   ├── alloydbgetuser
│   │   │   │   ├── alloydbgetuser_test.go
│   │   │   │   └── alloydbgetuser.go
│   │   │   ├── alloydblistclusters
│   │   │   │   ├── alloydblistclusters_test.go
│   │   │   │   └── alloydblistclusters.go
│   │   │   ├── alloydblistinstances
│   │   │   │   ├── alloydblistinstances_test.go
│   │   │   │   └── alloydblistinstances.go
│   │   │   ├── alloydblistusers
│   │   │   │   ├── alloydblistusers_test.go
│   │   │   │   └── alloydblistusers.go
│   │   │   └── alloydbwaitforoperation
│   │   │       ├── alloydbwaitforoperation_test.go
│   │   │       └── alloydbwaitforoperation.go
│   │   ├── alloydbainl
│   │   │   ├── alloydbainl_test.go
│   │   │   └── alloydbainl.go
│   │   ├── bigquery
│   │   │   ├── bigqueryanalyzecontribution
│   │   │   │   ├── bigqueryanalyzecontribution_test.go
│   │   │   │   └── bigqueryanalyzecontribution.go
│   │   │   ├── bigquerycommon
│   │   │   │   ├── table_name_parser_test.go
│   │   │   │   ├── table_name_parser.go
│   │   │   │   └── util.go
│   │   │   ├── bigqueryconversationalanalytics
│   │   │   │   ├── bigqueryconversationalanalytics_test.go
│   │   │   │   └── bigqueryconversationalanalytics.go
│   │   │   ├── bigqueryexecutesql
│   │   │   │   ├── bigqueryexecutesql_test.go
│   │   │   │   └── bigqueryexecutesql.go
│   │   │   ├── bigqueryforecast
│   │   │   │   ├── bigqueryforecast_test.go
│   │   │   │   └── bigqueryforecast.go
│   │   │   ├── bigquerygetdatasetinfo
│   │   │   │   ├── bigquerygetdatasetinfo_test.go
│   │   │   │   └── bigquerygetdatasetinfo.go
│   │   │   ├── bigquerygettableinfo
│   │   │   │   ├── bigquerygettableinfo_test.go
│   │   │   │   └── bigquerygettableinfo.go
│   │   │   ├── bigquerylistdatasetids
│   │   │   │   ├── bigquerylistdatasetids_test.go
│   │   │   │   └── bigquerylistdatasetids.go
│   │   │   ├── bigquerylisttableids
│   │   │   │   ├── bigquerylisttableids_test.go
│   │   │   │   └── bigquerylisttableids.go
│   │   │   ├── bigquerysearchcatalog
│   │   │   │   ├── bigquerysearchcatalog_test.go
│   │   │   │   └── bigquerysearchcatalog.go
│   │   │   └── bigquerysql
│   │   │       ├── bigquerysql_test.go
│   │   │       └── bigquerysql.go
│   │   ├── bigtable
│   │   │   ├── bigtable_test.go
│   │   │   └── bigtable.go
│   │   ├── cassandra
│   │   │   └── cassandracql
│   │   │       ├── cassandracql_test.go
│   │   │       └── cassandracql.go
│   │   ├── clickhouse
│   │   │   ├── clickhouseexecutesql
│   │   │   │   ├── clickhouseexecutesql_test.go
│   │   │   │   └── clickhouseexecutesql.go
│   │   │   ├── clickhouselistdatabases
│   │   │   │   ├── clickhouselistdatabases_test.go
│   │   │   │   └── clickhouselistdatabases.go
│   │   │   ├── clickhouselisttables
│   │   │   │   ├── clickhouselisttables_test.go
│   │   │   │   └── clickhouselisttables.go
│   │   │   └── clickhousesql
│   │   │       ├── clickhousesql_test.go
│   │   │       └── clickhousesql.go
│   │   ├── cloudmonitoring
│   │   │   ├── cloudmonitoring_test.go
│   │   │   └── cloudmonitoring.go
│   │   ├── cloudsql
│   │   │   ├── cloudsqlcreatedatabase
│   │   │   │   ├── cloudsqlcreatedatabase_test.go
│   │   │   │   └── cloudsqlcreatedatabase.go
│   │   │   ├── cloudsqlcreateusers
│   │   │   │   ├── cloudsqlcreateusers_test.go
│   │   │   │   └── cloudsqlcreateusers.go
│   │   │   ├── cloudsqlgetinstances
│   │   │   │   ├── cloudsqlgetinstances_test.go
│   │   │   │   └── cloudsqlgetinstances.go
│   │   │   ├── cloudsqllistdatabases
│   │   │   │   ├── cloudsqllistdatabases_test.go
│   │   │   │   └── cloudsqllistdatabases.go
│   │   │   ├── cloudsqllistinstances
│   │   │   │   ├── cloudsqllistinstances_test.go
│   │   │   │   └── cloudsqllistinstances.go
│   │   │   └── cloudsqlwaitforoperation
│   │   │       ├── cloudsqlwaitforoperation_test.go
│   │   │       └── cloudsqlwaitforoperation.go
│   │   ├── cloudsqlmssql
│   │   │   └── cloudsqlmssqlcreateinstance
│   │   │       ├── cloudsqlmssqlcreateinstance_test.go
│   │   │       └── cloudsqlmssqlcreateinstance.go
│   │   ├── cloudsqlmysql
│   │   │   └── cloudsqlmysqlcreateinstance
│   │   │       ├── cloudsqlmysqlcreateinstance_test.go
│   │   │       └── cloudsqlmysqlcreateinstance.go
│   │   ├── cloudsqlpg
│   │   │   └── cloudsqlpgcreateinstances
│   │   │       ├── cloudsqlpgcreateinstances_test.go
│   │   │       └── cloudsqlpgcreateinstances.go
│   │   ├── common_test.go
│   │   ├── common.go
│   │   ├── couchbase
│   │   │   ├── couchbase_test.go
│   │   │   └── couchbase.go
│   │   ├── dataform
│   │   │   └── dataformcompilelocal
│   │   │       ├── dataformcompilelocal_test.go
│   │   │       └── dataformcompilelocal.go
│   │   ├── dataplex
│   │   │   ├── dataplexlookupentry
│   │   │   │   ├── dataplexlookupentry_test.go
│   │   │   │   └── dataplexlookupentry.go
│   │   │   ├── dataplexsearchaspecttypes
│   │   │   │   ├── dataplexsearchaspecttypes_test.go
│   │   │   │   └── dataplexsearchaspecttypes.go
│   │   │   └── dataplexsearchentries
│   │   │       ├── dataplexsearchentries_test.go
│   │   │       └── dataplexsearchentries.go
│   │   ├── dgraph
│   │   │   ├── dgraph_test.go
│   │   │   └── dgraph.go
│   │   ├── firebird
│   │   │   ├── firebirdexecutesql
│   │   │   │   ├── firebirdexecutesql_test.go
│   │   │   │   └── firebirdexecutesql.go
│   │   │   └── firebirdsql
│   │   │       ├── firebirdsql_test.go
│   │   │       └── firebirdsql.go
│   │   ├── firestore
│   │   │   ├── firestoreadddocuments
│   │   │   │   ├── firestoreadddocuments_test.go
│   │   │   │   └── firestoreadddocuments.go
│   │   │   ├── firestoredeletedocuments
│   │   │   │   ├── firestoredeletedocuments_test.go
│   │   │   │   └── firestoredeletedocuments.go
│   │   │   ├── firestoregetdocuments
│   │   │   │   ├── firestoregetdocuments_test.go
│   │   │   │   └── firestoregetdocuments.go
│   │   │   ├── firestoregetrules
│   │   │   │   ├── firestoregetrules_test.go
│   │   │   │   └── firestoregetrules.go
│   │   │   ├── firestorelistcollections
│   │   │   │   ├── firestorelistcollections_test.go
│   │   │   │   └── firestorelistcollections.go
│   │   │   ├── firestorequery
│   │   │   │   ├── firestorequery_test.go
│   │   │   │   └── firestorequery.go
│   │   │   ├── firestorequerycollection
│   │   │   │   ├── firestorequerycollection_test.go
│   │   │   │   └── firestorequerycollection.go
│   │   │   ├── firestoreupdatedocument
│   │   │   │   ├── firestoreupdatedocument_test.go
│   │   │   │   └── firestoreupdatedocument.go
│   │   │   ├── firestorevalidaterules
│   │   │   │   ├── firestorevalidaterules_test.go
│   │   │   │   └── firestorevalidaterules.go
│   │   │   └── util
│   │   │       ├── converter_test.go
│   │   │       ├── converter.go
│   │   │       ├── validator_test.go
│   │   │       └── validator.go
│   │   ├── http
│   │   │   ├── http_test.go
│   │   │   └── http.go
│   │   ├── http_method.go
│   │   ├── looker
│   │   │   ├── lookeradddashboardelement
│   │   │   │   ├── lookeradddashboardelement_test.go
│   │   │   │   └── lookeradddashboardelement.go
│   │   │   ├── lookercommon
│   │   │   │   ├── lookercommon_test.go
│   │   │   │   └── lookercommon.go
│   │   │   ├── lookerconversationalanalytics
│   │   │   │   ├── lookerconversationalanalytics_test.go
│   │   │   │   └── lookerconversationalanalytics.go
│   │   │   ├── lookergetdashboards
│   │   │   │   ├── lookergetdashboards_test.go
│   │   │   │   └── lookergetdashboards.go
│   │   │   ├── lookergetdimensions
│   │   │   │   ├── lookergetdimensions_test.go
│   │   │   │   └── lookergetdimensions.go
│   │   │   ├── lookergetexplores
│   │   │   │   ├── lookergetexplores_test.go
│   │   │   │   └── lookergetexplores.go
│   │   │   ├── lookergetfilters
│   │   │   │   ├── lookergetfilters_test.go
│   │   │   │   └── lookergetfilters.go
│   │   │   ├── lookergetlooks
│   │   │   │   ├── lookergetlooks_test.go
│   │   │   │   └── lookergetlooks.go
│   │   │   ├── lookergetmeasures
│   │   │   │   ├── lookergetmeasures_test.go
│   │   │   │   └── lookergetmeasures.go
│   │   │   ├── lookergetmodels
│   │   │   │   ├── lookergetmodels_test.go
│   │   │   │   └── lookergetmodels.go
│   │   │   ├── lookergetparameters
│   │   │   │   ├── lookergetparameters_test.go
│   │   │   │   └── lookergetparameters.go
│   │   │   ├── lookerhealthanalyze
│   │   │   │   ├── lookerhealthanalyze_test.go
│   │   │   │   └── lookerhealthanalyze.go
│   │   │   ├── lookerhealthpulse
│   │   │   │   ├── lookerhealthpulse_test.go
│   │   │   │   └── lookerhealthpulse.go
│   │   │   ├── lookerhealthvacuum
│   │   │   │   ├── lookerhealthvacuum_test.go
│   │   │   │   └── lookerhealthvacuum.go
│   │   │   ├── lookermakedashboard
│   │   │   │   ├── lookermakedashboard_test.go
│   │   │   │   └── lookermakedashboard.go
│   │   │   ├── lookermakelook
│   │   │   │   ├── lookermakelook_test.go
│   │   │   │   └── lookermakelook.go
│   │   │   ├── lookerquery
│   │   │   │   ├── lookerquery_test.go
│   │   │   │   └── lookerquery.go
│   │   │   ├── lookerquerysql
│   │   │   │   ├── lookerquerysql_test.go
│   │   │   │   └── lookerquerysql.go
│   │   │   ├── lookerqueryurl
│   │   │   │   ├── lookerqueryurl_test.go
│   │   │   │   └── lookerqueryurl.go
│   │   │   └── lookerrunlook
│   │   │       ├── lookerrunlook_test.go
│   │   │       └── lookerrunlook.go
│   │   ├── mongodb
│   │   │   ├── mongodbaggregate
│   │   │   │   ├── mongodbaggregate_test.go
│   │   │   │   └── mongodbaggregate.go
│   │   │   ├── mongodbdeletemany
│   │   │   │   ├── mongodbdeletemany_test.go
│   │   │   │   └── mongodbdeletemany.go
│   │   │   ├── mongodbdeleteone
│   │   │   │   ├── mongodbdeleteone_test.go
│   │   │   │   └── mongodbdeleteone.go
│   │   │   ├── mongodbfind
│   │   │   │   ├── mongodbfind_test.go
│   │   │   │   └── mongodbfind.go
│   │   │   ├── mongodbfindone
│   │   │   │   ├── mongodbfindone_test.go
│   │   │   │   └── mongodbfindone.go
│   │   │   ├── mongodbinsertmany
│   │   │   │   ├── mongodbinsertmany_test.go
│   │   │   │   └── mongodbinsertmany.go
│   │   │   ├── mongodbinsertone
│   │   │   │   ├── mongodbinsertone_test.go
│   │   │   │   └── mongodbinsertone.go
│   │   │   ├── mongodbupdatemany
│   │   │   │   ├── mongodbupdatemany_test.go
│   │   │   │   └── mongodbupdatemany.go
│   │   │   └── mongodbupdateone
│   │   │       ├── mongodbupdateone_test.go
│   │   │       └── mongodbupdateone.go
│   │   ├── mssql
│   │   │   ├── mssqlexecutesql
│   │   │   │   ├── mssqlexecutesql_test.go
│   │   │   │   └── mssqlexecutesql.go
│   │   │   ├── mssqllisttables
│   │   │   │   ├── mssqllisttables_test.go
│   │   │   │   └── mssqllisttables.go
│   │   │   └── mssqlsql
│   │   │       ├── mssqlsql_test.go
│   │   │       └── mssqlsql.go
│   │   ├── mysql
│   │   │   ├── mysqlcommon
│   │   │   │   └── mysqlcommon.go
│   │   │   ├── mysqlexecutesql
│   │   │   │   ├── mysqlexecutesql_test.go
│   │   │   │   └── mysqlexecutesql.go
│   │   │   ├── mysqllistactivequeries
│   │   │   │   ├── mysqllistactivequeries_test.go
│   │   │   │   └── mysqllistactivequeries.go
│   │   │   ├── mysqllisttablefragmentation
│   │   │   │   ├── mysqllisttablefragmentation_test.go
│   │   │   │   └── mysqllisttablefragmentation.go
│   │   │   ├── mysqllisttables
│   │   │   │   ├── mysqllisttables_test.go
│   │   │   │   └── mysqllisttables.go
│   │   │   ├── mysqllisttablesmissinguniqueindexes
│   │   │   │   ├── mysqllisttablesmissinguniqueindexes_test.go
│   │   │   │   └── mysqllisttablesmissinguniqueindexes.go
│   │   │   └── mysqlsql
│   │   │       ├── mysqlsql_test.go
│   │   │       └── mysqlsql.go
│   │   ├── neo4j
│   │   │   ├── neo4jcypher
│   │   │   │   ├── neo4jcypher_test.go
│   │   │   │   └── neo4jcypher.go
│   │   │   ├── neo4jexecutecypher
│   │   │   │   ├── classifier
│   │   │   │   │   ├── classifier_test.go
│   │   │   │   │   └── classifier.go
│   │   │   │   ├── neo4jexecutecypher_test.go
│   │   │   │   └── neo4jexecutecypher.go
│   │   │   └── neo4jschema
│   │   │       ├── cache
│   │   │       │   ├── cache_test.go
│   │   │       │   └── cache.go
│   │   │       ├── helpers
│   │   │       │   ├── helpers_test.go
│   │   │       │   └── helpers.go
│   │   │       ├── neo4jschema_test.go
│   │   │       ├── neo4jschema.go
│   │   │       └── types
│   │   │           └── types.go
│   │   ├── oceanbase
│   │   │   ├── oceanbaseexecutesql
│   │   │   │   ├── oceanbaseexecutesql_test.go
│   │   │   │   └── oceanbaseexecutesql.go
│   │   │   └── oceanbasesql
│   │   │       ├── oceanbasesql_test.go
│   │   │       └── oceanbasesql.go
│   │   ├── oracle
│   │   │   ├── oracleexecutesql
│   │   │   │   └── oracleexecutesql.go
│   │   │   └── oraclesql
│   │   │       └── oraclesql.go
│   │   ├── parameters_test.go
│   │   ├── parameters.go
│   │   ├── postgres
│   │   │   ├── postgresexecutesql
│   │   │   │   ├── postgresexecutesql_test.go
│   │   │   │   └── postgresexecutesql.go
│   │   │   ├── postgreslistactivequeries
│   │   │   │   ├── postgreslistactivequeries_test.go
│   │   │   │   └── postgreslistactivequeries.go
│   │   │   ├── postgreslistavailableextensions
│   │   │   │   ├── postgreslistavailableextensions_test.go
│   │   │   │   └── postgreslistavailableextensions.go
│   │   │   ├── postgreslistinstalledextensions
│   │   │   │   ├── postgreslistinstalledextensions_test.go
│   │   │   │   └── postgreslistinstalledextensions.go
│   │   │   ├── postgreslisttables
│   │   │   │   ├── postgreslisttables_test.go
│   │   │   │   └── postgreslisttables.go
│   │   │   └── postgressql
│   │   │       ├── postgressql_test.go
│   │   │       └── postgressql.go
│   │   ├── redis
│   │   │   ├── redis_test.go
│   │   │   └── redis.go
│   │   ├── spanner
│   │   │   ├── spannerexecutesql
│   │   │   │   ├── spannerexecutesql_test.go
│   │   │   │   └── spannerexecutesql.go
│   │   │   ├── spannerlisttables
│   │   │   │   ├── spannerlisttables_test.go
│   │   │   │   └── spannerlisttables.go
│   │   │   └── spannersql
│   │   │       ├── spanner_test.go
│   │   │       └── spannersql.go
│   │   ├── sqlite
│   │   │   ├── sqliteexecutesql
│   │   │   │   ├── sqliteexecutesql_test.go
│   │   │   │   └── sqliteexecutesql.go
│   │   │   └── sqlitesql
│   │   │       ├── sqlitesql_test.go
│   │   │       └── sqlitesql.go
│   │   ├── tidb
│   │   │   ├── tidbexecutesql
│   │   │   │   ├── tidbexecutesql_test.go
│   │   │   │   └── tidbexecutesql.go
│   │   │   └── tidbsql
│   │   │       ├── tidbsql_test.go
│   │   │       └── tidbsql.go
│   │   ├── tools_test.go
│   │   ├── tools.go
│   │   ├── toolsets.go
│   │   ├── trino
│   │   │   ├── trinoexecutesql
│   │   │   │   ├── trinoexecutesql_test.go
│   │   │   │   └── trinoexecutesql.go
│   │   │   └── trinosql
│   │   │       ├── trinosql_test.go
│   │   │       └── trinosql.go
│   │   ├── utility
│   │   │   └── wait
│   │   │       ├── wait_test.go
│   │   │       └── wait.go
│   │   ├── valkey
│   │   │   ├── valkey_test.go
│   │   │   └── valkey.go
│   │   └── yugabytedbsql
│   │       ├── yugabytedbsql_test.go
│   │       └── yugabytedbsql.go
│   └── util
│       └── util.go
├── LICENSE
├── logo.png
├── main.go
├── README.md
└── tests
    ├── alloydb
    │   ├── alloydb_integration_test.go
    │   └── alloydb_wait_for_operation_test.go
    ├── alloydbainl
    │   └── alloydb_ai_nl_integration_test.go
    ├── alloydbpg
    │   └── alloydb_pg_integration_test.go
    ├── auth.go
    ├── bigquery
    │   └── bigquery_integration_test.go
    ├── bigtable
    │   └── bigtable_integration_test.go
    ├── cassandra
    │   └── cassandra_integration_test.go
    ├── clickhouse
    │   └── clickhouse_integration_test.go
    ├── cloudmonitoring
    │   └── cloud_monitoring_integration_test.go
    ├── cloudsql
    │   ├── cloud_sql_create_database_test.go
    │   ├── cloud_sql_create_users_test.go
    │   ├── cloud_sql_get_instances_test.go
    │   ├── cloud_sql_list_databases_test.go
    │   ├── cloudsql_list_instances_test.go
    │   └── cloudsql_wait_for_operation_test.go
    ├── cloudsqlmssql
    │   ├── cloud_sql_mssql_create_instance_integration_test.go
    │   └── cloud_sql_mssql_integration_test.go
    ├── cloudsqlmysql
    │   ├── cloud_sql_mysql_create_instance_integration_test.go
    │   └── cloud_sql_mysql_integration_test.go
    ├── cloudsqlpg
    │   ├── cloud_sql_pg_create_instances_test.go
    │   └── cloud_sql_pg_integration_test.go
    ├── common.go
    ├── couchbase
    │   └── couchbase_integration_test.go
    ├── dataform
    │   └── dataform_integration_test.go
    ├── dataplex
    │   └── dataplex_integration_test.go
    ├── dgraph
    │   └── dgraph_integration_test.go
    ├── firebird
    │   └── firebird_integration_test.go
    ├── firestore
    │   └── firestore_integration_test.go
    ├── http
    │   └── http_integration_test.go
    ├── looker
    │   └── looker_integration_test.go
    ├── mongodb
    │   └── mongodb_integration_test.go
    ├── mssql
    │   └── mssql_integration_test.go
    ├── mysql
    │   └── mysql_integration_test.go
    ├── neo4j
    │   └── neo4j_integration_test.go
    ├── oceanbase
    │   └── oceanbase_integration_test.go
    ├── option.go
    ├── oracle
    │   └── oracle_integration_test.go
    ├── postgres
    │   └── postgres_integration_test.go
    ├── redis
    │   └── redis_test.go
    ├── server.go
    ├── source.go
    ├── spanner
    │   └── spanner_integration_test.go
    ├── sqlite
    │   └── sqlite_integration_test.go
    ├── tidb
    │   └── tidb_integration_test.go
    ├── tool.go
    ├── trino
    │   └── trino_integration_test.go
    ├── utility
    │   └── wait_integration_test.go
    ├── valkey
    │   └── valkey_test.go
    └── yugabytedb
        └── yugabytedb_integration_test.go
```

# Files

--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------

```
[submodule "docs2/themes/godocs"]
	path = docs2/themes/godocs
	url = https://github.com/themefisher/godocs.git

```

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
# direnv
.envrc

# vscode
.vscode/

# idea
.idea/

# npm
node_modules

# hugo
.hugo/public/
.hugo/resources/_gen
.hugo_build.lock

# coverage
.coverage

# executable
genai-toolbox
toolbox

```

--------------------------------------------------------------------------------
/.golangci.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2024 Google LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

version: "2"
linters:
  enable:
    - errcheck
    - govet
    - ineffassign
    - staticcheck
    - unused
  exclusions:
    presets:
      - std-error-handling
issues:
  fix: true
formatters:
  enable:
    - goimports
  settings:
    gofmt:
      rewrite-rules:
        - pattern: interface{}
          replacement: any
        - pattern: a[b:len(a)]
          replacement: a[b:]

```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
![logo](./logo.png)

# MCP Toolbox for Databases

[![Docs](https://img.shields.io/badge/docs-MCP_Toolbox-blue)](https://googleapis.github.io/genai-toolbox/)
[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=flat&logo=discord&logoColor=white)](https://discord.gg/Dmm69peqjh)
[![Medium](https://img.shields.io/badge/Medium-12100E?style=flat&logo=medium&logoColor=white)](https://medium.com/@mcp_toolbox)
[![Go Report Card](https://goreportcard.com/badge/github.com/googleapis/genai-toolbox)](https://goreportcard.com/report/github.com/googleapis/genai-toolbox)

> [!NOTE]
> MCP Toolbox for Databases is currently in beta, and may see breaking
> changes until the first stable release (v1.0).

MCP Toolbox for Databases is an open source MCP server for databases. It enables
you to develop tools easier, faster, and more securely by handling the complexities
such as connection pooling, authentication, and more.

This README provides a brief overview. For comprehensive details, see the [full
documentation](https://googleapis.github.io/genai-toolbox/).

> [!NOTE]
> This solution was originally named “Gen AI Toolbox for Databases” as
> its initial development predated MCP, but was renamed to align with recently
> added MCP compatibility.

<!-- TOC ignore:true -->
## Table of Contents

<!-- TOC -->

- [Why Toolbox?](#why-toolbox)
- [General Architecture](#general-architecture)
- [Getting Started](#getting-started)
  - [Installing the server](#installing-the-server)
  - [Running the server](#running-the-server)
  - [Integrating your application](#integrating-your-application)
- [Configuration](#configuration)
  - [Sources](#sources)
  - [Tools](#tools)
  - [Toolsets](#toolsets)
- [Versioning](#versioning)
  - [Pre-1.0.0 Versioning](#pre-100-versioning)
  - [Post-1.0.0 Versioning](#post-100-versioning)
- [Contributing](#contributing)
- [Community](#community)

<!-- /TOC -->

## Why Toolbox?

Toolbox helps you build Gen AI tools that let your agents access data in your
database. Toolbox provides:

- **Simplified development**: Integrate tools to your agent in less than 10
  lines of code, reuse tools between multiple agents or frameworks, and deploy
  new versions of tools more easily.
- **Better performance**: Best practices such as connection pooling,
  authentication, and more.
- **Enhanced security**: Integrated auth for more secure access to your data
- **End-to-end observability**: Out of the box metrics and tracing with built-in
  support for OpenTelemetry.

**⚡ Supercharge Your Workflow with an AI Database Assistant ⚡**

Stop context-switching and let your AI assistant become a true co-developer. By
[connecting your IDE to your databases with MCP Toolbox][connect-ide], you can
delegate complex and time-consuming database tasks, allowing you to build faster
and focus on what matters. This isn't just about code completion; it's about
giving your AI the context it needs to handle the entire development lifecycle.

Here’s how it will save you time:

- **Query in Plain English**: Interact with your data using natural language
  right from your IDE. Ask complex questions like, *"How many orders were
  delivered in 2024, and what items were in them?"* without writing any SQL.
- **Automate Database Management**: Simply describe your data needs, and let the
  AI assistant manage your database for you. It can handle generating queries,
  creating tables, adding indexes, and more.
- **Generate Context-Aware Code**: Empower your AI assistant to generate
  application code and tests with a deep understanding of your real-time
  database schema.  This accelerates the development cycle by ensuring the
  generated code is directly usable.
- **Slash Development Overhead**: Radically reduce the time spent on manual
  setup and boilerplate. MCP Toolbox helps streamline lengthy database
  configurations, repetitive code, and error-prone schema migrations.

Learn [how to connect your AI tools (IDEs) to Toolbox using MCP][connect-ide].

[connect-ide]: https://googleapis.github.io/genai-toolbox/how-to/connect-ide/

## General Architecture

Toolbox sits between your application's orchestration framework and your
database, providing a control plane that is used to modify, distribute, or
invoke tools. It simplifies the management of your tools by providing you with a
centralized location to store and update tools, allowing you to share tools
between agents and applications and update those tools without necessarily
redeploying your application.

![architecture](./docs/en/getting-started/introduction/architecture.png)

## Getting Started

### Installing the server

For the latest version, check the [releases page][releases] and use the
following instructions for your OS and CPU architecture.

[releases]: https://github.com/googleapis/genai-toolbox/releases

<details open>
<summary>Binary</summary>

To install Toolbox as a binary:

<!-- {x-release-please-start-version} -->
> <details>
> <summary>Linux (AMD64)</summary>
>
> To install Toolbox as a binary on Linux (AMD64):
>
> ```sh
> # see releases page for other versions
> export VERSION=0.17.0
> curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
> chmod +x toolbox
> ```
>
> </details>
> <details>
> <summary>macOS (Apple Silicon)</summary>
>
> To install Toolbox as a binary on macOS (Apple Silicon):
>
> ```sh
> # see releases page for other versions
> export VERSION=0.17.0
> curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox
> chmod +x toolbox
> ```
>
> </details>
> <details>
> <summary>macOS (Intel)</summary>
>
> To install Toolbox as a binary on macOS (Intel):
>
> ```sh
> # see releases page for other versions
> export VERSION=0.17.0
> curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox
> chmod +x toolbox
> ```
>
> </details>
> <details>
> <summary>Windows (AMD64)</summary>
>
> To install Toolbox as a binary on Windows (AMD64):
>
> ```powershell
> # see releases page for other versions
> $VERSION = "0.17.0"
> Invoke-WebRequest -Uri "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe" -OutFile "toolbox.exe"
> ```
>
> </details>
</details>

<details>
<summary>Container image</summary>
You can also install Toolbox as a container:

```sh
# see releases page for other versions
export VERSION=0.17.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
```

</details>

<details>
<summary>Homebrew</summary>

To install Toolbox using Homebrew on macOS or Linux:

```sh
brew install mcp-toolbox
```

</details>

<details>
<summary>Compile from source</summary>

To install from source, ensure you have the latest version of
[Go installed](https://go.dev/doc/install), and then run the following command:

```sh
go install github.com/googleapis/[email protected]
```
<!-- {x-release-please-end} -->

</details>

<details>
<summary>Gemini CLI Extensions</summary>

To install Gemini CLI Extensions for MCP Toolbox, run the following command:

```sh
gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox
```

</details>

### Running the server

[Configure](#configuration) a `tools.yaml` to define your tools, and then
execute `toolbox` to start the server:

<details open>
<summary>Binary</summary>

To run Toolbox from binary:

```sh
./toolbox --tools-file "tools.yaml"
```

ⓘ **NOTE:**  
Toolbox enables dynamic reloading by default. To disable, use the
`--disable-reload` flag.

</details>

<details>

<summary>Container image</summary>

To run the server after pulling the [container image](#installing-the-server):

```sh
export VERSION=0.11.0 # Use the version you pulled
docker run -p 5000:5000 \
-v $(pwd)/tools.yaml:/app/tools.yaml \
us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION \
--tools-file "/app/tools.yaml"
```

ⓘ **NOTE:**  
The `-v` flag mounts your local `tools.yaml` into the container, and `-p` maps
the container's port `5000` to your host's port `5000`.

</details>

<details>

<summary>Source</summary>

To run the server directly from source, navigate to the project root directory
and run:

```sh
go run .
```

ⓘ **NOTE:**  
This command runs the project from source, and is more suitable for development
and testing. It does **not** compile a binary into your `$GOPATH`. If you want
to compile a binary instead, refer the [Developer
Documentation](./DEVELOPER.md#building-the-binary).

</details>

<details>

<summary>Homebrew</summary>

If you installed Toolbox using [Homebrew](https://brew.sh/), the `toolbox`
binary is available in your system path. You can start the server with the same
command:

```sh
toolbox --tools-file "tools.yaml"
```

</details>

<details>

<summary>Gemini CLI</summary>

Interact with your custom tools using natural language. Check
[gemini-cli-extensions/mcp-toolbox](https://github.com/gemini-cli-extensions/mcp-toolbox)
for more information.

</details>

You can use `toolbox help` for a full list of flags! To stop the server, send a
terminate signal (`ctrl+c` on most platforms).

For more detailed documentation on deploying to different environments, check
out the resources in the [How-to
section](https://googleapis.github.io/genai-toolbox/how-to/)

### Integrating your application

Once your server is up and running, you can load the tools into your
application. See below the list of Client SDKs for using various frameworks:

<details open>
  <summary>Python (<a href="https://github.com/googleapis/mcp-toolbox-sdk-python">Github</a>)</summary>
  <br>
  <blockquote>

  <details open>
    <summary>Core</summary>

1. Install [Toolbox Core SDK][toolbox-core]:

    ```bash
    pip install toolbox-core
    ```

1. Load tools:

    ```python
    from toolbox_core import ToolboxClient

    # update the url to point to your server
    async with ToolboxClient("http://127.0.0.1:5000") as client:

        # these tools can be passed to your application!
        tools = await client.load_toolset("toolset_name")
    ```

For more detailed instructions on using the Toolbox Core SDK, see the
[project's README][toolbox-core-readme].

[toolbox-core]: https://pypi.org/project/toolbox-core/
[toolbox-core-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core/README.md

  </details>
  <details>
    <summary>LangChain / LangGraph</summary>

1. Install [Toolbox LangChain SDK][toolbox-langchain]:

    ```bash
    pip install toolbox-langchain
    ```

1. Load tools:

    ```python
    from toolbox_langchain import ToolboxClient

    # update the url to point to your server
    async with ToolboxClient("http://127.0.0.1:5000") as client:

        # these tools can be passed to your application!
        tools = client.load_toolset()
    ```

    For more detailed instructions on using the Toolbox LangChain SDK, see the
    [project's README][toolbox-langchain-readme].

    [toolbox-langchain]: https://pypi.org/project/toolbox-langchain/
    [toolbox-langchain-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/packages/toolbox-langchain/README.md

  </details>
  <details>
    <summary>LlamaIndex</summary>

1. Install [Toolbox Llamaindex SDK][toolbox-llamaindex]:

    ```bash
    pip install toolbox-llamaindex
    ```

1. Load tools:

    ```python
    from toolbox_llamaindex import ToolboxClient

    # update the url to point to your server
    async with ToolboxClient("http://127.0.0.1:5000") as client:

        # these tools can be passed to your application!
        tools = client.load_toolset()
    ```

    For more detailed instructions on using the Toolbox Llamaindex SDK, see the
    [project's README][toolbox-llamaindex-readme].

    [toolbox-llamaindex]: https://pypi.org/project/toolbox-llamaindex/
    [toolbox-llamaindex-readme]: https://github.com/googleapis/genai-toolbox-llamaindex-python/blob/main/README.md

  </details>
</details>
</blockquote>
<details>
  <summary>Javascript/Typescript (<a href="https://github.com/googleapis/mcp-toolbox-sdk-js">Github</a>)</summary>
  <br>
  <blockquote>

  <details open>
    <summary>Core</summary>

1. Install [Toolbox Core SDK][toolbox-core-js]:

    ```bash
    npm install @toolbox-sdk/core
    ```

1. Load tools:

    ```javascript
    import { ToolboxClient } from '@toolbox-sdk/core';

    // update the url to point to your server
    const URL = 'http://127.0.0.1:5000';
    let client = new ToolboxClient(URL);

    // these tools can be passed to your application!
    const tools = await client.loadToolset('toolsetName');
    ```

    For more detailed instructions on using the Toolbox Core SDK, see the
    [project's README][toolbox-core-js-readme].

    [toolbox-core-js]: https://www.npmjs.com/package/@toolbox-sdk/core
    [toolbox-core-js-readme]: https://github.com/googleapis/mcp-toolbox-sdk-js/blob/main/packages/toolbox-core/README.md

  </details>
  <details>
    <summary>LangChain / LangGraph</summary>

1. Install [Toolbox Core SDK][toolbox-core-js]:

    ```bash
    npm install @toolbox-sdk/core
    ```

2. Load tools:

    ```javascript
    import { ToolboxClient } from '@toolbox-sdk/core';

    // update the url to point to your server
    const URL = 'http://127.0.0.1:5000';
    let client = new ToolboxClient(URL);

    // these tools can be passed to your application!
    const toolboxTools = await client.loadToolset('toolsetName');

    // Define the basics of the tool: name, description, schema and core logic
    const getTool = (toolboxTool) => tool(currTool, {
        name: toolboxTool.getName(),
        description: toolboxTool.getDescription(),
        schema: toolboxTool.getParamSchema()
    });

    // Use these tools in your Langchain/Langraph applications
    const tools = toolboxTools.map(getTool);
    ```

  </details>
  <details>
    <summary>Genkit</summary>

1. Install [Toolbox Core SDK][toolbox-core-js]:

    ```bash
    npm install @toolbox-sdk/core
    ```

2. Load tools:

    ```javascript
    import { ToolboxClient } from '@toolbox-sdk/core';
    import { genkit } from 'genkit';

    // Initialise genkit
    const ai = genkit({
        plugins: [
            googleAI({
                apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY
            })
        ],
        model: googleAI.model('gemini-2.0-flash'),
    });

    // update the url to point to your server
    const URL = 'http://127.0.0.1:5000';
    let client = new ToolboxClient(URL);

    // these tools can be passed to your application!
    const toolboxTools = await client.loadToolset('toolsetName');

    // Define the basics of the tool: name, description, schema and core logic
    const getTool = (toolboxTool) => ai.defineTool({
        name: toolboxTool.getName(),
        description: toolboxTool.getDescription(),
        schema: toolboxTool.getParamSchema()
    }, toolboxTool)

    // Use these tools in your Genkit applications
    const tools = toolboxTools.map(getTool);
    ```

  </details>
</details>
</blockquote>
<details>
  <summary>Go (<a href="https://github.com/googleapis/mcp-toolbox-sdk-go">Github</a>)</summary>
  <br>
  <blockquote>

  <details open>
    <summary>Core</summary>

1. Install [Toolbox Go SDK][toolbox-go]:

    ```bash
    go get github.com/googleapis/mcp-toolbox-sdk-go
    ```

1. Load tools:

    ```go
    package main

    import (
      "github.com/googleapis/mcp-toolbox-sdk-go/core"
      "context"
    )

    func main() {
      // Make sure to add the error checks
      // update the url to point to your server
      URL := "http://127.0.0.1:5000";
      ctx := context.Background()

      client, err := core.NewToolboxClient(URL)

      // Framework agnostic tools
      tools, err := client.LoadToolset("toolsetName", ctx)
    }
    ```

    For more detailed instructions on using the Toolbox Go SDK, see the
    [project's README][toolbox-core-go-readme].

    [toolbox-go]: https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core
    [toolbox-core-go-readme]: https://github.com/googleapis/mcp-toolbox-sdk-go/blob/main/core/README.md

  </details>
  <details>
    <summary>LangChain Go</summary>

1. Install [Toolbox Go SDK][toolbox-go]:

    ```bash
    go get github.com/googleapis/mcp-toolbox-sdk-go
    ```

2. Load tools:

    ```go
    package main

    import (
      "context"
      "encoding/json"

      "github.com/googleapis/mcp-toolbox-sdk-go/core"
      "github.com/tmc/langchaingo/llms"
    )

    func main() {
      // Make sure to add the error checks
      // update the url to point to your server
      URL := "http://127.0.0.1:5000"
      ctx := context.Background()

      client, err := core.NewToolboxClient(URL)

      // Framework agnostic tool
      tool, err := client.LoadTool("toolName", ctx)

      // Fetch the tool's input schema
      inputschema, err := tool.InputSchema()

      var paramsSchema map[string]any
      _ = json.Unmarshal(inputschema, &paramsSchema)

      // Use this tool with LangChainGo
      langChainTool := llms.Tool{
        Type: "function",
        Function: &llms.FunctionDefinition{
          Name:        tool.Name(),
          Description: tool.Description(),
          Parameters:  paramsSchema,
        },
      }
    }

    ```

  </details>
  <details>
    <summary>Genkit</summary>

1. Install [Toolbox Go SDK][toolbox-go]:

    ```bash
    go get github.com/googleapis/mcp-toolbox-sdk-go
    ```

2. Load tools:

    ```go
    package main
    import (
      "context"
      "log"

      "github.com/firebase/genkit/go/genkit"
      "github.com/googleapis/mcp-toolbox-sdk-go/core"
      "github.com/googleapis/mcp-toolbox-sdk-go/tbgenkit"
    )

    func main() {
      // Make sure to add the error checks
      // Update the url to point to your server
      URL := "http://127.0.0.1:5000"
      ctx := context.Background()
      g := genkit.Init(ctx)

      client, err := core.NewToolboxClient(URL)

      // Framework agnostic tool
      tool, err := client.LoadTool("toolName", ctx)

      // Convert the tool using the tbgenkit package
      // Use this tool with Genkit Go
      genkitTool, err := tbgenkit.ToGenkitTool(tool, g)
      if err != nil {
        log.Fatalf("Failed to convert tool: %v\n", err)
      }
      log.Printf("Successfully converted tool: %s", genkitTool.Name())
    }
    ```

  </details>
  <details>
    <summary>Go GenAI</summary>

1. Install [Toolbox Go SDK][toolbox-go]:

    ```bash
    go get github.com/googleapis/mcp-toolbox-sdk-go
    ```

2. Load tools:

    ```go
    package main

    import (
      "context"
      "encoding/json"

      "github.com/googleapis/mcp-toolbox-sdk-go/core"
      "google.golang.org/genai"
    )

    func main() {
      // Make sure to add the error checks
      // Update the url to point to your server
      URL := "http://127.0.0.1:5000"
      ctx := context.Background()

      client, err := core.NewToolboxClient(URL)

      // Framework agnostic tool
      tool, err := client.LoadTool("toolName", ctx)

      // Fetch the tool's input schema
      inputschema, err := tool.InputSchema()

      var schema *genai.Schema
      _ = json.Unmarshal(inputschema, &schema)

      funcDeclaration := &genai.FunctionDeclaration{
        Name:        tool.Name(),
        Description: tool.Description(),
        Parameters:  schema,
      }

      // Use this tool with Go GenAI
      genAITool := &genai.Tool{
        FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration},
      }
    }
    ```

  </details>
  <details>
    <summary>OpenAI Go</summary>

1. Install [Toolbox Go SDK][toolbox-go]:

    ```bash
    go get github.com/googleapis/mcp-toolbox-sdk-go
    ```

2. Load tools:

    ```go
    package main

    import (
      "context"
      "encoding/json"

      "github.com/googleapis/mcp-toolbox-sdk-go/core"
      openai "github.com/openai/openai-go"
    )

    func main() {
      // Make sure to add the error checks
      // Update the url to point to your server
      URL := "http://127.0.0.1:5000"
      ctx := context.Background()

      client, err := core.NewToolboxClient(URL)

      // Framework agnostic tool
      tool, err := client.LoadTool("toolName", ctx)

      // Fetch the tool's input schema
      inputschema, err := tool.InputSchema()

      var paramsSchema openai.FunctionParameters
      _ = json.Unmarshal(inputschema, &paramsSchema)

      // Use this tool with OpenAI Go
      openAITool := openai.ChatCompletionToolParam{
        Function: openai.FunctionDefinitionParam{
          Name:        tool.Name(),
          Description: openai.String(tool.Description()),
          Parameters:  paramsSchema,
        },
      }

    }
    ```

  </details>
</details>
</blockquote>
</details>

## Configuration

The primary way to configure Toolbox is through the `tools.yaml` file. If you
have multiple files, you can tell toolbox which to load with the `--tools-file
tools.yaml` flag.

You can find more detailed reference documentation to all resource types in the
[Resources](https://googleapis.github.io/genai-toolbox/resources/).

### Sources

The `sources` section of your `tools.yaml` defines what data sources your
Toolbox should have access to. Most tools will have at least one source to
execute against.

```yaml
sources:
  my-pg-source:
    kind: postgres
    host: 127.0.0.1
    port: 5432
    database: toolbox_db
    user: toolbox_user
    password: my-password
```

For more details on configuring different types of sources, see the
[Sources](https://googleapis.github.io/genai-toolbox/resources/sources).

### Tools

The `tools` section of a `tools.yaml` define the actions an agent can take: what
kind of tool it is, which source(s) it affects, what parameters it uses, etc.

```yaml
tools:
  search-hotels-by-name:
    kind: postgres-sql
    source: my-pg-source
    description: Search for hotels based on name.
    parameters:
      - name: name
        type: string
        description: The name of the hotel.
    statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
```

For more details on configuring different types of tools, see the
[Tools](https://googleapis.github.io/genai-toolbox/resources/tools).

### Toolsets

The `toolsets` section of your `tools.yaml` allows you to define groups of tools
that you want to be able to load together. This can be useful for defining
different groups based on agent or application.

```yaml
toolsets:
    my_first_toolset:
        - my_first_tool
        - my_second_tool
    my_second_toolset:
        - my_second_tool
        - my_third_tool
```

You can load toolsets by name:

```python
# This will load all tools
all_tools = client.load_toolset()

# This will only load the tools listed in 'my_second_toolset'
my_second_toolset = client.load_toolset("my_second_toolset")
```

## Versioning

This project uses [semantic versioning](https://semver.org/) (`MAJOR.MINOR.PATCH`).
Since the project is in a pre-release stage (version `0.x.y`), we follow the
standard conventions for initial  development:

### Pre-1.0.0 Versioning

While the major version is `0`, the public API should be considered unstable.
The version will be incremented  as follows:

- **`0.MINOR.PATCH`**: The **MINOR** version is incremented when we add
  new functionality or make breaking, incompatible API changes.
- **`0.MINOR.PATCH`**: The **PATCH** version is incremented for
  backward-compatible bug fixes.

### Post-1.0.0 Versioning

Once the project reaches a stable `1.0.0` release, the versioning will follow
the more common convention:

- **`MAJOR.MINOR.PATCH`**: Incremented for incompatible API changes.
- **`MAJOR.MINOR.PATCH`**: Incremented for new, backward-compatible functionality.
- **`MAJOR.MINOR.PATCH`**: Incremented for backward-compatible bug fixes.

The public API that this applies to is the CLI associated with Toolbox, the
interactions with official SDKs, and the definitions in the `tools.yaml` file.

## Contributing

Contributions are welcome. Please, see the [CONTRIBUTING](CONTRIBUTING.md)
to get started.

Please note that this project is released with a Contributor Code of Conduct.
By participating in this project you agree to abide by its terms. See
[Contributor Code of Conduct](CODE_OF_CONDUCT.md) for more information.

## Community

Join our [discord community](https://discord.gg/GQrFB3Ec3W) to connect with our developers!

```

--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------

```markdown
# Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of
experience, education, socio-economic status, nationality, personal appearance,
race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
    advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
    address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
    professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, or to ban temporarily or permanently any
contributor for other behaviors that they deem inappropriate, threatening,
offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

This Code of Conduct also applies outside the project spaces when the Project
Steward has a reasonable belief that an individual's behavior may have a
negative impact on the project or its community.

## Conflict Resolution

We do not believe that all conflict is bad; healthy debate and disagreement
often yield positive results. However, it is never okay to be disrespectful or
to engage in behavior that violates the project’s code of conduct.

If you see someone violating the code of conduct, you are encouraged to address
the behavior directly with those involved. Many issues can be resolved quickly
and easily, and this gives people more control over the outcome of their
dispute. If you are unable to resolve the matter for any reason, or if the
behavior is threatening or harassing, report it. We are dedicated to providing
an environment where participants feel welcome and safe.

Reports should be directed to @googleapis/senseai-eco, the
Project Steward(s) for *Project Toolbox*. It is the Project Steward’s duty to
receive and address reported violations of the code of conduct. They will then
work with a committee consisting of representatives from the Open Source
Programs Office and the Google Open Source Strategy team. If for any reason you
are uncomfortable reaching out to the Project Steward, please email
<[email protected]>.

We will investigate every complaint, but you may not receive a direct response.
We will use our discretion in determining when and how to follow up on reported
incidents, which may range from not taking action to permanent expulsion from
the project and project-sponsored spaces. We will notify the accused of the
report and provide them an opportunity to discuss it before any action is taken.
The identity of the reporter will be omitted from the details of the report
supplied to the accused. In potentially harmful situations, such as ongoing
harassment or threats to anyone's safety, we may take action without notice.

## Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
available at
<https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>

```

--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------

```markdown
# How to contribute

We'd love to accept your patches and contributions to this project.

## Before you begin

### Sign our Contributor License Agreement

Contributions to this project must be accompanied by a
[Contributor License Agreement](https://cla.developers.google.com/about) (CLA).
You (or your employer) retain the copyright to your contribution; this simply
gives us permission to use and redistribute your contributions as part of the
project.

If you or your current employer have already signed the Google CLA (even if it
was for a different project), you probably don't need to do it again.

Visit <https://cla.developers.google.com/> to see your current agreements or to
sign a new one.

### Review our community guidelines

This project follows
[Google's Open Source Community Guidelines](https://opensource.google/conduct/).

## Contribution process

> [!NOTE]
> New contributions should always include both unit and integration tests.

All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
information on using pull requests.

### Code reviews

* Within 2-5 days, a reviewer will review your PR. They may approve it, or request
changes.
* When requesting changes, reviewers should self-assign the PR to ensure
they are aware of any updates.
* If additional changes are needed, push additional commits to your PR branch -
this helps the reviewer know which parts of the PR have changed.
* Commits will be
squashed when merged.
* Please follow up with changes promptly.
* If a PR is awaiting changes by the
author for more than 10 days, maintainers may mark that PR as Draft. PRs that
are inactive for more than 30 days may be closed.

## Adding a New Database Source or Tool

Please create an
[issue](https://github.com/googleapis/genai-toolbox/issues) before
implementation to ensure we can accept the contribution and no duplicated work.
This issue should include an overview of the API design. If you have any
questions, reach out on our [Discord](https://discord.gg/Dmm69peqjh) to chat
directly with the team.

> [!NOTE]
> New tools can be added for [pre-existing data
> sources](https://github.com/googleapis/genai-toolbox/tree/main/internal/sources).
> However, any new database source should also include at least one new tool
> type.

### Adding a New Database Source

We recommend looking at an [example source
implementation](https://github.com/googleapis/genai-toolbox/blob/main/internal/sources/postgres/postgres.go).

* **Create a new directory** under `internal/sources` for your database type
  (e.g., `internal/sources/newdb`).
* **Define a configuration struct** for your data source in a file named
  `newdb.go`. Create a `Config` struct to include all the necessary parameters
  for connecting to the database (e.g., host, port, username, password, database
  name) and a `Source` struct to store necessary parameters for tools (e.g.,
  Name, Kind, connection object, additional config).
* **Implement the
  [`SourceConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L57)
  interface**. This interface requires two methods:
  * `SourceConfigKind() string`: Returns a unique string identifier for your
    data source (e.g., `"newdb"`).
  * `Initialize(ctx context.Context, tracer trace.Tracer) (Source, error)`:
    Creates a new instance of your data source and establishes a connection to
    the database.
* **Implement the
  [`Source`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L63)
  interface**. This interface requires one method:
  * `SourceKind() string`: Returns the same string identifier as `SourceConfigKind()`.
* **Implement `init()`** to register the new Source.
* **Implement Unit Tests** in a file named `newdb_test.go`.

### Adding a New Tool

> [!NOTE]
> Please follow the tool naming convention detailed [here](./DEVELOPER.md#tool-naming-conventions).

We recommend looking at an [example tool
implementation](https://github.com/googleapis/genai-toolbox/tree/main/internal/tools/postgres/postgressql).

* **Create a new directory** under `internal/tools` for your tool type (e.g.,
  `internal/tools/newdb` or `internal/tools/newdb<tool_name>`).
* **Define a configuration struct** for your tool in a file named `newdbtool.go`.
Create a `Config` struct and a `Tool` struct to store necessary parameters for
tools.
* **Implement the
  [`ToolConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/tools/tools.go#L61)
  interface**. This interface requires one method:
  * `ToolConfigKind() string`: Returns a unique string identifier for your tool
    (e.g., `"newdb"`).
  * `Initialize(sources map[string]Source) (Tool, error)`: Creates a new
    instance of your tool and validates that it can connect to the specified
    data source.
* **Implement the `Tool` interface**. This interface requires the following
  methods:
  * `Invoke(ctx context.Context, params map[string]any) ([]any, error)`:
    Executes the operation on the database using the provided parameters.
  * `ParseParams(data map[string]any, claims map[string]map[string]any)
    (ParamValues, error)`: Parses and validates the input parameters.
  * `Manifest() Manifest`: Returns a manifest describing the tool's capabilities
    and parameters.
  * `McpManifest() McpManifest`: Returns an MCP manifest describing the tool for
    use with the Model Context Protocol.
  * `Authorized(services []string) bool`: Checks if the tool is authorized to
    run based on the provided authentication services.
* **Implement `init()`** to register the new Tool.
* **Implement Unit Tests** in a file named `newdb_test.go`.

### Adding Integration Tests

* **Add a test file** under a new directory `tests/newdb`.
* **Add pre-defined integration test suites** in the
  `/tests/newdb/newdb_test.go` that are **required** to be run as long as your
  code contains related features. Please check each test suites for the config
  defaults, if your source require test suites config updates, please refer to
  [config option](./tests/option.go):

     1. [RunToolGetTest][tool-get]: tests for the `GET` endpoint that returns the
            tool's manifest.

     2. [RunToolInvokeTest][tool-call]: tests for tool calling through the native
        Toolbox endpoints.

     3. [RunMCPToolCallMethod][mcp-call]: tests tool calling through the MCP
            endpoints.

     4. (Optional) [RunExecuteSqlToolInvokeTest][execute-sql]: tests an
        `execute-sql` tool for any source. Only run this test if you are adding an
        `execute-sql` tool.

     5. (Optional) [RunToolInvokeWithTemplateParameters][temp-param]: tests for [template
            parameters][temp-param-doc]. Only run this test if template
            parameters apply to your tool.

* **Add the new database to the integration test workflow** in
  [integration.cloudbuild.yaml](.ci/integration.cloudbuild.yaml).

[tool-get]:
    https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L31
[tool-call]:
    <https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L79>
[mcp-call]:
    https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L554
[execute-sql]:
    <https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L431>
[temp-param]:
    <https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L297>
[temp-param-doc]:
    https://googleapis.github.io/genai-toolbox/resources/tools/#template-parameters

### Adding Documentation

* **Update the documentation** to include information about your new data source
  and tool. This includes:
  * Adding a new page to the `docs/en/resources/sources` directory for your data
    source.
  * Adding a new page to the `docs/en/resources/tools` directory for your tool.

* **(Optional) Add samples** to the `docs/en/samples/<newdb>` directory.

### (Optional) Adding Prebuilt Tools

You can provide developers with a set of "build-time" tools to aid common
software development user journeys like viewing and creating tables/collections
and data.

* **Create a set of prebuilt tools** by defining a new `tools.yaml` and adding
  it to `internal/tools`. Make sure the file name matches the source (i.e. for
  source "alloydb-postgres" create a file named "alloydb-postgres.yaml").
* **Update `cmd/root.go`** to add new source to the `prebuilt` flag.
* **Add tests** in
  [internal/prebuiltconfigs/prebuiltconfigs_test.go](internal/prebuiltconfigs/prebuiltconfigs_test.go)
  and [cmd/root_test.go](cmd/root_test.go).

## Submitting a Pull Request

Submit a pull request to the repository with your changes. Be sure to include a
detailed description of your changes and any requests for long term testing
resources.

* **Title:** All pull request title should follow the formatting of
  [Conventional
  Commit](https://www.conventionalcommits.org/) guidelines: `<type>[optional
  scope]: description`. For example, if you are adding a new field in postgres
  source, the title should be `feat(source/postgres): add support for
  "new-field" field in postgres source`.
  
  Here are some commonly used `type` in this GitHub repo.

  |     **type**    |                                **description**                                                        |
  |-----------------|-------------------------------------------------------------------------------------------------------|
  | Breaking Change | Anything with this type of a `!` after the type/scope introduces a breaking change.                   |
  | feat            | Adding a new feature to the codebase.                                                                 |
  | fix             | Fixing a bug or typo in the codebase. This does not include fixing docs.                              |
  | test            | Changes made to test files.                                                                           |
  | ci              | Changes made to the cicd configuration files or scripts.                                              |
  | docs            | Documentation-related PRs, including fixes on docs.                                                   |
  | chore           | Other small tasks or updates that don't fall into any of the above types.                             |
  | refactor        | Change src code but unlike feat, there are no tests broke and no line lost coverage.                  |
  | revert          | Revert changes made in another commit.                                                                |
  | style           | Update src code, with only formatting and whitespace updates (e.g. code formatter or linter changes). |

  Pull requests should always add scope whenever possible. The scope is
  formatted as `<scope-type>/<scope-kind>` (e.g., `sources/postgres`, or
  `tools/mssql-sql`).
  
  Ideally, **each PR covers only one scope**, if this is
  inevitable, multiple scopes can be seaparated with a comma (e.g.
  `sources/postgres,sources/alloydbpg`). If the PR covers multiple `scope-type`
  (such as adding a new database), you can disregard the `scope-type`, e.g.
  `feat(new-db): adding support for new-db source and tool`.

* **PR Description:** PR description should **always** be included. It should
  include a concise description of the changes, it's impact, along with a
  summary of the solution. If the PR is related to a specific issue, the issue
  number should be mentioned in the PR description (e.g. `Fixes #1`).

```

--------------------------------------------------------------------------------
/cmd/version.txt:
--------------------------------------------------------------------------------

```
0.17.0

```

--------------------------------------------------------------------------------
/.github/label-sync.yml:
--------------------------------------------------------------------------------

```yaml
---
ignored: true

```

--------------------------------------------------------------------------------
/.hugo/assets/scss/_styles_project.scss:
--------------------------------------------------------------------------------

```scss
@import 'td/code-dark';
```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/golden.txt:
--------------------------------------------------------------------------------

```
Hilton Basel
Hyatt Regency
book
```

--------------------------------------------------------------------------------
/.hugo/assets/scss/_variables_project.scss:
--------------------------------------------------------------------------------

```scss
$primary: #80a7e9;
$secondary: #4484f4;

```

--------------------------------------------------------------------------------
/.hugo/layouts/partials/td/render-heading.html:
--------------------------------------------------------------------------------

```html
{{ template "partials/td/render-heading.html" . }}

```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/adk/requirements.txt:
--------------------------------------------------------------------------------

```
google-adk==1.15.0
toolbox-core==0.5.2
pytest==8.4.2
```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/core/requirements.txt:
--------------------------------------------------------------------------------

```
google-genai==1.42.0
toolbox-core==0.5.2
pytest==8.4.2

```

--------------------------------------------------------------------------------
/.hugo/layouts/robot.txt:
--------------------------------------------------------------------------------

```
User-agent: *
{{ if eq hugo.Environment "preview" }}
Disallow: /*
{{ end }}
```

--------------------------------------------------------------------------------
/.hugo/layouts/partials/hooks/head-end.html:
--------------------------------------------------------------------------------

```html
<script src='{{ .Site.BaseURL }}js/w3.js' type="application/x-javascript"></script>

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/alloydbainl/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "AlloyDB AI NL"
type: docs
weight: 1
description: > 
  AlloyDB AI NL Tool.
---
```

--------------------------------------------------------------------------------
/docs/en/concepts/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Concepts"
type: docs
weight: 2
description: >
  Some core concepts in Toolbox
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/dataform/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Dataform"
type: docs
weight: 1
description: > 
  Tools that work with Dataform.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/http/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "HTTP"
type: docs
weight: 1
description: > 
  Tools that work with HTTP Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/llamaindex/requirements.txt:
--------------------------------------------------------------------------------

```
llama-index==0.14.3
llama-index-llms-google-genai==0.6.0
toolbox-llamaindex==0.5.2
pytest==8.4.2

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/neo4j/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Neo4j"
type: docs
weight: 1
description: > 
  Tools that work with Neo4j Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/redis/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Redis"
type: docs
weight: 1
description: > 
  Tools that work with Redis Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/utility/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Utility tools"
type: docs
weight: 1
description: > 
  Tools that provide utility.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudsql/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Cloud SQL"
type: docs
weight: 1
description: > 
  Tools that work with Cloud SQL. 
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/dgraph/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Dgraph"
type: docs
weight: 1
description: > 
  Tools that work with Dgraph Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/looker/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Looker"
type: docs
weight: 1
description: >
  Tools that work with Looker Sources.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/sqlite/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "SQLite"
type: docs
weight: 1
description: > 
  Tools that work with SQLite Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/valkey/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Valkey"
type: docs
weight: 1
description: > 
  Tools that work with Valkey Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/oracle/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Oracle"
type: docs
weight: 1
description: > 
  Tools that work with Oracle Sources.
--- 
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/spanner/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Spanner"
type: docs
weight: 1
description: > 
  Tools that work with Spanner Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/samples/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Samples"
type: docs
weight: 5
description: >
  Samples and guides for using Toolbox.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/bigquery/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "BigQuery"
type: docs
weight: 1
description: > 
  Tools that work with BigQuery Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/bigtable/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Bigtable"
type: docs
weight: 1
description: > 
  Tools that work with Bigtable Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/dataplex/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Dataplex"
type: docs
weight: 1
description: > 
  Tools that work with Dataplex Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/firebird/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Firebird"
type: docs
weight: 1
description: > 
  Tools that work with Firebird Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/yuagbytedb/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "YugabyteDB"
type: docs
weight: 1
description: > 
  Tools that work with Valkey Sources.
---
```

--------------------------------------------------------------------------------
/.hugo/archetypes/default.md:
--------------------------------------------------------------------------------

```markdown
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++

```

--------------------------------------------------------------------------------
/docs/en/getting-started/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Getting Started"
type: docs
weight: 1
description: >
  How to get started with Toolbox.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/mongodb/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "MongoDB"
type: docs
weight: 1
description: >
  Tools that work with the MongoDB Source.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cassandra/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Cassandra"
type: docs
weight: 1
description: > 
  Tools that work with Cassandra Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/couchbase/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Couchbase"
type: docs
weight: 1
description: > 
  Tools that work with Couchbase Sources.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/firestore/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Firestore"
type: docs
weight: 1
description: > 
  Tools that work with Firestore Sources.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/oceanbase/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "OceanBase"
type: docs
weight: 1
description: > 
  Tools that work with OceanBase Sources.
--- 
```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/langchain/requirements.txt:
--------------------------------------------------------------------------------

```
langchain==0.3.27
langchain-google-vertexai==2.1.2
langgraph==0.6.8
toolbox-langchain==0.5.2
pytest==8.4.2

```

--------------------------------------------------------------------------------
/docs/en/samples/looker/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Looker"
type: docs
weight: 1
description: >
  How to get started with Toolbox using Looker.
---

```

--------------------------------------------------------------------------------
/docs/en/about/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "About"
type: docs
weight: 6
description: >
  A list of other information related to Toolbox.
---

```

--------------------------------------------------------------------------------
/docs/en/samples/alloydb/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "AlloyDB"
type: docs
weight: 1
description: >
  How to get started with Toolbox using AlloyDB.
---

```

--------------------------------------------------------------------------------
/docs/en/sdks/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "SDKs"
type: docs
weight: 6
description: >
  Client SDKs to connect to the MCP Toolbox server.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/alloydb/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "AlloyDB for PostgreSQL"
type: docs
weight: 1
description: > 
  Tools for AlloyDB for PostgreSQL.
---
```

--------------------------------------------------------------------------------
/docs/en/samples/bigquery/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "BigQuery"
type: docs
weight: 1
description: >
  How to get started with Toolbox using BigQuery.
---

```

--------------------------------------------------------------------------------
/docs/en/reference/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Reference"
type: docs
weight: 7
description: >
  This section contains reference documentation.
---


```

--------------------------------------------------------------------------------
/.hugo/package.json:
--------------------------------------------------------------------------------

```json
{
  "devDependencies": {
    "autoprefixer": "^10.4.20",
    "postcss": "^8.4.49",
    "postcss-cli": "^11.0.0"
  }
}

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudmonitoring/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Cloud Monitoring"
type: docs
weight: 1
description: >
  Tools that work with Cloud Monitoring source.
---

```

--------------------------------------------------------------------------------
/.hugo/layouts/shortcodes/include.html:
--------------------------------------------------------------------------------

```html
{{ $file := .Get 0 }}
{{ (printf "%s%s" .Page.File.Dir $file) | readFile | replaceRE "^---[\\s\\S]+?---" "" | safeHTML }}

```

--------------------------------------------------------------------------------
/docs/en/resources/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Resources"
type: docs
weight: 4
description: >
  List of reference documentation for resources in Toolbox.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/clickhouse/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "ClickHouse"
type: docs
weight: 1
description: >
  Tools for interacting with ClickHouse databases and tables.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/mysql/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "MySQL"
type: docs
weight: 1
description: > 
  Tools that work with MySQL Sources, such as Cloud SQL for MySQL.
---
```

--------------------------------------------------------------------------------
/docs/en/how-to/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "How-to"
type: docs
weight: 3
description: >
  List of guides detailing how to do different things with Toolbox. 
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/trino/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Trino"
type: docs
weight: 1
description: > 
  Tools that work with Trino Sources, such as distributed SQL query engine.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/tidb/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "TiDB"
type: docs
weight: 1
description: > 
  Tools that work with TiDB Sources, such as TiDB Cloud and self-hosted TiDB.
---

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/mssql/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "SQL Server"
type: docs
weight: 1
description: > 
  Tools that work with SQL Server Sources, such as CloudSQL for SQL Server.
---
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/postgres/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Postgres"
type: docs
weight: 1
description: > 
  Tools that work with Postgres Sources, such as Cloud SQL for Postgres and AlloyDB. 
---
```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/__init__.py:
--------------------------------------------------------------------------------

```python
# This file makes the 'quickstart' directory a Python package.

# You can include any package-level initialization logic here if needed.
# For now, this file is empty.

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Connect from your IDE"
type: docs
weight: 1
description: >
  List of guides detailing how to connect your AI tools (IDEs) to Toolbox using MCP.
aliases:
- /how-to/connect_tools_using_mcp
---

```

--------------------------------------------------------------------------------
/docs/en/samples/alloydb/ai-nl/index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Getting started with alloydb-ai-nl tool"
type: docs
weight: 30
description: >
  An end to end tutorial for building an ADK agent using the AlloyDB AI NL tool.
---

{{< ipynb "alloydb_ai_nl.ipynb" >}}

```

--------------------------------------------------------------------------------
/.hugo/layouts/index.llms-full.txt:
--------------------------------------------------------------------------------

```
{{ .Site.Params.description }}

{{ range .Site.Sections }}
# {{ .Title }}
{{ .Description }}
{{ range .Pages }}
# {{ .Title }}
{{ .Description }}
{{ .RawContent }}
{{ range .Pages }}
# {{ .Title }}
{{ .Description }}
{{ .RawContent }}
{{end }}{{ end }}{{ end }}

```

--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------

```yaml
blank_issues_enabled: false
contact_links:
  - name: Google Cloud Support
    url: https://cloud.google.com/support/
    about: If you have a support contract with Google, please both open an issue here and open Google Cloud Support portal with a link to the issue.

```

--------------------------------------------------------------------------------
/docs/en/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Documentation"
type: docs
notoc: false
weight: 1
description: >
  All of Toolbox's documentation.
---

<html>
  <head>
    <link rel="canonical" href="getting-started/introduction/"/>
    <meta http-equiv="refresh" content="0;url=getting-started/introduction/"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/.hugo/layouts/index.llms.txt:
--------------------------------------------------------------------------------

```
# {{ .Site.Title }}

> {{ .Site.Params.description }}

## Docs
{{ range .Site.Sections }}
### {{ .Title }}

{{ .Description }}{{ range .Pages }}- [{{ .Title }}]({{ .Permalink }}): {{ .Description }}{{ range .Pages }}  - [{{ .Title }}]({{ .Permalink }}): {{ .Description }}{{end }}{{ end }}{{ end }}

```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/js/genAI/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "genai",
  "version": "1.0.0",
  "description": "",
  "main": "quickstart.js",
  "type" : "module",
  "scripts": {
    "test": "node --test"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@google/genai": "^1.17.0",
    "@toolbox-sdk/core": "^0.1.2"
  }
}

```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/js/genkit/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "genkit",
  "version": "1.0.0",
  "description": "",
  "main": "quickstart.js",
  "type" : "module",
  "scripts": {
    "test": "node --test"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@genkit-ai/googleai": "^1.18.0",
    "@toolbox-sdk/core": "^0.1.2",
    "genkit": "^1.18.0"
  }
}

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/alloydb_pg_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "AlloyDB using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to AlloyDB using Toolbox.
---
<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/alloydb/docs/connect-ide-using-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/alloydb/docs/connect-ide-using-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/spanner_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Spanner using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to Spanner using Toolbox.
---
<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/spanner/docs/pre-built-tools-with-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/spanner/docs/pre-built-tools-with-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/bigquery_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "BigQuery using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to BigQuery using Toolbox.
---
<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/bigquery/docs/pre-built-tools-with-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/bigquery/docs/pre-built-tools-with-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/js/llamaindex/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "llamaindex",
  "version": "1.0.0",
  "description": "",
  "main": "quickstart.js",
  "type": "module",
  "scripts": {
    "test": "node --test"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@llamaindex/google": "^0.3.20",
    "@llamaindex/workflow": "^1.1.22",
    "@toolbox-sdk/core": "^0.1.2",
    "llamaindex": "^0.12.0"
  }
}

```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/js/langchain/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "langchain",
  "version": "1.0.0",
  "description": "",
  "main": "quickstart.js",
  "type": "module",
  "scripts": {
    "test": "node --test"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@langchain/google-genai": "^0.2.17",
    "@langchain/langgraph": "^0.4.9",
    "@toolbox-sdk/core": "^0.1.2",
    "langchain": "^0.3.33"
  }
}

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/alloydb_pg_admin_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "AlloyDB Admin API using MCP"
type: docs
weight: 2
description: >
  Create your AlloyDB database with MCP Toolbox.
---

<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/alloydb/docs/create-database-with-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/alloydb/docs/create-database-with-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/firestore_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Firestore using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to Firestore using Toolbox.
---

<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/firestore/native/docs/connect-ide-using-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/firestore/native/docs/connect-ide-using-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/sdks/go-sdk.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Go SDK"
weight: 2
description: Go lang client SDK
icon: fa-brands fa-golang
manualLink: "https://github.com/googleapis/mcp-toolbox-sdk-go"
manualLinkTarget: _blank
---

<html>
  <head>
    <link rel="canonical" href="https://github.com/googleapis/mcp-toolbox-sdk-go"/>
    <meta http-equiv="refresh" content="0;url=https://github.com/googleapis/mcp-toolbox-sdk-go"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/sdks/js-sdk.md:
--------------------------------------------------------------------------------

```markdown
---
title: "JS SDK"
weight: 2
description: Javascript client SDK
icon: fa-brands fa-node-js
manualLink: "https://github.com/googleapis/mcp-toolbox-sdk-js"
manualLinkTarget: _blank
---

<html>
  <head>
    <link rel="canonical" href="https://github.com/googleapis/mcp-toolbox-sdk-js"/>
    <meta http-equiv="refresh" content="0;url=https://github.com/googleapis/mcp-toolbox-sdk-js"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/cloud_sql_mysql_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Cloud SQL for MySQL using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to Cloud SQL for MySQL using Toolbox.
---
<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/sql/docs/mysql/pre-built-tools-with-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/sql/docs/mysql/pre-built-tools-with-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/sdks/python-sdk.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Python SDK"
weight: 2
description: Python client SDK
icon: fa-brands fa-python
manualLink: "https://github.com/googleapis/mcp-toolbox-sdk-python"
manualLinkTarget: _blank
---

<html>
  <head>
    <link rel="canonical" href="https://github.com/googleapis/mcp-toolbox-sdk-python"/>
    <meta http-equiv="refresh" content="0;url=https://github.com/googleapis/mcp-toolbox-sdk-python"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/cloud_sql_pg_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Cloud SQL for Postgres using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to Cloud SQL for Postgres using Toolbox.
---
<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/sql/docs/postgres/pre-built-tools-with-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/sql/docs/postgres/pre-built-tools-with-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/docs/en/how-to/connect-ide/cloud_sql_mssql_mcp.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Cloud SQL for SQL Server using MCP"
type: docs
weight: 2
description: >
  Connect your IDE to Cloud SQL for SQL Server using Toolbox.
---
<html>
  <head>
    <link rel="canonical" href="https://cloud.google.com/sql/docs/sqlserver/pre-built-tools-with-mcp-toolbox"/>
    <meta http-equiv="refresh" content="0;url=https://cloud.google.com/sql/docs/sqlserver/pre-built-tools-with-mcp-toolbox"/>
  </head>
</html>

```

--------------------------------------------------------------------------------
/.github/renovate.json5:
--------------------------------------------------------------------------------

```
{
  extends: [
    'config:recommended',
    ':semanticCommitTypeAll(chore)',
    ':ignoreUnstable',
    ':separateMajorReleases',
    ':prConcurrentLimitNone',
    ':prHourlyLimitNone',
    ':preserveSemverRanges',
  ],
  minimumReleaseAge: '3',
  rebaseWhen: 'conflicted',
  dependencyDashboardLabels: [
    'type: process',
  ],
  "postUpdateOptions": [
    "gomodTidy"
  ],
  packageRules: [
    {
      groupName: 'GitHub Actions',
      matchManagers: [
        'github-actions',
      ],
      pinDigests: true,
    },
  ],
}

```

--------------------------------------------------------------------------------
/.hugo/layouts/partials/navbar-version-selector.html:
--------------------------------------------------------------------------------

```html
{{ if .Site.Params.versions -}}
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
   {{ .Site.Params.version_menu }}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
   <div w3-include-html="/genai-toolbox/releases.releases" w3-include-html-default='<a class="dropdown-item" href="/genai-toolbox/dev/">Dev</a>'></div>
   <script>
     // This must run after the w3.js script has loaded.
     w3.includeHTML();
   </script>
</div>
{{ end -}}
```

--------------------------------------------------------------------------------
/.github/auto-label.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

enabled: false

```

--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package main

import (
	"github.com/googleapis/genai-toolbox/cmd"
)

func main() {
	cmd.Execute()
}

```

--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/shared/cloud_setup.md:
--------------------------------------------------------------------------------

```markdown
<!-- This file has been used in local_quickstart.md, local_quickstart_go.md & local_quickstart_js.md -->
<!-- [START cloud_setup] -->
If you plan to use **Google Cloud’s Vertex AI** with your agent (e.g., using
`vertexai=True` or a Google GenAI model), follow these one-time setup steps for
local development:

1. [Install the Google Cloud CLI](https://cloud.google.com/sdk/docs/install)
1. [Set up Application Default Credentials
   (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment)
1. Set your project and enable Vertex AI

    ```bash
    gcloud config set project YOUR_PROJECT_ID
    gcloud services enable aiplatform.googleapis.com
    ```

<!-- [END cloud_setup] -->
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/oracle/oracle-execute-sql.md:
--------------------------------------------------------------------------------

```markdown
---
title: "oracle-execute-sql"
type: docs
weight: 1
description: > 
  An "oracle-execute-sql" tool executes a SQL statement against an Oracle database.
aliases:
- /resources/tools/oracle-execute-sql
---

## About

An `oracle-execute-sql` tool executes a SQL statement against an Oracle
database. It's compatible with the following source:

- [oracle](../../sources/oracle.md)

`oracle-execute-sql` takes one input parameter `sql` and runs the sql
statement against the `source`.

> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.

## Example

```yaml
tools:
  execute_sql_tool:
    kind: oracle-execute-sql
    source: my-oracle-instance
    description: Use this tool to execute sql statement.

```

--------------------------------------------------------------------------------
/.github/header-checker-lint.yml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

allowedCopyrightHolders:
  - 'Google LLC'
  - 'Oracle'
allowedLicenses:
  - 'Apache-2.0'
sourceFileExtensions:
  - 'go'
  - 'yaml'
  - 'yml'
ignoreFiles:
  - 'docs/en/getting-started/quickstart/**'
  - '**/*oracle*'


```

--------------------------------------------------------------------------------
/cmd/options.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cmd

import (
	"io"
)

// Option is a function that configures a Command.
type Option func(*Command)

// WithStreams overrides the default writer.
func WithStreams(out, err io.Writer) Option {
	return func(c *Command) {
		c.outStream = out
		c.errStream = err
	}
}

```

--------------------------------------------------------------------------------
/internal/server/static/index.html:
--------------------------------------------------------------------------------

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Toolbox UI</title>
    <link rel="stylesheet" href="/ui/css/style.css">
</head>
<body>
    <div id="navbar-container" data-active-nav=""></div>
    <div id="main-content-container"></div>

    <script src="/ui/js/navbar.js"></script>
    <script src="/ui/js/mainContent.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const navbarContainer = document.getElementById('navbar-container');
            const activeNav = navbarContainer.getAttribute('data-active-nav');
            renderNavbar('navbar-container', activeNav);
            renderMainContent('main-content-container', 'homepage-info', getHomepageInstructions())
        });
    </script>
</body>
</html>

```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------

```markdown
## Description

> Should include a concise description of the changes (bug or feature), it's
> impact, along with a summary of the solution

## PR Checklist

> Thank you for opening a Pull Request! Before submitting your PR, there are a
> few things you can do to make sure it goes smoothly:

- [ ] Make sure you reviewed
  [CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [ ] Make sure to open an issue as a
  [bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [ ] Ensure the tests and linter pass
- [ ] Code coverage does not decrease (if any source code was changed)
- [ ] Appropriate docs were updated (if necessary)
- [ ] Make sure to add `!` if this involve a breaking change

🛠️ Fixes #<issue_number_goes_here>

```

--------------------------------------------------------------------------------
/.github/blunderbuss.yml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

assign_issues:
  - Yuan325
  - duwenxin99
  - averikitsch
  - anubhav756
  - dishaprakash
  - twishabansal
assign_issues_by:
  - labels:
    - 'product: bigquery'
    to:
    - Genesis929
    - shobsi
    - jiaxunwu
  - labels:
    - 'product: looker'
    to:
    - drstrangelooker
assign_prs:
  - Yuan325
  - duwenxin99
  - averikitsch

```

--------------------------------------------------------------------------------
/.github/workflows/schedule_reporter.yml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Schedule Reporter

on:
  schedule:
    - cron: '0 6 * * *'  # Runs at 6 AM every morning

jobs:
  run_reporter:
    permissions:
        issues: 'write'
        checks: 'read'
        contents: 'read'
    uses: ./.github/workflows/cloud_build_failure_reporter.yml
    with:
      trigger_names: "toolbox-test-nightly,toolbox-test-on-merge,toolbox-continuous-release"

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudsql/cloudsqlgetinstances.md:
--------------------------------------------------------------------------------

```markdown
---
title: "cloud-sql-get-instance"
type: docs
weight: 10
description: >
  Get a Cloud SQL instance resource.
---

The `cloud-sql-get-instance` tool retrieves a Cloud SQL instance resource using
the Cloud SQL Admin API.

{{< notice info >}}
This tool uses a `source` of kind `cloud-sql-admin`.
{{< /notice >}}

## Example

```yaml
tools:
  get-sql-instance:
    kind: cloud-sql-get-instance
    source: my-cloud-sql-admin-source
    description: "Gets a particular cloud sql instance."
```

## Reference

| **field**   | **type** | **required** | **description**                                  |
| ----------- | :------: | :----------: | ------------------------------------------------ |
| kind        |  string  |     true     | Must be "cloud-sql-get-instance".                |
| source      |  string  |     true     | The name of the `cloud-sql-admin` source to use. |
| description |  string  |     false    | A description of the tool.                       |

```

--------------------------------------------------------------------------------
/docs/en/resources/sources/_index.md:
--------------------------------------------------------------------------------

```markdown
---
title: "Sources"
type: docs
weight: 1
description: > 
  Sources represent your different data sources that a tool can interact with.
---

A Source represents a data sources that a tool can interact with. You can define
Sources as a map in the `sources` section of your `tools.yaml` file. Typically,
a source configuration will contain any information needed to connect with and
interact with the database.

{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}

```yaml
sources:
    my-cloud-sql-source:
        kind: cloud-sql-postgres
        project: my-project-id
        region: us-central1
        instance: my-instance-name
        database: my_db
        user: ${USER_NAME}
        password: ${PASSWORD}
```

In implementation, each source is a different connection pool or client that used
to connect to the database and execute the tool.

## Available Sources

```

--------------------------------------------------------------------------------
/internal/server/mcp/jsonrpc/jsonrpc_test.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package jsonrpc

import (
	"reflect"
	"testing"
)

func TestNewError(t *testing.T) {
	var id interface{} = "foo"
	code := 111
	message := "foo bar"
	want := JSONRPCError{
		Jsonrpc: "2.0",
		Id:      "foo",
		Error: Error{
			Code:    111,
			Message: "foo bar",
		},
	}

	got := NewError(id, code, message, nil)
	if !reflect.DeepEqual(want, got) {
		t.Fatalf("unexpected error: got %+v, want %+v", got, want)
	}
}

```

--------------------------------------------------------------------------------
/internal/auth/auth.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package auth

import (
	"context"
	"net/http"
)

// AuthServiceConfig is the interface for configuring authentication services.
type AuthServiceConfig interface {
	AuthServiceConfigKind() string
	Initialize() (AuthService, error)
}

// AuthService is the interface for authentication services.
type AuthService interface {
	AuthServiceKind() string
	GetName() string
	GetClaimsFromHeader(context.Context, http.Header) (map[string]any, error)
}

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/neo4j.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
  neo4j-source:
    kind: neo4j
    uri: ${NEO4J_URI}
    database: ${NEO4J_DATABASE}
    user: ${NEO4J_USERNAME}
    password: ${NEO4J_PASSWORD}

tools:
  execute_cypher:
    kind: neo4j-execute-cypher
    source: neo4j-source
    description: Use this tool to execute Cypher queries.

  get_schema:
    kind: neo4j-schema
    source: neo4j-source
    description: Use this tool to get the database schema.

toolsets:
  neo4j_database_tools:
    - execute_cypher
    - get_schema

```

--------------------------------------------------------------------------------
/docs/en/resources/sources/mongodb.md:
--------------------------------------------------------------------------------

```markdown
---
title: "MongoDB"
type: docs
weight: 1
description: >
  MongoDB is a no-sql data platform that can not only serve general purpose data requirements also perform VectorSearch where both operational data and embeddings used of search can reside in same document.

---

## About

[MongoDB][mongodb-docs] is a popular NoSQL database that stores data in
flexible, JSON-like documents, making it easy to develop and scale applications.

[mongodb-docs]: https://www.mongodb.com/docs/atlas/getting-started/

## Example

```yaml
sources:
    my-mongodb:
        kind: mongodb
        uri: "mongodb+srv://username:[email protected]"       

```

## Reference

| **field** | **type** | **required** | **description**                                                   |
|-----------|:--------:|:------------:|-------------------------------------------------------------------|
| kind      |  string  |     true     | Must be "mongodb".                                                |
| uri       |  string  |     true     | connection string to connect to MongoDB                           |

```

--------------------------------------------------------------------------------
/.github/workflows/sync-labels.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Sync Labels
on:
  push:
    branches:
      - main

# Declare default permissions as read only.
permissions: read-all

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: 'read'
      issues: 'write'
      pull-requests: 'write'
    steps:
      - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
      - uses: micnncim/action-label-syncer@3abd5ab72fda571e69fffd97bd4e0033dd5f495c # v1.3.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          manifest: .github/labels.yaml

```

--------------------------------------------------------------------------------
/internal/sources/ip_type.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package sources

import (
	"context"
	"fmt"
	"strings"
)

type IPType string

func (i *IPType) String() string {
	if string(*i) != "" {
		return strings.ToLower(string(*i))
	}
	return "public"
}

func (i *IPType) UnmarshalYAML(ctx context.Context, unmarshal func(interface{}) error) error {
	var ipType string
	if err := unmarshal(&ipType); err != nil {
		return err
	}
	switch strings.ToLower(ipType) {
	case "private", "public", "psc":
		*i = IPType(strings.ToLower(ipType))
		return nil
	default:
		return fmt.Errorf(`ipType invalid: must be one of "public", "private", or "psc"`)
	}
}

```

--------------------------------------------------------------------------------
/internal/server/static/tools.html:
--------------------------------------------------------------------------------

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tools View</title>
    <link rel="stylesheet" href="/ui/css/style.css">
    <script src="https://accounts.google.com/gsi/client" async defer></script>
</head>
<body>
    <div id="navbar-container" data-active-nav="/ui/tools"></div>

    <aside class="second-nav">
        <h4>My Tools</h4>
        <div id="secondary-panel-content">
            <p>Fetching tools...</p>
        </div>
    </aside>

    <div id="main-content-container"></div>

    <script type="module" src="/ui/js/tools.js"></script>
    <script src="/ui/js/navbar.js"></script>
    <script src="/ui/js/mainContent.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const navbarContainer = document.getElementById('navbar-container');
            const activeNav = navbarContainer.getAttribute('data-active-nav');
            renderNavbar('navbar-container', activeNav);
            renderMainContent('main-content-container', 'tool-display-area', getToolInstructions())
        });
    </script>
</body>
</html>
```

--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------

```dockerfile
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Use the latest stable golang 1.x to compile to a binary
FROM --platform=$BUILDPLATFORM golang:1 AS build

WORKDIR /go/src/genai-toolbox
COPY . .

ARG TARGETOS
ARG TARGETARCH
ARG BUILD_TYPE="container.dev"
ARG COMMIT_SHA=""

RUN go get ./...
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
    go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=${BUILD_TYPE} -X github.com/googleapis/genai-toolbox/cmd.commitSha=${COMMIT_SHA}"

# Final Stage
FROM gcr.io/distroless/static:nonroot

WORKDIR /app
COPY --from=build --chown=nonroot /go/src/genai-toolbox/genai-toolbox /toolbox
USER nonroot

ENTRYPOINT ["/toolbox"] 

```

--------------------------------------------------------------------------------
/internal/log/logger.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package log

import (
	"context"
)

// Logger is the interface used throughout the project for logging.
type Logger interface {
	// DebugContext is for reporting additional information about internal operations.
	DebugContext(ctx context.Context, format string, args ...interface{})
	// InfoContext is for reporting informational messages.
	InfoContext(ctx context.Context, format string, args ...interface{})
	// WarnContext is for reporting warning messages.
	WarnContext(ctx context.Context, format string, args ...interface{})
	// ErrorContext is for reporting errors.
	ErrorContext(ctx context.Context, format string, args ...interface{})
}

```

--------------------------------------------------------------------------------
/internal/sources/dialect.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package sources

import (
	"context"
	"fmt"
	"strings"
)

// Dialect represents the dialect type of a database.
type Dialect string

func (i *Dialect) String() string {
	if string(*i) != "" {
		return strings.ToLower(string(*i))
	}
	return "googlesql"
}

func (i *Dialect) UnmarshalYAML(ctx context.Context, unmarshal func(interface{}) error) error {
	var dialect string
	if err := unmarshal(&dialect); err != nil {
		return err
	}
	switch strings.ToLower(dialect) {
	case "googlesql", "postgresql":
		*i = Dialect(strings.ToLower(dialect))
		return nil
	default:
		return fmt.Errorf(`dialect invalid: must be one of "googlesql", or "postgresql"`)
	}
}

```

--------------------------------------------------------------------------------
/internal/server/static/js/tools.js:
--------------------------------------------------------------------------------

```javascript
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import { loadTools } from "./loadTools.js";

/**
 * These functions runs after the browser finishes loading and parsing HTML structure.
 * This ensures that elements can be safely accessed.
 */
document.addEventListener('DOMContentLoaded', () => {
    const toolDisplayArea = document.getElementById('tool-display-area');
    const secondaryPanelContent = document.getElementById('secondary-panel-content');
    const DEFAULT_TOOLSET = ""; // will return all toolsets

    if (!secondaryPanelContent || !toolDisplayArea) {
        console.error('Required DOM elements not found.');
        return;
    }

    loadTools(secondaryPanelContent, toolDisplayArea, DEFAULT_TOOLSET);
});

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/utility/wait.md:
--------------------------------------------------------------------------------

```markdown
---
title: "wait"
type: docs
weight: 1
description: > 
  A "wait" tool pauses execution for a specified duration.
aliases:
- /resources/tools/utility/wait
---

## About

A `wait` tool pauses execution for a specified duration. This can be useful in
workflows where a delay is needed between steps.

`wait` takes one input parameter `duration` which is a string representing the
time to wait (e.g., "10s", "2m", "1h").

{{< notice info >}}
This tool is intended for developer assistant workflows with human-in-the-loop
and shouldn't be used for production agents.
{{< /notice >}}

## Example

```yaml
tools:
  wait_for_tool:
    kind: wait
    description: Use this tool to pause execution for a specified duration.
    timeout: 30s
```

## Reference

| **field**   |    **type**    | **required** | **description**                                       |
|-------------|:--------------:|:------------:|-------------------------------------------------------|
| kind        |     string     |     true     | Must be "wait".                                       |
| description |     string     |     true     | Description of the tool that is passed to the LLM.    |
| timeout     |     string     |     true     | The default duration the tool can wait for.           |

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/dataplex.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
  dataplex-source:
    kind: "dataplex"
    project: ${DATAPLEX_PROJECT}

tools:
  search_entries:
    kind: dataplex-search-entries
    source: dataplex-source
    description: Use this tool to search for entries in Dataplex Catalog based on the provided search query.
  lookup_entry:
    kind: dataplex-lookup-entry
    source: dataplex-source
    description: Use this tool to retrieve a specific entry from Dataplex Catalog.
  search_aspect_types:
    kind: dataplex-search-aspect-types
    source: dataplex-source
    description: Use this tool to find aspect types relevant to the query.

toolsets:
  dataplex_tools:
    - search_entries
    - lookup_entry
    - search_aspect_types

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/oceanbase/oceanbase-execute-sql.md:
--------------------------------------------------------------------------------

```markdown
---
title: "oceanbase-execute-sql"
type: docs
weight: 1
description: > 
  An "oceanbase-execute-sql" tool executes a SQL statement against an OceanBase database.
aliases:
- /resources/tools/oceanbase-execute-sql
---

## About

An `oceanbase-execute-sql` tool executes a SQL statement against an OceanBase
database. It's compatible with the following source:

- [oceanbase](../sources/oceanbase.md)

`oceanbase-execute-sql` takes one input parameter `sql` and runs the sql
statement against the `source`.

> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.

## Example

```yaml
tools:
  execute_sql_tool:
    kind: oceanbase-execute-sql
    source: my-oceanbase-instance
    description: Use this tool to execute sql statement.
```

## Reference

| **field**   | **type** | **required** | **description**                                    |
|-------------|:--------:|:------------:|----------------------------------------------------|
| kind        |  string  |     true     | Must be "oceanbase-execute-sql".                   |
| source      |  string  |     true     | Name of the source the SQL should execute on.      |
| description |  string  |     true     | Description of the tool that is passed to the LLM. |
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/firebird/firebird-execute-sql.md:
--------------------------------------------------------------------------------

```markdown
---
title: "firebird-execute-sql"
type: docs
weight: 1
description: > 
  A "firebird-execute-sql" tool executes a SQL statement against a Firebird
  database.
aliases:
- /resources/tools/firebird-execute-sql
---

## About

A `firebird-execute-sql` tool executes a SQL statement against a Firebird
database. It's compatible with the following source:

- [firebird](../sources/firebird.md)

`firebird-execute-sql` takes one input parameter `sql` and runs the sql
statement against the `source`.

> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.

## Example

```yaml
tools:
  execute_sql_tool:
    kind: firebird-execute-sql
    source: my_firebird_db
    description: Use this tool to execute a SQL statement against the Firebird database.
```

## Reference

| **field**   | **type** | **required** | **description**                                    |
|-------------|:--------:|:------------:|----------------------------------------------------|
| kind        |  string  |     true     | Must be "firebird-execute-sql".                    |
| source      |  string  |     true     | Name of the source the SQL should execute on.      |
| description |  string  |     true     | Description of the tool that is passed to the LLM. |

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/mssql.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
    mssql-source:
      kind: mssql
      host: ${MSSQL_HOST}
      port: ${MSSQL_PORT}
      database: ${MSSQL_DATABASE}
      user: ${MSSQL_USER}
      password: ${MSSQL_PASSWORD}
tools:
    execute_sql:
        kind: mssql-execute-sql
        source: mssql-source
        description: Use this tool to execute SQL.

    list_tables:
        kind: mssql-list-tables
        source: mssql-source
        description: "Lists detailed schema information (object type, columns, constraints, indexes, triggers, comment) as JSON for user-created tables (ordinary or partitioned). Filters by a comma-separated list of names. If names are omitted, lists all tables in user schemas."

toolsets:
    mssql_database_tools:
        - execute_sql
        - list_tables

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudsql/cloudsqlcreateusers.md:
--------------------------------------------------------------------------------

```markdown
---
title: cloud-sql-create-users
type: docs
weight: 10
description: >
  Create a new user in a Cloud SQL instance.
---

The `cloud-sql-create-users` tool creates a new user in a specified Cloud SQL
instance. It can create both built-in and IAM users.

{{< notice info >}}
This tool uses a `source` of kind `cloud-sql-admin`.
{{< /notice >}}

## Example

```yaml
tools:
  create-cloud-sql-user:
    kind: cloud-sql-create-users
    source: my-cloud-sql-admin-source
    description: "Creates a new user in a Cloud SQL instance. Both built-in and IAM users are supported. IAM users require an email account as the user name. IAM is the more secure and recommended way to manage users. The agent should always ask the user what type of user they want to create. For more information, see https://cloud.google.com/sql/docs/postgres/add-manage-iam-users"
```

## Reference

| **field**    |  **type** | **required** | **description**                                  |
| ------------ | :-------: | :----------: | ------------------------------------------------ |
| kind         |   string  |     true     | Must be "cloud-sql-create-users".                |
| description  |   string  |     false    | A description of the tool.                       |
| source       |   string  |     true     | The name of the `cloud-sql-admin` source to use. |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/sqlite/sqlite-execute-sql.md:
--------------------------------------------------------------------------------

```markdown
---
title: "sqlite-execute-sql"
type: docs
weight: 1
description: >
  A "sqlite-execute-sql" tool executes a single SQL statement against a SQLite database.
aliases:
- /resources/tools/sqlite-execute-sql
---

## About

A `sqlite-execute-sql` tool executes a single SQL statement against a SQLite
database. It's compatible with any of the following sources:

- [sqlite](../../sources/sqlite.md)

This tool is designed for direct execution of SQL statements. It takes a single
`sql` input parameter and runs the SQL statement against the configured SQLite
`source`.

> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.

## Example

```yaml
tools:
 execute_sql_tool:
    kind: sqlite-execute-sql
    source: my-sqlite-db
    description: Use this tool to execute a SQL statement.
```

## Reference

| **field**   | **type** | **required** | **description**                                    |
|-------------|:--------:|:------------:|----------------------------------------------------|
| kind        |  string  |     true     | Must be "sqlite-execute-sql".                      |
| source      |  string  |     true     | Name of the source the SQL should execute on.      |
| description |  string  |     true     | Description of the tool that is passed to the LLM. |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/firestore/firestore-get-rules.md:
--------------------------------------------------------------------------------

```markdown
---
title: "firestore-get-rules"
type: docs
weight: 1
description: >
  A "firestore-get-rules" tool retrieves the active Firestore security rules for the current project.
aliases:
- /resources/tools/firestore-get-rules
---

## About

A `firestore-get-rules` tool retrieves the active [Firestore security
rules](https://firebase.google.com/docs/firestore/security/get-started) for the
current project.
It's compatible with the following sources:

- [firestore](../../sources/firestore.md)

`firestore-get-rules` takes no input parameters and returns the security rules
content along with metadata such as the ruleset name, and timestamps.

## Example

```yaml
tools:
  get_firestore_rules:
    kind: firestore-get-rules
    source: my-firestore-source
    description: Use this tool to retrieve the active Firestore security rules.
```

## Reference

| **field**   |    **type**   | **required** | **description**                                       |
|-------------|:-------------:|:------------:|-------------------------------------------------------|
| kind        |     string    |     true     | Must be "firestore-get-rules".                        |
| source      |     string    |     true     | Name of the Firestore source to retrieve rules from.  |
| description |     string    |     true     | Description of the tool that is passed to the LLM.    |

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/clickhouse.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
sources:
  clickhouse-source:
    kind: clickhouse
    host: ${CLICKHOUSE_HOST}
    port: ${CLICKHOUSE_PORT}
    user: ${CLICKHOUSE_USER}
    password: ${CLICKHOUSE_PASSWORD}
    database: ${CLICKHOUSE_DATABASE}
    protocol: ${CLICKHOUSE_PROTOCOL}

tools:
  execute_sql:
    kind: clickhouse-execute-sql
    source: clickhouse-source
    description: Use this tool to execute SQL.

  list_databases:
    kind: clickhouse-list-databases
    source: clickhouse-source
    description: Use this tool to list all databases in ClickHouse.

  list_tables:
    kind: clickhouse-list-tables
    source: clickhouse-source
    description: Use this tool to list all tables in a specific ClickHouse database.

toolsets:
  clickhouse_database_tools:
    - execute_sql
    - list_databases
    - list_tables

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/firestore/firestore-get-documents.md:
--------------------------------------------------------------------------------

```markdown
---
title: "firestore-get-documents"
type: docs
weight: 1
description: >
  A "firestore-get-documents" tool retrieves multiple documents from Firestore by their paths.
aliases:
- /resources/tools/firestore-get-documents
---

## About

A `firestore-get-documents` tool retrieves multiple documents from Firestore by
their paths.
It's compatible with the following sources:

- [firestore](../../sources/firestore.md)

`firestore-get-documents` takes one input parameter `documentPaths` which is an
array of document paths, and returns the documents' data along with metadata
such as existence status, creation time, update time, and read time.

## Example

```yaml
tools:
  get_user_documents:
    kind: firestore-get-documents
    source: my-firestore-source
    description: Use this tool to retrieve multiple documents from Firestore.
```

## Reference

| **field**   |    **type**    | **required** | **description**                                            |
|-------------|:--------------:|:------------:|------------------------------------------------------------|
| kind        |     string     |     true     | Must be "firestore-get-documents".                         |
| source      |     string     |     true     | Name of the Firestore source to retrieve documents from.   |
| description |     string     |     true     | Description of the tool that is passed to the LLM.         |

```

--------------------------------------------------------------------------------
/tests/auth.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//	http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package tests

import (
	"context"
	"os"
	"os/exec"
	"strings"

	"google.golang.org/api/idtoken"
)

var ServiceAccountEmail = os.Getenv("SERVICE_ACCOUNT_EMAIL")
var ClientId = os.Getenv("CLIENT_ID")

// GetGoogleIdToken retrieve and return the Google ID token
func GetGoogleIdToken(audience string) (string, error) {
	// For local testing - use gcloud command to print personal ID token
	cmd := exec.Command("gcloud", "auth", "print-identity-token")
	output, err := cmd.Output()
	if err == nil {
		return strings.TrimSpace(string(output)), nil
	}
	// For Cloud Build testing - retrieve ID token from GCE metadata server
	ts, err := idtoken.NewTokenSource(context.Background(), ClientId)
	if err != nil {
		return "", err
	}
	token, err := ts.Token()
	if err != nil {
		return "", err
	}
	return token.AccessToken, nil
}

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/firestore/firestore-delete-documents.md:
--------------------------------------------------------------------------------

```markdown
---
title: "firestore-delete-documents"
type: docs
weight: 1
description: >
  A "firestore-delete-documents" tool deletes multiple documents from Firestore by their paths.
aliases:
- /resources/tools/firestore-delete-documents
---

## About

A `firestore-delete-documents` tool deletes multiple documents from Firestore by
their paths.
It's compatible with the following sources:

- [firestore](../../sources/firestore.md)

`firestore-delete-documents` takes one input parameter `documentPaths` which is
an array of document paths to delete. The tool uses Firestore's BulkWriter for
efficient batch deletion and returns the success status for each document.

## Example

```yaml
tools:
  delete_user_documents:
    kind: firestore-delete-documents
    source: my-firestore-source
    description: Use this tool to delete multiple documents from Firestore.
```

## Reference

| **field**   |     **type**   | **required** | **description**                                          |
|-------------|:--------------:|:------------:|----------------------------------------------------------|
| kind        |     string     |     true     | Must be "firestore-delete-documents".                    |
| source      |     string     |     true     | Name of the Firestore source to delete documents from.   |
| description |     string     |     true     | Description of the tool that is passed to the LLM.       |

```

--------------------------------------------------------------------------------
/internal/server/web.go:
--------------------------------------------------------------------------------

```go
package server

import (
	"bytes"
	"embed"
	"fmt"
	"io"
	"io/fs"
	"net/http"

	"github.com/go-chi/chi/v5"
	"github.com/go-chi/chi/v5/middleware"
)

//go:embed all:static
var staticContent embed.FS

// webRouter creates a router that represents the routes under /ui
func webRouter() (chi.Router, error) {
	r := chi.NewRouter()
	r.Use(middleware.StripSlashes)

	// direct routes for html pages to provide clean URLs
	r.Get("/", func(w http.ResponseWriter, r *http.Request) { serveHTML(w, r, "static/index.html") })
	r.Get("/tools", func(w http.ResponseWriter, r *http.Request) { serveHTML(w, r, "static/tools.html") })
	r.Get("/toolsets", func(w http.ResponseWriter, r *http.Request) { serveHTML(w, r, "static/toolsets.html") })

	// handler for all other static files/assets
	staticFS, _ := fs.Sub(staticContent, "static")
	r.Handle("/*", http.StripPrefix("/ui", http.FileServer(http.FS(staticFS))))

	return r, nil
}

func serveHTML(w http.ResponseWriter, r *http.Request, filepath string) {
	file, err := staticContent.Open(filepath)
	if err != nil {
		http.Error(w, "File not found", http.StatusNotFound)
		return
	}
	defer file.Close()

	fileBytes, err := io.ReadAll(file)
	if err != nil {
		http.Error(w, fmt.Sprintf("Error reading file: %v", err), http.StatusInternalServerError)
		return
	}

	fileInfo, err := file.Stat()
	if err != nil {
		return
	}
	http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), bytes.NewReader(fileBytes))
}

```

--------------------------------------------------------------------------------
/internal/tools/mysql/mysqlcommon/mysqlcommon.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package mysqlcommon

import (
	"database/sql"
	"encoding/json"
	"reflect"
)

// ConvertToType handles casting mysql returns to the right type
// types for mysql driver: https://github.com/go-sql-driver/mysql/blob/v1.9.3/fields.go
// all numeric type or unknown type will be return as is.
func ConvertToType(t *sql.ColumnType, v any) (any, error) {
	switch t.ScanType() {
	case reflect.TypeOf(""), reflect.TypeOf([]byte{}), reflect.TypeOf(sql.NullString{}):
		// unmarshal JSON data before returning to prevent double marshaling
		if t.DatabaseTypeName() == "JSON" {
			// unmarshal JSON data before storing to prevent double marshaling
			var unmarshaledData any
			err := json.Unmarshal(v.([]byte), &unmarshaledData)
			if err != nil {
				return nil, err
			}
			return unmarshaledData, nil
		}
		return string(v.([]byte)), nil
	default:
		return v, nil
	}
}

```

--------------------------------------------------------------------------------
/.hugo/layouts/shortcodes/regionInclude.html:
--------------------------------------------------------------------------------

```html
{{/*
  snippet.html
  Usage:
    {{< regionInclude "filename.md" "region_name" >}}
    {{< regionInclude "filename.python" "region_name" "python" >}}
*/}}

{{ $file := .Get 0 }}
{{ $region := .Get 1 }}
{{ $lang := .Get 2 | default "text" }}
{{ $path := printf "%s%s" .Page.File.Dir $file }}

{{ if or (not $file) (eq $file "") }}
  {{ errorf "The file parameter (first argument) is required and must be non-empty in %s" .Page.File.Path }}
{{ end }}
{{ if or (not $region) (eq $region "") }}
  {{ errorf "The region parameter (second argument) is required and must be non-empty in %s" .Page.File.Path }}
{{ end }}
{{ if not (fileExists $path) }}
  {{ errorf "File %q not found (referenced in %s)" $path .Page.File.Path }}
{{ end }}

{{ $content := readFile $path }}
{{ $start_tag := printf "[START %s]" $region }}
{{ $end_tag := printf "[END %s]" $region }}

{{ $snippet := "" }}
{{ $in_snippet := false }}
{{ range split $content "\n" }}
  {{ if $in_snippet }}
    {{ if in . $end_tag }}
      {{ $in_snippet = false }}
    {{ else }}
      {{ $snippet = printf "%s%s\n" $snippet . }}
    {{ end }}
  {{ else if in . $start_tag }}
    {{ $in_snippet = true }}
  {{ end }}
{{ end }}

{{ if eq (trim $snippet "") "" }}
  {{ errorf "Region %q not found or empty in file %s (referenced in %s)" $region $file .Page.File.Path }}
{{ end }}

{{ if eq $lang "text" }}
  {{ $snippet | markdownify }}
{{ else }}
  {{ highlight (trim $snippet "\n") $lang "" }}
{{ end }}

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/cloud-sql-mssql-admin.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
  cloud-sql-admin-source:
    kind: cloud-sql-admin

tools:
  create_instance:
    kind: cloud-sql-mssql-create-instance
    source: cloud-sql-admin-source
  get_instance:
    kind: cloud-sql-get-instance
    source: cloud-sql-admin-source
  list_instances:
    kind: cloud-sql-list-instances
    source: cloud-sql-admin-source
  create_database:
    kind: cloud-sql-create-database
    source: cloud-sql-admin-source
  list_databases:
    kind: cloud-sql-list-databases
    source: cloud-sql-admin-source
  create_user:
    kind: cloud-sql-create-users
    source: cloud-sql-admin-source
  wait_for_operation:
    kind: cloud-sql-wait-for-operation
    source: cloud-sql-admin-source

toolsets:
  cloud_sql_mssql_admin_tools:
    - create_instance
    - get_instance
    - list_instances
    - create_database
    - list_databases
    - create_user
    - wait_for_operation

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/cloud-sql-mysql-admin.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
  cloud-sql-admin-source:
    kind: cloud-sql-admin

tools:
  create_instance:
    kind: cloud-sql-mysql-create-instance
    source: cloud-sql-admin-source
  get_instance:
    kind: cloud-sql-get-instance
    source: cloud-sql-admin-source
  list_instances:
    kind: cloud-sql-list-instances
    source: cloud-sql-admin-source
  create_database:
    kind: cloud-sql-create-database
    source: cloud-sql-admin-source
  list_databases:
    kind: cloud-sql-list-databases
    source: cloud-sql-admin-source
  create_user:
    kind: cloud-sql-create-users
    source: cloud-sql-admin-source
  wait_for_operation:
    kind: cloud-sql-wait-for-operation
    source: cloud-sql-admin-source

toolsets:
  cloud_sql_mysql_admin_tools:
    - create_instance
    - get_instance
    - list_instances
    - create_database
    - list_databases
    - create_user
    - wait_for_operation

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/cloud-sql-postgres-admin.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
  cloud-sql-admin-source:
    kind: cloud-sql-admin

tools:
  create_instance:
    kind: cloud-sql-postgres-create-instance
    source: cloud-sql-admin-source
  get_instance:
    kind: cloud-sql-get-instance
    source: cloud-sql-admin-source
  list_instances:
    kind: cloud-sql-list-instances
    source: cloud-sql-admin-source
  create_database:
    kind: cloud-sql-create-database
    source: cloud-sql-admin-source
  list_databases:
    kind: cloud-sql-list-databases
    source: cloud-sql-admin-source
  create_user:
    kind: cloud-sql-create-users
    source: cloud-sql-admin-source
  wait_for_operation:
    kind: cloud-sql-wait-for-operation
    source: cloud-sql-admin-source

toolsets:
  cloud_sql_postgres_admin_tools:
    - create_instance
    - get_instance
    - list_instances
    - create_database
    - list_databases
    - create_user
    - wait_for_operation

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/looker/looker-get-explores.md:
--------------------------------------------------------------------------------

```markdown
---
title: "looker-get-explores"
type: docs
weight: 1
description: >
  A "looker-get-explores" tool returns all explores
  for the given model from the source.
aliases:
- /resources/tools/looker-get-explores
---

## About

A `looker-get-explores` tool returns all explores
for a given model from the source.

It's compatible with the following sources:

- [looker](../../sources/looker.md)

`looker-get-explores` accepts one parameter, the
`model` id.

The return type is an array of maps, each map is formatted like:

```json
{
    "name": "explore name",
    "description": "explore description",
    "label": "explore label",
    "group_label": "group label"
}
```
## Example

```yaml
tools:
    get_explores:
        kind: looker-get-explores
        source: looker-source
        description: |
          The get_explores tool retrieves the list of explores defined in a LookML model
          in the Looker system.

          It takes one parameter, the model_name looked up from get_models.
```

## Reference

| **field**   | **type** | **required** | **description**                                    |
|-------------|:--------:|:------------:|----------------------------------------------------|
| kind        |  string  |     true     | Must be "looker-get-explores".                     |
| source      |  string  |     true     | Name of the source the SQL should execute on.      |
| description |  string  |     true     | Description of the tool that is passed to the LLM. |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/mssql/mssql-execute-sql.md:
--------------------------------------------------------------------------------

```markdown
---
title: "mssql-execute-sql"
type: docs
weight: 1
description: >
  A "mssql-execute-sql" tool executes a SQL statement against a SQL Server
  database.
aliases:
- /resources/tools/mssql-execute-sql
---

## About

A `mssql-execute-sql` tool executes a SQL statement against a SQL Server
database. It's compatible with any of the following sources:

- [cloud-sql-mssql](../../sources/cloud-sql-mssql.md)
- [mssql](../../sources/mssql.md)

`mssql-execute-sql` takes one input parameter `sql` and run the sql
statement against the `source`.

> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.

## Example

```yaml
tools:
 execute_sql_tool:
    kind: mssql-execute-sql
    source: my-mssql-instance
    description: Use this tool to execute sql statement.
```

## Reference

| **field**   |                  **type**                  | **required** | **description**                                    |
|-------------|:------------------------------------------:|:------------:|----------------------------------------------------|
| kind        |                   string                   |     true     | Must be "mssql-execute-sql".                       |
| source      |                   string                   |     true     | Name of the source the SQL should execute on.      |
| description |                   string                   |     true     | Description of the tool that is passed to the LLM. |

```

--------------------------------------------------------------------------------
/.github/sync-repo-settings.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Synchronize repository settings from a centralized config
# https://github.com/googleapis/repo-automation-bots/tree/main/packages/sync-repo-settings
# Install: https://github.com/apps/sync-repo-settings

# Disable merge commits
rebaseMergeAllowed: true
squashMergeAllowed: true
mergeCommitAllowed: false
# Enable branch protection
branchProtectionRules:
  - pattern: main
    isAdminEnforced: true
    requiredStatusCheckContexts:
      - "cla/google"
      - "lint"
      - "conventionalcommits.org"
      - "header-check"
    # - Add required status checks like presubmit tests
      - "unit tests (ubuntu-latest)"
      - "unit tests (windows-latest)"
      - "unit tests (macos-latest)"
      - "integration-test-pr (toolbox-testing-438616)"
    requiredApprovingReviewCount: 1
    requiresCodeOwnerReviews: true
    requiresStrictStatusChecks: true

# Set team access
permissionRules:
  - team: senseai-eco
    permission: admin

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/postgres/postgres-list-installed-extensions.md:
--------------------------------------------------------------------------------

```markdown
---
title: "postgres-list-installed-extensions"
type: docs
weight: 1
description: >
  The "postgres-list-installed-extensions" tool retrieves all PostgreSQL
  extensions installed on a Postgres database.
aliases:
- /resources/tools/postgres-list-installed-extensions
---

## About

The `postgres-list-installed-extensions` tool retrieves all PostgreSQL
extensions installed on a Postgres database. It's compatible with any of the
following sources:

- [alloydb-postgres](../../sources/alloydb-pg.md)
- [cloud-sql-postgres](../../sources/cloud-sql-pg.md)
- [postgres](../../sources/postgres.md)

`postgres-list-installed-extensions` lists all installed PostgreSQL extensions
(extension name, version, schema, owner, description) as JSON. The does not
support any input parameter.

## Example

```yaml
tools:
  list_installed_extensions:
    kind: postgres-list-installed-extensions
    source: postgres-source
    description: List all installed PostgreSQL extensions with their name, version, schema, owner, and description.
```

## Reference

| **field**   | **type** | **required** | **description**                                    |
|-------------|:--------:|:------------:|----------------------------------------------------|
| kind        |  string  |     true     | Must be "postgres-list-active-queries".            |
| source      |  string  |     true     | Name of the source the SQL should execute on.      |
| description |  string  |     true     | Description of the tool that is passed to the LLM. |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/looker/looker-get-models.md:
--------------------------------------------------------------------------------

```markdown
---
title: "looker-get-models"
type: docs
weight: 1
description: >
  A "looker-get-models" tool returns all the models in the source.
aliases:
- /resources/tools/looker-get-models
---

## About

A `looker-get-models` tool returns all the models in the source.

It's compatible with the following sources:

- [looker](../../sources/looker.md)

`looker-get-models` accepts no parameters.

## Example

```yaml
tools:
    get_models:
        kind: looker-get-models
        source: looker-source
        description: |
          The get_models tool retrieves the list of LookML models in the Looker system.

          It takes no parameters.
```

## Reference

| **field**   |                  **type**                  | **required** | **description**                                                                                  |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind        |                   string                   |     true     | Must be "looker-get-models".                                                                     |
| source      |                   string                   |     true     | Name of the source the SQL should execute on.                                                    |
| description |                   string                   |     true     | Description of the tool that is passed to the LLM.                                               |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/alloydb/alloydb-get-cluster.md:
--------------------------------------------------------------------------------

```markdown
---
title: alloydb-get-cluster
type: docs
weight: 1
description: "The \"alloydb-get-cluster\" tool retrieves details for a specific AlloyDB cluster.\n"
aliases: [/resources/tools/alloydb-get-cluster]
---

## About

The `alloydb-get-cluster` tool retrieves detailed information for a single,
specified AlloyDB cluster. It is compatible with
[alloydb-admin](../../sources/alloydb-admin.md) source.

| Parameter  | Type   | Description                                        | Required |
| :--------- | :----- | :------------------------------------------------- | :------- |
| `project`  | string | The GCP project ID to get cluster for.             | Yes      |
| `location` | string | The location of the cluster (e.g., 'us-central1'). | Yes      |
| `cluster`  | string | The ID of the cluster to retrieve.                 | Yes      |

## Example

```yaml
tools:
  get_specific_cluster:
    kind: alloydb-get-cluster
    source: my-alloydb-admin-source
    description: Use this tool to retrieve details for a specific AlloyDB cluster.
```

## Reference

| **field**   | **type** | **required** | **description**                                      |
| ----------- | :------: | :----------: | ---------------------------------------------------- |
| kind        |  string  |     true     | Must be alloydb-get-cluster.                         |
| source      |  string  |     true     | The name of an `alloydb-admin` source.               |
| description |  string  |     false    | Description of the tool that is passed to the agent. |

```

--------------------------------------------------------------------------------
/internal/tools/http_method.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//	http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tools

import (
	"context"
	"fmt"
	"net/http"
	"strings"
)

// HTTPMethod is a string of a valid HTTP method (e.g "GET")
type HTTPMethod string

// isValidHTTPMethod checks if the input string matches one of the method constants defined in the net/http package
func isValidHTTPMethod(method string) bool {

	switch method {
	case http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete,
		http.MethodPatch, http.MethodHead, http.MethodOptions, http.MethodTrace,
		http.MethodConnect:
		return true
	}
	return false
}

func (i *HTTPMethod) UnmarshalYAML(ctx context.Context, unmarshal func(interface{}) error) error {
	var httpMethod string
	if err := unmarshal(&httpMethod); err != nil {
		return fmt.Errorf(`error unmarshalling HTTP method: %s`, err)
	}
	httpMethod = strings.ToUpper(httpMethod)
	if !isValidHTTPMethod(httpMethod) {
		return fmt.Errorf(`%s is not a valid http method`, httpMethod)
	}
	*i = HTTPMethod(httpMethod)
	return nil
}

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/alloydb/alloydb-list-users.md:
--------------------------------------------------------------------------------

```markdown
---
title: alloydb-list-users
type: docs
weight: 1
description: "The \"alloydb-list-users\" tool lists all database users within an AlloyDB cluster.\n"
aliases: [/resources/tools/alloydb-list-users]
---

## About

The `alloydb-list-users` tool lists all database users within an AlloyDB
cluster. It is compatible with [alloydb-admin](../../sources/alloydb-admin.md)
source.
The tool takes the following input parameters:

| Parameter  | Type   | Description                                        | Required |
| :--------- | :----- | :------------------------------------------------- | :------- |
| `project`  | string | The GCP project ID to list users for.              | Yes      |
| `cluster`  | string | The ID of the cluster to list users from.          | Yes      |
| `location` | string | The location of the cluster (e.g., 'us-central1'). | Yes      |

## Example

```yaml
tools:
  list_users:
    kind: alloydb-list-users
    source: alloydb-admin-source
    description: Use this tool to list all database users within an AlloyDB cluster
```

## Reference

| **field**   | **type** | **required** | **description**                                      |
| ----------- | :------: | :----------: | ---------------------------------------------------- |
| kind        |  string  |     true     | Must be alloydb-list-users.                          |
| source      |  string  |     true     | The name of an `alloydb-admin` source.               |
| description |  string  |     false    | Description of the tool that is passed to the agent. |

```

--------------------------------------------------------------------------------
/.ci/quickstart_test/setup_hotels_sample.sql:
--------------------------------------------------------------------------------

```sql
-- Copyright 2025 Google LLC
-- 
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
-- 
--      http://www.apache.org/licenses/LICENSE-2.0
-- 
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

TRUNCATE TABLE $TABLE_NAME;

INSERT INTO $TABLE_NAME (id, name, location, price_tier, checkin_date, checkout_date, booked)
VALUES
  (1, 'Hilton Basel', 'Basel', 'Luxury', '2024-04-22', '2024-04-20', B'0'),
  (2, 'Marriott Zurich', 'Zurich', 'Upscale', '2024-04-14', '2024-04-21', B'0'),
  (3, 'Hyatt Regency Basel', 'Basel', 'Upper Upscale', '2024-04-02', '2024-04-20', B'0'),
  (4, 'Radisson Blu Lucerne', 'Lucerne', 'Midscale', '2024-04-24', '2024-04-05', B'0'),
  (5, 'Best Western Bern', 'Bern', 'Upper Midscale', '2024-04-23', '2024-04-01', B'0'),
  (6, 'InterContinental Geneva', 'Geneva', 'Luxury', '2024-04-23', '2024-04-28', B'0'),
  (7, 'Sheraton Zurich', 'Zurich', 'Upper Upscale', '2024-04-27', '2024-04-02', B'0'),
  (8, 'Holiday Inn Basel', 'Basel', 'Upper Midscale', '2024-04-24', '2024-04-09', B'0'),
  (9, 'Courtyard Zurich', 'Zurich', 'Upscale', '2024-04-03', '2024-04-13', B'0'),
  (10, 'Comfort Inn Bern', 'Bern', 'Midscale', '2024-04-04', '2024-04-16', B'0');
```

--------------------------------------------------------------------------------
/.hugo/layouts/shortcodes/ipynb.html:
--------------------------------------------------------------------------------

```html
{{ $notebookFile := .Get 0 }}
{{ with .Page.Resources.Get $notebookFile }}

  {{ $content := .Content | transform.Unmarshal }}
  {{ range $content.cells }}

    {{ if eq .cell_type "markdown" }}
      <div class="notebook-markdown">
        {{ $markdown := "" }}
        {{ range .source }}{{ $markdown = print $markdown . }}{{ end }}
        {{ $markdown | markdownify }}
      </div>
    {{ end }}

    {{ if eq .cell_type "code" }}
      <div class="notebook-code">
        {{ $code := "" }}
        {{ range .source }}{{ $code = print $code . }}{{ end }}
        {{ highlight $code "python" "" }}

        {{ range .outputs }}
          <div class="notebook-output">
            {{ with .text }}
              <pre class="notebook-stream"><code>{{- range . }}{{ . }}{{ end -}}</code></pre>
            {{ end }}

            {{ with .data }}
              {{ with index . "image/png" }}
                <img src="data:image/png;base64,{{ . }}" alt="Notebook output image">
              {{ end }}
              {{ with index . "image/jpeg" }}
                <img src="data:image/jpeg;base64,{{ . }}" alt="Notebook output image">
              {{ end }}
              {{ with index . "text/html" }}
                {{ $html := "" }}
                {{ range . }}{{ $html = print $html . }}{{ end }}
                {{ $html | safeHTML }}
              {{ end }}
            {{ end }}
          </div>
        {{ end }}
      </div>
    {{ end }}
  {{ end }}
{{ else }}
  <p style="color: red;">Error: Notebook '{{ $notebookFile }}' not found in page resources.</p>
{{ end }}
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudsql/cloudsqlcreatedatabase.md:
--------------------------------------------------------------------------------

```markdown
---
title: cloud-sql-create-database
type: docs
weight: 10
description: >
  Create a new database in a Cloud SQL instance.
---

The `cloud-sql-create-database` tool creates a new database in a specified Cloud
SQL instance.

{{< notice info >}}
This tool uses a `source` of kind `cloud-sql-admin`.
{{< /notice >}}

## Example

```yaml
tools:
  create-cloud-sql-database:
    kind: cloud-sql-create-database
    source: my-cloud-sql-admin-source
    description: "Creates a new database in a Cloud SQL instance."
```

## Reference

| **field**   | **type** | **required** | **description**                                  |
| ----------- | :------: | :----------: | ------------------------------------------------ |
| kind        |  string  |     true     | Must be "cloud-sql-create-database".             |
| source      |  string  |     true     | The name of the `cloud-sql-admin` source to use. |
| description |  string  |     false    | A description of the tool.                       |

## Input Parameters

| **parameter** | **type** | **required** | **description**                                                    |
| ------------- | :------: | :----------: | ------------------------------------------------------------------ |
| project       |  string  |     true     | The project ID.                                                    |
| instance      |  string  |     true     | The ID of the instance where the database will be created.         |
| name          |  string  |     true     | The name for the new database. Must be unique within the instance. |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/looker/looker-conversational-analytics.md:
--------------------------------------------------------------------------------

```markdown
---
title: "looker-conversational-analytics"
type: docs
weight: 1
description: >
  The "looker-conversational-analytics" tool will use the Conversational
  Analaytics API to analyze data from Looker
aliases:
- /resources/tools/looker-conversational-analytics
---

## About

A `looker-conversational-analytics` tool allows you to ask questions about your Looker data.

It's compatible with the following sources:

- [looker](../../sources/looker.md)

`looker-conversational-analytics` accepts two parameters:

1. `user_query_with_context`: The question asked of the Conversational Analytics system.
2. `explore_references`: A list of one to five explores that can be queried to answer the
   question. The form of the entry is `[{"model": "model name", "explore": "explore name"}, ...]`

## Example

```yaml
tools:
    ask_data_insights:
        kind: looker-conversational-analytics
        source: looker-source
        description: |
          Use this tool to perform data analysis, get insights,
          or answer complex questions about the contents of specific
          Looker explores.
```

## Reference

| **field**   | **type** | **required** | **description**                                   |
|-------------|:--------:|:------------:|----------------------------------------------------|
| kind        |  string  |     true     | Must be "lookerca-conversational-analytics".       |
| source      |  string  |     true     | Name of the source the SQL should execute on.      |
| description |  string  |     true     | Description of the tool that is passed to the LLM. |
```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudsql/cloudsqllistinstances.md:
--------------------------------------------------------------------------------

```markdown
---
title: Cloud SQL List Instances
type: docs
weight: 1
description: "List Cloud SQL instances in a project.\n"
---

The `cloud-sql-list-instances` tool lists all Cloud SQL instances in a specified
Google Cloud project.

{{< notice info >}}
This tool uses the `cloud-sql-admin` source, which automatically handles
authentication on behalf of the user.
{{< /notice >}}

## Configuration

Here is an example of how to configure the `cloud-sql-list-instances` tool in
your `tools.yaml` file:

```yaml
sources:
  my-cloud-sql-admin-source:
    kind: cloud-sql-admin

tools:
  list_my_instances:
    kind: cloud-sql-list-instances
    source: my-cloud-sql-admin-source
    description: Use this tool to list all Cloud SQL instances in a project.
```

## Parameters

The `cloud-sql-list-instances` tool has one required parameter:

| **field** | **type** | **required** | **description**              |
| --------- | :------: | :----------: | ---------------------------- |
| project   |  string  |     true     | The Google Cloud project ID. |

## Reference

| **field**   | **type** | **required** | **description**                                                |
|-------------|:--------:|:------------:|----------------------------------------------------------------|
| kind        |  string  |     true     | Must be "cloud-sql-list-instances".                            |
| description |  string  |    false     | Description of the tool that is passed to the agent.           |
| source      |  string  |     true     | The name of the `cloud-sql-admin` source to use for this tool. |

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/spanner.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
  spanner-source:
    kind: spanner
    project: ${SPANNER_PROJECT}
    instance: ${SPANNER_INSTANCE}
    database: ${SPANNER_DATABASE}
    dialect: ${SPANNER_DIALECT:googlesql}

tools:
  execute_sql:
    kind: spanner-execute-sql
    source: spanner-source
    description: Use this tool to execute DML SQL. Please use the ${SPANNER_DIALECT:googlesql} interface for Spanner.

  execute_sql_dql:
    kind: spanner-execute-sql
    source: spanner-source
    description: Use this tool to execute DQL SQL. Please use the ${SPANNER_DIALECT:googlesql} interface for Spanner.
    readOnly: true

  list_tables:
    kind: spanner-list-tables
    source: spanner-source
    description: "Lists detailed schema information (object type, columns, constraints, indexes) as JSON for user-created tables (ordinary or partitioned). Filters by a comma-separated list of names. If names are omitted, lists all tables in user schemas."

toolsets:
  spanner-database-tools:
    - execute_sql
    - execute_sql_dql
    - list_tables

```

--------------------------------------------------------------------------------
/cmd/options_test.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cmd

import (
	"errors"
	"io"
	"testing"

	"github.com/spf13/cobra"
)

func TestCommandOptions(t *testing.T) {
	w := io.Discard
	tcs := []struct {
		desc    string
		isValid func(*Command) error
		option  Option
	}{
		{
			desc: "with logger",
			isValid: func(c *Command) error {
				if c.outStream != w || c.errStream != w {
					return errors.New("loggers do not match")
				}
				return nil
			},
			option: WithStreams(w, w),
		},
	}
	for _, tc := range tcs {
		t.Run(tc.desc, func(t *testing.T) {
			got, err := invokeProxyWithOption(tc.option)
			if err != nil {
				t.Fatal(err)
			}
			if err := tc.isValid(got); err != nil {
				t.Errorf("option did not initialize command correctly: %v", err)
			}
		})
	}
}

func invokeProxyWithOption(o Option) (*Command, error) {
	c := NewCommand(o)
	// Keep the test output quiet
	c.SilenceUsage = true
	c.SilenceErrors = true
	// Disable execute behavior
	c.RunE = func(*cobra.Command, []string) error {
		return nil
	}

	err := c.Execute()
	return c, err
}

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/alloydb/alloydb-get-user.md:
--------------------------------------------------------------------------------

```markdown
---
title: alloydb-get-user
type: docs
weight: 1
description: "The \"alloydb-get-user\" tool retrieves details for a specific AlloyDB user.\n"
aliases: [/resources/tools/alloydb-get-user]
---

## About

The `alloydb-get-user` tool retrieves detailed information for a single,
specified AlloyDB user. It is compatible with
[alloydb-admin](../../sources/alloydb-admin.md) source.

| Parameter  | Type   | Description                                        | Required |
| :--------- | :----- | :------------------------------------------------- | :------- |
| `project`  | string | The GCP project ID to get user for.                | Yes      |
| `location` | string | The location of the cluster (e.g., 'us-central1'). | Yes      |
| `cluster`  | string | The ID of the cluster to retrieve the user from.   | Yes      |
| `user`     | string | The ID of the user to retrieve.                    | Yes      |

## Example

```yaml
tools:
  get_specific_user:
    kind: alloydb-get-user
    source: my-alloydb-admin-source
    description: Use this tool to retrieve details for a specific AlloyDB user.
```

## Reference

| **field**   | **type** | **required** | **description**                                      |
| ----------- | :------: | :----------: | ---------------------------------------------------- |
| kind        |  string  |     true     | Must be alloydb-get-user.                            |
| source      |  string  |     true     | The name of an `alloydb-admin` source.               |
| description |  string  |     false    | Description of the tool that is passed to the agent. |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/looker/looker-run-look.md:
--------------------------------------------------------------------------------

```markdown
---
title: "looker-run-look"
type: docs
weight: 1
description: >
  "looker-run-look" runs the query associated with a saved Look.
aliases:
- /resources/tools/looker-run-look
---

## About

The `looker-run-look` tool runs the query associated with a
saved Look.

It's compatible with the following sources:

- [looker](../../sources/looker.md)

`looker-run-look` takes one parameter, the `look_id`.

## Example

```yaml
tools:
    run_look:
        kind: looker-run-look
        source: looker-source
        description: |
          run_look Tool

          This tool runs the query associated with a look and returns
          the data in a JSON structure. It accepts the look_id as the
          parameter.
```

## Reference

| **field**   |                  **type**                  | **required** | **description**                                                                                  |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind        |                   string                   |     true     | Must be "looker-run-look"                                                                        |
| source      |                   string                   |     true     | Name of the source the SQL should execute on.                                                    |
| description |                   string                   |     true     | Description of the tool that is passed to the LLM.                                               |

```

--------------------------------------------------------------------------------
/internal/prebuiltconfigs/tools/cloud-sql-mssql.yaml:
--------------------------------------------------------------------------------

```yaml
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

sources:
    cloudsql-mssql-source:
        kind: cloud-sql-mssql
        project: ${CLOUD_SQL_MSSQL_PROJECT}
        region: ${CLOUD_SQL_MSSQL_REGION}
        instance: ${CLOUD_SQL_MSSQL_INSTANCE}
        database: ${CLOUD_SQL_MSSQL_DATABASE}
        ipAddress: ${CLOUD_SQL_MSSQL_IP_ADDRESS}
        user: ${CLOUD_SQL_MSSQL_USER}
        password: ${CLOUD_SQL_MSSQL_PASSWORD}
        ipType: ${CLOUD_SQL_MSSQL_IP_TYPE:public}
tools:
    execute_sql:
        kind: mssql-execute-sql
        source: cloudsql-mssql-source
        description: Use this tool to execute SQL.

    list_tables:
        kind: mssql-list-tables
        source: cloudsql-mssql-source
        description: "Lists detailed schema information (object type, columns, constraints, indexes, triggers, comment) as JSON for user-created tables (ordinary or partitioned). Filters by a comma-separated list of names. If names are omitted, lists all tables in user schemas."

toolsets:
    cloud_sql_mssql_database_tools:
        - execute_sql
        - list_tables

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudsql/cloudsqllistdatabases.md:
--------------------------------------------------------------------------------

```markdown
---
title: cloud-sql-list-databases
type: docs
weight: 1
description: List Cloud SQL databases in an instance.
---

The `cloud-sql-list-databases` tool lists all Cloud SQL databases in a specified
Google Cloud project and instance.

{{< notice info >}}
This tool uses the `cloud-sql-admin` source.
{{< /notice >}}

## Configuration

Here is an example of how to configure the `cloud-sql-list-databases` tool in your
`tools.yaml` file:

```yaml
sources:
  my-cloud-sql-admin-source:
    kind: cloud-sql-admin

tools:
  list_my_databases:
    kind: cloud-sql-list-databases
    source: my-cloud-sql-admin-source
    description: Use this tool to list all Cloud SQL databases in an instance.
```

## Parameters

The `cloud-sql-list-databases` tool has two required parameters:

| **field** | **type** | **required** | **description**              |
| --------- | :------: | :----------: | ---------------------------- |
| project   |  string  |     true     | The Google Cloud project ID. |
| instance  |  string  |     true     | The Cloud SQL instance ID.   |

## Reference

| **field**   | **type** | **required** | **description**                                                |
| ----------- | :------: | :----------: | -------------------------------------------------------------- |
| kind        |  string  |     true     | Must be "cloud-sql-list-databases".                            |
| source      |  string  |     true     | The name of the `cloud-sql-admin` source to use for this tool. |
| description |  string  |     false    | Description of the tool that is passed to the agent.           |

```

--------------------------------------------------------------------------------
/docs/en/resources/tools/spanner/spanner-execute-sql.md:
--------------------------------------------------------------------------------

```markdown
---
title: "spanner-execute-sql"
type: docs
weight: 1
description: >
  A "spanner-execute-sql" tool executes a SQL statement against a Spanner
  database.
aliases:
- /resources/tools/spanner-execute-sql
---

## About

A `spanner-execute-sql` tool executes a SQL statement against a Spanner
database. It's compatible with any of the following sources:

- [spanner](../../sources/spanner.md)

`spanner-execute-sql` takes one input parameter `sql` and run the sql
statement against the `source`.

> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.

## Example

```yaml
tools:
 execute_sql_tool:
    kind: spanner-execute-sql
    source: my-spanner-instance
    description: Use this tool to execute sql statement.
```

## Reference

| **field**   | **type** | **required** | **description**                                                                          |
|-------------|:--------:|:------------:|------------------------------------------------------------------------------------------|
| kind        |  string  |     true     | Must be "spanner-execute-sql".                                                           |
| source      |  string  |     true     | Name of the source the SQL should execute on.                                            |
| description |  string  |     true     | Description of the tool that is passed to the LLM.                                       |
| readOnly    |   bool   |    false     | When set to `true`, the `statement` is run as a read-only transaction. Default: `false`. |


```
Page 1/33FirstPrevNextLast