-
Notifications
You must be signed in to change notification settings - Fork 812
feat: Looker MCP Server #923
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Do not merge. I'll rebase this on main when #890 lands. Also the integration test will likely need adjustment and the secrets need to be set up. |
374923c
to
5aef08b
Compare
5aef08b
to
53dc268
Compare
53dc268
to
3d9cfc8
Compare
3d9cfc8
to
41a623d
Compare
Waiting on #928. |
41a623d
to
7d1f8c8
Compare
7d1f8c8
to
690d9f9
Compare
690d9f9
to
b3f3bfd
Compare
@duwenxin99 @kurtisvg We are green on the unit tests! Let's try to get the integration test set up on Monday! |
b3f3bfd
to
4820553
Compare
4820553
to
268ae0f
Compare
268ae0f
to
86c8d10
Compare
3 similar comments
Add support for Looker with the following prebuilt tools: * get_models * get_explores * get_dimensions * get_measures * get_filters * get_parameters * query * query_sql * get_looks * run_look
67c02fb
to
3d68698
Compare
🧨 Preview deployments removed. |
Add support for Looker with the following prebuilt tools: * get_models * get_explores * get_dimensions * get_measures * get_filters * get_parameters * query * query_sql * get_looks * run_look --------- Co-authored-by: duwenxin <duwenxin@google.com> c67e01b
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.10.0+: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
super-nit:
V0.10.0+: | |
v0.10.0+: |
} | ||
|
||
func newConfig(ctx context.Context, name string, decoder *yaml.Decoder) (sources.SourceConfig, error) { | ||
actual := Config{Name: name, SslVerification: "true", Timeout: "120s"} // Default Ssl,timeout |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed that this is 600s for the prebuilt but 120s here -- should they be consistent?
BaseURL string `yaml:"baseUrl"` | ||
ClientId string `yaml:"client_id"` | ||
ClientSecret string `yaml:"client_secret"` | ||
SslVerification bool `yaml:"verify_ssl"` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These 4 things are already using in the ApiSettings -- do they need to be attached to the Source as well?
mapParams := params.AsMap() | ||
model, ok := mapParams["model"].(string) | ||
if !ok { | ||
return nil, fmt.Errorf("unable to get cast %s", mapParams["model"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this error is returned to the LLM, so it would be better as "model parameter must be a string"
mapParams := params.AsMap() | ||
model, ok := mapParams["model"].(string) | ||
if !ok { | ||
return nil, fmt.Errorf("unable to get cast %s", mapParams["model"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same for these errors -- ideally should be actionable by the LLM
🤖 I have created a release *beep* *boop* --- ## [0.10.0](v0.9.0...v0.10.0) (2025-07-25) ### Features * Add `Map` parameters support ([#928](#928)) ([4468bc9](4468bc9)) * Add Dataplex source and tool ([#847](#847)) ([30c16a5](30c16a5)) * Add Looker source and tool ([#923](#923)) ([c67e01b](c67e01b)) * Add support for null optional parameter ([#802](#802)) ([a817b12](a817b12)), closes [#736](#736) * **prebuilt/alloydb-admin-config:** Add alloydb control plane as a prebuilt config ([#937](#937)) ([0b28b72](0b28b72)) * **prebuilt/mysql,prebuilt/mssql:** Add generic mysql and mssql prebuilt tools ([#983](#983)) ([c600c30](c600c30)) * **server/mcp:** Support MCP version 2025-06-18 ([#898](#898)) ([313d3ca](313d3ca)) * **sources/mssql:** Add support for encrypt connection parameter ([#874](#874)) ([14a868f](14a868f)) * **sources/firestore:** Add Firestore as Source ([#786](#786)) ([2bb790e](2bb790e)) * **sources/mongodb:** Add MongoDB Source ([#969](#969)) ([74dbd61](74dbd61)) * **tools/alloydb-wait-for-operation:** Add wait for operation tool with exponential backoff ([#920](#920)) ([3f6ec29](3f6ec29)) * **tools/mongodb-aggregate:** Add MongoDB `aggregate` Tools ([#977](#977)) ([bd399bb](bd399bb)) * **tools/mongodb-delete:** Add MongoDB `delete` Tools ([#974](#974)) ([78e9752](78e9752)) * **tools/mongodb-find:** Add MongoDB `find` Tools ([#970](#970)) ([a747475](a747475)) * **tools/mongodb-insert:** Add MongoDB `insert` Tools ([#975](#975)) ([4c63f0c](4c63f0c)) * **tools/mongodb-update:** Add MongoDB `update` Tools ([#972](#972)) ([dfde52c](dfde52c)) * **tools/neo4j-execute-cypher:** Add neo4j-execute-cypher for Neo4j sources ([#946](#946)) ([81d0505](81d0505)) * **tools/neo4j-schema:** Add neo4j-schema tool ([#978](#978)) ([be7db3d](be7db3d)) * **tools/wait:** Create wait for tool ([#885](#885)) ([ed5ef4c](ed5ef4c)) ### Bug Fixes * Fix document preview pipeline for forked PRs ([#950](#950)) ([481cc60](481cc60)) * **prebuilt/firestore:** Mark database field as required in the firestore prebuilt tools ([#959](#959)) ([15417d4](15417d4)) * **prebuilt/cloud-sql-mssql:** Correct source reference for execute_sql tool in cloud-sql-mssql.yaml prebuilt config ([#938](#938)) ([d16728e](d16728e)) * **prebuilt/cloud-sql-mysql:** Update list_table tool ([#924](#924)) ([2083ba5](2083ba5)) * Replace 'float' with 'number' in McpManifest ([#985](#985)) ([59e23e1](59e23e1)) * **server/api:** Add logger to context in tool invoke handler ([#891](#891)) ([8ce311f](8ce311f)) * **sources/looker:** Add agent tag to Looker API calls. ([#966](#966)) ([f55dd6f](f55dd6f)) * **tools/bigquery-execute-sql:** Ensure invoke always returns a non-null value ([#925](#925)) ([9a55b80](9a55b80)) * **tools/mysqlsql:** Unmarshal json data from database during invoke ([#979](#979)) ([ccc3498](ccc3498)), closes [#840](#840) --- 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 Teoh <45984206+Yuan325@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [0.10.0](v0.9.0...v0.10.0) (2025-07-25) ### Features * Add `Map` parameters support ([#928](#928)) ([4468bc9](4468bc9)) * Add Dataplex source and tool ([#847](#847)) ([30c16a5](30c16a5)) * Add Looker source and tool ([#923](#923)) ([c67e01b](c67e01b)) * Add support for null optional parameter ([#802](#802)) ([a817b12](a817b12)), closes [#736](#736) * **prebuilt/alloydb-admin-config:** Add alloydb control plane as a prebuilt config ([#937](#937)) ([0b28b72](0b28b72)) * **prebuilt/mysql,prebuilt/mssql:** Add generic mysql and mssql prebuilt tools ([#983](#983)) ([c600c30](c600c30)) * **server/mcp:** Support MCP version 2025-06-18 ([#898](#898)) ([313d3ca](313d3ca)) * **sources/mssql:** Add support for encrypt connection parameter ([#874](#874)) ([14a868f](14a868f)) * **sources/firestore:** Add Firestore as Source ([#786](#786)) ([2bb790e](2bb790e)) * **sources/mongodb:** Add MongoDB Source ([#969](#969)) ([74dbd61](74dbd61)) * **tools/alloydb-wait-for-operation:** Add wait for operation tool with exponential backoff ([#920](#920)) ([3f6ec29](3f6ec29)) * **tools/mongodb-aggregate:** Add MongoDB `aggregate` Tools ([#977](#977)) ([bd399bb](bd399bb)) * **tools/mongodb-delete:** Add MongoDB `delete` Tools ([#974](#974)) ([78e9752](78e9752)) * **tools/mongodb-find:** Add MongoDB `find` Tools ([#970](#970)) ([a747475](a747475)) * **tools/mongodb-insert:** Add MongoDB `insert` Tools ([#975](#975)) ([4c63f0c](4c63f0c)) * **tools/mongodb-update:** Add MongoDB `update` Tools ([#972](#972)) ([dfde52c](dfde52c)) * **tools/neo4j-execute-cypher:** Add neo4j-execute-cypher for Neo4j sources ([#946](#946)) ([81d0505](81d0505)) * **tools/neo4j-schema:** Add neo4j-schema tool ([#978](#978)) ([be7db3d](be7db3d)) * **tools/wait:** Create wait for tool ([#885](#885)) ([ed5ef4c](ed5ef4c)) ### Bug Fixes * Fix document preview pipeline for forked PRs ([#950](#950)) ([481cc60](481cc60)) * **prebuilt/firestore:** Mark database field as required in the firestore prebuilt tools ([#959](#959)) ([15417d4](15417d4)) * **prebuilt/cloud-sql-mssql:** Correct source reference for execute_sql tool in cloud-sql-mssql.yaml prebuilt config ([#938](#938)) ([d16728e](d16728e)) * **prebuilt/cloud-sql-mysql:** Update list_table tool ([#924](#924)) ([2083ba5](2083ba5)) * Replace 'float' with 'number' in McpManifest ([#985](#985)) ([59e23e1](59e23e1)) * **server/api:** Add logger to context in tool invoke handler ([#891](#891)) ([8ce311f](8ce311f)) * **sources/looker:** Add agent tag to Looker API calls. ([#966](#966)) ([f55dd6f](f55dd6f)) * **tools/bigquery-execute-sql:** Ensure invoke always returns a non-null value ([#925](#925)) ([9a55b80](9a55b80)) * **tools/mysqlsql:** Unmarshal json data from database during invoke ([#979](#979)) ([ccc3498](ccc3498)), closes [#840](#840) --- 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 Teoh <45984206+Yuan325@users.noreply.github.com> c45390e
🤖 I have created a release *beep* *boop* --- ## [0.10.0](googleapis/genai-toolbox@v0.9.0...v0.10.0) (2025-07-25) ### Features * Add `Map` parameters support ([googleapis#928](googleapis#928)) ([4468bc9](googleapis@4468bc9)) * Add Dataplex source and tool ([googleapis#847](googleapis#847)) ([30c16a5](googleapis@30c16a5)) * Add Looker source and tool ([googleapis#923](googleapis#923)) ([c67e01b](googleapis@c67e01b)) * Add support for null optional parameter ([googleapis#802](googleapis#802)) ([a817b12](googleapis@a817b12)), closes [googleapis#736](googleapis#736) * **prebuilt/alloydb-admin-config:** Add alloydb control plane as a prebuilt config ([googleapis#937](googleapis#937)) ([0b28b72](googleapis@0b28b72)) * **prebuilt/mysql,prebuilt/mssql:** Add generic mysql and mssql prebuilt tools ([googleapis#983](googleapis#983)) ([c600c30](googleapis@c600c30)) * **server/mcp:** Support MCP version 2025-06-18 ([googleapis#898](googleapis#898)) ([313d3ca](googleapis@313d3ca)) * **sources/mssql:** Add support for encrypt connection parameter ([googleapis#874](googleapis#874)) ([14a868f](googleapis@14a868f)) * **sources/firestore:** Add Firestore as Source ([googleapis#786](googleapis#786)) ([2bb790e](googleapis@2bb790e)) * **sources/mongodb:** Add MongoDB Source ([googleapis#969](googleapis#969)) ([74dbd61](googleapis@74dbd61)) * **tools/alloydb-wait-for-operation:** Add wait for operation tool with exponential backoff ([googleapis#920](googleapis#920)) ([3f6ec29](googleapis@3f6ec29)) * **tools/mongodb-aggregate:** Add MongoDB `aggregate` Tools ([googleapis#977](googleapis#977)) ([bd399bb](googleapis@bd399bb)) * **tools/mongodb-delete:** Add MongoDB `delete` Tools ([googleapis#974](googleapis#974)) ([78e9752](googleapis@78e9752)) * **tools/mongodb-find:** Add MongoDB `find` Tools ([googleapis#970](googleapis#970)) ([a747475](googleapis@a747475)) * **tools/mongodb-insert:** Add MongoDB `insert` Tools ([googleapis#975](googleapis#975)) ([4c63f0c](googleapis@4c63f0c)) * **tools/mongodb-update:** Add MongoDB `update` Tools ([googleapis#972](googleapis#972)) ([dfde52c](googleapis@dfde52c)) * **tools/neo4j-execute-cypher:** Add neo4j-execute-cypher for Neo4j sources ([googleapis#946](googleapis#946)) ([81d0505](googleapis@81d0505)) * **tools/neo4j-schema:** Add neo4j-schema tool ([googleapis#978](googleapis#978)) ([be7db3d](googleapis@be7db3d)) * **tools/wait:** Create wait for tool ([googleapis#885](googleapis#885)) ([ed5ef4c](googleapis@ed5ef4c)) ### Bug Fixes * Fix document preview pipeline for forked PRs ([googleapis#950](googleapis#950)) ([481cc60](googleapis@481cc60)) * **prebuilt/firestore:** Mark database field as required in the firestore prebuilt tools ([googleapis#959](googleapis#959)) ([15417d4](googleapis@15417d4)) * **prebuilt/cloud-sql-mssql:** Correct source reference for execute_sql tool in cloud-sql-mssql.yaml prebuilt config ([googleapis#938](googleapis#938)) ([d16728e](googleapis@d16728e)) * **prebuilt/cloud-sql-mysql:** Update list_table tool ([googleapis#924](googleapis#924)) ([2083ba5](googleapis@2083ba5)) * Replace 'float' with 'number' in McpManifest ([googleapis#985](googleapis#985)) ([59e23e1](googleapis@59e23e1)) * **server/api:** Add logger to context in tool invoke handler ([googleapis#891](googleapis#891)) ([8ce311f](googleapis@8ce311f)) * **sources/looker:** Add agent tag to Looker API calls. ([googleapis#966](googleapis#966)) ([f55dd6f](googleapis@f55dd6f)) * **tools/bigquery-execute-sql:** Ensure invoke always returns a non-null value ([googleapis#925](googleapis#925)) ([9a55b80](googleapis@9a55b80)) * **tools/mysqlsql:** Unmarshal json data from database during invoke ([googleapis#979](googleapis#979)) ([ccc3498](googleapis@ccc3498)), closes [googleapis#840](googleapis#840) --- 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 Teoh <45984206+Yuan325@users.noreply.github.com> c45390e
Add support for Looker with the following prebuilt tools: