Compare commits

...

203 Commits

Author SHA1 Message Date
duwenxin99
0fb1235cb0 draft 2025-06-12 16:38:16 -04:00
Wenxin Du
054ec198b9 feat: Add Valkey Source and Tool (#532) 2025-06-11 23:17:32 -04:00
Wenxin Du
f0aef29b0c feat: Add Redis Source and Tool (#519)
1. Added Redis Source and Tool
2. Moved some integration test helpers from tools.go to common.go
3. Make auth integration test want an input variable
2025-06-11 22:47:27 -04:00
Yuan
075dfa47e1 feat(tools/spanner): add templateParameters field for spanner (#691)
Add `templateParameters` to support non-filter parameters and DDL
statements.

Added a new argument `ignoreDdl` at integration test. Admin client is
needed to execute ddl statement in spanner. Toolbox does not use admin
client.

Part of #535
2025-06-11 23:54:13 +00:00
Mend Renovate
ad62d14cd5 chore(deps): update module cloud.google.com/go/cloudsqlconn to v1.17.2 (#694)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/cloudsqlconn](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector)
| `v1.17.1` -> `v1.17.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.1/v1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.1/v1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/cloud-sql-go-connector
(cloud.google.com/go/cloudsqlconn)</summary>

###
[`v1.17.2`](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/releases/tag/v1.17.2)

[Compare
Source](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector/compare/v1.17.1...v1.17.2)

##### Bug Fixes

- reduce the number of memory allocations and the latency overhead.
([#&#8203;983](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/issues/983))
([cb641f2](cb641f223e))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40OC41IiwidXBkYXRlZEluVmVyIjoiNDAuNDguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-11 21:40:22 +00:00
Wenxin Du
5d183b0efe ci: Enable label-controlled docs preview (#516)
Allow external contributors to preview doc changes
2025-06-11 17:33:36 -04:00
Mend Renovate
904d04bc45 chore(deps): update module cloud.google.com/go/alloydbconn to v1.15.3 (#698)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/alloydbconn](https://redirect.github.com/googlecloudplatform/alloydb-go-connector)
| `v1.15.2` -> `v1.15.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2falloydbconn/v1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2falloydbconn/v1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2falloydbconn/v1.15.2/v1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2falloydbconn/v1.15.2/v1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/alloydb-go-connector
(cloud.google.com/go/alloydbconn)</summary>

###
[`v1.15.3`](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/releases/tag/v1.15.3)

[Compare
Source](https://redirect.github.com/googlecloudplatform/alloydb-go-connector/compare/v1.15.2...v1.15.3)

##### Bug Fixes

- reduce the number of memory allocations and latency overhead
([#&#8203;686](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/issues/686))
([274ce04](274ce04953))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40OC41IiwidXBkYXRlZEluVmVyIjoiNDAuNDguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-06-11 14:20:50 -07:00
AlexTalreja
75e254c0a4 feat(tools/sqlitesql): add templateParameters field for sqlitesql (#687)
Add templateParameters to support non-filter parameters and DDL
statements.

Part of https://github.com/googleapis/genai-toolbox/issues/535
2025-06-10 13:08:52 -07:00
Yuan
850b32c5b0 docs(tools/alloydbainl): update broken links (#688)
Fixes #631
2025-06-10 11:25:12 -07:00
Anubhav Dhawan
927ef3c508 docs: Add toolbox-core examples to quickstart guide (#642)
## Description
This PR enhances our documentation by integrating `toolbox-core` code
snippets into the quickstart examples on the docsite.

## Context
Previously, our client-facing documentation primarily showcased agent
implementations using third-party frameworks like LangChain, LlamaIndex,
and ADK. This created a documentation gap, as there were no baseline
examples demonstrating how to use our foundational `toolbox-core` SDK
directly. Users who wanted to build a custom integration without a
specific framework had no direct reference in the guides.

## Changes
This PR introduces a new "Core" tab to all relevant code examples within
the auth services and local quickstart (with BigQuery) documentations.

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-10 18:30:39 +05:30
Yuan
15d3c45159 ci: update generate release table shell script (#685) 2025-06-09 21:32:51 -07:00
release-please[bot]
714d990c34 chore(main): release 0.7.0 (#640)
🤖 I have created a release *beep* *boop*
---


##
[0.7.0](https://github.com/googleapis/genai-toolbox/compare/v0.6.0...v0.7.0)
(2025-06-10)


### Features

* Add templateParameters field for mssqlsql
([#671](https://github.com/googleapis/genai-toolbox/issues/671))
([b81fc6a](b81fc6aa6c))
* Add templateParameters field for mysqlsql
([#663](https://github.com/googleapis/genai-toolbox/issues/663))
([0a08d2c](0a08d2c15d))
* **metrics:** Add user agent for prebuilt tools
([#669](https://github.com/googleapis/genai-toolbox/issues/669))
([29aa0a7](29aa0a70da))
* **tools/postgressql:** Add templateParameters field
([#615](https://github.com/googleapis/genai-toolbox/issues/615))
([b763469](b76346993f))


### Bug Fixes

* Improve versionString
([#658](https://github.com/googleapis/genai-toolbox/issues/658))
([cf96f4c](cf96f4c249))
* **server/stdio:** Notifications should not return a response
([#638](https://github.com/googleapis/genai-toolbox/issues/638))
([69d047a](69d047af46))
* **tools/mysqlsql:** Handled the null value for string case in mysqlsql
tools ([#641](https://github.com/googleapis/genai-toolbox/issues/641))
([ef94648](ef94648455))
* Update path library
([#678](https://github.com/googleapis/genai-toolbox/issues/678))
([4998f82](4998f82852)),
closes [#662](https://github.com/googleapis/genai-toolbox/issues/662)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
2025-06-09 17:15:26 -07:00
Yuan
e6c2fb324b ci: add extra files in release please config (#684)
Adding extra files for release please automatic files version updates.

removed "docs/en/how-to/deploy_gke.md" since it was updated to use the
`latest` version by default.
2025-06-09 23:13:55 +00:00
Kurtis Van Gent
cf96f4c249 fix: improve versionString (#658)
Reduces complexity of the version string calculation and fixes the ci/cd
pipeline to pass the correct parameters.

---------

Co-authored-by: Averi Kitsch <akitsch@google.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-09 15:31:42 -07:00
Mend Renovate
8569c6b59f chore(deps): update module modernc.org/sqlite to v1.38.0 (#681)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `v1.37.1` ->
`v1.38.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/modernc.org%2fsqlite/v1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/modernc.org%2fsqlite/v1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/modernc.org%2fsqlite/v1.37.1/v1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/modernc.org%2fsqlite/v1.37.1/v1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>cznic/sqlite (modernc.org/sqlite)</summary>

###
[`v1.38.0`](https://gitlab.com/cznic/sqlite/compare/v1.37.1...v1.38.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.37.1...v1.38.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40OC41IiwidXBkYXRlZEluVmVyIjoiNDAuNDguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-09 22:04:16 +00:00
Yuan
44d41a4888 chore: add .exe suffix to windows binary (#682) 2025-06-09 13:52:28 -07:00
Yuan
4998f82852 fix: update path library (#678)
Using filepath.Join for embed filenames will not respect Windows
filepaths. https://github.com/golang/go/issues/44305

Fix #662
2025-06-09 10:00:26 -07:00
Yuan
b81fc6aa6c feat: add templateParameters field for mssqlsql (#671)
Add `templateParameters to support non-filter parameters and DDL
statements.

Part of https://github.com/googleapis/genai-toolbox/issues/535
2025-06-06 13:18:37 -07:00
Averi Kitsch
29aa0a70da feat(metrics): add user agent for prebuilt tools (#669)
Append "+prebuilt.<source>" to the user agent for tracking the prebuilt
tools usage. This is set before the server is initialized and the user
agent is set on the client.

Using the period to stay consistent with our other appended metadata
like "binary.linux"
2025-06-06 09:49:25 -07:00
Yuan
5638ef520a chore: fix typos in tests (#672) 2025-06-06 14:43:57 +00:00
AlexTalreja
2f42de9507 docs: add templateParameters to postgres documentation (#657) 2025-06-05 17:33:58 -07:00
Yuan
0a08d2c15d feat: add templateParameters field for mysqlsql (#663)
Add `templateParameters to support non-filter parameters and DDL
statements.

Part of #535
2025-06-05 21:37:30 +00:00
Yuan
71250e1ced test: add templateParam postgres-sql tests to other pg source (#664)
Add the template parameters integration test to `postgres` source and
`cloudsql-postgres` source.
2025-06-05 21:33:35 +00:00
Mend Renovate
702dbc355b chore(deps): update dependency go to v1.24.4 (#666)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | patch |
`1.24.3` -> `1.24.4` |

---

### Release Notes

<details>
<summary>golang/go (go)</summary>

###
[`v1.24.4`](https://redirect.github.com/golang/go/compare/go1.24.3...go1.24.4)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40MC4zIiwidXBkYXRlZEluVmVyIjoiNDAuNDAuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-06-05 14:23:09 -07:00
Kurtis Van Gent
ef0cbdb4bf docs: fix SQL capitalization (#667) 2025-06-05 20:01:17 +00:00
Yuan
518a0e4c70 refactor(tools/http): dedup to use GetParams (#659) 2025-06-05 10:54:08 -07:00
Yuan
d7ba2736eb refactor: concatenate template parameters and parameters (#660)
Refactor this to dedup from other tools.
2025-06-05 09:01:45 -07:00
Yuan
33ae70ec02 docs: add llms-full.txt (#656)
Generating a `/llms-full.txt` to provide LLM-friendly content (that
doesn't require navigation). For more information, checkout
https://llmstxt.org/.


Preview:
https://googleapis.github.io/genai-toolbox/previews/PR-656/llms-full.txt
2025-06-04 16:00:48 -07:00
Kurtis Van Gent
1c9ad5ea24 refactor: implement dynamic source registration (#614)
This commit refactors the source configuration and loading mechanism to
use a dynamic registration pattern. Each source package now registers
itself with a central registry via its init() function.

The server configuration code uses this registry to decode and
initialize sources, decoupling it from specific source implementations
and simplifying the addition of new sources.

Key changes:
- Introduced `sources.Register()` and `newConfig()` constructor in each
source package.
- Moved source package imports to `cmd/root.go` as blank imports to
trigger `init()` functions for self-registration.
- Removed direct imports of specific source packages from
`internal/server/config.go`.
- Renamed `SourceKind` constants to `Kind` within each source package.
- Updated tests to use the new `Kind` constants and reflect registration
changes.

---------

Co-authored-by: Yuan Teoh <yuanteoh@google.com>
2025-06-04 14:23:57 -07:00
AlexTalreja
b76346993f feat(tools/postgressql): add templateParameters field (#615)
Add new tool field, templateParameters, to support non-filter parameters 
and DDL statements

Fix #535 for postgressql tool.

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-04 13:28:37 -07:00
Yuan
1830702fd8 docs: update llms.txt (#652) 2025-06-04 11:45:51 -07:00
Kurtis Van Gent
b4862825e8 refactor: implement dynamic tool registration (#613)
This PR refactors the tool configuration and loading mechanism to use a
dynamic registration pattern. Each tool package now registers itself
with a central registry, and the server configuration code uses this
registry to decode and initialize tools.

Key changes:
- Introduced tools.Register and tools.DecodeToolConfig for dynamic tool
handling.
- Removed direct imports of specific tool packages from
internal/server/config.go.
- Updated individual tool packages to include init() functions for
self-registration.
- Modified ToolKind constants to be local kind constants within each
tool package.
- Adjusted test files to reflect the changes in tool kind identifiers.

This change simplifies adding new tools and decouples the server
configuration from specific tool implementations.

---------

Co-authored-by: Yuan Teoh <yuanteoh@google.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-04 10:19:42 -07:00
Anubhav Dhawan
f5de1af5bd docs: Simplify repetitive auth login command in bigquery quickstart (#643)
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-06-04 10:12:52 -07:00
Yuan
46d7cdf4ba docs: add llms.txt file (#651)
Generating a `/llmstxt.txt` to provide LLM-friendly content. For more
information, checkout https://llmstxt.org/.
2025-06-04 10:01:26 -07:00
Yuan
9ecf1755ab docs: update render-heading hook (#649)
There's a `no such template "_default/_markup/td-render-heading.html"`
error when running `hugo server` locally. This is due to a breaking
change in [Hugo
v0.146.0](https://github.com/gohugoio/hugo/releases/tag/v0.146.0). This
PR updates the render-heading file according to
https://github.com/google/docsy/pull/2223.
2025-06-04 01:14:23 +00:00
Wenxin Du
1596f5d772 chore: Revert accidental push (#648) 2025-06-04 00:17:30 +00:00
duwenxin
594066f9f4 add docs preview instruction 2025-06-03 17:01:57 -07:00
Wenxin Du
0ddc7240b7 chore: Move test helper functions to common.go (#647)
1. Move test helper functions to common.go
2. Move HTTP helper to its own test file
2025-06-03 16:22:08 -07:00
Mend Renovate
0880e16c05 chore(deps): update module google.golang.org/api to v0.236.0 (#646)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.235.0` -> `v0.236.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.236.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.236.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.235.0/v0.236.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.235.0/v0.236.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.236.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.236.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.235.0...v0.236.0)

##### Features

- **all:** Auto-regenerate discovery clients
([#&#8203;3174](https://redirect.github.com/googleapis/google-api-go-client/issues/3174))
([4adab34](4adab34862))
- **all:** Auto-regenerate discovery clients
([#&#8203;3177](https://redirect.github.com/googleapis/google-api-go-client/issues/3177))
([4b92960](4b929605d1))
- **all:** Auto-regenerate discovery clients
([#&#8203;3178](https://redirect.github.com/googleapis/google-api-go-client/issues/3178))
([e2f9814](e2f981483e))
- **all:** Auto-regenerate discovery clients
([#&#8203;3179](https://redirect.github.com/googleapis/google-api-go-client/issues/3179))
([59d8272](59d8272bf2))
- **all:** Auto-regenerate discovery clients
([#&#8203;3180](https://redirect.github.com/googleapis/google-api-go-client/issues/3180))
([fb420ad](fb420adae6))
- **all:** Auto-regenerate discovery clients
([#&#8203;3181](https://redirect.github.com/googleapis/google-api-go-client/issues/3181))
([dd4076a](dd4076a89d))

##### Bug Fixes

- **auth:** Remove s2a fallback option
([#&#8203;3176](https://redirect.github.com/googleapis/google-api-go-client/issues/3176))
([57d1922](57d1922662))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-06-03 12:57:15 -07:00
Yuan
a6c49007bf chore: comment typo in tools/tests.go (#645) 2025-06-03 18:39:51 +00:00
Mohd Mujtaba
ef94648455 fix(tools/mysqlsql): handled the null value for string case in mysqlsql tools (#641)
@Yuan325  please review and merge this if all looks ok.
In existing code, for the character field with null values it will panic
with error:
"panic: interface conversion: interface {} is nil, not []uint8"
2025-06-03 11:33:41 -07:00
Yuan
69d047af46 fix(server/stdio): notifications should not return a response (#638)
Currently the `stdio` transport protocol will throw a `ZodError` during
initialization. This is due to Toolbox writing `null` to stdout when it
received a notification. This is not expected hence the `ZodError`
occurs. Per the MCP protocol, notifications do not expect any response.

This fix added a condition to check if the responses is `nil` before
writing to stdout.
2025-06-02 16:59:39 -07:00
Twisha Bansal
4700dd363c docs: update to latest stable gemini models (#633)
Update to the latest Stable gemini models. See the [latest stable models
list](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions#latest-stable).

Closes https://github.com/googleapis/genai-toolbox/issues/518
2025-06-02 10:40:52 +05:30
Mend Renovate
386bb23e7c chore(deps): update dependency ubuntu to v24 (#362)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [ubuntu](https://redirect.github.com/actions/runner-images) |
github-runner | major | `22.04` -> `24.04` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjQwLjMzLjYiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-30 20:06:46 -07:00
Yuan
ba8a6f3a3b chore: migrate golangci-lint to v2 (#630)
gosimple had been deprecated in favor of staticcheck:
https://github.com/golangci/golangci-lint/issues/357

Other requirements are all migrated.

`std-error-handling` exclusions is included because without that, it
will ask to check all error returns from (`Close()`, or `os.Setenv`s, or
`fmt.Fprint`s...
2025-05-31 02:50:17 +00:00
Mend Renovate
ad97578fdf chore(deps): update module github.com/microsoft/go-mssqldb to v1.8.2 (#624)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/microsoft/go-mssqldb](https://redirect.github.com/microsoft/go-mssqldb)
| `v1.8.1` -> `v1.8.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.1/v1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.1/v1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>microsoft/go-mssqldb
(github.com/microsoft/go-mssqldb)</summary>

###
[`v1.8.2`](https://redirect.github.com/microsoft/go-mssqldb/releases/tag/v1.8.2)

[Compare
Source](https://redirect.github.com/microsoft/go-mssqldb/compare/v1.8.1...v1.8.2)

#### What's Changed

- Work around build error introduced by the new 'go vet' tests analyser
by [@&#8203;leon-matthews](https://redirect.github.com/leon-matthews) in
[https://github.com/microsoft/go-mssqldb/pull/259](https://redirect.github.com/microsoft/go-mssqldb/pull/259)
- isProc: added `COMMIT` and `ROLLBACK` command to the builtin commands
by [@&#8203;giautm](https://redirect.github.com/giautm) in
[https://github.com/microsoft/go-mssqldb/pull/261](https://redirect.github.com/microsoft/go-mssqldb/pull/261)
- \[WIP] Parse does not recognize Pwd as a valid password field alias by
[@&#8203;copilot-swe-agent](https://redirect.github.com/copilot-swe-agent)
in
[https://github.com/microsoft/go-mssqldb/pull/263](https://redirect.github.com/microsoft/go-mssqldb/pull/263)

#### New Contributors

- [@&#8203;leon-matthews](https://redirect.github.com/leon-matthews)
made their first contribution in
[https://github.com/microsoft/go-mssqldb/pull/259](https://redirect.github.com/microsoft/go-mssqldb/pull/259)
-
[@&#8203;copilot-swe-agent](https://redirect.github.com/copilot-swe-agent)
made their first contribution in
[https://github.com/microsoft/go-mssqldb/pull/263](https://redirect.github.com/microsoft/go-mssqldb/pull/263)

**Full Changelog**:
https://github.com/microsoft/go-mssqldb/compare/v1.8.1...v1.8.2

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-30 17:14:17 +00:00
Averi Kitsch
3d10f85302 docs: add tool list to dev assist docs (#626)
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-29 22:52:35 +00:00
Averi Kitsch
5a4cc9af6b docs: highlight dev assist workflow (#625) 2025-05-29 15:47:49 -07:00
Mend Renovate
15f90a3773 chore(deps): update module github.com/googlecloudplatform/opentelemetry-operations-go/exporter/trace to v1.28.0 (#628)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go)
| `v1.27.0` -> `v1.28.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2ftrace/v1.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2ftrace/v1.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2ftrace/v1.27.0/v1.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2ftrace/v1.27.0/v1.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-29 20:27:57 +00:00
Mend Renovate
87380f629d chore(deps): update module github.com/googlecloudplatform/opentelemetry-operations-go/exporter/metric to v0.52.0 (#627)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go)
| `v0.51.0` -> `v0.52.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2fmetric/v0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2fmetric/v0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2fmetric/v0.51.0/v0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fexporter%2fmetric/v0.51.0/v0.52.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>GoogleCloudPlatform/opentelemetry-operations-go
(github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric)</summary>

###
[`v0.52.0`](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/releases/tag/v0.52.0):
v1.28.0/v0.52.0

[Compare
Source](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/compare/v0.51.0...v0.52.0)

##### What's Changed

- chore(deps): update go version from `1.2x.x to 1.23.8` and `1.24.0 to
1.24.2` in `go.mod` files and tests. by
[@&#8203;franciscovalentecastro](https://redirect.github.com/franciscovalentecastro)
in
[https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1036](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1036)
- exporter/collector: Add mapping for LogSeverity values set as
SeverityText to correct SeverityNumber. by
[@&#8203;franciscovalentecastro](https://redirect.github.com/franciscovalentecastro)
in
[https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1031](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1031)
- Allow overriding Project ID using env var by
[@&#8203;psx95](https://redirect.github.com/psx95) in
[https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1040](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1040)
- Update dependencies and tooling by
[@&#8203;psx95](https://redirect.github.com/psx95) in
[https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1042](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1042)
- Prepare for v1.28.0/v0.52.0 by
[@&#8203;psx95](https://redirect.github.com/psx95) in
[https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1045](https://redirect.github.com/GoogleCloudPlatform/opentelemetry-operations-go/pull/1045)

**Full Changelog**:
https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/compare/v0.51.0...v0.52.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-29 13:21:59 -07:00
Mend Renovate
953ab9336f chore(deps): update module github.com/goccy/go-yaml to v1.18.0 (#623)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/goccy/go-yaml](https://redirect.github.com/goccy/go-yaml)
| `v1.17.1` -> `v1.18.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgoccy%2fgo-yaml/v1.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgoccy%2fgo-yaml/v1.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgoccy%2fgo-yaml/v1.17.1/v1.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgoccy%2fgo-yaml/v1.17.1/v1.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>goccy/go-yaml (github.com/goccy/go-yaml)</summary>

###
[`v1.18.0`](https://redirect.github.com/goccy/go-yaml/releases/tag/v1.18.0):
1.18.0

[Compare
Source](https://redirect.github.com/goccy/go-yaml/compare/v1.17.1...v1.18.0)

#### What's Changed

- feat: add global `OmitEmpty` encoding option by
[@&#8203;bwplotka](https://redirect.github.com/bwplotka) in
[https://github.com/goccy/go-yaml/pull/691](https://redirect.github.com/goccy/go-yaml/pull/691)
- chore: clarify omitempty behaviour. by
[@&#8203;bwplotka](https://redirect.github.com/bwplotka) in
[https://github.com/goccy/go-yaml/pull/696](https://redirect.github.com/goccy/go-yaml/pull/696)
- Treat output from TextMarshaler as string by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/698](https://redirect.github.com/goccy/go-yaml/pull/698)
- Update golangci-lint to v2.1.2 by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/701](https://redirect.github.com/goccy/go-yaml/pull/701)
- Tidy benchmarks/go.mod by
[@&#8203;eikemeier](https://redirect.github.com/eikemeier) in
[https://github.com/goccy/go-yaml/pull/686](https://redirect.github.com/goccy/go-yaml/pull/686)
- Remove testmod task by
[@&#8203;goccy](https://redirect.github.com/goccy) in
[https://github.com/goccy/go-yaml/pull/715](https://redirect.github.com/goccy/go-yaml/pull/715)
- Clean up encoder.go by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/703](https://redirect.github.com/goccy/go-yaml/pull/703)
- Fix validation error position for container type by
[@&#8203;goccy](https://redirect.github.com/goccy) in
[https://github.com/goccy/go-yaml/pull/716](https://redirect.github.com/goccy/go-yaml/pull/716)
- Add nil checking for error handling by
[@&#8203;goccy](https://redirect.github.com/goccy) in
[https://github.com/goccy/go-yaml/pull/719](https://redirect.github.com/goccy/go-yaml/pull/719)
- Ignore validation for alias map key by
[@&#8203;goccy](https://redirect.github.com/goccy) in
[https://github.com/goccy/go-yaml/pull/720](https://redirect.github.com/goccy/go-yaml/pull/720)
- Avoid returning an error for null document by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/721](https://redirect.github.com/goccy/go-yaml/pull/721)
- Add Go 1.24 to test matrix by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/722](https://redirect.github.com/goccy/go-yaml/pull/722)
- Set null value for empty document by
[@&#8203;goccy](https://redirect.github.com/goccy) in
[https://github.com/goccy/go-yaml/pull/725](https://redirect.github.com/goccy/go-yaml/pull/725)
- Support implicit null by
[@&#8203;goccy](https://redirect.github.com/goccy) in
[https://github.com/goccy/go-yaml/pull/727](https://redirect.github.com/goccy/go-yaml/pull/727)
- Support omitzero by [@&#8203;goccy](https://redirect.github.com/goccy)
in
[https://github.com/goccy/go-yaml/pull/729](https://redirect.github.com/goccy/go-yaml/pull/729)
- feat: Dont make copies of structs for validation by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/737](https://redirect.github.com/goccy/go-yaml/pull/737)
- Prevent panic when decoding string named types by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/743](https://redirect.github.com/goccy/go-yaml/pull/743)
- Fix misaligned indentation in comments by
[@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw) in
[https://github.com/goccy/go-yaml/pull/734](https://redirect.github.com/goccy/go-yaml/pull/734)
- Add support for multi-line double-quoted strings with CRLF line
endings by [@&#8203;shuheiktgw](https://redirect.github.com/shuheiktgw)
in
[https://github.com/goccy/go-yaml/pull/744](https://redirect.github.com/goccy/go-yaml/pull/744)
- Update custom marshaler and unmarshaler to accept context by
[@&#8203;pgeiem](https://redirect.github.com/pgeiem) in
[https://github.com/goccy/go-yaml/pull/745](https://redirect.github.com/goccy/go-yaml/pull/745)

#### New Contributors

- [@&#8203;bwplotka](https://redirect.github.com/bwplotka) made their
first contribution in
[https://github.com/goccy/go-yaml/pull/691](https://redirect.github.com/goccy/go-yaml/pull/691)
- [@&#8203;eikemeier](https://redirect.github.com/eikemeier) made their
first contribution in
[https://github.com/goccy/go-yaml/pull/686](https://redirect.github.com/goccy/go-yaml/pull/686)
- [@&#8203;pgeiem](https://redirect.github.com/pgeiem) made their first
contribution in
[https://github.com/goccy/go-yaml/pull/745](https://redirect.github.com/goccy/go-yaml/pull/745)

**Full Changelog**:
https://github.com/goccy/go-yaml/compare/v1.17.1...v1.18.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-29 16:28:34 +00:00
Averi Kitsch
032b333961 docs: Add prebuilt tools documentation (#602)
Co-authored-by: trehanshakuntG <trehanshakunt@google.com>
Co-authored-by: Prerna Kakkar <prernakakkar@google.com>
Co-authored-by: prernakakkar-google <158031829+prernakakkar-google@users.noreply.github.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Yuan Teoh <yuanteoh@google.com>
2025-05-28 22:38:16 +00:00
Yuan
25afd63496 chore: fix release please version update (#622) 2025-05-28 15:33:50 -07:00
release-please[bot]
3180830403 chore(main): release 0.6.0 (#545)
🤖 I have created a release *beep* *boop*
---


##
[0.6.0](https://github.com/googleapis/genai-toolbox/compare/v0.5.0...v0.6.0)
(2025-05-28)


### Features

* Add Execute sql tool for SQL Server(MSSQL)
([#585](https://github.com/googleapis/genai-toolbox/issues/585))
([6083a22](6083a224aa))
* Add mysql-execute-sql tool
([#577](https://github.com/googleapis/genai-toolbox/issues/577))
([8590061](8590061ae4))
* Add new BigQuery tools: execute_sql, list_datatset_ids,
list_table_ids, get_dataset_info, get_table_info
([0fd88b5](0fd88b574b))
* Add spanner-execute-sql tool
([#576](https://github.com/googleapis/genai-toolbox/issues/576))
([d65747a](d65747a2dc))
* Add support for read-only in Spanner tool
([#563](https://github.com/googleapis/genai-toolbox/issues/563))
([6512704](6512704e77))
* Adding support for the --prebuilt flag
([#604](https://github.com/googleapis/genai-toolbox/issues/604))
([a29c800](a29c80012e))
* Support MCP stdio transport protocol
([#607](https://github.com/googleapis/genai-toolbox/issues/607))
([1702ce1](1702ce1e00))


### Bug Fixes

* Explicitly set query location for BigQuery queries
([#586](https://github.com/googleapis/genai-toolbox/issues/586))
([eb52b66](eb52b66d82))
* Fix spellings in comments
([#561](https://github.com/googleapis/genai-toolbox/issues/561))
([b58bf76](b58bf76dda))
* Prevent tool calls through MCP when auth is required
([#544](https://github.com/googleapis/genai-toolbox/issues/544))
([e747b6e](e747b6e289))
* Reinitialize required slice if nil
([#571](https://github.com/googleapis/genai-toolbox/issues/571))
([04dcf47](04dcf47912)),
closes [#564](https://github.com/googleapis/genai-toolbox/issues/564)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
2025-05-28 15:08:44 -07:00
dishaprakash
a29c80012e feat: Adding support for the --prebuilt flag (#604)
Introduces a new --prebuilt <source_type> flag. This flag is mutually
exclusive with the existing --tools-file flag.

Added a new directory cmd/prebuiltconfigs/ to store the prebuilt
tools.yaml files (e.g., alloydb.yaml, postgres.yaml, etc.).
These YAML files are embedded into the Go binary using the //go:embed
directive.

---------

Co-authored-by: Averi Kitsch <akitsch@google.com>
2025-05-28 14:56:42 -07:00
Huan Chen
0fd88b574b feat: add new bigquery tools. (#619)
Added five new tools and corresponding documents:
1. bigquery-execute-sql
2. bigquery-list-dataset-ids
3. bigquery-list-table-ids
4. bigquery-get-dataset-info
5.  bigquery-get-table-info

---------

Co-authored-by: duwenxin <duwenxin@google.com>
Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-05-28 14:38:08 -07:00
Mend Renovate
e9a6018526 chore(deps): update module google.golang.org/api to v0.235.0 (#621)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.234.0` -> `v0.235.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.235.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.235.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.234.0/v0.235.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.234.0/v0.235.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.235.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.235.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.234.0...v0.235.0)

##### Features

- **all:** Auto-regenerate discovery clients
([#&#8203;3164](https://redirect.github.com/googleapis/google-api-go-client/issues/3164))
([b477d3d](b477d3ddf2))
- **all:** Auto-regenerate discovery clients
([#&#8203;3167](https://redirect.github.com/googleapis/google-api-go-client/issues/3167))
([64d566f](64d566f5e4))
- **all:** Auto-regenerate discovery clients
([#&#8203;3168](https://redirect.github.com/googleapis/google-api-go-client/issues/3168))
([a78a978](a78a978bd2))
- **all:** Auto-regenerate discovery clients
([#&#8203;3169](https://redirect.github.com/googleapis/google-api-go-client/issues/3169))
([00cb9ee](00cb9eec62))
- **all:** Auto-regenerate discovery clients
([#&#8203;3171](https://redirect.github.com/googleapis/google-api-go-client/issues/3171))
([0a9b174](0a9b174fa0))
- **all:** Auto-regenerate discovery clients
([#&#8203;3173](https://redirect.github.com/googleapis/google-api-go-client/issues/3173))
([1e2b782](1e2b78253e))

##### Bug Fixes

- **internaloption:** AuthCreds should honor WithoutAuthentication
([#&#8203;3166](https://redirect.github.com/googleapis/google-api-go-client/issues/3166))
([d117646](d117646289))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-28 20:11:50 +00:00
Yuan
1702ce1e00 feat: support MCP stdio transport protocol (#607)
Support MCP
[stdio](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#stdio)
transport protocol!

To run stdio with Toolbox, user have to use the `--stdio` flag.

Example of running MCP Toolbox with MCP Inspector via stdio transport
protocol: `npx @modelcontextprotocol/inspector ./toolbox --stdio`.

---------

Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Averi Kitsch <akitsch@google.com>
2025-05-28 10:10:34 -07:00
Mend Renovate
5292e12588 chore(deps): update module cloud.google.com/go/bigquery to v1.69.0 (#618)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/bigquery](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.68.0` -> `v1.69.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fbigquery/v1.69.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fbigquery/v1.69.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fbigquery/v1.68.0/v1.69.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fbigquery/v1.68.0/v1.69.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-28 16:25:06 +00:00
Yuan
1bf6003eae docs: add note to tools (#608)
Co-authored-by: Averi Kitsch <akitsch@google.com>
2025-05-28 15:38:18 +00:00
trehanshakuntG
0857be0aa8 chore: update spanner integration tests for read only mode (#616)
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-27 20:51:34 +00:00
Anubhav Dhawan
22edbea579 docs: Update docs to guide with proper lifecycle management (#606)
Fixes
[#208](https://github.com/googleapis/mcp-toolbox-sdk-python/issues/208)
2025-05-26 20:12:53 +05:30
Huan Chen
8df757b280 docs: add note for bigquery parameter replacement introduction. (#589)
For issue https://github.com/googleapis/genai-toolbox/issues/566

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
2025-05-23 17:54:05 +00:00
Mend Renovate
5c66977877 chore(deps): update module go.opentelemetry.io/contrib/propagators/autoprop to v0.61.0 (#605)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[go.opentelemetry.io/contrib/propagators/autoprop](https://redirect.github.com/open-telemetry/opentelemetry-go-contrib)
| `v0.60.0` -> `v0.61.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fcontrib%2fpropagators%2fautoprop/v0.61.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fcontrib%2fpropagators%2fautoprop/v0.61.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fcontrib%2fpropagators%2fautoprop/v0.60.0/v0.61.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fcontrib%2fpropagators%2fautoprop/v0.60.0/v0.61.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-22 15:31:29 -07:00
Yuan
e615e355d5 chore: dedup execute sql integration tests (#600)
Dedup the execute sql integration tests across postgres, mysql, and sql
server.
2025-05-22 22:21:07 +00:00
Mend Renovate
9b7e7a0b3e chore(deps): update module google.golang.org/api to v0.234.0 (#603)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.233.0` -> `v0.234.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.234.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.234.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.233.0/v0.234.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.233.0/v0.234.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.234.0`](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.233.0...v0.234.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.233.0...v0.234.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-21 23:14:58 +00:00
Mend Renovate
72c236be03 chore(deps): update module modernc.org/sqlite to v1.37.1 (#598)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `v1.37.0` ->
`v1.37.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/modernc.org%2fsqlite/v1.37.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/modernc.org%2fsqlite/v1.37.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/modernc.org%2fsqlite/v1.37.0/v1.37.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/modernc.org%2fsqlite/v1.37.0/v1.37.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>cznic/sqlite (modernc.org/sqlite)</summary>

###
[`v1.37.1`](https://gitlab.com/cznic/sqlite/compare/v1.37.0...v1.37.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.37.0...v1.37.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-21 13:11:25 -07:00
Mend Renovate
1d0ed42067 chore(deps): update opentelemetry-go monorepo to v1.36.0 (#594)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[go.opentelemetry.io/otel](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetrichttp/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetrichttp/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetrichttp/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetrichttp/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracehttp/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracehttp/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracehttp/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracehttp/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[go.opentelemetry.io/otel/metric](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fmetric/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fmetric/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fmetric/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fmetric/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[go.opentelemetry.io/otel/sdk](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fsdk/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fsdk/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fsdk/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fsdk/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[go.opentelemetry.io/otel/sdk/metric](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[go.opentelemetry.io/otel/trace](https://redirect.github.com/open-telemetry/opentelemetry-go)
| `v1.35.0` -> `v1.36.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2ftrace/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2ftrace/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2ftrace/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2ftrace/v1.35.0/v1.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>open-telemetry/opentelemetry-go
(go.opentelemetry.io/otel)</summary>

###
[`v1.36.0`](https://redirect.github.com/open-telemetry/opentelemetry-go/releases/tag/v1.36.0):
/v0.58.0/v0.12.0

[Compare
Source](https://redirect.github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0)

##### Added

- Add exponential histogram support in
`go.opentelemetry.io/otel/exporters/prometheus`.
([#&#8203;6421](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6421))
-   The `go.opentelemetry.io/otel/semconv/v1.31.0` package.
The package contains semantic conventions from the `v1.31.0` version of
the OpenTelemetry Semantic Conventions.
See the [migration documentation](./semconv/v1.31.0/MIGRATION.md) for
information on how to upgrade from
`go.opentelemetry.io/otel/semconv/v1.30.0`.
([#&#8203;6479](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6479))
- Add `Recording`, `Scope`, and `Record` types in
`go.opentelemetry.io/otel/log/logtest`.
([#&#8203;6507](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6507))
- Add `WithHTTPClient` option to configure the `http.Client` used by
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`.
([#&#8203;6751](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6751))
- Add `WithHTTPClient` option to configure the `http.Client` used by
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
([#&#8203;6752](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6752))
- Add `WithHTTPClient` option to configure the `http.Client` used by
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`.
([#&#8203;6688](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6688))
- Add `ValuesGetter` in `go.opentelemetry.io/otel/propagation`, a
`TextMapCarrier` that supports retrieving multiple values for a single
key.
([#&#8203;5973](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/5973))
- Add `Values` method to `HeaderCarrier` to implement the new
`ValuesGetter` interface in `go.opentelemetry.io/otel/propagation`.
([#&#8203;5973](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/5973))
- Update `Baggage` in `go.opentelemetry.io/otel/propagation` to retrieve
multiple values for a key when the carrier implements `ValuesGetter`.
([#&#8203;5973](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/5973))
- Add `AssertEqual` function in `go.opentelemetry.io/otel/log/logtest`.
([#&#8203;6662](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6662))
-   The `go.opentelemetry.io/otel/semconv/v1.32.0` package.
The package contains semantic conventions from the `v1.32.0` version of
the OpenTelemetry Semantic Conventions.
See the [migration documentation](./semconv/v1.32.0/MIGRATION.md) for
information on how to upgrade from
`go.opentelemetry.io/otel/semconv/v1.31.0`([#&#8203;6782](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6782))
- Add `Transform` option in `go.opentelemetry.io/otel/log/logtest`.
([#&#8203;6794](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6794))
- Add `Desc` option in `go.opentelemetry.io/otel/log/logtest`.
([#&#8203;6796](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6796))

##### Removed

- Drop support for \[Go 1.22].
([#&#8203;6381](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6381),
[#&#8203;6418](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6418))
- Remove `Resource` field from `EnabledParameters` in
`go.opentelemetry.io/otel/sdk/log`.
([#&#8203;6494](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6494))
- Remove `RecordFactory` type from
`go.opentelemetry.io/otel/log/logtest`.
([#&#8203;6492](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6492))
- Remove `ScopeRecords`, `EmittedRecord`, and `RecordFactory` types from
`go.opentelemetry.io/otel/log/logtest`.
([#&#8203;6507](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6507))
- Remove `AssertRecordEqual` function in
`go.opentelemetry.io/otel/log/logtest`, use `AssertEqual` instead.
([#&#8203;6662](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6662))

##### Changed

- ⚠️ Update `github.com/prometheus/client_golang` to `v1.21.1`, which
changes the `NameValidationScheme` to `UTF8Validation`.
This allows metrics names to keep original delimiters (e.g. `.`), rather
than replacing with underscores.
This can be reverted by setting
`github.com/prometheus/common/model.NameValidationScheme` to
`LegacyValidation` in `github.com/prometheus/common/model`.
([#&#8203;6433](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6433))
- Initialize map with `len(keys)` in `NewAllowKeysFilter` and
`NewDenyKeysFilter` to avoid unnecessary allocations in
`go.opentelemetry.io/otel/attribute`.
([#&#8203;6455](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6455))
- `go.opentelemetry.io/otel/log/logtest` is now a separate Go module.
([#&#8203;6465](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6465))
- `go.opentelemetry.io/otel/sdk/log/logtest` is now a separate Go
module.
([#&#8203;6466](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6466))
- `Recorder` in `go.opentelemetry.io/otel/log/logtest` no longer
separately stores records emitted by loggers with the same
instrumentation scope.
([#&#8203;6507](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6507))
- Improve performance of `BatchProcessor` in
`go.opentelemetry.io/otel/sdk/log` by not exporting when exporter cannot
accept more.
([#&#8203;6569](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6569),
[#&#8203;6641](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6641))

##### Deprecated

- Deprecate support for `model.LegacyValidation` for
`go.opentelemetry.io/otel/exporters/prometheus`.
([#&#8203;6449](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6449))

##### Fixes

- Stop percent encoding header environment variables in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` and
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`.
([#&#8203;6392](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6392))
- Ensure the `noopSpan.tracerProvider` method is not inlined in
`go.opentelemetry.io/otel/trace` so the `go.opentelemetry.io/auto`
instrumentation can instrument non-recording spans.
([#&#8203;6456](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6456))
- Use a `sync.Pool` instead of allocating `metricdata.ResourceMetrics`
in `go.opentelemetry.io/otel/exporters/prometheus`.
([#&#8203;6472](https://redirect.github.com/open-telemetry/opentelemetry-go/issues/6472))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-21 20:03:10 +00:00
Mend Renovate
301dfa1114 chore(deps): update module cloud.google.com/go/cloudsqlconn to v1.17.1 (#597)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/cloudsqlconn](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector)
| `v1.17.0` -> `v1.17.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.0/v1.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.0/v1.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/cloud-sql-go-connector
(cloud.google.com/go/cloudsqlconn)</summary>

###
[`v1.17.1`](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/releases/tag/v1.17.1)

[Compare
Source](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector/compare/v1.17.0...v1.17.1)

##### Bug Fixes

- bump dependencies to latest
([#&#8203;985](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/issues/985))
([865b93a](865b93ac99))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-21 18:48:53 +00:00
prernakakkar-google
6083a224aa Feat: Add Execute sql tool for SQL Server(MSSQL) (#585)
This tool can be used across mssql(SQL Server) sources.

`mssql-execute-sql` config is as below:

```
tools:
  mssql_execute_sql_tool:
     kind: "mssql-execute-sql"
     source: my-mssql-source
     description: Use this tool to execute sql.
```

The `mssql-execute-sql` tool takes one parameter. Example request as
follow:
```
curl -X POST -H "Content-Type: application/json" -d '{"sql": "SELECT 1"}' http://127.0.0.1:5000/api/tool/mssql_execute_sql_tool/invoke
```

Reference for bug: b/416163913

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Mend Renovate <bot@renovateapp.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Anubhav Dhawan <anubhavdhawan@google.com>
Co-authored-by: Huan Chen <142538604+Genesis929@users.noreply.github.com>
2025-05-22 00:10:55 +05:30
Wenxin Du
d6dc0c5269 ci: Add description to release binary table (#599)
We have received multiple user inquiries about which binary to use for
macOS. We should clear out the confusions by providing a description to
each binary, making it clearer which machine type it is for.

Fix issue: https://github.com/googleapis/genai-toolbox/issues/590

Example release binary table after this change:
<img width="972" alt="Screenshot 2025-05-21 at 1 58 26 PM"
src="https://github.com/user-attachments/assets/e76f4aff-7b75-4361-84f9-0bcb170d31f9"
/>
2025-05-21 14:05:27 -04:00
Huan Chen
eb52b66d82 fix: explicitly set query location for BigQuery queries (#586)
For issue https://github.com/googleapis/genai-toolbox/issues/567

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-20 22:07:43 +00:00
Anubhav Dhawan
8dec385538 docs: Update toolbox logo (#509)
* Updated logo with a bleeding edge outline.

# Banner (Light Background)

![image](https://github.com/user-attachments/assets/7cc97bf6-a1c4-461d-9d7a-ba84bc39933e)

# Banner (Dark Background)

![image](https://github.com/user-attachments/assets/990b0793-6686-4417-bec2-c6625f32652c)
2025-05-20 21:50:26 +00:00
Kurtis Van Gent
6a832a1d7e ci: fix preview pipeline for changes only in .hugo (#587) 2025-05-20 14:30:17 -06:00
Mend Renovate
8df5568901 chore(deps): update module cloud.google.com/go/spanner to v1.82.0 (#588)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/spanner](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.81.1` -> `v1.82.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fspanner/v1.82.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fspanner/v1.82.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fspanner/v1.81.1/v1.82.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fspanner/v1.81.1/v1.82.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-05-20 13:20:25 -07:00
Jack Wotherspoon
0c07e15c2c docs: update ADK samples to use toolbox-core (#584)
`ToolboxTool` has been removed from `google-adk` package in
11ca528090

Instead `toolbox-core` should be used directly to remove the need for a
dependency on `toolbox-langchain` and `langchain`.

The new recommendation is to install `toolbox-core`.

```shell
pip install toolbox-core
```

And then load toolbox tools directly and pass it to the ADK agent.

```python
from google.adk.agents import Agent
# NEW IMPORT
from toolbox_core import ToolboxSyncClient

# Full control over MCP Toolbox
toolbox_client = ToolboxSyncClient("http://127.0.0.1:5000")
toolbox_tools = toolbox_client.load_toolset("my-toolset")

root_agent = Agent(
    model="gemini-2.0-flash",
    name="root_agent",
    instruction=agent_instruction,
    # Add Toolbox tools to ADK agent
    tools=toolbox_tools,
)
```
2025-05-20 17:44:50 +00:00
Twisha Bansal
0e4564f383 docs: change docs to add authenticated Toolbox Cloud Run access (#575) 2025-05-20 21:26:38 +05:30
Yuan
4b4fbc656a chore(tools/mysqlsql): only cast TEXT to string (#581)
Only cast to string if the column's `DatabaseTypeName` is `TEXT`.
2025-05-19 14:58:28 -07:00
Yuan
4d4b3ebeb9 chore: lint fix (#582) 2025-05-19 14:53:25 -07:00
trehanshakuntG
d65747a2dc feat: add spanner-execute-sql tool (#576)
This tool can be used across spanner sources.

`spanner-execute-sql` config is as below:

```
tools:
  spanner_execute_sql_tool:
    kind: "spanner-execute-sql"
    source: my-spanner-source
    description: Use this tool to execute sql.
```

The `spanner-execute-sql` tool takes one parameter. Example request as
follow:
```
curl -X POST -H "Content-Type: application/json" -d '{"sql": "SELECT 1"}' http://127.0.0.1:5000/api/tool/spanner_execute_sql_tool/invoke
```

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-19 14:48:11 -07:00
trehanshakuntG
8590061ae4 feat: add mysql-execute-sql tool (#577)
This tool can be used across mysql sources.

`mysql-execute-sql` config is as below:

```
tools:
  mysql_execute_sql_tool:
    kind: "mysql-execute-sql"
    source: my-mysql-source
    description: Use this tool to execute sql.
```

The `mysql-execute-sql` tool takes one parameter. Example request as
follow:
```
curl -X POST -H "Content-Type: application/json" -d '{"sql": "SELECT 1"}' http://127.0.0.1:5000/api/tool/mysql_execute_sql_tool/invoke
```
2025-05-20 02:17:39 +05:30
Mend Renovate
e89abac29f chore(deps): update module github.com/jackc/pgx/v5 to v5.7.5 (#574)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/jackc/pgx/v5](https://redirect.github.com/jackc/pgx) |
`v5.7.4` -> `v5.7.5` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fjackc%2fpgx%2fv5/v5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fjackc%2fpgx%2fv5/v5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fjackc%2fpgx%2fv5/v5.7.4/v5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fjackc%2fpgx%2fv5/v5.7.4/v5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>jackc/pgx (github.com/jackc/pgx/v5)</summary>

###
[`v5.7.5`](https://redirect.github.com/jackc/pgx/compare/v5.7.4...v5.7.5)

[Compare
Source](https://redirect.github.com/jackc/pgx/compare/v5.7.4...v5.7.5)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS4xOCIsInVwZGF0ZWRJblZlciI6IjQwLjExLjE4IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2025-05-19 10:39:04 -07:00
trehanshakuntG
6512704e77 feat: Add support for read-only in Spanner tool (#563)
Allowing user to add `readOnly` field in spanner tools.

The existing tool doesn't work for reading schema tables since schema
tables can only be accessed through read-only transaction.

This PR also resolve #435 for Spanner tool.

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-16 12:08:05 +05:30
Yuan
04dcf47912 fix: reinitialize required slice if nil (#571)
`slices.Concat` will return `nil` if arrays are all empty instead of an
empty slice `[]`. Fix this by setting `[]` if it's `nil`.

Fixes #564
2025-05-16 00:54:03 +00:00
Mend Renovate
0e53829703 chore(deps): update dependency go to v1.24.3 (#537)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | patch |
`1.24.2` -> `1.24.3` |

---

### Release Notes

<details>
<summary>golang/go (go)</summary>

###
[`v1.24.3`](https://redirect.github.com/golang/go/compare/go1.24.2...go1.24.3)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjQwLjcuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-15 16:55:10 -07:00
Mend Renovate
a890d0beee chore(deps): update module cloud.google.com/go/spanner to v1.81.1 (#568)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/spanner](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.81.0` -> `v1.81.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fspanner/v1.81.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fspanner/v1.81.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fspanner/v1.81.0/v1.81.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fspanner/v1.81.0/v1.81.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS4xOCIsInVwZGF0ZWRJblZlciI6IjQwLjExLjE4IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-15 16:45:57 -07:00
Averi Kitsch
ca4491b0a9 docs: separate MCP docs (#569)
Create a doc page per database for MCP Dev Assist workflows
2025-05-15 15:40:19 -07:00
An Nguyen
2068f26302 chore: fix bigtable doc typo (#570)
Fix bigtable doc typo
2025-05-15 21:44:04 +00:00
Mend Renovate
d7579861e8 chore(deps): update module cloud.google.com/go/alloydbconn to v1.15.2 (#562)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/alloydbconn](https://redirect.github.com/googlecloudplatform/alloydb-go-connector)
| `v1.15.1` -> `v1.15.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2falloydbconn/v1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2falloydbconn/v1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2falloydbconn/v1.15.1/v1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2falloydbconn/v1.15.1/v1.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/alloydb-go-connector
(cloud.google.com/go/alloydbconn)</summary>

###
[`v1.15.2`](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/releases/tag/v1.15.2)

[Compare
Source](https://redirect.github.com/googlecloudplatform/alloydb-go-connector/compare/v1.15.1...v1.15.2)

##### Bug Fixes

- update dependencies to latest
([#&#8203;680](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/issues/680))
([8962c17](8962c17aab))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS45IiwidXBkYXRlZEluVmVyIjoiNDAuMTEuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-15 00:08:08 +00:00
AlexTalreja
e8e0125eaa docs: fix typo and import in local quickstart (#565) 2025-05-14 16:58:37 -07:00
Mend Renovate
c98bc4b1a3 chore(deps): update module google.golang.org/api to v0.233.0 (#559)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.232.0` -> `v0.233.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.233.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.233.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.232.0/v0.233.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.232.0/v0.233.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.233.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.233.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.232.0...v0.233.0)

##### Features

- **accessapproval:** Remove accessapproval/v1beta1 client
([#&#8203;3142](https://redirect.github.com/googleapis/google-api-go-client/issues/3142))
([aae5a4e](aae5a4ef10))
- **all:** Auto-regenerate discovery clients
([#&#8203;3139](https://redirect.github.com/googleapis/google-api-go-client/issues/3139))
([ef1442a](ef1442adf4))
- **all:** Auto-regenerate discovery clients
([#&#8203;3141](https://redirect.github.com/googleapis/google-api-go-client/issues/3141))
([868e87a](868e87a45b))
- **all:** Auto-regenerate discovery clients
([#&#8203;3143](https://redirect.github.com/googleapis/google-api-go-client/issues/3143))
([357a874](357a874016))
- **all:** Auto-regenerate discovery clients
([#&#8203;3144](https://redirect.github.com/googleapis/google-api-go-client/issues/3144))
([37401aa](37401aa34a))
- **all:** Auto-regenerate discovery clients
([#&#8203;3145](https://redirect.github.com/googleapis/google-api-go-client/issues/3145))
([c8d1b4b](c8d1b4b144))
- **all:** Auto-regenerate discovery clients
([#&#8203;3147](https://redirect.github.com/googleapis/google-api-go-client/issues/3147))
([2bb75a2](2bb75a2b57))
- **all:** Auto-regenerate discovery clients
([#&#8203;3148](https://redirect.github.com/googleapis/google-api-go-client/issues/3148))
([1002481](1002481011))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS45IiwidXBkYXRlZEluVmVyIjoiNDAuMTEuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-14 13:42:42 -07:00
Yuan
b58bf76dda fix: fix spellings in comments (#561) 2025-05-13 21:09:37 +00:00
Kurtis Van Gent
5a5e06f1a6 docs: add discord link to README (#560) 2025-05-13 14:55:46 -06:00
Mend Renovate
5c166d0651 chore(deps): update module google.golang.org/api to v0.232.0 (#542)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.231.0` -> `v0.232.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.232.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.232.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.231.0/v0.232.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.231.0/v0.232.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.232.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.232.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.231.0...v0.232.0)

##### Features

- **all:** Auto-regenerate discovery clients
([#&#8203;3132](https://redirect.github.com/googleapis/google-api-go-client/issues/3132))
([f041909](f041909f99))
- **all:** Auto-regenerate discovery clients
([#&#8203;3134](https://redirect.github.com/googleapis/google-api-go-client/issues/3134))
([f5cbc80](f5cbc80e53))
- **all:** Auto-regenerate discovery clients
([#&#8203;3135](https://redirect.github.com/googleapis/google-api-go-client/issues/3135))
([25f8d4a](25f8d4abda))
- **all:** Auto-regenerate discovery clients
([#&#8203;3136](https://redirect.github.com/googleapis/google-api-go-client/issues/3136))
([fceda0c](fceda0cfc1))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-12 23:22:07 +00:00
Mend Renovate
2c3e7a0c1c chore(deps): update module github.com/microsoft/go-mssqldb to v1.8.1 (#551)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/microsoft/go-mssqldb](https://redirect.github.com/microsoft/go-mssqldb)
| `v1.8.0` -> `v1.8.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fmicrosoft%2fgo-mssqldb/v1.8.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>microsoft/go-mssqldb
(github.com/microsoft/go-mssqldb)</summary>

###
[`v1.8.1`](https://redirect.github.com/microsoft/go-mssqldb/compare/v1.8.0...v1.8.1)

[Compare
Source](https://redirect.github.com/microsoft/go-mssqldb/compare/v1.8.0...v1.8.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
2025-05-12 16:17:19 -07:00
Mend Renovate
7138ed5f42 chore(deps): update module cloud.google.com/go/bigquery to v1.68.0 (#557)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/bigquery](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.67.0` -> `v1.68.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fbigquery/v1.68.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fbigquery/v1.68.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fbigquery/v1.67.0/v1.68.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fbigquery/v1.67.0/v1.68.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [x] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-12 15:54:24 -07:00
Mend Renovate
54f2614edf chore(deps): update module github.com/couchbase/tools-common/http to v1.0.9 (#541)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/couchbase/tools-common/http](https://redirect.github.com/couchbase/tools-common)
| `v1.0.8` -> `v1.0.9` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fcouchbase%2ftools-common%2fhttp/v1.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fcouchbase%2ftools-common%2fhttp/v1.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fcouchbase%2ftools-common%2fhttp/v1.0.8/v1.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fcouchbase%2ftools-common%2fhttp/v1.0.8/v1.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
2025-05-12 15:47:54 -07:00
Mend Renovate
6bcbadf948 chore(deps): update module cloud.google.com/go/spanner to v1.81.0 (#550)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/spanner](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.80.0` -> `v1.81.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fspanner/v1.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fspanner/v1.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fspanner/v1.80.0/v1.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fspanner/v1.80.0/v1.81.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
2025-05-12 15:19:19 -07:00
Mend Renovate
e375317914 chore(deps): update actions/setup-go action to v5.5.0 (#548)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/setup-go](https://redirect.github.com/actions/setup-go) |
action | minor | `v5.4.0` -> `v5.5.0` |

---

### Release Notes

<details>
<summary>actions/setup-go (actions/setup-go)</summary>

###
[`v5.5.0`](https://redirect.github.com/actions/setup-go/releases/tag/v5.5.0)

[Compare
Source](https://redirect.github.com/actions/setup-go/compare/v5.4.0...v5.5.0)

##### What's Changed

##### Bug fixes:

- Update self-hosted environment validation by
[@&#8203;priyagupta108](https://redirect.github.com/priyagupta108) in
[https://github.com/actions/setup-go/pull/556](https://redirect.github.com/actions/setup-go/pull/556)
- Add manifest validation and improve error handling by
[@&#8203;priyagupta108](https://redirect.github.com/priyagupta108) in
[https://github.com/actions/setup-go/pull/586](https://redirect.github.com/actions/setup-go/pull/586)
- Update template link by
[@&#8203;jsoref](https://redirect.github.com/jsoref) in
[https://github.com/actions/setup-go/pull/527](https://redirect.github.com/actions/setup-go/pull/527)

##### Dependency  updates:

- Upgrade
[@&#8203;action/cache](https://redirect.github.com/action/cache) from
4.0.2 to 4.0.3 by
[@&#8203;aparnajyothi-y](https://redirect.github.com/aparnajyothi-y) in
[https://github.com/actions/setup-go/pull/574](https://redirect.github.com/actions/setup-go/pull/574)
- Upgrade
[@&#8203;actions/glob](https://redirect.github.com/actions/glob) from
0.4.0 to 0.5.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/actions/setup-go/pull/573](https://redirect.github.com/actions/setup-go/pull/573)
- Upgrade ts-jest from 29.1.2 to 29.3.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/actions/setup-go/pull/582](https://redirect.github.com/actions/setup-go/pull/582)
- Upgrade eslint-plugin-jest from 27.9.0 to 28.11.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/actions/setup-go/pull/537](https://redirect.github.com/actions/setup-go/pull/537)

##### New Contributors

- [@&#8203;jsoref](https://redirect.github.com/jsoref) made their first
contribution in
[https://github.com/actions/setup-go/pull/527](https://redirect.github.com/actions/setup-go/pull/527)

**Full Changelog**:
https://github.com/actions/setup-go/compare/v5...v5.5.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-12 14:00:52 -07:00
Wenxin Du
01e089cc34 docs: Update testing instruction in DEVELPER.md (#556)
We have refactored our tests. Fix instruction in DEVELOPER.md to match
the latest setting.
2025-05-12 16:04:05 -04:00
Jack Wotherspoon
352b3ed91c chore: update typo (#555)
Windsurf was formerly https://codeium.com/

updating typo `codium` --> `codeium`
2025-05-12 13:35:11 -04:00
Averi Kitsch
df31fa6680 docs: Add Dev Assist docs for AlloyDB (#546)
Co-authored-by: duwenxin <duwenxin@google.com>
2025-05-09 16:01:49 -04:00
Kurtis Van Gent
b2ff195831 chore: update diagram for couchbase (#547)
Update diagram to include Couchbase.
2025-05-08 15:07:24 -06:00
Jack Wotherspoon
00e3a87258 docs: update typo in export_telemetry.md (#549)
Changing "Connector" --> "Collector".
2025-05-08 11:48:53 -04:00
Wenxin Du
e747b6e289 fix: prevent tool calls through MCP when auth is required (#544)
MCP does not support the `authRequired` feature. Disallow all MCP Tool
call to Tools with `authRequired` set.

Fixes: https://github.com/googleapis/genai-toolbox/issues/543
2025-05-07 15:24:13 -04:00
Twisha Bansal
8834a36445 chore: auto update toolbox version in colab quickstarts (#534) 2025-05-07 10:50:49 +05:30
release-please[bot]
9a5d76e2dc chore(main): release 0.5.0 (#484)
🤖 I have created a release *beep* *boop*
---


##
[0.5.0](https://github.com/googleapis/genai-toolbox/compare/v0.4.0...v0.5.0)
(2025-05-06)


### Features

* Add Couchbase as Source and Tool
([#307](https://github.com/googleapis/genai-toolbox/issues/307))
([d7390b0](d7390b06b7))
* Add postgres-execute-sql tool
([#490](https://github.com/googleapis/genai-toolbox/issues/490))
([11ea7bc](11ea7bc584))


### Bug Fixes

* **deps:** Update module cloud.google.com/go/cloudsqlconn to v1.17.0
([#500](https://github.com/googleapis/genai-toolbox/issues/500))
([ad040cf](ad040cfb8b))
* **deps:** Update module cloud.google.com/go/spanner to v1.80.0
([#481](https://github.com/googleapis/genai-toolbox/issues/481))
([1e1348f](1e1348f5f0))
* **deps:** Update module google.golang.org/api to v0.231.0
([#505](https://github.com/googleapis/genai-toolbox/issues/505))
([50ec7f4](50ec7f4a06))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Yuan Teoh <yuanteoh@google.com>
2025-05-06 16:32:01 -06:00
Yuan
a087280fe2 docs: fix indentation for release please (#540) 2025-05-06 16:08:02 -06:00
Yuan
c26b2f4d9e test: add integration tests for postgres-execute-sql tool (#494)
Add `postgres-execute-sql` to compatible source's integration tests.
2025-05-06 15:42:22 -06:00
Averi Kitsch
31a1fe971a docs: add dev assist tools using MCP documentation (#510)
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-06 13:58:17 -07:00
Twisha Bansal
1d096de82f docs: use env-based project in LlamaIndex Quickstart (#531)
The `GoogleGenAI` llm directly takes in the `Project ID` [set
up](https://googleapis.github.io/genai-toolbox/samples/bigquery/local_quickstart/#before-you-begin)
in the quickstart.

Partially fixes https://github.com/googleapis/genai-toolbox/issues/518
2025-05-06 22:09:57 +05:30
Jack Wotherspoon
652dc5c2dd docs: update colab badge link (#536)
The "Open in Colab" badge on the getting started quickstart links to the
GitHub file and not the colab.

Updating it to properly point at
https://colab.research.google.com/github/googleapis/genai-toolbox/blob/main/docs/en/getting-started/colab_quickstart.ipynb
2025-05-06 19:56:54 +05:30
Anubhav Dhawan
1dce40fc26 docs: Bump Toolbox version in Colab Quickstart + fix typo (#533) 2025-05-06 16:51:52 +05:30
Anubhav Dhawan
717f43420a docs: Address connection issues in local quickstart with clearer guidance (#520)
Fix for #517 

This PR improves the Local Quickstart guide by adding troubleshooting
advice for common PostgreSQL connection issues in [step
1](https://googleapis.github.io/genai-toolbox/getting-started/local_quickstart/#step-1-set-up-your-database).

This reduces friction and improves the setup experience for users
following the local quickstart by addressing feedback in #517 regarding
difficulties in the initial database connection step.

### Problem
Users faced issues like password prompts or "role 'postgres' does not
exist" errors when trying to connect to PostgreSQL with `psql -h
127.0.0.1 -U postgres`.

### Solution
This PR adds a notice that provides solutions for common connection
errors, including guidance on using `sudo -i -u postgres` for peer
authentication.

---------

Co-authored-by: Averi Kitsch <akitsch@google.com>
2025-05-06 11:24:59 +05:30
Mend Renovate
7c5ae0bf0b chore(deps): update module golang.org/x/oauth2 to v0.30.0 (#529)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| golang.org/x/oauth2 | `v0.29.0` -> `v0.30.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2foauth2/v0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/golang.org%2fx%2foauth2/v0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/golang.org%2fx%2foauth2/v0.29.0/v0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2foauth2/v0.29.0/v0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-05 10:38:57 -06:00
Jack Wotherspoon
8b68764ef6 docs: update wording and typos for AuthServices (#525)
The wording for `Authorized Invocations` reads a bit funny and has a
typo.

Updating it to make a bit more sense and fixing a couple other typos
around auth.
2025-05-05 16:24:03 +00:00
Jack Wotherspoon
c7189e9fcf docs: use --tools-file over deprecated --tools_file (#524)
Updating docs to use the `--tools-file` flag over the now deprecated
`--tools_file`.

The new flag was added as of `v0.3.0` in #384 

This change reduces confusion as current usage in docs results in
following message on startup of Toolbox server:

```sh
Flag --tools_file has been deprecated, please use --tools-file instead
```

Fixes #514

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-05 16:16:40 +00:00
Jack Wotherspoon
8b635955fc docs: update typo in MySQL tool (#526)
Updating description of MySQL tool to properly mention MySQL as it
has a typo and currently says SQL Server.
2025-05-05 10:10:59 -06:00
Andrew Brook
91cc3e366d docs: replace 'product' with 'solution' (#522)
To better conform to Google Cloud terminology, Toolbox should be
referred to as a "solution" rather than a "product".
2025-05-02 17:40:32 -07:00
shyam-cb
d7390b06b7 feat: add Couchbase as Source and Tool (#307)
Added couchbase support to Genai Toolbox

---------

Co-authored-by: duwenxin <duwenxin@google.com>
2025-05-02 16:37:58 -04:00
Mend Renovate
724957b4a9 chore(deps): update module github.com/neo4j/neo4j-go-driver/v5 to v5.28.1 (#513)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/neo4j/neo4j-go-driver/v5](https://redirect.github.com/neo4j/neo4j-go-driver)
| `v5.28.0` -> `v5.28.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fneo4j%2fneo4j-go-driver%2fv5/v5.28.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fneo4j%2fneo4j-go-driver%2fv5/v5.28.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fneo4j%2fneo4j-go-driver%2fv5/v5.28.0/v5.28.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fneo4j%2fneo4j-go-driver%2fv5/v5.28.0/v5.28.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>neo4j/neo4j-go-driver
(github.com/neo4j/neo4j-go-driver/v5)</summary>

###
[`v5.28.1`](https://redirect.github.com/neo4j/neo4j-go-driver/releases/tag/v5.28.1)

[Compare
Source](https://redirect.github.com/neo4j/neo4j-go-driver/compare/v5.28.0...v5.28.1)

See https://github.com/neo4j/neo4j-go-driver/wiki/5.x-changelog for more
information.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-05-02 11:10:35 -07:00
Yuan
c891c8e7bc chore: update renovate bot commit message type (#521) 2025-05-02 17:57:51 +00:00
Yuan
11ea7bc584 feat: add postgres-execute-sql tool (#490)
This tool can be used across all postgres sources.

`postgres-execute-sql` config is as below:

```
tools:
  postgres_execute_sql_tool:
    kind: "postgres-execute-sql"
    source: my-alloydb-source // or any other sources that is compatible with this tool
    description: Use this tool to execute sql.
```

The `postgres-execute-sql` tool takes one parameter. Example request as
follow:
```
curl -X POST -H "Content-Type: application/json" -d '{"sql": "SELECT 1"}' http://127.0.0.1:5000/api/tool/postgres_execute_sql_tool/invoke
```
2025-05-01 17:43:41 +00:00
Huan Chen
b2176c0e2f docs: update bigquery samples (#512)
1. Updated ADK dependencies.
2. Fixed sample code for Toolbox + ADK usage.
3. Updated the BigQuery MCP quickstart file to properly show the images.
2025-05-01 10:10:24 -07:00
Andrew Brook
f629df642b docs: update MCP Toolbox description (#504)
Minor edit to description of Toolbox to avoid some sensitivity around
production/enterprise suitability as that may imply compliance features
or guarantees which aren't suitable to an early stage product.

---------

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
Co-authored-by: Yuan Teoh <yuanteoh@google.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-29 13:52:59 -07:00
Mend Renovate
50ec7f4a06 fix(deps): update module google.golang.org/api to v0.231.0 (#505)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.230.0` -> `v0.231.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.231.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.231.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.230.0/v0.231.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.230.0/v0.231.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.231.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.231.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.230.0...v0.231.0)

##### Features

- **all:** Auto-regenerate discovery clients
([#&#8203;3122](https://redirect.github.com/googleapis/google-api-go-client/issues/3122))
([47cbba6](47cbba61ec))
- **all:** Auto-regenerate discovery clients
([#&#8203;3124](https://redirect.github.com/googleapis/google-api-go-client/issues/3124))
([677b602](677b602b6f))
- **all:** Auto-regenerate discovery clients
([#&#8203;3125](https://redirect.github.com/googleapis/google-api-go-client/issues/3125))
([8ccf1f0](8ccf1f0897))
- **all:** Auto-regenerate discovery clients
([#&#8203;3126](https://redirect.github.com/googleapis/google-api-go-client/issues/3126))
([4059351](405935174a))
- **all:** Auto-regenerate discovery clients
([#&#8203;3127](https://redirect.github.com/googleapis/google-api-go-client/issues/3127))
([ae18b22](ae18b2206b))
- **all:** Auto-regenerate discovery clients
([#&#8203;3129](https://redirect.github.com/googleapis/google-api-go-client/issues/3129))
([c33e0d1](c33e0d153c))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjI1Ny4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-29 13:43:50 -07:00
Huan Chen
570d7caf4d docs: update title for bigquery docs (#503) 2025-04-29 15:08:57 -04:00
Yuan
a6c17c96f3 test: cleanup integration test (#498)
Remove cleaning `\\` or `\` in `got` and `want` strings of test cases.
This is to prevent future the need to manually clean strings before
comparing. This also allows us to be aware of the amount of backspace to
prevent accidental escaping in src code.

Update integration test that is affected. This includes moving the
`want` of test cases for `my-param-tool` invocation to each sources
since spanner have a different format (return id as strings instead of
int).
2025-04-29 11:57:47 -07:00
Yuan
b6cd99e859 chore(http): update invocation results formatting (#502)
Update http tools `Invoke` method.
* use `json.Unmarshal` for response body that are either list or json
map. This will allow us to return lists as is (e.g. `[{map}]` instead of
having to nest it in an additional list (e.g. `[]any{ [{map}] }`)
* for response body that are strings or fail to unmarshal, return it as
is.
2025-04-28 21:09:07 -07:00
Huan Chen
9ba6235106 docs: Create samples folder and add BigQuery MCP guide (#496)
1. Create `samples` folder
2. Moved BQ samples into `samples`
3. Add BigQuery MCP guide

---------

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-28 18:16:57 -04:00
Mend Renovate
ad040cfb8b fix(deps): update module cloud.google.com/go/cloudsqlconn to v1.17.0 (#500)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/cloudsqlconn](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector)
| `v1.16.1` -> `v1.17.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.16.1/v1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.16.1/v1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/cloud-sql-go-connector
(cloud.google.com/go/cloudsqlconn)</summary>

###
[`v1.17.0`](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/releases/tag/v1.17.0)

[Compare
Source](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector/compare/v1.16.1...v1.17.0)

##### Features

- Update TLS validation to use both SAN and CN fields.
([#&#8203;979](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/issues/979))
([df60a20](df60a2061d))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjI1Ny4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2025-04-28 13:45:12 -07:00
Yuan
644aecd9d2 chore: remove automated label sync (#499)
Remove label sync that don't apply for this repo.
2025-04-28 10:52:55 -07:00
Kurtis Van Gent
8646989f80 chore: Update SQLite-sql title (#493) 2025-04-25 22:55:55 +00:00
Kurtis Van Gent
d1c870c004 chore: update bigquery-sql title (#492) 2025-04-25 16:51:41 -06:00
Yuan
038262bbe1 chore: add new repo labels (#491) 2025-04-25 21:55:43 +00:00
Huan Chen
7add34b544 docs: Add BigQuery quickstart colab and guide (#485)
Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-25 16:48:57 -04:00
Wenxin Du
b8dd50aded docs: Update IAM guide for Cloud SQL and AlloyDB (#480) 2025-04-25 15:27:12 -04:00
Mend Renovate
1e1348f5f0 fix(deps): update module cloud.google.com/go/spanner to v1.80.0 (#481)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/spanner](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.79.0` -> `v1.80.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fspanner/v1.80.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fspanner/v1.80.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fspanner/v1.79.0/v1.80.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fspanner/v1.79.0/v1.80.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjI1Ny4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2025-04-24 10:13:39 -07:00
Yuan
59f4452755 ci: optimize integration tests with shared compile step (#477)
Reduces test time >50%.

Added a step to compile all test files and run tests based on the name.
Also separated all tests to it's own package.
2025-04-23 15:18:59 -07:00
Kurtis Van Gent
a352045116 docs: update diagram to include more supported databases (#478) 2025-04-23 14:01:14 -06:00
release-please[bot]
4ed16ccd18 chore(main): release 0.4.0 (#411)
🤖 I have created a release *beep* *boop*
---


##
[0.4.0](https://github.com/googleapis/genai-toolbox/compare/v0.3.0...v0.4.0)
(2025-04-23)


### Features

* Add `AuthRequired` to Neo4j & Dgraph Tools
([#434](https://github.com/googleapis/genai-toolbox/issues/434))
([afbf4b2](afbf4b2dae))
* Add `AuthRequired` to tool manifest
([#433](https://github.com/googleapis/genai-toolbox/issues/433))
([d9388ad](d9388ad57e))
* Add BigQuery source and tool
([#463](https://github.com/googleapis/genai-toolbox/issues/463))
([8055aa5](8055aa519f))
* Add Bigtable source and tool
([#418](https://github.com/googleapis/genai-toolbox/issues/418))
([ae53b8e](ae53b8eeff))
* Add IAM AuthN to AlloyDB Source
([#399](https://github.com/googleapis/genai-toolbox/issues/399))
([e8ed447](e8ed447d91))
* Add IAM AuthN to Cloud SQL Sources
([#414](https://github.com/googleapis/genai-toolbox/issues/414))
([be85b82](be85b82078))
* Add toolset feature to mcp
([#425](https://github.com/googleapis/genai-toolbox/issues/425))
([e307857](e307857085)),
closes [#403](https://github.com/googleapis/genai-toolbox/issues/403)
* Add SQLite source and tool
([#438](https://github.com/googleapis/genai-toolbox/issues/438))
([fc14cbf](fc14cbfd07))
* Support env replacement for tools.yaml
([#462](https://github.com/googleapis/genai-toolbox/issues/462))
([eadb678](eadb678a7b))


### Bug Fixes

* [#419](https://github.com/googleapis/genai-toolbox/issues/419) TLS
https URL for SSE endpoint
([#420](https://github.com/googleapis/genai-toolbox/issues/420))
([0a7d3ff](0a7d3ff06b))
* **docs:** Fix link 'Edit this page'
([#454](https://github.com/googleapis/genai-toolbox/issues/454))
([969065e](969065e561)),
closes [#427](https://github.com/googleapis/genai-toolbox/issues/427)
* Update http error code from invocation
([#468](https://github.com/googleapis/genai-toolbox/issues/468))
([ff7c0ff](ff7c0ffc65)),
closes [#465](https://github.com/googleapis/genai-toolbox/issues/465)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
2025-04-23 13:22:25 -04:00
dependabot[bot]
fbeb2a9e59 chore(deps): bump github.com/go-jose/go-jose/v4 from 4.0.4 to 4.0.5 (#474)
Bumps
[github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose) from
4.0.4 to 4.0.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/go-jose/go-jose/releases">github.com/go-jose/go-jose/v4's
releases</a>.</em></p>
<blockquote>
<h2>v4.0.5</h2>
<h2>What's Changed</h2>
<ul>
<li>Don't allow unbounded amounts of splits by <a
href="https://github.com/mcpherrinm"><code>@​mcpherrinm</code></a> in <a
href="https://redirect.github.com/go-jose/go-jose/pull/167">go-jose/go-jose#167</a></li>
</ul>
<p>Fixes <a
href="https://github.com/go-jose/go-jose/security/advisories/GHSA-c6gw-w398-hv78">https://github.com/go-jose/go-jose/security/advisories/GHSA-c6gw-w398-hv78</a></p>
<p>Various other dependency updates, small fixes, and documentation
updates in the full changelog</p>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/tgeoghegan"><code>@​tgeoghegan</code></a> made
their first contribution in <a
href="https://redirect.github.com/go-jose/go-jose/pull/161">go-jose/go-jose#161</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/go-jose/go-jose/compare/v4.0.4...v4.0.5">https://github.com/go-jose/go-jose/compare/v4.0.4...v4.0.5</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/go-jose/go-jose/blob/main/CHANGELOG.md">github.com/go-jose/go-jose/v4's
changelog</a>.</em></p>
<blockquote>
<h2>Changed</h2>
<ul>
<li>Defined a custom error, ErrUnexpectedSignatureAlgorithm, returned
when a JWS
header contains an unsupported signature algorithm.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="99b346cec4"><code>99b346c</code></a>
Don't allow unbounded amounts of splits (<a
href="https://redirect.github.com/go-jose/go-jose/issues/167">#167</a>)</li>
<li><a
href="22811e77ba"><code>22811e7</code></a>
Fix broken link in README.md (<a
href="https://redirect.github.com/go-jose/go-jose/issues/161">#161</a>)</li>
<li><a
href="9dde8493b2"><code>9dde849</code></a>
Remove CLA mentions from CONTRIBUTING.md (<a
href="https://redirect.github.com/go-jose/go-jose/issues/160">#160</a>)</li>
<li><a
href="89172c5b51"><code>89172c5</code></a>
Bump golang.org/x/crypto from 0.31.0 to 0.32.0 (<a
href="https://redirect.github.com/go-jose/go-jose/issues/158">#158</a>)</li>
<li><a
href="ee05e01557"><code>ee05e01</code></a>
Bump github.com/stretchr/testify from 1.9.0 to 1.10.0 (<a
href="https://redirect.github.com/go-jose/go-jose/issues/157">#157</a>)</li>
<li><a
href="c0aef3ef5e"><code>c0aef3e</code></a>
Bump golang.org/x/crypto from 0.25.0 to 0.31.0 (<a
href="https://redirect.github.com/go-jose/go-jose/issues/156">#156</a>)</li>
<li><a
href="fdc2ceb0bb"><code>fdc2ceb</code></a>
Remove export disclaimer (<a
href="https://redirect.github.com/go-jose/go-jose/issues/146">#146</a>)</li>
<li><a
href="10c69ef86e"><code>10c69ef</code></a>
Short circuit return errors from <code>JSONWebKey.UnmarshalJSON()</code>
(<a
href="https://redirect.github.com/go-jose/go-jose/issues/141">#141</a>)</li>
<li>See full diff in <a
href="https://github.com/go-jose/go-jose/compare/v4.0.4...v4.0.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/go-jose/go-jose/v4&package-manager=go_modules&previous-version=4.0.4&new-version=4.0.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/googleapis/genai-toolbox/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-23 13:04:06 -04:00
Wenxin Du
d9388ad57e feat: Add AuthRequired to Tool Manifest (#433)
Add `AuthRequired` to Tool Manifest so SDK could throw an error early
for unauthorized Tool invocations.
SDK changes:
https://github.com/googleapis/mcp-toolbox-sdk-python/pull/72/files

Also added `authRequired` to Neo4j and dgraph tools.
2025-04-23 12:52:04 -04:00
Mend Renovate
8014eea033 fix(deps): update module modernc.org/sqlite to v1.37.0 (#471)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `v1.21.2` ->
`v1.37.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/modernc.org%2fsqlite/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/modernc.org%2fsqlite/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/modernc.org%2fsqlite/v1.21.2/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/modernc.org%2fsqlite/v1.21.2/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>cznic/sqlite (modernc.org/sqlite)</summary>

###
[`v1.37.0`](https://gitlab.com/cznic/sqlite/compare/v1.36.3...v1.37.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.36.3...v1.37.0)

###
[`v1.36.3`](https://gitlab.com/cznic/sqlite/compare/v1.36.2...v1.36.3)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.36.2...v1.36.3)

###
[`v1.36.2`](https://gitlab.com/cznic/sqlite/compare/v1.36.1...v1.36.2)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.36.1...v1.36.2)

###
[`v1.36.1`](https://gitlab.com/cznic/sqlite/compare/v1.36.0...v1.36.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.36.0...v1.36.1)

###
[`v1.36.0`](https://gitlab.com/cznic/sqlite/compare/v1.35.0...v1.36.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.35.0...v1.36.0)

###
[`v1.35.0`](https://gitlab.com/cznic/sqlite/compare/v1.34.5...v1.35.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.34.5...v1.35.0)

###
[`v1.34.5`](https://gitlab.com/cznic/sqlite/compare/v1.34.4...v1.34.5)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.34.4...v1.34.5)

###
[`v1.34.4`](https://gitlab.com/cznic/sqlite/compare/v1.34.3...v1.34.4)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.34.3...v1.34.4)

###
[`v1.34.3`](https://gitlab.com/cznic/sqlite/compare/v1.34.2...v1.34.3)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.34.2...v1.34.3)

###
[`v1.34.2`](https://gitlab.com/cznic/sqlite/compare/v1.34.1...v1.34.2)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.34.1...v1.34.2)

###
[`v1.34.1`](https://gitlab.com/cznic/sqlite/compare/v1.34.0...v1.34.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.34.0...v1.34.1)

###
[`v1.34.0`](https://gitlab.com/cznic/sqlite/compare/v1.33.1...v1.34.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.33.1...v1.34.0)

###
[`v1.33.1`](https://gitlab.com/cznic/sqlite/compare/v1.33.0...v1.33.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.33.0...v1.33.1)

###
[`v1.33.0`](https://gitlab.com/cznic/sqlite/compare/v1.32.0...v1.33.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.32.0...v1.33.0)

###
[`v1.32.0`](https://gitlab.com/cznic/sqlite/compare/v1.31.1...v1.32.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.31.1...v1.32.0)

###
[`v1.31.1`](https://gitlab.com/cznic/sqlite/compare/v1.31.0...v1.31.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.31.0...v1.31.1)

###
[`v1.31.0`](https://gitlab.com/cznic/sqlite/compare/v1.30.2...v1.31.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.30.2...v1.31.0)

###
[`v1.30.2`](https://gitlab.com/cznic/sqlite/compare/v1.30.1...v1.30.2)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.30.1...v1.30.2)

###
[`v1.30.1`](https://gitlab.com/cznic/sqlite/compare/v1.30.0...v1.30.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.30.0...v1.30.1)

###
[`v1.30.0`](https://gitlab.com/cznic/sqlite/compare/v1.29.10...v1.30.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.10...v1.30.0)

###
[`v1.29.10`](https://gitlab.com/cznic/sqlite/compare/v1.29.9...v1.29.10)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.9...v1.29.10)

###
[`v1.29.9`](https://gitlab.com/cznic/sqlite/compare/v1.29.8...v1.29.9)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.8...v1.29.9)

###
[`v1.29.8`](https://gitlab.com/cznic/sqlite/compare/v1.29.7...v1.29.8)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.7...v1.29.8)

###
[`v1.29.7`](https://gitlab.com/cznic/sqlite/compare/v1.29.6...v1.29.7)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.6...v1.29.7)

###
[`v1.29.6`](https://gitlab.com/cznic/sqlite/compare/v1.29.5...v1.29.6)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.5...v1.29.6)

###
[`v1.29.5`](https://gitlab.com/cznic/sqlite/compare/v1.29.4...v1.29.5)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.4...v1.29.5)

###
[`v1.29.4`](https://gitlab.com/cznic/sqlite/compare/v1.29.3...v1.29.4)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.3...v1.29.4)

###
[`v1.29.3`](https://gitlab.com/cznic/sqlite/compare/v1.29.2...v1.29.3)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.2...v1.29.3)

###
[`v1.29.2`](https://gitlab.com/cznic/sqlite/compare/v1.29.1...v1.29.2)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.1...v1.29.2)

###
[`v1.29.1`](https://gitlab.com/cznic/sqlite/compare/v1.29.0...v1.29.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.29.0...v1.29.1)

###
[`v1.29.0`](https://gitlab.com/cznic/sqlite/compare/v1.28.0...v1.29.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.28.0...v1.29.0)

###
[`v1.28.0`](https://gitlab.com/cznic/sqlite/compare/v1.27.0...v1.28.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.27.0...v1.28.0)

###
[`v1.27.0`](https://gitlab.com/cznic/sqlite/compare/v1.26.0...v1.27.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.26.0...v1.27.0)

###
[`v1.26.0`](https://gitlab.com/cznic/sqlite/compare/v1.25.0...v1.26.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.25.0...v1.26.0)

###
[`v1.25.0`](https://gitlab.com/cznic/sqlite/compare/v1.24.0...v1.25.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.24.0...v1.25.0)

###
[`v1.24.0`](https://gitlab.com/cznic/sqlite/compare/v1.23.1...v1.24.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.23.1...v1.24.0)

###
[`v1.23.1`](https://gitlab.com/cznic/sqlite/compare/v1.23.0...v1.23.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.23.0...v1.23.1)

###
[`v1.23.0`](https://gitlab.com/cznic/sqlite/compare/v1.22.1...v1.23.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.22.1...v1.23.0)

###
[`v1.22.1`](https://gitlab.com/cznic/sqlite/compare/v1.22.0...v1.22.1)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.22.0...v1.22.1)

###
[`v1.22.0`](https://gitlab.com/cznic/sqlite/compare/v1.21.2...v1.22.0)

[Compare
Source](https://gitlab.com/cznic/sqlite/compare/v1.21.2...v1.22.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-23 12:42:13 -04:00
Mend Renovate
b61ae8f02f fix(deps): update module google.golang.org/api to v0.230.0 (#467)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.229.0` -> `v0.230.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.230.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.230.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.229.0/v0.230.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.229.0/v0.230.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.230.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.230.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.229.0...v0.230.0)

##### Features

- **all:** Auto-regenerate discovery clients
([#&#8203;3111](https://redirect.github.com/googleapis/google-api-go-client/issues/3111))
([59f08c8](59f08c8d98))
- **all:** Auto-regenerate discovery clients
([#&#8203;3113](https://redirect.github.com/googleapis/google-api-go-client/issues/3113))
([40e4fb1](40e4fb1ee0))
- **all:** Auto-regenerate discovery clients
([#&#8203;3114](https://redirect.github.com/googleapis/google-api-go-client/issues/3114))
([f0bb0a1](f0bb0a1315))
- **all:** Auto-regenerate discovery clients
([#&#8203;3115](https://redirect.github.com/googleapis/google-api-go-client/issues/3115))
([c122b14](c122b14b51))
- **all:** Auto-regenerate discovery clients
([#&#8203;3117](https://redirect.github.com/googleapis/google-api-go-client/issues/3117))
([1c0aadb](1c0aadbeaf))
- **all:** Auto-regenerate discovery clients
([#&#8203;3118](https://redirect.github.com/googleapis/google-api-go-client/issues/3118))
([2b6fa61](2b6fa61936))
- **all:** Auto-regenerate discovery clients
([#&#8203;3120](https://redirect.github.com/googleapis/google-api-go-client/issues/3120))
([18c546e](18c546ede7))
- **all:** Auto-regenerate discovery clients
([#&#8203;3121](https://redirect.github.com/googleapis/google-api-go-client/issues/3121))
([ff1b166](ff1b166e45))

##### Bug Fixes

- Removes-redundant
([#&#8203;3095](https://redirect.github.com/googleapis/google-api-go-client/issues/3095))
([9e9ff11](9e9ff112ac))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-23 12:24:31 -04:00
Mend Renovate
aade563c86 fix(deps): update module cloud.google.com/go/bigquery to v1.67.0 (#469)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/bigquery](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.66.2` -> `v1.67.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fbigquery/v1.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fbigquery/v1.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fbigquery/v1.66.2/v1.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fbigquery/v1.66.2/v1.67.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-23 11:04:04 -04:00
Wenxin Du
4dfeeec240 ci: Correct excluded file in unit test coverage (#470)
unit test coverage 44.6% --> 53.6
2025-04-23 14:31:54 +00:00
Wenxin Du
0c0d7b8637 chore: Add user agent to Bigtable and BigQuery (#473)
Add user agent for metrics tracing.
2025-04-23 10:20:24 -04:00
Wenxin Du
eadb678a7b feat: Support env replacement for tool.yaml (#462)
Environment variable replacement is needed so that users don't have to
hardcode their secrets in configuring `tools.yaml`.
Both formats `$ENV_NAME` and `${ENV_NAME}` are standard ways to declare
an environment variable.
However, some database statement placeholders that are already using the
`$ENV_NAME` format.
Therefore, we only support env var declaration using `${ENV_NAME}` to
disambiguate it from other usages.

Fixes issue: https://github.com/googleapis/genai-toolbox/issues/431
2025-04-23 07:33:02 -04:00
waqarahmed6095
fc14cbfd07 feat: sqlite implementation (#438)
Adding sqlite implementation

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Yuan Teoh <yuanteoh@google.com>
2025-04-22 22:25:53 -07:00
Huan Chen
8055aa519f feat: Add BigQuery source and tool (#463)
A `BigQuery` source can be added as the following example:

```yaml
sources:
  my-bigquery-source:
    kind: bigquery
    project: bigframes-dev
    location: us # This field is optional
```

A `BigQuery` tool can be added as below:
```yaml
tools:
  search-hotels-by-name:
    kind: bigquery-sql
    source: my-bigquery-source
    description: Search for hotels based on name.
    parameters:
      - name: name
        type: string
        description: The name of the hotel.
```

---------

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-22 20:37:38 -06:00
Yuan
ff7c0ffc65 fix: update http error code from invocation (#468)
Update http error code for invocation failure. Invocation may fail if
user fail to provide required parameter etc.

Fixes #465
2025-04-23 02:05:10 +00:00
Wenxin Du
073ca58ac1 ci: Increase unit test coverage (#466)
Add unit test for Tool invoke handler.
Exclude config.go from coverage calculation.

---------

Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
2025-04-23 01:57:46 +00:00
Yuan
ba0d6489eb test: cleanup mcp in integration tests (#461)
fix previous error in mcp integration tests. 

Add MCP integration tests to alloydb ai nl and bigtable.
2025-04-22 10:23:09 -07:00
Michael Hunger
53ce38021d docs: add tested clients table (#428)
Added a table with supported clients for MCP Server

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
2025-04-22 10:11:52 -07:00
Yuan
43490dfa81 chore: remove request headers from logging (#464) 2025-04-22 09:51:52 -07:00
Wenxin Du
afbf4b2dae feat: Add AuthRequired to neo4j & dgraph Tools (#434)
neo4j & dgraph Tools are missing the `AuthRequired` fields.
2025-04-21 17:53:55 -04:00
Yuan
dced46ad88 chore: cleanup go context (#457) 2025-04-21 20:16:05 +00:00
Twisha Bansal
ba1d52aa04 docs: add ADK to colab quickstart (#459) 2025-04-21 14:14:59 +00:00
Twisha Bansal
2c3f00c0cd docs: better response messages for ADK agent (#460) 2025-04-21 19:41:46 +05:30
Twisha Bansal
71132d05d2 docs: add ADK in quickstart intro (#458) 2025-04-21 18:02:23 +05:30
F. Hinkelmann
c4de4be044 docs: add ADK to local quickstart (#439)
Add ADK to the local quickstart.

---------

Co-authored-by: Twisha Bansal <58483338+twishabansal@users.noreply.github.com>
2025-04-21 06:24:31 +00:00
Andreas Deininger
59a14a2322 chore: Set content dir via mount (#455)
This PR changes the way the content dir is configured: it is now
configured via a module mount.
As described in the [official
docs](https://gohugo.io/configuration/all/#contentdir), this is a more
flexible approach to configure this directory.

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-18 15:00:26 -07:00
Kurtis Van Gent
12a4f564b7 ci(docs): fix docs deploy when changes in .hugo folder (#456) 2025-04-18 13:55:02 -07:00
Andreas Deininger
969065e561 fix(docs): fix link 'Edit this page' (#454)
This PR fixes https://github.com/google/docsy/issues/2218.

This PR adds `layouts/partials/page-meta-links.html` to your repo which
takes precedence over the original file from docsy theme (which is
faulty). Don't forget to remove this file again once this issue is fixed
in the docsy theme.

fixes #427
2025-04-18 13:38:04 -07:00
Mend Renovate
b690f5ddc2 fix(deps): update module cloud.google.com/go/bigtable to v1.37.0 (#452)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/bigtable](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.36.0` -> `v1.37.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fbigtable/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fbigtable/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fbigtable/v1.36.0/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fbigtable/v1.36.0/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-18 11:23:56 -07:00
Mend Renovate
68502951ea chore(deps): update dependency go to v1.24.2 (#366)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | minor |
`1.23.2` -> `1.24.2` |

---

### Release Notes

<details>
<summary>golang/go (go)</summary>

###
[`v1.24.2`](https://redirect.github.com/golang/go/compare/go1.24.1...go1.24.2)

###
[`v1.24.1`](https://redirect.github.com/golang/go/compare/go1.24.0...go1.24.1)

###
[`v1.24.0`](https://redirect.github.com/golang/go/compare/go1.23.6...go1.24.0)

###
[`v1.23.8`](https://redirect.github.com/golang/go/compare/go1.23.7...go1.23.8)

###
[`v1.23.7`](https://redirect.github.com/golang/go/compare/go1.23.6...go1.23.7)

###
[`v1.23.6`](https://redirect.github.com/golang/go/compare/go1.23.5...go1.23.6)

###
[`v1.23.5`](https://redirect.github.com/golang/go/compare/go1.23.4...go1.23.5)

###
[`v1.23.4`](https://redirect.github.com/golang/go/compare/go1.23.3...go1.23.4)

###
[`v1.23.3`](https://redirect.github.com/golang/go/compare/go1.23.2...go1.23.3)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2025-04-18 12:08:26 -06:00
Andreas Deininger
8954fb0378 chore(docs): fix duplicate persistance key warning (#453)
When previewing the site, warnings are printed out:

```
WARN  Shortcode "tabpane": duplicate tab-persistence key "yaml" detected, disabling persistence to avoid multiple tab display.
```

This PR fixes these issues.

Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
2025-04-18 11:25:57 -06:00
An Nguyen
ae53b8eeff feat: Add Bigtable source and tool (#418)
# Add Bigtable support

A `bigtable` source can be added as the following example

```
sources:
  test-bigtable-source:
    kind: "bigtable"
    project: "sample-project"
    instance: "sample-instance"
```

A `bigtable` tool can be added as below

```
tools:
  get-test-tool-data:
    kind: bigtable-sql
    source: test-bigtable-source
    description: Some description
    statement: SELECT * FROM `test-table` WHERE address['state'] = @state;
    parameters:
      - name: state
        type: string
        description: Filter by state
```

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
2025-04-18 10:48:28 -06:00
Andreas Deininger
91f4402a71 Fix typos (#451)
This PR fixes a few typos I spotted in the project.
2025-04-17 17:40:43 -07:00
Wenxin Du
52b09a67cb doc: Add local integration testing instruction (#449)
Instructions for external contributors to run integration test locally.
2025-04-17 14:39:47 -04:00
Yuan
4eb78fb2ac docs(mcp): add toolset feature to mcp doc (#450)
Add instructions on using toolset in docs.
Also added toolset to the quickstart example to reflect that we support
toolset within mcp and be consistent with the local quickstart.
2025-04-16 17:40:24 -07:00
Mend Renovate
6cb407969b fix(deps): update module cloud.google.com/go/alloydbconn to v1.15.1 (#440)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/alloydbconn](https://redirect.github.com/googlecloudplatform/alloydb-go-connector)
| `v1.15.0` -> `v1.15.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2falloydbconn/v1.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2falloydbconn/v1.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2falloydbconn/v1.15.0/v1.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2falloydbconn/v1.15.0/v1.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/alloydb-go-connector
(cloud.google.com/go/alloydbconn)</summary>

###
[`v1.15.1`](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/releases/tag/v1.15.1)

[Compare
Source](https://redirect.github.com/googlecloudplatform/alloydb-go-connector/compare/v1.15.0...v1.15.1)

##### Bug Fixes

- configure Cloud Monitoring client correctly
([#&#8203;673](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/issues/673))
([91d86af](91d86aff04))
- shut down the internal exporter only once
([#&#8203;671](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/issues/671))
([16a6782](16a67829b4)),
closes
[#&#8203;776](https://redirect.github.com/GoogleCloudPlatform/alloydb-go-connector/issues/776)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzguMCIsInVwZGF0ZWRJblZlciI6IjM5LjIzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2025-04-16 15:40:32 -07:00
Mend Renovate
c5c1172170 chore(deps): update actions/setup-node digest to 49933ea (#436)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/setup-node](https://redirect.github.com/actions/setup-node) |
action | digest | `cdca736` -> `49933ea` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzguMCIsInVwZGF0ZWRJblZlciI6IjM5LjIzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-16 15:20:13 -07:00
Mend Renovate
b3be1ffa3c fix(deps): update module google.golang.org/api to v0.229.0 (#442)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://redirect.github.com/googleapis/google-api-go-client)
| `v0.228.0` -> `v0.229.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.229.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.229.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.228.0/v0.229.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.228.0/v0.229.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googleapis/google-api-go-client
(google.golang.org/api)</summary>

###
[`v0.229.0`](https://redirect.github.com/googleapis/google-api-go-client/releases/tag/v0.229.0)

[Compare
Source](https://redirect.github.com/googleapis/google-api-go-client/compare/v0.228.0...v0.229.0)

##### Features

- **all:** Auto-regenerate discovery clients
([#&#8203;3082](https://redirect.github.com/googleapis/google-api-go-client/issues/3082))
([ab1e35b](ab1e35bd92))
- **all:** Auto-regenerate discovery clients
([#&#8203;3084](https://redirect.github.com/googleapis/google-api-go-client/issues/3084))
([eab2179](eab21799a2))
- **all:** Auto-regenerate discovery clients
([#&#8203;3085](https://redirect.github.com/googleapis/google-api-go-client/issues/3085))
([9af4079](9af4079c0c))
- **all:** Auto-regenerate discovery clients
([#&#8203;3086](https://redirect.github.com/googleapis/google-api-go-client/issues/3086))
([9c927b6](9c927b6514))
- **all:** Auto-regenerate discovery clients
([#&#8203;3087](https://redirect.github.com/googleapis/google-api-go-client/issues/3087))
([3c387cd](3c387cdc0b))
- **all:** Auto-regenerate discovery clients
([#&#8203;3089](https://redirect.github.com/googleapis/google-api-go-client/issues/3089))
([b64e792](b64e792916))
- **all:** Auto-regenerate discovery clients
([#&#8203;3090](https://redirect.github.com/googleapis/google-api-go-client/issues/3090))
([65fc9d3](65fc9d3edb))
- **all:** Auto-regenerate discovery clients
([#&#8203;3093](https://redirect.github.com/googleapis/google-api-go-client/issues/3093))
([3a51a3a](3a51a3a77e))
- **all:** Auto-regenerate discovery clients
([#&#8203;3094](https://redirect.github.com/googleapis/google-api-go-client/issues/3094))
([ca84516](ca845161fd))
- **all:** Auto-regenerate discovery clients
([#&#8203;3096](https://redirect.github.com/googleapis/google-api-go-client/issues/3096))
([9e992f4](9e992f492d))
- **all:** Auto-regenerate discovery clients
([#&#8203;3097](https://redirect.github.com/googleapis/google-api-go-client/issues/3097))
([c09b6a9](c09b6a9455))
- **all:** Auto-regenerate discovery clients
([#&#8203;3099](https://redirect.github.com/googleapis/google-api-go-client/issues/3099))
([66d2175](66d217562f))
- **all:** Auto-regenerate discovery clients
([#&#8203;3101](https://redirect.github.com/googleapis/google-api-go-client/issues/3101))
([9ad998b](9ad998bc30))
- **all:** Auto-regenerate discovery clients
([#&#8203;3102](https://redirect.github.com/googleapis/google-api-go-client/issues/3102))
([70d6fb2](70d6fb2593))
- **all:** Auto-regenerate discovery clients
([#&#8203;3103](https://redirect.github.com/googleapis/google-api-go-client/issues/3103))
([414e575](414e575dda))
- **all:** Auto-regenerate discovery clients
([#&#8203;3104](https://redirect.github.com/googleapis/google-api-go-client/issues/3104))
([91f6589](91f6589572))
- **all:** Auto-regenerate discovery clients
([#&#8203;3105](https://redirect.github.com/googleapis/google-api-go-client/issues/3105))
([1c5ea6c](1c5ea6cfdd))
- **all:** Auto-regenerate discovery clients
([#&#8203;3106](https://redirect.github.com/googleapis/google-api-go-client/issues/3106))
([fabfddf](fabfddf970))
- **all:** Auto-regenerate discovery clients
([#&#8203;3107](https://redirect.github.com/googleapis/google-api-go-client/issues/3107))
([ecbc1a9](ecbc1a9e09))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzguMCIsInVwZGF0ZWRJblZlciI6IjM5LjIzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-16 15:16:02 -07:00
Mend Renovate
a64e7c1e1a fix(deps): update module cloud.google.com/go/cloudsqlconn to v1.16.1 (#448)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/cloudsqlconn](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector)
| `v1.16.0` -> `v1.16.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.16.0/v1.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fcloudsqlconn/v1.16.0/v1.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>googlecloudplatform/cloud-sql-go-connector
(cloud.google.com/go/cloudsqlconn)</summary>

###
[`v1.16.1`](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/releases/tag/v1.16.1)

[Compare
Source](https://redirect.github.com/googlecloudplatform/cloud-sql-go-connector/compare/v1.16.0...v1.16.1)

##### Bug Fixes

- bump dependencies to latest
([#&#8203;968](https://redirect.github.com/GoogleCloudPlatform/cloud-sql-go-connector/issues/968))
([bb3c9f4](bb3c9f4cb3))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzguMCIsInVwZGF0ZWRJblZlciI6IjM5LjIzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-16 15:02:20 -07:00
dependabot[bot]
0106a1ebfd chore(deps): bump golang.org/x/net from 0.37.0 to 0.38.0 (#447)
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.37.0 to
0.38.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e1fcd82abb"><code>e1fcd82</code></a>
html: properly handle trailing solidus in unquoted attribute value in
foreign...</li>
<li><a
href="ebed060e8f"><code>ebed060</code></a>
internal/http3: fix build of tests with GOEXPERIMENT=nosynctest</li>
<li><a
href="1f1fa29e0a"><code>1f1fa29</code></a>
publicsuffix: regenerate table</li>
<li><a
href="12150816f7"><code>1215081</code></a>
http2: improve error when server sends HTTP/1</li>
<li><a
href="312450e473"><code>312450e</code></a>
html: ensure &lt;search&gt; tag closes &lt;p&gt; and update tests</li>
<li><a
href="09731f9bf9"><code>09731f9</code></a>
http2: improve handling of lost PING in Server</li>
<li><a
href="55989e24b9"><code>55989e2</code></a>
http2/h2c: use ResponseController for hijacking connections</li>
<li><a
href="2914f46773"><code>2914f46</code></a>
websocket: re-recommend gorilla/websocket</li>
<li>See full diff in <a
href="https://github.com/golang/net/compare/v0.37.0...v0.38.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang.org/x/net&package-manager=go_modules&previous-version=0.37.0&new-version=0.38.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/googleapis/genai-toolbox/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-16 14:48:58 -07:00
Yuan
1a8a360305 test(server/mcp): add tls unit test (#426)
Refactor common test so that we can run both non-tls test server and tls
test server.
Add unit test for tls server in MCP sse endpoint test cases.
2025-04-16 14:31:22 -07:00
Yuan
e307857085 feat: add toolset feature to mcp (#425)
Update MCP server to support toolset.

User can now connect to specific toolset's sse via
`/mcp/{toolset_name}/sse` url, or POST to `/mcp/{toolset_name}`. If
toolset_name is not provided, it will list all tools by default.

Fixes #403
2025-04-16 14:11:53 -07:00
Wenxin Du
29560d66a0 ci: Add Spanner integration tests (#441)
Add Spanner integration tests
2025-04-16 17:04:50 -04:00
Kurtis Van Gent
4dba0df12d chore(ci/cd): pin version of hugo (#444)
Hugo's recent release seems to have broken docsy:
https://github.com/gohugoio/hugo/issues/13599
There's a fix in progress: https://github.com/google/docsy/pull/2215

To unblock CI/CD, I've pinned hugo to 0.145.0 instead.
2025-04-15 09:55:28 +05:30
Kurtis Van Gent
e99655ab68 chore: correct ISSUE_TEMPLATE folder name (#432) 2025-04-10 13:28:28 -07:00
Twisha Bansal
62e8d7bec4 chore: fix link (#430) 2025-04-10 11:33:34 +00:00
Twisha Bansal
f232e5387e docs: make quickstart async-first (#421) 2025-04-10 17:00:48 +05:30
Twisha Bansal
e9bd41aa18 docs: added toolbox-core to toolbox documentation (#424) 2025-04-10 14:10:38 +05:30
Twisha Bansal
f1ca030038 docs: Modify quickstart introduction (#429) 2025-04-10 14:07:19 +05:30
Twisha Bansal
7ea3c904ce docs: Add a toolbox-core quickstart (#407)
Co-authored-by: Anubhav Dhawan <anubhavdhawan@google.com>
2025-04-10 05:05:57 +00:00
Michael Hunger
0a7d3ff06b fix: #419 TLS https URL for SSE endpoint (#420)
Fixes that in SSL deployments, e.g. on k8s or cloud run the SSE endpoint
was statically returning `http:`

not a scheme based on request TLS attribute.

Fixes https://github.com/googleapis/genai-toolbox/issues/419

---------

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-09 11:43:23 -07:00
Twisha Bansal
cf967452e1 chore: rename sdk repo to mcp-toolbox-sdk-python (#423) 2025-04-09 23:19:56 +05:30
Twisha Bansal
73332b9b9e chore: add toolbox-core to readme (#422) 2025-04-09 14:22:11 +05:30
Twisha Bansal
6b907db9f0 chore: fix link (#417) 2025-04-08 21:32:30 +00:00
Mend Renovate
21b82c10c2 fix(deps): update module cloud.google.com/go/spanner to v1.79.0 (#415)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/spanner](https://redirect.github.com/googleapis/google-cloud-go)
| `v1.78.0` -> `v1.79.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fspanner/v1.79.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fspanner/v1.79.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fspanner/v1.78.0/v1.79.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fspanner/v1.78.0/v1.79.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzUuMiIsInVwZGF0ZWRJblZlciI6IjM5LjIzNS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-08 14:29:36 -07:00
Mend Renovate
6638fbb3a0 fix(deps): update module github.com/go-sql-driver/mysql to v1.9.2 (#408)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/go-sql-driver/mysql](https://redirect.github.com/go-sql-driver/mysql)
| `v1.9.1` -> `v1.9.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgo-sql-driver%2fmysql/v1.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgo-sql-driver%2fmysql/v1.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgo-sql-driver%2fmysql/v1.9.1/v1.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgo-sql-driver%2fmysql/v1.9.1/v1.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>go-sql-driver/mysql (github.com/go-sql-driver/mysql)</summary>

###
[`v1.9.2`](https://redirect.github.com/go-sql-driver/mysql/blob/HEAD/CHANGELOG.md#v192-2025-04-07)

[Compare
Source](https://redirect.github.com/go-sql-driver/mysql/compare/v1.9.1...v1.9.2)

v1.9.2 is a re-release of v1.9.1 due to a release process issue; no
changes were made to the content.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Wenxin Du <117315983+duwenxin99@users.noreply.github.com>
Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-08 17:15:13 -04:00
Mend Renovate
92ed74a4df fix(deps): update module golang.org/x/oauth2 to v0.29.0 (#416)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| golang.org/x/oauth2 | `v0.28.0` -> `v0.29.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2foauth2/v0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/golang.org%2fx%2foauth2/v0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/golang.org%2fx%2foauth2/v0.28.0/v0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2foauth2/v0.28.0/v0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/genai-toolbox).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzUuMiIsInVwZGF0ZWRJblZlciI6IjM5LjIzNS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Yuan <45984206+Yuan325@users.noreply.github.com>
2025-04-08 14:02:07 -07:00
Wenxin Du
be85b82078 feat: add IAM AuthN to Cloud SQL Sources (#414)
Add IAM support for Cloud SQL source connection using Go language
connector:
https://pkg.go.dev/cloud.google.com/go/cloudsqlconn#section-readme
2025-04-08 16:26:00 -04:00
Wenxin Du
e8ed447d91 feat: Add IAM authentication to AlloyDB Source (#399)
Add IAM support for AlloyDB source connection:
https://pkg.go.dev/cloud.google.com/go/alloydbconn#section-readme
2025-04-08 13:02:44 -04:00
Kurtis Van Gent
8ef32cc73a chore: rebrand as MCP Toolbox (#412) 2025-04-07 15:46:20 -06:00
Yuan
75d2296d7a chore: add debug logs (#409)
Add debug logs to API and MCP server.

Example of debug logs added:
```
2025-04-07T11:12:04.62309-07:00 DEBUG "tool name: list_flights_by_arrival_airport"
2025-04-07T11:12:04.623264-07:00 DEBUG "tool invocation authorized"
2025-04-07T11:12:04.623717-07:00 DEBUG "invocation params: [{departure_airport SFO} {date 2025-04-07}]"
```
2025-04-07 12:27:31 -07:00
Yuan
b81feb61e6 fix: run linter (#410) 2025-04-07 11:18:04 -07:00
Kurtis Van Gent
d8fc6bdb6f chore: add issue forms (#404)
Add new issue forms.
2025-04-07 16:48:41 +00:00
Twisha Bansal
5cf4b8fea1 chore: remove default project id from quickstart colab. (#405) 2025-04-07 19:00:43 +05:30
Anubhav Dhawan
a9905cf39e doc: fix typo in the MCP Quickstart (#401) 2025-04-05 21:26:23 +00:00
Anubhav Dhawan
460fe5c944 doc: fix minor typo in MCP guide (#402) 2025-04-05 15:13:21 -06:00
244 changed files with 21183 additions and 2446 deletions

View File

@@ -17,7 +17,7 @@ steps:
waitFor: ['-']
script: |
#!/usr/bin/env bash
docker buildx build --build-arg METADATA_TAGS=$(git rev-parse HEAD) -t ${_DOCKER_URI}:$REF_NAME .
docker buildx build --build-arg COMMIT_SHA=$(git rev-parse HEAD) -t ${_DOCKER_URI}:$REF_NAME .
- id: "push-docker"
name: "gcr.io/cloud-builders/docker"
@@ -50,7 +50,7 @@ steps:
script: |
#!/usr/bin/env bash
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.linux.amd64.$REF_NAME" -o toolbox.linux.amd64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.linux.amd64
- id: "store-linux-amd64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -72,7 +72,7 @@ steps:
script: |
#!/usr/bin/env bash
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.darwin.arm64.$REF_NAME" -o toolbox.darwin.arm64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.darwin.arm64
- id: "store-darwin-arm64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -94,7 +94,7 @@ steps:
script: |
#!/usr/bin/env bash
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.darwin.amd64.$REF_NAME" -o toolbox.darwin.amd64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.darwin.amd64
- id: "store-darwin-amd64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -116,7 +116,7 @@ steps:
script: |
#!/usr/bin/env bash
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.windows.amd64.$REF_NAME" -o toolbox.windows.amd64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.windows.amd64
- id: "store-windows-amd64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -124,7 +124,7 @@ steps:
- "build-windows-amd64"
script: |
#!/usr/bin/env bash
gcloud storage cp toolbox.windows.amd64 gs://$_BUCKET_NAME/$REF_NAME/windows/amd64/toolbox
gcloud storage cp toolbox.windows.amd64 gs://$_BUCKET_NAME/$REF_NAME/windows/amd64/toolbox.exe
options:
automapSubstitutions: true

View File

@@ -11,20 +11,37 @@ fi
FILES=("linux.amd64" "darwin.arm64" "darwin.amd64" "windows.amd64")
output_string=""
# Define the descriptions - ensure this array's order matches FILES
DESCRIPTIONS=(
"For **Linux** systems running on **Intel/AMD 64-bit processors**."
"For **macOS** systems running on **Apple Silicon** (M1, M2, M3, etc.) processors."
"For **macOS** systems running on **Intel processors**."
"For **Windows** systems running on **Intel/AMD 64-bit processors**."
)
# Write the table header
ROW_FMT="| %-93s | %73s |"
output_string+=$(printf "$ROW_FMT" "**os/arch**" "**sha256**")$'\n'
output_string+=$(printf "$ROW_FMT" $(printf -- '-%0.s' {1..93}) $(printf -- '-%0.s' {1..73}))$'\n'
ROW_FMT="| %-105s | %-120s | %-67s |\n"
output_string+=$(printf "$ROW_FMT" "**OS/Architecture**" "**Description**" "**SHA256 Hash**")$'\n'
output_string+=$(printf "$ROW_FMT" "$(printf -- '-%0.s' {1..105})" "$(printf -- '-%0.s' {1..120})" "$(printf -- '-%0.s' {1..67})")$'\n'
# Loop through all files matching the pattern "toolbox.*.*"
for file in "${FILES[@]}"
for i in "${!FILES[@]}"
do
file_key="${FILES[$i]}" # e.g., "linux.amd64"
description_text="${DESCRIPTIONS[$i]}"
# Extract OS and ARCH from the filename
OS=$(echo "$file" | cut -d '.' -f 1)
ARCH=$(echo "$file" | cut -d '.' -f 2)
OS=$(echo "$file_key" | cut -d '.' -f 1)
ARCH=$(echo "$file_key" | cut -d '.' -f 2)
# Get release URL
URL=https://storage.googleapis.com/genai-toolbox/$VERSION/$OS/$ARCH/toolbox
if [ "$OS" = 'windows' ];
then
URL="https://storage.googleapis.com/genai-toolbox/$VERSION/$OS/$ARCH/toolbox.exe"
else
URL="https://storage.googleapis.com/genai-toolbox/$VERSION/$OS/$ARCH/toolbox"
fi
curl "$URL" --fail --output toolbox || exit 1
@@ -32,10 +49,10 @@ do
SHA256=$(shasum -a 256 toolbox | awk '{print $1}')
# Write the table row
# output_string+="| [$OS/$ARCH]($URL) | $SHA256 |\n"
output_string+=$(printf "$ROW_FMT" "[$OS/$ARCH]($URL)" "$SHA256")$'\n'
output_string+=$(printf "$ROW_FMT" "[$OS/$ARCH]($URL)" "$description_text" "$SHA256")$'\n'
rm toolbox
done
printf "$output_string\n"

View File

@@ -24,9 +24,20 @@ steps:
script: |
go get -d ./...
- id: "cloud-sql-pg"
- id: "compile-test-binary"
name: golang:1
waitFor: ["install-dependencies"]
env:
- "GOPATH=/gopath"
volumes:
- name: "go"
path: "/gopath"
script: |
go test -c -cover -coverprofile=coverage.out -race ./tests/...
- id: "cloud-sql-pg"
name: golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -43,11 +54,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,cloudsqlpg ./tests
./cloudsqlpg.test -test.v
- id: "alloydb-pg"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -64,11 +75,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,alloydb ./tests
./alloydbpg.test -test.v -test.coverprofile=coverage.out
- id: "alloydb-ai-nl"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -85,11 +96,47 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,alloydb_ai_nl ./tests
./alloydbainl.test -test.v
- id: "bigtable"
name: golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "BIGTABLE_PROJECT=$PROJECT_ID"
- "BIGTABLE_INSTANCE=$_BIGTABLE_INSTANCE"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv:
["CLIENT_ID"]
volumes:
- name: "go"
path: "/gopath"
args:
- -c
- |
./bigtable.test -test.v
- id: "bigquery"
name: golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "BIGQUERY_PROJECT=$PROJECT_ID"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["CLIENT_ID"]
volumes:
- name: "go"
path: "/gopath"
args:
- -c
- |
./bigquery.test -test.v
- id: "postgres"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -104,28 +151,30 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,postgres ./tests
./postgres.test -test.v
- id: "spanner"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "SPANNER_PROJECT=$PROJECT_ID"
- "SPANNER_DATABASE=$_DATABASE_NAME"
- "SPANNER_INSTANCE=$_SPANNER_INSTANCE"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["CLIENT_ID"]
volumes:
- name: "go"
path: "/gopath"
args:
- -c
- |
go test -race -v -tags=integration,spanner ./tests
./spanner.test -test.v
- id: "neo4j"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -138,11 +187,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,neo4j ./tests
./neo4j.test -test.v
- id: "cloud-sql-mssql"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -159,11 +208,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,cloudsqlmssql ./tests
./cloudsqlmssql.test -test.v
- id: "cloud-sql-mysql"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -180,11 +229,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,cloudsqlmysql ./tests
./cloudsqlmysql.test -test.v
- id: "mysql"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -199,11 +248,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,mysql ./tests
./mysql.test -test.v
- id: "mssql"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -218,11 +267,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,mssql ./tests
./mssql.test -test.v
- id: "dgraph"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -233,11 +282,11 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,dgraph ./tests
./dgraph.test -test.v
- id: "http"
name: golang:1
waitFor: ["install-dependencies"]
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
@@ -248,7 +297,75 @@ steps:
args:
- -c
- |
go test -race -v -tags=integration,http ./tests
./http.test -test.v
- id: "sqlite"
name: golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
volumes:
- name: "go"
path: "/gopath"
secretEnv: ["CLIENT_ID"]
args:
- -c
- |
./sqlite.test -test.v
- id: "couchbase"
name : golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "COUCHBASE_SCOPE=$_COUCHBASE_SCOPE"
- "COUCHBASE_BUCKET=$_COUCHBASE_BUCKET"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["COUCHBASE_CONNECTION", "COUCHBASE_USER", "COUCHBASE_PASS", "CLIENT_ID"]
volumes:
- name: "go"
path: "/gopath"
args:
- -c
- |
./couchbase.test -test.v
- id: "redis"
name : golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["REDIS_ADDRESS", "REDIS_PASS", "CLIENT_ID"]
volumes:
- name: "go"
path: "/gopath"
args:
- -c
- |
./redis.test -test.v
- id: "valkey"
name : golang:1
waitFor: ["compile-test-binary"]
entrypoint: /bin/bash
env:
- "GOPATH=/gopath"
- "VALKEY_DATABASE=$_VALKEY_DATABASE"
- "SERVICE_ACCOUNT_EMAIL=$SERVICE_ACCOUNT_EMAIL"
secretEnv: ["VALKEY_ADDRESS", "CLIENT_ID"]
volumes:
- name: "go"
path: "/gopath"
args:
- -c
- |
./valkey.test -test.v
availableSecrets:
secretManager:
@@ -290,6 +407,18 @@ availableSecrets:
env: MSSQL_USER
- versionName: projects/$PROJECT_ID/secrets/mssql_pass/versions/latest
env: MSSQL_PASS
- versionName: projects/$PROJECT_ID/secrets/couchbase_connection/versions/latest
env: COUCHBASE_CONNECTION
- versionName: projects/$PROJECT_ID/secrets/couchbase_user/versions/latest
env: COUCHBASE_USER
- versionName: projects/$PROJECT_ID/secrets/couchbase_pass/versions/latest
env: COUCHBASE_PASS
- versionName: projects/$PROJECT_ID/secrets/memorystore_redis_address/versions/latest
env: REDIS_ADDRESS
- versionName: projects/$PROJECT_ID/secrets/memorystore_redis_pass/versions/latest
env: REDIS_PASS
- versionName: projects/$PROJECT_ID/secrets/memorystore_valkey_address/versions/latest
env: VALKEY_ADDRESS
options:
@@ -308,6 +437,7 @@ substitutions:
_ALLOYDB_POSTGRES_INSTANCE: "alloydb-pg-testing-instance"
_ALLOYDB_AI_NL_CLUSTER: "alloydb-ai-nl-testing"
_ALLOYDB_AI_NL_INSTANCE: "alloydb-ai-nl-testing-instance"
_BIGTABLE_INSTANCE: "bigtable-testing-instance"
_POSTGRES_HOST: 127.0.0.1
_POSTGRES_PORT: "5432"
_SPANNER_INSTANCE: "spanner-testing"
@@ -319,3 +449,5 @@ substitutions:
_MSSQL_HOST: 127.0.0.1
_MSSQL_PORT: "1433"
_DGRAPHURL: "https://play.dgraph.io"
_COUCHBASE_BUCKET: "couchbase-bucket"
_COUCHBASE_SCOPE: "couchbase-scope"

View File

@@ -18,7 +18,7 @@ steps:
script: |
#!/usr/bin/env bash
export VERSION=$(cat ./cmd/version.txt)
docker buildx build --build-arg METADATA_TAGS=$(git rev-parse HEAD) -t ${_DOCKER_URI}:$VERSION -t ${_DOCKER_URI}:latest .
docker buildx build --build-arg BUILD_TYPE=container.release --build-arg COMMIT_SHA=$(git rev-parse HEAD) -t ${_DOCKER_URI}:$VERSION -t ${_DOCKER_URI}:latest .
- id: "push-docker"
name: "gcr.io/cloud-builders/docker"
@@ -56,7 +56,7 @@ steps:
#!/usr/bin/env bash
export VERSION=$(cat ./cmd/version.txt)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.linux.amd64.$VERSION.$(git rev-parse HEAD)" -o toolbox.linux.amd64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=binary -X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.linux.amd64
- id: "store-linux-amd64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -80,7 +80,7 @@ steps:
#!/usr/bin/env bash
export VERSION=$(cat ./cmd/version.txt)
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.darwin.arm64.$VERSION.$(git rev-parse HEAD)" -o toolbox.darwin.arm64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=binary -X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.darwin.arm64
- id: "store-darwin-arm64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -104,7 +104,7 @@ steps:
#!/usr/bin/env bash
export VERSION=$(cat ./cmd/version.txt)
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.darwin.amd64.$VERSION.$(git rev-parse HEAD)" -o toolbox.darwin.amd64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=binary -X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.darwin.amd64
- id: "store-darwin-amd64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -128,7 +128,7 @@ steps:
#!/usr/bin/env bash
export VERSION=$(cat ./cmd/version.txt)
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=binary.windows.amd64.$VERSION.$(git rev-parse HEAD)" -o toolbox.windows.amd64
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=binary -X github.com/googleapis/genai-toolbox/cmd.commitSha=$(git rev-parse HEAD)" -o toolbox.windows.amd64
- id: "store-windows-amd64"
name: "gcr.io/cloud-builders/gcloud:latest"
@@ -137,7 +137,7 @@ steps:
script: |
#!/usr/bin/env bash
export VERSION=v$(cat ./cmd/version.txt)
gcloud storage cp toolbox.windows.amd64 gs://$_BUCKET_NAME/$VERSION/windows/amd64/toolbox
gcloud storage cp toolbox.windows.amd64 gs://$_BUCKET_NAME/$VERSION/windows/amd64/toolbox.exe
options:
automapSubstitutions: true

119
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,119 @@
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: 🐞 Bug Report
description: File a report for unexpected or undesired behavior.
title: "<brief summary of what bug or error was observed>"
labels: ["type: bug"]
type: "bug"
body:
- type: markdown
attributes:
value: |
Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your problem.
- id: preamble
type: checkboxes
attributes:
label: Prerequisites
description: |
Please run through the following list and make sure you've tried the usual "quick fixes":
- Search the [current open issues](https://github.com/googleapis/genai-toolbox/issues)
- Update to the [latest version of Toolbox](https://github.com/googleapis/genai-toolbox/releases)
options:
- label: "I've searched the current open issues"
required: true
- label: "I've updated to the latest version of Toolbox"
- type: input
id: version
attributes:
label: Toolbox version
description: |
What version of Toolbox are you using (`toolbox --version`)? e.g.
- toolbox version 0.3.0
- us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:0.3.0
placeholder: ex. toolbox version 0.3.0
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
description: "Let us know some details about the environment in which you are seeing the bug!"
value: |
1. OS type and version: (output of `uname -a`)
2. How are you running Toolbox:
- As a downloaded binary (e.g. from `curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox`)
- As a container (e.g. from `us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION`)
- Compiled from source (include the command used to build)
- type: textarea
id: client
attributes:
label: Client
description: "How are you connecting to Toolbox?"
value: |
1. Client: <name and link to the client are you using>
2. Version: <what exact version of the client are you using>
3. Example: If possible, please include your code of configuration:
```python
# Code goes here!
```
- id: expected-behavior
type: textarea
attributes:
label: Expected Behavior
description: |
Please enter a detailed description of the behavior you expected, and any information about what behavior you
noticed and why it is defective or unintentional.
validations:
required: true
- id: current-behavior
type: textarea
attributes:
label: Current Behavior
description: "Please enter a detailed description of the behavior you encountered instead."
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce?
description: |
How can we reproduce this bug? Please walk us through it step by step,
with as much relevant detail as possible. A 'minimal' reproduction is
preferred, which means removing as much of the examples as possible so
only the minimum required to run and reproduce the bug is left.
value: |
1. ?
2. ?
3. ?
...
validations:
required: true
- type: textarea
id: additional-details
attributes:
label: Additional Details
description: |
Any other information you want us to know? Things such as tools config,
server logs, etc. can be included here.

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

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

View File

@@ -0,0 +1,60 @@
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: ✨ Feature Request
description: Suggest an idea for new or improved behavior.
title: "<brief summary of the proposed feature>"
labels: ["type: feature request"]
type: feature
body:
- type: markdown
attributes:
value: |
Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your feature request.
- id: preamble
type: checkboxes
attributes:
label: Prerequisites
description: |
Please run through the following list and make sure you've tried the usual "quick fixes":
options:
- label: "Search the [current open issues](https://github.com/googleapis/genai-toolbox/issues)"
required: true
- type: textarea
id: use-case
attributes:
label: What are you trying to do that currently feels hard or impossible?
description: "A clear and concise description of what the end goal for the feature should be -- avoid generalizing and try to provide a specific use-case."
validations:
required: true
- type: textarea
id: suggested-solution
attributes:
label: Suggested Solution(s)
description: "If you have a suggestion for how this use-case can be solved, please feel free to include it."
- type: textarea
id: alternatives-considered
attributes:
label: Alternatives Considered
description: "Are there any workaround or third party tools to replicate this behavior? Why would adding this feature be preferred over them?"
- type: textarea
id: additional-details
attributes:
label: Additional Details
description: "Any additional information we should know? Please reference it here (issues, PRs, descriptions, or screenshots)"

55
.github/ISSUE_TEMPLATE/question.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: 💬 Question
description: Questions on how something works or the best way to do something?
title: "<brief summary of the question>"
labels: ["type: question"]
body:
- type: markdown
attributes:
value: |
Thanks for helping us improve! 🙏 Please provide as much information as possible about your question.
- id: preamble
type: checkboxes
attributes:
label: Prerequisites
description: |
Please run through the following list and make sure you've tried the usual "quick fixes":
options:
- label: "Search the [current open issues](https://github.com/googleapis/genai-toolbox/issues)"
required: true
- type: textarea
id: question
attributes:
label: Question
description: "What's your question? Please provide as much relevant information as possible to reduce turnaround time. Include information like what environment, language, or framework you are using."
placeholder: "Example: How do I connect using private IP with the AlloyDB source?"
validations:
required: true
- type: textarea
id: code
attributes:
label: Code
description: "Please paste any useful application code that might be relevant to your question. (if your code is in a public repo, feel free to paste a link!)"
- type: textarea
id: additional-details
attributes:
label: Additional Details
description: "Any other information you want us to know that might be helpful in answering your question? (link issues, PRs, descriptions, or screenshots)."

2
.github/label-sync.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
---
ignored: true

16
.github/labels.yaml vendored
View File

@@ -68,3 +68,19 @@
- name: 'tests: run'
color: 3DED97
description: Label to trigger Github Action tests.
- name: 'docs: deploy-preview'
color: BFDADC
description: Label to trigger Github Action docs preview.
- name: 'status: contribution welcome'
color: 8befd7
description: Status - Contributions welcome.
- name: 'status: awaiting response'
color: 8befd7
description: Status - Awaiting response from author.
- name: 'status: awaiting codeowners'
color: 8befd7
description: Status - Awaiting response from code owners.

View File

@@ -21,5 +21,15 @@ extraFiles: [
"docs/en/getting-started/introduction/_index.md",
"docs/en/getting-started/local_quickstart.md",
"docs/en/getting-started/mcp_quickstart/_index.md",
"docs/en/how-to/deploy_gke.md",
"docs/en/samples/bigquery/local_quickstart.md",
"docs/en/samples/bigquery/mcp_quickstart/_index.md",
"docs/en/getting-started/colab_quickstart.ipynb",
"docs/en/samples/bigquery/colab_quickstart_bigquery.ipynb",
"docs/en/how-to/connect-ide/bigquery_mcp.md",
"docs/en/how-to/connect-ide/spanner_mcp.md",
"docs/en/how-to/connect-ide/alloydb_pg_mcp.md",
"docs/en/how-to/connect-ide/cloud_sql_mysql_mcp.md",
"docs/en/how-to/connect-ide/cloud_sql_pg_mcp.md",
"docs/en/how-to/connect-ide/postgres_mcp.md",
"docs/en/how-to/connect-ide/cloud_sql_mssql_mcp.md",
]

View File

@@ -1,7 +1,7 @@
{
extends: [
'config:recommended',
':semanticCommits',
':semanticCommitTypeAll(chore)',
':ignoreUnstable',
':separateMajorReleases',
':prConcurrentLimitNone',

View File

@@ -24,14 +24,14 @@ on:
paths:
- 'docs/**'
- 'github/workflows/docs**'
- '.hugo'
- '.hugo/**'
# Allow triggering manually.
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
defaults:
run:
working-directory: .hugo
@@ -46,11 +46,11 @@ jobs:
- name: Setup Hugo
uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f # v3
with:
hugo-version: "latest"
hugo-version: "0.145.0"
extended: true
- name: Setup Node
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: "22"
@@ -76,4 +76,4 @@ jobs:
# Do not delete previews on each production deploy.
# CSS or JS changes will require manual clean-up.
keep_files: true
commit_message: "deploy: ${{ github.event.head_commit.message }}"
commit_message: "deploy: ${{ github.event.head_commit.message }}"

View File

@@ -17,7 +17,7 @@ name: "docs"
permissions:
contents: write
pull-requests: write
# This Workflow depends on 'github.event.number',
# not compatible with branch or manual triggers.
on:
@@ -26,10 +26,20 @@ on:
paths:
- 'docs/**'
- 'github/workflows/docs**'
- '.hugo'
- '.hugo/**'
pull_request_target:
types: [labeled]
paths:
- 'docs/**'
- 'github/workflows/docs**'
- '.hugo/**'
jobs:
preview:
# run job on proper workflow event triggers (skip job for pull_request event
# from forks and only run pull_request_target for "docs: deploy-preview"
# label)
if: "${{ (github.event.action != 'labeled' && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name) || github.event.label.name == 'docs: deploy-preview' }}"
runs-on: ubuntu-24.04
defaults:
run:
@@ -46,11 +56,11 @@ jobs:
- name: Setup Hugo
uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f # v3
with:
hugo-version: "latest"
hugo-version: "0.145.0"
extended: true
- name: Setup Node
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: "22"
@@ -70,8 +80,6 @@ jobs:
HUGO_RELATIVEURLS: false
- name: Deploy
# If run from a fork, GitHub write operations will fail.
if: ${{ !github.event.pull_request.head.repo.fork }}
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -80,8 +88,6 @@ jobs:
commit_message: "stage: PR-${{ github.event.number }}: ${{ github.event.head_commit.message }}"
- name: Comment
# If run from a fork, GitHub write operations will fail.
if: ${{ !github.event.pull_request.head.repo.fork }}
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
@@ -90,4 +96,4 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
body: "🔎 Preview at https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/PR-${{ github.event.number }}/"
})
})

View File

@@ -51,7 +51,7 @@ jobs:
console.log('Failed to remove label. Another job may have already removed it!');
}
- name: Setup Go
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "1.22"
- name: Checkout code
@@ -66,7 +66,7 @@ jobs:
run: |
go mod tidy && git diff --exit-code
- name: golangci-lint
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
uses: golangci/golangci-lint-action@4afd733a84b1f43292c63897423277bb7f4313a9 # v8.0.0
with:
version: latest
args: --timeout 3m

View File

@@ -58,7 +58,7 @@ jobs:
}
- name: Setup Go
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "1.22"
@@ -80,12 +80,16 @@ jobs:
source_dir="./internal/sources/*"
tool_dir="./internal/tools/*"
auth_dir="./internal/auth/*"
included_packages=$(go list ./... | grep -v -e "$source_dir" -e "$tool_dir" -e "$auth_dir")
int_test_dir="./tests/*"
included_packages=$(go list ./... | grep -v -e "$source_dir" -e "$tool_dir" -e "$auth_dir" -e "$int_test_dir")
go test -race -cover -coverprofile=coverage.out -v $included_packages
go test -race -v ./internal/sources/... ./internal/tools/... ./internal/auth/...
- name: Check coverage
run: |
FILE_TO_EXCLUDE="github.com/googleapis/genai-toolbox/internal/server/config.go"
ESCAPED_PATH=$(echo "$FILE_TO_EXCLUDE" | sed 's/\//\\\//g; s/\./\\\./g')
sed -i "/^${ESCAPED_PATH}:/d" coverage.out
total_coverage=$(go tool cover -func=coverage.out | grep "total:" | awk '{print $3}')
echo "Total coverage: $total_coverage"
coverage_numeric=$(echo "$total_coverage" | sed 's/%//')

2
.gitignore vendored
View File

@@ -13,4 +13,4 @@ node_modules
.hugo_build.lock
# coverage
.coverage
.coverage

View File

@@ -12,36 +12,26 @@
# See the License for the specific language governing permissions and
# limitations under the License.
version: "2"
linters:
enable:
- errcheck
- goimports
- gosimple
- govet
- ineffassign
- staticcheck
- unused
linters-settings:
gofmt:
rewrite-rules:
- pattern: 'interface{}'
replacement: 'any'
- pattern: 'a[b:len(a)]'
replacement: 'a[b:]'
exclusions:
presets:
- std-error-handling
issues:
fix: true
run:
build-tags:
- integration
- cloudsqlpg
- postgres
- alloydb
- spanner
- cloudsqlmssql
- cloudsqlmysql
- neo4j
- dgraph
- mssql
- mysql
- http
- alloydb_ai_nl
formatters:
enable:
- goimports
settings:
gofmt:
rewrite-rules:
- pattern: interface{}
replacement: any
- pattern: a[b:len(a)]
replacement: a[b:]

View File

@@ -1,8 +1,7 @@
title = 'Gen AI Toolbox for Databases'
title = 'MCP Toolbox for Databases'
relativeURLs = true
languageCode = 'en-us'
contentDir = "../docs/en"
defaultContentLanguage = "en"
defaultContentLanguageInSubdir = false
@@ -18,7 +17,10 @@ enableRobotsTXT = true
proxy = "direct"
[module.hugoVersion]
extended = true
min = "0.73.0"
min = "0.146.0"
[[module.mounts]]
source = "../docs/en"
target = 'content'
[[module.imports]]
path = "github.com/google/docsy"
disable = false
@@ -26,6 +28,7 @@ enableRobotsTXT = true
path = "github.com/martignoni/hugo-notice"
[params]
description = "MCP Toolbox for Databases is an open source MCP server for databases. It enables you to develop tools easier, faster, and more securely by handling the complexities such as connection pooling, authentication, and more."
copyright = "Google LLC"
github_repo = "https://github.com/googleapis/genai-toolbox"
github_project_repo = "https://github.com/googleapis/genai-toolbox"
@@ -45,4 +48,19 @@ enableRobotsTXT = true
pre = "<i class='fa-brands fa-github'></i>"
[markup.goldmark.renderer]
unsafe= true
unsafe= true
[outputFormats]
[outputFormats.LLMS]
mediaType = "text/plain"
baseName = "llms"
isPlainText = true
root = true
[outputFormats.LLMS-FULL]
mediaType = "text/plain"
baseName = "llms-full"
isPlainText = true
root = true
[outputs]
home = ["HTML", "RSS", "LLMS", "LLMS-FULL"]

View File

@@ -1 +0,0 @@
{{ template "_default/_markup/td-render-heading.html" . }}

View File

@@ -0,0 +1,14 @@
{{ .Site.Params.description }}
{{ range .Site.Sections }}
# {{ .Title }}
{{ .Description }}
{{ range .Pages }}
# {{ .Title }}
{{ .Description }}
{{ .RawContent }}
{{ range .Pages }}
# {{ .Title }}
{{ .Description }}
{{ .RawContent }}
{{end }}{{ end }}{{ end }}

View File

@@ -0,0 +1,9 @@
# {{ .Site.Title }}
> {{ .Site.Params.description }}
## Docs
{{ range .Site.Sections }}
### {{ .Title }}
{{ .Description }}{{ range .Pages }}- [{{ .Title }}]({{ .Permalink }}): {{ .Description }}{{ range .Pages }} - [{{ .Title }}]({{ .Permalink }}): {{ .Description }}{{end }}{{ end }}{{ end }}

View File

@@ -0,0 +1,52 @@
{{/* cSpell:ignore querify subdir */ -}}
{{/* Class names ending with `--KIND` are deprecated in favor of `__KIND`, but we're keeping them for a few releases after 0.9.0 */ -}}
{{ if .File -}}
{{ $path := urls.JoinPath $.Language.Lang $.File.Path -}}
{{ $gh_repo := $.Param "github_repo" -}}
{{ $gh_url := $.Param "github_url" -}}
{{ $gh_subdir := $.Param "github_subdir" | default "" -}}
{{ $gh_project_repo := $.Param "github_project_repo" -}}
{{ $gh_branch := $.Param "github_branch" | default "main" -}}
<div class="td-page-meta ms-2 pb-1 pt-2 mb-0">
{{ if $gh_url -}}
{{ warnf "Warning: use of `github_url` is deprecated. For details, see https://www.docsy.dev/docs/adding-content/repository-links/#github_url-optional" -}}
<a href="{{ $gh_url }}" target="_blank"><i class="fa-solid fa-pen-to-square fa-fw"></i> {{ T "post_edit_this" }}</a>
{{ else if $gh_repo -}}
{{/* Adjust $path based on path_base_for_github_subdir */ -}}
{{ $ghs_base := $.Param "path_base_for_github_subdir" -}}
{{ $ghs_rename := "" -}}
{{ if reflect.IsMap $ghs_base -}}
{{ $ghs_rename = $ghs_base.to -}}
{{ $ghs_base = $ghs_base.from -}}
{{ end -}}
{{ with $ghs_base -}}
{{ $path = replaceRE . $ghs_rename $path -}}
{{ end -}}
{{ $gh_repo_path := printf "%s/%s/%s" $gh_branch $gh_subdir $path -}}
{{ $gh_repo_path = replaceRE "//+" "/" $gh_repo_path -}}
{{ $viewURL := printf "%s/tree/%s" $gh_repo $gh_repo_path -}}
{{ $editURL := printf "%s/edit/%s" $gh_repo $gh_repo_path -}}
{{ $issuesURL := printf "%s/issues/new?title=%s" $gh_repo (safeURL $.Title ) -}}
{{ $newPageStub := resources.Get "stubs/new-page-template.md" -}}
{{ $newPageQS := querify "value" $newPageStub.Content "filename" "change-me.md" | safeURL -}}
{{ $newPageURL := printf "%s/new/%s?%s" $gh_repo (path.Dir $gh_repo_path) $newPageQS -}}
<a href="{{ $viewURL }}" class="td-page-meta--view td-page-meta__view" target="_blank" rel="noopener"><i class="fa-solid fa-file-lines fa-fw"></i> {{ T "post_view_this" }}</a>
<a href="{{ $editURL }}" class="td-page-meta--edit td-page-meta__edit" target="_blank" rel="noopener"><i class="fa-solid fa-pen-to-square fa-fw"></i> {{ T "post_edit_this" }}</a>
<a href="{{ $newPageURL }}" class="td-page-meta--child td-page-meta__child" target="_blank" rel="noopener"><i class="fa-solid fa-pen-to-square fa-fw"></i> {{ T "post_create_child_page" }}</a>
<a href="{{ $issuesURL }}" class="td-page-meta--issue td-page-meta__issue" target="_blank" rel="noopener"><i class="fa-solid fa-list-check fa-fw"></i> {{ T "post_create_issue" }}</a>
{{ with $gh_project_repo -}}
{{ $project_issueURL := printf "%s/issues/new" . -}}
<a href="{{ $project_issueURL }}" class="td-page-meta--project td-page-meta__project-issue" target="_blank" rel="noopener"><i class="fa-solid fa-list-check fa-fw"></i> {{ T "post_create_project_issue" }}</a>
{{ end -}}
{{ end -}}
{{ with .CurrentSection.AlternativeOutputFormats.Get "print" -}}
<a id="print" href="{{ .RelPermalink | safeURL }}"><i class="fa-solid fa-print fa-fw"></i> {{ T "print_entire_section" }}</a>
{{ end }}
</div>
{{ end -}}

View File

@@ -0,0 +1 @@
{{ template "partials/td/render-heading.html" . }}

View File

@@ -1,5 +1,74 @@
# Changelog
## [0.7.0](https://github.com/googleapis/genai-toolbox/compare/v0.6.0...v0.7.0) (2025-06-10)
### Features
* Add templateParameters field for mssqlsql ([#671](https://github.com/googleapis/genai-toolbox/issues/671)) ([b81fc6a](https://github.com/googleapis/genai-toolbox/commit/b81fc6aa6ccdfbc15676fee4d87041d9ad9682fa))
* Add templateParameters field for mysqlsql ([#663](https://github.com/googleapis/genai-toolbox/issues/663)) ([0a08d2c](https://github.com/googleapis/genai-toolbox/commit/0a08d2c15dcbec18bb556f4dc49792ba0c69db46))
* **metrics:** Add user agent for prebuilt tools ([#669](https://github.com/googleapis/genai-toolbox/issues/669)) ([29aa0a7](https://github.com/googleapis/genai-toolbox/commit/29aa0a70da3c2eb409a38993b3782da8bec7cb85))
* **tools/postgressql:** Add templateParameters field ([#615](https://github.com/googleapis/genai-toolbox/issues/615)) ([b763469](https://github.com/googleapis/genai-toolbox/commit/b76346993f298b4f7493a51405d0a287bacce05f))
### Bug Fixes
* Improve versionString ([#658](https://github.com/googleapis/genai-toolbox/issues/658)) ([cf96f4c](https://github.com/googleapis/genai-toolbox/commit/cf96f4c249f0692e3eb19fc56c794ca6a3079307))
* **server/stdio:** Notifications should not return a response ([#638](https://github.com/googleapis/genai-toolbox/issues/638)) ([69d047a](https://github.com/googleapis/genai-toolbox/commit/69d047af46f1ec00f236db8a978a7a7627217fd2))
* **tools/mysqlsql:** Handled the null value for string case in mysqlsql tools ([#641](https://github.com/googleapis/genai-toolbox/issues/641)) ([ef94648](https://github.com/googleapis/genai-toolbox/commit/ef94648455c3b20adda4f8cff47e70ddccac8c06))
* Update path library ([#678](https://github.com/googleapis/genai-toolbox/issues/678)) ([4998f82](https://github.com/googleapis/genai-toolbox/commit/4998f8285287b5daddd0043540f2cf871e256db5)), closes [#662](https://github.com/googleapis/genai-toolbox/issues/662)
## [0.6.0](https://github.com/googleapis/genai-toolbox/compare/v0.5.0...v0.6.0) (2025-05-28)
### Features
* Add Execute sql tool for SQL Server(MSSQL) ([#585](https://github.com/googleapis/genai-toolbox/issues/585)) ([6083a22](https://github.com/googleapis/genai-toolbox/commit/6083a224aa650caf4e132b4a704323c5f18c4986))
* Add mysql-execute-sql tool ([#577](https://github.com/googleapis/genai-toolbox/issues/577)) ([8590061](https://github.com/googleapis/genai-toolbox/commit/8590061ae4908da0e4b1bd6f7cf7ee8d972fa5ba))
* Add new BigQuery tools: execute_sql, list_datatset_ids, list_table_ids, get_dataset_info, get_table_info ([0fd88b5](https://github.com/googleapis/genai-toolbox/commit/0fd88b574b4ab0d3bee4585999b814675d3b74ed))
* Add spanner-execute-sql tool ([#576](https://github.com/googleapis/genai-toolbox/issues/576)) ([d65747a](https://github.com/googleapis/genai-toolbox/commit/d65747a2dcf3022f22c86a1524ee28c8229f7c20))
* Add support for read-only in Spanner tool ([#563](https://github.com/googleapis/genai-toolbox/issues/563)) ([6512704](https://github.com/googleapis/genai-toolbox/commit/6512704e77088d92fea53a85c6e6cbf4b99c988d))
* Adding support for the --prebuilt flag ([#604](https://github.com/googleapis/genai-toolbox/issues/604)) ([a29c800](https://github.com/googleapis/genai-toolbox/commit/a29c80012eec4729187c12968b53051d20b263a7))
* Support MCP stdio transport protocol ([#607](https://github.com/googleapis/genai-toolbox/issues/607)) ([1702ce1](https://github.com/googleapis/genai-toolbox/commit/1702ce1e00a52170a4271ac999caf534ba00196f))
### Bug Fixes
* Explicitly set query location for BigQuery queries ([#586](https://github.com/googleapis/genai-toolbox/issues/586)) ([eb52b66](https://github.com/googleapis/genai-toolbox/commit/eb52b66d82aaa11be6b1489335f49cba8168099b))
* Fix spellings in comments ([#561](https://github.com/googleapis/genai-toolbox/issues/561)) ([b58bf76](https://github.com/googleapis/genai-toolbox/commit/b58bf76ddaba407e3fd995dfe86d00a09484e14a))
* Prevent tool calls through MCP when auth is required ([#544](https://github.com/googleapis/genai-toolbox/issues/544)) ([e747b6e](https://github.com/googleapis/genai-toolbox/commit/e747b6e289730c17f68be8dec0c6fa6021bb23bd))
* Reinitialize required slice if nil ([#571](https://github.com/googleapis/genai-toolbox/issues/571)) ([04dcf47](https://github.com/googleapis/genai-toolbox/commit/04dcf4791272e1dd034b9a03664dd8dbe77fdddd)), closes [#564](https://github.com/googleapis/genai-toolbox/issues/564)
## [0.5.0](https://github.com/googleapis/genai-toolbox/compare/v0.4.0...v0.5.0) (2025-05-06)
### Features
* Add Couchbase as Source and Tool ([#307](https://github.com/googleapis/genai-toolbox/issues/307)) ([d7390b0](https://github.com/googleapis/genai-toolbox/commit/d7390b06b7bcb15411388e9a4dbcfe75afcca1ee))
* Add postgres-execute-sql tool ([#490](https://github.com/googleapis/genai-toolbox/issues/490)) ([11ea7bc](https://github.com/googleapis/genai-toolbox/commit/11ea7bc584aa4ca8e8b0e7a355f6666ccbea2883))
## [0.4.0](https://github.com/googleapis/genai-toolbox/compare/v0.3.0...v0.4.0) (2025-04-23)
### Features
* Add `AuthRequired` to Neo4j & Dgraph Tools ([#434](https://github.com/googleapis/genai-toolbox/issues/434)) ([afbf4b2](https://github.com/googleapis/genai-toolbox/commit/afbf4b2daeb01119a22ce18469bffb9e9f57d2f8))
* Add `AuthRequired` to tool manifest ([#433](https://github.com/googleapis/genai-toolbox/issues/433)) ([d9388ad](https://github.com/googleapis/genai-toolbox/commit/d9388ad57e832570aab56b9b357c1fb0ba994852))
* Add BigQuery source and tool ([#463](https://github.com/googleapis/genai-toolbox/issues/463)) ([8055aa5](https://github.com/googleapis/genai-toolbox/commit/8055aa519fe6e7993ba524f8f7e684fbfdecc1b9))
* Add Bigtable source and tool ([#418](https://github.com/googleapis/genai-toolbox/issues/418)) ([ae53b8e](https://github.com/googleapis/genai-toolbox/commit/ae53b8eeff9d0e9ec14d9c6d4286c856cc8f1811))
* Add IAM AuthN to AlloyDB Source ([#399](https://github.com/googleapis/genai-toolbox/issues/399)) ([e8ed447](https://github.com/googleapis/genai-toolbox/commit/e8ed447d9153c60a1d6321285587e6e4ca930f87))
* Add IAM AuthN to Cloud SQL Sources ([#414](https://github.com/googleapis/genai-toolbox/issues/414)) ([be85b82](https://github.com/googleapis/genai-toolbox/commit/be85b820785dbce79133b0cf8788bde75ff25fee))
* Add toolset feature to mcp ([#425](https://github.com/googleapis/genai-toolbox/issues/425)) ([e307857](https://github.com/googleapis/genai-toolbox/commit/e307857085ac4c8c2ee8292c914daa5534ba74bf)), closes [#403](https://github.com/googleapis/genai-toolbox/issues/403)
* Add SQLite source and tool ([#438](https://github.com/googleapis/genai-toolbox/issues/438)) ([fc14cbf](https://github.com/googleapis/genai-toolbox/commit/fc14cbfd078d465591e4fefb80542759e82a2731))
* Support env replacement for tools.yaml ([#462](https://github.com/googleapis/genai-toolbox/issues/462)) ([eadb678](https://github.com/googleapis/genai-toolbox/commit/eadb678a7bd4ce74a3b1160f5ed8966ffbb13c61))
### Bug Fixes
* [#419](https://github.com/googleapis/genai-toolbox/issues/419) TLS https URL for SSE endpoint ([#420](https://github.com/googleapis/genai-toolbox/issues/420)) ([0a7d3ff](https://github.com/googleapis/genai-toolbox/commit/0a7d3ff06b88051c752b6d53bc964ed6e6be400e))
* **docs:** Fix link 'Edit this page' ([#454](https://github.com/googleapis/genai-toolbox/issues/454)) ([969065e](https://github.com/googleapis/genai-toolbox/commit/969065e561f28ddb9755d99bbe0b288040198296)), closes [#427](https://github.com/googleapis/genai-toolbox/issues/427)
* Update http error code from invocation ([#468](https://github.com/googleapis/genai-toolbox/issues/468)) ([ff7c0ff](https://github.com/googleapis/genai-toolbox/commit/ff7c0ffc65172a335e8d3321e5a6b92d38dc7e6d)), closes [#465](https://github.com/googleapis/genai-toolbox/issues/465)
## [0.3.0](https://github.com/googleapis/genai-toolbox/compare/v0.2.1...v0.3.0) (2025-04-04)

View File

@@ -17,9 +17,7 @@
### Run Toolbox from local source
1. Open a local connection to your database by starting the [Cloud SQL Auth Proxy][cloudsql-proxy].
1. You should already have a `tools.yaml` created with your [sources and tools configurations](./README.md#Configuration).
1. Create a `tools.yaml` file with your [sources and tools configurations](./README.md#Configuration).
1. You can specify flags for the Toolbox server. Execute the following to list the possible CLI flags:
@@ -41,20 +39,85 @@
curl http://127.0.0.1:5000
```
### Run tests locally
### Testing
1. Run lint with the following:
- Run the lint check:
```bash
golangci-lint run --fix
```
1. Run all tests with the following:
- Run unit tests locally:
```bash
go test -race -v ./...
```
- Run integration tests locally:
1. Set required environment variables. For a complete lists of required
vairables for each source, check out the [Cloud Build testing
configuration](./.ci/integration.cloudbuild.yaml).
- Use your own GCP email as the `SERVICE_ACCOUNT_EMAIL`.
- Use the Google Cloud SDK application Client ID as the `CLIENT_ID`. Ask the
Toolbox maintainers if you don't know it already.
2. Run the integration test for your target source with the required Go
build tags specified at the top of each integration test file:
```shell
go test -race -v ./tests/<YOUR_TEST_DIR>
```
For example, to run the AlloyDB integration test, run:
```shell
go test -race -v ./tests/alloydbpg
```
- Run integration tests on your PR:
For internal contributors, the testing workflows should trigger
automatically. For external contributors, ask the Toolbox
maintainers to trigger the testing workflows on your PR.
## Developing Documentation
Follow these steps to run a Hugo server for local preview:
1. [Install Hugo](https://gohugo.io/installation/macos/) version 0.146.0+.
1. Move into the `.hugo` directory
```bash
cd .hugo
```
1. Install dependencies
```bash
npm ci
```
1. Run the server
```bash
hugo server
```
### PR documentation preview
- For contributors:
- Ask a repo owner to run the preview deployment workflow on your PR. The preview link
will be commented under your PR automatically.
- For maintainers:
- Inspect the proposed changes in the PR and ensure that it does not contain
malicious code changes. You should be especially alert to any proposed changes in the
`.github/workflows/` directory that affect workflow files.
- After you make sure the changes are safe, apply the `docs: deploy-preview`
label to the PR to deploy documentation preview.
## Compile the app locally
### Compile Toolbox binary
@@ -107,11 +170,9 @@
## Developing Toolbox SDKs
Please refer to the [SDK developer guide](https://github.com/googleapis/genai-toolbox-langchain-python/blob/main/DEVELOPER.md)
Please refer to the [SDK developer guide](https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/DEVELOPER.md)
## CI/CD Details
Cloud Build is used to run tests against Google Cloud resources in test project.
## (Optional) Maintainer Information
### Releasing
@@ -143,23 +204,22 @@ Integration and unit tests are automatically triggered via CloudBuild during eac
Create a Cloud Build trigger via the UI or `gcloud` with the following specs:
* Event: Pull request
* Region:
* global - for default worker pools
* Source:
* Generation: 1st gen
* Repo: googleapis/genai-toolbox (GitHub App)
* Base branch: `^main$`
* Comment control: Required except for owners and collaborators
* Filters: add directory filter
* Config: Cloud Build configuration file
* Location: Repository (add path to file)
* Service account: set for demo service to enable ID token creation to use to authenticated services
- Event: Pull request
- Region:
- global - for default worker pools
- Source:
- Generation: 1st gen
- Repo: googleapis/genai-toolbox (GitHub App)
- Base branch: `^main$`
- Comment control: Required except for owners and collaborators
- Filters: add directory filter
- Config: Cloud Build configuration file
- Location: Repository (add path to file)
- Service account: set for demo service to enable ID token creation to use to authenticated services
### Trigger
To run tests on GitHub from external contributors, ie RenovateBot:
* Cloud Build tests: comment `/gcbrun`
* Unit tests: add `tests:run` label
Trigger the PR tests on PRs from external contributors:
[cloudsql-proxy]: https://cloud.google.com/sql/docs/mysql/sql-proxy
- Cloud Build tests: comment `/gcbrun`
- Unit tests: add `tests:run` label

View File

@@ -20,11 +20,12 @@ COPY . .
ARG TARGETOS
ARG TARGETARCH
ARG METADATA_TAGS=dev
ARG BUILD_TYPE="container.dev"
ARG COMMIT_SHA=""
RUN go get ./...
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.metadataString=container.${METADATA_TAGS}"
go build -ldflags "-X github.com/googleapis/genai-toolbox/cmd.buildType=container.${BUILD_TYPE} -X github.com/googleapis/genai-toolbox/cmd.commitSha=${COMMIT_SHA}"
# Final Stage
FROM gcr.io/distroless/static:nonroot

View File

@@ -1,19 +1,27 @@
![logo](./logo.png)
# Gen AI Toolbox for Databases
> [!NOTE]
> Gen AI Toolbox for Databases is currently in beta, and may see breaking
# MCP Toolbox for Databases
[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/Dmm69peqjh)
[![Go Report Card](https://goreportcard.com/badge/github.com/googleapis/genai-toolbox)](https://goreportcard.com/report/github.com/googleapis/genai-toolbox)
> [!NOTE]
> MCP Toolbox for Databases is currently in beta, and may see breaking
> changes until the first stable release (v1.0).
Gen AI Toolbox for Databases is an open source server that makes it easier to
build Gen AI tools for interacting with databases. It enables you to develop
tools easier, faster, and more securely by handling the complexities such as
connection pooling, authentication, and more.
MCP Toolbox for Databases is an open source MCP server for databases. It enables
you to develop tools easier, faster, and more securely by handling the complexities
such as connection pooling, authentication, and more.
This README provides a brief overview. For comprehensive details, see the [full
documentation](https://googleapis.github.io/genai-toolbox/).
> [!NOTE]
> This solution was originally named “Gen AI Toolbox for Databases” as
> its initial development predated MCP, but was renamed to align with recently
> added MCP compatibility.
<!-- TOC ignore:true -->
## Table of Contents
@@ -49,6 +57,21 @@ database. Toolbox provides:
support for OpenTelemetry.
**⚡ Supercharge Your Workflow with an AI Database Assistant ⚡**
Stop context-switching and let your AI assistant become a true co-developer. By [connecting your IDE to your databases with MCP Toolbox][connect-ide], you can delegate complex and time-consuming database tasks, allowing you to build faster and focus on what matters. This isn't just about code completion; it's about giving your AI the context it needs to handle the entire development lifecycle.
Heres how it will save you time:
* **Query in Plain English**: Interact with your data using natural language right from your IDE. Ask complex questions like, *"How many orders were delivered in 2024, and what items were in them?"* without writing any SQL.
* **Automate Database Management**: Simply describe your data needs, and let the AI assistant manage your database for you. It can handle generating queries, creating tables, adding indexes, and more.
* **Generate Context-Aware Code**: Empower your AI assistant to generate application code and tests with a deep understanding of your real-time database schema. This accelerates the development cycle by ensuring the generated code is directly usable.
* **Slash Development Overhead**: Radically reduce the time spent on manual setup and boilerplate. MCP Toolbox helps streamline lengthy database configurations, repetitive code, and error-prone schema migrations.
Learn [how to connect your AI tools (IDEs) to Toolbox using MCP][connect-ide].
[connect-ide]: https://googleapis.github.io/genai-toolbox/how-to/connect-ide/
## General Architecture
Toolbox sits between your application's orchestration framework and your
@@ -76,7 +99,7 @@ To install Toolbox as a binary:
<!-- {x-release-please-start-version} -->
```sh
# see releases page for other versions
export VERSION=0.3.0
export VERSION=0.7.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
```
@@ -89,7 +112,7 @@ You can also install Toolbox as a container:
```sh
# see releases page for other versions
export VERSION=0.3.0
export VERSION=0.7.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
```
@@ -102,7 +125,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:
```sh
go install github.com/googleapis/genai-toolbox@v0.3.0
go install github.com/googleapis/genai-toolbox@v0.7.0
```
<!-- {x-release-please-end} -->
@@ -114,7 +137,7 @@ go install github.com/googleapis/genai-toolbox@v0.3.0
execute `toolbox` to start the server:
```sh
./toolbox --tools_file "tools.yaml"
./toolbox --tools-file "tools.yaml"
```
You can use `toolbox help` for a full list of flags! To stop the server, send a
@@ -130,6 +153,31 @@ Once your server is up and running, you can load the tools into your
application. See below the list of Client SDKs for using various frameworks:
<details open>
<summary>Core</summary>
1. Install [Toolbox Core SDK][toolbox-core]:
```bash
pip install toolbox-core
```
1. Load tools:
```python
from toolbox_core import ToolboxClient
# update the url to point to your server
async with ToolboxClient("http://127.0.0.1:5000") as client:
# these tools can be passed to your application!
tools = await client.load_toolset("toolset_name")
```
For more detailed instructions on using the Toolbox Core SDK, see the
[project's README][toolbox-core-readme].
[toolbox-core]: https://pypi.org/project/toolbox-core/
[toolbox-core-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core/README.md
</details>
<details>
<summary>LangChain / LangGraph</summary>
1. Install [Toolbox LangChain SDK][toolbox-langchain]:
@@ -141,17 +189,17 @@ application. See below the list of Client SDKs for using various frameworks:
from toolbox_langchain import ToolboxClient
# update the url to point to your server
client = ToolboxClient("http://127.0.0.1:5000")
async with ToolboxClient("http://127.0.0.1:5000") as client:
# these tools can be passed to your application!
tools = client.load_toolset()
# these tools can be passed to your application!
tools = client.load_toolset()
```
For more detailed instructions on using the Toolbox LangChain SDK, see the
[project's README][toolbox-langchain-readme].
[toolbox-langchain]: https://github.com/googleapis/genai-toolbox-langchain-python
[toolbox-langchain-readme]: https://github.com/googleapis/genai-toolbox-langchain-python/blob/main/README.md
[toolbox-langchain]: https://pypi.org/project/toolbox-langchain/
[toolbox-langchain-readme]: https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/packages/toolbox-langchain/README.md
</details>
@@ -167,16 +215,16 @@ For more detailed instructions on using the Toolbox LangChain SDK, see the
from toolbox_llamaindex import ToolboxClient
# update the url to point to your server
client = ToolboxClient("http://127.0.0.1:5000")
async with ToolboxClient("http://127.0.0.1:5000") as client:
# these tools can be passed to your application!
tools = client.load_toolset()
# these tools can be passed to your application!
tools = client.load_toolset()
```
For more detailed instructions on using the Toolbox Llamaindex SDK, see the
[project's README][toolbox-llamaindex-readme].
[toolbox-llamaindex]: https://github.com/googleapis/genai-toolbox-llamaindex-python
[toolbox-llamaindex]: https://pypi.org/project/toolbox-llamaindex/
[toolbox-llamaindex-readme]: https://github.com/googleapis/genai-toolbox-llamaindex-python/blob/main/README.md
</details>
@@ -184,7 +232,7 @@ For more detailed instructions on using the Toolbox Llamaindex SDK, see the
## Configuration
The primary way to configure Toolbox is through the `tools.yaml` file. If you
have multiple files, you can tell toolbox which to load with the `--tools_file
have multiple files, you can tell toolbox which to load with the `--tools-file
tools.yaml` flag.
You can find more detailed reference documentation to all resource types in the
@@ -211,9 +259,8 @@ For more details on configuring different types of sources, see the
### Tools
The `tools` section of your `tools.yaml` define your the actions your agent can
take: what kind of tool it is, which source(s) it affects, what parameters it
uses, etc.
The `tools` section of a `tools.yaml` define the actions an agent can take: what
kind of tool it is, which source(s) it affects, what parameters it uses, etc.
```yaml
tools:
@@ -268,7 +315,7 @@ This project uses [semantic versioning](https://semver.org/), including a
- PATCH version when we make backward compatible bug fixes
The public API that this applies to is the CLI associated with Toolbox, the
interactions with official SDKs, and the definitions in the `tools.yaml` file.
interactions with official SDKs, and the definitions in the `tools.yaml` file.
## Contributing

View File

@@ -21,24 +21,75 @@ import (
"io"
"os"
"os/signal"
"regexp"
"runtime"
"strings"
"syscall"
"time"
yaml "github.com/goccy/go-yaml"
"github.com/googleapis/genai-toolbox/internal/log"
"github.com/googleapis/genai-toolbox/internal/prebuiltconfigs"
"github.com/googleapis/genai-toolbox/internal/server"
"github.com/googleapis/genai-toolbox/internal/telemetry"
"github.com/googleapis/genai-toolbox/internal/util"
// Import tool packages for side effect of registration
_ "github.com/googleapis/genai-toolbox/internal/tools/alloydbainl"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigquery"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigqueryexecutesql"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigquerygetdatasetinfo"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigquerygettableinfo"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigquerylistdatasetids"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigquerylisttableids"
_ "github.com/googleapis/genai-toolbox/internal/tools/bigtable"
_ "github.com/googleapis/genai-toolbox/internal/tools/couchbase"
_ "github.com/googleapis/genai-toolbox/internal/tools/dgraph"
_ "github.com/googleapis/genai-toolbox/internal/tools/http"
_ "github.com/googleapis/genai-toolbox/internal/tools/mssqlexecutesql"
_ "github.com/googleapis/genai-toolbox/internal/tools/mssqlsql"
_ "github.com/googleapis/genai-toolbox/internal/tools/mysqlexecutesql"
_ "github.com/googleapis/genai-toolbox/internal/tools/mysqlsql"
_ "github.com/googleapis/genai-toolbox/internal/tools/neo4j"
_ "github.com/googleapis/genai-toolbox/internal/tools/postgresexecutesql"
_ "github.com/googleapis/genai-toolbox/internal/tools/postgressql"
_ "github.com/googleapis/genai-toolbox/internal/tools/redis"
_ "github.com/googleapis/genai-toolbox/internal/tools/spanner"
_ "github.com/googleapis/genai-toolbox/internal/tools/spannerexecutesql"
_ "github.com/googleapis/genai-toolbox/internal/tools/sqlitesql"
_ "github.com/googleapis/genai-toolbox/internal/tools/valkey"
"github.com/spf13/cobra"
_ "github.com/googleapis/genai-toolbox/internal/sources/alloydbpg"
_ "github.com/googleapis/genai-toolbox/internal/sources/bigquery"
_ "github.com/googleapis/genai-toolbox/internal/sources/bigtable"
_ "github.com/googleapis/genai-toolbox/internal/sources/cloudsqlmssql"
_ "github.com/googleapis/genai-toolbox/internal/sources/cloudsqlmysql"
_ "github.com/googleapis/genai-toolbox/internal/sources/cloudsqlpg"
_ "github.com/googleapis/genai-toolbox/internal/sources/couchbase"
_ "github.com/googleapis/genai-toolbox/internal/sources/dgraph"
_ "github.com/googleapis/genai-toolbox/internal/sources/http"
_ "github.com/googleapis/genai-toolbox/internal/sources/mssql"
_ "github.com/googleapis/genai-toolbox/internal/sources/mysql"
_ "github.com/googleapis/genai-toolbox/internal/sources/neo4j"
_ "github.com/googleapis/genai-toolbox/internal/sources/postgres"
_ "github.com/googleapis/genai-toolbox/internal/sources/redis"
_ "github.com/googleapis/genai-toolbox/internal/sources/spanner"
_ "github.com/googleapis/genai-toolbox/internal/sources/sqlite"
_ "github.com/googleapis/genai-toolbox/internal/sources/valkey"
)
var (
// versionString indicates the version of this library.
//go:embed version.txt
// versionString stores the full semantic version, including build metadata.
versionString string
// versionNum indicates the numerical part fo the version
//go:embed version.txt
versionNum string
// metadataString indicates additional build or distribution metadata.
metadataString string
buildType string = "dev" // should be one of "dev", "binary", or "container"
// commitSha is the git commit it was built from
commitSha string
)
func init() {
@@ -47,10 +98,11 @@ func init() {
// semanticVersion returns the version of the CLI including a compile-time metadata.
func semanticVersion() string {
v := strings.TrimSpace(versionString)
if metadataString != "" {
v += "+" + metadataString
metadataStrings := []string{buildType, runtime.GOOS, runtime.GOARCH}
if commitSha != "" {
metadataStrings = append(metadataStrings, commitSha)
}
v := strings.TrimSpace(versionNum) + "+" + strings.Join(metadataStrings, ".")
return v
}
@@ -67,15 +119,18 @@ func Execute() {
type Command struct {
*cobra.Command
cfg server.ServerConfig
logger log.Logger
tools_file string
outStream io.Writer
errStream io.Writer
cfg server.ServerConfig
logger log.Logger
tools_file string
prebuiltConfig string
inStream io.Reader
outStream io.Writer
errStream io.Writer
}
// NewCommand returns a Command object representing an invocation of the CLI.
func NewCommand(opts ...Option) *Command {
in := os.Stdin
out := os.Stdout
err := os.Stderr
@@ -86,6 +141,7 @@ func NewCommand(opts ...Option) *Command {
}
cmd := &Command{
Command: baseCmd,
inStream: in,
outStream: out,
errStream: err,
}
@@ -97,7 +153,8 @@ func NewCommand(opts ...Option) *Command {
// Set server version
cmd.cfg.Version = versionString
// set baseCmd out and err the same as cmd.
// set baseCmd in, out and err the same as cmd.
baseCmd.SetIn(cmd.inStream)
baseCmd.SetOut(cmd.outStream)
baseCmd.SetErr(cmd.errStream)
@@ -105,15 +162,17 @@ func NewCommand(opts ...Option) *Command {
flags.StringVarP(&cmd.cfg.Address, "address", "a", "127.0.0.1", "Address of the interface the server will listen on.")
flags.IntVarP(&cmd.cfg.Port, "port", "p", 5000, "Port the server will listen on.")
flags.StringVar(&cmd.tools_file, "tools_file", "tools.yaml", "File path specifying the tool configuration.")
flags.StringVar(&cmd.tools_file, "tools_file", "", "File path specifying the tool configuration. Cannot be used with --prebuilt.")
// deprecate tools_file
_ = flags.MarkDeprecated("tools_file", "please use --tools-file instead")
flags.StringVar(&cmd.tools_file, "tools-file", "tools.yaml", "File path specifying the tool configuration.")
flags.StringVar(&cmd.tools_file, "tools-file", "", "File path specifying the tool configuration. Cannot be used with --prebuilt.")
flags.Var(&cmd.cfg.LogLevel, "log-level", "Specify the minimum level logged. Allowed: 'DEBUG', 'INFO', 'WARN', 'ERROR'.")
flags.Var(&cmd.cfg.LoggingFormat, "logging-format", "Specify logging format to use. Allowed: 'standard' or 'JSON'.")
flags.BoolVar(&cmd.cfg.TelemetryGCP, "telemetry-gcp", false, "Enable exporting directly to Google Cloud Monitoring.")
flags.StringVar(&cmd.cfg.TelemetryOTLP, "telemetry-otlp", "", "Enable exporting using OpenTelemetry Protocol (OTLP) to the specified endpoint (e.g. 'http://127.0.0.1:4318')")
flags.StringVar(&cmd.cfg.TelemetryServiceName, "telemetry-service-name", "toolbox", "Sets the value of the service.name resource attribute for telemetry data.")
flags.StringVar(&cmd.prebuiltConfig, "prebuilt", "", "Use a prebuilt tool configuration by source type. Cannot be used with --tools-file. Allowed: 'alloydb-postgres', 'bigquery', 'cloud-sql-mysql', 'cloud-sql-postgres', 'cloud-sql-mssql', 'postgres', 'spanner', 'spanner-postgres'.")
flags.BoolVar(&cmd.cfg.Stdio, "stdio", false, "Listens via MCP STDIO instead of acting as a remote HTTP server.")
// wrap RunE command so that we have access to original Command object
cmd.RunE = func(*cobra.Command, []string) error { return run(cmd) }
@@ -129,9 +188,31 @@ type ToolsFile struct {
Toolsets server.ToolsetConfigs `yaml:"toolsets"`
}
// parseEnv replaces environment variables ${ENV_NAME} with their values.
func parseEnv(input string) string {
re := regexp.MustCompile(`\$\{(\w+)\}`)
return re.ReplaceAllStringFunc(input, func(match string) string {
parts := re.FindStringSubmatch(match)
if len(parts) < 2 {
// technically shouldn't happen
return match
}
// extract the variable name
variableName := parts[1]
if value, found := os.LookupEnv(variableName); found {
return value
}
return match
})
}
// parseToolsFile parses the provided yaml into appropriate configs.
func parseToolsFile(ctx context.Context, raw []byte) (ToolsFile, error) {
var toolsFile ToolsFile
// Replace environment variables if found
raw = []byte(parseEnv(string(raw)))
// Parse contents
err := yaml.UnmarshalContext(ctx, raw, &toolsFile, yaml.Strict())
if err != nil {
@@ -140,7 +221,25 @@ func parseToolsFile(ctx context.Context, raw []byte) (ToolsFile, error) {
return toolsFile, nil
}
// updateLogLevel checks if Toolbox have to update the existing log level set by users.
// stdio doesn't support "debug" and "info" logs.
func updateLogLevel(stdio bool, logLevel string) bool {
if stdio {
switch strings.ToUpper(logLevel) {
case log.Debug, log.Info:
return true
default:
return false
}
}
return false
}
func run(cmd *Command) error {
if updateLogLevel(cmd.cfg.Stdio, cmd.cfg.LogLevel.String()) {
cmd.cfg.LogLevel = server.StringLevel(log.Warn)
}
ctx, cancel := context.WithCancel(cmd.Context())
defer cancel()
@@ -179,13 +278,13 @@ func run(cmd *Command) error {
}
cmd.logger = logger
default:
return fmt.Errorf("logging format invalid.")
return fmt.Errorf("logging format invalid")
}
ctx = util.WithLogger(ctx, cmd.logger)
// Set up OpenTelemetry
otelShutdown, err := telemetry.SetupOTel(ctx, cmd.Command.Version, cmd.cfg.TelemetryOTLP, cmd.cfg.TelemetryGCP, cmd.cfg.TelemetryServiceName)
otelShutdown, err := telemetry.SetupOTel(ctx, cmd.Version, cmd.cfg.TelemetryOTLP, cmd.cfg.TelemetryGCP, cmd.cfg.TelemetryServiceName)
if err != nil {
errMsg := fmt.Errorf("error setting up OpenTelemetry: %w", err)
cmd.logger.ErrorContext(ctx, errMsg.Error())
@@ -199,13 +298,39 @@ func run(cmd *Command) error {
}
}()
// Read tool file contents
buf, err := os.ReadFile(cmd.tools_file)
if err != nil {
errMsg := fmt.Errorf("unable to read tool file at %q: %w", cmd.tools_file, err)
cmd.logger.ErrorContext(ctx, errMsg.Error())
return errMsg
var buf []byte
if cmd.prebuiltConfig != "" {
// Make sure --prebuilt and --tools-file flags are mutually exclusive
if cmd.tools_file != "" {
errMsg := fmt.Errorf("--prebuilt and --tools-file flags cannot be used simultaneously")
cmd.logger.ErrorContext(ctx, errMsg.Error())
return errMsg
}
// Use prebuilt tools
buf, err = prebuiltconfigs.Get(cmd.prebuiltConfig)
if err != nil {
cmd.logger.ErrorContext(ctx, err.Error())
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
} else {
// Set default value of tools-file flag to tools.yaml
if cmd.tools_file == "" {
cmd.tools_file = "tools.yaml"
}
// Read tool file contents
buf, err = os.ReadFile(cmd.tools_file)
if err != nil {
errMsg := fmt.Errorf("unable to read tool file at %q: %w", cmd.tools_file, err)
cmd.logger.ErrorContext(ctx, errMsg.Error())
return errMsg
}
}
toolsFile, err := parseToolsFile(ctx, buf)
cmd.cfg.SourceConfigs, cmd.cfg.AuthServiceConfigs, cmd.cfg.ToolConfigs, cmd.cfg.ToolsetConfigs = toolsFile.Sources, toolsFile.AuthServices, toolsFile.Tools, toolsFile.Toolsets
authSourceConfigs := toolsFile.AuthSources
@@ -239,9 +364,16 @@ func run(cmd *Command) error {
srvErr := make(chan error)
go func() {
defer close(srvErr)
err = s.Serve()
if err != nil {
srvErr <- err
if cmd.cfg.Stdio {
err = s.ServeStdio(ctx, cmd.inStream, cmd.outStream)
if err != nil {
srvErr <- err
}
} else {
err = s.Serve(ctx)
if err != nil {
srvErr <- err
}
}
}()
@@ -259,7 +391,7 @@ func run(cmd *Command) error {
cmd.logger.WarnContext(shutdownContext, "Shutting down gracefully...")
err := s.Shutdown(shutdownContext)
if err == context.DeadlineExceeded {
return fmt.Errorf("graceful shutdown timed out... forcing exit.")
return fmt.Errorf("graceful shutdown timed out... forcing exit")
}
}

View File

@@ -18,23 +18,29 @@ import (
"bytes"
_ "embed"
"os"
"runtime"
"strings"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/googleapis/genai-toolbox/internal/auth/google"
"github.com/googleapis/genai-toolbox/internal/prebuiltconfigs"
"github.com/googleapis/genai-toolbox/internal/server"
cloudsqlpgsrc "github.com/googleapis/genai-toolbox/internal/sources/cloudsqlpg"
httpsrc "github.com/googleapis/genai-toolbox/internal/sources/http"
"github.com/googleapis/genai-toolbox/internal/testutils"
"github.com/googleapis/genai-toolbox/internal/tools"
"github.com/googleapis/genai-toolbox/internal/tools/http"
"github.com/googleapis/genai-toolbox/internal/tools/postgressql"
"github.com/spf13/cobra"
)
func withDefaults(c server.ServerConfig) server.ServerConfig {
data, _ := os.ReadFile("version.txt")
c.Version = strings.TrimSpace(string(data))
version := strings.TrimSpace(string(data)) // Preserving 'data', new var for clarity
c.Version = version + "+" + strings.Join([]string{"dev", runtime.GOOS, runtime.GOARCH}, ".")
if c.Address == "" {
c.Address = "127.0.0.1"
}
@@ -161,6 +167,13 @@ func TestServerConfigFlags(t *testing.T) {
TelemetryServiceName: "toolbox-custom",
}),
},
{
desc: "stdio",
args: []string{"--stdio"},
want: withDefaults(server.ServerConfig{
Stdio: true,
}),
},
}
for _, tc := range tcs {
t.Run(tc.desc, func(t *testing.T) {
@@ -185,7 +198,7 @@ func TestToolFileFlag(t *testing.T) {
{
desc: "default value",
args: []string{},
want: "tools.yaml",
want: "",
},
{
desc: "foo file",
@@ -216,6 +229,36 @@ func TestToolFileFlag(t *testing.T) {
}
}
func TestPrebuiltFlag(t *testing.T) {
tcs := []struct {
desc string
args []string
want string
}{
{
desc: "default value",
args: []string{},
want: "",
},
{
desc: "custom pre built flag",
args: []string{"--tools-file", "alloydb"},
want: "alloydb",
},
}
for _, tc := range tcs {
t.Run(tc.desc, func(t *testing.T) {
c, _, err := invokeCommand(tc.args)
if err != nil {
t.Fatalf("unexpected error invoking command: %s", err)
}
if c.tools_file != tc.want {
t.Fatalf("got %v, want %v", c.cfg, tc.want)
}
})
}
}
func TestFailServerConfigFlags(t *testing.T) {
tcs := []struct {
desc string
@@ -318,13 +361,14 @@ func TestParseToolFile(t *testing.T) {
Tools: server.ToolConfigs{
"example_tool": postgressql.Config{
Name: "example_tool",
Kind: postgressql.ToolKind,
Kind: "postgres-sql",
Source: "my-pg-instance",
Description: "some description",
Statement: "SELECT * FROM SQL_STATEMENT;\n",
Parameters: []tools.Parameter{
tools.NewStringParameter("country", "some description"),
},
AuthRequired: []string{},
},
},
Toolsets: server.ToolsetConfigs{
@@ -447,11 +491,12 @@ func TestParseToolFileWithAuth(t *testing.T) {
},
Tools: server.ToolConfigs{
"example_tool": postgressql.Config{
Name: "example_tool",
Kind: postgressql.ToolKind,
Source: "my-pg-instance",
Description: "some description",
Statement: "SELECT * FROM SQL_STATEMENT;\n",
Name: "example_tool",
Kind: "postgres-sql",
Source: "my-pg-instance",
Description: "some description",
Statement: "SELECT * FROM SQL_STATEMENT;\n",
AuthRequired: []string{},
Parameters: []tools.Parameter{
tools.NewStringParameter("country", "some description"),
tools.NewIntParameterWithAuth("id", "user id", []tools.ParamAuthService{{Name: "my-google-service", Field: "user_id"}}),
@@ -545,11 +590,113 @@ func TestParseToolFileWithAuth(t *testing.T) {
},
Tools: server.ToolConfigs{
"example_tool": postgressql.Config{
Name: "example_tool",
Kind: postgressql.ToolKind,
Source: "my-pg-instance",
Description: "some description",
Statement: "SELECT * FROM SQL_STATEMENT;\n",
Name: "example_tool",
Kind: "postgres-sql",
Source: "my-pg-instance",
Description: "some description",
Statement: "SELECT * FROM SQL_STATEMENT;\n",
AuthRequired: []string{},
Parameters: []tools.Parameter{
tools.NewStringParameter("country", "some description"),
tools.NewIntParameterWithAuth("id", "user id", []tools.ParamAuthService{{Name: "my-google-service", Field: "user_id"}}),
tools.NewStringParameterWithAuth("email", "user email", []tools.ParamAuthService{{Name: "my-google-service", Field: "email"}, {Name: "other-google-service", Field: "other_email"}}),
},
},
},
Toolsets: server.ToolsetConfigs{
"example_toolset": tools.ToolsetConfig{
Name: "example_toolset",
ToolNames: []string{"example_tool"},
},
},
},
},
{
description: "basic example with authRequired",
in: `
sources:
my-pg-instance:
kind: cloud-sql-postgres
project: my-project
region: my-region
instance: my-instance
database: my_db
user: my_user
password: my_pass
authServices:
my-google-service:
kind: google
clientId: my-client-id
other-google-service:
kind: google
clientId: other-client-id
tools:
example_tool:
kind: postgres-sql
source: my-pg-instance
description: some description
statement: |
SELECT * FROM SQL_STATEMENT;
authRequired:
- my-google-service
parameters:
- name: country
type: string
description: some description
- name: id
type: integer
description: user id
authServices:
- name: my-google-service
field: user_id
- name: email
type: string
description: user email
authServices:
- name: my-google-service
field: email
- name: other-google-service
field: other_email
toolsets:
example_toolset:
- example_tool
`,
wantToolsFile: ToolsFile{
Sources: server.SourceConfigs{
"my-pg-instance": cloudsqlpgsrc.Config{
Name: "my-pg-instance",
Kind: cloudsqlpgsrc.SourceKind,
Project: "my-project",
Region: "my-region",
Instance: "my-instance",
IPType: "public",
Database: "my_db",
User: "my_user",
Password: "my_pass",
},
},
AuthServices: server.AuthServiceConfigs{
"my-google-service": google.Config{
Name: "my-google-service",
Kind: google.AuthServiceKind,
ClientID: "my-client-id",
},
"other-google-service": google.Config{
Name: "other-google-service",
Kind: google.AuthServiceKind,
ClientID: "other-client-id",
},
},
Tools: server.ToolConfigs{
"example_tool": postgressql.Config{
Name: "example_tool",
Kind: "postgres-sql",
Source: "my-pg-instance",
Description: "some description",
Statement: "SELECT * FROM SQL_STATEMENT;\n",
AuthRequired: []string{"my-google-service"},
Parameters: []tools.Parameter{
tools.NewStringParameter("country", "some description"),
tools.NewIntParameterWithAuth("id", "user id", []tools.ParamAuthService{{Name: "my-google-service", Field: "user_id"}}),
@@ -588,3 +735,328 @@ func TestParseToolFileWithAuth(t *testing.T) {
}
}
func TestEnvVarReplacement(t *testing.T) {
ctx, err := testutils.ContextWithNewLogger()
os.Setenv("TestHeader", "ACTUAL_HEADER")
os.Setenv("API_KEY", "ACTUAL_API_KEY")
os.Setenv("clientId", "ACTUAL_CLIENT_ID")
os.Setenv("clientId2", "ACTUAL_CLIENT_ID_2")
os.Setenv("toolset_name", "ACTUAL_TOOLSET_NAME")
os.Setenv("cat_string", "cat")
os.Setenv("food_string", "food")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
tcs := []struct {
description string
in string
wantToolsFile ToolsFile
}{
{
description: "file with env var example",
in: `
sources:
my-http-instance:
kind: http
baseUrl: http://test_server/
timeout: 10s
headers:
Authorization: ${TestHeader}
queryParams:
api-key: ${API_KEY}
authServices:
my-google-service:
kind: google
clientId: ${clientId}
other-google-service:
kind: google
clientId: ${clientId2}
tools:
example_tool:
kind: http
source: my-instance
method: GET
path: "search?name=alice&pet=${cat_string}"
description: some description
authRequired:
- my-google-auth-service
- other-auth-service
queryParams:
- name: country
type: string
description: some description
authServices:
- name: my-google-auth-service
field: user_id
- name: other-auth-service
field: user_id
requestBody: |
{
"age": {{.age}},
"city": "{{.city}}",
"food": "${food_string}",
"other": "$OTHER"
}
bodyParams:
- name: age
type: integer
description: age num
- name: city
type: string
description: city string
headers:
Authorization: API_KEY
Content-Type: application/json
headerParams:
- name: Language
type: string
description: language string
toolsets:
${toolset_name}:
- example_tool
`,
wantToolsFile: ToolsFile{
Sources: server.SourceConfigs{
"my-http-instance": httpsrc.Config{
Name: "my-http-instance",
Kind: httpsrc.SourceKind,
BaseURL: "http://test_server/",
Timeout: "10s",
DefaultHeaders: map[string]string{"Authorization": "ACTUAL_HEADER"},
QueryParams: map[string]string{"api-key": "ACTUAL_API_KEY"},
},
},
AuthServices: server.AuthServiceConfigs{
"my-google-service": google.Config{
Name: "my-google-service",
Kind: google.AuthServiceKind,
ClientID: "ACTUAL_CLIENT_ID",
},
"other-google-service": google.Config{
Name: "other-google-service",
Kind: google.AuthServiceKind,
ClientID: "ACTUAL_CLIENT_ID_2",
},
},
Tools: server.ToolConfigs{
"example_tool": http.Config{
Name: "example_tool",
Kind: "http",
Source: "my-instance",
Method: "GET",
Path: "search?name=alice&pet=cat",
Description: "some description",
AuthRequired: []string{"my-google-auth-service", "other-auth-service"},
QueryParams: []tools.Parameter{
tools.NewStringParameterWithAuth("country", "some description",
[]tools.ParamAuthService{{Name: "my-google-auth-service", Field: "user_id"},
{Name: "other-auth-service", Field: "user_id"}}),
},
RequestBody: `{
"age": {{.age}},
"city": "{{.city}}",
"food": "food",
"other": "$OTHER"
}
`,
BodyParams: []tools.Parameter{tools.NewIntParameter("age", "age num"), tools.NewStringParameter("city", "city string")},
Headers: map[string]string{"Authorization": "API_KEY", "Content-Type": "application/json"},
HeaderParams: []tools.Parameter{tools.NewStringParameter("Language", "language string")},
},
},
Toolsets: server.ToolsetConfigs{
"ACTUAL_TOOLSET_NAME": tools.ToolsetConfig{
Name: "ACTUAL_TOOLSET_NAME",
ToolNames: []string{"example_tool"},
},
},
},
},
}
for _, tc := range tcs {
t.Run(tc.description, func(t *testing.T) {
toolsFile, err := parseToolsFile(ctx, testutils.FormatYaml(tc.in))
if err != nil {
t.Fatalf("failed to parse input: %v", err)
}
if diff := cmp.Diff(tc.wantToolsFile.Sources, toolsFile.Sources); diff != "" {
t.Fatalf("incorrect sources parse: diff %v", diff)
}
if diff := cmp.Diff(tc.wantToolsFile.AuthServices, toolsFile.AuthServices); diff != "" {
t.Fatalf("incorrect authServices parse: diff %v", diff)
}
if diff := cmp.Diff(tc.wantToolsFile.Tools, toolsFile.Tools); diff != "" {
t.Fatalf("incorrect tools parse: diff %v", diff)
}
if diff := cmp.Diff(tc.wantToolsFile.Toolsets, toolsFile.Toolsets); diff != "" {
t.Fatalf("incorrect tools parse: diff %v", diff)
}
})
}
}
func TestPrebuiltTools(t *testing.T) {
alloydb_config, _ := prebuiltconfigs.Get("alloydb-postgres")
bigquery_config, _ := prebuiltconfigs.Get("bigquery")
cloudsqlpg_config, _ := prebuiltconfigs.Get("cloud-sql-postgres")
cloudsqlmysql_config, _ := prebuiltconfigs.Get("cloud-sql-mysql")
cloudsqlmssql_config, _ := prebuiltconfigs.Get("cloud-sql-mssql")
postgresconfig, _ := prebuiltconfigs.Get("postgres")
spanner_config, _ := prebuiltconfigs.Get("spanner")
spannerpg_config, _ := prebuiltconfigs.Get("spanner-postgres")
ctx, err := testutils.ContextWithNewLogger()
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
tcs := []struct {
name string
in []byte
wantToolset server.ToolsetConfigs
}{
{
name: "alloydb prebuilt tools",
in: alloydb_config,
wantToolset: server.ToolsetConfigs{
"alloydb-postgres-database-tools": tools.ToolsetConfig{
Name: "alloydb-postgres-database-tools",
ToolNames: []string{"execute_sql", "list_tables"},
},
},
},
{
name: "bigquery prebuilt tools",
in: bigquery_config,
wantToolset: server.ToolsetConfigs{
"bigquery-database-tools": tools.ToolsetConfig{
Name: "bigquery-database-tools",
ToolNames: []string{"execute_sql", "get_dataset_info", "get_table_info", "list_dataset_ids", "list_table_ids"},
},
},
},
{
name: "cloudsqlpg prebuilt tools",
in: cloudsqlpg_config,
wantToolset: server.ToolsetConfigs{
"cloud-sql-postgres-database-tools": tools.ToolsetConfig{
Name: "cloud-sql-postgres-database-tools",
ToolNames: []string{"execute_sql", "list_tables"},
},
},
},
{
name: "cloudsqlmysql prebuilt tools",
in: cloudsqlmysql_config,
wantToolset: server.ToolsetConfigs{
"cloud-sql-mysql-database-tools": tools.ToolsetConfig{
Name: "cloud-sql-mysql-database-tools",
ToolNames: []string{"execute_sql", "list_tables"},
},
},
},
{
name: "cloudsqlmssql prebuilt tools",
in: cloudsqlmssql_config,
wantToolset: server.ToolsetConfigs{
"cloud-sql-mssql-database-tools": tools.ToolsetConfig{
Name: "cloud-sql-mssql-database-tools",
ToolNames: []string{"execute_sql", "list_tables"},
},
},
},
{
name: "postgres prebuilt tools",
in: postgresconfig,
wantToolset: server.ToolsetConfigs{
"postgres-database-tools": tools.ToolsetConfig{
Name: "postgres-database-tools",
ToolNames: []string{"execute_sql", "list_tables"},
},
},
},
{
name: "spanner prebuilt tools",
in: spanner_config,
wantToolset: server.ToolsetConfigs{
"spanner-database-tools": tools.ToolsetConfig{
Name: "spanner-database-tools",
ToolNames: []string{"execute_sql", "execute_sql_dql", "list_tables"},
},
},
},
{
name: "spanner pg prebuilt tools",
in: spannerpg_config,
wantToolset: server.ToolsetConfigs{
"spanner-postgres-database-tools": tools.ToolsetConfig{
Name: "spanner-postgres-database-tools",
ToolNames: []string{"execute_sql", "execute_sql_dql", "list_tables"},
},
},
},
}
for _, tc := range tcs {
t.Run(tc.name, func(t *testing.T) {
toolsFile, err := parseToolsFile(ctx, tc.in)
if err != nil {
t.Fatalf("failed to parse input: %v", err)
}
if diff := cmp.Diff(tc.wantToolset, toolsFile.Toolsets); diff != "" {
t.Fatalf("incorrect tools parse: diff %v", diff)
}
})
}
}
func TestUpdateLogLevel(t *testing.T) {
tcs := []struct {
desc string
stdio bool
logLevel string
want bool
}{
{
desc: "no stdio",
stdio: false,
logLevel: "info",
want: false,
},
{
desc: "stdio with info log",
stdio: true,
logLevel: "info",
want: true,
},
{
desc: "stdio with debug log",
stdio: true,
logLevel: "debug",
want: true,
},
{
desc: "stdio with warn log",
stdio: true,
logLevel: "warn",
want: false,
},
{
desc: "stdio with error log",
stdio: true,
logLevel: "error",
want: false,
},
}
for _, tc := range tcs {
t.Run(tc.desc, func(t *testing.T) {
got := updateLogLevel(tc.stdio, tc.logLevel)
if got != tc.want {
t.Fatalf("incorrect indication to update log level: got %t, want %t", got, tc.want)
}
})
}
}

View File

@@ -1 +1 @@
0.3.0
0.7.0

View File

@@ -12,4 +12,4 @@ description: >
<link rel="canonical" href="getting-started/introduction/"/>
<meta http-equiv="refresh" content="0;url=getting-started/introduction"/>
</head>
</html>
</html>

View File

@@ -1,6 +1,7 @@
---
title: "About"
type: docs
weight: 5
description: A list of other information related to Toolbox.
weight: 6
description: >
A list of other information related to Toolbox.
---

View File

@@ -7,7 +7,7 @@ description: Frequently asked questions about Toolbox.
## How can I deploy or run Toolbox?
Gen AI Toolbox for Databases is open-source and can be ran or deployed to a
MCP Toolbox for Databases is open-source and can be ran or deployed to a
multitude of environments. For convenience, we release [compiled binaries and
docker images][release-notes] (but you can always compile yourself as well!).
@@ -75,7 +75,10 @@ While a large part of the Gen AI Ecosystem is predominately Python, we opted to
use Go. We chose Go because it's still easy and simple to use, but also easier
to write fast, efficient, and concurrent servers. Additionally, given the
server-client architecture, we can still meet many developers where they are
with clients in their preferred language. As Gen AI matures, we want developers to be able to use Toolbox on the serving path of mission critical applications. It's easier to build the needed robustness, performance and scalability in Go than in Python.
with clients in their preferred language. As Gen AI matures, we want developers
to be able to use Toolbox on the serving path of mission critical applications.
It's easier to build the needed robustness, performance and scalability in Go
than in Python.
## Is Toolbox compatible with Model Context Protocol (MCP)?

View File

@@ -2,5 +2,6 @@
title: "Concepts"
type: docs
weight: 2
description: Some core concepts in Toolbox
description: >
Some core concepts in Toolbox
---

View File

@@ -2,7 +2,8 @@
title: "Telemetry"
type: docs
weight: 2
description: An overview of telemetry and observability in Toolbox.
description: >
An overview of telemetry and observability in Toolbox.
---
## About
@@ -28,7 +29,7 @@ The following flags can be used to customize Toolbox logging:
__Example:__
```bash
./toolbox --tools_file "tools.yaml" --log-level warn --logging-format json
./toolbox --tools-file "tools.yaml" --log-level warn --logging-format json
```
### Level

View File

@@ -3,5 +3,5 @@ title: "Getting Started"
type: docs
weight: 1
description: >
How to get started with Toolbox
How to get started with Toolbox.
---

View File

@@ -29,7 +29,7 @@
"id": "5sZ7_HCYJm4y"
},
"source": [
"[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://github.com/googleapis/genai-toolbox/tree/main/docs/en/getting-started/colab_quickstart.ipynb)"
"[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/googleapis/genai-toolbox/blob/main/docs/en/getting-started/colab_quickstart.ipynb)"
]
},
{
@@ -38,9 +38,14 @@
"id": "DMLivT-MIcmV"
},
"source": [
"# Getting Started With GenAI Toolbox\n",
"# Getting Started With MCP Toolbox\n",
"\n",
"This guide demonstrates how to quickly run [Toolbox](https://github.com/googleapis/genai-toolbox) end-to-end in Google Colab using Python, PostgreSQL, and LlamaIndex.\n",
"This guide demonstrates how to quickly run\n",
"[Toolbox](https://github.com/googleapis/genai-toolbox) end-to-end in Google\n",
"Colab using Python, PostgreSQL, and either [Google\n",
"GenAI](https://pypi.org/project/google-genai/), [ADK](https://google.github.io/adk-docs/),\n",
"[Langgraph](https://www.langchain.com/langgraph)\n",
"or [LlamaIndex](https://www.llamaindex.ai/).\n",
"\n",
"Within this Colab environment, you'll\n",
"- Set up a `PostgreSQL database`.\n",
@@ -217,7 +222,8 @@
},
"outputs": [],
"source": [
"! curl -O https://storage.googleapis.com/genai-toolbox/v0.2.0/linux/amd64/toolbox\n",
"version = \"0.7.0\" # x-release-please-version\n",
"! curl -O https://storage.googleapis.com/genai-toolbox/v{version}/linux/amd64/toolbox\n",
"\n",
"# Make the binary executable\n",
"! chmod +x toolbox"
@@ -347,6 +353,13 @@
" type: string\n",
" description: The ID of the hotel to cancel.\n",
" statement: UPDATE hotels SET booked = B'0' WHERE id = \\$1;\n",
"toolsets:\n",
" my-toolset:\n",
" - search-hotels-by-name\n",
" - search-hotels-by-location\n",
" - book-hotel\n",
" - update-hotel\n",
" - cancel-hotel\n",
"\"\"\""
]
},
@@ -382,7 +395,7 @@
"outputs": [],
"source": [
"# Start a toolbox server\n",
"! nohup {TOOLBOX_BINARY_PATH} --tools_file {TOOLS_FILE_PATH} -p {SERVER_PORT} > toolbox.log 2>&1 &"
"! nohup {TOOLBOX_BINARY_PATH} --tools-file {TOOLS_FILE_PATH} -p {SERVER_PORT} > toolbox.log 2>&1 &"
]
},
{
@@ -444,7 +457,7 @@
"# @markdown Please fill in the value below with your GCP project ID and then run the cell.\n",
"\n",
"# Please fill in these values.\n",
"project_id = \"twisha-dev\" # @param {type:\"string\"}\n",
"project_id = \"\" # @param {type:\"string\"}\n",
"\n",
"# Quick input validations.\n",
"assert project_id, \"⚠️ Please provide a Google Cloud project ID\"\n",
@@ -459,8 +472,260 @@
"id": "J46eLkFbNhWq"
},
"source": [
"> You can either use LangGraph or LlamaIndex to develop a Toolbox based application. Run one of the [Connect Using LangGraph](#scrollTo=pbapNMhhL33S) or [Connect using LlamaIndex](#scrollTo=04iysrm_L_7v&line=1&uniqifier=1) sections below.\n",
"\n"
"> You can either use LangGraph or LlamaIndex to develop a Toolbox based\n",
"> application. Run one of the sections below\n",
"> - [Connect using Google GenAI](#scrollTo=Rwgv1LDdNKSn)\n",
"> - [Connect using ADK](#scrollTo=QqRlWqvYNKSo)\n",
"> - [Connect Using LangGraph](#scrollTo=pbapNMhhL33S)\n",
"> - [Connect using LlamaIndex](#scrollTo=04iysrm_L_7v)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rwgv1LDdNKSn"
},
"source": [
"### Connect Using Google GenAI"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "HY23RMk4NKSn"
},
"outputs": [],
"source": [
"# Install the Toolbox Core package\n",
"!pip install toolbox-core --quiet\n",
"\n",
"# Install the Google GenAI package\n",
"!pip install google-genai --quiet"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9F1u566sNKSn"
},
"source": [
"Create a Google GenAI Application which can Search, Book and Cancel hotels."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "LAuBIOXvNKSn"
},
"outputs": [],
"source": [
"import asyncio\n",
"\n",
"from google import genai\n",
"from google.genai.types import (\n",
" Content,\n",
" FunctionDeclaration,\n",
" GenerateContentConfig,\n",
" Part,\n",
" Tool,\n",
")\n",
"\n",
"from toolbox_core import ToolboxClient\n",
"\n",
"prompt = \"\"\"\n",
" You're a helpful hotel assistant. You handle hotel searching, booking and\n",
" cancellations. When the user searches for a hotel, mention it's name, id,\n",
" location and price tier. Always mention hotel id while performing any\n",
" searches. This is very important for any operations. For any bookings or\n",
" cancellations, please provide the appropriate confirmation. Be sure to\n",
" update checkin or checkout dates if mentioned by the user.\n",
" Don't ask for confirmations from the user.\n",
"\"\"\"\n",
"\n",
"queries = [\n",
" \"Find hotels in Basel with Basel in it's name.\",\n",
" \"Please book the hotel Hilton Basel for me.\",\n",
" \"This is too expensive. Please cancel it.\",\n",
" \"Please book Hyatt Regency for me\",\n",
" \"My check in dates for my booking would be from April 10, 2024 to April 19, 2024.\",\n",
"]\n",
"\n",
"\n",
"async def run_application():\n",
" toolbox_client = ToolboxClient(\"http://127.0.0.1:5000\")\n",
"\n",
" # The toolbox_tools list contains Python callables (functions/methods) designed for LLM tool-use\n",
" # integration. While this example uses Google's genai client, these callables can be adapted for\n",
" # various function-calling or agent frameworks. For easier integration with supported frameworks\n",
" # (https://github.com/googleapis/mcp-toolbox-python-sdk/tree/main/packages), use the\n",
" # provided wrapper packages, which handle framework-specific boilerplate.\n",
" toolbox_tools = await toolbox_client.load_toolset(\"my-toolset\")\n",
" genai_client = genai.Client(\n",
" vertexai=True, project=project_id, location=\"us-central1\"\n",
" )\n",
"\n",
" genai_tools = [\n",
" Tool(\n",
" function_declarations=[\n",
" FunctionDeclaration.from_callable_with_api_option(callable=tool)\n",
" ]\n",
" )\n",
" for tool in toolbox_tools\n",
" ]\n",
" history = []\n",
" for query in queries:\n",
" user_prompt_content = Content(\n",
" role=\"user\",\n",
" parts=[Part.from_text(text=query)],\n",
" )\n",
" history.append(user_prompt_content)\n",
"\n",
" response = genai_client.models.generate_content(\n",
" model=\"gemini-2.0-flash-001\",\n",
" contents=history,\n",
" config=GenerateContentConfig(\n",
" system_instruction=prompt,\n",
" tools=genai_tools,\n",
" ),\n",
" )\n",
" history.append(response.candidates[0].content)\n",
" function_response_parts = []\n",
" for function_call in response.function_calls:\n",
" fn_name = function_call.name\n",
" # The tools are sorted alphabetically\n",
" if fn_name == \"search-hotels-by-name\":\n",
" function_result = await toolbox_tools[3](**function_call.args)\n",
" elif fn_name == \"search-hotels-by-location\":\n",
" function_result = await toolbox_tools[2](**function_call.args)\n",
" elif fn_name == \"book-hotel\":\n",
" function_result = await toolbox_tools[0](**function_call.args)\n",
" elif fn_name == \"update-hotel\":\n",
" function_result = await toolbox_tools[4](**function_call.args)\n",
" elif fn_name == \"cancel-hotel\":\n",
" function_result = await toolbox_tools[1](**function_call.args)\n",
" else:\n",
" raise ValueError(\"Function name not present.\")\n",
" function_response = {\"result\": function_result}\n",
" function_response_part = Part.from_function_response(\n",
" name=function_call.name,\n",
" response=function_response,\n",
" )\n",
" function_response_parts.append(function_response_part)\n",
"\n",
" if function_response_parts:\n",
" tool_response_content = Content(role=\"tool\", parts=function_response_parts)\n",
" history.append(tool_response_content)\n",
"\n",
" response2 = genai_client.models.generate_content(\n",
" model=\"gemini-2.0-flash-001\",\n",
" contents=history,\n",
" config=GenerateContentConfig(\n",
" tools=genai_tools,\n",
" ),\n",
" )\n",
" final_model_response_content = response2.candidates[0].content\n",
" history.append(final_model_response_content)\n",
" print(response2.text)\n",
"\n",
"\n",
"asyncio.run(run_application())"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QqRlWqvYNKSo"
},
"source": [
"### Connect Using ADK"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "dhQTKlpVNKSo"
},
"outputs": [],
"source": [
"! pip install toolbox-core --quiet\n",
"! pip install google-adk --quiet"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "tSLO_0vKNKSo"
},
"outputs": [],
"source": [
"from google.adk.agents import Agent\n",
"from google.adk.runners import Runner\n",
"from google.adk.sessions import InMemorySessionService\n",
"from google.adk.artifacts.in_memory_artifact_service import InMemoryArtifactService\n",
"from google.genai import types\n",
"from toolbox_core import ToolboxSyncClient\n",
"\n",
"import os\n",
"# TODO(developer): replace this with your Google API key\n",
"os.environ['GOOGLE_API_KEY'] = \"<GOOGLE_API_KEY>\"\n",
"\n",
"toolbox_client = ToolboxSyncClient(\"http://127.0.0.1:5000\")\n",
"\n",
"prompt = \"\"\"\n",
" You're a helpful hotel assistant. You handle hotel searching, booking and\n",
" cancellations. When the user searches for a hotel, mention it's name, id,\n",
" location and price tier. Always mention hotel ids while performing any\n",
" searches. This is very important for any operations. For any bookings or\n",
" cancellations, please provide the appropriate confirmation. Be sure to\n",
" update checkin or checkout dates if mentioned by the user.\n",
" Don't ask for confirmations from the user.\n",
"\"\"\"\n",
"\n",
"root_agent = Agent(\n",
" model='gemini-2.0-flash-001',\n",
" name='hotel_agent',\n",
" description='A helpful AI assistant.',\n",
" instruction=prompt,\n",
" tools=toolbox_client.load_toolset(\"my-toolset\"),\n",
")\n",
"\n",
"session_service = InMemorySessionService()\n",
"artifacts_service = InMemoryArtifactService()\n",
"session = session_service.create_session(\n",
" state={}, app_name='hotel_agent', user_id='123'\n",
")\n",
"runner = Runner(\n",
" app_name='hotel_agent',\n",
" agent=root_agent,\n",
" artifact_service=artifacts_service,\n",
" session_service=session_service,\n",
")\n",
"\n",
"queries = [\n",
" \"Find hotels in Basel with Basel in it's name.\",\n",
" \"Can you book the Hilton Basel for me?\",\n",
" \"Oh wait, this is too expensive. Please cancel it and book the Hyatt Regency instead.\",\n",
" \"My check in dates would be from April 10, 2024 to April 19, 2024.\",\n",
"]\n",
"\n",
"for query in queries:\n",
" content = types.Content(role='user', parts=[types.Part(text=query)])\n",
" events = runner.run(session_id=session.id,\n",
" user_id='123', new_message=content)\n",
"\n",
" responses = (\n",
" part.text\n",
" for event in events\n",
" for part in event.content.parts\n",
" if part.text is not None\n",
" )\n",
"\n",
" for text in responses:\n",
" print(text)"
]
},
{
@@ -534,23 +799,26 @@
" \"My check in dates would be from April 10, 2024 to April 19, 2024.\",\n",
"]\n",
"\n",
"# Create an LLM to bind with the agent.\n",
"# TODO(developer): replace this with another model if needed\n",
"model = ChatVertexAI(model_name=\"gemini-1.5-pro\", project=project_id)\n",
"# model = ChatGoogleGenerativeAI(model=\"gemini-1.5-pro\")\n",
"# model = ChatAnthropic(model=\"claude-3-5-sonnet-20240620\")\n",
"async def run_application():\n",
" # Create an LLM to bind with the agent.\n",
" # TODO(developer): replace this with another model if needed\n",
" model = ChatVertexAI(model_name=\"gemini-2.0-flash-001\", project=project_id)\n",
" # model = ChatGoogleGenerativeAI(model=\"gemini-2.0-flash-001\")\n",
" # model = ChatAnthropic(model=\"claude-3-5-sonnet-20240620\")\n",
"\n",
"# Load the tools from the Toolbox server\n",
"client = ToolboxClient(\"http://127.0.0.1:5000\")\n",
"tools = client.load_toolset()\n",
" # Load the tools from the Toolbox server\n",
" client = ToolboxClient(\"http://127.0.0.1:5000\")\n",
" tools = await client.aload_toolset()\n",
"\n",
"# Create a Langraph agent\n",
"agent = create_react_agent(model, tools, checkpointer=MemorySaver())\n",
"config = {\"configurable\": {\"thread_id\": \"thread-1\"}}\n",
"for query in queries:\n",
" inputs = {\"messages\": [(\"user\", prompt + query)]}\n",
" response = agent.invoke(inputs, stream_mode=\"values\", config=config)\n",
" print(response[\"messages\"][-1].content)"
" # Create a Langraph agent\n",
" agent = create_react_agent(model, tools, checkpointer=MemorySaver())\n",
" config = {\"configurable\": {\"thread_id\": \"thread-1\"}}\n",
" for query in queries:\n",
" inputs = {\"messages\": [(\"user\", prompt + query)]}\n",
" response = agent.invoke(inputs, stream_mode=\"values\", config=config)\n",
" print(response[\"messages\"][-1].content)\n",
"\n",
"await run_application()"
]
},
{
@@ -626,16 +894,16 @@
" \"My check in dates would be from April 10, 2024 to April 19, 2024.\",\n",
"]\n",
"\n",
"async def run_agent():\n",
"async def run_application():\n",
" # Create an LLM to bind with the agent.\n",
" # TODO(developer): replace this with another model if needed\n",
" llm = GoogleGenAI(\n",
" model=\"gemini-1.5-pro\",\n",
" model=\"gemini-2.0-flash-001\",\n",
" vertexai_config={\"project\": project_id, \"location\": \"us-central1\"},\n",
" )\n",
" # llm = GoogleGenAI(\n",
" # api_key=os.getenv(\"GOOGLE_API_KEY\"),\n",
" # model=\"gemini-1.5-pro\",\n",
" # model=\"gemini-2.0-flash-001\",\n",
" # )\n",
" # llm = Anthropic(\n",
" # model=\"claude-3-7-sonnet-latest\",\n",
@@ -644,7 +912,7 @@
"\n",
" # Load the tools from the Toolbox server\n",
" client = ToolboxClient(\"http://127.0.0.1:5000\")\n",
" tools = client.load_toolset()\n",
" tools = await client.aload_toolset()\n",
"\n",
" # Create a LlamaIndex agent\n",
" agent = AgentWorkflow.from_tools_or_functions(\n",
@@ -660,7 +928,7 @@
" print(f\"---- {query} ----\")\n",
" print(str(response))\n",
"\n",
"await run_agent()"
"await run_application()"
]
},
{
@@ -737,6 +1005,7 @@
"metadata": {
"colab": {
"collapsed_sections": [
"Rwgv1LDdNKSn",
"pbapNMhhL33S",
"04iysrm_L_7v"
],

View File

@@ -2,16 +2,27 @@
title: "Configuration"
type: docs
weight: 4
description: How to configure Toolbox's tools.yaml file.
description: >
How to configure Toolbox's tools.yaml file.
---
The primary way to configure Toolbox is through the `tools.yaml` file. If you
have multiple files, you can tell toolbox which to load with the `--tools_file
have multiple files, you can tell toolbox which to load with the `--tools-file
tools.yaml` flag.
You can find more detailed reference documentation to all resource types in the
[Resources](../resources/).
### Using Environment Variables
To avoid hardcoding certain secret fields like passwords, usernames, API keys
etc., you could use environment variables instead with the format `${ENV_NAME}`.
```yaml
user: ${USER_NAME}
password: ${PASSWORD}
```
### Sources
The `sources` section of your `tools.yaml` defines what data sources your
@@ -25,8 +36,8 @@ sources:
host: 127.0.0.1
port: 5432
database: toolbox_db
user: toolbox_user
password: my-password
user: ${USER_NAME}
password: ${PASSWORD}
```
For more details on configuring different types of sources, see the
@@ -54,7 +65,6 @@ tools:
For more details on configuring different types of tools, see the
[Tools](../resources/tools/).
### Toolsets
The `toolsets` section of your `tools.yaml` allows you to define groups of tools
@@ -79,4 +89,4 @@ all_tools = client.load_toolset()
# This will only load the tools listed in 'my_second_toolset'
my_second_toolset = client.load_toolset("my_second_toolset")
```
```

View File

@@ -2,13 +2,20 @@
title: "Introduction"
type: docs
weight: 1
description: An introduction to Gen AI Toolbox for Databases.
description: >
An introduction to MCP Toolbox for Databases.
---
Gen AI Toolbox for Databases is an open source server that makes it easier to
build Gen AI tools for interacting with databases. It enables you to develop
tools easier, faster, and more securely by handling the complexities such as
connection pooling, authentication, and more.
MCP Toolbox for Databases is an open source MCP server for databases. It enables
you to develop tools easier, faster, and more securely by handling the complexities
such as connection pooling, authentication, and more.
{{< notice note >}}
This solution was originally named “Gen AI Toolbox for
Databases” as its initial development predated MCP, but was renamed to align
with recently added MCP compatibility.
{{< /notice >}}
## Why Toolbox?
@@ -24,6 +31,21 @@ database. Toolbox provides:
support for OpenTelemetry.
**⚡ Supercharge Your Workflow with an AI Database Assistant ⚡**
Stop context-switching and let your AI assistant become a true co-developer. By [connecting your IDE to your databases with MCP Toolbox][connect-ide], you can delegate complex and time-consuming database tasks, allowing you to build faster and focus on what matters. This isn't just about code completion; it's about giving your AI the context it needs to handle the entire development lifecycle.
Heres how it will save you time:
* **Query in Plain English**: Interact with your data using natural language right from your IDE. Ask complex questions like, *"How many orders were delivered in 2024, and what items were in them?"* without writing any SQL.
* **Automate Database Management**: Simply describe your data needs, and let the AI assistant manage your database for you. It can handle generating queries, creating tables, adding indexes, and more.
* **Generate Context-Aware Code**: Empower your AI assistant to generate application code and tests with a deep understanding of your real-time database schema. This accelerates the development cycle by ensuring the generated code is directly usable.
* **Slash Development Overhead**: Radically reduce the time spent on manual setup and boilerplate. MCP Toolbox helps streamline lengthy database configurations, repetitive code, and error-prone schema migrations.
Learn [how to connect your AI tools (IDEs) to Toolbox using MCP][connect-ide].
[connect-ide]: ../../how-to/connect-ide/
## General Architecture
Toolbox sits between your application's orchestration framework and your
@@ -51,7 +73,7 @@ To install Toolbox as a binary:
```sh
# see releases page for other versions
export VERSION=0.3.0
export VERSION=0.7.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
```
@@ -62,7 +84,7 @@ You can also install Toolbox as a container:
```sh
# see releases page for other versions
export VERSION=0.3.0
export VERSION=0.7.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
```
@@ -73,7 +95,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:
```sh
go install github.com/googleapis/genai-toolbox@v0.3.0
go install github.com/googleapis/genai-toolbox@v0.7.0
```
{{% /tab %}}
@@ -86,7 +108,7 @@ go install github.com/googleapis/genai-toolbox@v0.3.0
execute `toolbox` to start the server:
```sh
./toolbox --tools_file "tools.yaml"
./toolbox --tools-file "tools.yaml"
```
You can use `toolbox help` for a full list of flags! To stop the server, send a
@@ -101,24 +123,44 @@ Once your server is up and running, you can load the tools into your
application. See below the list of Client SDKs for using various frameworks:
{{< tabpane text=true persist=header >}}
{{% tab header="Core" lang="en" %}}
Once you've installed the [Toolbox Core
SDK](https://pypi.org/project/toolbox-core/), you can load
tools:
{{< highlight python >}}
from toolbox_core import ToolboxClient
# update the url to point to your server
async with ToolboxClient("http://127.0.0.1:5000") as client:
# these tools can be passed to your application!
tools = await client.load_toolset("toolset_name")
{{< /highlight >}}
For more detailed instructions on using the Toolbox Core SDK, see the
[project's README](https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/packages/toolbox-core/README.md).
{{% /tab %}}
{{% tab header="LangChain" lang="en" %}}
Once you've installed the [Toolbox LangChain
SDK](https://github.com/googleapis/genai-toolbox-langchain-python), you can load
SDK](https://pypi.org/project/toolbox-langchain/), you can load
tools:
{{< highlight python >}}
from toolbox_langchain import ToolboxClient
# update the url to point to your server
client = ToolboxClient("http://127.0.0.1:5000")
async with ToolboxClient("http://127.0.0.1:5000") as client:
# these tools can be passed to your application!
tools = client.load_toolset()
# these tools can be passed to your application!
tools = client.load_toolset()
{{< /highlight >}}
For more detailed instructions on using the Toolbox LangChain SDK, see the
[project's README](https://github.com/googleapis/genai-toolbox-langchain-python/blob/main/README.md).
[project's README](https://github.com/googleapis/mcp-toolbox-sdk-python/blob/main/packages/toolbox-langchain/README.md).
{{% /tab %}}
{{% tab header="Llamaindex" lang="en" %}}
@@ -131,10 +173,10 @@ tools:
from toolbox_llamaindex import ToolboxClient
# update the url to point to your server
client = ToolboxClient("http://127.0.0.1:5000")
async with ToolboxClient("http://127.0.0.1:5000") as client:
# these tools can be passed to your application!
tools = client.load_toolset()
# these tools can be passed to your application!
tools = client.load_toolset()
{{< /highlight >}}
For more detailed instructions on using the Toolbox Llamaindex SDK, see the

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 154 KiB

View File

@@ -4,33 +4,19 @@ type: docs
weight: 2
description: >
How to get started running Toolbox locally with Python, PostgreSQL, and
LangGraph or LlamaIndex.
[GoogleGenAI](https://pypi.org/project/google-genai/),
[LangGraph](https://www.langchain.com/langgraph), [LlamaIndex](https://www.llamaindex.ai/) or [Agent Development Kit](https://google.github.io/adk-docs/).
---
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/googleapis/genai-toolbox/blob/main/docs/en/getting-started/colab_quickstart.ipynb)
## Before you begin
This guide assumes you have already done the following:
This guide assumes you have already done the following:
1. Installed [Python 3.9+][install-python] (including [pip][install-pip] and
your preferred virtual environment tool for managing dependencies e.g. [venv][install-venv])
1. Installed [PostgreSQL 16+ and the `psql` client][install-postgres]
1. Completed setup for usage with an LLM model such as
{{< tabpane text=true persist=header >}}
{{% tab header="LangChain" lang="en" %}}
- [langchain-vertexai](https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/#setup) package.
- [langchain-google-genai](https://python.langchain.com/docs/integrations/chat/google_generative_ai/#setup) package.
- [langchain-anthropic](https://python.langchain.com/docs/integrations/chat/anthropic/#setup) package.
{{% /tab %}}
{{% tab header="LlamaIndex" lang="en" %}}
- [llama-index-llms-google-genai](https://pypi.org/project/llama-index-llms-google-genai/) package.
- [llama-index-llms-anthropic](https://docs.llamaindex.ai/en/stable/examples/llm/anthropic) package.
{{% /tab %}}
{{< /tabpane >}}
[install-python]: https://wiki.python.org/moin/BeginnersGuide/Download
[install-pip]: https://pip.pypa.io/en/stable/installation/
@@ -40,7 +26,7 @@ This guide assumes you have already done the following:
## Step 1: Set up your database
In this section, we will create a database, insert some data that needs to be
access by our agent, and create a database user for Toolbox to connect with.
accessed by our agent, and create a database user for Toolbox to connect with.
1. Connect to postgres using the `psql` command:
@@ -50,11 +36,32 @@ access by our agent, and create a database user for Toolbox to connect with.
Here, `postgres` denotes the default postgres superuser.
{{< notice info >}}
#### **Having trouble connecting?**
* **Password Prompt:** If you are prompted for a password for the `postgres` user and do not know it (or a blank password doesn't work), your PostgreSQL installation might require a password or a different authentication method.
* **`FATAL: role "postgres" does not exist`:** This error means the default `postgres` superuser role isn't available under that name on your system.
* **`Connection refused`:** Ensure your PostgreSQL server is actually running. You can typically check with `sudo systemctl status postgresql` and start it with `sudo systemctl start postgresql` on Linux systems.
<br/>
#### **Common Solution**
For password issues or if the `postgres` role seems inaccessible directly, try switching to the `postgres` operating system user first. This user often has permission to connect without a password for local connections (this is called peer authentication).
```bash
sudo -i -u postgres
psql -h 127.0.0.1
```
Once you are in the `psql` shell using this method, you can proceed with the database creation steps below. Afterwards, type `\q` to exit `psql`, and then `exit` to return to your normal user shell.
If desired, once connected to `psql` as the `postgres` OS user, you can set a password for the `postgres` *database* user using: `ALTER USER postgres WITH PASSWORD 'your_chosen_password';`. This would allow direct connection with `-U postgres` and a password next time.
{{< /notice >}}
1. Create a new database and a new user:
{{< notice tip >}}
For a real application, it's best to follow the principle of least permission
and only grant the privileges your application needs.
{{< notice tip >}}
For a real application, it's best to follow the principle of least permission
and only grant the privileges your application needs.
{{< /notice >}}
```sql
@@ -66,13 +73,12 @@ access by our agent, and create a database user for Toolbox to connect with.
ALTER DATABASE toolbox_db OWNER TO toolbox_user;
```
1. End the database session:
```bash
\q
```
(If you used `sudo -i -u postgres` and then `psql`, remember you might also need to type `exit` after `\q` to leave the `postgres` user's shell session.)
1. Connect to your database with your new user:
@@ -117,7 +123,6 @@ access by our agent, and create a database user for Toolbox to connect with.
\q
```
## Step 2: Install and configure Toolbox
In this section, we will download Toolbox, configure our tools in a
@@ -125,15 +130,15 @@ In this section, we will download Toolbox, configure our tools in a
1. Download the latest version of Toolbox as a binary:
{{< notice tip >}}
Select the
[correct binary](https://github.com/googleapis/genai-toolbox/releases)
corresponding to your OS and CPU architecture.
{{< notice tip >}}
Select the
[correct binary](https://github.com/googleapis/genai-toolbox/releases)
corresponding to your OS and CPU architecture.
{{< /notice >}}
<!-- {x-release-please-start-version} -->
```bash
export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64
curl -O https://storage.googleapis.com/genai-toolbox/v0.3.0/$OS/toolbox
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/$OS/toolbox
```
<!-- {x-release-please-end} -->
@@ -147,6 +152,11 @@ In this section, we will download Toolbox, configure our tools in a
such as `user`, `password`, or `database` that you may have customized in the
previous step.
{{< notice tip >}}
In practice, use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
```yaml
sources:
my-pg-source:
@@ -154,8 +164,8 @@ In this section, we will download Toolbox, configure our tools in a
host: 127.0.0.1
port: 5432
database: toolbox_db
user: toolbox_user
password: my-password
user: ${USER_NAME}
password: ${PASSWORD}
tools:
search-hotels-by-name:
kind: postgres-sql
@@ -213,13 +223,21 @@ In this section, we will download Toolbox, configure our tools in a
type: string
description: The ID of the hotel to cancel.
statement: UPDATE hotels SET booked = B'0' WHERE id = $1;
toolsets:
my-toolset:
- search-hotels-by-name
- search-hotels-by-location
- book-hotel
- update-hotel
- cancel-hotel
```
For more info on tools, check out the `Resources` section of the docs.
1. Run the Toolbox server, pointing to the `tools.yaml` file created earlier:
```bash
./toolbox --tools_file "tools.yaml"
./toolbox --tools-file "tools.yaml"
```
## Step 3: Connect your agent to Toolbox
@@ -227,15 +245,22 @@ In this section, we will download Toolbox, configure our tools in a
In this section, we will write and run an agent that will load the Tools
from Toolbox.
{{< notice tip>}} If you prefer to experiment within a Google Colab environment,
you can connect to a
[local runtime](https://research.google.com/colaboratory/local-runtimes.html).
{{< notice tip>}} If you prefer to experiment within a Google Colab environment,
you can connect to a
[local runtime](https://research.google.com/colaboratory/local-runtimes.html).
{{< /notice >}}
1. In a new terminal, install the SDK package.
{{< tabpane persist=header >}}
{{< tab header="Core" lang="bash" >}}
pip install toolbox-core
{{< /tab >}}
{{< tab header="ADK" lang="bash" >}}
pip install toolbox-core
{{< /tab >}}
{{< tab header="Langchain" lang="bash" >}}
pip install toolbox-langchain
@@ -247,43 +272,243 @@ pip install toolbox-llamaindex
{{< /tabpane >}}
1. Install other required dependencies:
{{< tabpane persist=header >}}
{{< tab header="Core" lang="bash" >}}
pip install google-genai
{{< /tab >}}
{{< tab header="ADK" lang="bash" >}}
pip install google-adk
{{< /tab >}}
{{< tab header="Langchain" lang="bash" >}}
# TODO(developer): replace with correct package if needed
pip install langgraph langchain-google-vertexai
# pip install langchain-google-genai
# pip install langchain-anthropic
{{< /tab >}}
{{< tab header="LlamaIndex" lang="bash" >}}
# TODO(developer): replace with correct package if needed
pip install llama-index-llms-google-genai
# pip install llama-index-llms-anthropic
{{< /tab >}}
{{< /tabpane >}}
1. Create a new file named `hotel_agent.py` and copy the following
code to create an agent:
{{< tabpane persist=header >}}
{{< tab header="Core" lang="python" >}}
import asyncio
from google import genai
from google.genai.types import (
Content,
FunctionDeclaration,
GenerateContentConfig,
Part,
Tool,
)
from toolbox_core import ToolboxClient
prompt = """
You're a helpful hotel assistant. You handle hotel searching, booking and
cancellations. When the user searches for a hotel, mention it's name, id,
location and price tier. Always mention hotel id while performing any
searches. This is very important for any operations. For any bookings or
cancellations, please provide the appropriate confirmation. Be sure to
update checkin or checkout dates if mentioned by the user.
Don't ask for confirmations from the user.
"""
queries = [
"Find hotels in Basel with Basel in it's name.",
"Please book the hotel Hilton Basel for me.",
"This is too expensive. Please cancel it.",
"Please book Hyatt Regency for me",
"My check in dates for my booking would be from April 10, 2024 to April 19, 2024.",
]
async def run_application():
async with ToolboxClient("http://127.0.0.1:5000") as toolbox_client:
# The toolbox_tools list contains Python callables (functions/methods) designed for LLM tool-use
# integration. While this example uses Google's genai client, these callables can be adapted for
# various function-calling or agent frameworks. For easier integration with supported frameworks
# (https://github.com/googleapis/mcp-toolbox-python-sdk/tree/main/packages), use the
# provided wrapper packages, which handle framework-specific boilerplate.
toolbox_tools = await toolbox_client.load_toolset("my-toolset")
genai_client = genai.Client(
vertexai=True, project="project-id", location="us-central1"
)
genai_tools = [
Tool(
function_declarations=[
FunctionDeclaration.from_callable_with_api_option(callable=tool)
]
)
for tool in toolbox_tools
]
history = []
for query in queries:
user_prompt_content = Content(
role="user",
parts=[Part.from_text(text=query)],
)
history.append(user_prompt_content)
response = genai_client.models.generate_content(
model="gemini-2.0-flash-001",
contents=history,
config=GenerateContentConfig(
system_instruction=prompt,
tools=genai_tools,
),
)
history.append(response.candidates[0].content)
function_response_parts = []
for function_call in response.function_calls:
fn_name = function_call.name
# The tools are sorted alphabetically
if fn_name == "search-hotels-by-name":
function_result = await toolbox_tools[3](**function_call.args)
elif fn_name == "search-hotels-by-location":
function_result = await toolbox_tools[2](**function_call.args)
elif fn_name == "book-hotel":
function_result = await toolbox_tools[0](**function_call.args)
elif fn_name == "update-hotel":
function_result = await toolbox_tools[4](**function_call.args)
elif fn_name == "cancel-hotel":
function_result = await toolbox_tools[1](**function_call.args)
else:
raise ValueError("Function name not present.")
function_response = {"result": function_result}
function_response_part = Part.from_function_response(
name=function_call.name,
response=function_response,
)
function_response_parts.append(function_response_part)
if function_response_parts:
tool_response_content = Content(role="tool", parts=function_response_parts)
history.append(tool_response_content)
response2 = genai_client.models.generate_content(
model="gemini-2.0-flash-001",
contents=history,
config=GenerateContentConfig(
tools=genai_tools,
),
)
final_model_response_content = response2.candidates[0].content
history.append(final_model_response_content)
print(response2.text)
asyncio.run(run_application())
{{< /tab >}}
{{< tab header="ADK" lang="python" >}}
from google.adk.agents import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.artifacts.in_memory_artifact_service import InMemoryArtifactService
from google.genai import types
from toolbox_core import ToolboxSyncClient
import os
# TODO(developer): replace this with your Google API key
os.environ['GOOGLE_API_KEY'] = 'your-api-key'
with ToolboxSyncClient("http://127.0.0.1:5000") as toolbox_client:
prompt = """
You're a helpful hotel assistant. You handle hotel searching, booking and
cancellations. When the user searches for a hotel, mention it's name, id,
location and price tier. Always mention hotel ids while performing any
searches. This is very important for any operations. For any bookings or
cancellations, please provide the appropriate confirmation. Be sure to
update checkin or checkout dates if mentioned by the user.
Don't ask for confirmations from the user.
"""
root_agent = Agent(
model='gemini-2.0-flash-001',
name='hotel_agent',
description='A helpful AI assistant.',
instruction=prompt,
tools=toolbox_client.load_toolset("my-toolset"),
)
session_service = InMemorySessionService()
artifacts_service = InMemoryArtifactService()
session = session_service.create_session(
state={}, app_name='hotel_agent', user_id='123'
)
runner = Runner(
app_name='hotel_agent',
agent=root_agent,
artifact_service=artifacts_service,
session_service=session_service,
)
queries = [
"Find hotels in Basel with Basel in it's name.",
"Can you book the Hilton Basel for me?",
"Oh wait, this is too expensive. Please cancel it and book the Hyatt Regency instead.",
"My check in dates would be from April 10, 2024 to April 19, 2024.",
]
for query in queries:
content = types.Content(role='user', parts=[types.Part(text=query)])
events = runner.run(session_id=session.id,
user_id='123', new_message=content)
responses = (
part.text
for event in events
for part in event.content.parts
if part.text is not None
)
for text in responses:
print(text)
{{< /tab >}}
{{< tab header="LangChain" lang="python" >}}
import asyncio
from langgraph.prebuilt import create_react_agent
# TODO(developer): replace this with another import if needed
from langchain_google_vertexai import ChatVertexAI
# from langchain_google_genai import ChatGoogleGenerativeAI
# from langchain_anthropic import ChatAnthropic
from langgraph.checkpoint.memory import MemorySaver
from toolbox_langchain import ToolboxClient
prompt = """
You're a helpful hotel assistant. You handle hotel searching, booking and
cancellations. When the user searches for a hotel, mention it's name, id,
location and price tier. Always mention hotel ids while performing any
searches. This is very important for any operations. For any bookings or
cancellations, please provide the appropriate confirmation. Be sure to
cancellations. When the user searches for a hotel, mention it's name, id,
location and price tier. Always mention hotel ids while performing any
searches. This is very important for any operations. For any bookings or
cancellations, please provide the appropriate confirmation. Be sure to
update checkin or checkout dates if mentioned by the user.
Don't ask for confirmations from the user.
"""
@@ -295,25 +520,25 @@ queries = [
"My check in dates would be from April 10, 2024 to April 19, 2024.",
]
def main():
async def run_application():
# TODO(developer): replace this with another model if needed
model = ChatVertexAI(model_name="gemini-1.5-pro")
# model = ChatGoogleGenerativeAI(model="gemini-1.5-pro")
model = ChatVertexAI(model_name="gemini-2.0-flash-001")
# model = ChatGoogleGenerativeAI(model="gemini-2.0-flash-001")
# model = ChatAnthropic(model="claude-3-5-sonnet-20240620")
# Load the tools from the Toolbox server
client = ToolboxClient("http://127.0.0.1:5000")
tools = client.load_toolset()
async with ToolboxClient("http://127.0.0.1:5000") as client:
tools = await client.aload_toolset()
agent = create_react_agent(model, tools, checkpointer=MemorySaver())
agent = create_react_agent(model, tools, checkpointer=MemorySaver())
config = {"configurable": {"thread_id": "thread-1"}}
for query in queries:
inputs = {"messages": [("user", prompt + query)]}
response = agent.invoke(inputs, stream_mode="values", config=config)
print(response["messages"][-1].content)
config = {"configurable": {"thread_id": "thread-1"}}
for query in queries:
inputs = {"messages": [("user", prompt + query)]}
response = agent.invoke(inputs, stream_mode="values", config=config)
print(response["messages"][-1].content)
main()
asyncio.run(run_application())
{{< /tab >}}
{{< tab header="LlamaIndex" lang="python" >}}
import asyncio
@@ -323,18 +548,20 @@ from llama_index.core.agent.workflow import AgentWorkflow
from llama_index.core.workflow import Context
# TODO(developer): replace this with another import if needed
# TODO(developer): replace this with another import if needed
from llama_index.llms.google_genai import GoogleGenAI
# from llama_index.llms.anthropic import Anthropic
from toolbox_llamaindex import ToolboxClient
prompt = """
You're a helpful hotel assistant. You handle hotel searching, booking and
cancellations. When the user searches for a hotel, mention it's name, id,
location and price tier. Always mention hotel ids while performing any
searches. This is very important for any operations. For any bookings or
cancellations, please provide the appropriate confirmation. Be sure to
cancellations. When the user searches for a hotel, mention it's name, id,
location and price tier. Always mention hotel ids while performing any
searches. This is very important for any operations. For any bookings or
cancellations, please provide the appropriate confirmation. Be sure to
update checkin or checkout dates if mentioned by the user.
Don't ask for confirmations from the user.
"""
@@ -346,48 +573,57 @@ queries = [
"My check in dates would be from April 10, 2024 to April 19, 2024.",
]
async def main():
async def run_application():
# TODO(developer): replace this with another model if needed
llm = GoogleGenAI(
model="gemini-1.5-pro",
model="gemini-2.0-flash-001",
vertexai_config={"project": "project-id", "location": "us-central1"},
)
# llm = GoogleGenAI(
# api_key=os.getenv("GOOGLE_API_KEY"),
# model="gemini-1.5-pro",
# model="gemini-2.0-flash-001",
# )
# llm = Anthropic(
# model="claude-3-7-sonnet-latest",
# api_key=os.getenv("ANTHROPIC_API_KEY")
# )
# Load the tools from the Toolbox server
client = ToolboxClient("http://127.0.0.1:5000")
tools = client.load_toolset()
async with ToolboxClient("http://127.0.0.1:5000") as client:
tools = await client.aload_toolset()
agent = AgentWorkflow.from_tools_or_functions(
tools,
llm=llm,
system_prompt=prompt,
)
ctx = Context(agent)
for query in queries:
response = await agent.run(user_msg=query, ctx=ctx)
print(f"---- {query} ----")
print(str(response))
agent = AgentWorkflow.from_tools_or_functions(
tools,
llm=llm,
system_prompt=prompt,
)
ctx = Context(agent)
for query in queries:
response = await agent.run(user_msg=query, ctx=ctx)
print(f"---- {query} ----")
print(str(response))
asyncio.run(main())
asyncio.run(run_application())
{{< /tab >}}
{{< /tabpane >}}
{{< tabpane text=true persist=header >}}
{{% tab header="Core" lang="en" %}}
To learn more about tool calling with Google GenAI, check out the
[Google GenAI Documentation](https://github.com/googleapis/python-genai?tab=readme-ov-file#manually-declare-and-invoke-a-function-for-function-calling).
{{% /tab %}}
{{% tab header="ADK" lang="en" %}}
To learn more about Agent Development Kit, check out the [ADK documentation.](https://google.github.io/adk-docs/)
{{% /tab %}}
{{% tab header="Langchain" lang="en" %}}
To learn more about Agents in LangChain, check out the [LangGraph Agent documentation.](https://langchain-ai.github.io/langgraph/reference/prebuilt/#langgraph.prebuilt.chat_agent_executor.create_react_agent)
{{% /tab %}}
{{% tab header="LlamaIndex" lang="en" %}}
To learn more about Agents in LlamaIndex, check out the [LlamaIndex AgentWorkflow documentation.](https://docs.llamaindex.ai/en/stable/examples/agent/agent_workflow_basic/)
To learn more about Agents in LlamaIndex, check out the
[LlamaIndex AgentWorkflow documentation.](https://docs.llamaindex.ai/en/stable/examples/agent/agent_workflow_basic/)
{{% /tab %}}
{{< /tabpane >}}
1. Run your agent, and observe the results:
```sh

View File

@@ -7,6 +7,7 @@ description: >
---
## Overview
[Model Context Protocol](https://modelcontextprotocol.io) is an open protocol
that standardizes how applications provide context to LLMs. Check out this page
on how to [connect to Toolbox via MCP](../../how-to/connect_via_mcp.md).
@@ -14,7 +15,7 @@ on how to [connect to Toolbox via MCP](../../how-to/connect_via_mcp.md).
## Step 1: Set up your database
In this section, we will create a database, insert some data that needs to be
access by our agent, and create a database user for Toolbox to connect with.
access by our agent, and create a database user for Toolbox to connect with.
1. Connect to postgres using the `psql` command:
@@ -26,9 +27,9 @@ access by our agent, and create a database user for Toolbox to connect with.
1. Create a new database and a new user:
{{< notice tip >}}
For a real application, it's best to follow the principle of least permission
and only grant the privileges your application needs.
{{< notice tip >}}
For a real application, it's best to follow the principle of least permission
and only grant the privileges your application needs.
{{< /notice >}}
```sql
@@ -40,8 +41,6 @@ access by our agent, and create a database user for Toolbox to connect with.
ALTER DATABASE toolbox_db OWNER TO toolbox_user;
```
1. End the database session:
```bash
@@ -98,15 +97,15 @@ In this section, we will download Toolbox, configure our tools in a
1. Download the latest version of Toolbox as a binary:
{{< notice tip >}}
Select the
[correct binary](https://github.com/googleapis/genai-toolbox/releases)
corresponding to your OS and CPU architecture.
{{< notice tip >}}
Select the
[correct binary](https://github.com/googleapis/genai-toolbox/releases)
corresponding to your OS and CPU architecture.
{{< /notice >}}
<!-- {x-release-please-start-version} -->
```bash
export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64
curl -O https://storage.googleapis.com/genai-toolbox/v0.3.0/$OS/toolbox
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/$OS/toolbox
```
<!-- {x-release-please-end} -->
@@ -120,6 +119,11 @@ In this section, we will download Toolbox, configure our tools in a
such as `user`, `password`, or `database` that you may have customized in the
previous step.
{{< notice tip >}}
In practice, use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
```yaml
sources:
my-pg-source:
@@ -186,13 +190,21 @@ In this section, we will download Toolbox, configure our tools in a
type: string
description: The ID of the hotel to cancel.
statement: UPDATE hotels SET booked = B'0' WHERE id = $1;
toolsets:
my-toolset:
- search-hotels-by-name
- search-hotels-by-location
- book-hotel
- update-hotel
- cancel-hotel
```
For more info on tools, check out the `Resources` section of the docs.
For more info on tools, check out the [Tools](../../resources/tools/_index.md) section.
1. Run the Toolbox server, pointing to the `tools.yaml` file created earlier:
```bash
./toolbox --tools_file "tools.yaml"
./toolbox --tools-file "tools.yaml"
```
## Step 3: Connect to MCP Inspector
@@ -205,7 +217,7 @@ In this section, we will download Toolbox, configure our tools in a
1. Type `y` when it asks to install the inspector package.
1. It should show the folo=lowing when the MCP Inspector is up and runnning:
1. It should show the following when the MCP Inspector is up and running:
```bash
🔍 MCP Inspector is up and running at http://127.0.0.1:5173 🚀
@@ -225,4 +237,4 @@ In this section, we will download Toolbox, configure our tools in a
![inspector_tools](./inspector_tools.png)
1. Test out your tools here!
1. Test out your tools here!

View File

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

View File

@@ -0,0 +1,270 @@
---
title: "AlloyDB using MCP"
type: docs
weight: 2
description: >
Connect your IDE to AlloyDB using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like AlloyDB. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a AlloyDB for Postgres instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
## Before you begin
1. In the Google Cloud console, on the [project selector page](https://console.cloud.google.com/projectselector2/home/dashboard), select or create a Google Cloud project.
1. [Make sure that billing is enabled for your Google Cloud project](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project).
## Set up the database
1. [Enable the AlloyDB, Compute Engine, Cloud Resource Manager, and Service Networking APIs in the Google Cloud project](https://console.cloud.google.com/flows/enableapi?apiid=alloydb.googleapis.com,compute.googleapis.com,cloudresourcemanager.googleapis.com,servicenetworking.googleapis.com).
1. [Create a cluster and its primary instance](https://cloud.google.com/alloydb/docs/quickstart/create-and-connect). These instructions assume that your AlloyDB instance has a [public IP address](https://cloud.google.com/alloydb/docs/connect-public-ip). By default, AlloyDB assigns a private IP address to a new instance. Toolbox will connect securely using the [AlloyDB Language Connectors](https://cloud.google.com/alloydb/docs/language-connectors-overview).
1. Configure the required roles and permissions to complete this task. You will need [Cloud AlloyDB Client](https://cloud.google.com/alloydb/docs/auth-proxy/connect#required-iam-permissions) (`roles/alloydb.client`) and Service Usage Consumer (`roles/serviceusage.serviceUsageConsumer`) roles or equivalent IAM permissions to connect to the instance.
1. Configured [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment) for your environment.
1. Create or reuse [a database user](https://cloud.google.com/alloydb/docs/database-users/manage-roles) and have the username and password ready.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"alloydb": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","alloydb-postgres","--stdio"],
"env": {
"ALLOYDB_POSTGRES_PROJECT": "your-gcp-project-id",
"ALLOYDB_POSTGRES_REGION": "your-cluster-region",
"ALLOYDB_POSTGRES_CLUSTER": "your-cluster-name",
"ALLOYDB_POSTGRES_INSTANCE": "your-instance-name",
"ALLOYDB_POSTGRES_DATABASE": "your-database-name",
"ALLOYDB_POSTGRES_USER": "your-database-user",
"ALLOYDB_POSTGRES_PASSWORD": "your-database-password"
}
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"alloydb": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","alloydb-postgres","--stdio"],
"env": {
"ALLOYDB_POSTGRES_PROJECT": "your-gcp-project-id",
"ALLOYDB_POSTGRES_REGION": "your-cluster-region",
"ALLOYDB_POSTGRES_CLUSTER": "your-cluster-name",
"ALLOYDB_POSTGRES_INSTANCE": "your-instance-name",
"ALLOYDB_POSTGRES_DATABASE": "your-database-name",
"ALLOYDB_POSTGRES_USER": "your-database-user",
"ALLOYDB_POSTGRES_PASSWORD": "your-database-password"
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"alloydb": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","alloydb-postgres","--stdio"],
"env": {
"ALLOYDB_POSTGRES_PROJECT": "your-gcp-project-id",
"ALLOYDB_POSTGRES_REGION": "your-cluster-region",
"ALLOYDB_POSTGRES_CLUSTER": "your-cluster-name",
"ALLOYDB_POSTGRES_INSTANCE": "your-instance-name",
"ALLOYDB_POSTGRES_DATABASE": "your-database-name",
"ALLOYDB_POSTGRES_USER": "your-database-user",
"ALLOYDB_POSTGRES_PASSWORD": "your-database-password"
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"alloydb": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","alloydb-postgres","--stdio"],
"env": {
"ALLOYDB_POSTGRES_PROJECT": "your-gcp-project-id",
"ALLOYDB_POSTGRES_REGION": "your-cluster-region",
"ALLOYDB_POSTGRES_CLUSTER": "your-cluster-name",
"ALLOYDB_POSTGRES_INSTANCE": "your-instance-name",
"ALLOYDB_POSTGRES_DATABASE": "your-database-name",
"ALLOYDB_POSTGRES_USER": "your-database-user",
"ALLOYDB_POSTGRES_PASSWORD": "your-database-password"
}
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"alloydb": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","alloydb-postgres","--stdio"],
"env": {
"ALLOYDB_POSTGRES_PROJECT": "your-gcp-project-id",
"ALLOYDB_POSTGRES_REGION": "your-cluster-region",
"ALLOYDB_POSTGRES_CLUSTER": "your-cluster-name",
"ALLOYDB_POSTGRES_INSTANCE": "your-instance-name",
"ALLOYDB_POSTGRES_DATABASE": "your-database-name",
"ALLOYDB_POSTGRES_USER": "your-database-user",
"ALLOYDB_POSTGRES_PASSWORD": "your-database-password"
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"alloydb": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","alloydb-postgres","--stdio"],
"env": {
"ALLOYDB_POSTGRES_PROJECT": "your-gcp-project-id",
"ALLOYDB_POSTGRES_REGION": "your-cluster-region",
"ALLOYDB_POSTGRES_CLUSTER": "your-cluster-name",
"ALLOYDB_POSTGRES_INSTANCE": "your-instance-name",
"ALLOYDB_POSTGRES_DATABASE": "your-database-name",
"ALLOYDB_POSTGRES_USER": "your-database-user",
"ALLOYDB_POSTGRES_PASSWORD": "your-database-password"
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to AlloyDB using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **list_tables**: lists tables and descriptions
1. **execute_sql**: execute any SQL statement
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -0,0 +1,239 @@
---
title: "BigQuery using MCP"
type: docs
weight: 2
description: >
Connect your IDE to BigQuery using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like BigQuery. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a BigQuery instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
## Before you begin
1. In the Google Cloud console, on the [project selector page](https://console.cloud.google.com/projectselector2/home/dashboard), select or create a Google Cloud project.
1. [Make sure that billing is enabled for your Google Cloud project](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project).
## Set up the database
1. [Enable the BigQuery API in the Google Cloud project](https://console.cloud.google.com/flows/enableapi?apiid=bigquery.googleapis.com&redirect=https://console.cloud.google.com).
1. Configure the required roles and permissions to complete this task. You will need [BigQuery User](https://cloud.google.com/bigquery/docs/access-control) role (`roles/bigquery.user`), BigQuery Data Viewer role(`roles/bigquery.dataViewer`), or equivalent IAM permissions to connect to the instance.
1. Configured [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment) for your environment.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"bigquery": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","bigquery","--stdio"],
"env": {
"BIGQUERY_PROJECT": ""
}
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"bigquery": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","bigquery","--stdio"],
"env": {
"BIGQUERY_PROJECT": ""
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"bigquery": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","bigquery","--stdio"],
"env": {
"BIGQUERY_PROJECT": ""
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"bigquery": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","bigquery","--stdio"],
"env": {
"BIGQUERY_PROJECT": ""
}
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"bigquery": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","bigquery","--stdio"],
"env": {
"BIGQUERY_PROJECT": ""
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"bigquery": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","bigquery","--stdio"],
"env": {
"BIGQUERY_PROJECT": ""
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to BigQuery using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **execute_sql**: execute SQL statement
1. **get_dataset_info**: get dataset metadata
1. **get_table_info**: get table metadata
1. **list_dataset_ids**: list datasets
1. **list_table_ids**: list tables
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -0,0 +1,269 @@
---
title: "Cloud SQL for SQL Server using MCP"
type: docs
weight: 2
description: >
Connect your IDE to Cloud SQL for SQL Server using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like Cloud SQL. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a Cloud SQL for SQL Server instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
## Before you begin
1. In the Google Cloud console, on the [project selector page](https://console.cloud.google.com/projectselector2/home/dashboard), select or create a Google Cloud project.
1. [Make sure that billing is enabled for your Google Cloud project](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project).
## Set up the database
1. [Enable the Cloud SQL Admin API in the Google Cloud project](https://console.cloud.google.com/flows/enableapi?apiid=sqladmin&redirect=https://console.cloud.google.com).
1. [Create or select a Cloud SQL for SQL Server instance](https://cloud.google.com/sql/docs/sqlserver/create-instance). These instructions assume that your Cloud SQL instance has a [public IP address](https://cloud.google.com/sql/docs/sqlserver/configure-ip). By default, Cloud SQL assigns a public IP address to a new instance. Toolbox will connect securely using the [Cloud SQL connectors](https://cloud.google.com/sql/docs/sqlserver/language-connectors).
1. Configure the required roles and permissions to complete this task. You will need [Cloud SQL > Client](https://cloud.google.com/sql/docs/sqlserver/roles-and-permissions#proxy-roles-permissions) role (`roles/cloudsql.client`) or equivalent IAM permissions to connect to the instance.
1. Configured [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment) for your environment.
1. Create or reuse [a database user](https://cloud.google.com/sql/docs/sqlserver/create-manage-users) and have the username and password ready.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-sqlserver": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mssql","--stdio"],
"env": {
"CLOUD_SQL_MSSQL_PROJECT": "",
"CLOUD_SQL_MSSQL_REGION": "",
"CLOUD_SQL_MSSQL_INSTANCE": "",
"CLOUD_SQL_MSSQL_DATABASE": "",
"CLOUD_SQL_MSSQL_IP_ADDRESS": "",
"CLOUD_SQL_MSSQL_USER": "",
"CLOUD_SQL_MSSQL_PASSWORD": ""
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-sqlserver": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mssql","--stdio"],
"env": {
"CLOUD_SQL_MSSQL_PROJECT": "",
"CLOUD_SQL_MSSQL_REGION": "",
"CLOUD_SQL_MSSQL_INSTANCE": "",
"CLOUD_SQL_MSSQL_DATABASE": "",
"CLOUD_SQL_MSSQL_IP_ADDRESS": "",
"CLOUD_SQL_MSSQL_USER": "",
"CLOUD_SQL_MSSQL_PASSWORD": ""
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-sqlserver": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mssql","--stdio"],
"env": {
"CLOUD_SQL_MSSQL_PROJECT": "",
"CLOUD_SQL_MSSQL_REGION": "",
"CLOUD_SQL_MSSQL_INSTANCE": "",
"CLOUD_SQL_MSSQL_DATABASE": "",
"CLOUD_SQL_MSSQL_IP_ADDRESS": "",
"CLOUD_SQL_MSSQL_USER": "",
"CLOUD_SQL_MSSQL_PASSWORD": ""
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-sqlserver": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mssql","--stdio"],
"env": {
"CLOUD_SQL_MSSQL_PROJECT": "",
"CLOUD_SQL_MSSQL_REGION": "",
"CLOUD_SQL_MSSQL_INSTANCE": "",
"CLOUD_SQL_MSSQL_DATABASE": "",
"CLOUD_SQL_MSSQL_IP_ADDRESS": "",
"CLOUD_SQL_MSSQL_USER": "",
"CLOUD_SQL_MSSQL_PASSWORD": ""
}
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-sqlserver": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mssql","--stdio"],
"env": {
"CLOUD_SQL_MSSQL_PROJECT": "",
"CLOUD_SQL_MSSQL_REGION": "",
"CLOUD_SQL_MSSQL_INSTANCE": "",
"CLOUD_SQL_MSSQL_DATABASE": "",
"CLOUD_SQL_MSSQL_IP_ADDRESS": "",
"CLOUD_SQL_MSSQL_USER": "",
"CLOUD_SQL_MSSQL_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-sqlserver": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mssql","--stdio"],
"env": {
"CLOUD_SQL_MSSQL_PROJECT": "",
"CLOUD_SQL_MSSQL_REGION": "",
"CLOUD_SQL_MSSQL_INSTANCE": "",
"CLOUD_SQL_MSSQL_DATABASE": "",
"CLOUD_SQL_MSSQL_IP_ADDRESS": "",
"CLOUD_SQL_MSSQL_USER": "",
"CLOUD_SQL_MSSQL_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to Cloud SQL for Sql Server using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **list_tables**: lists tables and descriptions
1. **execute_sql**: execute any SQL statement
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -0,0 +1,263 @@
---
title: "Cloud SQL for MySQL using MCP"
type: docs
weight: 2
description: >
Connect your IDE to Cloud SQL for MySQL using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like Cloud SQL. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a Cloud SQL for MySQL instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
## Before you begin
1. In the Google Cloud console, on the [project selector page](https://console.cloud.google.com/projectselector2/home/dashboard), select or create a Google Cloud project.
1. [Make sure that billing is enabled for your Google Cloud project](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project).
## Set up the database
1. [Enable the Cloud SQL Admin API in the Google Cloud project](https://console.cloud.google.com/flows/enableapi?apiid=sqladmin&redirect=https://console.cloud.google.com).
1. [Create a Cloud SQL for MySQL instance](https://cloud.google.com/sql/docs/mysql/create-instance). These instructions assume that your Cloud SQL instance has a [public IP address](https://cloud.google.com/sql/docs/mysql/configure-ip). By default, Cloud SQL assigns a public IP address to a new instance. Toolbox will connect securely using the [Cloud SQL connectors](https://cloud.google.com/sql/docs/mysql/language-connectors).
1. Configure the required roles and permissions to complete this task. You will need [Cloud SQL > Client](https://cloud.google.com/sql/docs/mysql/roles-and-permissions#proxy-roles-permissions) role (`roles/cloudsql.client`) or equivalent IAM permissions to connect to the instance.
1. Configured [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment) for your environment.
1. Create or reuse [a database user](https://cloud.google.com/sql/docs/mysql/create-manage-users) and have the username and password ready.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-mysql": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mysql","--stdio"],
"env": {
"CLOUD_SQL_MYSQL_PROJECT": "",
"CLOUD_SQL_MYSQL_REGION": "",
"CLOUD_SQL_MYSQL_INSTANCE": "",
"CLOUD_SQL_MYSQL_DATABASE": "",
"CLOUD_SQL_MYSQL_USER": "",
"CLOUD_SQL_MYSQL_PASSWORD": ""
}
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-mysql": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mysql","--stdio"],
"env": {
"CLOUD_SQL_MYSQL_PROJECT": "",
"CLOUD_SQL_MYSQL_REGION": "",
"CLOUD_SQL_MYSQL_INSTANCE": "",
"CLOUD_SQL_MYSQL_DATABASE": "",
"CLOUD_SQL_MYSQL_USER": "",
"CLOUD_SQL_MYSQL_PASSWORD": ""
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-mysql": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mysql","--stdio"],
"env": {
"CLOUD_SQL_MYSQL_PROJECT": "",
"CLOUD_SQL_MYSQL_REGION": "",
"CLOUD_SQL_MYSQL_INSTANCE": "",
"CLOUD_SQL_MYSQL_DATABASE": "",
"CLOUD_SQL_MYSQL_USER": "",
"CLOUD_SQL_MYSQL_PASSWORD": ""
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-mysql": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mysql","--stdio"],
"env": {
"CLOUD_SQL_MYSQL_PROJECT": "",
"CLOUD_SQL_MYSQL_REGION": "",
"CLOUD_SQL_MYSQL_INSTANCE": "",
"CLOUD_SQL_MYSQL_DATABASE": "",
"CLOUD_SQL_MYSQL_USER": "",
"CLOUD_SQL_MYSQL_PASSWORD": ""
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-mysql": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mysql","--stdio"],
"env": {
"CLOUD_SQL_MYSQL_PROJECT": "",
"CLOUD_SQL_MYSQL_REGION": "",
"CLOUD_SQL_MYSQL_INSTANCE": "",
"CLOUD_SQL_MYSQL_DATABASE": "",
"CLOUD_SQL_MYSQL_USER": "",
"CLOUD_SQL_MYSQL_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-mysql": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-mysql","--stdio"],
"env": {
"CLOUD_SQL_MYSQL_PROJECT": "",
"CLOUD_SQL_MYSQL_REGION": "",
"CLOUD_SQL_MYSQL_INSTANCE": "",
"CLOUD_SQL_MYSQL_DATABASE": "",
"CLOUD_SQL_MYSQL_USER": "",
"CLOUD_SQL_MYSQL_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to Cloud SQL for MySQL using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **list_tables**: lists tables and descriptions
1. **execute_sql**: execute any SQL statement
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -0,0 +1,264 @@
---
title: "Cloud SQL for Postgres using MCP"
type: docs
weight: 2
description: >
Connect your IDE to Cloud SQL for Postgres using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like Cloud SQL. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a Cloud SQL for Postgres instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
## Before you begin
1. In the Google Cloud console, on the [project selector page](https://console.cloud.google.com/projectselector2/home/dashboard), select or create a Google Cloud project.
1. [Make sure that billing is enabled for your Google Cloud project](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project).
## Set up the database
1. [Enable the Cloud SQL Admin API in the Google Cloud project](https://console.cloud.google.com/flows/enableapi?apiid=sqladmin&redirect=https://console.cloud.google.com).
1. [Create or select a Cloud SQL for PostgreSQL instance](https://cloud.google.com/sql/docs/postgres/create-instance). These instructions assume that your Cloud SQL instance has a [public IP address](https://cloud.google.com/sql/docs/postgres/configure-ip). By default, Cloud SQL assigns a public IP address to a new instance. Toolbox will connect securely using the [Cloud SQL connectors](https://cloud.google.com/sql/docs/postgres/language-connectors).
1. Configure the required roles and permissions to complete this task. You will need [Cloud SQL > Client](https://cloud.google.com/sql/docs/postgres/roles-and-permissions#proxy-roles-permissions) role (`roles/cloudsql.client`) or equivalent IAM permissions to connect to the instance.
1. Configured [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment) for your environment.
1. Create or reuse [a database user](https://cloud.google.com/sql/docs/postgres/create-manage-users) and have the username and password ready.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-postgres","--stdio"],
"env": {
"CLOUD_SQL_POSTGRES_PROJECT": "",
"CLOUD_SQL_POSTGRES_REGION": "",
"CLOUD_SQL_POSTGRES_INSTANCE": "",
"CLOUD_SQL_POSTGRES_DATABASE": "",
"CLOUD_SQL_POSTGRES_USER": "",
"CLOUD_SQL_POSTGRES_PASSWORD": ""
}
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-postgres","--stdio"],
"env": {
"CLOUD_SQL_POSTGRES_PROJECT": "",
"CLOUD_SQL_POSTGRES_REGION": "",
"CLOUD_SQL_POSTGRES_INSTANCE": "",
"CLOUD_SQL_POSTGRES_DATABASE": "",
"CLOUD_SQL_POSTGRES_USER": "",
"CLOUD_SQL_POSTGRES_PASSWORD": ""
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-postgres","--stdio"],
"env": {
"CLOUD_SQL_POSTGRES_PROJECT": "",
"CLOUD_SQL_POSTGRES_REGION": "",
"CLOUD_SQL_POSTGRES_INSTANCE": "",
"CLOUD_SQL_POSTGRES_DATABASE": "",
"CLOUD_SQL_POSTGRES_USER": "",
"CLOUD_SQL_POSTGRES_PASSWORD": ""
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-postgres","--stdio"],
"env": {
"CLOUD_SQL_POSTGRES_PROJECT": "",
"CLOUD_SQL_POSTGRES_REGION": "",
"CLOUD_SQL_POSTGRES_INSTANCE": "",
"CLOUD_SQL_POSTGRES_DATABASE": "",
"CLOUD_SQL_POSTGRES_USER": "",
"CLOUD_SQL_POSTGRES_PASSWORD": ""
}
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-postgres","--stdio"],
"env": {
"CLOUD_SQL_POSTGRES_PROJECT": "",
"CLOUD_SQL_POSTGRES_REGION": "",
"CLOUD_SQL_POSTGRES_INSTANCE": "",
"CLOUD_SQL_POSTGRES_DATABASE": "",
"CLOUD_SQL_POSTGRES_USER": "",
"CLOUD_SQL_POSTGRES_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"cloud-sql-postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","cloud-sql-postgres","--stdio"],
"env": {
"CLOUD_SQL_POSTGRES_PROJECT": "",
"CLOUD_SQL_POSTGRES_REGION": "",
"CLOUD_SQL_POSTGRES_INSTANCE": "",
"CLOUD_SQL_POSTGRES_DATABASE": "",
"CLOUD_SQL_POSTGRES_USER": "",
"CLOUD_SQL_POSTGRES_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to Cloud SQL for PostgreSQL using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **list_tables**: lists tables and descriptions
1. **execute_sql**: execute any SQL statement
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -0,0 +1,252 @@
---
title: "PostgreSQL using MCP"
type: docs
weight: 2
description: >
Connect your IDE to PostgreSQL using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like Postgres. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a Postgres instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
{{< notice tip >}}
This guide can be used with [AlloyDB Omni](https://cloud.google.com/alloydb/omni/current/docs/overview).
{{< /notice >}}
## Set up the database
1. Create or select a PostgreSQL instance.
* [Install PostgreSQL locally](https://www.postgresql.org/download/)
* [Install AlloyDB Omni](https://cloud.google.com/alloydb/omni/current/docs/quickstart)
1. Create or reuse [a database user](https://cloud.google.com/alloydb/omni/current/docs/database-users/manage-users) and have the username and password ready.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","postgres","--stdio"],
"env": {
"POSTGRES_HOST": "",
"POSTGRES_PORT": "",
"POSTGRES_DATABASE": "",
"POSTGRES_USER": "",
"POSTGRES_PASSWORD": ""
}
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","postgres","--stdio"],
"env": {
"POSTGRES_HOST": "",
"POSTGRES_PORT": "",
"POSTGRES_DATABASE": "",
"POSTGRES_USER": "",
"POSTGRES_PASSWORD": ""
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","postgres","--stdio"],
"env": {
"POSTGRES_HOST": "",
"POSTGRES_PORT": "",
"POSTGRES_DATABASE": "",
"POSTGRES_USER": "",
"POSTGRES_PASSWORD": ""
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","postgres","--stdio"],
"env": {
"POSTGRES_HOST": "",
"POSTGRES_PORT": "",
"POSTGRES_DATABASE": "",
"POSTGRES_USER": "",
"POSTGRES_PASSWORD": ""
}
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","postgres","--stdio"],
"env": {
"POSTGRES_HOST": "",
"POSTGRES_PORT": "",
"POSTGRES_DATABASE": "",
"POSTGRES_USER": "",
"POSTGRES_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
```json
{
"mcpServers": {
"postgres": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","postgres","--stdio"],
"env": {
"POSTGRES_HOST": "",
"POSTGRES_PORT": "",
"POSTGRES_DATABASE": "",
"POSTGRES_USER": "",
"POSTGRES_PASSWORD": ""
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to Postgres using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **list_tables**: lists tables and descriptions
1. **execute_sql**: execute any SQL statement
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -0,0 +1,358 @@
---
title: "Spanner using MCP"
type: docs
weight: 2
description: >
Connect your IDE to Spanner using Toolbox.
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open protocol for connecting Large Language Models (LLMs) to data sources like Spanner. This guide covers how to use [MCP Toolbox for Databases][toolbox] to expose your developer assistant tools to a Spanner instance:
* [Cursor][cursor]
* [Windsurf][windsurf] (Codium)
* [Visual Studio Code ][vscode] (Copilot)
* [Cline][cline] (VS Code extension)
* [Claude desktop][claudedesktop]
* [Claude code][claudecode]
[toolbox]: https://github.com/googleapis/genai-toolbox
[cursor]: #configure-your-mcp-client
[windsurf]: #configure-your-mcp-client
[vscode]: #configure-your-mcp-client
[cline]: #configure-your-mcp-client
[claudedesktop]: #configure-your-mcp-client
[claudecode]: #configure-your-mcp-client
## Before you begin
1. In the Google Cloud console, on the [project selector page](https://console.cloud.google.com/projectselector2/home/dashboard), select or create a Google Cloud project.
1. [Make sure that billing is enabled for your Google Cloud project](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled#confirm_billing_is_enabled_on_a_project).
## Set up the database
1. [Enable the Spanner API in the Google Cloud project](https://console.cloud.google.com/flows/enableapi?apiid=spanner.googleapis.com&redirect=https://console.cloud.google.com).
1. [Create or select a Spanner instance and database](https://cloud.google.com/spanner/docs/create-query-database-console).
1. Configure the required roles and permissions to complete this task. You will need [Cloud Spanner Database User](https://cloud.google.com/spanner/docs/iam#roles) role (`roles/spanner.databaseUser`) or equivalent IAM permissions to connect to the instance.
1. Configured [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment) for your environment.
## Install MCP Toolbox
1. Download the latest version of Toolbox as a binary. Select the [correct binary](https://github.com/googleapis/genai-toolbox/releases) corresponding to your OS and CPU architecture. You are required to use Toolbox version V0.6.0+:
<!-- {x-release-please-start-version} -->
{{< tabpane persist=header >}}
{{< tab header="linux/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/linux/amd64/toolbox
{{< /tab >}}
{{< tab header="darwin/arm64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/arm64/toolbox
{{< /tab >}}
{{< tab header="darwin/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/darwin/amd64/toolbox
{{< /tab >}}
{{< tab header="windows/amd64" lang="bash" >}}
curl -O https://storage.googleapis.com/genai-toolbox/v0.7.0/windows/amd64/toolbox
{{< /tab >}}
{{< /tabpane >}}
<!-- {x-release-please-end} -->
1. Make the binary executable:
```bash
chmod +x toolbox
```
1. Verify the installation:
```bash
./toolbox --version
```
## Configure your MCP Client
{{< tabpane text=true >}}
{{% tab header="Claude code" lang="en" %}}
1. Install [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview).
1. Create a `.mcp.json` file in your project root if it doesn't exist.
1. Add the following configuration, replace the environment variables with your values, and save:
Spanner with `googlesql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
Spanner with `postgresql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner-postgres","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": "" }
}
}
}
```
1. Restart Claude code to apply the new configuration.
{{% /tab %}}
{{% tab header="Claude desktop" lang="en" %}}
1. Open [Claude desktop](https://claude.ai/download) and navigate to Settings.
1. Under the Developer tab, tap Edit Config to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
Spanner with `googlesql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
Spanner with `postgresql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner-postgres","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
1. Restart Claude desktop.
1. From the new chat screen, you should see a hammer (MCP) icon appear with the new MCP server available.
{{% /tab %}}
{{% tab header="Cline" lang="en" %}}
1. Open the [Cline](https://github.com/cline/cline) extension in VS Code and tap the **MCP Servers** icon.
1. Tap Configure MCP Servers to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
Spanner with `googlesql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
Spanner with `postgresql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner-postgres","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
1. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Cursor" lang="en" %}}
1. Create a `.cursor` directory in your project root if it doesn't exist.
1. Create a `.cursor/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
Spanner with `googlesql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
Spanner with `postgresql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner-postgres","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
1. [Cursor](https://www.cursor.com/) and navigate to **Settings > Cursor Settings > MCP**. You should see a green active status after the server is successfully connected.
{{% /tab %}}
{{% tab header="Visual Studio Code (Copilot)" lang="en" %}}
1. Open [VS Code](https://code.visualstudio.com/docs/copilot/overview) and create a `.vscode` directory in your project root if it doesn't exist.
1. Create a `.vscode/mcp.json` file if it doesn't exist and open it.
1. Add the following configuration, replace the environment variables with your values, and save:
Spanner with `googlesql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
Spanner with `postgresql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner-postgres","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
{{% /tab %}}
{{% tab header="Windsurf" lang="en" %}}
1. Open [Windsurf](https://docs.codeium.com/windsurf) and navigate to the Cascade assistant.
1. Tap on the hammer (MCP) icon, then Configure to open the configuration file.
1. Add the following configuration, replace the environment variables with your values, and save:
Spanner with `googlesql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
Spanner with `postgresql` dialect
```json
{
"mcpServers": {
"spanner": {
"command": "./PATH/TO/toolbox",
"args": ["--prebuilt","spanner-postgres","--stdio"],
"env": {
"SPANNER_PROJECT": "",
"SPANNER_INSTANCE": "",
"SPANNER_DATABASE": ""
}
}
}
}
```
{{% /tab %}}
{{< /tabpane >}}
## Use Tools
Your AI tool is now connected to Spanner using MCP. Try asking your AI assistant to list tables, create a table, or define and execute other SQL statements.
The following tools are available to the LLM:
1. **list_tables**: lists tables and descriptions
1. **execute_sql**: execute DML SQL statement
1. **execute_sql_dql**: execute DQL SQL statement
{{< notice note >}}
Prebuilt tools are pre-1.0, so expect some tool changes between versions. LLMs will adapt to the tools available, so this shouldn't affect most users.
{{< /notice >}}

View File

@@ -7,7 +7,7 @@ description: >
---
## Toolbox SDKs vs Model Context Protocol (MCP)
Toolbox now supports connections via both the native Toolbox SDKs and via [Model Context Protocol (MCP)](https://modelcontextprotocol.io/). However, Toolbox as several features which are not supported in the MCP specification (such as Authenticated Parameters and Authorized invocation).
Toolbox now supports connections via both the native Toolbox SDKs and via [Model Context Protocol (MCP)](https://modelcontextprotocol.io/). However, Toolbox has several features which are not supported in the MCP specification (such as Authenticated Parameters and Authorized invocation).
We recommend using the native SDKs over MCP clients to leverage these features. The native SDKs can be combined with MCP clients in many cases.
@@ -20,7 +20,6 @@ Toolbox has several features that are not yet supported in the MCP specification
* **AuthZ/AuthN:** There are no auth implementation in the `2024-11-05` specification. This includes:
* [Authenticated Parameters](../resources/tools/_index.md#authenticated-parameters)
* [Authorized Invocations](../resources/tools/_index.md#authorized-invocations)
* **Toolsets**: MCP does not have the concept of toolset. Hence, all tools are automatically loaded when using Toolbox with MCP.
* **Notifications:** Currently, editing Toolbox Tools requires a server restart. Clients should reload tools on disconnect to get the latest version.
@@ -37,6 +36,20 @@ MCP is only compatible with Toolbox version 0.3.0 and above.
1. [Set up](../getting-started/configure.md) your `tools.yaml` file.
### Connecting via Standard Input/Output (stdio)
Toolbox supports the
[stdio](https://modelcontextprotocol.io/docs/concepts/transports#standard-input%2Foutput-stdio)
transport protocol. Users that wish to use stdio will have to include the
`--stdio` flag when running Toolbox.
```bash
./toolbox --stdio
```
When running with stdio, Toolbox will listen via stdio instead of acting as a
remote HTTP server. Logs will be set to the `warn` level by default. `debug` and `info` logs are not
supported with stdio.
### Connecting via HTTP
Toolbox supports the HTTP transport protocol with and without SSE.
@@ -52,14 +65,37 @@ Add the following configuration to your MCP client configuration:
}
}
```
If you would like to connect to a specific toolset, replace `url` with `"http://127.0.0.1:5000/mcp/{toolset_name}/sse"`.
{{% /tab %}} {{% tab header="HTTP POST" lang="en" %}}
Connect to Toolbox HTTP POST via `http://127.0.0.1:5000/mcp`.
If you would like to connect to a specific toolset, connect via `http://127.0.0.1:5000/mcp/{toolset_name}`.
{{% /tab %}} {{< /tabpane >}}
### Using the MCP Inspector with Toolbox
Use MCP [Inspector](https://github.com/modelcontextprotocol/inspector) for testing and debugging Toolbox server.
Use MCP [Inspector](https://github.com/modelcontextprotocol/inspector) for
testing and debugging Toolbox server.
{{< tabpane text=true >}}
{{% tab header="STDIO" lang="en" %}}
1. Run Inspector with Toolbox as a subprocess:
```bash
npx @modelcontextprotocol/inspector ./toolbox --stdio
```
1. For `Transport Type` dropdown menu, select `STDIO`.
1. In `Command`, make sure that it is set to :`./toolbox` (or the correct path to where the Toolbox binary is installed).
1. In `Arguments`, make sure that it's filled with `--stdio`.
1. Click the `Connect` button. It might take awhile to spin up Toolbox. Voila!
You should be able to inspect your toolbox tools!
{{% /tab %}}
{{% tab header="HTTP with SSE" lang="en" %}}
1. [Run Toolbox](../getting-started/introduction/_index.md#running-the-server).
1. In a separate terminal, run Inspector directly through `npx`:
@@ -70,7 +106,19 @@ Use MCP [Inspector](https://github.com/modelcontextprotocol/inspector) for testi
1. For `Transport Type` dropdown menu, select `SSE`.
1. For `URL`, type in `http://127.0.0.1:5000/mcp/sse`.
1. For `URL`, type in `http://127.0.0.1:5000/mcp/sse` to use all tool or
`http//127.0.0.1:5000/mcp/{toolset_name}/sse` to use a specific toolset.
1. Click the `Connect` button. Voila! You should be able to inspect your toolbox
tools!
tools!
{{% /tab %}} {{< /tabpane >}}
### Tested Clients
| Client | SSE Works | MCP Config Docs |
|--------|--------|--------|
| Claude Desktop | ✅ | https://modelcontextprotocol.io/quickstart/user#1-download-claude-for-desktop |
| MCP Inspector | ✅ | https://github.com/modelcontextprotocol/inspector |
| Cursor | ✅ | https://docs.cursor.com/context/model-context-protocol |
| Windsurf | ✅ | https://docs.windsurf.com/windsurf/mcp |
| VS Code (Insiders) | ✅ | https://code.visualstudio.com/docs/copilot/chat/mcp-servers |

View File

@@ -1,9 +1,9 @@
---
title: "Deploy using Docker Compose"
type: docs
weight: 3
weight: 4
description: >
How to deploy Toolbox using Docker Compose.
How to deploy Toolbox using Docker Compose.
---
<!-- Contributor: Sujith R Pillai <sujithrpillai@gmail.com> -->
@@ -35,7 +35,7 @@ services:
- "5000:5000"
volumes:
- ./config:/config
command: [ "toolbox", "--tools_file", "/config/tools.yaml", "--address", "0.0.0.0"]
command: [ "toolbox", "--tools-file", "/config/tools.yaml", "--address", "0.0.0.0"]
depends_on:
db:
condition: service_healthy
@@ -75,18 +75,18 @@ networks:
```
{{< notice tip >}}
{{< notice tip >}}
You can use this setup quickly set up Toolbox + Postgres to follow along in our
[Quickstart](../getting-started/local_quickstart.md)
{{< /notice >}}
{{< /notice >}}
## Connecting with Toolbox Client SDK
Next, we will use Toolbox with the Client SDKs:
Next, we will use Toolbox with the Client SDKs:
1. The url for the Toolbox server running using docker-compose will be:
@@ -101,13 +101,13 @@ Next, we will use Toolbox with the Client SDKs:
from toolbox_langchain import ToolboxClient
# Replace with the cloud run service URL generated above
toolbox = ToolboxClient("http://$YOUR_URL")
async with ToolboxClient("http://$YOUR_URL") as toolbox:
{{< /tab >}}
{{< tab header="Llamaindex" lang="Python" >}}
from toolbox_llamaindex import ToolboxClient
# Replace with the cloud run service URL generated above
toolbox = ToolboxClient("http://$YOUR_URL")
async with ToolboxClient("http://$YOUR_URL") as toolbox:
{{< /tab >}}
{{< /tabpane >}}

View File

@@ -1,7 +1,7 @@
---
title: "Deploy to Kubernetes"
type: docs
weight: 2
weight: 4
description: >
How to set up and configure Toolbox to deploy on Kubernetes with Google Kubernetes Engine (GKE).
---
@@ -40,7 +40,7 @@ description: >
```bash
kubectl version --client
```
1. If needed, install `kubectl` component using the Google Cloud CLI:
@@ -76,7 +76,7 @@ description: >
- [CloudSQL IAM Identity](../resources/sources/cloud-sql-pg.md#iam-permissions)
- [Spanner IAM Identity](../resources/sources/spanner.md#iam-permissions)
## Deploy to Kubernetes
## Deploy to Kubernetes
1. Set environment variables:
@@ -94,7 +94,7 @@ description: >
```bash
gcloud container clusters create-auto $CLUSTER_NAME \
--location=us-central1
--location=us-central1
```
1. Get authentication credentials to interact with the cluster. This also

View File

@@ -1,7 +1,7 @@
---
title: "Deploy to Cloud Run"
type: docs
weight: 1
weight: 3
description: >
How to set up and configure Toolbox to run on Cloud Run.
---
@@ -33,7 +33,7 @@ description: >
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
secretmanager.googleapis.com
```
@@ -48,18 +48,10 @@ description: >
- Cloud Run Developer (roles/run.developer)
- Service Account User role (roles/iam.serviceAccountUser)
{{< notice note >}}
If you are under a domain restriction organization policy
[restricting](https://cloud.google.com/run/docs/authenticating/public#domain-restricted-sharing)
unauthenticated invocations for your project, you will need to access your
deployed service as described under [Testing private
services](https://cloud.google.com/run/docs/triggering/https-request#testing-private).
{{< /notice >}}
{{< notice note >}}
{{< notice note >}}
If you are using sources that require VPC-access (such as
AlloyDB or Cloud SQL over private IP), make sure your Cloud Run service and the
database are in the same VPC network.
database are in the same VPC network.
{{< /notice >}}
@@ -119,7 +111,7 @@ section.
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools_file=/app/tools.yaml","--address=0.0.0.0","--port=8080"
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080"
# --allow-unauthenticated # https://cloud.google.com/run/docs/authenticating/public#gcloud
```
@@ -131,34 +123,28 @@ section.
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools_file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
# TODO(dev): update the following to match your VPC if necessary
--network default \
--subnet default
# --allow-unauthenticated # https://cloud.google.com/run/docs/authenticating/public#gcloud
```
## Connecting to Cloud Run
Next, we will use `gcloud` to authenticate requests to our Cloud Run instance:
1. Run the `run services proxy` to proxy connections to Cloud Run:
```bash
gcloud run services proxy toolbox --port=8080 --region=us-central1
```
If you are prompted to install the proxy, reply *Y* to install.
1. Finally, use `curl` to verify the endpoint works:
```bash
curl http://127.0.0.1:8080
```
## Connecting with Toolbox Client SDK
Next, we will use Toolbox with client SDK:
You can connect to Toolbox Cloud Run instances directly through the SDK
1. [Set up `Cloud Run Invoker` role access](https://cloud.google.com/run/docs/securing/managing-access#service-add-principals) to your Cloud Run service.
1. Set up [Application Default
Credentials](https://cloud.google.com/docs/authentication/set-up-adc-local-dev-environment)
for the principle you set up the `Cloud Run Invoker` role access to.
{{< notice tip >}}
If you're working in some other environment than local, set up [environment
specific Default
Credentials](https://cloud.google.com/docs/authentication/provide-credentials-adc).
{{< /notice >}}
1. Run the following to retrieve a non-deterministic URL for the cloud run service:
@@ -168,18 +154,16 @@ Next, we will use Toolbox with client SDK:
1. Import and initialize the toolbox client with the URL retrieved above:
{{< tabpane persist=header >}}
{{< tab header="LangChain" lang="Python" >}}
from toolbox_langchain import ToolboxClient
```python
from toolbox_core import ToolboxClient, auth_methods
# Replace with the cloud run service URL generated above
toolbox = ToolboxClient("http://$YOUR_URL")
{{< /tab >}}
{{< tab header="Llamaindex" lang="Python" >}}
from toolbox_llamaindex import ToolboxClient
auth_token_provider = auth_methods.aget_google_id_token # can also use sync method
# Replace with the cloud run service URL generated above
toolbox = ToolboxClient("http://$YOUR_URL")
{{< /tab >}}
{{< /tabpane >}}
# Replace with the Cloud Run service URL generated in the previous step.
async with ToolboxClient(
URL,
client_headers={"Authorization": auth_token_provider},
) as toolbox:
```
Now, you can use this client to connect to the deployed Cloud Run instance!

View File

@@ -1,13 +1,13 @@
---
title: "Export Telemetry"
type: docs
weight: 4
weight: 5
description: >
How to set up and configure Toolbox to use the Otel Collector.
How to set up and configure Toolbox to use the Otel Collector.
---
## About
## About
The [OpenTelemetry Collector][about-collector] offers a vendor-agnostic
implementation of how to receive, process and export telemetry data. It removes
@@ -56,7 +56,7 @@ service:
exporters: ["googlecloud"]
```
## Running the Connector
## Running the Collector
There are a couple of steps to run and use a Collector.

View File

@@ -2,5 +2,6 @@
title: "Resources"
type: docs
weight: 4
description: List of reference documentation for resources in Toolbox.
description: >
List of reference documentation for resources in Toolbox.
---

View File

@@ -7,11 +7,11 @@ description: >
---
AuthServices represent services that handle authentication and authorization. It
can primarily be used by [Tools](../tools) in two different ways:
can primarily be used by [Tools](../tools) in two different ways:
- [**Authorized Invocation**][auth-invoke] is when a tool
to be validate by the auth service before the call can be invoked. Toolbox
will rejected an calls that fail to validate or have an invalid token.
is validated by the auth service before the call can be invoked. Toolbox
will reject any calls that fail to validate or have an invalid token.
- [**Authenticated Parameters**][auth-params] replace the value of a parameter
with a field from an [OIDC][openid-claims] claim. Toolbox will automatically
resolve the ID token provided by the client and replace the parameter in the
@@ -35,19 +35,24 @@ If you are accessing Toolbox with multiple applications, each
authServices:
my_auth_app_1:
kind: google
clientId: YOUR_CLIENT_ID_1
clientId: ${YOUR_CLIENT_ID_1}
my_auth_app_2:
kind: google
clientId: YOUR_CLIENT_ID_2
clientId: ${YOUR_CLIENT_ID_2}
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
After you've configured an `authService` you'll, need to reference it in the
configuration for each tool that should use it:
- **Authorized Invocations** for authorizing a tool call, [use the
`requiredAuth` field in a tool config][auth-invoke]
- **Authenticated Parameters** for using the value from a ODIC claim, [use the
`authServices` field in a parameter config][auth-params]
- **Authorized Invocations** for authorizing a tool call, [use the
`authRequired` field in a tool config][auth-invoke]
- **Authenticated Parameters** for using the value from a OIDC claim, [use the
`authServices` field in a parameter config][auth-params]
## Specifying ID Tokens from Clients
@@ -55,59 +60,123 @@ After [configuring](#example) your `authServices` section, use a Toolbox SDK to
add your ID tokens to the header of a Tool invocation request. When specifying a
token you will provide a function (that returns an id). This function is called
when the tool is invoked. This allows you to cache and refresh the ID token as
needed.
needed.
The primary method for providing these getters is via the `auth_token_getters` parameter when loading tools, or the `add_auth_token_getter`() / `add_auth_token_getters()` methods on a loaded tool object.
### Specifying tokens during load
{{< tabpane persist=header >}}
{{< tab header="LangChain" lang="Python" >}}
{{< tab header="Core" lang="Python" >}}
import asyncio
from toolbox_core import ToolboxClient
async def get_auth_token():
# ... Logic to retrieve ID token (e.g., from local storage, OAuth flow)
# This example just returns a placeholder. Replace with your actual token retrieval.
return "YOUR_ID_TOKEN" # Placeholder
# for a single tool use:
authorized_tool = toolbox.load_tool("my-tool-name", auth_tokens={"my_auth": get_auth_token})
async def main():
async with ToolboxClient("http://127.0.0.1:5000") as toolbox:
auth_tool = await toolbox.load_tool(
"get_sensitive_data",
auth_token_getters={"my_auth_app_1": get_auth_token}
)
result = await auth_tool(param="value")
print(result)
# for a toolset use:
authorized_tools = toolbox.load_toolset("my-toolset-name", auth_tokens={"my_auth": get_auth_token})
if __name__ == "__main__":
asyncio.run(main())
{{< /tab >}}
{{< tab header="LangChain" lang="Python" >}}
import asyncio
from toolbox_langchain import ToolboxClient
async def get_auth_token():
# ... Logic to retrieve ID token (e.g., from local storage, OAuth flow)
# This example just returns a placeholder. Replace with your actual token retrieval.
return "YOUR_ID_TOKEN" # Placeholder
async def main():
toolbox = ToolboxClient("http://127.0.0.1:5000")
auth_tool = await toolbox.aload_tool(
"get_sensitive_data",
auth_token_getters={"my_auth_app_1": get_auth_token}
)
result = await auth_tool.ainvoke({"param": "value"})
print(result)
if __name__ == "__main__":
asyncio.run(main())
{{< /tab >}}
{{< tab header="Llamaindex" lang="Python" >}}
import asyncio
from toolbox_llamaindex import ToolboxClient
async def get_auth_token():
# ... Logic to retrieve ID token (e.g., from local storage, OAuth flow)
# This example just returns a placeholder. Replace with your actual token retrieval.
return "YOUR_ID_TOKEN" # Placeholder
# for a single tool use:
authorized_tool = toolbox.load_tool("my-tool-name", auth_tokens={"my_auth": get_auth_token})
async def main():
toolbox = ToolboxClient("http://127.0.0.1:5000")
# for a toolset use:
authorized_tools = toolbox.load_toolset("my-toolset-name", auth_tokens={"my_auth": get_auth_token})
{{< /tab >}}
auth_tool = await toolbox.aload_tool(
"get_sensitive_data",
auth_token_getters={"my_auth_app_1": get_auth_token}
)
# result = await auth_tool.acall(param="value")
# print(result.content)
if __name__ == "__main__":
asyncio.run(main()){{< /tab >}}
{{< /tabpane >}}
### Specifying tokens for existing tools
{{< tabpane persist=header >}}
{{< tab header="LangChain" lang="Python" >}}
tools = toolbox.load_toolset()
{{< tab header="Core" lang="Python" >}}
tools = await toolbox.load_toolset()
# for a single token
auth_tools = [tool.add_auth_token("my_auth", get_auth_token) for tool in tools]
authorized_tool = tools[0].add_auth_token_getter("my_auth", get_auth_token)
# OR, if multiple tokens are needed
authorized_tool = tools[0].add_auth_tokens({
authorized_tool = tools[0].add_auth_token_getters({
"my_auth1": get_auth1_token,
"my_auth2": get_auth2_token,
})
})
{{< /tab >}}
{{< tab header="LangChain" lang="Python" >}}
tools = toolbox.load_toolset()
# for a single token
authorized_tool = tools[0].add_auth_token_getter("my_auth", get_auth_token)
# OR, if multiple tokens are needed
authorized_tool = tools[0].add_auth_token_getters({
"my_auth1": get_auth1_token,
"my_auth2": get_auth2_token,
})
{{< /tab >}}
{{< tab header="Llamaindex" lang="Python" >}}
tools = toolbox.load_toolset()
# for a single token
auth_tools = [tool.add_auth_token("my_auth", get_auth_token) for tool in tools]
authorized_tool = tools[0].add_auth_token_getter("my_auth", get_auth_token)
# OR, if multiple tokens are needed
authorized_tool = tools[0].add_auth_tokens({
authorized_tool = tools[0].add_auth_token_getters({
"my_auth1": get_auth1_token,
"my_auth2": get_auth2_token,
})
})
{{< /tab >}}
{{< /tabpane >}}

View File

@@ -43,9 +43,14 @@ id-token][provided-claims] can be used for the parameter.
authServices:
my-google-auth:
kind: google
clientId: YOUR_GOOGLE_CLIENT_ID
clientId: ${YOUR_GOOGLE_CLIENT_ID}
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -11,6 +11,11 @@ Sources as a map in the `sources` section of your `tools.yaml` file. Typically,
a source configuration will contain any information needed to connect with and
interact with the database.
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
```yaml
sources:
my-cloud-sql-source:
@@ -19,11 +24,11 @@ sources:
region: us-central1
instance: my-instance-name
database: my_db
user: my-user
password: my-password
user: ${USER_NAME}
password: ${PASSWORD}
```
In implementation, each source is a different connection pool or client that used
to connect to the database and execute the tool.
to connect to the database and execute the tool.
## Available Sources
## Available Sources

View File

@@ -58,11 +58,34 @@ mTLS.
[public-ip]: https://cloud.google.com/alloydb/docs/connect-public-ip
[conn-overview]: https://cloud.google.com/alloydb/docs/connection-overview
### Database User
### Authentication
Currently, this source only uses standard authentication. You will need to [create
a PostgreSQL user][alloydb-users] to login to the database with.
This source supports both password-based authentication and IAM
authentication (using your [Application Default Credentials][adc]).
#### Standard Authentication
To connect using user/password, [create
a PostgreSQL user][alloydb-users] and input your credentials in the `user` and
`password` fields.
```yaml
user: ${USER_NAME}
password: ${PASSWORD}
```
#### IAM Authentication
To connect using IAM authentication:
1. Prepare your database instance and user following this [guide][iam-guide].
2. You could choose one of the two ways to log in:
- Specify your IAM email as the `user`.
- Leave your `user` field blank. Toolbox
will fetch the [ADC][adc] automatically and log in using the email associated with it.
3. Leave the `password` field blank.
[iam-guide]: https://cloud.google.com/alloydb/docs/database-users/manage-iam-auth
[alloydb-users]: https://cloud.google.com/alloydb/docs/database-users/about
## Example
@@ -70,27 +93,32 @@ a PostgreSQL user][alloydb-users] to login to the database with.
```yaml
sources:
my-alloydb-pg-source:
kind: "alloydb-postgres"
project: "my-project-id"
region: "us-central1"
cluster: "my-cluster"
instance: "my-instance"
database: "my_db"
user: "my-user"
password: "my-password"
kind: alloydb-postgres
project: my-project-id
region: us-central1
cluster: my-cluster
instance: my-instance
database: my_db
user: ${USER_NAME}
password: ${PASSWORD}
# ipType: "public"
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|-------------------------------------------------------------------------------------------|
| 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"). |
| 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"). |
| instance | string | true | Name of the AlloyDB instance within the cluster (e.g. "my-instance"). |
| database | string | true | Name of the Postgres database to connect to (e.g. "my_db"). |
| user | string | true | Name of the Postgres user to connect as (e.g. "my-pg-user"). |
| password | string | true | Password of the Postgres user (e.g. "my-password"). |
| ipType | string | false | IP Type of the AlloyDB instance; must be one of `public` or `private`. Default: `public`. |
| **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------|
| 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"). |
| 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"). |
| instance | string | true | Name of the AlloyDB instance within the cluster (e.g. "my-instance"). |
| database | string | true | Name of the Postgres database to connect to (e.g. "my_db"). |
| user | string | false | Name of the Postgres user to connect as (e.g. "my-pg-user"). Defaults to IAM auth using [ADC][adc] email if unspecified. |
| password | string | false | Password of the Postgres user (e.g. "my-password"). Defaults to attempting IAM authentication if unspecified. |
| ipType | string | false | IP Type of the AlloyDB instance; must be one of `public` or `private`. Default: `public`. |

View File

@@ -0,0 +1,73 @@
---
title: "BigQuery"
type: docs
weight: 1
description: >
BigQuery is Google Cloud's fully managed, petabyte-scale, and cost-effective
analytics data warehouse that lets you run analytics over vast amounts of
data in near real time. With BigQuery, there's no infrastructure to set
up or manage, letting you focus on finding meaningful insights using
GoogleSQL and taking advantage of flexible pricing models across on-demand
and flat-rate options.
---
# BigQuery Source
[BigQuery][bigquery-docs] is Google Cloud's fully managed, petabyte-scale,
and cost-effective analytics data warehouse that lets you run analytics
over vast amounts of data in near real time. With BigQuery, there's no
infrastructure to set up or manage, letting you focus on finding meaningful
insights using GoogleSQL and taking advantage of flexible pricing models
across on-demand and flat-rate options.
If you are new to BigQuery, you can try to
[load and query data with the bq tool][bigquery-quickstart-cli].
BigQuery uses [GoogleSQL][bigquery-googlesql] for querying data. GoogleSQL
is an ANSI-compliant structured query language (SQL) that is also implemented
for other Google Cloud services. SQL queries are handled by cluster nodes
in the same way as NoSQL data requests. Therefore, the same best practices
apply when creating SQL queries to run against your BigQuery data, such as
avoiding full table scans or complex filters.
[bigquery-docs]: https://cloud.google.com/bigquery/docs
[bigquery-quickstart-cli]: https://cloud.google.com/bigquery/docs/quickstarts/quickstart-command-line
[bigquery-googlesql]: https://cloud.google.com/bigquery/docs/reference/standard-sql/
## Requirements
### IAM Permissions
BigQuery uses [Identity and Access Management (IAM)][iam-overview] to control
user and group access to BigQuery resources like projects, datasets, and tables.
Toolbox will use your [Application Default Credentials (ADC)][adc] to authorize
and authenticate when interacting with [BigQuery][bigquery-docs].
In addition to [setting the ADC for your server][set-adc], you need to ensure
the IAM identity has been given the correct IAM permissions for the queries
you intend to run. Common roles include `roles/bigquery.user` (which includes
permissions to run jobs and read data) or `roles/bigquery.dataViewer`. See
[Introduction to BigQuery IAM][grant-permissions] for more information on
applying IAM permissions and roles to an identity.
[iam-overview]: https://cloud.google.com/bigquery/docs/access-control
[adc]: https://cloud.google.com/docs/authentication#adc
[set-adc]: https://cloud.google.com/docs/authentication/provide-credentials-adc
[grant-permissions]: https://cloud.google.com/bigquery/docs/access-control
## Example
```yaml
sources:
my-bigquery-source:
kind: "bigquery"
project: "my-project-id"
```
## Reference
| **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|-------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery". |
| project | string | true | Id of the GCP project that the cluster was created in (e.g. "my-project-id"). |
| 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. The default behavior is for it to be executed in the US multi-region |

View File

@@ -0,0 +1,70 @@
---
title: "Bigtable"
type: docs
weight: 1
description: >
Bigtable is a low-latency NoSQL database service for machine learning, operational analytics, and user-facing operations. It's a wide-column, key-value store that can scale to billions of rows and thousands of columns. With Bigtable, you can replicate your data to regions across the world for high availability and data resiliency.
---
# Bigtable Source
[Bigtable][bigtable-docs] is a low-latency NoSQL database service for machine
learning, operational analytics, and user-facing operations. It's a wide-column,
key-value store that can scale to billions of rows and thousands of columns.
With Bigtable, you can replicate your data to regions across the world for high
availability and data resiliency.
If you are new to Bigtable, you can try to [create an instance and write data
with the cbt CLI][bigtable-quickstart-with-cli].
You can use [GoogleSQL statements][bigtable-googlesql] to query your Bigtable
data. GoogleSQL is an ANSI-compliant structured query language (SQL) that is
also implemented for other Google Cloud services. SQL queries are handled by
cluster nodes in the same way as NoSQL data requests. Therefore, the same best
practices apply when creating SQL queries to run against your Bigtable data,
such as avoiding full table scans or complex filters.
[bigtable-docs]: https://cloud.google.com/bigtable/docs
[bigtable-quickstart-with-cli]:
https://cloud.google.com/bigtable/docs/create-instance-write-data-cbt-cli
[bigtable-googlesql]:
https://cloud.google.com/bigtable/docs/googlesql-overview
## Requirements
### IAM Permissions
Bigtable uses [Identity and Access Management (IAM)][iam-overview] to control
user and group access to Bigtable resources at the project, instance, table, and
backup level. Toolbox will use your [Application Default Credentials (ADC)][adc]
to authorize and authenticate when interacting with [Bigtable][bigtable-docs].
In addition to [setting the ADC for your server][set-adc], you need to ensure
the IAM identity has been given the correct IAM permissions for the query
provided. See [Apply IAM roles][grant-permissions] for more information on
applying IAM permissions and roles to an identity.
[iam-overview]: https://cloud.google.com/bigtable/docs/access-control
[adc]: https://cloud.google.com/docs/authentication#adc
[set-adc]: https://cloud.google.com/docs/authentication/provide-credentials-adc
[grant-permissions]: https://cloud.google.com/bigtable/docs/access-control#iam-management-instance
## Example
```yaml
sources:
my-bigtable-source:
kind: "bigtable"
project: "my-project-id"
instance: "test-instance"
```
## Reference
| **field** | **type** | **required** | **description** |
|-----------|:--------:|:------------:|-------------------------------------------------------------------------------|
| 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"). |
| instance | string | true | Name of the Bigtable instance. |

View File

@@ -79,9 +79,16 @@ sources:
instance: my-instance
database: my_db
ipAddress: localhost
user: ${USER_NAME}
password: ${PASSWORD}
# ipType: private
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -74,16 +74,21 @@ a MySQL user][cloud-sql-users] to login to the database with.
```yaml
sources:
my-cloud-sql-mysql-source:
kind: "cloud-sql-mysql"
project: "my-project-id"
region: "us-central1"
instance: "my-instance"
database: "my_db"
user: "my-user"
password: "my-password"
kind: cloud-sql-mysql
project: my-project-id
region: us-central1
instance: my-instance
database: my_db
user: ${USER_NAME}
password: ${PASSWORD}
# ipType: "private"
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -42,9 +42,9 @@ scope](https://cloud.google.com/compute/docs/access/service-accounts#accesscopes
to connect using the Cloud SQL Admin API.
{{< /notice >}}
[csql-go-conn]: https://github.com/GoogleCloudPlatform/cloud-sql-go-connector
[adc]: https://cloud.google.com/docs/authentication#adc
[set-adc]: https://cloud.google.com/docs/authentication/provide-credentials-adc
[csql-go-conn]: <https://github.com/GoogleCloudPlatform/cloud-sql-go-connector>
[adc]: <https://cloud.google.com/docs/authentication#adc>
[set-adc]: <https://cloud.google.com/docs/authentication/provide-credentials-adc>
### Networking
@@ -62,28 +62,57 @@ mTLS.
[public-ip]: https://cloud.google.com/sql/docs/postgres/configure-ip
[conn-overview]: https://cloud.google.com/sql/docs/postgres/connect-overview
### Database User
### Authentication
Currently, this source only uses standard authentication. You will need to [create
a PostgreSQL user][cloud-sql-users] to login to the database with.
This source supports both password-based authentication and IAM
authentication (using your [Application Default Credentials][adc]).
[cloud-sql-users]: https://cloud.google.com/sql/docs/postgres/create-manage-users
#### Standard Authentication
To connect using user/password, [create
a PostgreSQL user][cloudsql-users] and input your credentials in the `user` and
`password` fields.
```yaml
user: ${USER_NAME}
password: ${PASSWORD}
```
#### IAM Authentication
To connect using IAM authentication:
1. Prepare your database instance and user following this [guide][iam-guide].
2. You could choose one of the two ways to log in:
- Specify your IAM email as the `user`.
- Leave your `user` field blank. Toolbox
will fetch the [ADC][adc] automatically and log in using the email associated with it.
3. Leave the `password` field blank.
[iam-guide]: https://cloud.google.com/sql/docs/postgres/iam-logins
[cloudsql-users]: https://cloud.google.com/sql/docs/postgres/create-manage-users
## Example
```yaml
sources:
my-cloud-sql-pg-source:
kind: "cloud-sql-postgres"
project: "my-project-id"
region: "us-central1"
instance: "my-instance"
database: "my_db"
user: "my-user"
password: "my-password"
kind: cloud-sql-postgres
project: my-project-id
region: us-central1
instance: my-instance
database: my_db
user: ${USER_NAME}
password: ${PASSWORD}
# ipType: "private"
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |
@@ -93,6 +122,6 @@ sources:
| 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"). |
| database | string | true | Name of the Postgres database to connect to (e.g. "my_db"). |
| user | string | true | Name of the Postgres user to connect as (e.g. "my-pg-user"). |
| password | string | true | Password of the Postgres user (e.g. "my-password"). |
| user | string | false | Name of the Postgres user to connect as (e.g. "my-pg-user"). Defaults to IAM auth using [ADC][adc] email if unspecified. |
| password | string | false | Password of the Postgres user (e.g. "my-password"). Defaults to attempting IAM authentication if unspecified. |
| ipType | string | false | IP Type of the Cloud SQL instance; must be one of `public` or `private`. Default: `public`. |

View File

@@ -0,0 +1,43 @@
---
title: "couchbase"
type: docs
weight: 1
description: >
A "couchbase" source connects to a Couchbase database.
---
## About
A `couchbase` source establishes a connection to a Couchbase database cluster, allowing tools to execute SQL queries against it.
## Example
```yaml
sources:
my-couchbase-instance:
kind: couchbase
connectionString: couchbase://localhost:8091
bucket: travel-sample
scope: inventory
username: Administrator
password: password
```
## Reference
| **field** | **type** | **required** | **description** |
|---------------------|:--------:|:------------:|-----------------------------------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "couchbase". |
| connectionString | string | true | Connection string for the Couchbase cluster. |
| bucket | string | true | Name of the bucket to connect to. |
| scope | string | true | Name of the scope within the bucket. |
| username | string | false | Username for authentication. |
| password | string | false | Password for authentication. |
| clientCert | string | false | Path to client certificate file for TLS authentication. |
| clientCertPassword| string | false | Password for the client certificate. |
| clientKey | string | false | Path to client key file for TLS authentication. |
| clientKeyPassword | string | false | Password for the client key. |
| caCert | string | false | Path to CA certificate file. |
| noSslVerify | boolean | false | If true, skip server certificate verification. **Warning:** This option should only be used in development or testing environments. Disabling SSL verification poses significant security risks in production as it makes your connection vulnerable to man-in-the-middle attacks. |
| profile | string | false | Name of the connection profile to apply. |
| queryScanConsistency | integer | false | Query scan consistency. Controls the consistency guarantee for index scanning. Values: 1 for "not_bounded" (fastest option, but results may not include the most recent operations), 2 for "request_plus" (highest consistency level, includes all operations up until the query started, but incurs a performance penalty). If not specified, defaults to the Couchbase Go SDK default. |

View File

@@ -9,7 +9,7 @@ description: >
## About
[Dgraph][dgraph-docs] is an open-source graph database. It is designed for real-time workloads, horizontal scalability, and data flexibility. Implemented as a distributed system, Dgraph processes queries in parallel to deliver the fastest result.
[Dgraph][dgraph-docs] is an open-source graph database. It is designed for real-time workloads, horizontal scalability, and data flexibility. Implemented as a distributed system, Dgraph processes queries in parallel to deliver the fastest result.
This source can connect to either a self-managed Dgraph cluster or one hosted on
Dgraph Cloud. If you're new to Dgraph, the fastest way to get started is to
@@ -18,7 +18,7 @@ Dgraph Cloud. If you're new to Dgraph, the fastest way to get started is to
[dgraph-docs]: https://dgraph.io/docs
[dgraph-login]: https://cloud.dgraph.io/login
## Requirements
## Requirements
### Database User
@@ -34,20 +34,25 @@ and user credentials for that namespace.
```yaml
sources:
my-dgraph-source:
kind: "dgraph"
dgraphUrl: "https://xxxx.cloud.dgraph.io"
user: "groot"
password: "password"
apiKey: abc123
namepace : 0
kind: dgraph
dgraphUrl: https://xxxx.cloud.dgraph.io
user: ${USER_NAME}
password: ${PASSWORD}
apiKey: ${API_KEY}
namespace : 0
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **Field** | **Type** | **Required** | **Description** |
|-------------|:--------:|:------------:|--------------------------------------------------------------------------------------------------|
| 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"). |
| password | string | false | Password of the Dgraph user (e.g., "password"). |
| apiKey | string | false | API key to connect to a Dgraph Cloud instance. |

View File

@@ -9,7 +9,7 @@ description: >
## About
The HTTP Source allows the Gen AI Toolbox to retrieve data from arbitrary HTTP
The HTTP Source allows Toolbox to retrieve data from arbitrary HTTP
endpoints. This enables Generative AI applications to access data from web APIs
and other HTTP-accessible resources.
@@ -22,13 +22,18 @@ sources:
baseUrl: https://api.example.com/data
timeout: 10s # default to 30s
headers:
Authorization: Bearer YOUR_API_TOKEN
Authorization: Bearer ${API_KEY}
Content-Type: application/json
queryParams:
param1: value1
param2: value2
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -7,7 +7,7 @@ description: >
---
## About
## About
[SQL Server][mssql-docs] is a relational database management system (RDBMS)
developed by Microsoft that allows users to store, retrieve, and manage large
@@ -20,7 +20,7 @@ amount of data through a structured format.
### Database User
This source only uses standard authentication. You will need to [create a
SQL Server user][mssql-users] to login to the database with.
SQL Server user][mssql-users] to login to the database with.
[mssql-users]: https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16
@@ -29,14 +29,19 @@ SQL Server user][mssql-users] to login to the database with.
```yaml
sources:
my-mssql-source:
kind: "mssql"
host: "127.0.0.1"
port: "1433"
database: "my_db"
user: "my-user"
password: "my-password"
kind: mssql
host: 127.0.0.1
port: 1433
database: my_db
user: ${USER_NAME}
password: ${PASSWORD}
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -11,7 +11,7 @@ description: >
[MySQL][mysql-docs] is a relational database management system (RDBMS) that
stores and manages data. It's a popular choice for developers because of its
reliability, performance, and ease of use.
reliability, performance, and ease of use.
[mysql-docs]: https://www.mysql.com/
@@ -20,7 +20,7 @@ reliability, performance, and ease of use.
### Database User
This source only uses standard authentication. You will need to [create a
MySQL user][mysql-users] to login to the database with.
MySQL user][mysql-users] to login to the database with.
[mysql-users]: https://dev.mysql.com/doc/refman/8.4/en/user-names.html
@@ -29,14 +29,19 @@ MySQL user][mysql-users] to login to the database with.
```yaml
sources:
my-mysql-source:
kind: "mysql"
host: "127.0.0.1"
port: "3306"
database: "my_db"
user: "my-user"
password: "my-password"
kind: mysql
host: 127.0.0.1
port: 3306
database: my_db
user: ${USER_NAME}
password: ${PASSWORD}
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -13,13 +13,13 @@ reliability, feature robustness, and performance.
[neo4j-docs]: https://neo4j.com/docs
## Requirements
## Requirements
### Database User
This source only uses standard authentication. You will need to [create a Neo4j
user][neo4j-users] to log in to the database with, or use the default `neo4j`
user if available.
user if available.
[neo4j-users]: https://neo4j.com/docs/operations-manual/current/authentication-authorization/manage-users/
@@ -28,13 +28,18 @@ user if available.
```yaml
sources:
my-neo4j-source:
kind: "neo4j"
uri: "neo4j+s://xxxx.databases.neo4j.io:7687"
user: "neo4j"
password: "my-password"
kind: neo4j
uri: neo4j+s://xxxx.databases.neo4j.io:7687
user: ${USER_NAME}
password: ${PASSWORD}
database: "neo4j"
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |
@@ -44,5 +49,3 @@ sources:
| 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"). |
| database | string | true | Name of the Neo4j database to connect to (e.g. "neo4j"). |

View File

@@ -29,14 +29,19 @@ PostgreSQL user][pg-users] to login to the database with.
```yaml
sources:
my-pg-source:
kind: "postgres"
host: "127.0.0.1"
port: "5432"
database: "my_db"
user: "my-user"
password: "my-password"
kind: postgres
host: 127.0.0.1
port: 5432
database: my_db
user: ${USER_NAME}
password: ${PASSWORD}
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
## Reference
| **field** | **type** | **required** | **description** |

View File

@@ -0,0 +1,90 @@
---
title: "Redis"
linkTitle: "Redis"
type: docs
weight: 1
description: >
Redis is an open-source, in-memory data structure store.
---
## About
Redis is an open-source, in-memory data structure store, used as a database, cache, and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, and geospatial indexes with radius queries.
If you are new to Redis, you can find installation and getting started guides on the [official Redis website](https://redis.io/docs/getting-started/).
## Requirements
### Redis
[AUTH string][auth] is a password for connection to Redis. If you have the `requirepass` directive set in your Redis configuration, incoming client connections must authenticate in order to connect.
Specify your AUTH string in the password field:
```yaml
sources:
my-redis-instance:
kind: redis
address:
- 127.0.0.1
username: ${MY_USER_NAME}
password: ${MY_AUTH_STRING} # Omit this field if you don't have a password.
# database: 0
# clusterEnabled: false
# useGCPIAM: false
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
### Memorystore For Redis
Memorystore standalone instances support authentication using an [AUTH][auth]
string.
Here is an example tools.yaml config with [AUTH][auth] enabled:
```yaml
sources:
my-redis-cluster-instance:
kind: memorystore-redis
address:
- 127.0.0.1
password: ${MY_AUTH_STRING}
# useGCPIAM: false
# clusterEnabled: false
```
Memorystore Redis Cluster supports IAM authentication instead. Grant your account the
required [IAM role][iam] and make sure to set `useGCPIAM` to `true`.
Here is an example tools.yaml config for Memorystore Redis Cluster instances
using IAM authentication:
```yaml
sources:
my-redis-cluster-instance:
kind: memorystore-redis
address: 127.0.0.1
useGCPIAM: true
clusterEnabled: true
```
[iam]: https://cloud.google.com/memorystore/docs/cluster/about-iam-auth
## Reference
| **field** | **type** | **required** | **description** |
|----------------|:--------:|:------------:|---------------------------------------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "memorystore-redis". |
| 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 |
| password | string | false | If you have [Redis AUTH][auth] enabled, specify the AUTH string here |
| database | int | false | The Redis database to connect to. Not applicable for cluster enabled instances. The default database is `0`. |
| clusterEnabled | bool | false | Set it to `true` if using a Redis Cluster instance. Defaults to `false`. |
| useGCPIAM | string | false | Set it to `true` if you are using GCP's IAM authentication. Defaults to `false`. |
[auth]: https://cloud.google.com/memorystore/docs/redis/about-redis-auth

View File

@@ -8,7 +8,7 @@ description: >
---
# Spanner Source
# Spanner Source
[Spanner][spanner-docs] is a fully managed, mission-critical database service
that brings together relational, graph, key-value, and search. It offers
@@ -23,7 +23,7 @@ the Google Cloud console][spanner-quickstart].
[spanner-quickstart]:
https://cloud.google.com/spanner/docs/create-query-database-console
## Requirements
## Requirements
### IAM Permissions

View File

@@ -0,0 +1,63 @@
---
title: "SQLite"
linkTitle: "SQLite"
type: docs
weight: 1
description: >
SQLite is a C-language library that implements a small, fast, self-contained,
high-reliability, full-featured, SQL database engine.
---
## About
[SQLite](https://sqlite.org/) is a software library that provides a relational
database management system. The lite in SQLite means lightweight in terms of
setup, database administration, and required resources.
SQLite has the following notable characteristics:
- Self-contained with no external dependencies
- Serverless - the SQLite library accesses its storage files directly
- Single database file that can be easily copied or moved
- Zero-configuration - no setup or administration needed
- Transactional with ACID properties
## Requirements
### Database File
You need a SQLite database file. This can be:
- An existing database file
- A path where a new database file should be created
- `:memory:` for an in-memory database
## Example
```yaml
sources:
my-sqlite-db:
kind: "sqlite"
database: "/path/to/database.db"
```
For an in-memory database:
```yaml
sources:
my-sqlite-memory-db:
kind: "sqlite"
database: ":memory:"
```
## Reference
### Configuration Fields
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| kind | string | Yes | Must be "sqlite" |
| database | string | Yes | Path to SQLite database file, or ":memory:" for an in-memory database |
### Connection Properties
SQLite connections are configured with these defaults for optimal performance:
- `MaxOpenConns`: 1 (SQLite only supports one writer at a time)
- `MaxIdleConns`: 1

View File

@@ -0,0 +1,64 @@
---
title: "Valkey"
linkTitle: "Valkey"
type: docs
weight: 1
description: >
Valkey is an open-source, in-memory data structure store, forked from Redis.
---
## About
Valkey is an open-source, in-memory data structure store that originated as a fork of Redis. It's designed to be used as a database, cache, and message broker, supporting a wide range of data structures like strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, and geospatial indexes with radius queries.
If you're new to Valkey, you can find installation and getting started guides on the [official Valkey website](https://valkey.io/docs/getting-started/).
## Example
```yaml
sources:
my-valkey-instance:
kind: valkey
address:
- 127.0.0.1
username: ${YOUR_USERNAME}
password: ${YOUR_PASSWORD}
# database: 0
# useGCPIAM: false
# disableCache: false
```
{{< notice tip >}}
Use environment variable replacement with the format ${ENV_NAME}
instead of hardcoding your secrets into the configuration file.
{{< /notice >}}
### IAM Authentication
If you are using GCP's Memorystore for Valkey, you can connect using IAM
authentication. Grant your account the required [IAM role][iam] and set
`useGCPIAM` to `true`:
```yaml
sources:
my-valkey-instance:
kind: valkey
address:
- 127.0.0.1
useGCPIAM: true
```
[iam]: https://cloud.google.com/memorystore/docs/valkey/about-iam-auth
## Reference
| **field** | **type** | **required** | **description** |
|--------------|:--------:|:------------:|----------------------------------------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "valkey". |
| 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 |
| password | string | false | Password for the Valkey instance |
| database | int | false | The Valkey database to connect to. Not applicable for cluster enabled instances. The default database is `0`. |
| useGCPIAM | bool | false | Set it to `true` if you are using GCP's IAM authentication. Defaults to `false`. |
| disableCache | bool | false | Set it to `true` if you want to enable client-side caching. Defaults to `false`. |

View File

@@ -93,7 +93,7 @@ in the list using the items field:
```yaml
parameters:
- name: preffered_airlines
- name: preferred_airlines
type: array
description: A list of airline, ordered by preference.
items:
@@ -141,6 +141,58 @@ specific claims within the user's ID token.
| name | string | true | Name of the [authServices](../authservices) used to verify the OIDC auth token. |
| field | string | true | Claim field decoded from the OIDC token used to auto-populate this parameter. |
### Template Parameters
Template parameters types include `string`, `integer`, `float`, `boolean` types. In
most cases, the description will be provided to the LLM as context on specifying
the parameter. Template parameters will be inserted into the SQL statement before
executing the prepared statement. They will be inserted without quotes, so to
insert a string using template parameters, quotes must be explicitly added within
the string.
Template parameter arrays can also be used similarly to basic parameters, and array
items must be strings. Once inserted into the SQL statement, the outer layer of quotes
will be removed. Therefore to insert strings into the SQL statement, a set of quotes
must be explicitly added within the string.
{{< notice warning >}}
Because template parameters can directly replace identifiers, column names, and table names, they are prone to SQL injections. Basic parameters are preferred for performance and safety reasons.
{{< /notice >}}
```yaml
tools:
select_columns_from_table:
kind: postgres-sql
source: my-pg-instance
statement: |
SELECT {{array .columnNames}} FROM {{.tableName}}
description: |
Use this tool to list all information from a specific table.
Example:
{{
"tableName": "flights",
"columnNames": ["id", "name"]
}}
templateParameters:
- name: tableName
type: string
description: Table to select from
- name: columnNames
type: array
description: The columns to select
items:
name: column
type: string
description: Name of a column to select
```
| **field** | **type** | **required** | **description** |
|-------------|:----------------:|:-------------:|-------------------------------------------------------------------------------------|
| name | string | true | Name of the template parameter. |
| type | string | true | Must be one of "string", "integer", "float", "boolean" "array" |
| description | string | true | Natural language description of the template parameter to describe it to the agent. |
| items | parameter object |true (if array)| Specify a Parameter object for the type of the values in the array (string only). |
## Authorized Invocations
You can require an authorization check for any Tool invocation request by

View File

@@ -30,8 +30,7 @@ database layer.
## Requirements
{{< notice tip >}} AlloyDB AI natural language is currently in gated public
preview. For more information on availability and limitations, please see
[AlloyDB AI natural language
overview](https://cloud.google.com/alloydb/docs/natural-language-questions-overview)
[AlloyDB AI natural language overview](https://cloud.google.com/alloydb/docs/ai/natural-language-overview)
{{< /notice >}}
To enable AlloyDB AI natural language for your AlloyDB cluster, please follow
@@ -39,8 +38,8 @@ the steps listed in the [Generate SQL queries that answer natural language
questions][alloydb-ai-gen-nl], including enabling the extension and configuring
context for your application.
[alloydb-ai-nl-overview]: https://cloud.google.com/alloydb/docs/natural-language-questions-overview
[alloydb-ai-gen-nl]: https://cloud.google.com/alloydb/docs/alloydb/docs/ai/generate-queries-natural-language
[alloydb-ai-nl-overview]: https://cloud.google.com/alloydb/docs/ai/natural-language-overview
[alloydb-ai-gen-nl]: https://cloud.google.com/alloydb/docs/ai/generate-sql-queries-natural-language
## Configuration
@@ -70,7 +69,7 @@ Parameters](../tools/#array-parameters) or Bound Parameters to provide secure
access to queries generated using natural language, as these parameters are not
visible to the LLM.
[alloydb-psv]: https://cloud.google.com/alloydb/docs/ai/use-psvs#parameterized_secure_views
[alloydb-psv]: https://cloud.google.com/alloydb/docs/parameterized-secure-views-overview
## Example

View File

@@ -0,0 +1,35 @@
---
title: "bigquery-execute-sql"
type: docs
weight: 1
description: >
A "bigquery-execute-sql" tool executes a SQL statement against BigQuery.
---
## About
A `bigquery-execute-sql` tool executes a SQL statement against BigQuery.
It's compatible with the following sources:
- [bigquery](../sources/bigquery.md)
`bigquery-execute-sql` takes one input parameter `sql` and runs the sql
statement against the `source`.
## Example
```yaml
tools:
execute_sql_tool:
kind: bigquery-execute-sql
source: my-bigquery-source
description: Use this tool to execute sql statement.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery-execute-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -0,0 +1,35 @@
---
title: "bigquery-get-dataset-info"
type: docs
weight: 1
description: >
A "bigquery-get-dataset-info" tool retrieves metadata for a BigQuery dataset.
---
## About
A `bigquery-get-dataset-info` tool retrieves metadata for a BigQuery dataset.
It's compatible with the following sources:
- [bigquery](../sources/bigquery.md)
bigquery-get-dataset-info takes a dataset parameter to specify the dataset
on the given source.
## Example
```yaml
tools:
bigquery_get_dataset_info:
kind: bigquery-get-dataset-info
source: my-bigquery-source
description: Use this tool to get dataset metadata.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery-get-dataset-info". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -0,0 +1,35 @@
---
title: "bigquery-get-table-info"
type: docs
weight: 1
description: >
A "bigquery-get-table-info" tool retrieves metadata for a BigQuery table.
---
## About
A `bigquery-get-table-info` tool retrieves metadata for a BigQuery table.
It's compatible with the following sources:
- [bigquery](../sources/bigquery.md)
bigquery-get-table-info takes dataset and table parameters to specify
the target table.
## Example
```yaml
tools:
bigquery_get_table_info:
kind: bigquery-get-table-info
source: my-bigquery-source
description: Use this tool to get table metadata.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery-get-table-info". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -0,0 +1,35 @@
---
title: "bigquery-list-dataset-ids"
type: docs
weight: 1
description: >
A "bigquery-list-dataset-ids" tool returns all dataset IDs from the source.
---
## About
A `bigquery-list-dataset-ids` tool returns all dataset IDs from the source.
It's compatible with the following sources:
- [bigquery](../sources/bigquery.md)
bigquery-list-dataset-ids requires no input parameters beyond the configured
source.
## Example
```yaml
tools:
bigquery_list_dataset_ids:
kind: bigquery-list-dataset-ids
source: my-bigquery-source
description: Use this tool to get dataset metadata.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery-list-dataset-ids". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -0,0 +1,35 @@
---
title: "bigquery-list-table-ids"
type: docs
weight: 1
description: >
A "bigquery-list-table-ids" tool returns table IDs in a given BigQuery dataset.
---
## About
A `bigquery-list-table-ids` tool returns table IDs in a given BigQuery dataset.
It's compatible with the following sources:
- [bigquery](../sources/bigquery.md)
bigquery-get-dataset-info takes a dataset parameter to specify the dataset
from which to list table IDs.
## Example
```yaml
tools:
bigquery_list_table_ids:
kind: bigquery-list-table-ids
source: my-bigquery-source
description: Use this tool to get table metadata.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery-list-table-ids". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -0,0 +1,70 @@
---
title: "bigquery-sql"
type: docs
weight: 1
description: >
A "bigquery-sql" tool executes a pre-defined SQL statement.
---
## About
A `bigquery-sql` tool executes a pre-defined SQL statement. It's compatible with
the following sources:
- [bigquery](../sources/bigquery.md)
### GoogleSQL
BigQuery uses [GoogleSQL][bigquery-googlesql] for querying data. The integration
with Toolbox supports this dialect. The specified SQL statement is executed, and
parameters can be inserted into the query. BigQuery supports both named parameters
(e.g., `@name`) and positional parameters (`?`), but they cannot be mixed in the
same query.
> **Note:** This tool uses [parameterized queries](https://cloud.google.com/bigquery/docs/parameterized-queries) to prevent SQL injections. Query parameters can be used as substitutes for arbitrary expressions. Parameters cannot be used as substitutes for identifiers, column names, table names, or other parts of the query.
[bigquery-googlesql]: https://cloud.google.com/bigquery/docs/reference/standard-sql/
## Example
```yaml
tools:
# Example: Querying a user table in BigQuery
search_users_bq:
kind: bigquery-sql
source: my-bigquery-source
statement: |
SELECT
id,
name,
email
FROM
`my-project.my-dataset.users`
WHERE
id = @id OR email = @email;
description: |
Use this tool to get information for a specific user.
Takes an id number or a name and returns info on the user.
Example:
{{
"id": 123,
"name": "Alice",
}}
parameters:
- name: id
type: integer
description: User ID
- name: email
type: string
description: Email address of the user
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigquery-sql". |
| source | string | true | Name of the source the GoogleSQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | The GoogleSQL statement to execute. |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be inserted into the SQL statement. |

View File

@@ -0,0 +1,87 @@
---
title: "bigtable-sql"
type: docs
weight: 1
description: >
A "bigtable-sql" tool executes a pre-defined SQL statement against a Google
Cloud Bigtable instance.
---
## About
A `bigtable-sql` tool executes a pre-defined SQL statement against a Bigtable
instance. It's compatible with any of the following sources:
- [bigtable](../sources/bigtable.md)
### GoogleSQL
Bigtable supports SQL queries. The integration with Toolbox supports `googlesql`
dialect, the specified SQL statement is executed as a [data manipulation
language (DML)][bigtable-googlesql] statements, and specified parameters will
inserted according to their name: e.g. `@name`.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[bigtable-googlesql]: https://cloud.google.com/bigtable/docs/googlesql-overview
## Example
```yaml
tools:
search_user_by_id_or_name:
kind: bigtable-sql
source: my-bigtable-instance
statement: |
SELECT
TO_INT64(cf[ 'id' ]) as id,
CAST(cf[ 'name' ] AS string) as name,
FROM
mytable
WHERE
TO_INT64(cf[ 'id' ]) = @id
OR CAST(cf[ 'name' ] AS string) = @name;
description: |
Use this tool to get information for a specific user.
Takes an id number or a name and returns info on the user.
Example:
{{
"id": 123,
"name": "Alice",
}}
parameters:
- name: id
type: integer
description: User ID
- name: name
type: string
description: Name of the user
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "bigtable-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | SQL statement to execute on. |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be inserted into the SQL statement. |
## Tips
- [Bigtable Studio][bigtable-studio] is a useful to explore and manage your
Bigtable data. If you're unfamiliar with the query syntax, [Query
Builder][bigtable-querybuilder] lets you build a query, run it against a
table, and then view the results in the console.
- Some Python libraries limit the use of underscore columns such as `_key`. A
workaround would be to leverage Bigtable [Logical
Views][bigtable-logical-view] to rename the columns.
[bigtable-studio]: https://cloud.google.com/bigtable/docs/manage-data-using-console
[bigtable-logical-view]: https://cloud.google.com/bigtable/docs/create-manage-logical-views
[bigtable-querybuilder]: https://cloud.google.com/bigtable/docs/query-builder

View File

@@ -0,0 +1,70 @@
---
title: "couchbase-sql"
type: docs
weight: 1
description: >
A "couchbase-sql" tool executes a pre-defined SQL statement against a Couchbase
database.
---
## About
A `couchbase-sql` tool executes a pre-defined SQL statement against a Couchbase
database. It's compatible with any of the following sources:
- [couchbase](../sources/couchbase.md)
The specified SQL statement is executed as a parameterized statement, and specified
parameters will be used according to their name: e.g. `$id`.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
## Example
```yaml
tools:
search_products_by_category:
kind: couchbase-sql
source: my-couchbase-instance
statement: |
SELECT p.name, p.price, p.description
FROM products p
WHERE p.category = $category AND p.price < $max_price
ORDER BY p.price DESC
LIMIT 10
description: |
Use this tool to get a list of products for a specific category under a maximum price.
Takes a category name, e.g. "Electronics" and a maximum price e.g 500 and returns a list of product names, prices, and descriptions.
Do NOT use this tool with invalid category names. Do NOT guess a category name, Do NOT guess a price.
Example:
{{
"category": "Electronics",
"max_price": 500
}}
Example:
{{
"category": "Furniture",
"max_price": 1000
}}
parameters:
- name: category
type: string
description: Product category name
- name: max_price
type: integer
description: Maximum price (positive integer)
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "couchbase-sql". |
| source | string | true | Name of the source the SQL query should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | SQL statement to execute |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be used with the SQL statement. |
| authRequired| array[string] | false | List of auth services that are required to use this tool. |

View File

@@ -18,9 +18,14 @@ To run a statement as a query, you need to set the config `isQuery=true`. For
upserts or mutations, set `isQuery=false`. You can also configure timeout for a
query.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
## Example
{{< tabpane >}}
{{< tabpane persist="header" >}}
{{< tab header="Query" lang="yaml" >}}
tools:
@@ -112,6 +117,6 @@ tools:
| source | string | true | Name of the source the dql query should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | dql statement to execute |
| isQuery | boolean | false | To run statment as query set true otherwise false |
| timeout | string | false | To set timout for query |
| isQuery | boolean | false | To run statement as query set true otherwise false |
| timeout | string | false | To set timeout for query |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be used with the dql statement. |

View File

@@ -0,0 +1,39 @@
---
title: "mssql-execute-sql"
type: docs
weight: 1
description: >
A "mssql-execute-sql" tool executes a SQL statement against a SQL Server
database.
---
## About
A `mssql-execute-sql` tool executes a SQL statement against a SQL Server
database. It's compatible with any of the following sources:
- [cloud-sql-mssql](../sources/cloud-sql-mssql.md)
- [mssql](../sources/mssql.md)
`mssql-execute-sql` takes one input parameter `sql` and run the sql
statement against the `source`.
> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.
## Example
```yaml
tools:
execute_sql_tool:
kind: mssql-execute-sql
source: my-mssql-instance
description: Use this tool to execute sql statement.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|----------------------------------------------------|
| kind | string | true | Must be "mssql-execute-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -23,6 +23,11 @@ Server and expects parameters in the SQL query to be in the form of either
db.QueryContext(ctx, `select * from t where ID = @ID and Name = @p2;`, sql.Named("ID", 6), "Bob")
```
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[prepare-statement]: https://learn.microsoft.com/sql/relational-databases/system-stored-procedures/sp-prepare-transact-sql?view=sql-server-ver16
## Example

View File

@@ -0,0 +1,40 @@
---
title: "mysql-execute-sql"
type: docs
weight: 1
description: >
A "mysql-execute-sql" tool executes a SQL statement against a MySQL
database.
---
## About
A `mysql-execute-sql` tool executes a SQL statement against a MySQL
database. It's compatible with any of the following sources:
- [cloud-sql-mysql](../sources/cloud-sql-mysql.md)
- [mysql](../sources/mysql.md)
`mysql-execute-sql` takes one input parameter `sql` and run the sql
statement against the `source`.
> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.
## Example
```yaml
tools:
execute_sql_tool:
kind: mysql-execute-sql
source: my-mysql-instance
description: Use this tool to execute sql statement.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "mysql-execute-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -3,13 +3,13 @@ title: "mysql-sql"
type: docs
weight: 1
description: >
A "mysql-sql" tool executes a pre-defined SQL statement against a SQL Server
A "mysql-sql" tool executes a pre-defined SQL statement against a MySQL
database.
---
## About
A `mysql-sql` tool executes a pre-defined SQL statement against a mysql
A `mysql-sql` tool executes a pre-defined SQL statement against a MySQL
database. It's compatible with any of the following sources:
- [cloud-sql-mysql](../sources/cloud-sql-mysql.md)
@@ -18,6 +18,11 @@ database. It's compatible with any of the following sources:
The specified SQL statement is executed as a [prepared statement][mysql-prepare],
and expects parameters in the SQL query to be in the form of placeholders `?`.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[mysql-prepare]: https://dev.mysql.com/doc/refman/8.4/en/sql-prepared-statements.html
## Example

View File

@@ -18,6 +18,11 @@ The specified Cypher statement is executed as a [parameterized
statement][neo4j-parameters], and specified parameters will be used according to
their name: e.g. `$id`.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[neo4j-parameters]:
https://neo4j.com/docs/cypher-manual/current/syntax/parameters/
@@ -34,7 +39,7 @@ tools:
RETURN m.title, m.year
LIMIT 10
description: |
Use this tool to get a list of movies for a specific actor and a given minium release year.
Use this tool to get a list of movies for a specific actor and a given minimum release year.
Takes an full actor name, e.g. "Tom Hanks" and a year e.g 1993 and returns a list of movie titles and release years.
Do NOT use this tool with a movie title. Do NOT guess an actor name, Do NOT guess a year.
A actor name is a fully qualified name with first and last name separated by a space.

View File

@@ -0,0 +1,41 @@
---
title: "postgres-execute-sql"
type: docs
weight: 1
description: >
A "postgres-execute-sql" tool executes a SQL statement against a Postgres
database.
---
## About
A `postgres-execute-sql` tool executes a SQL statement against a Postgres
database. It's compatible with any of the following sources:
- [alloydb-postgres](../sources/alloydb-pg.md)
- [cloud-sql-postgres](../sources/cloud-sql-pg.md)
- [postgres](../sources/postgres.md)
`postgres-execute-sql` takes one input parameter `sql` and run the sql
statement against the `source`.
> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.
## Example
```yaml
tools:
execute_sql_tool:
kind: postgres-execute-sql
source: my-pg-instance
description: Use this tool to execute sql statement.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "postgres-execute-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |

View File

@@ -19,12 +19,18 @@ database. It's compatible with any of the following sources:
The specified SQL statement is executed as a [prepared statement][pg-prepare],
and specified parameters will inserted according to their position: e.g. `1`
will be the first parameter specified, `$@` will be the second parameter, and so
on.
[pg-prepare]: https://www.postgresql.org/docs/current/sql-prepare.html
on. If template parameters are included, they will be resolved before execution
of the prepared statement.
## Example
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[pg-prepare]: https://www.postgresql.org/docs/current/sql-prepare.html
```yaml
tools:
search_flights_by_number:
@@ -63,12 +69,39 @@ tools:
description: 1 to 4 digit number
```
### Example with Template Parameters
> **Note:** This tool allows direct modifications to the SQL statement, including identifiers, column names,
> and table names. **This makes it more vulnerable to SQL injections**. Using basic parameters
> only (see above) is recommended for performance and safety reasons. For more details, please
> check [templateParameters](_index#template-parameters).
```yaml
tools:
list_table:
kind: postgres-sql
source: my-pg-instance
statement: |
SELECT * FROM {{.tableName}}
description: |
Use this tool to list all information from a specific table.
Example:
{{
"tableName": "flights",
}}
templateParameters:
- name: tableName
type: string
description: Table to select from
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "postgres-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | SQL statement to execute on. |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be inserted into the SQL statement. |
| **field** | **type** | **required** | **description** |
|---------------------|:---------------------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "postgres-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | SQL statement to execute on. |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be inserted into the SQL statement. |
| templateParameters | [templateParameters](_index#template-parameters) | false | List of [templateParameters](_index#template-parameters) that will be inserted into the SQL statement before executing prepared statement. |

View File

@@ -0,0 +1,57 @@
---
title: "redis"
type: docs
weight: 1
description: >
A "redis" tool executes a set of pre-defined Redis commands against a Redis instance.
---
## About
A redis tool executes a series of pre-defined Redis commands against a
Redis source.
The specified Redis commands are executed sequentially. Each command is
represented as a string list, where the first element is the command name (e.g., SET,
GET, HGETALL) and subsequent elements are its arguments.
### Dynamic Command Parameters
Command arguments can be templated using the `$variableName` annotation. The
array type parameters will be expanded once into multiple arguments. Take the
following config for example:
```yaml
commands:
- [SADD, userNames, $userNames] # Array will be flattened into multiple arguments.
parameters:
- name: userNames
type: array
description: The user names to be set.
```
If the input is an array of strings `["Alice", "Sid", "Bob"]`, The final command
to be executed after argument expansion will be `[SADD, userNames, Alice, Sid, Bob]`.
## Example
```yaml
tools:
user_data_tool:
kind: redis
source: my-redis-instance
description: |
Use this tool to interact with user data stored in Redis.
It can set, retrieve, and delete user-specific information.
commands:
- [SADD, userNames, $userNames] # Array will be flattened into multiple arguments.
- [GET, $userId]
parameters:
- name: userId
type: string
description: The unique identifier for the user.
- name: userNames
type: array
description: The user names to be set.
```

View File

@@ -0,0 +1,40 @@
---
title: "spanner-execute-sql"
type: docs
weight: 1
description: >
A "spanner-execute-sql" tool executes a SQL statement against a Spanner
database.
---
## About
A `spanner-execute-sql` tool executes a SQL statement against a Spanner
database. It's compatible with any of the following sources:
- [spanner](../sources/spanner.md)
`spanner-execute-sql` takes one input parameter `sql` and run the sql
statement against the `source`.
> **Note:** This tool is intended for developer assistant workflows with
> human-in-the-loop and shouldn't be used for production agents.
## Example
```yaml
tools:
execute_sql_tool:
kind: spanner-execute-sql
source: my-spanner-instance
description: Use this tool to execute sql statement.
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | true | Must be "spanner-execute-sql". |
| source | string | true | Name of the source the SQL should execute on. |
| description | string | true | Description of the tool that is passed to the LLM. |
| readOnly | bool | false | When set to `true`, the `statement` is run as a read-only transaction. Default: `false`. |

View File

@@ -21,6 +21,11 @@ For the `googlesql` dialect, the specified SQL statement is executed as a [data
manipulation language (DML)][gsql-dml] statements, and specified parameters will
inserted according to their name: e.g. `@name`.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[gsql-dml]: https://cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax
### PostgreSQL
@@ -30,11 +35,16 @@ statement][pg-prepare], and specified parameters will inserted according to
their position: e.g. `$1` will be the first parameter specified, `$@` will be
the second parameter, and so on.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
[pg-prepare]: https://www.postgresql.org/docs/current/sql-prepare.html
## Example
{{< tabpane >}}
{{< tabpane persist="header" >}}
{{< tab header="GoogleSQL" lang="yaml" >}}
tools:
@@ -124,3 +134,4 @@ tools:
| description | string | true | Description of the tool that is passed to the LLM. |
| statement | string | true | SQL statement to execute on. |
| parameters | [parameters](_index#specifying-parameters) | false | List of [parameters](_index#specifying-parameters) that will be inserted into the SQL statement. |
| readOnly | bool | false | When set to `true`, the `statement` is run as a read-only transaction. Default: `false`. |

View File

@@ -0,0 +1,54 @@
---
title: "sqlite-sql"
type: docs
weight: 1
description: >
Execute SQL statements against a SQLite database.
---
## About
A `sqlite-sql` tool executes SQL statements against a SQLite database.
It's compatible with any of the following sources:
- [sqlite](../sources/sqlite.md)
SQLite uses the `?` placeholder for parameters in SQL statements. Parameters are
bound in the order they are provided.
The statement field supports any valid SQLite SQL statement, including `SELECT`,
`INSERT`, `UPDATE`, `DELETE`, `CREATE/ALTER/DROP` table statements, and other
DDL statements.
> **Note:** This tool uses parameterized queries to prevent SQL injections.
> Query parameters can be used as substitutes for arbitrary expressions.
> Parameters cannot be used as substitutes for identifiers, column names, table
> names, or other parts of the query.
### Example
```yaml
tools:
search-users:
kind: sqlite-sql
source: my-sqlite-db
description: Search users by name and age
parameters:
- name: name
type: string
description: The name to search for
- name: min_age
type: integer
description: Minimum age
statement: SELECT * FROM users WHERE name LIKE ? AND age >= ?
```
## Reference
| **field** | **type** | **required** | **description** |
|-------------|:------------------------------------------:|:------------:|--------------------------------------------------------------------------------------------------|
| kind | string | Yes | Must be "sqlite-sql" |
| source | string | Yes | Name of a SQLite source configuration |
| description | string | Yes | Description of what the tool does |
| parameters | array | No | List of parameters for the SQL statement |
| statement | string | Yes | The SQL statement to execute |

View File

@@ -0,0 +1,56 @@
---
title: "valkey"
type: docs
weight: 1
description: >
A "valkey" tool executes a set of pre-defined Valkey commands against a Memorystore for Valkey instance.
---
## About
A valkey tool executes a series of pre-defined Valkey commands against a
Memorystore for Valkey instance.
The specified Valkey commands are executed sequentially. Each command is
represented as a string array, where the first element is the command name (e.g., SET,
GET, HGETALL) and subsequent elements are its arguments.
### Dynamic Command Parameters
Command arguments can be templated using the `$variableName` annotation. The
array type parameters will be expanded once into multiple arguments. Take the
following config for example:
```yaml
commands:
- [SADD, userNames, $userNames] # Array will be flattened into multiple arguments.
parameters:
- name: userNames
type: array
description: The user names to be set.
```
If the input is an array of strings `["Alice", "Sid", "Bob"]`, The final command
to be executed after argument expansion will be `[SADD, userNames, Alice, Sid, Bob]`.
## Example
```yaml
tools:
user_data_tool:
kind: valkey
source: my-valkey-instance
description: |
Use this tool to interact with user data stored in Valkey.
It can set, retrieve, and delete user-specific information.
commands:
- [SADD, userNames, $userNames] # Array will be flattened into multiple arguments.
- [GET, $userId]
parameters:
- name: userId
type: string
description: The unique identifier for the user.
- name: userNames
type: array
description: The user names to be set.
```

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