This is page 1 of 76. 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_prompts_with_coverage.sh
│ ├── test_with_coverage.sh
│ └── versioned.release.cloudbuild.yaml
├── .gemini
│ └── config.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
│ ├── trusted-contribution.yml
│ └── workflows
│ ├── cloud_build_failure_reporter.yml
│ ├── deploy_dev_docs.yaml
│ ├── deploy_previous_version_docs.yaml
│ ├── deploy_versioned_docs.yaml
│ ├── docs_preview_clean.yaml
│ ├── docs_preview_deploy.yaml
│ ├── link_checker_workflow.yaml
│ ├── lint.yaml
│ ├── publish-mcp.yml
│ ├── 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
├── .lycheeignore
├── 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
│ ├── ALLOYDBADMIN_README.md
│ ├── ALLOYDBPG_README.md
│ ├── BIGQUERY_README.md
│ ├── CLOUDSQLMSSQL_README.md
│ ├── CLOUDSQLMSSQLADMIN_README.md
│ ├── CLOUDSQLMYSQL_README.md
│ ├── CLOUDSQLMYSQLADMIN_README.md
│ ├── CLOUDSQLPG_README.md
│ ├── CLOUDSQLPGADMIN_README.md
│ ├── DATAPLEX_README.md
│ ├── en
│ │ ├── _index.md
│ │ ├── about
│ │ │ ├── _index.md
│ │ │ └── faq.md
│ │ ├── blogs
│ │ │ └── _index.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
│ │ │ ├── prompts_quickstart_gemini_cli.md
│ │ │ └── quickstart
│ │ │ ├── go
│ │ │ │ ├── adkgo
│ │ │ │ │ ├── go.mod
│ │ │ │ │ ├── go.sum
│ │ │ │ │ └── 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
│ │ │ │ ├── adk
│ │ │ │ │ ├── package-lock.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── quickstart.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_adk_agent.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
│ │ │ ├── embeddingModels
│ │ │ │ ├── _index.md
│ │ │ │ └── gemini.md
│ │ │ ├── prompts
│ │ │ │ ├── _index.md
│ │ │ │ └── custom
│ │ │ │ └── _index.md
│ │ │ ├── sources
│ │ │ │ ├── _index.md
│ │ │ │ ├── alloydb-admin.md
│ │ │ │ ├── alloydb-pg.md
│ │ │ │ ├── bigquery.md
│ │ │ │ ├── bigtable.md
│ │ │ │ ├── cassandra.md
│ │ │ │ ├── clickhouse.md
│ │ │ │ ├── cloud-gda.md
│ │ │ │ ├── cloud-healthcare.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
│ │ │ │ ├── elasticsearch.md
│ │ │ │ ├── firebird.md
│ │ │ │ ├── firestore.md
│ │ │ │ ├── http.md
│ │ │ │ ├── looker.md
│ │ │ │ ├── mariadb.md
│ │ │ │ ├── mindsdb.md
│ │ │ │ ├── mongodb.md
│ │ │ │ ├── mssql.md
│ │ │ │ ├── mysql.md
│ │ │ │ ├── neo4j.md
│ │ │ │ ├── oceanbase.md
│ │ │ │ ├── oracle.md
│ │ │ │ ├── postgres.md
│ │ │ │ ├── redis.md
│ │ │ │ ├── serverless-spark.md
│ │ │ │ ├── singlestore.md
│ │ │ │ ├── snowflake.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
│ │ │ ├── cloudgda
│ │ │ │ ├── _index.md
│ │ │ │ └── cloud-gda-query.md
│ │ │ ├── cloudhealthcare
│ │ │ │ ├── _index.md
│ │ │ │ ├── cloud-healthcare-fhir-fetch-page.md
│ │ │ │ ├── cloud-healthcare-fhir-patient-everything.md
│ │ │ │ ├── cloud-healthcare-fhir-patient-search.md
│ │ │ │ ├── cloud-healthcare-get-dataset.md
│ │ │ │ ├── cloud-healthcare-get-dicom-store-metrics.md
│ │ │ │ ├── cloud-healthcare-get-dicom-store.md
│ │ │ │ ├── cloud-healthcare-get-fhir-resource.md
│ │ │ │ ├── cloud-healthcare-get-fhir-store-metrics.md
│ │ │ │ ├── cloud-healthcare-get-fhir-store.md
│ │ │ │ ├── cloud-healthcare-list-dicom-stores.md
│ │ │ │ ├── cloud-healthcare-list-fhir-stores.md
│ │ │ │ ├── cloud-healthcare-retrieve-rendered-dicom-instance.md
│ │ │ │ ├── cloud-healthcare-search-dicom-instances.md
│ │ │ │ ├── cloud-healthcare-search-dicom-series.md
│ │ │ │ └── cloud-healthcare-search-dicom-studies.md
│ │ │ ├── cloudmonitoring
│ │ │ │ ├── _index.md
│ │ │ │ └── cloud-monitoring-query-prometheus.md
│ │ │ ├── cloudsql
│ │ │ │ ├── _index.md
│ │ │ │ ├── cloudsqlcloneinstance.md
│ │ │ │ ├── cloudsqlcreatedatabase.md
│ │ │ │ ├── cloudsqlcreateusers.md
│ │ │ │ ├── cloudsqlgetinstances.md
│ │ │ │ ├── cloudsqllistdatabases.md
│ │ │ │ ├── cloudsqllistinstances.md
│ │ │ │ ├── cloudsqlmssqlcreateinstance.md
│ │ │ │ ├── cloudsqlmysqlcreateinstance.md
│ │ │ │ ├── cloudsqlpgcreateinstances.md
│ │ │ │ ├── cloudsqlpgupgradeprecheck.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
│ │ │ ├── elasticsearch
│ │ │ │ ├── _index.md
│ │ │ │ └── elasticsearch-esql.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-add-dashboard-filter.md
│ │ │ │ ├── looker-conversational-analytics.md
│ │ │ │ ├── looker-create-project-file.md
│ │ │ │ ├── looker-delete-project-file.md
│ │ │ │ ├── looker-dev-mode.md
│ │ │ │ ├── looker-generate-embed-url.md
│ │ │ │ ├── looker-get-connection-databases.md
│ │ │ │ ├── looker-get-connection-schemas.md
│ │ │ │ ├── looker-get-connection-table-columns.md
│ │ │ │ ├── looker-get-connection-tables.md
│ │ │ │ ├── looker-get-connections.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-get-project-file.md
│ │ │ │ ├── looker-get-project-files.md
│ │ │ │ ├── looker-get-projects.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-dashboard.md
│ │ │ │ ├── looker-run-look.md
│ │ │ │ └── looker-update-project-file.md
│ │ │ ├── mindsdb
│ │ │ │ ├── _index.md
│ │ │ │ ├── mindsdb-execute-sql.md
│ │ │ │ └── mindsdb-sql.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-get-query-plan.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-database-overview.md
│ │ │ │ ├── postgres-execute-sql.md
│ │ │ │ ├── postgres-get-column-cardinality.md
│ │ │ │ ├── postgres-list-active-queries.md
│ │ │ │ ├── postgres-list-available-extensions.md
│ │ │ │ ├── postgres-list-database-stats.md
│ │ │ │ ├── postgres-list-indexes.md
│ │ │ │ ├── postgres-list-installed-extensions.md
│ │ │ │ ├── postgres-list-locks.md
│ │ │ │ ├── postgres-list-pg-settings.md
│ │ │ │ ├── postgres-list-publication-tables.md
│ │ │ │ ├── postgres-list-query-stats.md
│ │ │ │ ├── postgres-list-roles.md
│ │ │ │ ├── postgres-list-schemas.md
│ │ │ │ ├── postgres-list-sequences.md
│ │ │ │ ├── postgres-list-stored-procedure.md
│ │ │ │ ├── postgres-list-table-stats.md
│ │ │ │ ├── postgres-list-tables.md
│ │ │ │ ├── postgres-list-tablespaces.md
│ │ │ │ ├── postgres-list-triggers.md
│ │ │ │ ├── postgres-list-views.md
│ │ │ │ ├── postgres-long-running-transactions.md
│ │ │ │ ├── postgres-replication-stats.md
│ │ │ │ └── postgres-sql.md
│ │ │ ├── redis
│ │ │ │ ├── _index.md
│ │ │ │ └── redis.md
│ │ │ ├── serverless-spark
│ │ │ │ ├── _index.md
│ │ │ │ ├── serverless-spark-cancel-batch.md
│ │ │ │ ├── serverless-spark-create-pyspark-batch.md
│ │ │ │ ├── serverless-spark-create-spark-batch.md
│ │ │ │ ├── serverless-spark-get-batch.md
│ │ │ │ └── serverless-spark-list-batches.md
│ │ │ ├── singlestore
│ │ │ │ ├── _index.md
│ │ │ │ ├── singlestore-execute-sql.md
│ │ │ │ └── singlestore-sql.md
│ │ │ ├── snowflake
│ │ │ │ ├── _index.md
│ │ │ │ ├── snowflake-execute-sql.md
│ │ │ │ └── snowflake-sql.md
│ │ │ ├── spanner
│ │ │ │ ├── _index.md
│ │ │ │ ├── spanner-execute-sql.md
│ │ │ │ ├── spanner-list-graphs.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
│ │ │ └── snowflake
│ │ │ ├── _index.md
│ │ │ ├── runme.py
│ │ │ ├── snowflake-config.yaml
│ │ │ ├── snowflake-env.sh
│ │ │ └── test-snowflake.sh
│ │ └── sdks
│ │ ├── _index.md
│ │ ├── go-sdk.md
│ │ ├── js-sdk.md
│ │ └── python-sdk.md
│ ├── LOOKER_README.md
│ ├── SPANNER_README.md
│ └── TOOLBOX_README.md
├── gemini-extension.json
├── go.mod
├── go.sum
├── internal
│ ├── auth
│ │ ├── auth.go
│ │ └── google
│ │ └── google.go
│ ├── embeddingmodels
│ │ ├── embeddingmodels.go
│ │ └── gemini
│ │ ├── gemini_test.go
│ │ └── gemini.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-healthcare.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
│ │ ├── elasticsearch.yaml
│ │ ├── firestore.yaml
│ │ ├── looker-conversational-analytics.yaml
│ │ ├── looker.yaml
│ │ ├── mindsdb.yaml
│ │ ├── mssql.yaml
│ │ ├── mysql.yaml
│ │ ├── neo4j.yaml
│ │ ├── oceanbase.yaml
│ │ ├── postgres.yaml
│ │ ├── serverless-spark.yaml
│ │ ├── singlestore.yaml
│ │ ├── snowflake.yaml
│ │ ├── spanner-postgres.yaml
│ │ ├── spanner.yaml
│ │ └── sqlite.yaml
│ ├── prompts
│ │ ├── arguments_test.go
│ │ ├── arguments.go
│ │ ├── custom
│ │ │ ├── custom_test.go
│ │ │ └── custom.go
│ │ ├── messages_test.go
│ │ ├── messages.go
│ │ ├── prompts_test.go
│ │ ├── prompts.go
│ │ ├── promptsets_test.go
│ │ └── promptsets.go
│ ├── 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
│ │ ├── resources
│ │ │ ├── resources_test.go
│ │ │ └── resources.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
│ │ │ └── cache.go
│ │ ├── bigtable
│ │ │ ├── bigtable_test.go
│ │ │ └── bigtable.go
│ │ ├── cassandra
│ │ │ ├── cassandra_test.go
│ │ │ └── cassandra.go
│ │ ├── clickhouse
│ │ │ ├── clickhouse_test.go
│ │ │ └── clickhouse.go
│ │ ├── cloudgda
│ │ │ ├── cloud_gda_test.go
│ │ │ └── cloud_gda.go
│ │ ├── cloudhealthcare
│ │ │ ├── cloud_healthcare_test.go
│ │ │ └── cloud_healthcare.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
│ │ ├── elasticsearch
│ │ │ ├── elasticsearch_test.go
│ │ │ └── elasticsearch.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
│ │ ├── mindsdb
│ │ │ ├── mindsdb_test.go
│ │ │ └── mindsdb.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_test.go
│ │ │ └── oracle.go
│ │ ├── postgres
│ │ │ ├── postgres_test.go
│ │ │ └── postgres.go
│ │ ├── redis
│ │ │ ├── redis_test.go
│ │ │ └── redis.go
│ │ ├── serverlessspark
│ │ │ ├── serverlessspark_test.go
│ │ │ ├── serverlessspark.go
│ │ │ ├── url_test.go
│ │ │ └── url.go
│ │ ├── singlestore
│ │ │ ├── singlestore_test.go
│ │ │ └── singlestore.go
│ │ ├── snowflake
│ │ │ ├── snowflake_test.go
│ │ │ └── snowflake.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
│ │ ├── cloudgda
│ │ │ ├── cloudgda_test.go
│ │ │ ├── cloudgda.go
│ │ │ └── types.go
│ │ ├── cloudhealthcare
│ │ │ ├── cloudhealthcarefhirfetchpage
│ │ │ │ ├── cloudhealthcarefhirfetchpage_test.go
│ │ │ │ └── cloudhealthcarefhirfetchpage.go
│ │ │ ├── cloudhealthcarefhirpatienteverything
│ │ │ │ ├── cloudhealthcarefhirpatienteverything_test.go
│ │ │ │ └── cloudhealthcarefhirpatienteverything.go
│ │ │ ├── cloudhealthcarefhirpatientsearch
│ │ │ │ ├── cloudhealthcarefhirpatientsearch_test.go
│ │ │ │ └── cloudhealthcarefhirpatientsearch.go
│ │ │ ├── cloudhealthcaregetdataset
│ │ │ │ ├── cloudhealthcaregetdataset_test.go
│ │ │ │ └── cloudhealthcaregetdataset.go
│ │ │ ├── cloudhealthcaregetdicomstore
│ │ │ │ ├── cloudhealthcaregetdicomstore_test.go
│ │ │ │ └── cloudhealthcaregetdicomstore.go
│ │ │ ├── cloudhealthcaregetdicomstoremetrics
│ │ │ │ ├── cloudhealthcaregetdicomstoremetrics_test.go
│ │ │ │ └── cloudhealthcaregetdicomstoremetrics.go
│ │ │ ├── cloudhealthcaregetfhirresource
│ │ │ │ ├── cloudhealthcaregetfhirresource_test.go
│ │ │ │ └── cloudhealthcaregetfhirresource.go
│ │ │ ├── cloudhealthcaregetfhirstore
│ │ │ │ ├── cloudhealthcaregetfhirstore_test.go
│ │ │ │ └── cloudhealthcaregetfhirstore.go
│ │ │ ├── cloudhealthcaregetfhirstoremetrics
│ │ │ │ ├── cloudhealthcaregetfhirstoremetrics_test.go
│ │ │ │ └── cloudhealthcaregetfhirstoremetrics.go
│ │ │ ├── cloudhealthcarelistdicomstores
│ │ │ │ ├── cloudhealthcarelistdicomstores_test.go
│ │ │ │ └── cloudhealthcarelistdicomstores.go
│ │ │ ├── cloudhealthcarelistfhirstores
│ │ │ │ ├── cloudhealthcarelistfhirstores_test.go
│ │ │ │ └── cloudhealthcarelistfhirstores.go
│ │ │ ├── cloudhealthcareretrieverendereddicominstance
│ │ │ │ ├── cloudhealthcareretrieverendereddicominstance_test.go
│ │ │ │ └── cloudhealthcareretrieverendereddicominstance.go
│ │ │ ├── cloudhealthcaresearchdicominstances
│ │ │ │ ├── cloudhealthcaresearchdicominstances_test.go
│ │ │ │ └── cloudhealthcaresearchdicominstances.go
│ │ │ ├── cloudhealthcaresearchdicomseries
│ │ │ │ ├── cloudhealthcaresearchdicomseries_test.go
│ │ │ │ └── cloudhealthcaresearchdicomseries.go
│ │ │ ├── cloudhealthcaresearchdicomstudies
│ │ │ │ ├── cloudhealthcaresearchdicomstudies_test.go
│ │ │ │ └── cloudhealthcaresearchdicomstudies.go
│ │ │ └── common
│ │ │ └── util.go
│ │ ├── cloudmonitoring
│ │ │ ├── cloudmonitoring_test.go
│ │ │ └── cloudmonitoring.go
│ │ ├── cloudsql
│ │ │ ├── cloudsqlcloneinstance
│ │ │ │ ├── cloudsqlcloneinstance_test.go
│ │ │ │ └── cloudsqlcloneinstance.go
│ │ │ ├── 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
│ │ │ └── cloudsqlpgupgradeprecheck
│ │ │ ├── cloudsqlpgupgradeprecheck_test.go
│ │ │ └── cloudsqlpgupgradeprecheck.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
│ │ ├── elasticsearch
│ │ │ └── elasticsearchesql
│ │ │ ├── elasticsearchesql_test.go
│ │ │ └── elasticsearchesql.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
│ │ │ ├── lookeradddashboardfilter
│ │ │ │ ├── lookeradddashboardfilter_test.go
│ │ │ │ └── lookeradddashboardfilter.go
│ │ │ ├── lookercommon
│ │ │ │ ├── lookercommon_test.go
│ │ │ │ └── lookercommon.go
│ │ │ ├── lookerconversationalanalytics
│ │ │ │ ├── lookerconversationalanalytics_test.go
│ │ │ │ └── lookerconversationalanalytics.go
│ │ │ ├── lookercreateprojectfile
│ │ │ │ ├── lookercreateprojectfile_test.go
│ │ │ │ └── lookercreateprojectfile.go
│ │ │ ├── lookerdeleteprojectfile
│ │ │ │ ├── lookerdeleteprojectfile_test.go
│ │ │ │ └── lookerdeleteprojectfile.go
│ │ │ ├── lookerdevmode
│ │ │ │ ├── lookerdevmode_test.go
│ │ │ │ └── lookerdevmode.go
│ │ │ ├── lookergenerateembedurl
│ │ │ │ ├── lookergenerateembedurl_test.go
│ │ │ │ └── lookergenerateembedurl.go
│ │ │ ├── lookergetconnectiondatabases
│ │ │ │ ├── lookergetconnectiondatabases_test.go
│ │ │ │ └── lookergetconnectiondatabases.go
│ │ │ ├── lookergetconnections
│ │ │ │ ├── lookergetconnections_test.go
│ │ │ │ └── lookergetconnections.go
│ │ │ ├── lookergetconnectionschemas
│ │ │ │ ├── lookergetconnectionschemas_test.go
│ │ │ │ └── lookergetconnectionschemas.go
│ │ │ ├── lookergetconnectiontablecolumns
│ │ │ │ ├── lookergetconnectiontablecolumns_test.go
│ │ │ │ └── lookergetconnectiontablecolumns.go
│ │ │ ├── lookergetconnectiontables
│ │ │ │ ├── lookergetconnectiontables_test.go
│ │ │ │ └── lookergetconnectiontables.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
│ │ │ ├── lookergetprojectfile
│ │ │ │ ├── lookergetprojectfile_test.go
│ │ │ │ └── lookergetprojectfile.go
│ │ │ ├── lookergetprojectfiles
│ │ │ │ ├── lookergetprojectfiles_test.go
│ │ │ │ └── lookergetprojectfiles.go
│ │ │ ├── lookergetprojects
│ │ │ │ ├── lookergetprojects_test.go
│ │ │ │ └── lookergetprojects.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
│ │ │ ├── lookerrundashboard
│ │ │ │ ├── lookerrundashboard_test.go
│ │ │ │ └── lookerrundashboard.go
│ │ │ ├── lookerrunlook
│ │ │ │ ├── lookerrunlook_test.go
│ │ │ │ └── lookerrunlook.go
│ │ │ └── lookerupdateprojectfile
│ │ │ ├── lookerupdateprojectfile_test.go
│ │ │ └── lookerupdateprojectfile.go
│ │ ├── mindsdb
│ │ │ ├── mindsdbexecutesql
│ │ │ │ ├── mindsdbexecutesql_test.go
│ │ │ │ └── mindsdbexecutesql.go
│ │ │ └── mindsdbsql
│ │ │ ├── mindsdbsql_test.go
│ │ │ └── mindsdbsql.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
│ │ │ ├── mysqlgetqueryplan
│ │ │ │ ├── mysqlgetqueryplan_test.go
│ │ │ │ └── mysqlgetqueryplan.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_test.go
│ │ │ │ └── oracleexecutesql.go
│ │ │ └── oraclesql
│ │ │ ├── oraclesql_test.go
│ │ │ └── oraclesql.go
│ │ ├── postgres
│ │ │ ├── postgresdatabaseoverview
│ │ │ │ ├── postgresdatabaseoverview_test.go
│ │ │ │ └── postgresdatabaseoverview.go
│ │ │ ├── postgresexecutesql
│ │ │ │ ├── postgresexecutesql_test.go
│ │ │ │ └── postgresexecutesql.go
│ │ │ ├── postgresgetcolumncardinality
│ │ │ │ ├── postgresgetcolumncardinality_test.go
│ │ │ │ └── postgresgetcolumncardinality.go
│ │ │ ├── postgreslistactivequeries
│ │ │ │ ├── postgreslistactivequeries_test.go
│ │ │ │ └── postgreslistactivequeries.go
│ │ │ ├── postgreslistavailableextensions
│ │ │ │ ├── postgreslistavailableextensions_test.go
│ │ │ │ └── postgreslistavailableextensions.go
│ │ │ ├── postgreslistdatabasestats
│ │ │ │ ├── postgreslistdatabasestats_test.go
│ │ │ │ └── postgreslistdatabasestats.go
│ │ │ ├── postgreslistindexes
│ │ │ │ ├── postgreslistindexes_test.go
│ │ │ │ └── postgreslistindexes.go
│ │ │ ├── postgreslistinstalledextensions
│ │ │ │ ├── postgreslistinstalledextensions_test.go
│ │ │ │ └── postgreslistinstalledextensions.go
│ │ │ ├── postgreslistlocks
│ │ │ │ ├── postgreslistlocks_test.go
│ │ │ │ └── postgreslistlocks.go
│ │ │ ├── postgreslistpgsettings
│ │ │ │ ├── postgreslistpgsettings_test.go
│ │ │ │ └── postgreslistpgsettings.go
│ │ │ ├── postgreslistpublicationtables
│ │ │ │ ├── postgreslistpublicationtables_test.go
│ │ │ │ └── postgreslistpublicationtables.go
│ │ │ ├── postgreslistquerystats
│ │ │ │ ├── postgreslistquerystats_test.go
│ │ │ │ └── postgreslistquerystats.go
│ │ │ ├── postgreslistroles
│ │ │ │ ├── postgreslistroles_test.go
│ │ │ │ └── postgreslistroles.go
│ │ │ ├── postgreslistschemas
│ │ │ │ ├── postgreslistschemas_test.go
│ │ │ │ └── postgreslistschemas.go
│ │ │ ├── postgreslistsequences
│ │ │ │ ├── postgreslistsequences_test.go
│ │ │ │ └── postgreslistsequences.go
│ │ │ ├── postgresliststoredprocedure
│ │ │ │ ├── postgresliststoredprocedure_test.go
│ │ │ │ └── postgresliststoredprocedure.go
│ │ │ ├── postgreslisttables
│ │ │ │ ├── postgreslisttables_test.go
│ │ │ │ └── postgreslisttables.go
│ │ │ ├── postgreslisttablespaces
│ │ │ │ ├── postgreslisttablespaces_test.go
│ │ │ │ └── postgreslisttablespaces.go
│ │ │ ├── postgreslisttablestats
│ │ │ │ ├── postgreslisttablestats_test.go
│ │ │ │ └── postgreslisttablestats.go
│ │ │ ├── postgreslisttriggers
│ │ │ │ ├── postgreslisttriggers_test.go
│ │ │ │ └── postgreslisttriggers.go
│ │ │ ├── postgreslistviews
│ │ │ │ ├── postgreslistviews_test.go
│ │ │ │ └── postgreslistviews.go
│ │ │ ├── postgreslongrunningtransactions
│ │ │ │ ├── postgreslongrunningtransactions_test.go
│ │ │ │ └── postgreslongrunningtransactions.go
│ │ │ ├── postgresreplicationstats
│ │ │ │ ├── postgresreplicationstats_test.go
│ │ │ │ └── postgresreplicationstats.go
│ │ │ └── postgressql
│ │ │ ├── postgressql_test.go
│ │ │ └── postgressql.go
│ │ ├── redis
│ │ │ ├── redis_test.go
│ │ │ └── redis.go
│ │ ├── serverlessspark
│ │ │ ├── createbatch
│ │ │ │ ├── config.go
│ │ │ │ └── tool.go
│ │ │ ├── serverlesssparkcancelbatch
│ │ │ │ ├── serverlesssparkcancelbatch_test.go
│ │ │ │ └── serverlesssparkcancelbatch.go
│ │ │ ├── serverlesssparkcreatepysparkbatch
│ │ │ │ ├── serverlesssparkcreatepysparkbatch_test.go
│ │ │ │ └── serverlesssparkcreatepysparkbatch.go
│ │ │ ├── serverlesssparkcreatesparkbatch
│ │ │ │ ├── serverlesssparkcreatesparkbatch_test.go
│ │ │ │ └── serverlesssparkcreatesparkbatch.go
│ │ │ ├── serverlesssparkgetbatch
│ │ │ │ ├── serverlesssparkgetbatch_test.go
│ │ │ │ └── serverlesssparkgetbatch.go
│ │ │ ├── serverlesssparklistbatches
│ │ │ │ ├── serverlesssparklistbatches_test.go
│ │ │ │ └── serverlesssparklistbatches.go
│ │ │ └── testutils
│ │ │ └── testutils.go
│ │ ├── singlestore
│ │ │ ├── singlestoreexecutesql
│ │ │ │ ├── singlestoreexecutesql_test.go
│ │ │ │ └── singlestoreexecutesql.go
│ │ │ └── singlestoresql
│ │ │ ├── singlestoresql_test.go
│ │ │ └── singlestoresql.go
│ │ ├── snowflake
│ │ │ ├── snowflakeexecutesql
│ │ │ │ ├── snowflakeexecutesql_test.go
│ │ │ │ └── snowflakeexecutesql.go
│ │ │ └── snowflakesql
│ │ │ ├── snowflakesql_test.go
│ │ │ └── snowflakesql.go
│ │ ├── spanner
│ │ │ ├── spannerexecutesql
│ │ │ │ ├── spannerexecutesql_test.go
│ │ │ │ └── spannerexecutesql.go
│ │ │ ├── spannerlistgraphs
│ │ │ │ ├── spannerlistgraphs_test.go
│ │ │ │ └── spannerlistgraphs.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
│ ├── orderedmap
│ │ ├── orderedmap_test.go
│ │ └── orderedmap.go
│ ├── parameters
│ │ ├── common_test.go
│ │ ├── common.go
│ │ ├── parameters_test.go
│ │ └── parameters.go
│ └── util.go
├── LICENSE
├── logo.png
├── main.go
├── MCP-TOOLBOX-EXTENSION.md
├── README.md
├── server.json
└── 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
├── cloudgda
│ └── cloud_gda_integration_test.go
├── cloudhealthcare
│ └── cloud_healthcare_integration_test.go
├── cloudmonitoring
│ └── cloud_monitoring_integration_test.go
├── cloudsql
│ ├── cloud_sql_clone_instance_test.go
│ ├── 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
│ └── cloud_sql_pg_upgrade_precheck_test.go
├── common.go
├── couchbase
│ └── couchbase_integration_test.go
├── dataform
│ └── dataform_integration_test.go
├── dataplex
│ └── dataplex_integration_test.go
├── dgraph
│ └── dgraph_integration_test.go
├── elasticsearch
│ └── elasticsearch_integration_test.go
├── firebird
│ └── firebird_integration_test.go
├── firestore
│ └── firestore_integration_test.go
├── http
│ └── http_integration_test.go
├── looker
│ └── looker_integration_test.go
├── mariadb
│ └── mariadb_integration_test.go
├── mindsdb
│ └── mindsdb_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
├── prompts
│ └── custom
│ └── prompts_integration_test.go
├── redis
│ └── redis_test.go
├── server.go
├── serverlessspark
│ └── serverless_spark_integration_test.go
├── singlestore
│ └── singlestore_integration_test.go
├── snowflake
│ └── snowflake_integration_test.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
```
--------------------------------------------------------------------------------
/.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 | formatters:
27 | enable:
28 | - goimports
29 | settings:
30 | gofmt:
31 | rewrite-rules:
32 | - pattern: interface{}
33 | replacement: any
34 | - pattern: a[b:len(a)]
35 | replacement: a[b:]
36 |
```
--------------------------------------------------------------------------------
/.lycheeignore:
--------------------------------------------------------------------------------
```
1 | # Ignore documentation placeholders and generic example domains
2 | ^https?://([a-zA-Z0-9-]+\.)?example\.com(:\d+)?(/.*)?$
3 | ^http://example\.net
4 |
5 | # Shields.io badges often trigger rate limits or intermittent 503s
6 | ^https://img\.shields\.io/.*
7 |
8 | # PDF files are ignored as lychee cannot reliably parse internal PDF links
9 | \.pdf$
10 |
11 | # Standard mailto: protocol is not a web URL
12 | ^mailto:
13 |
14 | # Ignore local development endpoints that won't resolve in CI/CD environments
15 | ^https?://(127\.0\.0\.1|localhost)(:\d+)?(/.*)?$
16 |
17 | # Placeholder for Google Cloud Run service discovery
18 | https://cloud-run-url.app/
19 |
20 | # DGraph Cloud and private instance endpoints
21 | https://xxx.cloud.dgraph.io/
22 | https://cloud.dgraph.io/login
23 | https://dgraph.io/docs
24 |
25 | # MySQL Community downloads and main site (often protected by bot mitigation)
26 | https://dev.mysql.com/downloads/installer/
27 | https://www.mysql.com/
28 |
29 | # Claude desktop download link
30 | https://claude.ai/download
31 |
32 | # Google Cloud Run product page
33 | https://cloud.google.com/run
34 |
35 | # These specific deep links are known to cause redirect loops or 403s in automated scrapers
36 | https://dev.mysql.com/doc/refman/8.4/en/sql-prepared-statements.html
37 | https://dev.mysql.com/doc/refman/8.4/en/user-names.html
38 |
39 | # npmjs links can occasionally trigger rate limiting during high-frequency CI builds
40 | https://www.npmjs.com/package/@toolbox-sdk/core
41 | https://www.npmjs.com/package/@toolbox-sdk/adk
42 |
43 |
44 | # Ignore social media and blog profiles to reduce external request overhead
45 | https://medium.com/@mcp_toolbox
```
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
```markdown
1 | 
2 |
3 | # MCP Toolbox for Databases
4 |
5 | [](https://googleapis.github.io/genai-toolbox/)
6 | [](https://discord.gg/Dmm69peqjh)
7 | [](https://medium.com/@mcp_toolbox)
8 | [](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 | - [Using Toolbox with Gemini CLI Extensions](#using-toolbox-with-gemini-cli-extensions)
38 | - [Configuration](#configuration)
39 | - [Sources](#sources)
40 | - [Tools](#tools)
41 | - [Toolsets](#toolsets)
42 | - [Prompts](#prompts)
43 | - [Versioning](#versioning)
44 | - [Pre-1.0.0 Versioning](#pre-100-versioning)
45 | - [Post-1.0.0 Versioning](#post-100-versioning)
46 | - [Contributing](#contributing)
47 | - [Community](#community)
48 |
49 | <!-- /TOC -->
50 |
51 | ## Why Toolbox?
52 |
53 | Toolbox helps you build Gen AI tools that let your agents access data in your
54 | database. Toolbox provides:
55 |
56 | - **Simplified development**: Integrate tools to your agent in less than 10
57 | lines of code, reuse tools between multiple agents or frameworks, and deploy
58 | new versions of tools more easily.
59 | - **Better performance**: Best practices such as connection pooling,
60 | authentication, and more.
61 | - **Enhanced security**: Integrated auth for more secure access to your data
62 | - **End-to-end observability**: Out of the box metrics and tracing with built-in
63 | support for OpenTelemetry.
64 |
65 | **⚡ Supercharge Your Workflow with an AI Database Assistant ⚡**
66 |
67 | Stop context-switching and let your AI assistant become a true co-developer. By
68 | [connecting your IDE to your databases with MCP Toolbox][connect-ide], you can
69 | delegate complex and time-consuming database tasks, allowing you to build faster
70 | and focus on what matters. This isn't just about code completion; it's about
71 | giving your AI the context it needs to handle the entire development lifecycle.
72 |
73 | Here’s how it will save you time:
74 |
75 | - **Query in Plain English**: Interact with your data using natural language
76 | right from your IDE. Ask complex questions like, *"How many orders were
77 | delivered in 2024, and what items were in them?"* without writing any SQL.
78 | - **Automate Database Management**: Simply describe your data needs, and let the
79 | AI assistant manage your database for you. It can handle generating queries,
80 | creating tables, adding indexes, and more.
81 | - **Generate Context-Aware Code**: Empower your AI assistant to generate
82 | application code and tests with a deep understanding of your real-time
83 | database schema. This accelerates the development cycle by ensuring the
84 | generated code is directly usable.
85 | - **Slash Development Overhead**: Radically reduce the time spent on manual
86 | setup and boilerplate. MCP Toolbox helps streamline lengthy database
87 | configurations, repetitive code, and error-prone schema migrations.
88 |
89 | Learn [how to connect your AI tools (IDEs) to Toolbox using MCP][connect-ide].
90 |
91 | [connect-ide]: https://googleapis.github.io/genai-toolbox/how-to/connect-ide/
92 |
93 | ## General Architecture
94 |
95 | Toolbox sits between your application's orchestration framework and your
96 | database, providing a control plane that is used to modify, distribute, or
97 | invoke tools. It simplifies the management of your tools by providing you with a
98 | centralized location to store and update tools, allowing you to share tools
99 | between agents and applications and update those tools without necessarily
100 | redeploying your application.
101 |
102 | <p align="center">
103 | <img src="./docs/en/getting-started/introduction/architecture.png" alt="architecture" width="50%"/>
104 | </p>
105 |
106 | ## Getting Started
107 |
108 | ### (Non-production) Running Toolbox
109 |
110 | You can run Toolbox directly with a [configuration file](#configuration):
111 |
112 | ```sh
113 | npx @toolbox-sdk/server --tools-file tools.yaml
114 | ```
115 |
116 | This runs the latest version of the toolbox server with your configuration file.
117 |
118 | > [!NOTE]
119 | > This method should only be used for non-production use cases such as
120 | > experimentation. For any production use-cases, please consider [Installing the
121 | > server](#installing-the-server) and then [running it](#running-the-server).
122 |
123 | ### Installing the server
124 |
125 | For the latest version, check the [releases page][releases] and use the
126 | following instructions for your OS and CPU architecture.
127 |
128 | [releases]: https://github.com/googleapis/genai-toolbox/releases
129 |
130 | <details open>
131 | <summary>Binary</summary>
132 |
133 | To install Toolbox as a binary:
134 |
135 | <!-- {x-release-please-start-version} -->
136 | > <details>
137 | > <summary>Linux (AMD64)</summary>
138 | >
139 | > To install Toolbox as a binary on Linux (AMD64):
140 | >
141 | > ```sh
142 | > # see releases page for other versions
143 | > export VERSION=0.25.0
144 | > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
145 | > chmod +x toolbox
146 | > ```
147 | >
148 | > </details>
149 | > <details>
150 | > <summary>macOS (Apple Silicon)</summary>
151 | >
152 | > To install Toolbox as a binary on macOS (Apple Silicon):
153 | >
154 | > ```sh
155 | > # see releases page for other versions
156 | > export VERSION=0.25.0
157 | > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox
158 | > chmod +x toolbox
159 | > ```
160 | >
161 | > </details>
162 | > <details>
163 | > <summary>macOS (Intel)</summary>
164 | >
165 | > To install Toolbox as a binary on macOS (Intel):
166 | >
167 | > ```sh
168 | > # see releases page for other versions
169 | > export VERSION=0.25.0
170 | > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox
171 | > chmod +x toolbox
172 | > ```
173 | >
174 | > </details>
175 | > <details>
176 | > <summary>Windows (Command Prompt)</summary>
177 | >
178 | > To install Toolbox as a binary on Windows (Command Prompt):
179 | >
180 | > ```cmd
181 | > :: see releases page for other versions
182 | > set VERSION=0.25.0
183 | > curl -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v%VERSION%/windows/amd64/toolbox.exe"
184 | > ```
185 | >
186 | > </details>
187 | > <details>
188 | > <summary>Windows (PowerShell)</summary>
189 | >
190 | > To install Toolbox as a binary on Windows (PowerShell):
191 | >
192 | > ```powershell
193 | > # see releases page for other versions
194 | > $VERSION = "0.25.0"
195 | > curl.exe -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe"
196 | > ```
197 | >
198 | > </details>
199 | </details>
200 |
201 | <details>
202 | <summary>Container image</summary>
203 | You can also install Toolbox as a container:
204 |
205 | ```sh
206 | # see releases page for other versions
207 | export VERSION=0.25.0
208 | docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
209 | ```
210 |
211 | </details>
212 |
213 | <details>
214 | <summary>Homebrew</summary>
215 |
216 | To install Toolbox using Homebrew on macOS or Linux:
217 |
218 | ```sh
219 | brew install mcp-toolbox
220 | ```
221 |
222 | </details>
223 |
224 | <details>
225 | <summary>Compile from source</summary>
226 |
227 | To install from source, ensure you have the latest version of
228 | [Go installed](https://go.dev/doc/install), and then run the following command:
229 |
230 | ```sh
231 | go install github.com/googleapis/[email protected]
232 | ```
233 | <!-- {x-release-please-end} -->
234 |
235 | </details>
236 |
237 | <details>
238 | <summary>Gemini CLI Extensions</summary>
239 |
240 | To install Gemini CLI Extensions for MCP Toolbox, run the following command:
241 |
242 | ```sh
243 | gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox
244 | ```
245 |
246 | </details>
247 |
248 | ### Running the server
249 |
250 | [Configure](#configuration) a `tools.yaml` to define your tools, and then
251 | execute `toolbox` to start the server:
252 |
253 | <details open>
254 | <summary>Binary</summary>
255 |
256 | To run Toolbox from binary:
257 |
258 | ```sh
259 | ./toolbox --tools-file "tools.yaml"
260 | ```
261 |
262 | > ⓘ Note
263 | > Toolbox enables dynamic reloading by default. To disable, use the
264 | > `--disable-reload` flag.
265 |
266 | </details>
267 |
268 | <details>
269 |
270 | <summary>Container image</summary>
271 |
272 | To run the server after pulling the [container image](#installing-the-server):
273 |
274 | ```sh
275 | export VERSION=0.24.0 # Use the version you pulled
276 | docker run -p 5000:5000 \
277 | -v $(pwd)/tools.yaml:/app/tools.yaml \
278 | us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION \
279 | --tools-file "/app/tools.yaml"
280 | ```
281 |
282 | > ⓘ Note
283 | > The `-v` flag mounts your local `tools.yaml` into the container, and `-p` maps
284 | > the container's port `5000` to your host's port `5000`.
285 |
286 | </details>
287 |
288 | <details>
289 |
290 | <summary>Source</summary>
291 |
292 | To run the server directly from source, navigate to the project root directory
293 | and run:
294 |
295 | ```sh
296 | go run .
297 | ```
298 |
299 | > ⓘ Note
300 | > This command runs the project from source, and is more suitable for development
301 | > and testing. It does **not** compile a binary into your `$GOPATH`. If you want
302 | > to compile a binary instead, refer the [Developer
303 | > Documentation](./DEVELOPER.md#building-the-binary).
304 |
305 | </details>
306 |
307 | <details>
308 |
309 | <summary>Homebrew</summary>
310 |
311 | If you installed Toolbox using [Homebrew](https://brew.sh/), the `toolbox`
312 | binary is available in your system path. You can start the server with the same
313 | command:
314 |
315 | ```sh
316 | toolbox --tools-file "tools.yaml"
317 | ```
318 |
319 | </details>
320 |
321 | <details>
322 | <summary>NPM</summary>
323 |
324 | To run Toolbox directly without manually downloading the binary (requires Node.js):
325 | ```sh
326 | npx @toolbox-sdk/server --tools-file tools.yaml
327 | ```
328 |
329 | </details>
330 |
331 | <details>
332 |
333 | <summary>Gemini CLI</summary>
334 |
335 | Interact with your custom tools using natural language. Check
336 | [gemini-cli-extensions/mcp-toolbox](https://github.com/gemini-cli-extensions/mcp-toolbox)
337 | for more information.
338 |
339 | </details>
340 |
341 | You can use `toolbox help` for a full list of flags! To stop the server, send a
342 | terminate signal (`ctrl+c` on most platforms).
343 |
344 | For more detailed documentation on deploying to different environments, check
345 | out the resources in the [How-to
346 | section](https://googleapis.github.io/genai-toolbox/how-to/)
347 |
348 | ### Integrating your application
349 |
350 | Once your server is up and running, you can load the tools into your
351 | application. See below the list of Client SDKs for using various frameworks:
352 |
353 | <details open>
354 | <summary>Python (<a href="https://github.com/googleapis/mcp-toolbox-sdk-python">Github</a>)</summary>
355 | <br>
356 | <blockquote>
357 |
358 | <details open>
359 | <summary>Core</summary>
360 |
361 | 1. Install [Toolbox Core SDK][toolbox-core]:
362 |
363 | ```bash
364 | pip install toolbox-core
365 | ```
366 |
367 | 1. Load tools:
368 |
369 | ```python
370 | from toolbox_core import ToolboxClient
371 |
372 | # update the url to point to your server
373 | async with ToolboxClient("http://127.0.0.1:5000") as client:
374 |
375 | # these tools can be passed to your application!
376 | tools = await client.load_toolset("toolset_name")
377 | ```
378 |
379 | For more detailed instructions on using the Toolbox Core SDK, see the
380 | [project's README][toolbox-core-readme].
381 |
382 | [toolbox-core]: https://pypi.org/project/toolbox-core/
383 | [toolbox-core-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core/README.md
384 |
385 | </details>
386 | <details>
387 | <summary>LangChain / LangGraph</summary>
388 |
389 | 1. Install [Toolbox LangChain SDK][toolbox-langchain]:
390 |
391 | ```bash
392 | pip install toolbox-langchain
393 | ```
394 |
395 | 1. Load tools:
396 |
397 | ```python
398 | from toolbox_langchain import ToolboxClient
399 |
400 | # update the url to point to your server
401 | async with ToolboxClient("http://127.0.0.1:5000") as client:
402 |
403 | # these tools can be passed to your application!
404 | tools = client.load_toolset()
405 | ```
406 |
407 | For more detailed instructions on using the Toolbox LangChain SDK, see the
408 | [project's README][toolbox-langchain-readme].
409 |
410 | [toolbox-langchain]: https://pypi.org/project/toolbox-langchain/
411 | [toolbox-langchain-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/packages/toolbox-langchain/README.md
412 |
413 | </details>
414 | <details>
415 | <summary>LlamaIndex</summary>
416 |
417 | 1. Install [Toolbox Llamaindex SDK][toolbox-llamaindex]:
418 |
419 | ```bash
420 | pip install toolbox-llamaindex
421 | ```
422 |
423 | 1. Load tools:
424 |
425 | ```python
426 | from toolbox_llamaindex import ToolboxClient
427 |
428 | # update the url to point to your server
429 | async with ToolboxClient("http://127.0.0.1:5000") as client:
430 |
431 | # these tools can be passed to your application!
432 | tools = client.load_toolset()
433 | ```
434 |
435 | For more detailed instructions on using the Toolbox Llamaindex SDK, see the
436 | [project's README][toolbox-llamaindex-readme].
437 |
438 | [toolbox-llamaindex]: https://pypi.org/project/toolbox-llamaindex/
439 | [toolbox-llamaindex-readme]: https://github.com/googleapis/genai-toolbox-llamaindex-python/blob/main/README.md
440 |
441 | </details>
442 | </details>
443 | </blockquote>
444 | <details>
445 | <summary>Javascript/Typescript (<a href="https://github.com/googleapis/mcp-toolbox-sdk-js">Github</a>)</summary>
446 | <br>
447 | <blockquote>
448 |
449 | <details open>
450 | <summary>Core</summary>
451 |
452 | 1. Install [Toolbox Core SDK][toolbox-core-js]:
453 |
454 | ```bash
455 | npm install @toolbox-sdk/core
456 | ```
457 |
458 | 1. Load tools:
459 |
460 | ```javascript
461 | import { ToolboxClient } from '@toolbox-sdk/core';
462 |
463 | // update the url to point to your server
464 | const URL = 'http://127.0.0.1:5000';
465 | let client = new ToolboxClient(URL);
466 |
467 | // these tools can be passed to your application!
468 | const tools = await client.loadToolset('toolsetName');
469 | ```
470 |
471 | For more detailed instructions on using the Toolbox Core SDK, see the
472 | [project's README][toolbox-core-js-readme].
473 |
474 | [toolbox-core-js]: https://www.npmjs.com/package/@toolbox-sdk/core
475 | [toolbox-core-js-readme]: https://github.com/googleapis/mcp-toolbox-sdk-js/blob/main/packages/toolbox-core/README.md
476 |
477 | </details>
478 | <details>
479 | <summary>LangChain / LangGraph</summary>
480 |
481 | 1. Install [Toolbox Core SDK][toolbox-core-js]:
482 |
483 | ```bash
484 | npm install @toolbox-sdk/core
485 | ```
486 |
487 | 2. Load tools:
488 |
489 | ```javascript
490 | import { ToolboxClient } from '@toolbox-sdk/core';
491 |
492 | // update the url to point to your server
493 | const URL = 'http://127.0.0.1:5000';
494 | let client = new ToolboxClient(URL);
495 |
496 | // these tools can be passed to your application!
497 | const toolboxTools = await client.loadToolset('toolsetName');
498 |
499 | // Define the basics of the tool: name, description, schema and core logic
500 | const getTool = (toolboxTool) => tool(currTool, {
501 | name: toolboxTool.getName(),
502 | description: toolboxTool.getDescription(),
503 | schema: toolboxTool.getParamSchema()
504 | });
505 |
506 | // Use these tools in your Langchain/Langraph applications
507 | const tools = toolboxTools.map(getTool);
508 | ```
509 |
510 | </details>
511 | <details>
512 | <summary>Genkit</summary>
513 |
514 | 1. Install [Toolbox Core SDK][toolbox-core-js]:
515 |
516 | ```bash
517 | npm install @toolbox-sdk/core
518 | ```
519 |
520 | 2. Load tools:
521 |
522 | ```javascript
523 | import { ToolboxClient } from '@toolbox-sdk/core';
524 | import { genkit } from 'genkit';
525 |
526 | // Initialise genkit
527 | const ai = genkit({
528 | plugins: [
529 | googleAI({
530 | apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY
531 | })
532 | ],
533 | model: googleAI.model('gemini-2.0-flash'),
534 | });
535 |
536 | // update the url to point to your server
537 | const URL = 'http://127.0.0.1:5000';
538 | let client = new ToolboxClient(URL);
539 |
540 | // these tools can be passed to your application!
541 | const toolboxTools = await client.loadToolset('toolsetName');
542 |
543 | // Define the basics of the tool: name, description, schema and core logic
544 | const getTool = (toolboxTool) => ai.defineTool({
545 | name: toolboxTool.getName(),
546 | description: toolboxTool.getDescription(),
547 | schema: toolboxTool.getParamSchema()
548 | }, toolboxTool)
549 |
550 | // Use these tools in your Genkit applications
551 | const tools = toolboxTools.map(getTool);
552 | ```
553 |
554 | </details>
555 | <details>
556 | <summary>ADK</summary>
557 |
558 | 1. Install [Toolbox ADK SDK][toolbox-adk-js]:
559 |
560 | ```bash
561 | npm install @toolbox-sdk/adk
562 | ```
563 |
564 | 2. Load tools:
565 |
566 | ```javascript
567 | import { ToolboxClient } from '@toolbox-sdk/adk';
568 |
569 | // update the url to point to your server
570 | const URL = 'http://127.0.0.1:5000';
571 | let client = new ToolboxClient(URL);
572 |
573 | // these tools can be passed to your application!
574 | const tools = await client.loadToolset('toolsetName');
575 | ```
576 |
577 | For more detailed instructions on using the Toolbox ADK SDK, see the
578 | [project's README][toolbox-adk-js-readme].
579 |
580 | [toolbox-adk-js]: https://www.npmjs.com/package/@toolbox-sdk/adk
581 | [toolbox-adk-js-readme]:
582 | https://github.com/googleapis/mcp-toolbox-sdk-js/blob/main/packages/toolbox-adk/README.md
583 |
584 | </details>
585 | </details>
586 | </blockquote>
587 | <details>
588 | <summary>Go (<a href="https://github.com/googleapis/mcp-toolbox-sdk-go">Github</a>)</summary>
589 | <br>
590 | <blockquote>
591 |
592 | <details>
593 | <summary>Core</summary>
594 |
595 | 1. Install [Toolbox Go SDK][toolbox-go]:
596 |
597 | ```bash
598 | go get github.com/googleapis/mcp-toolbox-sdk-go
599 | ```
600 |
601 | 2. Load tools:
602 |
603 | ```go
604 | package main
605 |
606 | import (
607 | "github.com/googleapis/mcp-toolbox-sdk-go/core"
608 | "context"
609 | )
610 |
611 | func main() {
612 | // Make sure to add the error checks
613 | // update the url to point to your server
614 | URL := "http://127.0.0.1:5000";
615 | ctx := context.Background()
616 |
617 | client, err := core.NewToolboxClient(URL)
618 |
619 | // Framework agnostic tools
620 | tools, err := client.LoadToolset("toolsetName", ctx)
621 | }
622 | ```
623 |
624 | For more detailed instructions on using the Toolbox Go SDK, see the
625 | [project's README][toolbox-core-go-readme].
626 |
627 | [toolbox-go]: https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core
628 | [toolbox-core-go-readme]: https://github.com/googleapis/mcp-toolbox-sdk-go/blob/main/core/README.md
629 |
630 | </details>
631 | <details>
632 | <summary>LangChain Go</summary>
633 |
634 | 1. Install [Toolbox Go SDK][toolbox-go]:
635 |
636 | ```bash
637 | go get github.com/googleapis/mcp-toolbox-sdk-go
638 | ```
639 |
640 | 2. Load tools:
641 |
642 | ```go
643 | package main
644 |
645 | import (
646 | "context"
647 | "encoding/json"
648 |
649 | "github.com/googleapis/mcp-toolbox-sdk-go/core"
650 | "github.com/tmc/langchaingo/llms"
651 | )
652 |
653 | func main() {
654 | // Make sure to add the error checks
655 | // update the url to point to your server
656 | URL := "http://127.0.0.1:5000"
657 | ctx := context.Background()
658 |
659 | client, err := core.NewToolboxClient(URL)
660 |
661 | // Framework agnostic tool
662 | tool, err := client.LoadTool("toolName", ctx)
663 |
664 | // Fetch the tool's input schema
665 | inputschema, err := tool.InputSchema()
666 |
667 | var paramsSchema map[string]any
668 | _ = json.Unmarshal(inputschema, ¶msSchema)
669 |
670 | // Use this tool with LangChainGo
671 | langChainTool := llms.Tool{
672 | Type: "function",
673 | Function: &llms.FunctionDefinition{
674 | Name: tool.Name(),
675 | Description: tool.Description(),
676 | Parameters: paramsSchema,
677 | },
678 | }
679 | }
680 |
681 | ```
682 |
683 | </details>
684 | <details>
685 | <summary>Genkit</summary>
686 |
687 | 1. Install [Toolbox Go SDK][toolbox-go]:
688 |
689 | ```bash
690 | go get github.com/googleapis/mcp-toolbox-sdk-go
691 | ```
692 |
693 | 2. Load tools:
694 |
695 | ```go
696 | package main
697 | import (
698 | "context"
699 | "log"
700 |
701 | "github.com/firebase/genkit/go/genkit"
702 | "github.com/googleapis/mcp-toolbox-sdk-go/core"
703 | "github.com/googleapis/mcp-toolbox-sdk-go/tbgenkit"
704 | )
705 |
706 | func main() {
707 | // Make sure to add the error checks
708 | // Update the url to point to your server
709 | URL := "http://127.0.0.1:5000"
710 | ctx := context.Background()
711 | g := genkit.Init(ctx)
712 |
713 | client, err := core.NewToolboxClient(URL)
714 |
715 | // Framework agnostic tool
716 | tool, err := client.LoadTool("toolName", ctx)
717 |
718 | // Convert the tool using the tbgenkit package
719 | // Use this tool with Genkit Go
720 | genkitTool, err := tbgenkit.ToGenkitTool(tool, g)
721 | if err != nil {
722 | log.Fatalf("Failed to convert tool: %v\n", err)
723 | }
724 | log.Printf("Successfully converted tool: %s", genkitTool.Name())
725 | }
726 | ```
727 |
728 | </details>
729 | <details>
730 | <summary>Go GenAI</summary>
731 |
732 | 1. Install [Toolbox Go SDK][toolbox-go]:
733 |
734 | ```bash
735 | go get github.com/googleapis/mcp-toolbox-sdk-go
736 | ```
737 |
738 | 2. Load tools:
739 |
740 | ```go
741 | package main
742 |
743 | import (
744 | "context"
745 | "encoding/json"
746 |
747 | "github.com/googleapis/mcp-toolbox-sdk-go/core"
748 | "google.golang.org/genai"
749 | )
750 |
751 | func main() {
752 | // Make sure to add the error checks
753 | // Update the url to point to your server
754 | URL := "http://127.0.0.1:5000"
755 | ctx := context.Background()
756 |
757 | client, err := core.NewToolboxClient(URL)
758 |
759 | // Framework agnostic tool
760 | tool, err := client.LoadTool("toolName", ctx)
761 |
762 | // Fetch the tool's input schema
763 | inputschema, err := tool.InputSchema()
764 |
765 | var schema *genai.Schema
766 | _ = json.Unmarshal(inputschema, &schema)
767 |
768 | funcDeclaration := &genai.FunctionDeclaration{
769 | Name: tool.Name(),
770 | Description: tool.Description(),
771 | Parameters: schema,
772 | }
773 |
774 | // Use this tool with Go GenAI
775 | genAITool := &genai.Tool{
776 | FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration},
777 | }
778 | }
779 | ```
780 |
781 | </details>
782 | <details>
783 | <summary>OpenAI Go</summary>
784 |
785 | 1. Install [Toolbox Go SDK][toolbox-go]:
786 |
787 | ```bash
788 | go get github.com/googleapis/mcp-toolbox-sdk-go
789 | ```
790 |
791 | 2. Load tools:
792 |
793 | ```go
794 | package main
795 |
796 | import (
797 | "context"
798 | "encoding/json"
799 |
800 | "github.com/googleapis/mcp-toolbox-sdk-go/core"
801 | openai "github.com/openai/openai-go"
802 | )
803 |
804 | func main() {
805 | // Make sure to add the error checks
806 | // Update the url to point to your server
807 | URL := "http://127.0.0.1:5000"
808 | ctx := context.Background()
809 |
810 | client, err := core.NewToolboxClient(URL)
811 |
812 | // Framework agnostic tool
813 | tool, err := client.LoadTool("toolName", ctx)
814 |
815 | // Fetch the tool's input schema
816 | inputschema, err := tool.InputSchema()
817 |
818 | var paramsSchema openai.FunctionParameters
819 | _ = json.Unmarshal(inputschema, ¶msSchema)
820 |
821 | // Use this tool with OpenAI Go
822 | openAITool := openai.ChatCompletionToolParam{
823 | Function: openai.FunctionDefinitionParam{
824 | Name: tool.Name(),
825 | Description: openai.String(tool.Description()),
826 | Parameters: paramsSchema,
827 | },
828 | }
829 |
830 | }
831 | ```
832 |
833 | </details>
834 | <details open>
835 | <summary>ADK Go</summary>
836 |
837 | 1. Install [Toolbox Go SDK][toolbox-go]:
838 |
839 | ```bash
840 | go get github.com/googleapis/mcp-toolbox-sdk-go
841 | ```
842 |
843 | 1. Load tools:
844 |
845 | ```go
846 | package main
847 |
848 | import (
849 | "github.com/googleapis/mcp-toolbox-sdk-go/tbadk"
850 | "context"
851 | )
852 |
853 | func main() {
854 | // Make sure to add the error checks
855 | // Update the url to point to your server
856 | URL := "http://127.0.0.1:5000"
857 | ctx := context.Background()
858 | client, err := tbadk.NewToolboxClient(URL)
859 | if err != nil {
860 | return fmt.Sprintln("Could not start Toolbox Client", err)
861 | }
862 |
863 | // Use this tool with ADK Go
864 | tool, err := client.LoadTool("toolName", ctx)
865 | if err != nil {
866 | return fmt.Sprintln("Could not load Toolbox Tool", err)
867 | }
868 | }
869 | ```
870 |
871 | For more detailed instructions on using the Toolbox Go SDK, see the
872 | [project's README][toolbox-core-go-readme].
873 |
874 |
875 | </details>
876 | </details>
877 | </blockquote>
878 | </details>
879 |
880 | ### Using Toolbox with Gemini CLI Extensions
881 |
882 | [Gemini CLI extensions][gemini-cli-extensions] provide tools to interact
883 | directly with your data sources from command line. Below is a list of Gemini CLI
884 | extensions that are built on top of **Toolbox**. They allow you to interact with
885 | your data sources through pre-defined or custom tools with natural language.
886 | Click into the link to see detailed instructions on their usage.
887 |
888 | To use **custom** tools with Gemini CLI:
889 |
890 | - [MCP Toolbox](https://github.com/gemini-cli-extensions/mcp-toolbox)
891 |
892 | To use [prebuilt tools][prebuilt] with Gemini CLI:
893 |
894 | - [AlloyDB for PostgreSQL](https://github.com/gemini-cli-extensions/alloydb)
895 | - [AlloyDB for PostgreSQL
896 | Observability](https://github.com/gemini-cli-extensions/alloydb-observability)
897 | - [BigQuery Data
898 | Analytics](https://github.com/gemini-cli-extensions/bigquery-data-analytics)
899 | - [BigQuery Conversational
900 | Analytics](https://github.com/gemini-cli-extensions/bigquery-conversational-analytics)
901 | - [Cloud SQL for
902 | MySQL](https://github.com/gemini-cli-extensions/cloud-sql-mysql)
903 | - [Cloud SQL for MySQL
904 | Observability](https://github.com/gemini-cli-extensions/cloud-sql-mysql-observability)
905 | - [Cloud SQL for
906 | PostgreSQL](https://github.com/gemini-cli-extensions/cloud-sql-postgresql)
907 | - [Cloud SQL for PostgreSQL
908 | Observability](https://github.com/gemini-cli-extensions/cloud-sql-postgresql-observability)
909 | - [Cloud SQL for SQL
910 | Server](https://github.com/gemini-cli-extensions/cloud-sql-sqlserver)
911 | - [Cloud SQL for SQL Server
912 | Observability](https://github.com/gemini-cli-extensions/cloud-sql-sqlserver-observability)
913 | - [Looker](https://github.com/gemini-cli-extensions/looker)
914 | - [Dataplex](https://github.com/gemini-cli-extensions/dataplex)
915 | - [MySQL](https://github.com/gemini-cli-extensions/mysql)
916 | - [PostgreSQL](https://github.com/gemini-cli-extensions/postgres)
917 | - [Spanner](https://github.com/gemini-cli-extensions/spanner)
918 | - [Firestore](https://github.com/gemini-cli-extensions/firestore-native)
919 | - [SQL Server](https://github.com/gemini-cli-extensions/sql-server)
920 |
921 | [prebuilt]: https://googleapis.github.io/genai-toolbox/reference/prebuilt-tools/
922 | [gemini-cli-extensions]:
923 | https://github.com/google-gemini/gemini-cli/blob/main/docs/extensions/index.md
924 |
925 | ## Configuration
926 |
927 | The primary way to configure Toolbox is through the `tools.yaml` file. If you
928 | have multiple files, you can tell toolbox which to load with the `--tools-file
929 | tools.yaml` flag.
930 |
931 | You can find more detailed reference documentation to all resource types in the
932 | [Resources](https://googleapis.github.io/genai-toolbox/resources/).
933 |
934 | ### Sources
935 |
936 | The `sources` section of your `tools.yaml` defines what data sources your
937 | Toolbox should have access to. Most tools will have at least one source to
938 | execute against.
939 |
940 | ```yaml
941 | sources:
942 | my-pg-source:
943 | kind: postgres
944 | host: 127.0.0.1
945 | port: 5432
946 | database: toolbox_db
947 | user: toolbox_user
948 | password: my-password
949 | ```
950 |
951 | For more details on configuring different types of sources, see the
952 | [Sources](https://googleapis.github.io/genai-toolbox/resources/sources).
953 |
954 | ### Tools
955 |
956 | The `tools` section of a `tools.yaml` define the actions an agent can take: what
957 | kind of tool it is, which source(s) it affects, what parameters it uses, etc.
958 |
959 | ```yaml
960 | tools:
961 | search-hotels-by-name:
962 | kind: postgres-sql
963 | source: my-pg-source
964 | description: Search for hotels based on name.
965 | parameters:
966 | - name: name
967 | type: string
968 | description: The name of the hotel.
969 | statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
970 | ```
971 |
972 | For more details on configuring different types of tools, see the
973 | [Tools](https://googleapis.github.io/genai-toolbox/resources/tools).
974 |
975 | ### Toolsets
976 |
977 | The `toolsets` section of your `tools.yaml` allows you to define groups of tools
978 | that you want to be able to load together. This can be useful for defining
979 | different groups based on agent or application.
980 |
981 | ```yaml
982 | toolsets:
983 | my_first_toolset:
984 | - my_first_tool
985 | - my_second_tool
986 | my_second_toolset:
987 | - my_second_tool
988 | - my_third_tool
989 | ```
990 |
991 | You can load toolsets by name:
992 |
993 | ```python
994 | # This will load all tools
995 | all_tools = client.load_toolset()
996 |
997 | # This will only load the tools listed in 'my_second_toolset'
998 | my_second_toolset = client.load_toolset("my_second_toolset")
999 | ```
1000 |
1001 | ### Prompts
1002 |
1003 | The `prompts` section of a `tools.yaml` defines prompts that can be used for
1004 | interactions with LLMs.
1005 |
1006 | ```yaml
1007 | prompts:
1008 | code_review:
1009 | description: "Asks the LLM to analyze code quality and suggest improvements."
1010 | messages:
1011 | - content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}"
1012 | arguments:
1013 | - name: "code"
1014 | description: "The code to review"
1015 | ```
1016 |
1017 | For more details on configuring prompts, see the
1018 | [Prompts](https://googleapis.github.io/genai-toolbox/resources/prompts).
1019 |
1020 | ## Versioning
1021 |
1022 | This project uses [semantic versioning](https://semver.org/) (`MAJOR.MINOR.PATCH`).
1023 | Since the project is in a pre-release stage (version `0.x.y`), we follow the
1024 | standard conventions for initial development:
1025 |
1026 | ### Pre-1.0.0 Versioning
1027 |
1028 | While the major version is `0`, the public API should be considered unstable.
1029 | The version will be incremented as follows:
1030 |
1031 | - **`0.MINOR.PATCH`**: The **MINOR** version is incremented when we add
1032 | new functionality or make breaking, incompatible API changes.
1033 | - **`0.MINOR.PATCH`**: The **PATCH** version is incremented for
1034 | backward-compatible bug fixes.
1035 |
1036 | ### Post-1.0.0 Versioning
1037 |
1038 | Once the project reaches a stable `1.0.0` release, the version number
1039 | **`MAJOR.MINOR.PATCH`** will follow the more common convention:
1040 |
1041 | - **`MAJOR`**: Incremented for incompatible API changes.
1042 | - **`MINOR`**: Incremented for new, backward-compatible functionality.
1043 | - **`PATCH`**: Incremented for backward-compatible bug fixes.
1044 |
1045 | The public API that this applies to is the CLI associated with Toolbox, the
1046 | interactions with official SDKs, and the definitions in the `tools.yaml` file.
1047 |
1048 | ## Contributing
1049 |
1050 | Contributions are welcome. Please, see the [CONTRIBUTING](CONTRIBUTING.md)
1051 | to get started.
1052 |
1053 | Please note that this project is released with a Contributor Code of Conduct.
1054 | By participating in this project you agree to abide by its terms. See
1055 | [Contributor Code of Conduct](CODE_OF_CONDUCT.md) for more information.
1056 |
1057 | ## Community
1058 |
1059 | Join our [discord community](https://discord.gg/GQrFB3Ec3W) to connect with our developers!
1060 |
```
--------------------------------------------------------------------------------
/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 | ### Automated Code Reviews
52 |
53 | This repository uses **Gemini Code Assist** to provide automated code reviews on Pull Requests. While this does not replace human review, it provides immediate feedback on code quality and potential issues.
54 |
55 | You can manually trigger the bot by commenting on your Pull Request:
56 |
57 | * `/gemini`: Manually invokes Gemini Code Assist in comments
58 | * `/gemini review`: Posts a code review of the changes in the pull request
59 | * `/gemini summary`: Posts a summary of the changes in the pull request.
60 | * `/gemini help`: Overview of the available commands
61 |
62 | ## Adding a New Database Source or Tool
63 |
64 | Please create an
65 | [issue](https://github.com/googleapis/genai-toolbox/issues) before
66 | implementation to ensure we can accept the contribution and no duplicated work.
67 | This issue should include an overview of the API design. If you have any
68 | questions, reach out on our [Discord](https://discord.gg/Dmm69peqjh) to chat
69 | directly with the team.
70 |
71 | > [!NOTE]
72 | > New tools can be added for [pre-existing data
73 | > sources](https://github.com/googleapis/genai-toolbox/tree/main/internal/sources).
74 | > However, any new database source should also include at least one new tool
75 | > type.
76 |
77 | ### Adding a New Database Source
78 |
79 | We recommend looking at an [example source
80 | implementation](https://github.com/googleapis/genai-toolbox/blob/main/internal/sources/postgres/postgres.go).
81 |
82 | * **Create a new directory** under `internal/sources` for your database type
83 | (e.g., `internal/sources/newdb`).
84 | * **Define a configuration struct** for your data source in a file named
85 | `newdb.go`. Create a `Config` struct to include all the necessary parameters
86 | for connecting to the database (e.g., host, port, username, password, database
87 | name) and a `Source` struct to store necessary parameters for tools (e.g.,
88 | Name, Kind, connection object, additional config).
89 | * **Implement the
90 | [`SourceConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L57)
91 | interface**. This interface requires two methods:
92 | * `SourceConfigKind() string`: Returns a unique string identifier for your
93 | data source (e.g., `"newdb"`).
94 | * `Initialize(ctx context.Context, tracer trace.Tracer) (Source, error)`:
95 | Creates a new instance of your data source and establishes a connection to
96 | the database.
97 | * **Implement the
98 | [`Source`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L63)
99 | interface**. This interface requires one method:
100 | * `SourceKind() string`: Returns the same string identifier as `SourceConfigKind()`.
101 | * **Implement `init()`** to register the new Source.
102 | * **Implement Unit Tests** in a file named `newdb_test.go`.
103 |
104 | ### Adding a New Tool
105 |
106 | > [!NOTE]
107 | > Please follow the tool naming convention detailed
108 | > [here](./DEVELOPER.md#tool-naming-conventions).
109 |
110 | We recommend looking at an [example tool
111 | implementation](https://github.com/googleapis/genai-toolbox/tree/main/internal/tools/postgres/postgressql).
112 |
113 | * **Create a new directory** under `internal/tools` for your tool type (e.g., `internal/tools/newdb/newdbtool`).
114 | * **Define a configuration struct** for your tool in a file named `newdbtool.go`.
115 | Create a `Config` struct and a `Tool` struct to store necessary parameters for
116 | tools.
117 | * **Implement the
118 | [`ToolConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/tools/tools.go#L61)
119 | interface**. This interface requires one method:
120 | * `ToolConfigKind() string`: Returns a unique string identifier for your tool
121 | (e.g., `"newdb-tool"`).
122 | * `Initialize(sources map[string]Source) (Tool, error)`: Creates a new
123 | instance of your tool and validates that it can connect to the specified
124 | data source.
125 | * **Implement the `Tool` interface**. This interface requires the following
126 | methods:
127 | * `Invoke(ctx context.Context, params map[string]any) ([]any, error)`:
128 | Executes the operation on the database using the provided parameters.
129 | * `ParseParams(data map[string]any, claims map[string]map[string]any)
130 | (ParamValues, error)`: Parses and validates the input parameters.
131 | * `Manifest() Manifest`: Returns a manifest describing the tool's capabilities
132 | and parameters.
133 | * `McpManifest() McpManifest`: Returns an MCP manifest describing the tool for
134 | use with the Model Context Protocol.
135 | * `Authorized(services []string) bool`: Checks if the tool is authorized to
136 | run based on the provided authentication services.
137 | * **Implement `init()`** to register the new Tool.
138 | * **Implement Unit Tests** in a file named `newdbtool_test.go`.
139 |
140 | ### Adding Integration Tests
141 |
142 | * **Add a test file** under a new directory `tests/newdb`.
143 | * **Add pre-defined integration test suites** in the
144 | `/tests/newdb/newdb_integration_test.go` that are **required** to be run as
145 | long as your code contains related features. Please check each test suites for
146 | the config defaults, if your source require test suites config updates, please
147 | refer to [config option](./tests/option.go):
148 |
149 | 1. [RunToolGetTest][tool-get]: tests for the `GET` endpoint that returns the
150 | tool's manifest.
151 |
152 | 2. [RunToolInvokeTest][tool-call]: tests for tool calling through the native
153 | Toolbox endpoints.
154 |
155 | 3. [RunMCPToolCallMethod][mcp-call]: tests tool calling through the MCP
156 | endpoints.
157 |
158 | 4. (Optional) [RunExecuteSqlToolInvokeTest][execute-sql]: tests an
159 | `execute-sql` tool for any source. Only run this test if you are adding an
160 | `execute-sql` tool.
161 |
162 | 5. (Optional) [RunToolInvokeWithTemplateParameters][temp-param]: tests for [template
163 | parameters][temp-param-doc]. Only run this test if template
164 | parameters apply to your tool.
165 |
166 | * **Add the new database to the integration test workflow** in
167 | [integration.cloudbuild.yaml](.ci/integration.cloudbuild.yaml).
168 |
169 | [tool-get]:
170 | https://github.com/googleapis/genai-toolbox/blob/v0.23.0/tests/tool.go#L41
171 | [tool-call]:
172 | https://github.com/googleapis/genai-toolbox/blob/v0.23.0/tests/tool.go#L229
173 | [mcp-call]:
174 | https://github.com/googleapis/genai-toolbox/blob/v0.23.0/tests/tool.go#L789
175 | [execute-sql]:
176 | https://github.com/googleapis/genai-toolbox/blob/v0.23.0/tests/tool.go#L609
177 | [temp-param]:
178 | https://github.com/googleapis/genai-toolbox/blob/v0.23.0/tests/tool.go#L454
179 | [temp-param-doc]:
180 | https://googleapis.github.io/genai-toolbox/resources/tools/#template-parameters
181 |
182 | ### Adding Documentation
183 |
184 | * **Update the documentation** to include information about your new data source
185 | and tool. This includes:
186 | * Adding a new page to the `docs/en/resources/sources` directory for your data
187 | source.
188 | * Adding a new page to the `docs/en/resources/tools` directory for your tool.
189 |
190 | * **(Optional) Add samples** to the `docs/en/samples/<newdb>` directory.
191 |
192 | ### (Optional) Adding Prebuilt Tools
193 |
194 | You can provide developers with a set of "build-time" tools to aid common
195 | software development user journeys like viewing and creating tables/collections
196 | and data.
197 |
198 | * **Create a set of prebuilt tools** by defining a new `tools.yaml` and adding
199 | it to `internal/tools`. Make sure the file name matches the source (i.e. for
200 | source "alloydb-postgres" create a file named "alloydb-postgres.yaml").
201 | * **Update `cmd/root.go`** to add new source to the `prebuilt` flag.
202 | * **Add tests** in
203 | [internal/prebuiltconfigs/prebuiltconfigs_test.go](internal/prebuiltconfigs/prebuiltconfigs_test.go)
204 | and [cmd/root_test.go](cmd/root_test.go).
205 |
206 | ## Submitting a Pull Request
207 |
208 | Submit a pull request to the repository with your changes. Be sure to include a
209 | detailed description of your changes and any requests for long term testing
210 | resources.
211 |
212 | * **Title:** All pull request title should follow the formatting of
213 | [Conventional
214 | Commit](https://www.conventionalcommits.org/) guidelines: `<type>[optional
215 | scope]: description`. For example, if you are adding a new field in postgres
216 | source, the title should be `feat(source/postgres): add support for
217 | "new-field" field in postgres source`.
218 |
219 | Here are some commonly used `type` in this GitHub repo.
220 |
221 | | **type** | **description** |
222 | |-----------------|-------------------------------------------------------------------------------------------------------|
223 | | Breaking Change | Anything with this type of a `!` after the type/scope introduces a breaking change. |
224 | | feat | Adding a new feature to the codebase. |
225 | | fix | Fixing a bug or typo in the codebase. This does not include fixing docs. |
226 | | test | Changes made to test files. |
227 | | ci | Changes made to the cicd configuration files or scripts. |
228 | | docs | Documentation-related PRs, including fixes on docs. |
229 | | chore | Other small tasks or updates that don't fall into any of the above types. |
230 | | refactor | Change src code but unlike feat, there are no tests broke and no line lost coverage. |
231 | | revert | Revert changes made in another commit. |
232 | | style | Update src code, with only formatting and whitespace updates (e.g. code formatter or linter changes). |
233 |
234 | Pull requests should always add scope whenever possible. The scope is
235 | formatted as `<scope-type>/<scope-kind>` (e.g., `sources/postgres`, or
236 | `tools/mssql-sql`).
237 |
238 | Ideally, **each PR covers only one scope**, if this is
239 | inevitable, multiple scopes can be seaparated with a comma (e.g.
240 | `sources/postgres,sources/alloydbpg`). If the PR covers multiple `scope-type`
241 | (such as adding a new database), you can disregard the `scope-type`, e.g.
242 | `feat(new-db): adding support for new-db source and tool`.
243 |
244 | * **PR Description:** PR description should **always** be included. It should
245 | include a concise description of the changes, it's impact, along with a
246 | summary of the solution. If the PR is related to a specific issue, the issue
247 | number should be mentioned in the PR description (e.g. `Fixes #1`).
```
--------------------------------------------------------------------------------
/cmd/version.txt:
--------------------------------------------------------------------------------
```
1 | 0.25.0
2 |
```
--------------------------------------------------------------------------------
/.github/label-sync.yml:
--------------------------------------------------------------------------------
```yaml
1 | ---
2 | ignored: true
3 |
```
--------------------------------------------------------------------------------
/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.21.0
2 | toolbox-core==0.5.4
3 | pytest==9.0.2
```
--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/core/requirements.txt:
--------------------------------------------------------------------------------
```
1 | google-genai==1.57.0
2 | toolbox-core==0.5.4
3 | pytest==9.0.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/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/getting-started/quickstart/python/llamaindex/requirements.txt:
--------------------------------------------------------------------------------
```
1 | llama-index==0.14.12
2 | llama-index-llms-google-genai==0.8.3
3 | toolbox-llamaindex==0.5.4
4 | pytest==9.0.2
5 |
```
--------------------------------------------------------------------------------
/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/snowflake/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "Snowflake"
3 | type: docs
4 | weight: 1
5 | description: >
6 | Tools that work with Snowflake Sources.
7 | ---
```
--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/langchain/requirements.txt:
--------------------------------------------------------------------------------
```
1 | langchain==1.2.2
2 | langchain-google-vertexai==3.2.1
3 | langgraph==1.0.5
4 | toolbox-langchain==0.5.4
5 | pytest==9.0.2
6 |
```
--------------------------------------------------------------------------------
/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/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/resources/tools/singlestore/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "SingleStore"
3 | type: docs
4 | weight: 1
5 | description: >
6 | Tools that work with SingleStore Sources
7 | ---
8 |
```
--------------------------------------------------------------------------------
/docs/en/resources/tools/cloudgda/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "Gemini Data Analytics"
3 | type: docs
4 | weight: 1
5 | description: >
6 | Tools for Gemini Data Analytics.
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 |
```
--------------------------------------------------------------------------------
/docs/en/resources/tools/elasticsearch/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "Elasticsearch"
3 | type: docs
4 | weight: 1
5 | description: >
6 | Tools that work with Elasticsearch Sources.
7 | ---
8 |
```
--------------------------------------------------------------------------------
/.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/resources/tools/cloudhealthcare/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "Cloud Healthcare API"
3 | linkTitle: "Cloud Healthcare"
4 | type: docs
5 | weight: 1
6 | description: >
7 | Tools that work with Cloud Healthcare Sources.
8 | ---
```
--------------------------------------------------------------------------------
/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 |
```
--------------------------------------------------------------------------------
/.hugo/assets/scss/_styles_project.scss:
--------------------------------------------------------------------------------
```scss
1 | @import 'td/code-dark';
2 |
3 | // Make tabs scrollable horizontally instead of wrapping
4 | .nav-tabs {
5 | flex-wrap: nowrap;
6 | white-space: nowrap;
7 | overflow-x: auto;
8 | overflow-y: hidden;
9 | }
```
--------------------------------------------------------------------------------
/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 |
```
--------------------------------------------------------------------------------
/gemini-extension.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "name": "mcp-toolbox-for-databases",
3 | "version": "0.25.0",
4 | "description": "MCP Toolbox for Databases is an open-source MCP server for more than 30 different datasources.",
5 | "contextFileName": "MCP-TOOLBOX-EXTENSION.md"
6 | }
```
--------------------------------------------------------------------------------
/.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 |
```
--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/js/adk/package.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "name": "adk",
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/adk": "^0.1.3",
15 | "@toolbox-sdk/adk": "^0.1.5"
16 | }
17 | }
18 |
```
--------------------------------------------------------------------------------
/.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/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": "^2.0.0",
15 | "@langchain/langgraph": "^1.0.0",
16 | "@toolbox-sdk/core": "^0.1.2",
17 | "langchain": "^1.0.0"
18 | }
19 | }
20 |
```
--------------------------------------------------------------------------------
/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/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/connect-ide-using-mcp-toolbox"/>
12 | <meta http-equiv="refresh" content="0;url=https://cloud.google.com/alloydb/docs/connect-ide-using-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 |
```
--------------------------------------------------------------------------------
/docs/en/getting-started/quickstart/python/adk/quickstart.py:
--------------------------------------------------------------------------------
```python
1 | from google.adk import Agent
2 | from google.adk.apps import App
3 | from toolbox_core import ToolboxSyncClient
4 |
5 | # TODO(developer): update the TOOLBOX_URL to your toolbox endpoint
6 | client = ToolboxSyncClient("http://127.0.0.1:5000")
7 |
8 | root_agent = Agent(
9 | name='root_agent',
10 | model='gemini-2.5-flash',
11 | instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
12 | tools=client.load_toolset(),
13 | )
14 |
15 | app = App(root_agent=root_agent, name="my_agent")
16 |
```
--------------------------------------------------------------------------------
/docs/en/samples/snowflake/runme.py:
--------------------------------------------------------------------------------
```python
1 | import asyncio
2 | from toolbox_core import ToolboxClient
3 |
4 |
5 | async def main():
6 | # Replace with the actual URL where your Toolbox service is running
7 | async with ToolboxClient("http://127.0.0.1:5000") as toolbox:
8 | tool = await toolbox.load_tool("execute_sql")
9 | result = await tool("SELECT 1")
10 | print(result)
11 |
12 | tool = await toolbox.load_tool("list_tables")
13 | result = await tool(table_names="DIM_DATE")
14 | print(result)
15 |
16 |
17 | if __name__ == "__main__":
18 | asyncio.run(main())
19 |
```
--------------------------------------------------------------------------------
/docs/en/resources/tools/serverless-spark/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "Serverless for Apache Spark"
3 | type: docs
4 | weight: 1
5 | description: >
6 | Tools that work with Google Cloud Serverless for Apache Spark Sources.
7 | ---
8 |
9 | - [serverless-spark-get-batch](./serverless-spark-get-batch.md)
10 | - [serverless-spark-list-batches](./serverless-spark-list-batches.md)
11 | - [serverless-spark-cancel-batch](./serverless-spark-cancel-batch.md)
12 | - [serverless-spark-create-pyspark-batch](./serverless-spark-create-pyspark-batch.md)
13 | - [serverless-spark-create-spark-batch](./serverless-spark-create-spark-batch.md)
14 |
```
--------------------------------------------------------------------------------
/.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 -}}
```
--------------------------------------------------------------------------------
/docs/en/blogs/_index.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: "Featured Articles"
3 | weight: 3
4 | description: Toolbox Medium Blogs
5 | manualLink: "https://medium.com/@mcp_toolbox"
6 | manualLinkTarget: _blank
7 | ---
8 |
9 | <html>
10 | <head>
11 | <title>Redirecting to Featured Articles</title>
12 | <link rel="canonical" href="https://medium.com/@mcp_toolbox"/>
13 | <meta http-equiv="refresh" content="0;url=https://medium.com/@mcp_toolbox"/>
14 | </head>
15 | <body>
16 | <p>If you are not automatically redirected, please <a href="https://medium.com/@mcp_toolbox">follow this link to our articles</a>.</p>
17 | </body>
18 | </html>
19 |
```
--------------------------------------------------------------------------------
/.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 |
```
--------------------------------------------------------------------------------
/.gemini/config.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 | ignore_patterns:
16 | - "package-lock.json"
17 | - "go.sum"
18 | - "requirements.txt"
```
--------------------------------------------------------------------------------
/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 |
```
--------------------------------------------------------------------------------
/.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 | groupName: 'Go',
29 | matchManagers: [
30 | 'gomod',
31 | ],
32 | },
33 | {
34 | groupName: 'Node',
35 | matchManagers: [
36 | 'npm',
37 | ],
38 | },
39 | {
40 | groupName: 'Pip',
41 | matchManagers: [
42 | 'pip_requirements',
43 | ],
44 | },
45 | ],
46 | }
47 |
```
--------------------------------------------------------------------------------
/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/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 |
```
--------------------------------------------------------------------------------
/.github/trusted-contribution.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 | # Trigger presubmit tests for trusted contributors
16 | # https://github.com/googleapis/repo-automation-bots/tree/main/packages/trusted-contribution
17 | # Install: https://github.com/apps/trusted-contributions-gcf
18 |
19 | trustedContributors:
20 | - "dependabot[bot]"
21 | - "renovate-bot"
22 | annotations:
23 | # Trigger Cloud Build tests
24 | - type: comment
25 | text: "/gcbrun"
26 | - type: label
27 | text: "tests: run"
28 |
```
--------------------------------------------------------------------------------
/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 |
```