#
tokens: 49940/50000 127/784 files (page 1/45)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 1 of 45. Use http://codebase.md/googleapis/genai-toolbox?lines=true&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:
--------------------------------------------------------------------------------

```
1 | [submodule "docs2/themes/godocs"]
2 | 	path = docs2/themes/godocs
3 | 	url = https://github.com/themefisher/godocs.git
4 | 
```

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

```
 1 | # direnv
 2 | .envrc
 3 | 
 4 | # vscode
 5 | .vscode/
 6 | 
 7 | # idea
 8 | .idea/
 9 | 
10 | # npm
11 | node_modules
12 | 
13 | # hugo
14 | .hugo/public/
15 | .hugo/resources/_gen
16 | .hugo_build.lock
17 | 
18 | # coverage
19 | .coverage
20 | 
21 | # executable
22 | genai-toolbox
23 | toolbox
24 | 
```

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

```yaml
 1 | # Copyright 2024 Google LLC.
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | version: "2"
16 | linters:
17 |   enable:
18 |     - errcheck
19 |     - govet
20 |     - ineffassign
21 |     - staticcheck
22 |     - unused
23 |   exclusions:
24 |     presets:
25 |       - std-error-handling
26 | issues:
27 |   fix: true
28 | formatters:
29 |   enable:
30 |     - goimports
31 |   settings:
32 |     gofmt:
33 |       rewrite-rules:
34 |         - pattern: interface{}
35 |           replacement: any
36 |         - pattern: a[b:len(a)]
37 |           replacement: a[b:]
38 | 
```

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

```markdown
  1 | ![logo](./logo.png)
  2 | 
  3 | # MCP Toolbox for Databases
  4 | 
  5 | [![Docs](https://img.shields.io/badge/docs-MCP_Toolbox-blue)](https://googleapis.github.io/genai-toolbox/)
  6 | [![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=flat&logo=discord&logoColor=white)](https://discord.gg/Dmm69peqjh)
  7 | [![Medium](https://img.shields.io/badge/Medium-12100E?style=flat&logo=medium&logoColor=white)](https://medium.com/@mcp_toolbox)
  8 | [![Go Report Card](https://goreportcard.com/badge/github.com/googleapis/genai-toolbox)](https://goreportcard.com/report/github.com/googleapis/genai-toolbox)
  9 | 
 10 | > [!NOTE]
 11 | > MCP Toolbox for Databases is currently in beta, and may see breaking
 12 | > changes until the first stable release (v1.0).
 13 | 
 14 | MCP Toolbox for Databases is an open source MCP server for databases. It enables
 15 | you to develop tools easier, faster, and more securely by handling the complexities
 16 | such as connection pooling, authentication, and more.
 17 | 
 18 | This README provides a brief overview. For comprehensive details, see the [full
 19 | documentation](https://googleapis.github.io/genai-toolbox/).
 20 | 
 21 | > [!NOTE]
 22 | > This solution was originally named “Gen AI Toolbox for Databases” as
 23 | > its initial development predated MCP, but was renamed to align with recently
 24 | > added MCP compatibility.
 25 | 
 26 | <!-- TOC ignore:true -->
 27 | ## Table of Contents
 28 | 
 29 | <!-- TOC -->
 30 | 
 31 | - [Why Toolbox?](#why-toolbox)
 32 | - [General Architecture](#general-architecture)
 33 | - [Getting Started](#getting-started)
 34 |   - [Installing the server](#installing-the-server)
 35 |   - [Running the server](#running-the-server)
 36 |   - [Integrating your application](#integrating-your-application)
 37 | - [Configuration](#configuration)
 38 |   - [Sources](#sources)
 39 |   - [Tools](#tools)
 40 |   - [Toolsets](#toolsets)
 41 | - [Versioning](#versioning)
 42 |   - [Pre-1.0.0 Versioning](#pre-100-versioning)
 43 |   - [Post-1.0.0 Versioning](#post-100-versioning)
 44 | - [Contributing](#contributing)
 45 | - [Community](#community)
 46 | 
 47 | <!-- /TOC -->
 48 | 
 49 | ## Why Toolbox?
 50 | 
 51 | Toolbox helps you build Gen AI tools that let your agents access data in your
 52 | database. Toolbox provides:
 53 | 
 54 | - **Simplified development**: Integrate tools to your agent in less than 10
 55 |   lines of code, reuse tools between multiple agents or frameworks, and deploy
 56 |   new versions of tools more easily.
 57 | - **Better performance**: Best practices such as connection pooling,
 58 |   authentication, and more.
 59 | - **Enhanced security**: Integrated auth for more secure access to your data
 60 | - **End-to-end observability**: Out of the box metrics and tracing with built-in
 61 |   support for OpenTelemetry.
 62 | 
 63 | **⚡ Supercharge Your Workflow with an AI Database Assistant ⚡**
 64 | 
 65 | Stop context-switching and let your AI assistant become a true co-developer. By
 66 | [connecting your IDE to your databases with MCP Toolbox][connect-ide], you can
 67 | delegate complex and time-consuming database tasks, allowing you to build faster
 68 | and focus on what matters. This isn't just about code completion; it's about
 69 | giving your AI the context it needs to handle the entire development lifecycle.
 70 | 
 71 | Here’s how it will save you time:
 72 | 
 73 | - **Query in Plain English**: Interact with your data using natural language
 74 |   right from your IDE. Ask complex questions like, *"How many orders were
 75 |   delivered in 2024, and what items were in them?"* without writing any SQL.
 76 | - **Automate Database Management**: Simply describe your data needs, and let the
 77 |   AI assistant manage your database for you. It can handle generating queries,
 78 |   creating tables, adding indexes, and more.
 79 | - **Generate Context-Aware Code**: Empower your AI assistant to generate
 80 |   application code and tests with a deep understanding of your real-time
 81 |   database schema.  This accelerates the development cycle by ensuring the
 82 |   generated code is directly usable.
 83 | - **Slash Development Overhead**: Radically reduce the time spent on manual
 84 |   setup and boilerplate. MCP Toolbox helps streamline lengthy database
 85 |   configurations, repetitive code, and error-prone schema migrations.
 86 | 
 87 | Learn [how to connect your AI tools (IDEs) to Toolbox using MCP][connect-ide].
 88 | 
 89 | [connect-ide]: https://googleapis.github.io/genai-toolbox/how-to/connect-ide/
 90 | 
 91 | ## General Architecture
 92 | 
 93 | Toolbox sits between your application's orchestration framework and your
 94 | database, providing a control plane that is used to modify, distribute, or
 95 | invoke tools. It simplifies the management of your tools by providing you with a
 96 | centralized location to store and update tools, allowing you to share tools
 97 | between agents and applications and update those tools without necessarily
 98 | redeploying your application.
 99 | 
100 | ![architecture](./docs/en/getting-started/introduction/architecture.png)
101 | 
102 | ## Getting Started
103 | 
104 | ### Installing the server
105 | 
106 | For the latest version, check the [releases page][releases] and use the
107 | following instructions for your OS and CPU architecture.
108 | 
109 | [releases]: https://github.com/googleapis/genai-toolbox/releases
110 | 
111 | <details open>
112 | <summary>Binary</summary>
113 | 
114 | To install Toolbox as a binary:
115 | 
116 | <!-- {x-release-please-start-version} -->
117 | > <details>
118 | > <summary>Linux (AMD64)</summary>
119 | >
120 | > To install Toolbox as a binary on Linux (AMD64):
121 | >
122 | > ```sh
123 | > # see releases page for other versions
124 | > export VERSION=0.17.0
125 | > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
126 | > chmod +x toolbox
127 | > ```
128 | >
129 | > </details>
130 | > <details>
131 | > <summary>macOS (Apple Silicon)</summary>
132 | >
133 | > To install Toolbox as a binary on macOS (Apple Silicon):
134 | >
135 | > ```sh
136 | > # see releases page for other versions
137 | > export VERSION=0.17.0
138 | > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox
139 | > chmod +x toolbox
140 | > ```
141 | >
142 | > </details>
143 | > <details>
144 | > <summary>macOS (Intel)</summary>
145 | >
146 | > To install Toolbox as a binary on macOS (Intel):
147 | >
148 | > ```sh
149 | > # see releases page for other versions
150 | > export VERSION=0.17.0
151 | > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox
152 | > chmod +x toolbox
153 | > ```
154 | >
155 | > </details>
156 | > <details>
157 | > <summary>Windows (AMD64)</summary>
158 | >
159 | > To install Toolbox as a binary on Windows (AMD64):
160 | >
161 | > ```powershell
162 | > # see releases page for other versions
163 | > $VERSION = "0.17.0"
164 | > Invoke-WebRequest -Uri "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe" -OutFile "toolbox.exe"
165 | > ```
166 | >
167 | > </details>
168 | </details>
169 | 
170 | <details>
171 | <summary>Container image</summary>
172 | You can also install Toolbox as a container:
173 | 
174 | ```sh
175 | # see releases page for other versions
176 | export VERSION=0.17.0
177 | docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
178 | ```
179 | 
180 | </details>
181 | 
182 | <details>
183 | <summary>Homebrew</summary>
184 | 
185 | To install Toolbox using Homebrew on macOS or Linux:
186 | 
187 | ```sh
188 | brew install mcp-toolbox
189 | ```
190 | 
191 | </details>
192 | 
193 | <details>
194 | <summary>Compile from source</summary>
195 | 
196 | To install from source, ensure you have the latest version of
197 | [Go installed](https://go.dev/doc/install), and then run the following command:
198 | 
199 | ```sh
200 | go install github.com/googleapis/[email protected]
201 | ```
202 | <!-- {x-release-please-end} -->
203 | 
204 | </details>
205 | 
206 | <details>
207 | <summary>Gemini CLI Extensions</summary>
208 | 
209 | To install Gemini CLI Extensions for MCP Toolbox, run the following command:
210 | 
211 | ```sh
212 | gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox
213 | ```
214 | 
215 | </details>
216 | 
217 | ### Running the server
218 | 
219 | [Configure](#configuration) a `tools.yaml` to define your tools, and then
220 | execute `toolbox` to start the server:
221 | 
222 | <details open>
223 | <summary>Binary</summary>
224 | 
225 | To run Toolbox from binary:
226 | 
227 | ```sh
228 | ./toolbox --tools-file "tools.yaml"
229 | ```
230 | 
231 | ⓘ **NOTE:**  
232 | Toolbox enables dynamic reloading by default. To disable, use the
233 | `--disable-reload` flag.
234 | 
235 | </details>
236 | 
237 | <details>
238 | 
239 | <summary>Container image</summary>
240 | 
241 | To run the server after pulling the [container image](#installing-the-server):
242 | 
243 | ```sh
244 | export VERSION=0.11.0 # Use the version you pulled
245 | docker run -p 5000:5000 \
246 | -v $(pwd)/tools.yaml:/app/tools.yaml \
247 | us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION \
248 | --tools-file "/app/tools.yaml"
249 | ```
250 | 
251 | ⓘ **NOTE:**  
252 | The `-v` flag mounts your local `tools.yaml` into the container, and `-p` maps
253 | the container's port `5000` to your host's port `5000`.
254 | 
255 | </details>
256 | 
257 | <details>
258 | 
259 | <summary>Source</summary>
260 | 
261 | To run the server directly from source, navigate to the project root directory
262 | and run:
263 | 
264 | ```sh
265 | go run .
266 | ```
267 | 
268 | ⓘ **NOTE:**  
269 | This command runs the project from source, and is more suitable for development
270 | and testing. It does **not** compile a binary into your `$GOPATH`. If you want
271 | to compile a binary instead, refer the [Developer
272 | Documentation](./DEVELOPER.md#building-the-binary).
273 | 
274 | </details>
275 | 
276 | <details>
277 | 
278 | <summary>Homebrew</summary>
279 | 
280 | If you installed Toolbox using [Homebrew](https://brew.sh/), the `toolbox`
281 | binary is available in your system path. You can start the server with the same
282 | command:
283 | 
284 | ```sh
285 | toolbox --tools-file "tools.yaml"
286 | ```
287 | 
288 | </details>
289 | 
290 | <details>
291 | 
292 | <summary>Gemini CLI</summary>
293 | 
294 | Interact with your custom tools using natural language. Check
295 | [gemini-cli-extensions/mcp-toolbox](https://github.com/gemini-cli-extensions/mcp-toolbox)
296 | for more information.
297 | 
298 | </details>
299 | 
300 | You can use `toolbox help` for a full list of flags! To stop the server, send a
301 | terminate signal (`ctrl+c` on most platforms).
302 | 
303 | For more detailed documentation on deploying to different environments, check
304 | out the resources in the [How-to
305 | section](https://googleapis.github.io/genai-toolbox/how-to/)
306 | 
307 | ### Integrating your application
308 | 
309 | Once your server is up and running, you can load the tools into your
310 | application. See below the list of Client SDKs for using various frameworks:
311 | 
312 | <details open>
313 |   <summary>Python (<a href="https://github.com/googleapis/mcp-toolbox-sdk-python">Github</a>)</summary>
314 |   <br>
315 |   <blockquote>
316 | 
317 |   <details open>
318 |     <summary>Core</summary>
319 | 
320 | 1. Install [Toolbox Core SDK][toolbox-core]:
321 | 
322 |     ```bash
323 |     pip install toolbox-core
324 |     ```
325 | 
326 | 1. Load tools:
327 | 
328 |     ```python
329 |     from toolbox_core import ToolboxClient
330 | 
331 |     # update the url to point to your server
332 |     async with ToolboxClient("http://127.0.0.1:5000") as client:
333 | 
334 |         # these tools can be passed to your application!
335 |         tools = await client.load_toolset("toolset_name")
336 |     ```
337 | 
338 | For more detailed instructions on using the Toolbox Core SDK, see the
339 | [project's README][toolbox-core-readme].
340 | 
341 | [toolbox-core]: https://pypi.org/project/toolbox-core/
342 | [toolbox-core-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core/README.md
343 | 
344 |   </details>
345 |   <details>
346 |     <summary>LangChain / LangGraph</summary>
347 | 
348 | 1. Install [Toolbox LangChain SDK][toolbox-langchain]:
349 | 
350 |     ```bash
351 |     pip install toolbox-langchain
352 |     ```
353 | 
354 | 1. Load tools:
355 | 
356 |     ```python
357 |     from toolbox_langchain import ToolboxClient
358 | 
359 |     # update the url to point to your server
360 |     async with ToolboxClient("http://127.0.0.1:5000") as client:
361 | 
362 |         # these tools can be passed to your application!
363 |         tools = client.load_toolset()
364 |     ```
365 | 
366 |     For more detailed instructions on using the Toolbox LangChain SDK, see the
367 |     [project's README][toolbox-langchain-readme].
368 | 
369 |     [toolbox-langchain]: https://pypi.org/project/toolbox-langchain/
370 |     [toolbox-langchain-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/packages/toolbox-langchain/README.md
371 | 
372 |   </details>
373 |   <details>
374 |     <summary>LlamaIndex</summary>
375 | 
376 | 1. Install [Toolbox Llamaindex SDK][toolbox-llamaindex]:
377 | 
378 |     ```bash
379 |     pip install toolbox-llamaindex
380 |     ```
381 | 
382 | 1. Load tools:
383 | 
384 |     ```python
385 |     from toolbox_llamaindex import ToolboxClient
386 | 
387 |     # update the url to point to your server
388 |     async with ToolboxClient("http://127.0.0.1:5000") as client:
389 | 
390 |         # these tools can be passed to your application!
391 |         tools = client.load_toolset()
392 |     ```
393 | 
394 |     For more detailed instructions on using the Toolbox Llamaindex SDK, see the
395 |     [project's README][toolbox-llamaindex-readme].
396 | 
397 |     [toolbox-llamaindex]: https://pypi.org/project/toolbox-llamaindex/
398 |     [toolbox-llamaindex-readme]: https://github.com/googleapis/genai-toolbox-llamaindex-python/blob/main/README.md
399 | 
400 |   </details>
401 | </details>
402 | </blockquote>
403 | <details>
404 |   <summary>Javascript/Typescript (<a href="https://github.com/googleapis/mcp-toolbox-sdk-js">Github</a>)</summary>
405 |   <br>
406 |   <blockquote>
407 | 
408 |   <details open>
409 |     <summary>Core</summary>
410 | 
411 | 1. Install [Toolbox Core SDK][toolbox-core-js]:
412 | 
413 |     ```bash
414 |     npm install @toolbox-sdk/core
415 |     ```
416 | 
417 | 1. Load tools:
418 | 
419 |     ```javascript
420 |     import { ToolboxClient } from '@toolbox-sdk/core';
421 | 
422 |     // update the url to point to your server
423 |     const URL = 'http://127.0.0.1:5000';
424 |     let client = new ToolboxClient(URL);
425 | 
426 |     // these tools can be passed to your application!
427 |     const tools = await client.loadToolset('toolsetName');
428 |     ```
429 | 
430 |     For more detailed instructions on using the Toolbox Core SDK, see the
431 |     [project's README][toolbox-core-js-readme].
432 | 
433 |     [toolbox-core-js]: https://www.npmjs.com/package/@toolbox-sdk/core
434 |     [toolbox-core-js-readme]: https://github.com/googleapis/mcp-toolbox-sdk-js/blob/main/packages/toolbox-core/README.md
435 | 
436 |   </details>
437 |   <details>
438 |     <summary>LangChain / LangGraph</summary>
439 | 
440 | 1. Install [Toolbox Core SDK][toolbox-core-js]:
441 | 
442 |     ```bash
443 |     npm install @toolbox-sdk/core
444 |     ```
445 | 
446 | 2. Load tools:
447 | 
448 |     ```javascript
449 |     import { ToolboxClient } from '@toolbox-sdk/core';
450 | 
451 |     // update the url to point to your server
452 |     const URL = 'http://127.0.0.1:5000';
453 |     let client = new ToolboxClient(URL);
454 | 
455 |     // these tools can be passed to your application!
456 |     const toolboxTools = await client.loadToolset('toolsetName');
457 | 
458 |     // Define the basics of the tool: name, description, schema and core logic
459 |     const getTool = (toolboxTool) => tool(currTool, {
460 |         name: toolboxTool.getName(),
461 |         description: toolboxTool.getDescription(),
462 |         schema: toolboxTool.getParamSchema()
463 |     });
464 | 
465 |     // Use these tools in your Langchain/Langraph applications
466 |     const tools = toolboxTools.map(getTool);
467 |     ```
468 | 
469 |   </details>
470 |   <details>
471 |     <summary>Genkit</summary>
472 | 
473 | 1. Install [Toolbox Core SDK][toolbox-core-js]:
474 | 
475 |     ```bash
476 |     npm install @toolbox-sdk/core
477 |     ```
478 | 
479 | 2. Load tools:
480 | 
481 |     ```javascript
482 |     import { ToolboxClient } from '@toolbox-sdk/core';
483 |     import { genkit } from 'genkit';
484 | 
485 |     // Initialise genkit
486 |     const ai = genkit({
487 |         plugins: [
488 |             googleAI({
489 |                 apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY
490 |             })
491 |         ],
492 |         model: googleAI.model('gemini-2.0-flash'),
493 |     });
494 | 
495 |     // update the url to point to your server
496 |     const URL = 'http://127.0.0.1:5000';
497 |     let client = new ToolboxClient(URL);
498 | 
499 |     // these tools can be passed to your application!
500 |     const toolboxTools = await client.loadToolset('toolsetName');
501 | 
502 |     // Define the basics of the tool: name, description, schema and core logic
503 |     const getTool = (toolboxTool) => ai.defineTool({
504 |         name: toolboxTool.getName(),
505 |         description: toolboxTool.getDescription(),
506 |         schema: toolboxTool.getParamSchema()
507 |     }, toolboxTool)
508 | 
509 |     // Use these tools in your Genkit applications
510 |     const tools = toolboxTools.map(getTool);
511 |     ```
512 | 
513 |   </details>
514 | </details>
515 | </blockquote>
516 | <details>
517 |   <summary>Go (<a href="https://github.com/googleapis/mcp-toolbox-sdk-go">Github</a>)</summary>
518 |   <br>
519 |   <blockquote>
520 | 
521 |   <details open>
522 |     <summary>Core</summary>
523 | 
524 | 1. Install [Toolbox Go SDK][toolbox-go]:
525 | 
526 |     ```bash
527 |     go get github.com/googleapis/mcp-toolbox-sdk-go
528 |     ```
529 | 
530 | 1. Load tools:
531 | 
532 |     ```go
533 |     package main
534 | 
535 |     import (
536 |       "github.com/googleapis/mcp-toolbox-sdk-go/core"
537 |       "context"
538 |     )
539 | 
540 |     func main() {
541 |       // Make sure to add the error checks
542 |       // update the url to point to your server
543 |       URL := "http://127.0.0.1:5000";
544 |       ctx := context.Background()
545 | 
546 |       client, err := core.NewToolboxClient(URL)
547 | 
548 |       // Framework agnostic tools
549 |       tools, err := client.LoadToolset("toolsetName", ctx)
550 |     }
551 |     ```
552 | 
553 |     For more detailed instructions on using the Toolbox Go SDK, see the
554 |     [project's README][toolbox-core-go-readme].
555 | 
556 |     [toolbox-go]: https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core
557 |     [toolbox-core-go-readme]: https://github.com/googleapis/mcp-toolbox-sdk-go/blob/main/core/README.md
558 | 
559 |   </details>
560 |   <details>
561 |     <summary>LangChain Go</summary>
562 | 
563 | 1. Install [Toolbox Go SDK][toolbox-go]:
564 | 
565 |     ```bash
566 |     go get github.com/googleapis/mcp-toolbox-sdk-go
567 |     ```
568 | 
569 | 2. Load tools:
570 | 
571 |     ```go
572 |     package main
573 | 
574 |     import (
575 |       "context"
576 |       "encoding/json"
577 | 
578 |       "github.com/googleapis/mcp-toolbox-sdk-go/core"
579 |       "github.com/tmc/langchaingo/llms"
580 |     )
581 | 
582 |     func main() {
583 |       // Make sure to add the error checks
584 |       // update the url to point to your server
585 |       URL := "http://127.0.0.1:5000"
586 |       ctx := context.Background()
587 | 
588 |       client, err := core.NewToolboxClient(URL)
589 | 
590 |       // Framework agnostic tool
591 |       tool, err := client.LoadTool("toolName", ctx)
592 | 
593 |       // Fetch the tool's input schema
594 |       inputschema, err := tool.InputSchema()
595 | 
596 |       var paramsSchema map[string]any
597 |       _ = json.Unmarshal(inputschema, &paramsSchema)
598 | 
599 |       // Use this tool with LangChainGo
600 |       langChainTool := llms.Tool{
601 |         Type: "function",
602 |         Function: &llms.FunctionDefinition{
603 |           Name:        tool.Name(),
604 |           Description: tool.Description(),
605 |           Parameters:  paramsSchema,
606 |         },
607 |       }
608 |     }
609 | 
610 |     ```
611 | 
612 |   </details>
613 |   <details>
614 |     <summary>Genkit</summary>
615 | 
616 | 1. Install [Toolbox Go SDK][toolbox-go]:
617 | 
618 |     ```bash
619 |     go get github.com/googleapis/mcp-toolbox-sdk-go
620 |     ```
621 | 
622 | 2. Load tools:
623 | 
624 |     ```go
625 |     package main
626 |     import (
627 |       "context"
628 |       "log"
629 | 
630 |       "github.com/firebase/genkit/go/genkit"
631 |       "github.com/googleapis/mcp-toolbox-sdk-go/core"
632 |       "github.com/googleapis/mcp-toolbox-sdk-go/tbgenkit"
633 |     )
634 | 
635 |     func main() {
636 |       // Make sure to add the error checks
637 |       // Update the url to point to your server
638 |       URL := "http://127.0.0.1:5000"
639 |       ctx := context.Background()
640 |       g := genkit.Init(ctx)
641 | 
642 |       client, err := core.NewToolboxClient(URL)
643 | 
644 |       // Framework agnostic tool
645 |       tool, err := client.LoadTool("toolName", ctx)
646 | 
647 |       // Convert the tool using the tbgenkit package
648 |       // Use this tool with Genkit Go
649 |       genkitTool, err := tbgenkit.ToGenkitTool(tool, g)
650 |       if err != nil {
651 |         log.Fatalf("Failed to convert tool: %v\n", err)
652 |       }
653 |       log.Printf("Successfully converted tool: %s", genkitTool.Name())
654 |     }
655 |     ```
656 | 
657 |   </details>
658 |   <details>
659 |     <summary>Go GenAI</summary>
660 | 
661 | 1. Install [Toolbox Go SDK][toolbox-go]:
662 | 
663 |     ```bash
664 |     go get github.com/googleapis/mcp-toolbox-sdk-go
665 |     ```
666 | 
667 | 2. Load tools:
668 | 
669 |     ```go
670 |     package main
671 | 
672 |     import (
673 |       "context"
674 |       "encoding/json"
675 | 
676 |       "github.com/googleapis/mcp-toolbox-sdk-go/core"
677 |       "google.golang.org/genai"
678 |     )
679 | 
680 |     func main() {
681 |       // Make sure to add the error checks
682 |       // Update the url to point to your server
683 |       URL := "http://127.0.0.1:5000"
684 |       ctx := context.Background()
685 | 
686 |       client, err := core.NewToolboxClient(URL)
687 | 
688 |       // Framework agnostic tool
689 |       tool, err := client.LoadTool("toolName", ctx)
690 | 
691 |       // Fetch the tool's input schema
692 |       inputschema, err := tool.InputSchema()
693 | 
694 |       var schema *genai.Schema
695 |       _ = json.Unmarshal(inputschema, &schema)
696 | 
697 |       funcDeclaration := &genai.FunctionDeclaration{
698 |         Name:        tool.Name(),
699 |         Description: tool.Description(),
700 |         Parameters:  schema,
701 |       }
702 | 
703 |       // Use this tool with Go GenAI
704 |       genAITool := &genai.Tool{
705 |         FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration},
706 |       }
707 |     }
708 |     ```
709 | 
710 |   </details>
711 |   <details>
712 |     <summary>OpenAI Go</summary>
713 | 
714 | 1. Install [Toolbox Go SDK][toolbox-go]:
715 | 
716 |     ```bash
717 |     go get github.com/googleapis/mcp-toolbox-sdk-go
718 |     ```
719 | 
720 | 2. Load tools:
721 | 
722 |     ```go
723 |     package main
724 | 
725 |     import (
726 |       "context"
727 |       "encoding/json"
728 | 
729 |       "github.com/googleapis/mcp-toolbox-sdk-go/core"
730 |       openai "github.com/openai/openai-go"
731 |     )
732 | 
733 |     func main() {
734 |       // Make sure to add the error checks
735 |       // Update the url to point to your server
736 |       URL := "http://127.0.0.1:5000"
737 |       ctx := context.Background()
738 | 
739 |       client, err := core.NewToolboxClient(URL)
740 | 
741 |       // Framework agnostic tool
742 |       tool, err := client.LoadTool("toolName", ctx)
743 | 
744 |       // Fetch the tool's input schema
745 |       inputschema, err := tool.InputSchema()
746 | 
747 |       var paramsSchema openai.FunctionParameters
748 |       _ = json.Unmarshal(inputschema, &paramsSchema)
749 | 
750 |       // Use this tool with OpenAI Go
751 |       openAITool := openai.ChatCompletionToolParam{
752 |         Function: openai.FunctionDefinitionParam{
753 |           Name:        tool.Name(),
754 |           Description: openai.String(tool.Description()),
755 |           Parameters:  paramsSchema,
756 |         },
757 |       }
758 | 
759 |     }
760 |     ```
761 | 
762 |   </details>
763 | </details>
764 | </blockquote>
765 | </details>
766 | 
767 | ## Configuration
768 | 
769 | The primary way to configure Toolbox is through the `tools.yaml` file. If you
770 | have multiple files, you can tell toolbox which to load with the `--tools-file
771 | tools.yaml` flag.
772 | 
773 | You can find more detailed reference documentation to all resource types in the
774 | [Resources](https://googleapis.github.io/genai-toolbox/resources/).
775 | 
776 | ### Sources
777 | 
778 | The `sources` section of your `tools.yaml` defines what data sources your
779 | Toolbox should have access to. Most tools will have at least one source to
780 | execute against.
781 | 
782 | ```yaml
783 | sources:
784 |   my-pg-source:
785 |     kind: postgres
786 |     host: 127.0.0.1
787 |     port: 5432
788 |     database: toolbox_db
789 |     user: toolbox_user
790 |     password: my-password
791 | ```
792 | 
793 | For more details on configuring different types of sources, see the
794 | [Sources](https://googleapis.github.io/genai-toolbox/resources/sources).
795 | 
796 | ### Tools
797 | 
798 | The `tools` section of a `tools.yaml` define the actions an agent can take: what
799 | kind of tool it is, which source(s) it affects, what parameters it uses, etc.
800 | 
801 | ```yaml
802 | tools:
803 |   search-hotels-by-name:
804 |     kind: postgres-sql
805 |     source: my-pg-source
806 |     description: Search for hotels based on name.
807 |     parameters:
808 |       - name: name
809 |         type: string
810 |         description: The name of the hotel.
811 |     statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
812 | ```
813 | 
814 | For more details on configuring different types of tools, see the
815 | [Tools](https://googleapis.github.io/genai-toolbox/resources/tools).
816 | 
817 | ### Toolsets
818 | 
819 | The `toolsets` section of your `tools.yaml` allows you to define groups of tools
820 | that you want to be able to load together. This can be useful for defining
821 | different groups based on agent or application.
822 | 
823 | ```yaml
824 | toolsets:
825 |     my_first_toolset:
826 |         - my_first_tool
827 |         - my_second_tool
828 |     my_second_toolset:
829 |         - my_second_tool
830 |         - my_third_tool
831 | ```
832 | 
833 | You can load toolsets by name:
834 | 
835 | ```python
836 | # This will load all tools
837 | all_tools = client.load_toolset()
838 | 
839 | # This will only load the tools listed in 'my_second_toolset'
840 | my_second_toolset = client.load_toolset("my_second_toolset")
841 | ```
842 | 
843 | ## Versioning
844 | 
845 | This project uses [semantic versioning](https://semver.org/) (`MAJOR.MINOR.PATCH`).
846 | Since the project is in a pre-release stage (version `0.x.y`), we follow the
847 | standard conventions for initial  development:
848 | 
849 | ### Pre-1.0.0 Versioning
850 | 
851 | While the major version is `0`, the public API should be considered unstable.
852 | The version will be incremented  as follows:
853 | 
854 | - **`0.MINOR.PATCH`**: The **MINOR** version is incremented when we add
855 |   new functionality or make breaking, incompatible API changes.
856 | - **`0.MINOR.PATCH`**: The **PATCH** version is incremented for
857 |   backward-compatible bug fixes.
858 | 
859 | ### Post-1.0.0 Versioning
860 | 
861 | Once the project reaches a stable `1.0.0` release, the versioning will follow
862 | the more common convention:
863 | 
864 | - **`MAJOR.MINOR.PATCH`**: Incremented for incompatible API changes.
865 | - **`MAJOR.MINOR.PATCH`**: Incremented for new, backward-compatible functionality.
866 | - **`MAJOR.MINOR.PATCH`**: Incremented for backward-compatible bug fixes.
867 | 
868 | The public API that this applies to is the CLI associated with Toolbox, the
869 | interactions with official SDKs, and the definitions in the `tools.yaml` file.
870 | 
871 | ## Contributing
872 | 
873 | Contributions are welcome. Please, see the [CONTRIBUTING](CONTRIBUTING.md)
874 | to get started.
875 | 
876 | Please note that this project is released with a Contributor Code of Conduct.
877 | By participating in this project you agree to abide by its terms. See
878 | [Contributor Code of Conduct](CODE_OF_CONDUCT.md) for more information.
879 | 
880 | ## Community
881 | 
882 | Join our [discord community](https://discord.gg/GQrFB3Ec3W) to connect with our developers!
883 | 
```

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

```markdown
 1 | # Code of Conduct
 2 | 
 3 | ## Our Pledge
 4 | 
 5 | In the interest of fostering an open and welcoming environment, we as
 6 | contributors and maintainers pledge to making participation in our project and
 7 | our community a harassment-free experience for everyone, regardless of age, body
 8 | size, disability, ethnicity, gender identity and expression, level of
 9 | experience, education, socio-economic status, nationality, personal appearance,
10 | race, religion, or sexual identity and orientation.
11 | 
12 | ## Our Standards
13 | 
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 | 
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 | 
23 | Examples of unacceptable behavior by participants include:
24 | 
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 |     advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 |     address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 |     professional setting
33 | 
34 | ## Our Responsibilities
35 | 
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 | 
40 | Project maintainers have the right and responsibility to remove, edit, or reject
41 | comments, commits, code, wiki edits, issues, and other contributions that are
42 | not aligned to this Code of Conduct, or to ban temporarily or permanently any
43 | contributor for other behaviors that they deem inappropriate, threatening,
44 | offensive, or harmful.
45 | 
46 | ## Scope
47 | 
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 | 
55 | This Code of Conduct also applies outside the project spaces when the Project
56 | Steward has a reasonable belief that an individual's behavior may have a
57 | negative impact on the project or its community.
58 | 
59 | ## Conflict Resolution
60 | 
61 | We do not believe that all conflict is bad; healthy debate and disagreement
62 | often yield positive results. However, it is never okay to be disrespectful or
63 | to engage in behavior that violates the project’s code of conduct.
64 | 
65 | If you see someone violating the code of conduct, you are encouraged to address
66 | the behavior directly with those involved. Many issues can be resolved quickly
67 | and easily, and this gives people more control over the outcome of their
68 | dispute. If you are unable to resolve the matter for any reason, or if the
69 | behavior is threatening or harassing, report it. We are dedicated to providing
70 | an environment where participants feel welcome and safe.
71 | 
72 | Reports should be directed to @googleapis/senseai-eco, the
73 | Project Steward(s) for *Project Toolbox*. It is the Project Steward’s duty to
74 | receive and address reported violations of the code of conduct. They will then
75 | work with a committee consisting of representatives from the Open Source
76 | Programs Office and the Google Open Source Strategy team. If for any reason you
77 | are uncomfortable reaching out to the Project Steward, please email
78 | <[email protected]>.
79 | 
80 | We will investigate every complaint, but you may not receive a direct response.
81 | We will use our discretion in determining when and how to follow up on reported
82 | incidents, which may range from not taking action to permanent expulsion from
83 | the project and project-sponsored spaces. We will notify the accused of the
84 | report and provide them an opportunity to discuss it before any action is taken.
85 | The identity of the reporter will be omitted from the details of the report
86 | supplied to the accused. In potentially harmful situations, such as ongoing
87 | harassment or threats to anyone's safety, we may take action without notice.
88 | 
89 | ## Attribution
90 | 
91 | This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
92 | available at
93 | <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
94 | 
```

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

