Skip to content

Conversation

duwenxin99
Copy link
Contributor

@duwenxin99 duwenxin99 commented Jul 18, 2025

support both generic and typed map. Config example:

 parameters:
      - name: user_scores
        type: map
        description: A map of user IDs to their scores. All scores must be integers.
        valueType: integer # This enforces the value type for all entries. Leave it blank for generic map

Represented as Object with additionalProperties in manifests.

Added a util function to convert json.Number (string type) to int/float types to address the problem where int/float values are converted to strings for the generic map.

@duwenxin99 duwenxin99 requested a review from a team as a code owner July 18, 2025 16:32
Copy link
Contributor

Copy link
Contributor

Copy link
Contributor

Copy link
Contributor

Copy link
Contributor

Copy link
Contributor

@duwenxin99 duwenxin99 merged commit 4468bc9 into main Jul 18, 2025
9 checks passed
@duwenxin99 duwenxin99 deleted the map-new branch July 18, 2025 21:19
Copy link
Contributor

🧨 Preview deployments removed.

github-actions bot pushed a commit that referenced this pull request Jul 18, 2025
support both generic and typed map. Config example:
```
 parameters:
      - name: user_scores
        type: map
        description: A map of user IDs to their scores. All scores must be integers.
        valueType: integer # This enforces the value type for all entries. Leave it blank for generic map

```
Represented as `Object` with `additionalProperties` in manifests.

Added a util function to convert json.Number (string type) to int/float
types to address the problem where int/float values are converted to
strings for the generic map. 4468bc9
github-actions bot pushed a commit to renovate-bot/googleapis-_-genai-toolbox that referenced this pull request Jul 18, 2025
support both generic and typed map. Config example:
```
 parameters:
      - name: user_scores
        type: map
        description: A map of user IDs to their scores. All scores must be integers.
        valueType: integer # This enforces the value type for all entries. Leave it blank for generic map

```
Represented as `Object` with `additionalProperties` in manifests.

