Compare commits

..

7 Commits

Author SHA1 Message Date
Juexin Wang
e716efea6e Refactor: move getCloudGdaToolsConfig to top of file for readability 2026-01-16 17:26:14 -08:00
Juexin Wang
dcfd056a30 Fix lint errors: format tests/cloudgda/cloud_gda_integration_test.go with goimports 2026-01-16 17:18:31 -08:00
Juexin Wang
59aa21729d Update go.mod: promote grpc to direct dependency for integration tests 2026-01-16 17:10:06 -08:00
Juexin Wang
e25ee6f165 Refactor Cloud GDA source to use package-level variable for testing and use gRPC mock server in integration tests 2026-01-16 17:08:41 -08:00
Juexin Wang
9bb4eee494 refactor(tools/cloudgda): update to use google-cloud-go sdk types
Removes types.go and uses geminidataanalyticspb types with wrapper structs for YAML decoding.
2026-01-15 10:24:10 -08:00
Juexin Wang
9f5b04cf73 Refactor Cloud GDA source to support per-request client authorization 2026-01-14 16:10:50 -08:00
Juexin Wang
66d6b58c4f intorduce Go SDK for GDA tool and source 2026-01-14 16:10:50 -08:00
838 changed files with 15942 additions and 18807 deletions

View File

@@ -87,7 +87,7 @@ steps:
- "CLOUD_SQL_POSTGRES_REGION=$_REGION" - "CLOUD_SQL_POSTGRES_REGION=$_REGION"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL" - "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: secretEnv:
["CLOUD_SQL_POSTGRES_USER", "CLOUD_SQL_POSTGRES_PASS", "CLIENT_ID", "API_KEY"] ["CLOUD_SQL_POSTGRES_USER", "CLOUD_SQL_POSTGRES_PASS", "CLIENT_ID"]
volumes: volumes:
- name: "go" - name: "go"
path: "/gopath" path: "/gopath"
@@ -134,7 +134,7 @@ steps:
- "ALLOYDB_POSTGRES_DATABASE=$_DATABASE_NAME" - "ALLOYDB_POSTGRES_DATABASE=$_DATABASE_NAME"
- "ALLOYDB_POSTGRES_REGION=$_REGION" - "ALLOYDB_POSTGRES_REGION=$_REGION"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL" - "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["ALLOYDB_POSTGRES_USER", "ALLOYDB_POSTGRES_PASS", "CLIENT_ID", "API_KEY"] secretEnv: ["ALLOYDB_POSTGRES_USER", "ALLOYDB_POSTGRES_PASS", "CLIENT_ID"]
volumes: volumes:
- name: "go" - name: "go"
path: "/gopath" path: "/gopath"
@@ -293,7 +293,7 @@ steps:
.ci/test_with_coverage.sh \ .ci/test_with_coverage.sh \
"Cloud Healthcare API" \ "Cloud Healthcare API" \
cloudhealthcare \ cloudhealthcare \
cloudhealthcare cloudhealthcare || echo "Integration tests failed."
- id: "postgres" - id: "postgres"
name: golang:1 name: golang:1
@@ -305,7 +305,7 @@ steps:
- "POSTGRES_HOST=$_POSTGRES_HOST" - "POSTGRES_HOST=$_POSTGRES_HOST"
- "POSTGRES_PORT=$_POSTGRES_PORT" - "POSTGRES_PORT=$_POSTGRES_PORT"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL" - "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["POSTGRES_USER", "POSTGRES_PASS", "CLIENT_ID", "API_KEY"] secretEnv: ["POSTGRES_USER", "POSTGRES_PASS", "CLIENT_ID"]
volumes: volumes:
- name: "go" - name: "go"
path: "/gopath" path: "/gopath"
@@ -964,13 +964,6 @@ steps:
availableSecrets: availableSecrets:
secretManager: secretManager:
# Common secrets
- versionName: projects/$PROJECT_ID/secrets/client_id/versions/latest
env: CLIENT_ID
- versionName: projects/$PROJECT_ID/secrets/api_key/versions/latest
env: API_KEY
# Resource-specific secrets
- versionName: projects/$PROJECT_ID/secrets/cloud_sql_pg_user/versions/latest - versionName: projects/$PROJECT_ID/secrets/cloud_sql_pg_user/versions/latest
env: CLOUD_SQL_POSTGRES_USER env: CLOUD_SQL_POSTGRES_USER
- versionName: projects/$PROJECT_ID/secrets/cloud_sql_pg_pass/versions/latest - versionName: projects/$PROJECT_ID/secrets/cloud_sql_pg_pass/versions/latest
@@ -987,6 +980,8 @@ availableSecrets:
env: POSTGRES_USER env: POSTGRES_USER
- versionName: projects/$PROJECT_ID/secrets/postgres_pass/versions/latest - versionName: projects/$PROJECT_ID/secrets/postgres_pass/versions/latest
env: POSTGRES_PASS env: POSTGRES_PASS
- versionName: projects/$PROJECT_ID/secrets/client_id/versions/latest
env: CLIENT_ID
- versionName: projects/$PROJECT_ID/secrets/neo4j_user/versions/latest - versionName: projects/$PROJECT_ID/secrets/neo4j_user/versions/latest
env: NEO4J_USER env: NEO4J_USER
- versionName: projects/$PROJECT_ID/secrets/neo4j_pass/versions/latest - versionName: projects/$PROJECT_ID/secrets/neo4j_pass/versions/latest

View File

@@ -51,12 +51,12 @@ jobs:
extended: true extended: true
- name: Setup Node - name: Setup Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
with: with:
node-version: "22" node-version: "22"
- name: Cache dependencies - name: Cache dependencies
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5 uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

View File

@@ -57,7 +57,7 @@ jobs:
with: with:
hugo-version: "0.145.0" hugo-version: "0.145.0"
extended: true extended: true
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
with: with:
node-version: "22" node-version: "22"

View File

@@ -44,7 +44,7 @@ jobs:
extended: true extended: true
- name: Setup Node - name: Setup Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
with: with:
node-version: "22" node-version: "22"

View File

@@ -62,12 +62,12 @@ jobs:
extended: true extended: true
- name: Setup Node - name: Setup Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
with: with:
node-version: "22" node-version: "22"
- name: Cache dependencies - name: Cache dependencies
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5 uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

View File

@@ -25,7 +25,7 @@ jobs:
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Restore lychee cache - name: Restore lychee cache
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5 uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
with: with:
path: .lycheecache path: .lycheecache
key: cache-lychee-${{ github.sha }} key: cache-lychee-${{ github.sha }}
@@ -39,7 +39,6 @@ jobs:
--no-progress --no-progress
--cache --cache
--max-cache-age 1d --max-cache-age 1d
--exclude '^neo4j\+.*' --exclude '^bolt://.*'
README.md README.md
docs/ docs/
output: /tmp/foo.txt output: /tmp/foo.txt

View File

@@ -51,11 +51,11 @@ jobs:
console.log('Failed to remove label. Another job may have already removed it!'); console.log('Failed to remove label. Another job may have already removed it!');
} }
- name: Setup Go - name: Setup Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
with: with:
go-version: "1.25" go-version: "1.25"
- name: Checkout code - name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with: with:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
repository: ${{ github.event.pull_request.head.repo.full_name }} repository: ${{ github.event.pull_request.head.repo.full_name }}

View File

@@ -29,7 +29,7 @@ jobs:
issues: 'write' issues: 'write'
pull-requests: 'write' pull-requests: 'write'
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- uses: micnncim/action-label-syncer@3abd5ab72fda571e69fffd97bd4e0033dd5f495c # v1.3.0 - uses: micnncim/action-label-syncer@3abd5ab72fda571e69fffd97bd4e0033dd5f495c # v1.3.0
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -57,12 +57,12 @@ jobs:
} }
- name: Setup Go - name: Setup Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
with: with:
go-version: "1.24" go-version: "1.24"
- name: Checkout code - name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with: with:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
repository: ${{ github.event.pull_request.head.repo.full_name }} repository: ${{ github.event.pull_request.head.repo.full_name }}

View File

@@ -51,10 +51,6 @@ ignoreFiles = ["quickstart/shared", "quickstart/python", "quickstart/js", "quick
# Add a new version block here before every release # Add a new version block here before every release
# The order of versions in this file is mirrored into the dropdown # The order of versions in this file is mirrored into the dropdown
[[params.versions]]
version = "v0.26.0"
url = "https://googleapis.github.io/genai-toolbox/v0.26.0/"
[[params.versions]] [[params.versions]]
version = "v0.25.0" version = "v0.25.0"
url = "https://googleapis.github.io/genai-toolbox/v0.25.0/" url = "https://googleapis.github.io/genai-toolbox/v0.25.0/"

View File

@@ -39,7 +39,7 @@ https://dev.mysql.com/doc/refman/8.4/en/user-names.html
# npmjs links can occasionally trigger rate limiting during high-frequency CI builds # npmjs links can occasionally trigger rate limiting during high-frequency CI builds
https://www.npmjs.com/package/@toolbox-sdk/core https://www.npmjs.com/package/@toolbox-sdk/core
https://www.npmjs.com/package/@toolbox-sdk/adk https://www.npmjs.com/package/@toolbox-sdk/adk
https://www.oceanbase.com/
# Ignore social media and blog profiles to reduce external request overhead # Ignore social media and blog profiles to reduce external request overhead
https://medium.com/@mcp_toolbox https://medium.com/@mcp_toolbox

View File

@@ -1,30 +1,5 @@
# Changelog # Changelog
## [0.26.0](https://github.com/googleapis/genai-toolbox/compare/v0.25.0...v0.26.0) (2026-01-22)
### ⚠ BREAKING CHANGES
* Validate tool naming ([#2305](https://github.com/googleapis/genai-toolbox/issues/2305)) ([5054212](https://github.com/googleapis/genai-toolbox/commit/5054212fa43017207fe83275d27b9fbab96e8ab5))
* **tools/cloudgda:** Update description and parameter name for cloudgda tool ([#2288](https://github.com/googleapis/genai-toolbox/issues/2288)) ([6b02591](https://github.com/googleapis/genai-toolbox/commit/6b025917032394a66840488259db8ff2c3063016))
### Features
* Add new `user-agent-metadata` flag ([#2302](https://github.com/googleapis/genai-toolbox/issues/2302)) ([adc9589](https://github.com/googleapis/genai-toolbox/commit/adc9589766904d9e3cbe0a6399222f8d4bb9d0cc))
* Add remaining flag to Toolbox server in MCP registry ([#2272](https://github.com/googleapis/genai-toolbox/issues/2272)) ([5e0999e](https://github.com/googleapis/genai-toolbox/commit/5e0999ebf5cdd9046e96857738254b2e0561b6d2))
* **embeddingModel:** Add embedding model to MCP handler ([#2310](https://github.com/googleapis/genai-toolbox/issues/2310)) ([e4f60e5](https://github.com/googleapis/genai-toolbox/commit/e4f60e56335b755ef55b9553d3f40b31858ec8d9))
* **sources/bigquery:** Make maximum rows returned from queries configurable ([#2262](https://github.com/googleapis/genai-toolbox/issues/2262)) ([4abf0c3](https://github.com/googleapis/genai-toolbox/commit/4abf0c39e717d53b22cc61efb65e09928c598236))
* **prebuilt/cloud-sql:** Add create backup tool for Cloud SQL ([#2141](https://github.com/googleapis/genai-toolbox/issues/2141)) ([8e0fb03](https://github.com/googleapis/genai-toolbox/commit/8e0fb0348315a80f63cb47b3c7204869482448f4))
* **prebuilt/cloud-sql:** Add restore backup tool for Cloud SQL ([#2171](https://github.com/googleapis/genai-toolbox/issues/2171)) ([00c3e6d](https://github.com/googleapis/genai-toolbox/commit/00c3e6d8cba54e2ab6cb271c7e6b378895df53e1))
* Support combining multiple prebuilt configurations ([#2295](https://github.com/googleapis/genai-toolbox/issues/2295)) ([e535b37](https://github.com/googleapis/genai-toolbox/commit/e535b372ea81864d644a67135a1b07e4e519b4b4))
* Support MCP specs version 2025-11-25 ([#2303](https://github.com/googleapis/genai-toolbox/issues/2303)) ([4d23a3b](https://github.com/googleapis/genai-toolbox/commit/4d23a3bbf2797b1f7fe328aeb5789e778121da23))
* **tools:** Add `valueFromParam` support to Tool config ([#2333](https://github.com/googleapis/genai-toolbox/issues/2333)) ([15101b1](https://github.com/googleapis/genai-toolbox/commit/15101b1edbe2b85a4a5f9f819c23cf83138f4ee1))
### Bug Fixes
* **tools/cloudhealthcare:** Add check for client authorization before retrieving token string ([#2327](https://github.com/googleapis/genai-toolbox/issues/2327)) ([c25a233](https://github.com/googleapis/genai-toolbox/commit/c25a2330fea2ac382a398842c9e572e4e19bcb08))
## [0.25.0](https://github.com/googleapis/genai-toolbox/compare/v0.24.0...v0.25.0) (2026-01-08) ## [0.25.0](https://github.com/googleapis/genai-toolbox/compare/v0.24.0...v0.25.0) (2026-01-08)

View File

@@ -92,11 +92,11 @@ implementation](https://github.com/googleapis/genai-toolbox/blob/main/internal/s
`newdb.go`. Create a `Config` struct to include all the necessary parameters `newdb.go`. Create a `Config` struct to include all the necessary parameters
for connecting to the database (e.g., host, port, username, password, database for connecting to the database (e.g., host, port, username, password, database
name) and a `Source` struct to store necessary parameters for tools (e.g., name) and a `Source` struct to store necessary parameters for tools (e.g.,
Name, Type, connection object, additional config). Name, Kind, connection object, additional config).
* **Implement the * **Implement the
[`SourceConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L57) [`SourceConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L57)
interface**. This interface requires two methods: interface**. This interface requires two methods:
* `SourceConfigType() string`: Returns a unique string identifier for your * `SourceConfigKind() string`: Returns a unique string identifier for your
data source (e.g., `"newdb"`). data source (e.g., `"newdb"`).
* `Initialize(ctx context.Context, tracer trace.Tracer) (Source, error)`: * `Initialize(ctx context.Context, tracer trace.Tracer) (Source, error)`:
Creates a new instance of your data source and establishes a connection to Creates a new instance of your data source and establishes a connection to
@@ -104,7 +104,7 @@ implementation](https://github.com/googleapis/genai-toolbox/blob/main/internal/s
* **Implement the * **Implement the
[`Source`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L63) [`Source`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/sources/sources.go#L63)
interface**. This interface requires one method: interface**. This interface requires one method:
* `SourceType() string`: Returns the same string identifier as `SourceConfigType()`. * `SourceKind() string`: Returns the same string identifier as `SourceConfigKind()`.
* **Implement `init()`** to register the new Source. * **Implement `init()`** to register the new Source.
* **Implement Unit Tests** in a file named `newdb_test.go`. * **Implement Unit Tests** in a file named `newdb_test.go`.
@@ -126,7 +126,7 @@ tools.
* **Implement the * **Implement the
[`ToolConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/tools/tools.go#L61) [`ToolConfig`](https://github.com/googleapis/genai-toolbox/blob/fd300dc606d88bf9f7bba689e2cee4e3565537dd/internal/tools/tools.go#L61)
interface**. This interface requires one method: interface**. This interface requires one method:
* `ToolConfigType() string`: Returns a unique string identifier for your tool * `ToolConfigKind() string`: Returns a unique string identifier for your tool
(e.g., `"newdb-tool"`). (e.g., `"newdb-tool"`).
* `Initialize(sources map[string]Source) (Tool, error)`: Creates a new * `Initialize(sources map[string]Source) (Tool, error)`: Creates a new
instance of your tool and validates that it can connect to the specified instance of your tool and validates that it can connect to the specified
@@ -243,7 +243,7 @@ resources.
| style | Update src code, with only formatting and whitespace updates (e.g. code formatter or linter changes). | | style | Update src code, with only formatting and whitespace updates (e.g. code formatter or linter changes). |
Pull requests should always add scope whenever possible. The scope is Pull requests should always add scope whenever possible. The scope is
formatted as `<scope-resource>/<scope-type>` (e.g., `sources/postgres`, or formatted as `<scope-type>/<scope-kind>` (e.g., `sources/postgres`, or
`tools/mssql-sql`). `tools/mssql-sql`).
Ideally, **each PR covers only one scope**, if this is Ideally, **each PR covers only one scope**, if this is

View File

@@ -47,12 +47,11 @@ Before you begin, ensure you have the following:
### Tool Naming Conventions ### Tool Naming Conventions
This section details the purpose and conventions for MCP Toolbox's tools naming This section details the purpose and conventions for MCP Toolbox's tools naming
properties, **tool name** and **tool type**. properties, **tool name** and **tool kind**.
``` ```
kind: tools cancel_hotel: <- tool name
name: cancel_hotel <- tool name kind: postgres-sql <- tool kind
type: postgres-sql <- tool type
source: my_pg_source source: my_pg_source
``` ```
@@ -77,17 +76,17 @@ The following guidelines apply to tool names:
to a function) until they can be validated through extensive testing to ensure to a function) until they can be validated through extensive testing to ensure
they do not negatively impact agent's performances. they do not negatively impact agent's performances.
#### Tool Type #### Tool Kind
Tool type serves as a category or type that a user can assign to a tool. Tool kind serves as a category or type that a user can assign to a tool.
The following guidelines apply to tool types: The following guidelines apply to tool kinds:
* Should use hyphens over underscores (e.g. `firestore-list-collections` or * Should user hyphens over underscores (e.g. `firestore-list-collections` or
`firestore_list_colelctions`). `firestore_list_colelctions`).
* Should use product name in name (e.g. `firestore-list-collections` over * Should use product name in name (e.g. `firestore-list-collections` over
`list-collections`). `list-collections`).
* Changes to tool type are breaking changes and should be avoided. * Changes to tool kind are breaking changes and should be avoided.
## Testing ## Testing

View File

@@ -2,8 +2,6 @@
# MCP Toolbox for Databases # MCP Toolbox for Databases
<a href="https://trendshift.io/repositories/13019" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13019" alt="googleapis%2Fgenai-toolbox | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
[![Docs](https://img.shields.io/badge/docs-MCP_Toolbox-blue)](https://googleapis.github.io/genai-toolbox/) [![Docs](https://img.shields.io/badge/docs-MCP_Toolbox-blue)](https://googleapis.github.io/genai-toolbox/)
[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=flat&logo=discord&logoColor=white)](https://discord.gg/Dmm69peqjh) [![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=flat&logo=discord&logoColor=white)](https://discord.gg/Dmm69peqjh)
[![Medium](https://img.shields.io/badge/Medium-12100E?style=flat&logo=medium&logoColor=white)](https://medium.com/@mcp_toolbox) [![Medium](https://img.shields.io/badge/Medium-12100E?style=flat&logo=medium&logoColor=white)](https://medium.com/@mcp_toolbox)
@@ -142,7 +140,7 @@ To install Toolbox as a binary:
> >
> ```sh > ```sh
> # see releases page for other versions > # see releases page for other versions
> export VERSION=0.26.0 > export VERSION=0.25.0
> curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
> chmod +x toolbox > chmod +x toolbox
> ``` > ```
@@ -155,7 +153,7 @@ To install Toolbox as a binary:
> >
> ```sh > ```sh
> # see releases page for other versions > # see releases page for other versions
> export VERSION=0.26.0 > export VERSION=0.25.0
> curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox
> chmod +x toolbox > chmod +x toolbox
> ``` > ```
@@ -168,7 +166,7 @@ To install Toolbox as a binary:
> >
> ```sh > ```sh
> # see releases page for other versions > # see releases page for other versions
> export VERSION=0.26.0 > export VERSION=0.25.0
> curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox > curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox
> chmod +x toolbox > chmod +x toolbox
> ``` > ```
@@ -181,7 +179,7 @@ To install Toolbox as a binary:
> >
> ```cmd > ```cmd
> :: see releases page for other versions > :: see releases page for other versions
> set VERSION=0.26.0 > set VERSION=0.25.0
> curl -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v%VERSION%/windows/amd64/toolbox.exe" > curl -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v%VERSION%/windows/amd64/toolbox.exe"
> ``` > ```
> >
@@ -193,7 +191,7 @@ To install Toolbox as a binary:
> >
> ```powershell > ```powershell
> # see releases page for other versions > # see releases page for other versions
> $VERSION = "0.26.0" > $VERSION = "0.25.0"
> curl.exe -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe" > curl.exe -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe"
> ``` > ```
> >
@@ -206,7 +204,7 @@ You can also install Toolbox as a container:
```sh ```sh
# see releases page for other versions # see releases page for other versions
export VERSION=0.26.0 export VERSION=0.25.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
``` ```
@@ -230,7 +228,7 @@ To install from source, ensure you have the latest version of
[Go installed](https://go.dev/doc/install), and then run the following command: [Go installed](https://go.dev/doc/install), and then run the following command:
```sh ```sh
go install github.com/googleapis/genai-toolbox@v0.26.0 go install github.com/googleapis/genai-toolbox@v0.25.0
``` ```
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->
@@ -940,9 +938,9 @@ Toolbox should have access to. Most tools will have at least one source to
execute against. execute against.
```yaml ```yaml
kind: sources sources:
name: my-pg-source my-pg-source:
type: postgres kind: postgres
host: 127.0.0.1 host: 127.0.0.1
port: 5432 port: 5432
database: toolbox_db database: toolbox_db
@@ -956,12 +954,12 @@ For more details on configuring different types of sources, see the
### Tools ### Tools
The `tools` section of a `tools.yaml` define the actions an agent can take: what The `tools` section of a `tools.yaml` define the actions an agent can take: what
type of tool it is, which source(s) it affects, what parameters it uses, etc. kind of tool it is, which source(s) it affects, what parameters it uses, etc.
```yaml ```yaml
kind: tools tools:
name: search-hotels-by-name search-hotels-by-name:
type: postgres-sql kind: postgres-sql
source: my-pg-source source: my-pg-source
description: Search for hotels based on name. description: Search for hotels based on name.
parameters: parameters:

View File

@@ -15,7 +15,6 @@
package cmd package cmd
import ( import (
"bytes"
"context" "context"
_ "embed" _ "embed"
"fmt" "fmt"
@@ -99,7 +98,6 @@ import (
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqlgetinstances" _ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqlgetinstances"
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqllistdatabases" _ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqllistdatabases"
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqllistinstances" _ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqllistinstances"
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqlrestorebackup"
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqlwaitforoperation" _ "github.com/googleapis/genai-toolbox/internal/tools/cloudsql/cloudsqlwaitforoperation"
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsqlmssql/cloudsqlmssqlcreateinstance" _ "github.com/googleapis/genai-toolbox/internal/tools/cloudsqlmssql/cloudsqlmssqlcreateinstance"
_ "github.com/googleapis/genai-toolbox/internal/tools/cloudsqlmysql/cloudsqlmysqlcreateinstance" _ "github.com/googleapis/genai-toolbox/internal/tools/cloudsqlmysql/cloudsqlmysqlcreateinstance"
@@ -321,7 +319,7 @@ type Command struct {
tools_file string tools_file string
tools_files []string tools_files []string
tools_folder string tools_folder string
prebuiltConfigs []string prebuiltConfig string
inStream io.Reader inStream io.Reader
outStream io.Writer outStream io.Writer
errStream io.Writer errStream io.Writer
@@ -377,17 +375,16 @@ func NewCommand(opts ...Option) *Command {
flags.StringVar(&cmd.cfg.TelemetryServiceName, "telemetry-service-name", "toolbox", "Sets the value of the service.name resource attribute for telemetry data.") flags.StringVar(&cmd.cfg.TelemetryServiceName, "telemetry-service-name", "toolbox", "Sets the value of the service.name resource attribute for telemetry data.")
// Fetch prebuilt tools sources to customize the help description // Fetch prebuilt tools sources to customize the help description
prebuiltHelp := fmt.Sprintf( prebuiltHelp := fmt.Sprintf(
"Use a prebuilt tool configuration by source type. Allowed: '%s'. Can be specified multiple times.", "Use a prebuilt tool configuration by source type. Allowed: '%s'.",
strings.Join(prebuiltconfigs.GetPrebuiltSources(), "', '"), strings.Join(prebuiltconfigs.GetPrebuiltSources(), "', '"),
) )
flags.StringSliceVar(&cmd.prebuiltConfigs, "prebuilt", []string{}, prebuiltHelp) flags.StringVar(&cmd.prebuiltConfig, "prebuilt", "", prebuiltHelp)
flags.BoolVar(&cmd.cfg.Stdio, "stdio", false, "Listens via MCP STDIO instead of acting as a remote HTTP server.") flags.BoolVar(&cmd.cfg.Stdio, "stdio", false, "Listens via MCP STDIO instead of acting as a remote HTTP server.")
flags.BoolVar(&cmd.cfg.DisableReload, "disable-reload", false, "Disables dynamic reloading of tools file.") flags.BoolVar(&cmd.cfg.DisableReload, "disable-reload", false, "Disables dynamic reloading of tools file.")
flags.BoolVar(&cmd.cfg.UI, "ui", false, "Launches the Toolbox UI web server.") flags.BoolVar(&cmd.cfg.UI, "ui", false, "Launches the Toolbox UI web server.")
// TODO: Insecure by default. Might consider updating this for v1.0.0 // TODO: Insecure by default. Might consider updating this for v1.0.0
flags.StringSliceVar(&cmd.cfg.AllowedOrigins, "allowed-origins", []string{"*"}, "Specifies a list of origins permitted to access this server. Defaults to '*'.") flags.StringSliceVar(&cmd.cfg.AllowedOrigins, "allowed-origins", []string{"*"}, "Specifies a list of origins permitted to access this server. Defaults to '*'.")
flags.StringSliceVar(&cmd.cfg.AllowedHosts, "allowed-hosts", []string{"*"}, "Specifies a list of hosts permitted to access this server. Defaults to '*'.") flags.StringSliceVar(&cmd.cfg.AllowedHosts, "allowed-hosts", []string{"*"}, "Specifies a list of hosts permitted to access this server. Defaults to '*'.")
flags.StringSliceVar(&cmd.cfg.UserAgentMetadata, "user-agent-metadata", []string{}, "Appends additional metadata to the User-Agent.")
// wrap RunE command so that we have access to original Command object // wrap RunE command so that we have access to original Command object
cmd.RunE = func(*cobra.Command, []string) error { return run(cmd) } cmd.RunE = func(*cobra.Command, []string) error { return run(cmd) }
@@ -397,6 +394,7 @@ func NewCommand(opts ...Option) *Command {
type ToolsFile struct { type ToolsFile struct {
Sources server.SourceConfigs `yaml:"sources"` Sources server.SourceConfigs `yaml:"sources"`
AuthSources server.AuthServiceConfigs `yaml:"authSources"` // Deprecated: Kept for compatibility.
AuthServices server.AuthServiceConfigs `yaml:"authServices"` AuthServices server.AuthServiceConfigs `yaml:"authServices"`
EmbeddingModels server.EmbeddingModelConfigs `yaml:"embeddingModels"` EmbeddingModels server.EmbeddingModelConfigs `yaml:"embeddingModels"`
Tools server.ToolConfigs `yaml:"tools"` Tools server.ToolConfigs `yaml:"tools"`
@@ -427,129 +425,6 @@ func parseEnv(input string) (string, error) {
return output, err return output, err
} }
func convertToolsFile(raw []byte) ([]byte, error) {
var input yaml.MapSlice
decoder := yaml.NewDecoder(bytes.NewReader(raw), yaml.UseOrderedMap())
// convert to tools file v2
var buf bytes.Buffer
encoder := yaml.NewEncoder(&buf)
v1keys := []string{"sources", "authSources", "authServices", "embeddingModels", "tools", "toolsets", "prompts"}
for {
if err := decoder.Decode(&input); err != nil {
if err == io.EOF {
break
}
return nil, err
}
for _, item := range input {
key, ok := item.Key.(string)
if !ok {
return nil, fmt.Errorf("unexpected non-string key in input: %v", item.Key)
}
// check if the key is config file v1's key
if slices.Contains(v1keys, key) {
// check if value conversion to yaml.MapSlice successfully
// fields such as "tools" in toolsets might pass the first check but
// fail to convert to MapSlice
if slice, ok := item.Value.(yaml.MapSlice); ok {
// Deprecated: convert authSources to authServices
if key == "authSources" {
key = "authServices"
}
transformed, err := transformDocs(key, slice)
if err != nil {
return nil, err
}
// encode per-doc
for _, doc := range transformed {
if err := encoder.Encode(doc); err != nil {
return nil, err
}
}
} else {
// invalid input will be ignored
// we don't want to throw error here since the config could
// be valid but with a different order such as:
// ---
// tools:
// - tool_a
// kind: toolsets
// ---
continue
}
} else {
// this doc is already v2, encode to buf
if err := encoder.Encode(input); err != nil {
return nil, err
}
break
}
}
}
return buf.Bytes(), nil
}
// transformDocs transforms the configuration file from v1 format to v2
// yaml.MapSlice will preserve the order in a map
func transformDocs(kind string, input yaml.MapSlice) ([]yaml.MapSlice, error) {
var transformed []yaml.MapSlice
for _, entry := range input {
entryName, ok := entry.Key.(string)
if !ok {
return nil, fmt.Errorf("unexpected non-string key for entry in '%s': %v", kind, entry.Key)
}
entryBody := ProcessValue(entry.Value, kind == "toolsets")
currentTransformed := yaml.MapSlice{
{Key: "kind", Value: kind},
{Key: "name", Value: entryName},
}
// Merge the transformed body into our result
if bodySlice, ok := entryBody.(yaml.MapSlice); ok {
currentTransformed = append(currentTransformed, bodySlice...)
} else {
return nil, fmt.Errorf("unable to convert entryBody to MapSlice")
}
transformed = append(transformed, currentTransformed)
}
return transformed, nil
}
// ProcessValue recursively looks for MapSlices to rename 'kind' -> 'type'
func ProcessValue(v any, isToolset bool) any {
switch val := v.(type) {
case yaml.MapSlice:
// creating a new MapSlice is safer for recursive transformation
newVal := make(yaml.MapSlice, len(val))
for i, item := range val {
// Perform renaming
if item.Key == "kind" {
item.Key = "type"
}
// Recursive call for nested values (e.g., nested objects or lists)
item.Value = ProcessValue(item.Value, false)
newVal[i] = item
}
return newVal
case []any:
// Process lists: If it's a toolset top-level list, wrap it.
if isToolset {
return yaml.MapSlice{{Key: "tools", Value: val}}
}
// Otherwise, recurse into list items (to catch nested objects)
newVal := make([]any, len(val))
for i := range val {
newVal[i] = ProcessValue(val[i], false)
}
return newVal
default:
return val
}
}
// parseToolsFile parses the provided yaml into appropriate configs. // parseToolsFile parses the provided yaml into appropriate configs.
func parseToolsFile(ctx context.Context, raw []byte) (ToolsFile, error) { func parseToolsFile(ctx context.Context, raw []byte) (ToolsFile, error) {
var toolsFile ToolsFile var toolsFile ToolsFile
@@ -560,13 +435,8 @@ func parseToolsFile(ctx context.Context, raw []byte) (ToolsFile, error) {
} }
raw = []byte(output) raw = []byte(output)
raw, err = convertToolsFile(raw)
if err != nil {
return toolsFile, fmt.Errorf("error converting tools file: %s", err)
}
// Parse contents // Parse contents
toolsFile.Sources, toolsFile.AuthServices, toolsFile.EmbeddingModels, toolsFile.Tools, toolsFile.Toolsets, toolsFile.Prompts, err = server.UnmarshalResourceConfig(ctx, raw) err = yaml.UnmarshalContext(ctx, raw, &toolsFile, yaml.Strict())
if err != nil { if err != nil {
return toolsFile, err return toolsFile, err
} }
@@ -598,6 +468,18 @@ func mergeToolsFiles(files ...ToolsFile) (ToolsFile, error) {
} }
} }
// Check for conflicts and merge authSources (deprecated, but still support)
for name, authSource := range file.AuthSources {
if _, exists := merged.AuthSources[name]; exists {
conflicts = append(conflicts, fmt.Sprintf("authSource '%s' (file #%d)", name, fileIndex+1))
} else {
if merged.AuthSources == nil {
merged.AuthSources = make(server.AuthServiceConfigs)
}
merged.AuthSources[name] = authSource
}
}
// Check for conflicts and merge authServices // Check for conflicts and merge authServices
for name, authService := range file.AuthServices { for name, authService := range file.AuthServices {
if _, exists := merged.AuthServices[name]; exists { if _, exists := merged.AuthServices[name]; exists {
@@ -983,40 +865,32 @@ func run(cmd *Command) error {
var allToolsFiles []ToolsFile var allToolsFiles []ToolsFile
// Load Prebuilt Configuration // Load Prebuilt Configuration
if cmd.prebuiltConfig != "" {
if len(cmd.prebuiltConfigs) > 0 { buf, err := prebuiltconfigs.Get(cmd.prebuiltConfig)
slices.Sort(cmd.prebuiltConfigs)
sourcesList := strings.Join(cmd.prebuiltConfigs, ", ")
logMsg := fmt.Sprintf("Using prebuilt tool configurations for: %s", sourcesList)
cmd.logger.InfoContext(ctx, logMsg)
for _, configName := range cmd.prebuiltConfigs {
buf, err := prebuiltconfigs.Get(configName)
if err != nil { if err != nil {
cmd.logger.ErrorContext(ctx, err.Error()) cmd.logger.ErrorContext(ctx, err.Error())
return err return err
} }
logMsg := fmt.Sprint("Using prebuilt tool configuration for ", cmd.prebuiltConfig)
cmd.logger.InfoContext(ctx, logMsg)
// Append prebuilt.source to Version string for the User Agent
cmd.cfg.Version += "+prebuilt." + cmd.prebuiltConfig
// Update version string
cmd.cfg.Version += "+prebuilt." + configName
// Parse into ToolsFile struct
parsed, err := parseToolsFile(ctx, buf) parsed, err := parseToolsFile(ctx, buf)
if err != nil { if err != nil {
errMsg := fmt.Errorf("unable to parse prebuilt tool configuration for '%s': %w", configName, err) errMsg := fmt.Errorf("unable to parse prebuilt tool configuration: %w", err)
cmd.logger.ErrorContext(ctx, errMsg.Error()) cmd.logger.ErrorContext(ctx, errMsg.Error())
return errMsg return errMsg
} }
allToolsFiles = append(allToolsFiles, parsed) allToolsFiles = append(allToolsFiles, parsed)
} }
}
// Determine if Custom Files should be loaded // Determine if Custom Files should be loaded
// Check for explicit custom flags // Check for explicit custom flags
isCustomConfigured := cmd.tools_file != "" || len(cmd.tools_files) > 0 || cmd.tools_folder != "" isCustomConfigured := cmd.tools_file != "" || len(cmd.tools_files) > 0 || cmd.tools_folder != ""
// Determine if default 'tools.yaml' should be used (No prebuilt AND No custom flags) // Determine if default 'tools.yaml' should be used (No prebuilt AND No custom flags)
useDefaultToolsFile := len(cmd.prebuiltConfigs) == 0 && !isCustomConfigured useDefaultToolsFile := cmd.prebuiltConfig == "" && !isCustomConfigured
if useDefaultToolsFile { if useDefaultToolsFile {
cmd.tools_file = "tools.yaml" cmd.tools_file = "tools.yaml"
@@ -1081,6 +955,20 @@ func run(cmd *Command) error {
cmd.cfg.ToolsetConfigs = finalToolsFile.Toolsets cmd.cfg.ToolsetConfigs = finalToolsFile.Toolsets
cmd.cfg.PromptConfigs = finalToolsFile.Prompts cmd.cfg.PromptConfigs = finalToolsFile.Prompts
authSourceConfigs := finalToolsFile.AuthSources
if authSourceConfigs != nil {
cmd.logger.WarnContext(ctx, "`authSources` is deprecated, use `authServices` instead")
for k, v := range authSourceConfigs {
if _, exists := cmd.cfg.AuthServiceConfigs[k]; exists {
errMsg := fmt.Errorf("resource conflict detected: authSource '%s' has the same name as an existing authService. Please rename your authSource", k)
cmd.logger.ErrorContext(ctx, errMsg.Error())
return errMsg
}
cmd.cfg.AuthServiceConfigs[k] = v
}
}
instrumentation, err := telemetry.CreateTelemetryInstrumentation(versionString) instrumentation, err := telemetry.CreateTelemetryInstrumentation(versionString)
if err != nil { if err != nil {
errMsg := fmt.Errorf("unable to create telemetry instrumentation: %w", err) errMsg := fmt.Errorf("unable to create telemetry instrumentation: %w", err)

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
0.26.0 0.25.0

View File

@@ -45,7 +45,7 @@ most popular issues, so make sure to +1 ones you are the most interested in.
## Can Toolbox be used for non-database tools? ## Can Toolbox be used for non-database tools?
**Yes!** While Toolbox is primarily focused on databases, it also supports generic **Yes!** While Toolbox is primarily focused on databases, it also supports generic
**HTTP tools** (`type: http`). These allow you to connect your agents to REST APIs **HTTP tools** (`kind: http`). These allow you to connect your agents to REST APIs
and other web services, enabling workflows that extend beyond database interactions. and other web services, enabling workflows that extend beyond database interactions.
For configuration details, see the [HTTP Tools documentation](../resources/tools/http/http.md). For configuration details, see the [HTTP Tools documentation](../resources/tools/http/http.md).

View File

@@ -64,7 +64,7 @@ The structured logging outputs log as JSON:
"timestamp":"2024-11-04T16:45:11.987299-08:00", "timestamp":"2024-11-04T16:45:11.987299-08:00",
"severity":"ERROR", "severity":"ERROR",
"logging.googleapis.com/sourceLocation":{...}, "logging.googleapis.com/sourceLocation":{...},
"message":"unable to parse tool file at \"tools.yaml\": \"cloud-sql-postgres1\" is not a valid type of data source" "message":"unable to parse tool file at \"tools.yaml\": \"cloud-sql-postgres1\" is not a valid kind of data source"
} }
``` ```

View File

@@ -234,7 +234,7 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"version = \"0.26.0\" # x-release-please-version\n", "version = \"0.25.0\" # x-release-please-version\n",
"! curl -O https://storage.googleapis.com/genai-toolbox/v{version}/linux/amd64/toolbox\n", "! curl -O https://storage.googleapis.com/genai-toolbox/v{version}/linux/amd64/toolbox\n",
"\n", "\n",
"# Make the binary executable\n", "# Make the binary executable\n",
@@ -300,18 +300,17 @@
"# You can also upload a tools file and use that to run toolbox.\n", "# You can also upload a tools file and use that to run toolbox.\n",
"tools_file_name = \"tools.yml\"\n", "tools_file_name = \"tools.yml\"\n",
"file_content = f\"\"\"\n", "file_content = f\"\"\"\n",
"kind: sources\n", "sources:\n",
"name: my-pg-source\n", " my-pg-source:\n",
"type: postgres\n", " kind: postgres\n",
" host: 127.0.0.1\n", " host: 127.0.0.1\n",
" port: 5432\n", " port: 5432\n",
" database: toolbox_db\n", " database: toolbox_db\n",
" user: toolbox_user\n", " user: toolbox_user\n",
" password: my-password\n", " password: my-password\n",
"---\n", "tools:\n",
"kind: tools\n", " search-hotels-by-name:\n",
"name: search-hotels-by-name\n", " kind: postgres-sql\n",
"type: postgres-sql\n",
" source: my-pg-source\n", " source: my-pg-source\n",
" description: Search for hotels based on name.\n", " description: Search for hotels based on name.\n",
" parameters:\n", " parameters:\n",
@@ -319,10 +318,8 @@
" type: string\n", " type: string\n",
" description: The name of the hotel.\n", " description: The name of the hotel.\n",
" statement: SELECT * FROM hotels WHERE name ILIKE '%' || \\$1 || '%';\n", " statement: SELECT * FROM hotels WHERE name ILIKE '%' || \\$1 || '%';\n",
"---\n", " search-hotels-by-location:\n",
"kind: tools\n", " kind: postgres-sql\n",
"name: search-hotels-by-location\n",
"type: postgres-sql\n",
" source: my-pg-source\n", " source: my-pg-source\n",
" description: Search for hotels based on location.\n", " description: Search for hotels based on location.\n",
" parameters:\n", " parameters:\n",
@@ -330,10 +327,8 @@
" type: string\n", " type: string\n",
" description: The location of the hotel.\n", " description: The location of the hotel.\n",
" statement: SELECT * FROM hotels WHERE location ILIKE '%' || \\$1 || '%';\n", " statement: SELECT * FROM hotels WHERE location ILIKE '%' || \\$1 || '%';\n",
"---\n", " book-hotel:\n",
"kind: tools\n", " kind: postgres-sql\n",
"name: book-hotel\n",
"type: postgres-sql\n",
" source: my-pg-source\n", " source: my-pg-source\n",
" description: >-\n", " description: >-\n",
" Book a hotel by its ID. If the hotel is successfully booked, returns a NULL, raises an error if not.\n", " Book a hotel by its ID. If the hotel is successfully booked, returns a NULL, raises an error if not.\n",
@@ -342,10 +337,8 @@
" type: string\n", " type: string\n",
" description: The ID of the hotel to book.\n", " description: The ID of the hotel to book.\n",
" statement: UPDATE hotels SET booked = B'1' WHERE id = \\$1;\n", " statement: UPDATE hotels SET booked = B'1' WHERE id = \\$1;\n",
"---\n", " update-hotel:\n",
"kind: tools\n", " kind: postgres-sql\n",
"name: update-hotel\n",
"type: postgres-sql\n",
" source: my-pg-source\n", " source: my-pg-source\n",
" description: >-\n", " description: >-\n",
" Update a hotel's check-in and check-out dates by its ID. Returns a message\n", " Update a hotel's check-in and check-out dates by its ID. Returns a message\n",
@@ -363,10 +356,8 @@
" statement: >-\n", " statement: >-\n",
" UPDATE hotels SET checkin_date = CAST(\\$2 as date), checkout_date = CAST(\\$3\n", " UPDATE hotels SET checkin_date = CAST(\\$2 as date), checkout_date = CAST(\\$3\n",
" as date) WHERE id = \\$1;\n", " as date) WHERE id = \\$1;\n",
"---\n", " cancel-hotel:\n",
"kind: tools\n", " kind: postgres-sql\n",
"name: cancel-hotel\n",
"type: postgres-sql\n",
" source: my-pg-source\n", " source: my-pg-source\n",
" description: Cancel a hotel by its ID.\n", " description: Cancel a hotel by its ID.\n",
" parameters:\n", " parameters:\n",
@@ -374,10 +365,8 @@
" type: string\n", " type: string\n",
" description: The ID of the hotel to cancel.\n", " description: The ID of the hotel to cancel.\n",
" statement: UPDATE hotels SET booked = B'0' WHERE id = \\$1;\n", " statement: UPDATE hotels SET booked = B'0' WHERE id = \\$1;\n",
"---\n", "toolsets:\n",
"kind: toolsets\n", " my-toolset:\n",
"name: my-toolset\n",
"tools:\n",
" - search-hotels-by-name\n", " - search-hotels-by-name\n",
" - search-hotels-by-location\n", " - search-hotels-by-location\n",
" - book-hotel\n", " - book-hotel\n",
@@ -520,7 +509,8 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"! pip install google-adk[toolbox] --quiet" "! pip install toolbox-core --quiet\n",
"! pip install google-adk --quiet"
] ]
}, },
{ {
@@ -535,18 +525,14 @@
"from google.adk.runners import Runner\n", "from google.adk.runners import Runner\n",
"from google.adk.sessions import InMemorySessionService\n", "from google.adk.sessions import InMemorySessionService\n",
"from google.adk.artifacts.in_memory_artifact_service import InMemoryArtifactService\n", "from google.adk.artifacts.in_memory_artifact_service import InMemoryArtifactService\n",
"from google.adk.tools.toolbox_toolset import ToolboxToolset\n",
"from google.genai import types\n", "from google.genai import types\n",
"from toolbox_core import ToolboxSyncClient\n",
"\n", "\n",
"import os\n", "import os\n",
"# TODO(developer): replace this with your Google API key\n", "# TODO(developer): replace this with your Google API key\n",
"os.environ['GOOGLE_API_KEY'] = \"<GOOGLE_API_KEY>\"\n", "os.environ['GOOGLE_API_KEY'] = \"<GOOGLE_API_KEY>\"\n",
"\n", "\n",
"# Configure toolset\n", "toolbox_client = ToolboxSyncClient(\"http://127.0.0.1:5000\")\n",
"toolset = ToolboxToolset(\n",
" server_url=\"http://127.0.0.1:5000\",\n",
" toolset_name=\"my-toolset\"\n",
")\n",
"\n", "\n",
"prompt = \"\"\"\n", "prompt = \"\"\"\n",
" You're a helpful hotel assistant. You handle hotel searching, booking and\n", " You're a helpful hotel assistant. You handle hotel searching, booking and\n",
@@ -563,7 +549,7 @@
" name='hotel_agent',\n", " name='hotel_agent',\n",
" description='A helpful AI assistant.',\n", " description='A helpful AI assistant.',\n",
" instruction=prompt,\n", " instruction=prompt,\n",
" tools=[toolset],\n", " tools=toolbox_client.load_toolset(\"my-toolset\"),\n",
")\n", ")\n",
"\n", "\n",
"session_service = InMemorySessionService()\n", "session_service = InMemorySessionService()\n",

View File

@@ -36,9 +36,9 @@ Toolbox should have access to. Most tools will have at least one source to
execute against. execute against.
```yaml ```yaml
kind: sources sources:
name: my-pg-source my-pg-source:
type: postgres kind: postgres
host: 127.0.0.1 host: 127.0.0.1
port: 5432 port: 5432
database: toolbox_db database: toolbox_db
@@ -52,13 +52,13 @@ For more details on configuring different types of sources, see the
### Tools ### Tools
The `tools` section of your `tools.yaml` defines the actions your agent can The `tools` section of your `tools.yaml` defines the actions your agent can
take: what type of tool it is, which source(s) it affects, what parameters it take: what kind of tool it is, which source(s) it affects, what parameters it
uses, etc. uses, etc.
```yaml ```yaml
kind: tools tools:
name: search-hotels-by-name search-hotels-by-name:
type: postgres-sql kind: postgres-sql
source: my-pg-source source: my-pg-source
description: Search for hotels based on name. description: Search for hotels based on name.
parameters: parameters:
@@ -78,15 +78,11 @@ that you want to be able to load together. This can be useful for defining
different sets for different agents or different applications. different sets for different agents or different applications.
```yaml ```yaml
kind: toolsets toolsets:
name: my_first_toolset my_first_toolset:
tools:
- my_first_tool - my_first_tool
- my_second_tool - my_second_tool
--- my_second_toolset:
kind: toolsets
name: my_second_toolset
tools:
- my_second_tool - my_second_tool
- my_third_tool - my_third_tool
``` ```
@@ -107,8 +103,8 @@ The `prompts` section of your `tools.yaml` defines the templates containing
structured messages and instructions for interacting with language models. structured messages and instructions for interacting with language models.
```yaml ```yaml
kind: prompts prompts:
name: code_review code_review:
description: "Asks the LLM to analyze code quality and suggest improvements." description: "Asks the LLM to analyze code quality and suggest improvements."
messages: messages:
- content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}" - content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}"

View File

@@ -16,12 +16,6 @@ Databases” as its initial development predated MCP, but was renamed to align
with recently added MCP compatibility. with recently added MCP compatibility.
{{< /notice >}} {{< /notice >}}
{{< notice note >}}
This document has been updated to support the configuration file v2 format. To
view documentation with configuration file v1 format, please navigate to the
top-right menu and select versions v0.26.0 or older.
{{< /notice >}}
## Why Toolbox? ## Why Toolbox?
Toolbox helps you build Gen AI tools that let your agents access data in your Toolbox helps you build Gen AI tools that let your agents access data in your
@@ -109,7 +103,7 @@ To install Toolbox as a binary on Linux (AMD64):
```sh ```sh
# see releases page for other versions # see releases page for other versions
export VERSION=0.26.0 export VERSION=0.25.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox chmod +x toolbox
``` ```
@@ -120,7 +114,7 @@ To install Toolbox as a binary on macOS (Apple Silicon):
```sh ```sh
# see releases page for other versions # see releases page for other versions
export VERSION=0.26.0 export VERSION=0.25.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox
chmod +x toolbox chmod +x toolbox
``` ```
@@ -131,7 +125,7 @@ To install Toolbox as a binary on macOS (Intel):
```sh ```sh
# see releases page for other versions # see releases page for other versions
export VERSION=0.26.0 export VERSION=0.25.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox
chmod +x toolbox chmod +x toolbox
``` ```
@@ -142,7 +136,7 @@ To install Toolbox as a binary on Windows (Command Prompt):
```cmd ```cmd
:: see releases page for other versions :: see releases page for other versions
set VERSION=0.26.0 set VERSION=0.25.0
curl -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v%VERSION%/windows/amd64/toolbox.exe" curl -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v%VERSION%/windows/amd64/toolbox.exe"
``` ```
@@ -152,7 +146,7 @@ To install Toolbox as a binary on Windows (PowerShell):
```powershell ```powershell
# see releases page for other versions # see releases page for other versions
$VERSION = "0.26.0" $VERSION = "0.25.0"
curl.exe -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe" curl.exe -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe"
``` ```
@@ -164,7 +158,7 @@ You can also install Toolbox as a container:
```sh ```sh
# see releases page for other versions # see releases page for other versions
export VERSION=0.26.0 export VERSION=0.25.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
``` ```
@@ -183,7 +177,7 @@ To install from source, ensure you have the latest version of
[Go installed](https://go.dev/doc/install), and then run the following command: [Go installed](https://go.dev/doc/install), and then run the following command:
```sh ```sh
go install github.com/googleapis/genai-toolbox@v0.26.0 go install github.com/googleapis/genai-toolbox@v0.25.0
``` ```
{{% /tab %}} {{% /tab %}}

View File

@@ -52,7 +52,7 @@ runtime](https://research.google.com/colaboratory/local-runtimes.html).
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="ADK" lang="bash" >}} {{< tab header="ADK" lang="bash" >}}
pip install google-adk[toolbox] pip install toolbox-core
{{< /tab >}} {{< /tab >}}
{{< tab header="Langchain" lang="bash" >}} {{< tab header="Langchain" lang="bash" >}}
@@ -73,7 +73,7 @@ pip install toolbox-core
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="ADK" lang="bash" >}} {{< tab header="ADK" lang="bash" >}}
# No other dependencies required for ADK pip install google-adk
{{< /tab >}} {{< /tab >}}
{{< tab header="Langchain" lang="bash" >}} {{< tab header="Langchain" lang="bash" >}}

View File

@@ -105,7 +105,7 @@ In this section, we will download Toolbox, configure our tools in a
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
```bash ```bash
export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64 export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/$OS/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/$OS/toolbox
``` ```
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->
@@ -125,18 +125,17 @@ In this section, we will download Toolbox, configure our tools in a
{{< /notice >}} {{< /notice >}}
```yaml ```yaml
kind: sources sources:
name: my-pg-source my-pg-source:
type: postgres kind: postgres
host: 127.0.0.1 host: 127.0.0.1
port: 5432 port: 5432
database: toolbox_db database: toolbox_db
user: toolbox_user user: toolbox_user
password: my-password password: my-password
--- tools:
kind: tools search-hotels-by-name:
name: search-hotels-by-name kind: postgres-sql
type: postgres-sql
source: my-pg-source source: my-pg-source
description: Search for hotels based on name. description: Search for hotels based on name.
parameters: parameters:
@@ -144,10 +143,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The name of the hotel. description: The name of the hotel.
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%'; statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
--- search-hotels-by-location:
kind: tools kind: postgres-sql
name: search-hotels-by-location
type: postgres-sql
source: my-pg-source source: my-pg-source
description: Search for hotels based on location. description: Search for hotels based on location.
parameters: parameters:
@@ -155,10 +152,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The location of the hotel. description: The location of the hotel.
statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%'; statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';
--- book-hotel:
kind: tools kind: postgres-sql
name: book-hotel
type: postgres-sql
source: my-pg-source source: my-pg-source
description: >- description: >-
Book a hotel by its ID. If the hotel is successfully booked, returns a NULL, raises an error if not. Book a hotel by its ID. If the hotel is successfully booked, returns a NULL, raises an error if not.
@@ -167,10 +162,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The ID of the hotel to book. description: The ID of the hotel to book.
statement: UPDATE hotels SET booked = B'1' WHERE id = $1; statement: UPDATE hotels SET booked = B'1' WHERE id = $1;
--- update-hotel:
kind: tools kind: postgres-sql
name: update-hotel
type: postgres-sql
source: my-pg-source source: my-pg-source
description: >- description: >-
Update a hotel's check-in and check-out dates by its ID. Returns a message Update a hotel's check-in and check-out dates by its ID. Returns a message
@@ -188,10 +181,8 @@ In this section, we will download Toolbox, configure our tools in a
statement: >- statement: >-
UPDATE hotels SET checkin_date = CAST($2 as date), checkout_date = CAST($3 UPDATE hotels SET checkin_date = CAST($2 as date), checkout_date = CAST($3
as date) WHERE id = $1; as date) WHERE id = $1;
--- cancel-hotel:
kind: tools kind: postgres-sql
name: cancel-hotel
type: postgres-sql
source: my-pg-source source: my-pg-source
description: Cancel a hotel by its ID. description: Cancel a hotel by its ID.
parameters: parameters:
@@ -199,10 +190,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The ID of the hotel to cancel. description: The ID of the hotel to cancel.
statement: UPDATE hotels SET booked = B'0' WHERE id = $1; statement: UPDATE hotels SET booked = B'0' WHERE id = $1;
--- toolsets:
kind: toolsets my-toolset:
name: my-toolset
tools:
- search-hotels-by-name - search-hotels-by-name
- search-hotels-by-location - search-hotels-by-location
- book-hotel - book-hotel

View File

@@ -157,18 +157,17 @@ Create a file named `tools.yaml`. This file defines the database connection, the
SQL tools available, and the prompts the agents will use. SQL tools available, and the prompts the agents will use.
```yaml ```yaml
kind: sources sources:
name: my-foodiefind-db my-foodiefind-db:
type: postgres kind: postgres
host: 127.0.0.1 host: 127.0.0.1
port: 5432 port: 5432
database: toolbox_db database: toolbox_db
user: toolbox_user user: toolbox_user
password: my-password password: my-password
--- tools:
kind: tools find_user_by_email:
name: find_user_by_email kind: postgres-sql
type: postgres-sql
source: my-foodiefind-db source: my-foodiefind-db
description: Find a user's ID by their email address. description: Find a user's ID by their email address.
parameters: parameters:
@@ -176,10 +175,8 @@ parameters:
type: string type: string
description: The email address of the user to find. description: The email address of the user to find.
statement: SELECT id FROM users WHERE email = $1; statement: SELECT id FROM users WHERE email = $1;
--- find_restaurant_by_name:
kind: tools kind: postgres-sql
name: find_restaurant_by_name
type: postgres-sql
source: my-foodiefind-db source: my-foodiefind-db
description: Find a restaurant's ID by its exact name. description: Find a restaurant's ID by its exact name.
parameters: parameters:
@@ -187,10 +184,8 @@ parameters:
type: string type: string
description: The name of the restaurant to find. description: The name of the restaurant to find.
statement: SELECT id FROM restaurants WHERE name = $1; statement: SELECT id FROM restaurants WHERE name = $1;
--- find_review_by_user_and_restaurant:
kind: tools kind: postgres-sql
name: find_review_by_user_and_restaurant
type: postgres-sql
source: my-foodiefind-db source: my-foodiefind-db
description: Find the full record for a specific review using the user's ID and the restaurant's ID. description: Find the full record for a specific review using the user's ID and the restaurant's ID.
parameters: parameters:
@@ -201,9 +196,8 @@ parameters:
type: integer type: integer
description: The numerical ID of the restaurant. description: The numerical ID of the restaurant.
statement: SELECT * FROM reviews WHERE user_id = $1 AND restaurant_id = $2; statement: SELECT * FROM reviews WHERE user_id = $1 AND restaurant_id = $2;
--- prompts:
kind: prompts investigate_missing_review:
name: investigate_missing_review
description: "Investigates a user's missing review by finding the user, restaurant, and the review itself, then analyzing its status." description: "Investigates a user's missing review by finding the user, restaurant, and the review itself, then analyzing its status."
arguments: arguments:
- name: "user_email" - name: "user_email"

View File

@@ -24,13 +24,12 @@
} }
}, },
"node_modules/@dabh/diagnostics": { "node_modules/@dabh/diagnostics": {
"version": "2.0.8", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
"integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
"license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"@so-ric/colorspace": "^1.1.6", "colorspace": "1.1.x",
"enabled": "2.0.x", "enabled": "2.0.x",
"kuler": "^2.0.0" "kuler": "^2.0.0"
} }
@@ -579,10 +578,9 @@
} }
}, },
"node_modules/@google-cloud/firestore": { "node_modules/@google-cloud/firestore": {
"version": "7.11.6", "version": "7.11.3",
"resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.6.tgz", "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.3.tgz",
"integrity": "sha512-EW/O8ktzwLfyWBOsNuhRoMi8lrC3clHM5LVFhGvO1HCsLozCOOXRAlHrYBoE6HL42Sc8yYMuCb2XqcnJ4OOEpw==", "integrity": "sha512-qsM3/WHpawF07SRVvEJJVRwhYzM7o9qtuksyuqnrMig6fxIrwWnsezECWsG/D5TyYru51Fv5c/RTqNDQ2yU+4w==",
"license": "Apache-2.0",
"optional": true, "optional": true,
"peer": true, "peer": true,
"dependencies": { "dependencies": {
@@ -2889,17 +2887,6 @@
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
}, },
"node_modules/@so-ric/colorspace": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz",
"integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==",
"license": "MIT",
"optional": true,
"dependencies": {
"color": "^5.0.2",
"text-hex": "1.0.x"
}
},
"node_modules/@toolbox-sdk/core": { "node_modules/@toolbox-sdk/core": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/@toolbox-sdk/core/-/core-0.1.2.tgz", "resolved": "https://registry.npmjs.org/@toolbox-sdk/core/-/core-0.1.2.tgz",
@@ -3528,53 +3515,38 @@
} }
}, },
"node_modules/color": { "node_modules/color": {
"version": "5.0.3", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
"integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
"license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"color-convert": "^3.1.3", "color-convert": "^1.9.3",
"color-string": "^2.1.3" "color-string": "^1.6.0"
},
"engines": {
"node": ">=18"
} }
}, },
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "3.1.3", "version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"color-name": "^2.0.0" "color-name": "1.1.3"
},
"engines": {
"node": ">=14.6"
} }
}, },
"node_modules/color-name": { "node_modules/color-name": {
"version": "2.1.0", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"license": "MIT", "optional": true
"optional": true,
"engines": {
"node": ">=12.20"
}
}, },
"node_modules/color-string": { "node_modules/color-string": {
"version": "2.1.4", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
"license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"color-name": "^2.0.0" "color-name": "^1.0.0",
}, "simple-swizzle": "^0.2.2"
"engines": {
"node": ">=18"
} }
}, },
"node_modules/colorette": { "node_modules/colorette": {
@@ -3582,6 +3554,16 @@
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="
}, },
"node_modules/colorspace": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
"integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
"optional": true,
"dependencies": {
"color": "^3.1.3",
"text-hex": "1.0.x"
}
},
"node_modules/combined-stream": { "node_modules/combined-stream": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -4986,6 +4968,12 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
"optional": true
},
"node_modules/is-core-module": { "node_modules/is-core-module": {
"version": "2.16.1", "version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
@@ -5126,14 +5114,13 @@
} }
}, },
"node_modules/jsonwebtoken/node_modules/jws": { "node_modules/jsonwebtoken/node_modules/jws": {
"version": "3.2.3", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"license": "MIT",
"optional": true, "optional": true,
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"jwa": "^1.4.2", "jwa": "^1.4.1",
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
}, },
@@ -5166,12 +5153,11 @@
} }
}, },
"node_modules/jws": { "node_modules/jws": {
"version": "4.0.1", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
"integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
"license": "MIT",
"dependencies": { "dependencies": {
"jwa": "^2.0.1", "jwa": "^2.0.0",
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
}, },
@@ -5438,10 +5424,9 @@
} }
}, },
"node_modules/node-forge": { "node_modules/node-forge": {
"version": "1.3.3", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
"integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"license": "(BSD-3-Clause OR GPL-2.0)",
"optional": true, "optional": true,
"peer": true, "peer": true,
"engines": { "engines": {
@@ -6053,6 +6038,15 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"optional": true,
"dependencies": {
"is-arrayish": "^0.3.1"
}
},
"node_modules/source-map": { "node_modules/source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -6239,7 +6233,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
"license": "MIT",
"optional": true "optional": true
}, },
"node_modules/thriftrw": { "node_modules/thriftrw": {
@@ -6423,14 +6416,13 @@
} }
}, },
"node_modules/winston": { "node_modules/winston": {
"version": "3.19.0", "version": "3.17.0",
"resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz",
"integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==",
"license": "MIT",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"@colors/colors": "^1.6.0", "@colors/colors": "^1.6.0",
"@dabh/diagnostics": "^2.0.8", "@dabh/diagnostics": "^2.0.2",
"async": "^3.2.3", "async": "^3.2.3",
"is-stream": "^2.0.0", "is-stream": "^2.0.0",
"logform": "^2.7.0", "logform": "^2.7.0",

View File

@@ -975,10 +975,9 @@
} }
}, },
"node_modules/lodash": { "node_modules/lodash": {
"version": "4.17.23", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"license": "MIT"
}, },
"node_modules/magic-bytes.js": { "node_modules/magic-bytes.js": {
"version": "1.12.1", "version": "1.12.1",

View File

@@ -1,17 +1,15 @@
from google.adk import Agent from google.adk import Agent
from google.adk.apps import App from google.adk.apps import App
from google.adk.tools.toolbox_toolset import ToolboxToolset from toolbox_core import ToolboxSyncClient
# TODO(developer): update the TOOLBOX_URL to your toolbox endpoint # TODO(developer): update the TOOLBOX_URL to your toolbox endpoint
toolset = ToolboxToolset( client = ToolboxSyncClient("http://127.0.0.1:5000")
server_url="http://127.0.0.1:5000",
)
root_agent = Agent( root_agent = Agent(
name='root_agent', name='root_agent',
model='gemini-2.5-flash', model='gemini-2.5-flash',
instruction="You are a helpful AI assistant designed to provide accurate and useful information.", instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
tools=[toolset], tools=client.load_toolset(),
) )
app = App(root_agent=root_agent, name="my_agent") app = App(root_agent=root_agent, name="my_agent")

View File

@@ -1,2 +1,3 @@
google-adk[toolbox]==1.23.0 google-adk==1.21.0
toolbox-core==0.5.4
pytest==9.0.2 pytest==9.0.2

View File

@@ -13,7 +13,7 @@ In this section, we will download Toolbox, configure our tools in a
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
```bash ```bash
export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64 export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/$OS/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/$OS/toolbox
``` ```
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->
@@ -33,18 +33,17 @@ In this section, we will download Toolbox, configure our tools in a
{{< /notice >}} {{< /notice >}}
```yaml ```yaml
kind: sources sources:
name: my-pg-source my-pg-source:
type: postgres kind: postgres
host: 127.0.0.1 host: 127.0.0.1
port: 5432 port: 5432
database: toolbox_db database: toolbox_db
user: toolbox_user user: ${USER_NAME}
password: my-password password: ${PASSWORD}
--- tools:
kind: tools search-hotels-by-name:
name: search-hotels-by-name kind: postgres-sql
type: postgres-sql
source: my-pg-source source: my-pg-source
description: Search for hotels based on name. description: Search for hotels based on name.
parameters: parameters:
@@ -52,10 +51,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The name of the hotel. description: The name of the hotel.
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%'; statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
--- search-hotels-by-location:
kind: tools kind: postgres-sql
name: search-hotels-by-location
type: postgres-sql
source: my-pg-source source: my-pg-source
description: Search for hotels based on location. description: Search for hotels based on location.
parameters: parameters:
@@ -63,10 +60,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The location of the hotel. description: The location of the hotel.
statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%'; statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';
--- book-hotel:
kind: tools kind: postgres-sql
name: book-hotel
type: postgres-sql
source: my-pg-source source: my-pg-source
description: >- description: >-
Book a hotel by its ID. If the hotel is successfully booked, returns a NULL, raises an error if not. Book a hotel by its ID. If the hotel is successfully booked, returns a NULL, raises an error if not.
@@ -75,10 +70,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The ID of the hotel to book. description: The ID of the hotel to book.
statement: UPDATE hotels SET booked = B'1' WHERE id = $1; statement: UPDATE hotels SET booked = B'1' WHERE id = $1;
--- update-hotel:
kind: tools kind: postgres-sql
name: update-hotel
type: postgres-sql
source: my-pg-source source: my-pg-source
description: >- description: >-
Update a hotel's check-in and check-out dates by its ID. Returns a message Update a hotel's check-in and check-out dates by its ID. Returns a message
@@ -96,10 +89,8 @@ In this section, we will download Toolbox, configure our tools in a
statement: >- statement: >-
UPDATE hotels SET checkin_date = CAST($2 as date), checkout_date = CAST($3 UPDATE hotels SET checkin_date = CAST($2 as date), checkout_date = CAST($3
as date) WHERE id = $1; as date) WHERE id = $1;
--- cancel-hotel:
kind: tools kind: postgres-sql
name: cancel-hotel
type: postgres-sql
source: my-pg-source source: my-pg-source
description: Cancel a hotel by its ID. description: Cancel a hotel by its ID.
parameters: parameters:
@@ -107,10 +98,8 @@ In this section, we will download Toolbox, configure our tools in a
type: string type: string
description: The ID of the hotel to cancel. description: The ID of the hotel to cancel.
statement: UPDATE hotels SET booked = B'0' WHERE id = $1; statement: UPDATE hotels SET booked = B'0' WHERE id = $1;
--- toolsets:
kind: toolsets my-toolset:
name: my-toolset
tools:
- search-hotels-by-name - search-hotels-by-name
- search-hotels-by-location - search-hotels-by-location
- book-hotel - book-hotel

View File

@@ -54,7 +54,6 @@ instance, database and users:
* `create_instance` * `create_instance`
* `create_user` * `create_user`
* `clone_instance` * `clone_instance`
* `restore_backup`
## Install MCP Toolbox ## Install MCP Toolbox
@@ -302,7 +301,6 @@ instances and interacting with your database:
* **wait_for_operation**: Waits for a Cloud SQL operation to complete. * **wait_for_operation**: Waits for a Cloud SQL operation to complete.
* **clone_instance**: Creates a clone of an existing Cloud SQL for SQL Server instance. * **clone_instance**: Creates a clone of an existing Cloud SQL for SQL Server instance.
* **create_backup**: Creates a backup on a Cloud SQL instance. * **create_backup**: Creates a backup on a Cloud SQL instance.
* **restore_backup**: Restores a backup of a Cloud SQL instance.
{{< notice note >}} {{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs

View File

@@ -54,7 +54,6 @@ database and users:
* `create_instance` * `create_instance`
* `create_user` * `create_user`
* `clone_instance` * `clone_instance`
* `restore_backup`
## Install MCP Toolbox ## Install MCP Toolbox
@@ -302,7 +301,6 @@ instances and interacting with your database:
* **wait_for_operation**: Waits for a Cloud SQL operation to complete. * **wait_for_operation**: Waits for a Cloud SQL operation to complete.
* **clone_instance**: Creates a clone of an existing Cloud SQL for MySQL instance. * **clone_instance**: Creates a clone of an existing Cloud SQL for MySQL instance.
* **create_backup**: Creates a backup on a Cloud SQL instance. * **create_backup**: Creates a backup on a Cloud SQL instance.
* **restore_backup**: Restores a backup of a Cloud SQL instance.
{{< notice note >}} {{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs

View File

@@ -54,7 +54,6 @@ instance, database and users:
* `create_instance` * `create_instance`
* `create_user` * `create_user`
* `clone_instance` * `clone_instance`
* `restore_backup`
## Install MCP Toolbox ## Install MCP Toolbox
@@ -302,7 +301,6 @@ instances and interacting with your database:
* **wait_for_operation**: Waits for a Cloud SQL operation to complete. * **wait_for_operation**: Waits for a Cloud SQL operation to complete.
* **clone_instance**: Creates a clone of an existing Cloud SQL for PostgreSQL instance. * **clone_instance**: Creates a clone of an existing Cloud SQL for PostgreSQL instance.
* **create_backup**: Creates a backup on a Cloud SQL instance. * **create_backup**: Creates a backup on a Cloud SQL instance.
* **restore_backup**: Restores a backup of a Cloud SQL instance.
{{< notice note >}} {{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs

View File

@@ -100,19 +100,19 @@ After you install Looker in the MCP Store, resources and tools from the server a
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}} {{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/linux/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/linux/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}} {{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/arm64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/arm64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}} {{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}} {{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/windows/amd64/toolbox.exe curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/windows/amd64/toolbox.exe
{{< /tab >}} {{< /tab >}}
{{< /tabpane >}} {{< /tabpane >}}
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->

View File

@@ -45,19 +45,19 @@ instance:
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}} {{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/linux/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/linux/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}} {{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/arm64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/arm64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}} {{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}} {{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/windows/amd64/toolbox.exe curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/windows/amd64/toolbox.exe
{{< /tab >}} {{< /tab >}}
{{< /tabpane >}} {{< /tabpane >}}
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->

View File

@@ -43,19 +43,19 @@ expose your developer assistant tools to a MySQL instance:
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}} {{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/linux/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/linux/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}} {{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/arm64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/arm64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}} {{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}} {{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/windows/amd64/toolbox.exe curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/windows/amd64/toolbox.exe
{{< /tab >}} {{< /tab >}}
{{< /tabpane >}} {{< /tabpane >}}
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->

View File

@@ -44,19 +44,19 @@ expose your developer assistant tools to a Neo4j instance:
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}} {{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/linux/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/linux/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}} {{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/arm64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/arm64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}} {{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}} {{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/windows/amd64/toolbox.exe curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/windows/amd64/toolbox.exe
{{< /tab >}} {{< /tab >}}
{{< /tabpane >}} {{< /tabpane >}}
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->

View File

@@ -56,19 +56,19 @@ Omni](https://cloud.google.com/alloydb/omni/current/docs/overview).
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}} {{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/linux/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/linux/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}} {{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/arm64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/arm64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}} {{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}} {{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/windows/amd64/toolbox.exe curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/windows/amd64/toolbox.exe
{{< /tab >}} {{< /tab >}}
{{< /tabpane >}} {{< /tabpane >}}
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->

View File

@@ -43,19 +43,19 @@ to expose your developer assistant tools to a SQLite instance:
<!-- {x-release-please-start-version} --> <!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}} {{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}} {{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/linux/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/linux/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}} {{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/arm64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/arm64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}} {{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/darwin/amd64/toolbox curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/darwin/amd64/toolbox
{{< /tab >}} {{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}} {{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.26.0/windows/amd64/toolbox.exe curl -O https://storage.googleapis.com/genai-toolbox/v0.25.0/windows/amd64/toolbox.exe
{{< /tab >}} {{< /tab >}}
{{< /tabpane >}} {{< /tabpane >}}
<!-- {x-release-please-end} --> <!-- {x-release-please-end} -->

View File

@@ -20,7 +20,6 @@ The native SDKs can be combined with MCP clients in many cases.
Toolbox currently supports the following versions of MCP specification: Toolbox currently supports the following versions of MCP specification:
* [2025-11-25](https://modelcontextprotocol.io/specification/2025-11-25)
* [2025-06-18](https://modelcontextprotocol.io/specification/2025-06-18) * [2025-06-18](https://modelcontextprotocol.io/specification/2025-06-18)
* [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26) * [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26)
* [2024-11-05](https://modelcontextprotocol.io/specification/2024-11-05) * [2024-11-05](https://modelcontextprotocol.io/specification/2024-11-05)

View File

@@ -46,10 +46,10 @@ with the necessary configuration for deployment to Vertex AI Agent Engine.
process will generate deployment configuration files (like a `Makefile` and process will generate deployment configuration files (like a `Makefile` and
`Dockerfile`) in your project directory. `Dockerfile`) in your project directory.
4. Add `google-adk[toolbox]` as a dependency to the new project: 4. Add `toolbox-core` as a dependency to the new project:
```bash ```bash
uv add google-adk[toolbox] uv add toolbox-core
``` ```
## Step 3: Configure Google Cloud Authentication ## Step 3: Configure Google Cloud Authentication
@@ -95,23 +95,22 @@ authentication token.
```python ```python
from google.adk import Agent from google.adk import Agent
from google.adk.apps import App from google.adk.apps import App
from google.adk.tools.toolbox_toolset import ToolboxToolset from toolbox_core import ToolboxSyncClient, auth_methods
from toolbox_adk import CredentialStrategy
# TODO(developer): Replace with your Toolbox Cloud Run Service URL # TODO(developer): Replace with your Toolbox Cloud Run Service URL
TOOLBOX_URL = "https://your-toolbox-service-xyz.a.run.app" TOOLBOX_URL = "https://your-toolbox-service-xyz.a.run.app"
# Initialize the toolset with Workload Identity (generates ID token for the URL) # Initialize the client with the Cloud Run URL and Auth headers
toolset = ToolboxToolset( client = ToolboxSyncClient(
server_url=TOOLBOX_URL, TOOLBOX_URL,
credentials=CredentialStrategy.workload_identity(target_audience=TOOLBOX_URL) client_headers={"Authorization": auth_methods.get_google_id_token(TOOLBOX_URL)}
) )
root_agent = Agent( root_agent = Agent(
name='root_agent', name='root_agent',
model='gemini-2.5-flash', model='gemini-2.5-flash',
instruction="You are a helpful AI assistant designed to provide accurate and useful information.", instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
tools=[toolset], tools=client.load_toolset(),
) )
app = App(root_agent=root_agent, name="my_agent") app = App(root_agent=root_agent, name="my_agent")

View File

@@ -207,7 +207,6 @@ You can connect to Toolbox Cloud Run instances directly through the SDK.
{{< tab header="Python" lang="python" >}} {{< tab header="Python" lang="python" >}}
import asyncio import asyncio
from toolbox_core import ToolboxClient, auth_methods from toolbox_core import ToolboxClient, auth_methods
from toolbox_core.protocol import Protocol
# Replace with the Cloud Run service URL generated in the previous step # Replace with the Cloud Run service URL generated in the previous step
URL = "https://cloud-run-url.app" URL = "https://cloud-run-url.app"
@@ -218,7 +217,6 @@ async def main():
async with ToolboxClient( async with ToolboxClient(
URL, URL,
client_headers={"Authorization": auth_token_provider}, client_headers={"Authorization": auth_token_provider},
protocol=Protocol.TOOLBOX,
) as toolbox: ) as toolbox:
toolset = await toolbox.load_toolset() toolset = await toolbox.load_toolset()
# ... # ...
@@ -283,5 +281,3 @@ contain the specific error message needed to diagnose the problem.
Manager, it means the Toolbox service account is missing permissions. Manager, it means the Toolbox service account is missing permissions.
- Ensure the `toolbox-identity` service account has the **Secret Manager - Ensure the `toolbox-identity` service account has the **Secret Manager
Secret Accessor** (`roles/secretmanager.secretAccessor`) IAM role. Secret Accessor** (`roles/secretmanager.secretAccessor`) IAM role.
- **Cloud Run Connections via IAP:** Currently we do not support Cloud Run connections via [IAP](https://docs.cloud.google.com/iap/docs/concepts-overview). Please disable IAP if you are using it.

View File

@@ -16,7 +16,7 @@ description: >
| | `--log-level` | Specify the minimum level logged. Allowed: 'DEBUG', 'INFO', 'WARN', 'ERROR'. | `info` | | | `--log-level` | Specify the minimum level logged. Allowed: 'DEBUG', 'INFO', 'WARN', 'ERROR'. | `info` |
| | `--logging-format` | Specify logging format to use. Allowed: 'standard' or 'JSON'. | `standard` | | | `--logging-format` | Specify logging format to use. Allowed: 'standard' or 'JSON'. | `standard` |
| `-p` | `--port` | Port the server will listen on. | `5000` | | `-p` | `--port` | Port the server will listen on. | `5000` |
| | `--prebuilt` | Use one or more prebuilt tool configuration by source type. See [Prebuilt Tools Reference](prebuilt-tools.md) for allowed values. | | | | `--prebuilt` | Use a prebuilt tool configuration by source type. See [Prebuilt Tools Reference](prebuilt-tools.md) for allowed values. | |
| | `--stdio` | Listens via MCP STDIO instead of acting as a remote HTTP server. | | | | `--stdio` | Listens via MCP STDIO instead of acting as a remote HTTP server. | |
| | `--telemetry-gcp` | Enable exporting directly to Google Cloud Monitoring. | | | | `--telemetry-gcp` | Enable exporting directly to Google Cloud Monitoring. | |
| | `--telemetry-otlp` | Enable exporting using OpenTelemetry Protocol (OTLP) to the specified endpoint (e.g. 'http://127.0.0.1:4318') | | | | `--telemetry-otlp` | Enable exporting using OpenTelemetry Protocol (OTLP) to the specified endpoint (e.g. 'http://127.0.0.1:4318') | |
@@ -27,7 +27,6 @@ description: >
| | `--ui` | Launches the Toolbox UI web server. | | | | `--ui` | Launches the Toolbox UI web server. | |
| | `--allowed-origins` | Specifies a list of origins permitted to access this server for CORs access. | `*` | | | `--allowed-origins` | Specifies a list of origins permitted to access this server for CORs access. | `*` |
| | `--allowed-hosts` | Specifies a list of hosts permitted to access this server to prevent DNS rebinding attacks. | `*` | | | `--allowed-hosts` | Specifies a list of hosts permitted to access this server to prevent DNS rebinding attacks. | `*` |
| | `--user-agent-metadata` | Appends additional metadata to the User-Agent. | |
| `-v` | `--version` | version for toolbox | | | `-v` | `--version` | version for toolbox | |
## Examples ## Examples
@@ -51,11 +50,6 @@ description: >
# Server with prebuilt + custom tools configurations # Server with prebuilt + custom tools configurations
./toolbox --tools-file tools.yaml --prebuilt alloydb-postgres ./toolbox --tools-file tools.yaml --prebuilt alloydb-postgres
# Server with multiple prebuilt tools configurations
./toolbox --prebuilt alloydb-postgres,alloydb-postgres-admin
# OR
./toolbox --prebuilt alloydb-postgres --prebuilt alloydb-postgres-admin
``` ```
### Tool Configuration Sources ### Tool Configuration Sources
@@ -76,7 +70,7 @@ The CLI supports multiple mutually exclusive ways to specify tool configurations
**Prebuilt Configurations:** **Prebuilt Configurations:**
- `--prebuilt`: Use one or more predefined configurations for specific database types (e.g., - `--prebuilt`: Use predefined configurations for specific database types (e.g.,
'bigquery', 'postgres', 'spanner'). See [Prebuilt Tools 'bigquery', 'postgres', 'spanner'). See [Prebuilt Tools
Reference](prebuilt-tools.md) for allowed values. Reference](prebuilt-tools.md) for allowed values.

View File

@@ -16,9 +16,6 @@ details on how to connect your AI tools (IDEs) to databases via Toolbox and MCP.
{{< notice tip >}} {{< notice tip >}}
You can now use `--prebuilt` along `--tools-file`, `--tools-files`, or You can now use `--prebuilt` along `--tools-file`, `--tools-files`, or
`--tools-folder` to combine prebuilt configs with custom tools. `--tools-folder` to combine prebuilt configs with custom tools.
You can also combine multiple prebuilt configs.
See [Usage Examples](../reference/cli.md#examples). See [Usage Examples](../reference/cli.md#examples).
{{< /notice >}} {{< /notice >}}
@@ -197,7 +194,6 @@ See [Usage Examples](../reference/cli.md#examples).
* `create_instance` * `create_instance`
* `create_user` * `create_user`
* `clone_instance` * `clone_instance`
* `restore_backup`
* **Tools:** * **Tools:**
* `create_instance`: Creates a new Cloud SQL for MySQL instance. * `create_instance`: Creates a new Cloud SQL for MySQL instance.
@@ -209,7 +205,6 @@ See [Usage Examples](../reference/cli.md#examples).
* `wait_for_operation`: Waits for a Cloud SQL operation to complete. * `wait_for_operation`: Waits for a Cloud SQL operation to complete.
* `clone_instance`: Creates a clone for an existing Cloud SQL for MySQL instance. * `clone_instance`: Creates a clone for an existing Cloud SQL for MySQL instance.
* `create_backup`: Creates a backup on a Cloud SQL instance. * `create_backup`: Creates a backup on a Cloud SQL instance.
* `restore_backup`: Restores a backup of a Cloud SQL instance.
## Cloud SQL for PostgreSQL ## Cloud SQL for PostgreSQL
@@ -289,7 +284,6 @@ See [Usage Examples](../reference/cli.md#examples).
* `create_instance` * `create_instance`
* `create_user` * `create_user`
* `clone_instance` * `clone_instance`
* `restore_backup`
* **Tools:** * **Tools:**
* `create_instance`: Creates a new Cloud SQL for PostgreSQL instance. * `create_instance`: Creates a new Cloud SQL for PostgreSQL instance.
* `get_instance`: Gets information about a Cloud SQL instance. * `get_instance`: Gets information about a Cloud SQL instance.
@@ -300,7 +294,6 @@ See [Usage Examples](../reference/cli.md#examples).
* `wait_for_operation`: Waits for a Cloud SQL operation to complete. * `wait_for_operation`: Waits for a Cloud SQL operation to complete.
* `clone_instance`: Creates a clone for an existing Cloud SQL for PostgreSQL instance. * `clone_instance`: Creates a clone for an existing Cloud SQL for PostgreSQL instance.
* `create_backup`: Creates a backup on a Cloud SQL instance. * `create_backup`: Creates a backup on a Cloud SQL instance.
* `restore_backup`: Restores a backup of a Cloud SQL instance.
## Cloud SQL for SQL Server ## Cloud SQL for SQL Server
@@ -354,7 +347,6 @@ See [Usage Examples](../reference/cli.md#examples).
* `create_instance` * `create_instance`
* `create_user` * `create_user`
* `clone_instance` * `clone_instance`
* `restore_backup`
* **Tools:** * **Tools:**
* `create_instance`: Creates a new Cloud SQL for SQL Server instance. * `create_instance`: Creates a new Cloud SQL for SQL Server instance.
* `get_instance`: Gets information about a Cloud SQL instance. * `get_instance`: Gets information about a Cloud SQL instance.
@@ -365,7 +357,6 @@ See [Usage Examples](../reference/cli.md#examples).
* `wait_for_operation`: Waits for a Cloud SQL operation to complete. * `wait_for_operation`: Waits for a Cloud SQL operation to complete.
* `clone_instance`: Creates a clone for an existing Cloud SQL for SQL Server instance. * `clone_instance`: Creates a clone for an existing Cloud SQL for SQL Server instance.
* `create_backup`: Creates a backup on a Cloud SQL instance. * `create_backup`: Creates a backup on a Cloud SQL instance.
* `restore_backup`: Restores a backup of a Cloud SQL instance.
## Dataplex ## Dataplex

View File

@@ -28,18 +28,16 @@ The following configurations are placed at the top level of a `tools.yaml` file.
{{< notice tip >}} {{< notice tip >}}
If you are accessing Toolbox with multiple applications, each If you are accessing Toolbox with multiple applications, each
application should register their own Client ID even if they use the same application should register their own Client ID even if they use the same
"type" of auth provider. "kind" of auth provider.
{{< /notice >}} {{< /notice >}}
```yaml ```yaml
kind: authServices authServices:
name: my_auth_app_1 my_auth_app_1:
type: google kind: google
clientId: ${YOUR_CLIENT_ID_1} clientId: ${YOUR_CLIENT_ID_1}
--- my_auth_app_2:
kind: authServices kind: google
name: my_auth_app_2
type: google
clientId: ${YOUR_CLIENT_ID_2} clientId: ${YOUR_CLIENT_ID_2}
``` ```

View File

@@ -40,9 +40,9 @@ id-token][provided-claims] can be used for the parameter.
## Example ## Example
```yaml ```yaml
kind: authServices authServices:
name: my-google-auth my-google-auth:
type: google kind: google
clientId: ${YOUR_GOOGLE_CLIENT_ID} clientId: ${YOUR_GOOGLE_CLIENT_ID}
``` ```
@@ -55,5 +55,5 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|------------------------------------------------------------------| |-----------|:--------:|:------------:|------------------------------------------------------------------|
| type | string | true | Must be "google". | | kind | string | true | Must be "google". |
| clientId | string | true | Client ID of your application from registering your application. | | clientId | string | true | Client ID of your application from registering your application. |

View File

@@ -3,14 +3,13 @@ title: "EmbeddingModels"
type: docs type: docs
weight: 2 weight: 2
description: > description: >
EmbeddingModels represent services that transform text into vector embeddings EmbeddingModels represent services that transform text into vector embeddings for semantic search.
for semantic search.
--- ---
EmbeddingModels represent services that generate vector representations of text EmbeddingModels represent services that generate vector representations of text
data. In the MCP Toolbox, these models enable **Semantic Queries**, allowing data. In the MCP Toolbox, these models enable **Semantic Queries**,
[Tools](../tools/) to automatically convert human-readable text into numerical allowing [Tools](../tools/) to automatically convert human-readable text into
vectors before using them in a query. numerical vectors before using them in a query.
This is primarily used in two scenarios: This is primarily used in two scenarios:
@@ -20,33 +19,14 @@ This is primarily used in two scenarios:
- **Semantic Search**: Converting a natural language query into a vector to - **Semantic Search**: Converting a natural language query into a vector to
perform similarity searches. perform similarity searches.
## Hidden Parameter Duplication (valueFromParam)
When building tools for vector ingestion, you often need the same input string
twice:
1. To store the original text in a TEXT column.
1. To generate the vector embedding for a VECTOR column.
Requesting an Agent (LLM) to output the exact same string twice is inefficient
and error-prone. The `valueFromParam` field solves this by allowing a parameter
to inherit its value from another parameter in the same tool.
### Key Behaviors
1. Hidden from Manifest: Parameters with valueFromParam set are excluded from
the tool definition sent to the Agent. The Agent does not know this parameter
exists.
1. Auto-Filled: When the tool is executed, the Toolbox automatically copies the
value from the referenced parameter before processing embeddings.
## Example ## Example
The following configuration defines an embedding model and applies it to The following configuration defines an embedding model and applies it to
specific tool parameters. specific tool parameters.
{{< notice tip >}} Use environment variable replacement with the format {{< notice tip >}}
${ENV_NAME} instead of hardcoding your API keys into the configuration file. Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your API keys into the configuration file.
{{< /notice >}} {{< /notice >}}
### Step 1 - Define an Embedding Model ### Step 1 - Define an Embedding Model
@@ -54,24 +34,26 @@ ${ENV_NAME} instead of hardcoding your API keys into the configuration file.
Define an embedding model in the `embeddingModels` section: Define an embedding model in the `embeddingModels` section:
```yaml ```yaml
kind: embeddingModels embeddingModels:
name: gemini-model # Name of the embedding model gemini-model: # Name of the embedding model
type: gemini kind: gemini
model: gemini-embedding-001 model: gemini-embedding-001
apiKey: ${GOOGLE_API_KEY} apiKey: ${GOOGLE_API_KEY}
dimension: 768 dimension: 768
``` ```
### Step 2 - Embed Tool Parameters ### Step 2 - Embed Tool Parameters
Use the defined embedding model, embed your query parameters using the Use the defined embedding model, embed your query parameters using the
`embeddedBy` field. Only string-typed parameters can be embedded: `embeddedBy` field. Only string-typed
parameters can be embedded:
```yaml ```yaml
tools:
# Vector ingestion tool # Vector ingestion tool
kind: tools insert_embedding:
name: insert_embedding kind: postgres-sql
type: postgres-sql
source: my-pg-instance source: my-pg-instance
statement: | statement: |
INSERT INTO documents (content, embedding) INSERT INTO documents (content, embedding)
@@ -79,18 +61,14 @@ statement: |
parameters: parameters:
- name: content - name: content
type: string type: string
description: The raw text content to be stored in the database.
- name: vector_string - name: vector_string
type: string type: string
# This parameter is hidden from the LLM. description: The text to be vectorized and stored.
# It automatically copies the value from 'content' and embeds it. embeddedBy: gemini-model # refers to the name of a defined embedding model
valueFromParam: content
embeddedBy: gemini-model
---
# Semantic search tool # Semantic search tool
kind: tools search_embedding:
name: search_embedding kind: postgres-sql
type: postgres-sql
source: my-pg-instance source: my-pg-instance
statement: | statement: |
SELECT id, content, embedding <-> $1 AS distance SELECT id, content, embedding <-> $1 AS distance

View File

@@ -50,9 +50,9 @@ information.
## Example ## Example
```yaml ```yaml
kind: embeddingModels embeddingModels:
name: gemini-model gemini-model:
type: gemini kind: gemini
model: gemini-embedding-001 model: gemini-embedding-001
apiKey: ${GOOGLE_API_KEY} apiKey: ${GOOGLE_API_KEY}
dimension: 768 dimension: 768
@@ -67,7 +67,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------------------------| |-----------|:--------:|:------------:|--------------------------------------------------------------|
| type | string | true | Must be `gemini`. | | kind | string | true | Must be `gemini`. |
| model | string | true | The Gemini model ID to use (e.g., `gemini-embedding-001`). | | model | string | true | The Gemini model ID to use (e.g., `gemini-embedding-001`). |
| apiKey | string | false | Your API Key from Google AI Studio. | | apiKey | string | false | Your API Key from Google AI Studio. |
| dimension | integer | false | The number of dimensions in the output vector (e.g., `768`). | | dimension | integer | false | The number of dimensions in the output vector (e.g., `768`). |

View File

@@ -16,8 +16,8 @@ can be sent to a Large Language Model (LLM). The Toolbox server implements the
specification, allowing clients to discover and retrieve these prompts. specification, allowing clients to discover and retrieve these prompts.
```yaml ```yaml
kind: prompts prompts:
name: code_review code_review:
description: "Asks the LLM to analyze code quality and suggest improvements." description: "Asks the LLM to analyze code quality and suggest improvements."
messages: messages:
- content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}" - content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}"
@@ -31,7 +31,7 @@ arguments:
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-------------|--------------------------------|--------------|--------------------------------------------------------------------------| |-------------|--------------------------------|--------------|--------------------------------------------------------------------------|
| description | string | No | A brief explanation of what the prompt does. | | description | string | No | A brief explanation of what the prompt does. |
| type | string | No | The type of prompt. Defaults to `"custom"`. | | kind | string | No | The kind of prompt. Defaults to `"custom"`. |
| messages | [][Message](#message-schema) | Yes | A list of one or more message objects that make up the prompt's content. | | messages | [][Message](#message-schema) | Yes | A list of one or more message objects that make up the prompt's content. |
| arguments | [][Argument](#argument-schema) | No | A list of arguments that can be interpolated into the prompt's content. | | arguments | [][Argument](#argument-schema) | No | A list of arguments that can be interpolated into the prompt's content. |

View File

@@ -17,8 +17,8 @@ Here is an example of a simple prompt that takes a single argument, code, and
asks an LLM to review it. asks an LLM to review it.
```yaml ```yaml
kind: prompts prompts:
name: code_review code_review:
description: "Asks the LLM to analyze code quality and suggest improvements." description: "Asks the LLM to analyze code quality and suggest improvements."
messages: messages:
- content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}" - content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}"
@@ -33,8 +33,8 @@ You can define prompts with multiple messages to set up more complex
conversational contexts, like a role-playing scenario. conversational contexts, like a role-playing scenario.
```yaml ```yaml
kind: prompts prompts:
name: roleplay_scenario roleplay_scenario:
description: "Sets up a roleplaying scenario with initial messages." description: "Sets up a roleplaying scenario with initial messages."
arguments: arguments:
- name: "character" - name: "character"
@@ -54,7 +54,7 @@ messages:
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-------------|--------------------------------|--------------|--------------------------------------------------------------------------| |-------------|--------------------------------|--------------|--------------------------------------------------------------------------|
| type | string | No | The type of prompt. Must be `"custom"`. | | kind | string | No | The kind of prompt. Must be `"custom"`. |
| description | string | No | A brief explanation of what the prompt does. | | description | string | No | A brief explanation of what the prompt does. |
| messages | [][Message](#message-schema) | Yes | A list of one or more message objects that make up the prompt's content. | | messages | [][Message](#message-schema) | Yes | A list of one or more message objects that make up the prompt's content. |
| arguments | [][Argument](#argument-schema) | No | A list of arguments that can be interpolated into the prompt's content. | | arguments | [][Argument](#argument-schema) | No | A list of arguments that can be interpolated into the prompt's content. |

View File

@@ -17,9 +17,9 @@ instead of hardcoding your secrets into the configuration file.
{{< /notice >}} {{< /notice >}}
```yaml ```yaml
kind: sources sources:
name: my-cloud-sql-source my-cloud-sql-source:
type: cloud-sql-postgres kind: cloud-sql-postgres
project: my-project-id project: my-project-id
region: us-central1 region: us-central1
instance: my-instance-name instance: my-instance-name

View File

@@ -25,13 +25,12 @@ Authentication can be handled in two ways:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-alloydb-admin my-alloydb-admin:
type: alloydb-admin kind: alloy-admin
---
kind: sources my-oauth-alloydb-admin:
name: my-oauth-alloydb-admin kind: alloydb-admin
type: alloydb-admin
useClientOAuth: true useClientOAuth: true
``` ```
@@ -39,6 +38,6 @@ useClientOAuth: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| -------------- | :------: | :----------: | ---------------------------------------------------------------------------------------------------------------------------------------------- | | -------------- | :------: | :----------: | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| type | string | true | Must be "alloydb-admin". | | kind | string | true | Must be "alloydb-admin". |
| defaultProject | string | false | The Google Cloud project ID to use for AlloyDB infrastructure tools. | | defaultProject | string | false | The Google Cloud project ID to use for AlloyDB infrastructure tools. |
| useClientOAuth | boolean | false | If true, the source will use client-side OAuth for authorization. Otherwise, it will use Application Default Credentials. Defaults to `false`. | | useClientOAuth | boolean | false | If true, the source will use client-side OAuth for authorization. Otherwise, it will use Application Default Credentials. Defaults to `false`. |

View File

@@ -176,9 +176,9 @@ To connect using IAM authentication:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-alloydb-pg-source my-alloydb-pg-source:
type: alloydb-postgres kind: alloydb-postgres
project: my-project-id project: my-project-id
region: us-central1 region: us-central1
cluster: my-cluster cluster: my-cluster
@@ -198,7 +198,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "alloydb-postgres". | | kind | string | true | Must be "alloydb-postgres". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). | | region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). |
| cluster | string | true | Name of the AlloyDB cluster (e.g. "my-cluster"). | | cluster | string | true | Name of the AlloyDB cluster (e.g. "my-cluster"). |

View File

@@ -121,9 +121,9 @@ identity used has been granted the correct IAM permissions.
Initialize a BigQuery source that uses ADC: Initialize a BigQuery source that uses ADC:
```yaml ```yaml
kind: sources sources:
name: my-bigquery-source my-bigquery-source:
type: "bigquery" kind: "bigquery"
project: "my-project-id" project: "my-project-id"
# location: "US" # Optional: Specifies the location for query jobs. # location: "US" # Optional: Specifies the location for query jobs.
# writeMode: "allowed" # One of: allowed, blocked, protected. Defaults to "allowed". # writeMode: "allowed" # One of: allowed, blocked, protected. Defaults to "allowed".
@@ -140,9 +140,9 @@ project: "my-project-id"
Initialize a BigQuery source that uses the client's access token: Initialize a BigQuery source that uses the client's access token:
```yaml ```yaml
kind: sources sources:
name: my-bigquery-client-auth-source my-bigquery-client-auth-source:
type: "bigquery" kind: "bigquery"
project: "my-project-id" project: "my-project-id"
useClientOAuth: true useClientOAuth: true
# location: "US" # Optional: Specifies the location for query jobs. # location: "US" # Optional: Specifies the location for query jobs.
@@ -161,7 +161,7 @@ useClientOAuth: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|---------------------------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |---------------------------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "bigquery". | | kind | string | true | Must be "bigquery". |
| project | string | true | Id of the Google Cloud project to use for billing and as the default project for BigQuery resources. | | project | string | true | Id of the Google Cloud project to use for billing and as the default project for BigQuery resources. |
| location | string | false | Specifies the location (e.g., 'us', 'asia-northeast1') in which to run the query job. This location must match the location of any tables referenced in the query. Defaults to the table's location or 'US' if the location cannot be determined. [Learn More](https://cloud.google.com/bigquery/docs/locations) | | location | string | false | Specifies the location (e.g., 'us', 'asia-northeast1') in which to run the query job. This location must match the location of any tables referenced in the query. Defaults to the table's location or 'US' if the location cannot be determined. [Learn More](https://cloud.google.com/bigquery/docs/locations) |
| writeMode | string | false | Controls the write behavior for tools. `allowed` (default): All queries are permitted. `blocked`: Only `SELECT` statements are allowed for the `bigquery-execute-sql` tool. `protected`: Enables session-based execution where all tools associated with this source instance share the same [BigQuery session](https://cloud.google.com/bigquery/docs/sessions-intro). This allows for stateful operations using temporary tables (e.g., `CREATE TEMP TABLE`). For `bigquery-execute-sql`, `SELECT` statements can be used on all tables, but write operations are restricted to the session's temporary dataset. For tools like `bigquery-sql`, `bigquery-forecast`, and `bigquery-analyze-contribution`, the `writeMode` restrictions do not apply, but they will operate within the shared session. **Note:** The `protected` mode cannot be used with `useClientOAuth: true`. It is also not recommended for multi-user server environments, as all users would share the same session. A session is terminated automatically after 24 hours of inactivity or after 7 days, whichever comes first. A new session is created on the next request, and any temporary data from the previous session will be lost. | | writeMode | string | false | Controls the write behavior for tools. `allowed` (default): All queries are permitted. `blocked`: Only `SELECT` statements are allowed for the `bigquery-execute-sql` tool. `protected`: Enables session-based execution where all tools associated with this source instance share the same [BigQuery session](https://cloud.google.com/bigquery/docs/sessions-intro). This allows for stateful operations using temporary tables (e.g., `CREATE TEMP TABLE`). For `bigquery-execute-sql`, `SELECT` statements can be used on all tables, but write operations are restricted to the session's temporary dataset. For tools like `bigquery-sql`, `bigquery-forecast`, and `bigquery-analyze-contribution`, the `writeMode` restrictions do not apply, but they will operate within the shared session. **Note:** The `protected` mode cannot be used with `useClientOAuth: true`. It is also not recommended for multi-user server environments, as all users would share the same session. A session is terminated automatically after 24 hours of inactivity or after 7 days, whichever comes first. A new session is created on the next request, and any temporary data from the previous session will be lost. |

View File

@@ -59,9 +59,9 @@ applying IAM permissions and roles to an identity.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-bigtable-source my-bigtable-source:
type: "bigtable" kind: "bigtable"
project: "my-project-id" project: "my-project-id"
instance: "test-instance" instance: "test-instance"
``` ```
@@ -70,6 +70,6 @@ instance: "test-instance"
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|-------------------------------------------------------------------------------| |-----------|:--------:|:------------:|-------------------------------------------------------------------------------|
| type | string | true | Must be "bigtable". | | kind | string | true | Must be "bigtable". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| instance | string | true | Name of the Bigtable instance. | | instance | string | true | Name of the Bigtable instance. |

View File

@@ -23,9 +23,9 @@ distributed architectures, and a flexible approach to schema definition.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-cassandra-source my-cassandra-source:
type: cassandra kind: cassandra
hosts: hosts:
- 127.0.0.1 - 127.0.0.1
keyspace: my_keyspace keyspace: my_keyspace
@@ -47,7 +47,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|------------------------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------------------------------------------------| |------------------------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "cassandra". | | kind | string | true | Must be "cassandra". |
| hosts | string[] | true | List of IP addresses to connect to (e.g., ["192.168.1.1:9042", "192.168.1.2:9042","192.168.1.3:9042"]). The default port is 9042 if not specified. | | hosts | string[] | true | List of IP addresses to connect to (e.g., ["192.168.1.1:9042", "192.168.1.2:9042","192.168.1.3:9042"]). The default port is 9042 if not specified. |
| keyspace | string | true | Name of the Cassandra keyspace to connect to (e.g., "my_keyspace"). | | keyspace | string | true | Name of the Cassandra keyspace to connect to (e.g., "my_keyspace"). |
| protoVersion | integer | false | Protocol version for the Cassandra connection (e.g., 4). | | protoVersion | integer | false | Protocol version for the Cassandra connection (e.g., 4). |

View File

@@ -46,9 +46,9 @@ ClickHouse supports multiple protocols:
### Secure Connection Example ### Secure Connection Example
```yaml ```yaml
kind: sources sources:
name: secure-clickhouse-source secure-clickhouse-source:
type: clickhouse kind: clickhouse
host: clickhouse.example.com host: clickhouse.example.com
port: "8443" port: "8443"
database: analytics database: analytics
@@ -61,9 +61,9 @@ secure: true
### HTTP Protocol Example ### HTTP Protocol Example
```yaml ```yaml
kind: sources sources:
name: http-clickhouse-source http-clickhouse-source:
type: clickhouse kind: clickhouse
host: localhost host: localhost
port: "8123" port: "8123"
database: logs database: logs
@@ -82,7 +82,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|-------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|-------------------------------------------------------------------------------------|
| type | string | true | Must be "clickhouse". | | kind | string | true | Must be "clickhouse". |
| host | string | true | IP address or hostname to connect to (e.g. "127.0.0.1" or "clickhouse.example.com") | | host | string | true | IP address or hostname to connect to (e.g. "127.0.0.1" or "clickhouse.example.com") |
| port | string | true | Port to connect to (e.g. "8443" for HTTPS, "8123" for HTTP) | | port | string | true | Port to connect to (e.g. "8443" for HTTPS, "8123" for HTTP) |
| database | string | true | Name of the ClickHouse database to connect to (e.g. "my_database"). | | database | string | true | Name of the ClickHouse database to connect to (e.g. "my_database"). |

View File

@@ -20,14 +20,13 @@ Authentication can be handled in two ways:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-gda-source my-gda-source:
type: cloud-gemini-data-analytics kind: cloud-gemini-data-analytics
projectId: my-project-id projectId: my-project-id
---
kind: sources my-oauth-gda-source:
name: my-oauth-gda-source kind: cloud-gemini-data-analytics
type: cloud-gemini-data-analytics
projectId: my-project-id projectId: my-project-id
useClientOAuth: true useClientOAuth: true
``` ```
@@ -36,6 +35,6 @@ useClientOAuth: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| -------------- | :------: | :----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -------------- | :------: | :----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type | string | true | Must be "cloud-gemini-data-analytics". | | kind | string | true | Must be "cloud-gemini-data-analytics". |
| projectId | string | true | The Google Cloud Project ID where the API is enabled. | | projectId | string | true | The Google Cloud Project ID where the API is enabled. |
| useClientOAuth | boolean | false | If true, the source uses the token provided by the caller (forwarded to the API). Otherwise, it uses server-side Application Default Credentials (ADC). Defaults to `false`. | | useClientOAuth | boolean | false | If true, the source uses the token provided by the caller (forwarded to the API). Otherwise, it uses server-side Application Default Credentials (ADC). Defaults to `false`. |

View File

@@ -123,9 +123,9 @@ identity used has been granted the correct IAM permissions.
Initialize a Cloud Healthcare API source that uses ADC: Initialize a Cloud Healthcare API source that uses ADC:
```yaml ```yaml
kind: sources sources:
name: my-healthcare-source my-healthcare-source:
type: "cloud-healthcare" kind: "cloud-healthcare"
project: "my-project-id" project: "my-project-id"
region: "us-central1" region: "us-central1"
dataset: "my-healthcare-dataset-id" dataset: "my-healthcare-dataset-id"
@@ -139,9 +139,9 @@ dataset: "my-healthcare-dataset-id"
Initialize a Cloud Healthcare API source that uses the client's access token: Initialize a Cloud Healthcare API source that uses the client's access token:
```yaml ```yaml
kind: sources sources:
name: my-healthcare-client-auth-source my-healthcare-client-auth-source:
type: "cloud-healthcare" kind: "cloud-healthcare"
project: "my-project-id" project: "my-project-id"
region: "us-central1" region: "us-central1"
dataset: "my-healthcare-dataset-id" dataset: "my-healthcare-dataset-id"
@@ -157,7 +157,7 @@ useClientOAuth: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|--------------------|:--------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |--------------------|:--------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "cloud-healthcare". | | kind | string | true | Must be "cloud-healthcare". |
| project | string | true | ID of the GCP project that the dataset lives in. | | project | string | true | ID of the GCP project that the dataset lives in. |
| region | string | true | Specifies the region (e.g., 'us', 'asia-northeast1') of the healthcare dataset. [Learn More](https://cloud.google.com/healthcare-api/docs/regions) | | region | string | true | Specifies the region (e.g., 'us', 'asia-northeast1') of the healthcare dataset. [Learn More](https://cloud.google.com/healthcare-api/docs/regions) |
| dataset | string | true | ID of the healthcare dataset. | | dataset | string | true | ID of the healthcare dataset. |

View File

@@ -25,13 +25,12 @@ Authentication can be handled in two ways:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-cloud-monitoring my-cloud-monitoring:
type: cloud-monitoring kind: cloud-monitoring
---
kind: sources my-oauth-cloud-monitoring:
name: my-oauth-cloud-monitoring kind: cloud-monitoring
type: cloud-monitoring
useClientOAuth: true useClientOAuth: true
``` ```
@@ -39,5 +38,5 @@ useClientOAuth: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|----------------|:--------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------------------| |----------------|:--------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "cloud-monitoring". | | kind | string | true | Must be "cloud-monitoring". |
| useClientOAuth | boolean | false | If true, the source will use client-side OAuth for authorization. Otherwise, it will use Application Default Credentials. Defaults to `false`. | | useClientOAuth | boolean | false | If true, the source will use client-side OAuth for authorization. Otherwise, it will use Application Default Credentials. Defaults to `false`. |

View File

@@ -24,13 +24,12 @@ Authentication can be handled in two ways:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-cloud-sql-admin my-cloud-sql-admin:
type: cloud-sql-admin kind: cloud-sql-admin
---
kind: sources my-oauth-cloud-sql-admin:
name: my-oauth-cloud-sql-admin kind: cloud-sql-admin
type: cloud-sql-admin
useClientOAuth: true useClientOAuth: true
``` ```
@@ -38,6 +37,6 @@ useClientOAuth: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| -------------- | :------: | :----------: | ---------------------------------------------------------------------------------------------------------------------------------------------- | | -------------- | :------: | :----------: | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| type | string | true | Must be "cloud-sql-admin". | | kind | string | true | Must be "cloud-sql-admin". |
| defaultProject | string | false | The Google Cloud project ID to use for Cloud SQL infrastructure tools. | | defaultProject | string | false | The Google Cloud project ID to use for Cloud SQL infrastructure tools. |
| useClientOAuth | boolean | false | If true, the source will use client-side OAuth for authorization. Otherwise, it will use Application Default Credentials. Defaults to `false`. | | useClientOAuth | boolean | false | If true, the source will use client-side OAuth for authorization. Otherwise, it will use Application Default Credentials. Defaults to `false`. |

View File

@@ -87,9 +87,9 @@ Currently, this source only uses standard authentication. You will need to
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-cloud-sql-mssql-instance my-cloud-sql-mssql-instance:
type: cloud-sql-mssql kind: cloud-sql-mssql
project: my-project project: my-project
region: my-region region: my-region
instance: my-instance instance: my-instance
@@ -108,7 +108,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "cloud-sql-mssql". | | kind | string | true | Must be "cloud-sql-mssql". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). | | region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). |
| instance | string | true | Name of the Cloud SQL instance within the cluster (e.g. "my-instance"). | | instance | string | true | Name of the Cloud SQL instance within the cluster (e.g. "my-instance"). |

View File

@@ -128,9 +128,9 @@ To connect using IAM authentication:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-cloud-sql-mysql-source my-cloud-sql-mysql-source:
type: cloud-sql-mysql kind: cloud-sql-mysql
project: my-project-id project: my-project-id
region: us-central1 region: us-central1
instance: my-instance instance: my-instance
@@ -149,7 +149,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "cloud-sql-mysql". | | kind | string | true | Must be "cloud-sql-mysql". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). | | region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). |
| instance | string | true | Name of the Cloud SQL instance within the cluster (e.g. "my-instance"). | | instance | string | true | Name of the Cloud SQL instance within the cluster (e.g. "my-instance"). |

View File

@@ -178,9 +178,9 @@ To connect using IAM authentication:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-cloud-sql-pg-source my-cloud-sql-pg-source:
type: cloud-sql-postgres kind: cloud-sql-postgres
project: my-project-id project: my-project-id
region: us-central1 region: us-central1
instance: my-instance instance: my-instance
@@ -199,7 +199,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "cloud-sql-postgres". | | kind | string | true | Must be "cloud-sql-postgres". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). | | region | string | true | Name of the GCP region that the cluster was created in (e.g. "us-central1"). |
| instance | string | true | Name of the Cloud SQL instance within the cluster (e.g. "my-instance"). | | instance | string | true | Name of the Cloud SQL instance within the cluster (e.g. "my-instance"). |

View File

@@ -19,9 +19,9 @@ allowing tools to execute SQL queries against it.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-couchbase-instance my-couchbase-instance:
type: couchbase kind: couchbase
connectionString: couchbase://localhost connectionString: couchbase://localhost
bucket: travel-sample bucket: travel-sample
scope: inventory scope: inventory
@@ -38,7 +38,7 @@ Connections](https://docs.couchbase.com/java-sdk/current/howtos/managing-connect
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|----------------------|:--------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |----------------------|:--------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "couchbase". | | kind | string | true | Must be "couchbase". |
| connectionString | string | true | Connection string for the Couchbase cluster. | | connectionString | string | true | Connection string for the Couchbase cluster. |
| bucket | string | true | Name of the bucket to connect to. | | bucket | string | true | Name of the bucket to connect to. |
| scope | string | true | Name of the scope within the bucket. | | scope | string | true | Name of the scope within the bucket. |

View File

@@ -23,9 +23,9 @@ applying artificial intelligence and machine learning.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-dataplex-source my-dataplex-source:
type: "dataplex" kind: "dataplex"
project: "my-project-id" project: "my-project-id"
``` ```
@@ -355,5 +355,5 @@ This abbreviated syntax works for the qualified predicates except for `label` in
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|----------------------------------------------------------------------------------| |-----------|:--------:|:------------:|----------------------------------------------------------------------------------|
| type | string | true | Must be "dataplex". | | kind | string | true | Must be "dataplex". |
| project | string | true | ID of the GCP project used for quota and billing purposes (e.g. "my-project-id").| | project | string | true | ID of the GCP project used for quota and billing purposes (e.g. "my-project-id").|

View File

@@ -7,17 +7,6 @@ description: >
--- ---
{{< notice note >}}
**⚠️ Best Effort Maintenance**
This integration is maintained on a best-effort basis by the project
team/community. While we strive to address issues and provide workarounds when
resources are available, there are no guaranteed response times or code fixes.
The automated integration tests for this module are currently non-functional or
failing.
{{< /notice >}}
## About ## About
[Dgraph][dgraph-docs] is an open-source graph database. It is designed for [Dgraph][dgraph-docs] is an open-source graph database. It is designed for
@@ -51,9 +40,9 @@ and user credentials for that namespace.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-dgraph-source my-dgraph-source:
type: dgraph kind: dgraph
dgraphUrl: https://xxxx.cloud.dgraph.io dgraphUrl: https://xxxx.cloud.dgraph.io
user: ${USER_NAME} user: ${USER_NAME}
password: ${PASSWORD} password: ${PASSWORD}
@@ -70,7 +59,7 @@ instead of hardcoding your secrets into the configuration file.
| **Field** | **Type** | **Required** | **Description** | | **Field** | **Type** | **Required** | **Description** |
|-------------|:--------:|:------------:|--------------------------------------------------------------------------------------------------| |-------------|:--------:|:------------:|--------------------------------------------------------------------------------------------------|
| type | string | true | Must be "dgraph". | | kind | string | true | Must be "dgraph". |
| dgraphUrl | string | true | Connection URI (e.g. "<https://xxx.cloud.dgraph.io>", "<https://localhost:8080>"). | | dgraphUrl | string | true | Connection URI (e.g. "<https://xxx.cloud.dgraph.io>", "<https://localhost:8080>"). |
| user | string | false | Name of the Dgraph user to connect as (e.g., "groot"). | | user | string | false | Name of the Dgraph user to connect as (e.g., "groot"). |
| password | string | false | Password of the Dgraph user (e.g., "password"). | | password | string | false | Password of the Dgraph user (e.g., "password"). |

View File

@@ -59,9 +59,9 @@ applying permissions to an API key.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-elasticsearch-source my-elasticsearch-source:
type: "elasticsearch" kind: "elasticsearch"
addresses: addresses:
- "http://localhost:9200" - "http://localhost:9200"
apikey: "my-api-key" apikey: "my-api-key"
@@ -71,6 +71,6 @@ apikey: "my-api-key"
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------| |-----------|:--------:|:------------:|--------------------------------------------|
| type | string | true | Must be "elasticsearch". | | kind | string | true | Must be "elasticsearch". |
| addresses | []string | true | List of Elasticsearch hosts to connect to. | | addresses | []string | true | List of Elasticsearch hosts to connect to. |
| apikey | string | true | The API key to use for authentication. | | apikey | string | true | The API key to use for authentication. |

View File

@@ -36,9 +36,9 @@ user][fb-users] to login to the database with.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my_firebird_db my_firebird_db:
type: firebird kind: firebird
host: "localhost" host: "localhost"
port: 3050 port: 3050
database: "/path/to/your/database.fdb" database: "/path/to/your/database.fdb"
@@ -55,7 +55,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|------------------------------------------------------------------------------| |-----------|:--------:|:------------:|------------------------------------------------------------------------------|
| type | string | true | Must be "firebird". | | kind | string | true | Must be "firebird". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1") | | host | string | true | IP address to connect to (e.g. "127.0.0.1") |
| port | string | true | Port to connect to (e.g. "3050") | | port | string | true | Port to connect to (e.g. "3050") |
| database | string | true | Path to the Firebird database file (e.g. "/var/lib/firebird/data/test.fdb"). | | database | string | true | Path to the Firebird database file (e.g. "/var/lib/firebird/data/test.fdb"). |

View File

@@ -61,9 +61,9 @@ database named `(default)` will be used.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-firestore-source my-firestore-source:
type: "firestore" kind: "firestore"
project: "my-project-id" project: "my-project-id"
# database: "my-database" # Optional, defaults to "(default)" # database: "my-database" # Optional, defaults to "(default)"
``` ```
@@ -72,6 +72,6 @@ project: "my-project-id"
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "firestore". | | kind | string | true | Must be "firestore". |
| project | string | true | Id of the GCP project that contains the Firestore database (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that contains the Firestore database (e.g. "my-project-id"). |
| database | string | false | Name of the Firestore database to connect to. Defaults to "(default)" if not specified. | | database | string | false | Name of the Firestore database to connect to. Defaults to "(default)" if not specified. |

View File

@@ -21,9 +21,9 @@ and other HTTP-accessible resources.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-http-source my-http-source:
type: http kind: http
baseUrl: https://api.example.com/data baseUrl: https://api.example.com/data
timeout: 10s # default to 30s timeout: 10s # default to 30s
headers: headers:
@@ -44,7 +44,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|------------------------|:-----------------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------| |------------------------|:-----------------:|:------------:|------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "http". | | kind | string | true | Must be "http". |
| baseUrl | string | true | The base URL for the HTTP requests (e.g., `https://api.example.com`). | | baseUrl | string | true | The base URL for the HTTP requests (e.g., `https://api.example.com`). |
| timeout | string | false | The timeout for HTTP requests (e.g., "5s", "1m", refer to [ParseDuration][parse-duration-doc] for more examples). Defaults to 30s. | | timeout | string | false | The timeout for HTTP requests (e.g., "5s", "1m", refer to [ParseDuration][parse-duration-doc] for more examples). Defaults to 30s. |
| headers | map[string]string | false | Default headers to include in the HTTP requests. | | headers | map[string]string | false | Default headers to include in the HTTP requests. |

View File

@@ -56,9 +56,9 @@ To initialize the application default credential run `gcloud auth login
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-looker-source my-looker-source:
type: looker kind: looker
base_url: http://looker.example.com base_url: http://looker.example.com
client_id: ${LOOKER_CLIENT_ID} client_id: ${LOOKER_CLIENT_ID}
client_secret: ${LOOKER_CLIENT_SECRET} client_secret: ${LOOKER_CLIENT_SECRET}
@@ -93,7 +93,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|----------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------| |----------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "looker". | | kind | string | true | Must be "looker". |
| base_url | string | true | The URL of your Looker server with no trailing /. | | base_url | string | true | The URL of your Looker server with no trailing /. |
| client_id | string | false | The client id assigned by Looker. | | client_id | string | false | The client id assigned by Looker. |
| client_secret | string | false | The client secret assigned by Looker. | | client_secret | string | false | The client secret assigned by Looker. |

View File

@@ -45,9 +45,9 @@ MariaDB user][mariadb-users] to log in to the database.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my_mariadb_db my_mariadb_db:
type: mysql kind: mysql
host: 127.0.0.1 host: 127.0.0.1
port: 3306 port: 3306
database: my_db database: my_db
@@ -68,7 +68,7 @@ Use environment variables instead of committing credentials to source files.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ------------ | :------: | :----------: | ----------------------------------------------------------------------------------------------- | | ------------ | :------: | :----------: | ----------------------------------------------------------------------------------------------- |
| type | string | true | Must be `mysql`. | | kind | string | true | Must be `mysql`. |
| host | string | true | IP address to connect to (e.g. "127.0.0.1"). | | host | string | true | IP address to connect to (e.g. "127.0.0.1"). |
| port | string | true | Port to connect to (e.g. "3307"). | | port | string | true | Port to connect to (e.g. "3307"). |
| database | string | true | Name of the MariaDB database to connect to (e.g. "my_db"). | | database | string | true | Name of the MariaDB database to connect to (e.g. "my_db"). |

View File

@@ -125,9 +125,9 @@ can omit the password field.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-mindsdb-source my-mindsdb-source:
type: mindsdb kind: mindsdb
host: 127.0.0.1 host: 127.0.0.1
port: 3306 port: 3306
database: my_db database: my_db
@@ -141,9 +141,9 @@ queryTimeout: 30s # Optional: query timeout duration
Here's a working configuration that has been tested: Here's a working configuration that has been tested:
```yaml ```yaml
kind: sources sources:
name: my-pg-source my-pg-source:
type: mindsdb kind: mindsdb
host: 127.0.0.1 host: 127.0.0.1
port: 47335 port: 47335
database: files database: files
@@ -176,7 +176,7 @@ With MindsDB integration, you can:
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|--------------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------| |--------------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "mindsdb". | | kind | string | true | Must be "mindsdb". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1"). | | host | string | true | IP address to connect to (e.g. "127.0.0.1"). |
| port | string | true | Port to connect to (e.g. "3306"). | | port | string | true | Port to connect to (e.g. "3306"). |
| database | string | true | Name of the MindsDB database to connect to (e.g. "my_db"). | | database | string | true | Name of the MindsDB database to connect to (e.g. "my_db"). |

View File

@@ -17,9 +17,9 @@ flexible, JSON-like documents, making it easy to develop and scale applications.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-mongodb my-mongodb:
type: mongodb kind: mongodb
uri: "mongodb+srv://username:password@host.mongodb.net" uri: "mongodb+srv://username:password@host.mongodb.net"
``` ```
@@ -28,5 +28,5 @@ uri: "mongodb+srv://username:password@host.mongodb.net"
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|-------------------------------------------------------------------| |-----------|:--------:|:------------:|-------------------------------------------------------------------|
| type | string | true | Must be "mongodb". | | kind | string | true | Must be "mongodb". |
| uri | string | true | connection string to connect to MongoDB | | uri | string | true | connection string to connect to MongoDB |

View File

@@ -39,9 +39,9 @@ SQL Server user][mssql-users] to login to the database with.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-mssql-source my-mssql-source:
type: mssql kind: mssql
host: 127.0.0.1 host: 127.0.0.1
port: 1433 port: 1433
database: my_db database: my_db
@@ -59,7 +59,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "mssql". | | kind | string | true | Must be "mssql". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1"). | | host | string | true | IP address to connect to (e.g. "127.0.0.1"). |
| port | string | true | Port to connect to (e.g. "1433"). | | port | string | true | Port to connect to (e.g. "1433"). |
| database | string | true | Name of the SQL Server database to connect to (e.g. "my_db"). | | database | string | true | Name of the SQL Server database to connect to (e.g. "my_db"). |

View File

@@ -49,9 +49,9 @@ MySQL user][mysql-users] to login to the database with.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-mysql-source my-mysql-source:
type: mysql kind: mysql
host: 127.0.0.1 host: 127.0.0.1
port: 3306 port: 3306
database: my_db database: my_db
@@ -72,7 +72,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ------------ | :------: | :----------: | ----------------------------------------------------------------------------------------------- | | ------------ | :------: | :----------: | ----------------------------------------------------------------------------------------------- |
| type | string | true | Must be "mysql". | | kind | string | true | Must be "mysql". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1"). | | host | string | true | IP address to connect to (e.g. "127.0.0.1"). |
| port | string | true | Port to connect to (e.g. "3306"). | | port | string | true | Port to connect to (e.g. "3306"). |
| database | string | true | Name of the MySQL database to connect to (e.g. "my_db"). | | database | string | true | Name of the MySQL database to connect to (e.g. "my_db"). |

View File

@@ -33,9 +33,9 @@ user if available.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-neo4j-source my-neo4j-source:
type: neo4j kind: neo4j
uri: neo4j+s://xxxx.databases.neo4j.io:7687 uri: neo4j+s://xxxx.databases.neo4j.io:7687
user: ${USER_NAME} user: ${USER_NAME}
password: ${PASSWORD} password: ${PASSWORD}
@@ -51,7 +51,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|----------------------------------------------------------------------| |-----------|:--------:|:------------:|----------------------------------------------------------------------|
| type | string | true | Must be "neo4j". | | kind | string | true | Must be "neo4j". |
| uri | string | true | Connect URI ("bolt://localhost", "neo4j+s://xxx.databases.neo4j.io") | | uri | string | true | Connect URI ("bolt://localhost", "neo4j+s://xxx.databases.neo4j.io") |
| user | string | true | Name of the Neo4j user to connect as (e.g. "neo4j"). | | user | string | true | Name of the Neo4j user to connect as (e.g. "neo4j"). |
| password | string | true | Password of the Neo4j user (e.g. "my-password"). | | password | string | true | Password of the Neo4j user (e.g. "my-password"). |

View File

@@ -33,9 +33,9 @@ with SSL).
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-oceanbase-source my-oceanbase-source:
type: oceanbase kind: oceanbase
host: 127.0.0.1 host: 127.0.0.1
port: 2881 port: 2881
database: my_db database: my_db
@@ -53,7 +53,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ------------ | :------: | :----------: |-------------------------------------------------------------------------------------------------| | ------------ | :------: | :----------: |-------------------------------------------------------------------------------------------------|
| type | string | true | Must be "oceanbase". | | kind | string | true | Must be "oceanbase". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1"). | | host | string | true | IP address to connect to (e.g. "127.0.0.1"). |
| port | string | true | Port to connect to (e.g. "2881"). | | port | string | true | Port to connect to (e.g. "2881"). |
| database | string | true | Name of the OceanBase database to connect to (e.g. "my_db"). | | database | string | true | Name of the OceanBase database to connect to (e.g. "my_db"). |

View File

@@ -90,9 +90,9 @@ using a TNS (Transparent Network Substrate) alias.
This example demonstrates the four connection methods you could choose from: This example demonstrates the four connection methods you could choose from:
```yaml ```yaml
kind: sources sources:
name: my-oracle-source my-oracle-source:
type: oracle kind: oracle
# --- Choose one connection method --- # --- Choose one connection method ---
# 1. Host, Port, and Service Name # 1. Host, Port, and Service Name
@@ -122,9 +122,9 @@ Oracle Wallet allows you to store credentails used for database connection. Depe
The `go-ora` driver uses the `walletLocation` field to connect to a database secured with an Oracle Wallet without standard username and password. The `go-ora` driver uses the `walletLocation` field to connect to a database secured with an Oracle Wallet without standard username and password.
```yaml ```yaml
kind: sources sources:
name: pure-go-wallet pure-go-wallet:
type: oracle kind: oracle
connectionString: "127.0.0.1:1521/XEPDB1" connectionString: "127.0.0.1:1521/XEPDB1"
user: ${USER_NAME} user: ${USER_NAME}
password: ${PASSWORD} password: ${PASSWORD}
@@ -138,9 +138,9 @@ walletLocation: "/path/to/my/wallet/directory"
For the OCI-based driver, wallet authentication is triggered by setting tnsAdmin to the wallet directory and connecting via a tnsAlias. For the OCI-based driver, wallet authentication is triggered by setting tnsAdmin to the wallet directory and connecting via a tnsAlias.
```yaml ```yaml
kind: sources sources:
name: oci-wallet oci-wallet:
type: oracle kind: oracle
connectionString: "127.0.0.1:1521/XEPDB1" connectionString: "127.0.0.1:1521/XEPDB1"
user: ${USER_NAME} user: ${USER_NAME}
password: ${PASSWORD} password: ${PASSWORD}
@@ -158,7 +158,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "oracle". | | kind | string | true | Must be "oracle". |
| user | string | true | Name of the Oracle user to connect as (e.g. "my-oracle-user"). | | user | string | true | Name of the Oracle user to connect as (e.g. "my-oracle-user"). |
| password | string | true | Password of the Oracle user (e.g. "my-password"). | | password | string | true | Password of the Oracle user (e.g. "my-password"). |
| host | string | false | IP address or hostname to connect to (e.g. "127.0.0.1"). Required if not using `connectionString` or `tnsAlias`. | | host | string | false | IP address or hostname to connect to (e.g. "127.0.0.1"). Required if not using `connectionString` or `tnsAlias`. |

View File

@@ -107,9 +107,9 @@ PostgreSQL user][pg-users] to login to the database with.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-pg-source my-pg-source:
type: postgres kind: postgres
host: 127.0.0.1 host: 127.0.0.1
port: 5432 port: 5432
database: my_db database: my_db
@@ -126,7 +126,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-------------|:------------------:|:------------:|------------------------------------------------------------------------| |-------------|:------------------:|:------------:|------------------------------------------------------------------------|
| type | string | true | Must be "postgres". | | kind | string | true | Must be "postgres". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1") | | host | string | true | IP address to connect to (e.g. "127.0.0.1") |
| port | string | true | Port to connect to (e.g. "5432") | | port | string | true | Port to connect to (e.g. "5432") |
| database | string | true | Name of the Postgres database to connect to (e.g. "my_db"). | | database | string | true | Name of the Postgres database to connect to (e.g. "my_db"). |

View File

@@ -34,9 +34,9 @@ connections must authenticate in order to connect.
Specify your AUTH string in the password field: Specify your AUTH string in the password field:
```yaml ```yaml
kind: sources sources:
name: my-redis-instance my-redis-instance:
type: redis kind: redis
address: address:
- 127.0.0.1:6379 - 127.0.0.1:6379
username: ${MY_USER_NAME} username: ${MY_USER_NAME}
@@ -59,9 +59,9 @@ string.
Here is an example tools.yaml config with [AUTH][auth] enabled: Here is an example tools.yaml config with [AUTH][auth] enabled:
```yaml ```yaml
kind: sources sources:
name: my-redis-cluster-instance my-redis-cluster-instance:
type: memorystore-redis kind: memorystore-redis
address: address:
- 127.0.0.1:6379 - 127.0.0.1:6379
password: ${MY_AUTH_STRING} password: ${MY_AUTH_STRING}
@@ -76,9 +76,9 @@ Here is an example tools.yaml config for Memorystore Redis Cluster instances
using IAM authentication: using IAM authentication:
```yaml ```yaml
kind: sources sources:
name: my-redis-cluster-instance my-redis-cluster-instance:
type: memorystore-redis kind: memorystore-redis
address: address:
- 127.0.0.1:6379 - 127.0.0.1:6379
useGCPIAM: true useGCPIAM: true
@@ -91,7 +91,7 @@ clusterEnabled: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|----------------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------------------| |----------------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "memorystore-redis". | | kind | string | true | Must be "memorystore-redis". |
| address | string | true | Primary endpoint for the Memorystore Redis instance to connect to. | | address | string | true | Primary endpoint for the Memorystore Redis instance to connect to. |
| username | string | false | If you are using a non-default user, specify the user name here. If you are using Memorystore for Redis, leave this field blank | | username | string | false | If you are using a non-default user, specify the user name here. If you are using Memorystore for Redis, leave this field blank |
| password | string | false | If you have [Redis AUTH][auth] enabled, specify the AUTH string here | | password | string | false | If you have [Redis AUTH][auth] enabled, specify the AUTH string here |

View File

@@ -49,9 +49,9 @@ set up your ADC.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-serverless-spark-source my-serverless-spark-source:
type: serverless-spark kind: serverless-spark
project: my-project-id project: my-project-id
location: us-central1 location: us-central1
``` ```
@@ -60,6 +60,6 @@ location: us-central1
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| --------- | :------: | :----------: | ----------------------------------------------------------------- | | --------- | :------: | :----------: | ----------------------------------------------------------------- |
| type | string | true | Must be "serverless-spark". | | kind | string | true | Must be "serverless-spark". |
| project | string | true | ID of the GCP project with Serverless for Apache Spark resources. | | project | string | true | ID of the GCP project with Serverless for Apache Spark resources. |
| location | string | true | Location containing Serverless for Apache Spark resources. | | location | string | true | Location containing Serverless for Apache Spark resources. |

View File

@@ -39,9 +39,9 @@ database user][singlestore-user] to login to the database with.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-singlestore-source my-singlestore-source:
type: singlestore kind: singlestore
host: 127.0.0.1 host: 127.0.0.1
port: 3306 port: 3306
database: my_db database: my_db
@@ -59,7 +59,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|--------------|:--------:|:------------:|-------------------------------------------------------------------------------------------------| |--------------|:--------:|:------------:|-------------------------------------------------------------------------------------------------|
| type | string | true | Must be "singlestore". | | kind | string | true | Must be "singlestore". |
| host | string | true | IP address to connect to (e.g. "127.0.0.1"). | | host | string | true | IP address to connect to (e.g. "127.0.0.1"). |
| port | string | true | Port to connect to (e.g. "3306"). | | port | string | true | Port to connect to (e.g. "3306"). |
| database | string | true | Name of the SingleStore database to connect to (e.g. "my_db"). | | database | string | true | Name of the SingleStore database to connect to (e.g. "my_db"). |

View File

@@ -31,9 +31,9 @@ Snowflake user to login to the database with.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-sf-source my-sf-source:
type: snowflake kind: snowflake
account: ${SNOWFLAKE_ACCOUNT} account: ${SNOWFLAKE_ACCOUNT}
user: ${SNOWFLAKE_USER} user: ${SNOWFLAKE_USER}
password: ${SNOWFLAKE_PASSWORD} password: ${SNOWFLAKE_PASSWORD}
@@ -52,7 +52,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|------------------------------------------------------------------------| |-----------|:--------:|:------------:|------------------------------------------------------------------------|
| type | string | true | Must be "snowflake". | | kind | string | true | Must be "snowflake". |
| account | string | true | Your Snowflake account identifier. | | account | string | true | Your Snowflake account identifier. |
| user | string | true | Name of the Snowflake user to connect as (e.g. "my-sf-user"). | | user | string | true | Name of the Snowflake user to connect as (e.g. "my-sf-user"). |
| password | string | true | Password of the Snowflake user (e.g. "my-password"). | | password | string | true | Password of the Snowflake user (e.g. "my-password"). |

View File

@@ -64,9 +64,9 @@ applying IAM permissions and roles to an identity.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-spanner-source my-spanner-source:
type: "spanner" kind: "spanner"
project: "my-project-id" project: "my-project-id"
instance: "my-instance" instance: "my-instance"
database: "my_db" database: "my_db"
@@ -77,7 +77,7 @@ database: "my_db"
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "spanner". | | kind | string | true | Must be "spanner". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). | | project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| instance | string | true | Name of the Spanner instance. | | instance | string | true | Name of the Spanner instance. |
| database | string | true | Name of the database on the Spanner instance | | database | string | true | Name of the database on the Spanner instance |

View File

@@ -48,18 +48,18 @@ You need a SQLite database file. This can be:
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-sqlite-db my-sqlite-db:
type: "sqlite" kind: "sqlite"
database: "/path/to/database.db" database: "/path/to/database.db"
``` ```
For an in-memory database: For an in-memory database:
```yaml ```yaml
kind: sources sources:
name: my-sqlite-memory-db my-sqlite-memory-db:
type: "sqlite" kind: "sqlite"
database: ":memory:" database: ":memory:"
``` ```
@@ -69,7 +69,7 @@ database: ":memory:"
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "sqlite". | | kind | string | true | Must be "sqlite". |
| database | string | true | Path to SQLite database file, or ":memory:" for an in-memory database. | | database | string | true | Path to SQLite database file, or ":memory:" for an in-memory database. |
### Connection Properties ### Connection Properties

View File

@@ -46,9 +46,9 @@ console.
- TiDB Cloud - TiDB Cloud
```yaml ```yaml
kind: sources sources:
name: my-tidb-cloud-source my-tidb-cloud-source:
type: tidb kind: tidb
host: gateway01.us-west-2.prod.aws.tidbcloud.com host: gateway01.us-west-2.prod.aws.tidbcloud.com
port: 4000 port: 4000
database: my_db database: my_db
@@ -60,9 +60,9 @@ console.
- Self-Hosted TiDB - Self-Hosted TiDB
```yaml ```yaml
kind: sources sources:
name: my-tidb-source my-tidb-source:
type: tidb kind: tidb
host: 127.0.0.1 host: 127.0.0.1
port: 4000 port: 4000
database: my_db database: my_db
@@ -80,7 +80,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------| |-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------|
| type | string | true | Must be "tidb". | | kind | string | true | Must be "tidb". |
| host | string | true | IP address or hostname to connect to (e.g. "127.0.0.1" or "gateway01.*.tidbcloud.com"). | | host | string | true | IP address or hostname to connect to (e.g. "127.0.0.1" or "gateway01.*.tidbcloud.com"). |
| port | string | true | Port to connect to (typically "4000" for TiDB). | | port | string | true | Port to connect to (typically "4000" for TiDB). |
| database | string | true | Name of the TiDB database to connect to (e.g. "my_db"). | | database | string | true | Name of the TiDB database to connect to (e.g. "my_db"). |

View File

@@ -32,9 +32,9 @@ the catalogs and schemas you want to query.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-trino-source my-trino-source:
type: trino kind: trino
host: trino.example.com host: trino.example.com
port: "8080" port: "8080"
user: ${TRINO_USER} # Optional for anonymous access user: ${TRINO_USER} # Optional for anonymous access
@@ -52,7 +52,7 @@ instead of hardcoding your secrets into the configuration file.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ---------------------- | :------: | :----------: | ---------------------------------------------------------------------------- | | ---------------------- | :------: | :----------: | ---------------------------------------------------------------------------- |
| type | string | true | Must be "trino". | | kind | string | true | Must be "trino". |
| host | string | true | Trino coordinator hostname (e.g. "trino.example.com") | | host | string | true | Trino coordinator hostname (e.g. "trino.example.com") |
| port | string | true | Trino coordinator port (e.g. "8080", "8443") | | port | string | true | Trino coordinator port (e.g. "8080", "8443") |
| user | string | false | Username for authentication (e.g. "analyst"). Optional for anonymous access. | | user | string | false | Username for authentication (e.g. "analyst"). Optional for anonymous access. |

View File

@@ -27,9 +27,9 @@ the [official Valkey website](https://valkey.io/topics/quickstart/).
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-valkey-instance my-valkey-instance:
type: valkey kind: valkey
address: address:
- 127.0.0.1:6379 - 127.0.0.1:6379
username: ${YOUR_USERNAME} username: ${YOUR_USERNAME}
@@ -51,9 +51,9 @@ authentication. Grant your account the required [IAM role][iam] and set
`useGCPIAM` to `true`: `useGCPIAM` to `true`:
```yaml ```yaml
kind: sources sources:
name: my-valkey-instance my-valkey-instance:
type: valkey kind: valkey
address: address:
- 127.0.0.1:6379 - 127.0.0.1:6379
useGCPIAM: true useGCPIAM: true
@@ -65,7 +65,7 @@ useGCPIAM: true
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|--------------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------------------------------| |--------------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "valkey". | | kind | string | true | Must be "valkey". |
| address | []string | true | Endpoints for the Valkey instance to connect to. | | address | []string | true | Endpoints for the Valkey instance to connect to. |
| username | string | false | If you are using a non-default user, specify the user name here. If you are using Memorystore for Valkey, leave this field blank | | username | string | false | If you are using a non-default user, specify the user name here. If you are using Memorystore for Valkey, leave this field blank |
| password | string | false | Password for the Valkey instance | | password | string | false | Password for the Valkey instance |

View File

@@ -17,9 +17,9 @@ compatibility.
## Example ## Example
```yaml ```yaml
kind: sources sources:
name: my-yb-source my-yb-source:
type: yugabytedb kind: yugabytedb
host: 127.0.0.1 host: 127.0.0.1
port: 5433 port: 5433
database: yugabyte database: yugabyte
@@ -33,7 +33,7 @@ topologyKeys: cloud.region.zone1:1,cloud.region.zone2:2
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|------------------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| |------------------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | string | true | Must be "yugabytedb". | | kind | string | true | Must be "yugabytedb". |
| host | string | true | IP address to connect to. | | host | string | true | IP address to connect to. |
| port | integer | true | Port to connect to. The default port is 5433. | | port | integer | true | Port to connect to. The default port is 5433. |
| database | string | true | Name of the YugabyteDB database to connect to. The default database name is yugabyte. | | database | string | true | Name of the YugabyteDB database to connect to. The default database name is yugabyte. |

View File

@@ -12,9 +12,9 @@ statement. You can define Tools as a map in the `tools` section of your
`tools.yaml` file. Typically, a tool will require a source to act on: `tools.yaml` file. Typically, a tool will require a source to act on:
```yaml ```yaml
kind: tools tools:
name: search_flights_by_number search_flights_by_number:
type: postgres-sql kind: postgres-sql
source: my-pg-instance source: my-pg-instance
statement: | statement: |
SELECT * FROM flights SELECT * FROM flights
@@ -171,9 +171,9 @@ the required [authServices](../authServices/) to specific claims within the
user's ID token. user's ID token.
```yaml ```yaml
kind: tools tools:
name: search_flights_by_user_id search_flights_by_user_id:
type: postgres-sql kind: postgres-sql
source: my-pg-instance source: my-pg-instance
statement: | statement: |
SELECT * FROM flights WHERE user_id = $1 SELECT * FROM flights WHERE user_id = $1
@@ -222,9 +222,9 @@ can use `minValue` and `maxValue` to define the allowable range.
{{< /notice >}} {{< /notice >}}
```yaml ```yaml
kind: tools tools:
name: select_columns_from_table select_columns_from_table:
type: postgres-sql kind: postgres-sql
source: my-pg-instance source: my-pg-instance
statement: | statement: |
SELECT {{array .columnNames}} FROM {{.tableName}} SELECT {{array .columnNames}} FROM {{.tableName}}
@@ -267,9 +267,9 @@ specifying an `authRequired` field. Specify a list of
[authServices](../authServices/) defined in the previous section. [authServices](../authServices/) defined in the previous section.
```yaml ```yaml
kind: tools tools:
name: search_all_flight search_all_flight:
type: postgres-sql kind: postgres-sql
source: my-pg-instance source: my-pg-instance
statement: | statement: |
SELECT * FROM flights SELECT * FROM flights

View File

@@ -40,9 +40,9 @@ The tool takes the following input parameters:
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: create_cluster create_cluster:
type: alloydb-create-cluster kind: alloydb-create-cluster
source: alloydb-admin-source source: alloydb-admin-source
description: Use this tool to create a new AlloyDB cluster in a given project and location. description: Use this tool to create a new AlloyDB cluster in a given project and location.
``` ```
@@ -51,6 +51,6 @@ description: Use this tool to create a new AlloyDB cluster in a given project an
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-------------|:--------:|:------------:|------------------------------------------------------| |-------------|:--------:|:------------:|------------------------------------------------------|
| type | string | true | Must be alloydb-create-cluster. | | kind | string | true | Must be alloydb-create-cluster. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

View File

@@ -45,9 +45,9 @@ The tool takes the following input parameters:
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: create_instance create_instance:
type: alloydb-create-instance kind: alloydb-create-instance
source: alloydb-admin-source source: alloydb-admin-source
description: Use this tool to create a new AlloyDB instance within a specified cluster. description: Use this tool to create a new AlloyDB instance within a specified cluster.
``` ```
@@ -56,6 +56,6 @@ description: Use this tool to create a new AlloyDB instance within a specified c
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ----------- | :------: | :----------: | ---------------------------------------------------- | | ----------- | :------: | :----------: | ---------------------------------------------------- |
| type | string | true | Must be alloydb-create-instance. | | kind | string | true | Must be alloydb-create-instance. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

View File

@@ -39,9 +39,9 @@ The tool takes the following input parameters:
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: create_user create_user:
type: alloydb-create-user kind: alloydb-create-user
source: alloydb-admin-source source: alloydb-admin-source
description: Use this tool to create a new database user for an AlloyDB cluster. description: Use this tool to create a new database user for an AlloyDB cluster.
``` ```
@@ -50,6 +50,6 @@ description: Use this tool to create a new database user for an AlloyDB cluster.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ----------- | :------: | :----------: | ---------------------------------------------------- | | ----------- | :------: | :----------: | ---------------------------------------------------- |
| type | string | true | Must be alloydb-create-user. | | kind | string | true | Must be alloydb-create-user. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

View File

@@ -3,7 +3,7 @@ title: alloydb-get-cluster
type: docs type: docs
weight: 1 weight: 1
description: "The \"alloydb-get-cluster\" tool retrieves details for a specific AlloyDB cluster.\n" description: "The \"alloydb-get-cluster\" tool retrieves details for a specific AlloyDB cluster.\n"
alias: [/resources/tools/alloydb-get-cluster] aliases: [/resources/tools/alloydb-get-cluster]
--- ---
## About ## About
@@ -21,9 +21,9 @@ specified AlloyDB cluster. It is compatible with
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: get_specific_cluster get_specific_cluster:
type: alloydb-get-cluster kind: alloydb-get-cluster
source: my-alloydb-admin-source source: my-alloydb-admin-source
description: Use this tool to retrieve details for a specific AlloyDB cluster. description: Use this tool to retrieve details for a specific AlloyDB cluster.
``` ```
@@ -32,6 +32,6 @@ description: Use this tool to retrieve details for a specific AlloyDB cluster.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ----------- | :------: | :----------: | ---------------------------------------------------- | | ----------- | :------: | :----------: | ---------------------------------------------------- |
| type | string | true | Must be alloydb-get-cluster. | | kind | string | true | Must be alloydb-get-cluster. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

View File

@@ -22,9 +22,9 @@ specified AlloyDB instance. It is compatible with
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: get_specific_instance get_specific_instance:
type: alloydb-get-instance kind: alloydb-get-instance
source: my-alloydb-admin-source source: my-alloydb-admin-source
description: Use this tool to retrieve details for a specific AlloyDB instance. description: Use this tool to retrieve details for a specific AlloyDB instance.
``` ```
@@ -33,6 +33,6 @@ description: Use this tool to retrieve details for a specific AlloyDB instance.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
|-------------|:--------:|:------------:|------------------------------------------------------| |-------------|:--------:|:------------:|------------------------------------------------------|
| type | string | true | Must be alloydb-get-instance. | | kind | string | true | Must be alloydb-get-instance. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

View File

@@ -22,9 +22,9 @@ specified AlloyDB user. It is compatible with
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: get_specific_user get_specific_user:
type: alloydb-get-user kind: alloydb-get-user
source: my-alloydb-admin-source source: my-alloydb-admin-source
description: Use this tool to retrieve details for a specific AlloyDB user. description: Use this tool to retrieve details for a specific AlloyDB user.
``` ```
@@ -33,6 +33,6 @@ description: Use this tool to retrieve details for a specific AlloyDB user.
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ----------- | :------: | :----------: | ---------------------------------------------------- | | ----------- | :------: | :----------: | ---------------------------------------------------- |
| type | string | true | Must be alloydb-get-user. | | kind | string | true | Must be alloydb-get-user. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

View File

@@ -24,9 +24,9 @@ location. The tool takes the following input parameters:
## Example ## Example
```yaml ```yaml
kind: tools tools:
name: list_clusters list_clusters:
type: alloydb-list-clusters kind: alloydb-list-clusters
source: alloydb-admin-source source: alloydb-admin-source
description: Use this tool to list all AlloyDB clusters in a given project and location. description: Use this tool to list all AlloyDB clusters in a given project and location.
``` ```
@@ -35,6 +35,6 @@ description: Use this tool to list all AlloyDB clusters in a given project and l
| **field** | **type** | **required** | **description** | | **field** | **type** | **required** | **description** |
| ----------- | :------: | :----------: | ---------------------------------------------------- | | ----------- | :------: | :----------: | ---------------------------------------------------- |
| type | string | true | Must be alloydb-list-clusters. | | kind | string | true | Must be alloydb-list-clusters. |
| source | string | true | The name of an `alloydb-admin` source. | | source | string | true | The name of an `alloydb-admin` source. |
| description | string | false | Description of the tool that is passed to the agent. | | description | string | false | Description of the tool that is passed to the agent. |

Some files were not shown because too many files have changed in this diff Show More