```markdown
  1 | # How to contribute
  2 | 
  3 | We'd love to accept your patches and contributions to this project.
  4 | 
  5 | ## Before you begin
  6 | 
  7 | ### Sign our Contributor License Agreement
  8 | 
  9 | Contributions to this project must be accompanied by a
 10 | [Contributor License Agreement](https://cla.developers.google.com/about) (CLA).
 11 | You (or your employer) retain the copyright to your contribution; this simply
 12 | gives us permission to use and redistribute your contributions as part of the
 13 | project.
 14 | 
 15 | If you or your current employer have already signed the Google CLA (even if it
 16 | was for a different project), you probably don't need to do it again.
 17 | 
 18 | Visit <https://cla.developers.google.com/> to see your current agreements or to
 19 | sign a new one.
 20 | 
 21 | ### Review our community guidelines
 22 | 
 23 | This project follows
 24 | [Google's Open Source Community Guidelines](https://opensource.google/conduct/).
 25 | 
 26 | ## Contribution process
 27 | 
 28 | > [!NOTE]
 29 | > New contributions should always include both unit and integration tests.
 30 | 
 31 | All submissions, including submissions by project members, require review. We
 32 | use GitHub pull requests for this purpose. Consult
 33 | [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
 34 | information on using pull requests.
 35 | 
 36 | ### Code reviews
 37 | 
 38 | * Within 2-5 days, a reviewer will review your PR. They may approve it, or request
 39 | changes.
 40 | * When requesting changes, reviewers should self-assign the PR to ensure
 41 | they are aware of any updates.
 42 | * If additional changes are needed, push additional commits to your PR branch -
 43 | this helps the reviewer know which parts of the PR have changed.
 44 | * Commits will be
 45 | squashed when merged.
 46 | * Please follow up with changes promptly.
 47 | * If a PR is awaiting changes by the
 48 | author for more than 10 days, maintainers may mark that PR as Draft. PRs that
 49 | are inactive for more than 30 days may be closed.
 50 | 
 51 | ## Adding a New Database Source or Tool
 52 | 
 53 | Please create an
 54 | [issue](https://github.com/googleapis/genai-toolbox/issues) before
 55 | implementation to ensure we can accept the contribution and no duplicated work.
 56 | This issue should include an overview of the API design. If you have any
 57 | questions, reach out on our [Discord](https://discord.gg/Dmm69peqjh) to chat
 58 | directly with the team.
 59 | 
 60 | > [!NOTE]
 61 | > New tools can be added for [pre-existing data
 62 | > sources](https://github.com/googleapis/genai-toolbox/tree/main/internal/sources).
 63 | > However, any new database source should also include at least one new tool
 64 | > type.
 65 | 
 66 | ### Adding a New Database Source
 67 | 
 68 | We recommend looking at an [example source
 69 | implementation](https://github.com/googleapis/genai-toolbox/blob/main/internal/sources/postgres/postgres.go).
 70 | 
 71 | * **Create a new directory** under `internal/sources` for your database type
 72 |   (e.g., `internal/sources/newdb`).
 73 | * **Define a configuration struct** for your data source in a file named
 74 |   `newdb.go`. Create a `Config` struct to include all the necessary parameters
 75 |   for connecting to the database (e.g., host, port, username, password, database
 76 |   name) and a `Source` struct to store necessary parameters for tools (e.g.,
 77 |   Name, Kind, connection object, additional config).
 78 | * **Implement the
 79 |   [`SourceConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L57)
 80 |   interface**. This interface requires two methods:
 81 |   * `SourceConfigKind() string`: Returns a unique string identifier for your
 82 |     data source (e.g., `"newdb"`).
 83 |   * `Initialize(ctx context.Context, tracer trace.Tracer) (Source, error)`:
 84 |     Creates a new instance of your data source and establishes a connection to
 85 |     the database.
 86 | * **Implement the
 87 |   [`Source`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L63)
 88 |   interface**. This interface requires one method:
 89 |   * `SourceKind() string`: Returns the same string identifier as `SourceConfigKind()`.
 90 | * **Implement `init()`** to register the new Source.
 91 | * **Implement Unit Tests** in a file named `newdb_test.go`.
 92 | 
 93 | ### Adding a New Tool
 94 | 
 95 | > [!NOTE]
 96 | > Please follow the tool naming convention detailed [here](./DEVELOPER.md#tool-naming-conventions).
 97 | 
 98 | We recommend looking at an [example tool
 99 | implementation](https://github.com/googleapis/genai-toolbox/tree/main/internal/tools/postgres/postgressql).
100 | 
101 | * **Create a new directory** under `internal/tools` for your tool type (e.g.,
102 |   `internal/tools/newdb` or `internal/tools/newdb<tool_name>`).
103 | * **Define a configuration struct** for your tool in a file named `newdbtool.go`.
104 | Create a `Config` struct and a `Tool` struct to store necessary parameters for
105 | tools.
106 | * **Implement the
107 |   [`ToolConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/tools/tools.go#L61)
108 |   interface**. This interface requires one method:
109 |   * `ToolConfigKind() string`: Returns a unique string identifier for your tool
110 |     (e.g., `"newdb"`).
111 |   * `Initialize(sources map[string]Source) (Tool, error)`: Creates a new
112 |     instance of your tool and validates that it can connect to the specified
113 |     data source.
114 | * **Implement the `Tool` interface**. This interface requires the following
115 |   methods:
116 |   * `Invoke(ctx context.Context, params map[string]any) ([]any, error)`:
117 |     Executes the operation on the database using the provided parameters.
118 |   * `ParseParams(data map[string]any, claims map[string]map[string]any)
119 |     (ParamValues, error)`: Parses and validates the input parameters.
120 |   * `Manifest() Manifest`: Returns a manifest describing the tool's capabilities
121 |     and parameters.
122 |   * `McpManifest() McpManifest`: Returns an MCP manifest describing the tool for
123 |     use with the Model Context Protocol.
124 |   * `Authorized(services []string) bool`: Checks if the tool is authorized to
125 |     run based on the provided authentication services.
126 | * **Implement `init()`** to register the new Tool.
127 | * **Implement Unit Tests** in a file named `newdb_test.go`.
128 | 
129 | ### Adding Integration Tests
130 | 
131 | * **Add a test file** under a new directory `tests/newdb`.
132 | * **Add pre-defined integration test suites** in the
133 |   `/tests/newdb/newdb_test.go` that are **required** to be run as long as your
134 |   code contains related features. Please check each test suites for the config
135 |   defaults, if your source require test suites config updates, please refer to
136 |   [config option](./tests/option.go):
137 | 
138 |      1. [RunToolGetTest][tool-get]: tests for the `GET` endpoint that returns the
139 |             tool's manifest.
140 | 
141 |      2. [RunToolInvokeTest][tool-call]: tests for tool calling through the native
142 |         Toolbox endpoints.
143 | 
144 |      3. [RunMCPToolCallMethod][mcp-call]: tests tool calling through the MCP
145 |             endpoints.
146 | 
147 |      4. (Optional) [RunExecuteSqlToolInvokeTest][execute-sql]: tests an
148 |         `execute-sql` tool for any source. Only run this test if you are adding an
149 |         `execute-sql` tool.
150 | 
151 |      5. (Optional) [RunToolInvokeWithTemplateParameters][temp-param]: tests for [template
152 |             parameters][temp-param-doc]. Only run this test if template
153 |             parameters apply to your tool.
154 | 
155 | * **Add the new database to the integration test workflow** in
156 |   [integration.cloudbuild.yaml](.ci/integration.cloudbuild.yaml).
157 | 
158 | [tool-get]:
159 |     https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L31
160 | [tool-call]:
161 |     <https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L79>
162 | [mcp-call]:
163 |     https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L554
164 | [execute-sql]:
165 |     <https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L431>
166 | [temp-param]:
167 |     <https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/tests/tool.go#L297>
168 | [temp-param-doc]:
169 |     https://googleapis.github.io/genai-toolbox/resources/tools/#template-parameters
170 | 
171 | ### Adding Documentation
172 | 
173 | * **Update the documentation** to include information about your new data source
174 |   and tool. This includes:
175 |   * Adding a new page to the `docs/en/resources/sources` directory for your data
176 |     source.
177 |   * Adding a new page to the `docs/en/resources/tools` directory for your tool.
178 | 
179 | * **(Optional) Add samples** to the `docs/en/samples/<newdb>` directory.
180 | 
181 | ### (Optional) Adding Prebuilt Tools
182 | 
183 | You can provide developers with a set of "build-time" tools to aid common
184 | software development user journeys like viewing and creating tables/collections
185 | and data.
186 | 
187 | * **Create a set of prebuilt tools** by defining a new `tools.yaml` and adding
188 |   it to `internal/tools`. Make sure the file name matches the source (i.e. for
189 |   source "alloydb-postgres" create a file named "alloydb-postgres.yaml").
190 | * **Update `cmd/root.go`** to add new source to the `prebuilt` flag.
191 | * **Add tests** in
192 |   [internal/prebuiltconfigs/prebuiltconfigs_test.go](internal/prebuiltconfigs/prebuiltconfigs_test.go)
193 |   and [cmd/root_test.go](cmd/root_test.go).
194 | 
195 | ## Submitting a Pull Request
196 | 
197 | Submit a pull request to the repository with your changes. Be sure to include a
198 | detailed description of your changes and any requests for long term testing
199 | resources.
200 | 
201 | * **Title:** All pull request title should follow the formatting of
202 |   [Conventional
203 |   Commit](https://www.conventionalcommits.org/) guidelines: `<type>[optional
204 |   scope]: description`. For example, if you are adding a new field in postgres
205 |   source, the title should be `feat(source/postgres): add support for
206 |   "new-field" field in postgres source`.
207 |   
208 |   Here are some commonly used `type` in this GitHub repo.
209 | 
210 |   |     **type**    |                                **description**                                                        |
211 |   |-----------------|-------------------------------------------------------------------------------------------------------|
212 |   | Breaking Change | Anything with this type of a `!` after the type/scope introduces a breaking change.                   |
213 |   | feat            | Adding a new feature to the codebase.                                                                 |
214 |   | fix             | Fixing a bug or typo in the codebase. This does not include fixing docs.                              |
215 |   | test            | Changes made to test files.                                                                           |
216 |   | ci              | Changes made to the cicd configuration files or scripts.                                              |
217 |   | docs            | Documentation-related PRs, including fixes on docs.                                                   |
218 |   | chore           | Other small tasks or updates that don't fall into any of the above types.                             |
219 |   | refactor        | Change src code but unlike feat, there are no tests broke and no line lost coverage.                  |
220 |   | revert          | Revert changes made in another commit.                                                                |
221 |   | style           | Update src code, with only formatting and whitespace updates (e.g. code formatter or linter changes). |
222 | 
223 |   Pull requests should always add scope whenever possible. The scope is
224 |   formatted as `<scope-type>/<scope-kind>` (e.g., `sources/postgres`, or
225 |   `tools/mssql-sql`).
226 |   
227 |   Ideally, **each PR covers only one scope**, if this is
228 |   inevitable, multiple scopes can be seaparated with a comma (e.g.
229 |   `sources/postgres,sources/alloydbpg`). If the PR covers multiple `scope-type`
230 |   (such as adding a new database), you can disregard the `scope-type`, e.g.
231 |   `feat(new-db): adding support for new-db source and tool`.
232 | 
233 | * **PR Description:** PR description should **always** be included. It should
234 |   include a concise description of the changes, it's impact, along with a
235 |   summary of the solution. If the PR is related to a specific issue, the issue
236 |   number should be mentioned in the PR description (e.g. `Fixes #1`).
237 | 
```

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

```
1 | 0.17.0
2 | 
```

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

```yaml
1 | ---
2 | ignored: true
3 | 
```

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

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

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

```
1 | Hilton Basel
2 | Hyatt Regency
3 | book
```

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

```scss
1 | $primary: #80a7e9;
2 | $secondary: #4484f4;
3 | 
```

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

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

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

```
1 | google-adk==1.15.0
2 | toolbox-core==0.5.2
3 | pytest==8.4.2
```

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

```
1 | google-genai==1.42.0
2 | toolbox-core==0.5.2
3 | pytest==8.4.2
4 | 
```

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

```
1 | User-agent: *
2 | {{ if eq hugo.Environment "preview" }}
3 | Disallow: /*
4 | {{ end }}
```

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

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

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

```markdown
1 | ---
2 | title: "AlloyDB AI NL"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   AlloyDB AI NL Tool.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Concepts"
3 | type: docs
4 | weight: 2
5 | description: >
6 |   Some core concepts in Toolbox
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "Dataform"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Dataform.
7 | ---
```

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

```markdown
1 | ---
2 | title: "HTTP"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with HTTP Sources.
7 | ---
```

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

```
1 | llama-index==0.14.3
2 | llama-index-llms-google-genai==0.6.0
3 | toolbox-llamaindex==0.5.2
4 | pytest==8.4.2
5 | 
```

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

```markdown
1 | ---
2 | title: "Neo4j"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Neo4j Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Redis"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Redis Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Utility tools"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that provide utility.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Cloud SQL"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Cloud SQL. 
7 | ---
```

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

```markdown
1 | ---
2 | title: "Dgraph"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Dgraph Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Looker"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   Tools that work with Looker Sources.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "SQLite"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with SQLite Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Valkey"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Valkey Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Oracle"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Oracle Sources.
7 | --- 
```

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

```markdown
1 | ---
2 | title: "Spanner"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Spanner Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Samples"
3 | type: docs
4 | weight: 5
5 | description: >
6 |   Samples and guides for using Toolbox.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "BigQuery"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with BigQuery Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Bigtable"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Bigtable Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Dataplex"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Dataplex Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Firebird"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Firebird Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "YugabyteDB"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Valkey Sources.
7 | ---
```

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

```markdown
1 | +++
2 | date = '{{ .Date }}'
3 | draft = true
4 | title = '{{ replace .File.ContentBaseName "-" " " | title }}'
5 | +++
6 | 
```

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

```markdown
1 | ---
2 | title: "Getting Started"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   How to get started with Toolbox.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "MongoDB"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   Tools that work with the MongoDB Source.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "Cassandra"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Cassandra Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Couchbase"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Couchbase Sources.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Firestore"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Firestore Sources.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "OceanBase"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with OceanBase Sources.
7 | --- 
```

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

```
1 | langchain==0.3.27
2 | langchain-google-vertexai==2.1.2
3 | langgraph==0.6.8
4 | toolbox-langchain==0.5.2
5 | pytest==8.4.2
6 | 
```

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

```markdown
1 | ---
2 | title: "Looker"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   How to get started with Toolbox using Looker.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "About"
3 | type: docs
4 | weight: 6
5 | description: >
6 |   A list of other information related to Toolbox.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "AlloyDB"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   How to get started with Toolbox using AlloyDB.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "SDKs"
3 | type: docs
4 | weight: 6
5 | description: >
6 |   Client SDKs to connect to the MCP Toolbox server.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "AlloyDB for PostgreSQL"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools for AlloyDB for PostgreSQL.
7 | ---
```

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

```markdown
1 | ---
2 | title: "BigQuery"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   How to get started with Toolbox using BigQuery.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "Reference"
3 | type: docs
4 | weight: 7
5 | description: >
6 |   This section contains reference documentation.
7 | ---
8 | 
9 | 
```

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

```json
1 | {
2 |   "devDependencies": {
3 |     "autoprefixer": "^10.4.20",
4 |     "postcss": "^8.4.49",
5 |     "postcss-cli": "^11.0.0"
6 |   }
7 | }
8 | 
```

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

```markdown
1 | ---
2 | title: "Cloud Monitoring"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   Tools that work with Cloud Monitoring source.
7 | ---
8 | 
```

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

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

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

```markdown
1 | ---
2 | title: "Resources"
3 | type: docs
4 | weight: 4
5 | description: >
6 |   List of reference documentation for resources in Toolbox.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "ClickHouse"
3 | type: docs
4 | weight: 1
5 | description: >
6 |   Tools for interacting with ClickHouse databases and tables.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "MySQL"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with MySQL Sources, such as Cloud SQL for MySQL.
7 | ---
```

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

```markdown
1 | ---
2 | title: "How-to"
3 | type: docs
4 | weight: 3
5 | description: >
6 |   List of guides detailing how to do different things with Toolbox. 
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "Trino"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Trino Sources, such as distributed SQL query engine.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "TiDB"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with TiDB Sources, such as TiDB Cloud and self-hosted TiDB.
7 | ---
8 | 
```

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

```markdown
1 | ---
2 | title: "SQL Server"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with SQL Server Sources, such as CloudSQL for SQL Server.
7 | ---
```

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

```markdown
1 | ---
2 | title: "Postgres"
3 | type: docs
4 | weight: 1
5 | description: > 
6 |   Tools that work with Postgres Sources, such as Cloud SQL for Postgres and AlloyDB. 
7 | ---
```

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

```python
1 | # This file makes the 'quickstart' directory a Python package.
2 | 
3 | # You can include any package-level initialization logic here if needed.
4 | # For now, this file is empty.
5 | 
```

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

```markdown
 1 | ---
 2 | title: "Connect from your IDE"
 3 | type: docs
 4 | weight: 1
 5 | description: >
 6 |   List of guides detailing how to connect your AI tools (IDEs) to Toolbox using MCP.
 7 | aliases:
 8 | - /how-to/connect_tools_using_mcp
 9 | ---
10 | 
```

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

```markdown
 1 | ---
 2 | title: "Getting started with alloydb-ai-nl tool"
 3 | type: docs
 4 | weight: 30
 5 | description: >
 6 |   An end to end tutorial for building an ADK agent using the AlloyDB AI NL tool.
 7 | ---
 8 | 
 9 | {{< ipynb "alloydb_ai_nl.ipynb" >}}
10 | 
```

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

```
 1 | {{ .Site.Params.description }}
 2 | 
 3 | {{ range .Site.Sections }}
 4 | # {{ .Title }}
 5 | {{ .Description }}
 6 | {{ range .Pages }}
 7 | # {{ .Title }}
 8 | {{ .Description }}
 9 | {{ .RawContent }}
10 | {{ range .Pages }}
11 | # {{ .Title }}
12 | {{ .Description }}
13 | {{ .RawContent }}
14 | {{end }}{{ end }}{{ end }}
15 | 
```

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

```yaml
1 | blank_issues_enabled: false
2 | contact_links:
3 |   - name: Google Cloud Support
4 |     url: https://cloud.google.com/support/
5 |     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.
6 | 
```

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

```markdown
 1 | ---
 2 | title: "Documentation"
 3 | type: docs
 4 | notoc: false
 5 | weight: 1
 6 | description: >
 7 |   All of Toolbox's documentation.
 8 | ---
 9 | 
10 | <html>
11 |   <head>
12 |     <link rel="canonical" href="getting-started/introduction/"/>
13 |     <meta http-equiv="refresh" content="0;url=getting-started/introduction/"/>
14 |   </head>
15 | </html>
16 | 
```

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

```
 1 | # {{ .Site.Title }}
 2 | 
 3 | > {{ .Site.Params.description }}
 4 | 
 5 | ## Docs
 6 | {{ range .Site.Sections }}
 7 | ### {{ .Title }}
 8 | 
 9 | {{ .Description }}{{ range .Pages }}- [{{ .Title }}]({{ .Permalink }}): {{ .Description }}{{ range .Pages }}  - [{{ .Title }}]({{ .Permalink }}): {{ .Description }}{{end }}{{ end }}{{ end }}
10 | 
```

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

```json
 1 | {
 2 |   "name": "genai",
 3 |   "version": "1.0.0",
 4 |   "description": "",
 5 |   "main": "quickstart.js",
 6 |   "type" : "module",
 7 |   "scripts": {
 8 |     "test": "node --test"
 9 |   },
10 |   "keywords": [],
11 |   "author": "",
12 |   "license": "ISC",
13 |   "dependencies": {
14 |     "@google/genai": "^1.17.0",
15 |     "@toolbox-sdk/core": "^0.1.2"
16 |   }
17 | }
18 | 
```

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

```json
 1 | {
 2 |   "name": "genkit",
 3 |   "version": "1.0.0",
 4 |   "description": "",
 5 |   "main": "quickstart.js",
 6 |   "type" : "module",
 7 |   "scripts": {
 8 |     "test": "node --test"
 9 |   },
10 |   "keywords": [],
11 |   "author": "",
12 |   "license": "ISC",
13 |   "dependencies": {
14 |     "@genkit-ai/googleai": "^1.18.0",
15 |     "@toolbox-sdk/core": "^0.1.2",
16 |     "genkit": "^1.18.0"
17 |   }
18 | }
19 | 
```

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

```markdown
 1 | ---
 2 | title: "AlloyDB using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to AlloyDB using Toolbox.
 7 | ---
 8 | <html>
 9 |   <head>
10 |     <link rel="canonical" href="https://cloud.google.com/alloydb/docs/connect-ide-using-mcp-toolbox"/>
11 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/alloydb/docs/connect-ide-using-mcp-toolbox"/>
12 |   </head>
13 | </html>
14 | 
```

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

```markdown
 1 | ---
 2 | title: "Spanner using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to Spanner using Toolbox.
 7 | ---
 8 | <html>
 9 |   <head>
10 |     <link rel="canonical" href="https://cloud.google.com/spanner/docs/pre-built-tools-with-mcp-toolbox"/>
11 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/spanner/docs/pre-built-tools-with-mcp-toolbox"/>
12 |   </head>
13 | </html>
14 | 
```

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

```markdown
 1 | ---
 2 | title: "BigQuery using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to BigQuery using Toolbox.
 7 | ---
 8 | <html>
 9 |   <head>
10 |     <link rel="canonical" href="https://cloud.google.com/bigquery/docs/pre-built-tools-with-mcp-toolbox"/>
11 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/bigquery/docs/pre-built-tools-with-mcp-toolbox"/>
12 |   </head>
13 | </html>
14 | 
```

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

```json
 1 | {
 2 |   "name": "llamaindex",
 3 |   "version": "1.0.0",
 4 |   "description": "",
 5 |   "main": "quickstart.js",
 6 |   "type": "module",
 7 |   "scripts": {
 8 |     "test": "node --test"
 9 |   },
10 |   "keywords": [],
11 |   "author": "",
12 |   "license": "ISC",
13 |   "dependencies": {
14 |     "@llamaindex/google": "^0.3.20",
15 |     "@llamaindex/workflow": "^1.1.22",
16 |     "@toolbox-sdk/core": "^0.1.2",
17 |     "llamaindex": "^0.12.0"
18 |   }
19 | }
20 | 
```

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

```json
 1 | {
 2 |   "name": "langchain",
 3 |   "version": "1.0.0",
 4 |   "description": "",
 5 |   "main": "quickstart.js",
 6 |   "type": "module",
 7 |   "scripts": {
 8 |     "test": "node --test"
 9 |   },
10 |   "keywords": [],
11 |   "author": "",
12 |   "license": "ISC",
13 |   "dependencies": {
14 |     "@langchain/google-genai": "^0.2.17",
15 |     "@langchain/langgraph": "^0.4.9",
16 |     "@toolbox-sdk/core": "^0.1.2",
17 |     "langchain": "^0.3.33"
18 |   }
19 | }
20 | 
```

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

```markdown
 1 | ---
 2 | title: "AlloyDB Admin API using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Create your AlloyDB database with MCP Toolbox.
 7 | ---
 8 | 
 9 | <html>
10 |   <head>
11 |     <link rel="canonical" href="https://cloud.google.com/alloydb/docs/create-database-with-mcp-toolbox"/>
12 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/alloydb/docs/create-database-with-mcp-toolbox"/>
13 |   </head>
14 | </html>
15 | 
```

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

```markdown
 1 | ---
 2 | title: "Firestore using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to Firestore using Toolbox.
 7 | ---
 8 | 
 9 | <html>
10 |   <head>
11 |     <link rel="canonical" href="https://cloud.google.com/firestore/native/docs/connect-ide-using-mcp-toolbox"/>
12 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/firestore/native/docs/connect-ide-using-mcp-toolbox"/>
13 |   </head>
14 | </html>
15 | 
```

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

```markdown
 1 | ---
 2 | title: "Go SDK"
 3 | weight: 2
 4 | description: Go lang client SDK
 5 | icon: fa-brands fa-golang
 6 | manualLink: "https://github.com/googleapis/mcp-toolbox-sdk-go"
 7 | manualLinkTarget: _blank
 8 | ---
 9 | 
10 | <html>
11 |   <head>
12 |     <link rel="canonical" href="https://github.com/googleapis/mcp-toolbox-sdk-go"/>
13 |     <meta http-equiv="refresh" content="0;url=https://github.com/googleapis/mcp-toolbox-sdk-go"/>
14 |   </head>
15 | </html>
16 | 
```

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

```markdown
 1 | ---
 2 | title: "JS SDK"
 3 | weight: 2
 4 | description: Javascript client SDK
 5 | icon: fa-brands fa-node-js
 6 | manualLink: "https://github.com/googleapis/mcp-toolbox-sdk-js"
 7 | manualLinkTarget: _blank
 8 | ---
 9 | 
10 | <html>
11 |   <head>
12 |     <link rel="canonical" href="https://github.com/googleapis/mcp-toolbox-sdk-js"/>
13 |     <meta http-equiv="refresh" content="0;url=https://github.com/googleapis/mcp-toolbox-sdk-js"/>
14 |   </head>
15 | </html>
16 | 
```

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

```markdown
 1 | ---
 2 | title: "Cloud SQL for MySQL using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to Cloud SQL for MySQL using Toolbox.
 7 | ---
 8 | <html>
 9 |   <head>
10 |     <link rel="canonical" href="https://cloud.google.com/sql/docs/mysql/pre-built-tools-with-mcp-toolbox"/>
11 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/sql/docs/mysql/pre-built-tools-with-mcp-toolbox"/>
12 |   </head>
13 | </html>
14 | 
```

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

```markdown
 1 | ---
 2 | title: "Python SDK"
 3 | weight: 2
 4 | description: Python client SDK
 5 | icon: fa-brands fa-python
 6 | manualLink: "https://github.com/googleapis/mcp-toolbox-sdk-python"
 7 | manualLinkTarget: _blank
 8 | ---
 9 | 
10 | <html>
11 |   <head>
12 |     <link rel="canonical" href="https://github.com/googleapis/mcp-toolbox-sdk-python"/>
13 |     <meta http-equiv="refresh" content="0;url=https://github.com/googleapis/mcp-toolbox-sdk-python"/>
14 |   </head>
15 | </html>
16 | 
```

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

```markdown
 1 | ---
 2 | title: "Cloud SQL for Postgres using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to Cloud SQL for Postgres using Toolbox.
 7 | ---
 8 | <html>
 9 |   <head>
10 |     <link rel="canonical" href="https://cloud.google.com/sql/docs/postgres/pre-built-tools-with-mcp-toolbox"/>
11 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/sql/docs/postgres/pre-built-tools-with-mcp-toolbox"/>
12 |   </head>
13 | </html>
14 | 
```

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

```markdown
 1 | ---
 2 | title: "Cloud SQL for SQL Server using MCP"
 3 | type: docs
 4 | weight: 2
 5 | description: >
 6 |   Connect your IDE to Cloud SQL for SQL Server using Toolbox.
 7 | ---
 8 | <html>
 9 |   <head>
10 |     <link rel="canonical" href="https://cloud.google.com/sql/docs/sqlserver/pre-built-tools-with-mcp-toolbox"/>
11 |     <meta http-equiv="refresh" content="0;url=https://cloud.google.com/sql/docs/sqlserver/pre-built-tools-with-mcp-toolbox"/>
12 |   </head>
13 | </html>
14 | 
```

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

```
 1 | {
 2 |   extends: [
 3 |     'config:recommended',
 4 |     ':semanticCommitTypeAll(chore)',
 5 |     ':ignoreUnstable',
 6 |     ':separateMajorReleases',
 7 |     ':prConcurrentLimitNone',
 8 |     ':prHourlyLimitNone',
 9 |     ':preserveSemverRanges',
10 |   ],
11 |   minimumReleaseAge: '3',
12 |   rebaseWhen: 'conflicted',
13 |   dependencyDashboardLabels: [
14 |     'type: process',
15 |   ],
16 |   "postUpdateOptions": [
17 |     "gomodTidy"
18 |   ],
19 |   packageRules: [
20 |     {
21 |       groupName: 'GitHub Actions',
22 |       matchManagers: [
23 |         'github-actions',
24 |       ],
25 |       pinDigests: true,
26 |     },
27 |   ],
28 | }
29 | 
```

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

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

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

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

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package main
16 | 
17 | import (
18 | 	"github.com/googleapis/genai-toolbox/cmd"
19 | )
20 | 
21 | func main() {
22 | 	cmd.Execute()
23 | }
24 | 
```

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

```markdown
 1 | <!-- This file has been used in local_quickstart.md, local_quickstart_go.md & local_quickstart_js.md -->
 2 | <!-- [START cloud_setup] -->
 3 | If you plan to use **Google Cloud’s Vertex AI** with your agent (e.g., using
 4 | `vertexai=True` or a Google GenAI model), follow these one-time setup steps for
 5 | local development:
 6 | 
 7 | 1. [Install the Google Cloud CLI](https://cloud.google.com/sdk/docs/install)
 8 | 1. [Set up Application Default Credentials
 9 |    (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment)
10 | 1. Set your project and enable Vertex AI
11 | 
12 |     ```bash
13 |     gcloud config set project YOUR_PROJECT_ID
14 |     gcloud services enable aiplatform.googleapis.com
15 |     ```
16 | 
17 | <!-- [END cloud_setup] -->
```

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

```markdown
 1 | ---
 2 | title: "oracle-execute-sql"
 3 | type: docs
 4 | weight: 1
 5 | description: > 
 6 |   An "oracle-execute-sql" tool executes a SQL statement against an Oracle database.
 7 | aliases:
 8 | - /resources/tools/oracle-execute-sql
 9 | ---
10 | 
11 | ## About
12 | 
13 | An `oracle-execute-sql` tool executes a SQL statement against an Oracle
14 | database. It's compatible with the following source:
15 | 
16 | - [oracle](../../sources/oracle.md)
17 | 
18 | `oracle-execute-sql` takes one input parameter `sql` and runs the sql
19 | statement against the `source`.
20 | 
21 | > **Note:** This tool is intended for developer assistant workflows with
22 | > human-in-the-loop and shouldn't be used for production agents.
23 | 
24 | ## Example
25 | 
26 | ```yaml
27 | tools:
28 |   execute_sql_tool:
29 |     kind: oracle-execute-sql
30 |     source: my-oracle-instance
31 |     description: Use this tool to execute sql statement.
32 | 
```

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

```yaml
 1 | # Copyright 2024 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     https://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | allowedCopyrightHolders:
16 |   - 'Google LLC'
17 |   - 'Oracle'
18 | allowedLicenses:
19 |   - 'Apache-2.0'
20 | sourceFileExtensions:
21 |   - 'go'
22 |   - 'yaml'
23 |   - 'yml'
24 | ignoreFiles:
25 |   - 'docs/en/getting-started/quickstart/**'
26 |   - '**/*oracle*'
27 | 
28 | 
```

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package cmd
16 | 
17 | import (
18 | 	"io"
19 | )
20 | 
21 | // Option is a function that configures a Command.
22 | type Option func(*Command)
23 | 
24 | // WithStreams overrides the default writer.
25 | func WithStreams(out, err io.Writer) Option {
26 | 	return func(c *Command) {
27 | 		c.outStream = out
28 | 		c.errStream = err
29 | 	}
30 | }
31 | 
```

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

```html
 1 | <!DOCTYPE html>
 2 | <html lang="en">
 3 | <head>
 4 |     <meta charset="UTF-8">
 5 |     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6 |     <title>Toolbox UI</title>
 7 |     <link rel="stylesheet" href="/ui/css/style.css">
 8 | </head>
 9 | <body>
10 |     <div id="navbar-container" data-active-nav=""></div>
11 |     <div id="main-content-container"></div>
12 | 
13 |     <script src="/ui/js/navbar.js"></script>
14 |     <script src="/ui/js/mainContent.js"></script>
15 |     <script>
16 |         document.addEventListener('DOMContentLoaded', () => {
17 |             const navbarContainer = document.getElementById('navbar-container');
18 |             const activeNav = navbarContainer.getAttribute('data-active-nav');
19 |             renderNavbar('navbar-container', activeNav);
20 |             renderMainContent('main-content-container', 'homepage-info', getHomepageInstructions())
21 |         });
22 |     </script>
23 | </body>
24 | </html>
25 | 
```

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

```markdown
 1 | ## Description
 2 | 
 3 | > Should include a concise description of the changes (bug or feature), it's
 4 | > impact, along with a summary of the solution
 5 | 
 6 | ## PR Checklist
 7 | 
 8 | > Thank you for opening a Pull Request! Before submitting your PR, there are a
 9 | > few things you can do to make sure it goes smoothly:
10 | 
11 | - [ ] Make sure you reviewed
12 |   [CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
13 | - [ ] Make sure to open an issue as a
14 |   [bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
15 |   before writing your code! That way we can discuss the change, evaluate
16 |   designs, and agree on the general idea
17 | - [ ] Ensure the tests and linter pass
18 | - [ ] Code coverage does not decrease (if any source code was changed)
19 | - [ ] Appropriate docs were updated (if necessary)
20 | - [ ] Make sure to add `!` if this involve a breaking change
21 | 
22 | 🛠️ Fixes #<issue_number_goes_here>
23 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     https://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | assign_issues:
16 |   - Yuan325
17 |   - duwenxin99
18 |   - averikitsch
19 |   - anubhav756
20 |   - dishaprakash
21 |   - twishabansal
22 | assign_issues_by:
23 |   - labels:
24 |     - 'product: bigquery'
25 |     to:
26 |     - Genesis929
27 |     - shobsi
28 |     - jiaxunwu
29 |   - labels:
30 |     - 'product: looker'
31 |     to:
32 |     - drstrangelooker
33 | assign_prs:
34 |   - Yuan325
35 |   - duwenxin99
36 |   - averikitsch
37 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | name: Schedule Reporter
16 | 
17 | on:
18 |   schedule:
19 |     - cron: '0 6 * * *'  # Runs at 6 AM every morning
20 | 
21 | jobs:
22 |   run_reporter:
23 |     permissions:
24 |         issues: 'write'
25 |         checks: 'read'
26 |         contents: 'read'
27 |     uses: ./.github/workflows/cloud_build_failure_reporter.yml
28 |     with:
29 |       trigger_names: "toolbox-test-nightly,toolbox-test-on-merge,toolbox-continuous-release"
30 | 
```

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

```markdown
 1 | ---
 2 | title: "cloud-sql-get-instance"
 3 | type: docs
 4 | weight: 10
 5 | description: >
 6 |   Get a Cloud SQL instance resource.
 7 | ---
 8 | 
 9 | The `cloud-sql-get-instance` tool retrieves a Cloud SQL instance resource using
10 | the Cloud SQL Admin API.
11 | 
12 | {{< notice info >}}
13 | This tool uses a `source` of kind `cloud-sql-admin`.
14 | {{< /notice >}}
15 | 
16 | ## Example
17 | 
18 | ```yaml
19 | tools:
20 |   get-sql-instance:
21 |     kind: cloud-sql-get-instance
22 |     source: my-cloud-sql-admin-source
23 |     description: "Gets a particular cloud sql instance."
24 | ```
25 | 
26 | ## Reference
27 | 
28 | | **field**   | **type** | **required** | **description**                                  |
29 | | ----------- | :------: | :----------: | ------------------------------------------------ |
30 | | kind        |  string  |     true     | Must be "cloud-sql-get-instance".                |
31 | | source      |  string  |     true     | The name of the `cloud-sql-admin` source to use. |
32 | | description |  string  |     false    | A description of the tool.                       |
33 | 
```

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

```markdown
 1 | ---
 2 | title: "Sources"
 3 | type: docs
 4 | weight: 1
 5 | description: > 
 6 |   Sources represent your different data sources that a tool can interact with.
 7 | ---
 8 | 
 9 | A Source represents a data sources that a tool can interact with. You can define
10 | Sources as a map in the `sources` section of your `tools.yaml` file. Typically,
11 | a source configuration will contain any information needed to connect with and
12 | interact with the database.
13 | 
14 | {{< notice tip >}}
15 | Use environment variable replacement with the format ${ENV_NAME}
16 | instead of hardcoding your secrets into the configuration file.
17 | {{< /notice >}}
18 | 
19 | ```yaml
20 | sources:
21 |     my-cloud-sql-source:
22 |         kind: cloud-sql-postgres
23 |         project: my-project-id
24 |         region: us-central1
25 |         instance: my-instance-name
26 |         database: my_db
27 |         user: ${USER_NAME}
28 |         password: ${PASSWORD}
29 | ```
30 | 
31 | In implementation, each source is a different connection pool or client that used
32 | to connect to the database and execute the tool.
33 | 
34 | ## Available Sources
35 | 
```

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

```go
 1 | // Copyright 2025 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package jsonrpc
16 | 
17 | import (
18 | 	"reflect"
19 | 	"testing"
20 | )
21 | 
22 | func TestNewError(t *testing.T) {
23 | 	var id interface{} = "foo"
24 | 	code := 111
25 | 	message := "foo bar"
26 | 	want := JSONRPCError{
27 | 		Jsonrpc: "2.0",
28 | 		Id:      "foo",
29 | 		Error: Error{
30 | 			Code:    111,
31 | 			Message: "foo bar",
32 | 		},
33 | 	}
34 | 
35 | 	got := NewError(id, code, message, nil)
36 | 	if !reflect.DeepEqual(want, got) {
37 | 		t.Fatalf("unexpected error: got %+v, want %+v", got, want)
38 | 	}
39 | }
40 | 
```

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package auth
16 | 
17 | import (
18 | 	"context"
19 | 	"net/http"
20 | )
21 | 
22 | // AuthServiceConfig is the interface for configuring authentication services.
23 | type AuthServiceConfig interface {
24 | 	AuthServiceConfigKind() string
25 | 	Initialize() (AuthService, error)
26 | }
27 | 
28 | // AuthService is the interface for authentication services.
29 | type AuthService interface {
30 | 	AuthServiceKind() string
31 | 	GetName() string
32 | 	GetClaimsFromHeader(context.Context, http.Header) (map[string]any, error)
33 | }
34 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | sources:
16 |   neo4j-source:
17 |     kind: neo4j
18 |     uri: ${NEO4J_URI}
19 |     database: ${NEO4J_DATABASE}
20 |     user: ${NEO4J_USERNAME}
21 |     password: ${NEO4J_PASSWORD}
22 | 
23 | tools:
24 |   execute_cypher:
25 |     kind: neo4j-execute-cypher
26 |     source: neo4j-source
27 |     description: Use this tool to execute Cypher queries.
28 | 
29 |   get_schema:
30 |     kind: neo4j-schema
31 |     source: neo4j-source
32 |     description: Use this tool to get the database schema.
33 | 
34 | toolsets:
35 |   neo4j_database_tools:
36 |     - execute_cypher
37 |     - get_schema
38 | 
```

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

```markdown
 1 | ---
 2 | title: "MongoDB"
 3 | type: docs
 4 | weight: 1
 5 | description: >
 6 |   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.
 7 | 
 8 | ---
 9 | 
10 | ## About
11 | 
12 | [MongoDB][mongodb-docs] is a popular NoSQL database that stores data in
13 | flexible, JSON-like documents, making it easy to develop and scale applications.
14 | 
15 | [mongodb-docs]: https://www.mongodb.com/docs/atlas/getting-started/
16 | 
17 | ## Example
18 | 
19 | ```yaml
20 | sources:
21 |     my-mongodb:
22 |         kind: mongodb
23 |         uri: "mongodb+srv://username:[email protected]"       
24 | 
25 | ```
26 | 
27 | ## Reference
28 | 
29 | | **field** | **type** | **required** | **description**                                                   |
30 | |-----------|:--------:|:------------:|-------------------------------------------------------------------|
31 | | kind      |  string  |     true     | Must be "mongodb".                                                |
32 | | uri       |  string  |     true     | connection string to connect to MongoDB                           |
33 | 
```

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

```yaml
 1 | # Copyright 2024 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #      http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | name: Sync Labels
16 | on:
17 |   push:
18 |     branches:
19 |       - main
20 | 
21 | # Declare default permissions as read only.
22 | permissions: read-all
23 | 
24 | jobs:
25 |   build:
26 |     runs-on: ubuntu-latest
27 |     permissions:
28 |       contents: 'read'
29 |       issues: 'write'
30 |       pull-requests: 'write'
31 |     steps:
32 |       - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
33 |       - uses: micnncim/action-label-syncer@3abd5ab72fda571e69fffd97bd4e0033dd5f495c # v1.3.0
34 |         env:
35 |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36 |         with:
37 |           manifest: .github/labels.yaml
38 | 
```

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package sources
16 | 
17 | import (
18 | 	"context"
19 | 	"fmt"
20 | 	"strings"
21 | )
22 | 
23 | type IPType string
24 | 
25 | func (i *IPType) String() string {
26 | 	if string(*i) != "" {
27 | 		return strings.ToLower(string(*i))
28 | 	}
29 | 	return "public"
30 | }
31 | 
32 | func (i *IPType) UnmarshalYAML(ctx context.Context, unmarshal func(interface{}) error) error {
33 | 	var ipType string
34 | 	if err := unmarshal(&ipType); err != nil {
35 | 		return err
36 | 	}
37 | 	switch strings.ToLower(ipType) {
38 | 	case "private", "public", "psc":
39 | 		*i = IPType(strings.ToLower(ipType))
40 | 		return nil
41 | 	default:
42 | 		return fmt.Errorf(`ipType invalid: must be one of "public", "private", or "psc"`)
43 | 	}
44 | }
45 | 
```

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

```html
 1 | <!DOCTYPE html>
 2 | <html lang="en">
 3 | <head>
 4 |     <meta charset="UTF-8">
 5 |     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6 |     <title>Tools View</title>
 7 |     <link rel="stylesheet" href="/ui/css/style.css">
 8 |     <script src="https://accounts.google.com/gsi/client" async defer></script>
 9 | </head>
10 | <body>
11 |     <div id="navbar-container" data-active-nav="/ui/tools"></div>
12 | 
13 |     <aside class="second-nav">
14 |         <h4>My Tools</h4>
15 |         <div id="secondary-panel-content">
16 |             <p>Fetching tools...</p>
17 |         </div>
18 |     </aside>
19 | 
20 |     <div id="main-content-container"></div>
21 | 
22 |     <script type="module" src="/ui/js/tools.js"></script>
23 |     <script src="/ui/js/navbar.js"></script>
24 |     <script src="/ui/js/mainContent.js"></script>
25 |     <script>
26 |         document.addEventListener('DOMContentLoaded', () => {
27 |             const navbarContainer = document.getElementById('navbar-container');
28 |             const activeNav = navbarContainer.getAttribute('data-active-nav');
29 |             renderNavbar('navbar-container', activeNav);
30 |             renderMainContent('main-content-container', 'tool-display-area', getToolInstructions())
31 |         });
32 |     </script>
33 | </body>
34 | </html>
```

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

```dockerfile
 1 | # Copyright 2024 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #      http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | # Use the latest stable golang 1.x to compile to a binary
16 | FROM --platform=$BUILDPLATFORM golang:1 AS build
17 | 
18 | WORKDIR /go/src/genai-toolbox
19 | COPY . .
20 | 
21 | ARG TARGETOS
22 | ARG TARGETARCH
23 | ARG BUILD_TYPE="container.dev"
24 | ARG COMMIT_SHA=""
25 | 
26 | RUN go get ./...
27 | RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
28 |     go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=${BUILD_TYPE} -X github.com/googleapis/genai-toolbox/cmd.commitSha=${COMMIT_SHA}"
29 | 
30 | # Final Stage
31 | FROM gcr.io/distroless/static:nonroot
32 | 
33 | WORKDIR /app
34 | COPY --from=build --chown=nonroot /go/src/genai-toolbox/genai-toolbox /toolbox
35 | USER nonroot
36 | 
37 | ENTRYPOINT ["/toolbox"] 
38 | 
```

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package log
16 | 
17 | import (
18 | 	"context"
19 | )
20 | 
21 | // Logger is the interface used throughout the project for logging.
22 | type Logger interface {
23 | 	// DebugContext is for reporting additional information about internal operations.
24 | 	DebugContext(ctx context.Context, format string, args ...interface{})
25 | 	// InfoContext is for reporting informational messages.
26 | 	InfoContext(ctx context.Context, format string, args ...interface{})
27 | 	// WarnContext is for reporting warning messages.
28 | 	WarnContext(ctx context.Context, format string, args ...interface{})
29 | 	// ErrorContext is for reporting errors.
30 | 	ErrorContext(ctx context.Context, format string, args ...interface{})
31 | }
32 | 
```

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package sources
16 | 
17 | import (
18 | 	"context"
19 | 	"fmt"
20 | 	"strings"
21 | )
22 | 
23 | // Dialect represents the dialect type of a database.
24 | type Dialect string
25 | 
26 | func (i *Dialect) String() string {
27 | 	if string(*i) != "" {
28 | 		return strings.ToLower(string(*i))
29 | 	}
30 | 	return "googlesql"
31 | }
32 | 
33 | func (i *Dialect) UnmarshalYAML(ctx context.Context, unmarshal func(interface{}) error) error {
34 | 	var dialect string
35 | 	if err := unmarshal(&dialect); err != nil {
36 | 		return err
37 | 	}
38 | 	switch strings.ToLower(dialect) {
39 | 	case "googlesql", "postgresql":
40 | 		*i = Dialect(strings.ToLower(dialect))
41 | 		return nil
42 | 	default:
43 | 		return fmt.Errorf(`dialect invalid: must be one of "googlesql", or "postgresql"`)
44 | 	}
45 | }
46 | 
```

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

```javascript
 1 | // Copyright 2025 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | import { loadTools } from "./loadTools.js";
16 | 
17 | /**
18 |  * These functions runs after the browser finishes loading and parsing HTML structure.
19 |  * This ensures that elements can be safely accessed.
20 |  */
21 | document.addEventListener('DOMContentLoaded', () => {
22 |     const toolDisplayArea = document.getElementById('tool-display-area');
23 |     const secondaryPanelContent = document.getElementById('secondary-panel-content');
24 |     const DEFAULT_TOOLSET = ""; // will return all toolsets
25 | 
26 |     if (!secondaryPanelContent || !toolDisplayArea) {
27 |         console.error('Required DOM elements not found.');
28 |         return;
29 |     }
30 | 
31 |     loadTools(secondaryPanelContent, toolDisplayArea, DEFAULT_TOOLSET);
32 | });
33 | 
```

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

```markdown
 1 | ---
 2 | title: "wait"
 3 | type: docs
 4 | weight: 1
 5 | description: > 
 6 |   A "wait" tool pauses execution for a specified duration.
 7 | aliases:
 8 | - /resources/tools/utility/wait
 9 | ---
10 | 
11 | ## About
12 | 
13 | A `wait` tool pauses execution for a specified duration. This can be useful in
14 | workflows where a delay is needed between steps.
15 | 
16 | `wait` takes one input parameter `duration` which is a string representing the
17 | time to wait (e.g., "10s", "2m", "1h").
18 | 
19 | {{< notice info >}}
20 | This tool is intended for developer assistant workflows with human-in-the-loop
21 | and shouldn't be used for production agents.
22 | {{< /notice >}}
23 | 
24 | ## Example
25 | 
26 | ```yaml
27 | tools:
28 |   wait_for_tool:
29 |     kind: wait
30 |     description: Use this tool to pause execution for a specified duration.
31 |     timeout: 30s
32 | ```
33 | 
34 | ## Reference
35 | 
36 | | **field**   |    **type**    | **required** | **description**                                       |
37 | |-------------|:--------------:|:------------:|-------------------------------------------------------|
38 | | kind        |     string     |     true     | Must be "wait".                                       |
39 | | description |     string     |     true     | Description of the tool that is passed to the LLM.    |
40 | | timeout     |     string     |     true     | The default duration the tool can wait for.           |
41 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | sources:
16 |   dataplex-source:
17 |     kind: "dataplex"
18 |     project: ${DATAPLEX_PROJECT}
19 | 
20 | tools:
21 |   search_entries:
22 |     kind: dataplex-search-entries
23 |     source: dataplex-source
24 |     description: Use this tool to search for entries in Dataplex Catalog based on the provided search query.
25 |   lookup_entry:
26 |     kind: dataplex-lookup-entry
27 |     source: dataplex-source
28 |     description: Use this tool to retrieve a specific entry from Dataplex Catalog.
29 |   search_aspect_types:
30 |     kind: dataplex-search-aspect-types
31 |     source: dataplex-source
32 |     description: Use this tool to find aspect types relevant to the query.
33 | 
34 | toolsets:
35 |   dataplex_tools:
36 |     - search_entries
37 |     - lookup_entry
38 |     - search_aspect_types
39 | 
```

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

```markdown
 1 | ---
 2 | title: "oceanbase-execute-sql"
 3 | type: docs
 4 | weight: 1
 5 | description: > 
 6 |   An "oceanbase-execute-sql" tool executes a SQL statement against an OceanBase database.
 7 | aliases:
 8 | - /resources/tools/oceanbase-execute-sql
 9 | ---
10 | 
11 | ## About
12 | 
13 | An `oceanbase-execute-sql` tool executes a SQL statement against an OceanBase
14 | database. It's compatible with the following source:
15 | 
16 | - [oceanbase](../sources/oceanbase.md)
17 | 
18 | `oceanbase-execute-sql` takes one input parameter `sql` and runs the sql
19 | statement against the `source`.
20 | 
21 | > **Note:** This tool is intended for developer assistant workflows with
22 | > human-in-the-loop and shouldn't be used for production agents.
23 | 
24 | ## Example
25 | 
26 | ```yaml
27 | tools:
28 |   execute_sql_tool:
29 |     kind: oceanbase-execute-sql
30 |     source: my-oceanbase-instance
31 |     description: Use this tool to execute sql statement.
32 | ```
33 | 
34 | ## Reference
35 | 
36 | | **field**   | **type** | **required** | **description**                                    |
37 | |-------------|:--------:|:------------:|----------------------------------------------------|
38 | | kind        |  string  |     true     | Must be "oceanbase-execute-sql".                   |
39 | | source      |  string  |     true     | Name of the source the SQL should execute on.      |
40 | | description |  string  |     true     | Description of the tool that is passed to the LLM. |
```

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

```markdown
 1 | ---
 2 | title: "firebird-execute-sql"
 3 | type: docs
 4 | weight: 1
 5 | description: > 
 6 |   A "firebird-execute-sql" tool executes a SQL statement against a Firebird
 7 |   database.
 8 | aliases:
 9 | - /resources/tools/firebird-execute-sql
10 | ---
11 | 
12 | ## About
13 | 
14 | A `firebird-execute-sql` tool executes a SQL statement against a Firebird
15 | database. It's compatible with the following source:
16 | 
17 | - [firebird](../sources/firebird.md)
18 | 
19 | `firebird-execute-sql` takes one input parameter `sql` and runs the sql
20 | statement against the `source`.
21 | 
22 | > **Note:** This tool is intended for developer assistant workflows with
23 | > human-in-the-loop and shouldn't be used for production agents.
24 | 
25 | ## Example
26 | 
27 | ```yaml
28 | tools:
29 |   execute_sql_tool:
30 |     kind: firebird-execute-sql
31 |     source: my_firebird_db
32 |     description: Use this tool to execute a SQL statement against the Firebird database.
33 | ```
34 | 
35 | ## Reference
36 | 
37 | | **field**   | **type** | **required** | **description**                                    |
38 | |-------------|:--------:|:------------:|----------------------------------------------------|
39 | | kind        |  string  |     true     | Must be "firebird-execute-sql".                    |
40 | | source      |  string  |     true     | Name of the source the SQL should execute on.      |
41 | | description |  string  |     true     | Description of the tool that is passed to the LLM. |
42 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | sources:
16 |     mssql-source:
17 |       kind: mssql
18 |       host: ${MSSQL_HOST}
19 |       port: ${MSSQL_PORT}
20 |       database: ${MSSQL_DATABASE}
21 |       user: ${MSSQL_USER}
22 |       password: ${MSSQL_PASSWORD}
23 | tools:
24 |     execute_sql:
25 |         kind: mssql-execute-sql
26 |         source: mssql-source
27 |         description: Use this tool to execute SQL.
28 | 
29 |     list_tables:
30 |         kind: mssql-list-tables
31 |         source: mssql-source
32 |         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."
33 | 
34 | toolsets:
35 |     mssql_database_tools:
36 |         - execute_sql
37 |         - list_tables
38 | 
```

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

```markdown
 1 | ---
 2 | title: cloud-sql-create-users
 3 | type: docs
 4 | weight: 10
 5 | description: >
 6 |   Create a new user in a Cloud SQL instance.
 7 | ---
 8 | 
 9 | The `cloud-sql-create-users` tool creates a new user in a specified Cloud SQL
10 | instance. It can create both built-in and IAM users.
11 | 
12 | {{< notice info >}}
13 | This tool uses a `source` of kind `cloud-sql-admin`.
14 | {{< /notice >}}
15 | 
16 | ## Example
17 | 
18 | ```yaml
19 | tools:
20 |   create-cloud-sql-user:
21 |     kind: cloud-sql-create-users
22 |     source: my-cloud-sql-admin-source
23 |     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"
24 | ```
25 | 
26 | ## Reference
27 | 
28 | | **field**    |  **type** | **required** | **description**                                  |
29 | | ------------ | :-------: | :----------: | ------------------------------------------------ |
30 | | kind         |   string  |     true     | Must be "cloud-sql-create-users".                |
31 | | description  |   string  |     false    | A description of the tool.                       |
32 | | source       |   string  |     true     | The name of the `cloud-sql-admin` source to use. |
33 | 
```

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

```markdown
 1 | ---
 2 | title: "sqlite-execute-sql"
 3 | type: docs
 4 | weight: 1
 5 | description: >
 6 |   A "sqlite-execute-sql" tool executes a single SQL statement against a SQLite database.
 7 | aliases:
 8 | - /resources/tools/sqlite-execute-sql
 9 | ---
10 | 
11 | ## About
12 | 
13 | A `sqlite-execute-sql` tool executes a single SQL statement against a SQLite
14 | database. It's compatible with any of the following sources:
15 | 
16 | - [sqlite](../../sources/sqlite.md)
17 | 
18 | This tool is designed for direct execution of SQL statements. It takes a single
19 | `sql` input parameter and runs the SQL statement against the configured SQLite
20 | `source`.
21 | 
22 | > **Note:** This tool is intended for developer assistant workflows with
23 | > human-in-the-loop and shouldn't be used for production agents.
24 | 
25 | ## Example
26 | 
27 | ```yaml
28 | tools:
29 |  execute_sql_tool:
30 |     kind: sqlite-execute-sql
31 |     source: my-sqlite-db
32 |     description: Use this tool to execute a SQL statement.
33 | ```
34 | 
35 | ## Reference
36 | 
37 | | **field**   | **type** | **required** | **description**                                    |
38 | |-------------|:--------:|:------------:|----------------------------------------------------|
39 | | kind        |  string  |     true     | Must be "sqlite-execute-sql".                      |
40 | | source      |  string  |     true     | Name of the source the SQL should execute on.      |
41 | | description |  string  |     true     | Description of the tool that is passed to the LLM. |
42 | 
```

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

```markdown
 1 | ---
 2 | title: "firestore-get-rules"
 3 | type: docs
 4 | weight: 1
 5 | description: >
 6 |   A "firestore-get-rules" tool retrieves the active Firestore security rules for the current project.
 7 | aliases:
 8 | - /resources/tools/firestore-get-rules
 9 | ---
10 | 
11 | ## About
12 | 
13 | A `firestore-get-rules` tool retrieves the active [Firestore security
14 | rules](https://firebase.google.com/docs/firestore/security/get-started) for the
15 | current project.
16 | It's compatible with the following sources:
17 | 
18 | - [firestore](../../sources/firestore.md)
19 | 
20 | `firestore-get-rules` takes no input parameters and returns the security rules
21 | content along with metadata such as the ruleset name, and timestamps.
22 | 
23 | ## Example
24 | 
25 | ```yaml
26 | tools:
27 |   get_firestore_rules:
28 |     kind: firestore-get-rules
29 |     source: my-firestore-source
30 |     description: Use this tool to retrieve the active Firestore security rules.
31 | ```
32 | 
33 | ## Reference
34 | 
35 | | **field**   |    **type**   | **required** | **description**                                       |
36 | |-------------|:-------------:|:------------:|-------------------------------------------------------|
37 | | kind        |     string    |     true     | Must be "firestore-get-rules".                        |
38 | | source      |     string    |     true     | Name of the Firestore source to retrieve rules from.  |
39 | | description |     string    |     true     | Description of the tool that is passed to the LLM.    |
40 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | sources:
15 |   clickhouse-source:
16 |     kind: clickhouse
17 |     host: ${CLICKHOUSE_HOST}
18 |     port: ${CLICKHOUSE_PORT}
19 |     user: ${CLICKHOUSE_USER}
20 |     password: ${CLICKHOUSE_PASSWORD}
21 |     database: ${CLICKHOUSE_DATABASE}
22 |     protocol: ${CLICKHOUSE_PROTOCOL}
23 | 
24 | tools:
25 |   execute_sql:
26 |     kind: clickhouse-execute-sql
27 |     source: clickhouse-source
28 |     description: Use this tool to execute SQL.
29 | 
30 |   list_databases:
31 |     kind: clickhouse-list-databases
32 |     source: clickhouse-source
33 |     description: Use this tool to list all databases in ClickHouse.
34 | 
35 |   list_tables:
36 |     kind: clickhouse-list-tables
37 |     source: clickhouse-source
38 |     description: Use this tool to list all tables in a specific ClickHouse database.
39 | 
40 | toolsets:
41 |   clickhouse_database_tools:
42 |     - execute_sql
43 |     - list_databases
44 |     - list_tables
45 | 
```

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

```markdown
 1 | ---
 2 | title: "firestore-get-documents"
 3 | type: docs
 4 | weight: 1
 5 | description: >
 6 |   A "firestore-get-documents" tool retrieves multiple documents from Firestore by their paths.
 7 | aliases:
 8 | - /resources/tools/firestore-get-documents
 9 | ---
10 | 
11 | ## About
12 | 
13 | A `firestore-get-documents` tool retrieves multiple documents from Firestore by
14 | their paths.
15 | It's compatible with the following sources:
16 | 
17 | - [firestore](../../sources/firestore.md)
18 | 
19 | `firestore-get-documents` takes one input parameter `documentPaths` which is an
20 | array of document paths, and returns the documents' data along with metadata
21 | such as existence status, creation time, update time, and read time.
22 | 
23 | ## Example
24 | 
25 | ```yaml
26 | tools:
27 |   get_user_documents:
28 |     kind: firestore-get-documents
29 |     source: my-firestore-source
30 |     description: Use this tool to retrieve multiple documents from Firestore.
31 | ```
32 | 
33 | ## Reference
34 | 
35 | | **field**   |    **type**    | **required** | **description**                                            |
36 | |-------------|:--------------:|:------------:|------------------------------------------------------------|
37 | | kind        |     string     |     true     | Must be "firestore-get-documents".                         |
38 | | source      |     string     |     true     | Name of the Firestore source to retrieve documents from.   |
39 | | description |     string     |     true     | Description of the tool that is passed to the LLM.         |
40 | 
```

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

```go
 1 | // Copyright 2024 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //	http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package tests
16 | 
17 | import (
18 | 	"context"
19 | 	"os"
20 | 	"os/exec"
21 | 	"strings"
22 | 
23 | 	"google.golang.org/api/idtoken"
24 | )
25 | 
26 | var ServiceAccountEmail = os.Getenv("SERVICE_ACCOUNT_EMAIL")
27 | var ClientId = os.Getenv("CLIENT_ID")
28 | 
29 | // GetGoogleIdToken retrieve and return the Google ID token
30 | func GetGoogleIdToken(audience string) (string, error) {
31 | 	// For local testing - use gcloud command to print personal ID token
32 | 	cmd := exec.Command("gcloud", "auth", "print-identity-token")
33 | 	output, err := cmd.Output()
34 | 	if err == nil {
35 | 		return strings.TrimSpace(string(output)), nil
36 | 	}
37 | 	// For Cloud Build testing - retrieve ID token from GCE metadata server
38 | 	ts, err := idtoken.NewTokenSource(context.Background(), ClientId)
39 | 	if err != nil {
40 | 		return "", err
41 | 	}
42 | 	token, err := ts.Token()
43 | 	if err != nil {
44 | 		return "", err
45 | 	}
46 | 	return token.AccessToken, nil
47 | }
48 | 
```

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

```markdown
 1 | ---
 2 | title: "firestore-delete-documents"
 3 | type: docs
 4 | weight: 1
 5 | description: >
 6 |   A "firestore-delete-documents" tool deletes multiple documents from Firestore by their paths.
 7 | aliases:
 8 | - /resources/tools/firestore-delete-documents
 9 | ---
10 | 
11 | ## About
12 | 
13 | A `firestore-delete-documents` tool deletes multiple documents from Firestore by
14 | their paths.
15 | It's compatible with the following sources:
16 | 
17 | - [firestore](../../sources/firestore.md)
18 | 
19 | `firestore-delete-documents` takes one input parameter `documentPaths` which is
20 | an array of document paths to delete. The tool uses Firestore's BulkWriter for
21 | efficient batch deletion and returns the success status for each document.
22 | 
23 | ## Example
24 | 
25 | ```yaml
26 | tools:
27 |   delete_user_documents:
28 |     kind: firestore-delete-documents
29 |     source: my-firestore-source
30 |     description: Use this tool to delete multiple documents from Firestore.
31 | ```
32 | 
33 | ## Reference
34 | 
35 | | **field**   |     **type**   | **required** | **description**                                          |
36 | |-------------|:--------------:|:------------:|----------------------------------------------------------|
37 | | kind        |     string     |     true     | Must be "firestore-delete-documents".                    |
38 | | source      |     string     |     true     | Name of the Firestore source to delete documents from.   |
39 | | description |     string     |     true     | Description of the tool that is passed to the LLM.       |
40 | 
```

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

```go
 1 | package server
 2 | 
 3 | import (
 4 | 	"bytes"
 5 | 	"embed"
 6 | 	"fmt"
 7 | 	"io"
 8 | 	"io/fs"
 9 | 	"net/http"
10 | 
11 | 	"github.com/go-chi/chi/v5"
12 | 	"github.com/go-chi/chi/v5/middleware"
13 | )
14 | 
15 | //go:embed all:static
16 | var staticContent embed.FS
17 | 
18 | // webRouter creates a router that represents the routes under /ui
19 | func webRouter() (chi.Router, error) {
20 | 	r := chi.NewRouter()
21 | 	r.Use(middleware.StripSlashes)
22 | 
23 | 	// direct routes for html pages to provide clean URLs
24 | 	r.Get("/", func(w http.ResponseWriter, r *http.Request) { serveHTML(w, r, "static/index.html") })
25 | 	r.Get("/tools", func(w http.ResponseWriter, r *http.Request) { serveHTML(w, r, "static/tools.html") })
26 | 	r.Get("/toolsets", func(w http.ResponseWriter, r *http.Request) { serveHTML(w, r, "static/toolsets.html") })
27 | 
28 | 	// handler for all other static files/assets
29 | 	staticFS, _ := fs.Sub(staticContent, "static")
30 | 	r.Handle("/*", http.StripPrefix("/ui", http.FileServer(http.FS(staticFS))))
31 | 
32 | 	return r, nil
33 | }
34 | 
35 | func serveHTML(w http.ResponseWriter, r *http.Request, filepath string) {
36 | 	file, err := staticContent.Open(filepath)
37 | 	if err != nil {
38 | 		http.Error(w, "File not found", http.StatusNotFound)
39 | 		return
40 | 	}
41 | 	defer file.Close()
42 | 
43 | 	fileBytes, err := io.ReadAll(file)
44 | 	if err != nil {
45 | 		http.Error(w, fmt.Sprintf("Error reading file: %v", err), http.StatusInternalServerError)
46 | 		return
47 | 	}
48 | 
49 | 	fileInfo, err := file.Stat()
50 | 	if err != nil {
51 | 		return
52 | 	}
53 | 	http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), bytes.NewReader(fileBytes))
54 | }
55 | 
```

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

```go
 1 | // Copyright 2025 Google LLC
 2 | //
 3 | // Licensed under the Apache License, Version 2.0 (the "License");
 4 | // you may not use this file except in compliance with the License.
 5 | // You may obtain a copy of the License at
 6 | //
 7 | //     http://www.apache.org/licenses/LICENSE-2.0
 8 | //
 9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | 
15 | package mysqlcommon
16 | 
17 | import (
18 | 	"database/sql"
19 | 	"encoding/json"
20 | 	"reflect"
21 | )
22 | 
23 | // ConvertToType handles casting mysql returns to the right type
24 | // types for mysql driver: https://github.com/go-sql-driver/mysql/blob/v1.9.3/fields.go
25 | // all numeric type or unknown type will be return as is.
26 | func ConvertToType(t *sql.ColumnType, v any) (any, error) {
27 | 	switch t.ScanType() {
28 | 	case reflect.TypeOf(""), reflect.TypeOf([]byte{}), reflect.TypeOf(sql.NullString{}):
29 | 		// unmarshal JSON data before returning to prevent double marshaling
30 | 		if t.DatabaseTypeName() == "JSON" {
31 | 			// unmarshal JSON data before storing to prevent double marshaling
32 | 			var unmarshaledData any
33 | 			err := json.Unmarshal(v.([]byte), &unmarshaledData)
34 | 			if err != nil {
35 | 				return nil, err
36 | 			}
37 | 			return unmarshaledData, nil
38 | 		}
39 | 		return string(v.([]byte)), nil
40 | 	default:
41 | 		return v, nil
42 | 	}
43 | }
44 | 
```

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

```html
 1 | {{/*
 2 |   snippet.html
 3 |   Usage:
 4 |     {{< regionInclude "filename.md" "region_name" >}}
 5 |     {{< regionInclude "filename.python" "region_name" "python" >}}
 6 | */}}
 7 | 
 8 | {{ $file := .Get 0 }}
 9 | {{ $region := .Get 1 }}
10 | {{ $lang := .Get 2 | default "text" }}
11 | {{ $path := printf "%s%s" .Page.File.Dir $file }}
12 | 
13 | {{ if or (not $file) (eq $file "") }}
14 |   {{ errorf "The file parameter (first argument) is required and must be non-empty in %s" .Page.File.Path }}
15 | {{ end }}
16 | {{ if or (not $region) (eq $region "") }}
17 |   {{ errorf "The region parameter (second argument) is required and must be non-empty in %s" .Page.File.Path }}
18 | {{ end }}
19 | {{ if not (fileExists $path) }}
20 |   {{ errorf "File %q not found (referenced in %s)" $path .Page.File.Path }}
21 | {{ end }}
22 | 
23 | {{ $content := readFile $path }}
24 | {{ $start_tag := printf "[START %s]" $region }}
25 | {{ $end_tag := printf "[END %s]" $region }}
26 | 
27 | {{ $snippet := "" }}
28 | {{ $in_snippet := false }}
29 | {{ range split $content "\n" }}
30 |   {{ if $in_snippet }}
31 |     {{ if in . $end_tag }}
32 |       {{ $in_snippet = false }}
33 |     {{ else }}
34 |       {{ $snippet = printf "%s%s\n" $snippet . }}
35 |     {{ end }}
36 |   {{ else if in . $start_tag }}
37 |     {{ $in_snippet = true }}
38 |   {{ end }}
39 | {{ end }}
40 | 
41 | {{ if eq (trim $snippet "") "" }}
42 |   {{ errorf "Region %q not found or empty in file %s (referenced in %s)" $region $file .Page.File.Path }}
43 | {{ end }}
44 | 
45 | {{ if eq $lang "text" }}
46 |   {{ $snippet | markdownify }}
47 | {{ else }}
48 |   {{ highlight (trim $snippet "\n") $lang "" }}
49 | {{ end }}
50 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | sources:
16 |   cloud-sql-admin-source:
17 |     kind: cloud-sql-admin
18 | 
19 | tools:
20 |   create_instance:
21 |     kind: cloud-sql-mssql-create-instance
22 |     source: cloud-sql-admin-source
23 |   get_instance:
24 |     kind: cloud-sql-get-instance
25 |     source: cloud-sql-admin-source
26 |   list_instances:
27 |     kind: cloud-sql-list-instances
28 |     source: cloud-sql-admin-source
29 |   create_database:
30 |     kind: cloud-sql-create-database
31 |     source: cloud-sql-admin-source
32 |   list_databases:
33 |     kind: cloud-sql-list-databases
34 |     source: cloud-sql-admin-source
35 |   create_user:
36 |     kind: cloud-sql-create-users
37 |     source: cloud-sql-admin-source
38 |   wait_for_operation:
39 |     kind: cloud-sql-wait-for-operation
40 |     source: cloud-sql-admin-source
41 | 
42 | toolsets:
43 |   cloud_sql_mssql_admin_tools:
44 |     - create_instance
45 |     - get_instance
46 |     - list_instances
47 |     - create_database
48 |     - list_databases
49 |     - create_user
50 |     - wait_for_operation
51 | 
```

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

```yaml
 1 | # Copyright 2025 Google LLC
 2 | #
 3 | # Licensed under the Apache License, Version 2.0 (the "License");
 4 | # you may not use this file except in compliance with the License.
 5 | # You may obtain a copy of the License at
 6 | #
 7 | #     http://www.apache.org/licenses/LICENSE-2.0
 8 | #
 9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | 
15 | sources:
16 |   cloud-sql-admin-source:
17 |     kind: cloud-sql-admin
18 | 
19 | tools:
20 |   create_instance:
21 |     kind: cloud-sql-mysql-create-instance
22 |     source: cloud-sql-admin-source
23 |   get_instance:
24 |     kind: cloud-sql-get-instance
25 |     source: cloud-sql-admin-source
26 |   list_instances:
27 |     kind: cloud-sql-list-instances
28 |     source: cloud-sql-admin-source
29 |   create_database:
30 |     kind: cloud-sql-create-database
31 |     source: cloud-sql-admin-source
32 |   list_databases:
33 |     kind: cloud-sql-list-databases
34 |     source: cloud-sql-admin-source
35 |   create_user:
36 |     kind: cloud-sql-create-users
37 |     source: cloud-sql-admin-source
38 |   wait_for_operation:
39 |     kind: cloud-sql-wait-for-operation
40 |     source: cloud-sql-admin-source
41 | 
42 | toolsets:
43 |   cloud_sql_mysql_admin_tools:
44 |     - create_instance
45 |     - get_instance
46 |     - list_instances
47 |     - create_database
48 |     - list_databases
49 |     - create_user
50 |     - wait_for_operation
51 | 
```
Page 1/45FirstPrevNextLast