Added a util function to convert json.Number (string type) to int/float
types to address the problem where int/float values are converted to
strings for the generic map. 4468bc9
Yuan325 added a commit that referenced this pull request Jul 25, 2025
🤖 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>
github-actions bot pushed a commit that referenced this pull request Jul 25, 2025
🤖 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
github-actions bot pushed a commit to renovate-bot/googleapis-_-genai-toolbox that referenced this pull request Jul 25, 2025
🤖 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
anubhav756 added a commit to googleapis/mcp-toolbox-sdk-python that referenced this pull request Aug 1, 2025
This PR introduces support for the `map` parameter type in the Python SDKs, aligning it with the recent MCP Toolbox server enhancements ([#928](googleapis/genai-toolbox#928)). This allows tools to define parameters that are key-value pairs, either as a generic map with mixed-type values or as a strictly typed map.

## Changes
* The `ParameterSchema` in `protocol.py` has been updated to include an optional `valueType` field.
* The internal `__get_type` method now correctly resolves the `map` type to the appropriate Python `dict` type hint:
  * `dict[str, Any]` for generic maps (when `valueType` is omitted).
  * `dict[str, <type>]` for typed maps (e.g., `dict[str, str]`, `dict[str, int]`).

## Testing
* Added extensive unit tests to `test_protocol.py` to ensure the `map` type is handled correctly.
* Test coverage includes:
  * Generic (untyped) maps.
  * Typed maps for `string`, `integer`, `float`, and `boolean`.
* Optional maps.
* Error handling for unsupported `valueType`.

> [!NOTE]
> No modifications were required in `toolbox-langchain` or `toolbox-llamaindex`. They inherit this new functionality directly from `toolbox-core`.
anubhav756 added a commit to googleapis/mcp-toolbox-sdk-python that referenced this pull request Aug 1, 2025
This PR introduces support for the `map` parameter type in the Python SDKs, aligning it with the recent MCP Toolbox server enhancements ([#928](googleapis/genai-toolbox#928)). This allows tools to define parameters that are key-value pairs, either as a generic map with mixed-type values or as a strictly typed map.

* The `ParameterSchema` in `protocol.py` has been updated to include an optional `valueType` field.
* The internal `__get_type` method now correctly resolves the `map` type to the appropriate Python `dict` type hint:
  * `dict[str, Any]` for generic maps (when `valueType` is omitted).
  * `dict[str, <type>]` for typed maps (e.g., `dict[str, str]`, `dict[str, int]`).

* Added extensive unit tests to `test_protocol.py` to ensure the `map` type is handled correctly.
* Test coverage includes:
  * Generic (untyped) maps.
  * Typed maps for `string`, `integer`, `float`, and `boolean`.
* Optional maps.
* Error handling for unsupported `valueType`.

> [!NOTE]
> No modifications were required in `toolbox-langchain` or `toolbox-llamaindex`. They inherit this new functionality directly from `toolbox-core`.
anubhav756 added a commit to googleapis/mcp-toolbox-sdk-python that referenced this pull request Aug 18, 2025
This PR introduces support for the `map` parameter type in the Python SDKs, aligning it with the recent MCP Toolbox server enhancements ([#928](googleapis/genai-toolbox#928)). This allows tools to define parameters that are key-value pairs, either as a generic map with mixed-type values or as a strictly typed map.

* The `ParameterSchema` in `protocol.py` has been updated to include an optional `valueType` field.
* The internal `__get_type` method now correctly resolves the `map` type to the appropriate Python `dict` type hint:
  * `dict[str, Any]` for generic maps (when `valueType` is omitted).
  * `dict[str, <type>]` for typed maps (e.g., `dict[str, str]`, `dict[str, int]`).

* Added extensive unit tests to `test_protocol.py` to ensure the `map` type is handled correctly.
* Test coverage includes:
  * Generic (untyped) maps.
  * Typed maps for `string`, `integer`, `float`, and `boolean`.
* Optional maps.
* Error handling for unsupported `valueType`.

> [!NOTE]
> No modifications were required in `toolbox-langchain` or `toolbox-llamaindex`. They inherit this new functionality directly from `toolbox-core`.
anubhav756 added a commit to googleapis/mcp-toolbox-sdk-python that referenced this pull request Aug 18, 2025
This PR introduces support for the `map` parameter type in the Python SDKs, aligning it with the recent MCP Toolbox server enhancements ([#928](googleapis/genai-toolbox#928)). This allows tools to define parameters that are key-value pairs, either as a generic map with mixed-type values or as a strictly typed map.

* The `ParameterSchema` in `protocol.py` has been updated to include an optional `valueType` field.
* The internal `__get_type` method now correctly resolves the `map` type to the appropriate Python `dict` type hint:
  * `dict[str, Any]` for generic maps (when `valueType` is omitted).
  * `dict[str, <type>]` for typed maps (e.g., `dict[str, str]`, `dict[str, int]`).

* Added extensive unit tests to `test_protocol.py` to ensure the `map` type is handled correctly.
* Test coverage includes:
  * Generic (untyped) maps.
  * Typed maps for `string`, `integer`, `float`, and `boolean`.
* Optional maps.
* Error handling for unsupported `valueType`.

> [!NOTE]
> No modifications were required in `toolbox-langchain` or `toolbox-llamaindex`. They inherit this new functionality directly from `toolbox-core`.
anubhav756 added a commit to googleapis/mcp-toolbox-sdk-python that referenced this pull request Aug 19, 2025
This PR introduces support for the `map` parameter type in the Python SDKs, aligning it with the recent MCP Toolbox server enhancements ([#928](googleapis/genai-toolbox#928)). This allows tools to define parameters that are key-value pairs, either as a generic map with mixed-type values or as a strictly typed map.

* The `ParameterSchema` in `protocol.py` has been updated to include an optional `valueType` field.
* The internal `__get_type` method now correctly resolves the `map` type to the appropriate Python `dict` type hint:
  * `dict[str, Any]` for generic maps (when `valueType` is omitted).
  * `dict[str, <type>]` for typed maps (e.g., `dict[str, str]`, `dict[str, int]`).

* Added extensive unit tests to `test_protocol.py` to ensure the `map` type is handled correctly.
* Test coverage includes:
  * Generic (untyped) maps.
  * Typed maps for `string`, `integer`, `float`, and `boolean`.
* Optional maps.
* Error handling for unsupported `valueType`.

> [!NOTE]
> No modifications were required in `toolbox-langchain` or `toolbox-llamaindex`. They inherit this new functionality directly from `toolbox-core`.
anubhav756 added a commit to googleapis/mcp-toolbox-sdk-python that referenced this pull request Aug 19, 2025
* feat(core): Add support for map parameter type

This PR introduces support for the `map` parameter type in the Python SDKs, aligning it with the recent MCP Toolbox server enhancements ([#928](googleapis/genai-toolbox#928)). This allows tools to define parameters that are key-value pairs, either as a generic map with mixed-type values or as a strictly typed map.

* The `ParameterSchema` in `protocol.py` has been updated to include an optional `valueType` field.
* The internal `__get_type` method now correctly resolves the `map` type to the appropriate Python `dict` type hint:
  * `dict[str, Any]` for generic maps (when `valueType` is omitted).
  * `dict[str, <type>]` for typed maps (e.g., `dict[str, str]`, `dict[str, int]`).

* Added extensive unit tests to `test_protocol.py` to ensure the `map` type is handled correctly.
* Test coverage includes:
  * Generic (untyped) maps.
  * Typed maps for `string`, `integer`, `float`, and `boolean`.
* Optional maps.
* Error handling for unsupported `valueType`.

> [!NOTE]
> No modifications were required in `toolbox-langchain` or `toolbox-llamaindex`. They inherit this new functionality directly from `toolbox-core`.

* chore: Add integration tests

* chore: Delint

* chore: Update toolbox version that supports map params for integration tests

* fix: Fix the param type to 'object' for map params

* fix: Update SDK code to read from the correct AdditionalProperties key

* chore: Delint

* chore: Fix e2e tests

* fix: Fix e2e tests

* fix(langchain): Fix e2e tests

* fix(llamaindex): Fix e2e tests

* chore: Update toolbox server version for integration tests

* chore: Update secret version for accessing correct tools manifest

* fix: Fix additionalProperties small case update

* fix: Create schema for additional properties for object type params

* chore: Refactor basic types to reduce code repetition
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants