Skip to content

fix: return object_details as structured JSON in Spanner list tables tool#1894

Merged
averikitsch merged 7 commits into
mainfrom
nested-json-in-spanner-list-tables
Nov 14, 2025
Merged

fix: return object_details as structured JSON in Spanner list tables tool#1894
averikitsch merged 7 commits into
mainfrom
nested-json-in-spanner-list-tables

Conversation

@gRedHeadphone

Copy link
Copy Markdown
Contributor

Description

Unmarshal object_details json string into map to make response have nested json in spannerlisttables instead of nested JSON string

PR Checklist

  • Make sure you reviewed
    CONTRIBUTING.md
  • Make sure to open an issue as a
    bug/issue
    before writing your code! That way we can discuss the change, evaluate
    designs, and agree on the general idea
  • Ensure the tests and linter pass
  • Code coverage does not decrease (if any source code was changed)
  • Appropriate docs were updated (if necessary)
  • Make sure to add ! if this involve a breaking change

🛠️ Fixes #1838

@gRedHeadphone gRedHeadphone requested a review from a team November 7, 2025 05:47
@github-actions

github-actions Bot commented Nov 7, 2025

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Nov 7, 2025

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@gRedHeadphone

gRedHeadphone commented Nov 13, 2025

Copy link
Copy Markdown
Contributor Author

agent readability of output comparision

adk agent

queries = [
    "can you list all table name simple?",
    "can you get me detailed info about Products?",
]
main branch

respose to first query

Here are the table names in your Spanner database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

respose to second query

Here are the detailed schema information for the table Products:

Schema Name: (empty string)
Object Name: Products
Object Type: BASE TABLE

Columns:

  • ProductID (INT64, NOT NULL)
  • ProductName (STRING(255), NULLABLE)
  • Description (STRING(MAX), NULLABLE)
  • Price (NUMERIC, NULLABLE)
  • Category (STRING(100), NULLABLE)
  • Manufacturer (STRING(100), NULLABLE)
  • UnitsInStock (INT64, NULLABLE)

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID (CHECK, ProductID IS NOT NULL)
  • PK_Products (PRIMARY KEY, PRIMARY KEY (ProductID))

Indexes:

  • PRIMARY_KEY (PRIMARY_KEY, UNIQUE, index key column: ProductID)
nested json

respose to first query

Here are the table names in your database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

respose to second query

Here are the details for the Products table:

  • Columns:
    • ProductID (INT64, NOT NULL)
    • ProductName (STRING(255), NULLABLE)
    • Description (STRING(MAX), NULLABLE)
    • Price (NUMERIC, NULLABLE)
    • Category (STRING(100), NULLABLE)
    • Manufacturer (STRING(100), NULLABLE)
    • UnitsInStock (INT64, NULLABLE)
  • Constraints:
    • PK_Products: PRIMARY KEY (ProductID)
    • CK_IS_NOT_NULL_Products_ProductID: CHECK (ProductID IS NOT NULL)
  • Indexes:
    • PRIMARY_KEY: UNIQUE INDEX on ProductID

gemini cli

main branch

can you list all table names in spanner

✦ The table names in Spanner are: Account, AccountTransferAccount, Accounts, Customers, Follows,
Knows, Person, Persons, Products.

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │
│ │
│ {"object_details":"{"schema_name":"","object_name":"Products","object_type":"BAS │
│ E │
│ TABLE","columns":[{"column_name":"ProductID","data_type":"INT64","ordinal_posit │
│ ion":1,"is_not_nullable":true,"column_default":null},{"column_name":"ProductName", │
│ "data_type":"STRING(255)","ordinal_position":2,"is_not_nullable":false,"column_def │
│ ault":null},{"column_name":"Description","data_type":"STRING(MAX)","ordinal_posit │
│ ion":3,"is_not_nullable":false,"column_default":null},{"column_name":"Price","dat │
│ a_type":"NUMERIC","ordinal_position":4,"is_not_nullable":false,"column_default":nu │
│ ll},{"column_name":"Category","data_type":"STRING(100)","ordinal_position":5,"is │
not_nullable":false,"column_default":null},{"column_name":"Manufacturer","data_typ │
│ e":"STRING(100)","ordinal_position":6,"is_not_nullable":false,"column_default":nul │
│ l},{"column_name":"UnitsInStock","data_type":"INT64","ordinal_position":7,"is_no │
│ t_nullable":false,"column_default":null}],"constraints":[{"constraint_name":"CK_IS

│ NOT_NULL_Products_ProductID","constraint_type":"CHECK","constraint_definition":"Pro │
│ ductID IS NOT │
│ NULL","constraint_columns":[""],"foreign_key_referenced_table":null,"foreign_key_re │
│ ferenced_columns":[""]},{"constraint_name":"PK_Products","constraint_type":"PRIMA │
│ RY KEY","constraint_definition":"PRIMARY KEY │
│ (ProductID)","constraint_columns":["ProductID"],"foreign_key_referenced_table":null, │
│ "foreign_key_referenced_columns":[""]}],"indexes":[{"index_name":"PRIMARY_KEY"," │
│ index_type":"PRIMARY_KEY","is_unique":true,"is_null_filtered":false,"interleaved_in │
│ _table":"","index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}], │
│ "storing_columns":[]}]}","object_name":"Products","schema_name":""} │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ The detailed information for the Products table is as follows:

Table Name: Products
Object Type: BASE TABLE

Columns:

  • ProductID: INT64, Not Nullable, Ordinal Position: 1
  • ProductName: STRING(255), Nullable, Ordinal Position: 2
  • Description: STRING(MAX), Nullable, Ordinal Position: 3
  • Price: NUMERIC, Nullable, Ordinal Position: 4
  • Category: STRING(100), Nullable, Ordinal Position: 5
  • Manufacturer: STRING(100), Nullable, Ordinal Position: 6
  • UnitsInStock: INT64, Nullable, Ordinal Position: 7

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID: CHECK constraint, definition: ProductID IS NOT NULL
  • PK_Products: PRIMARY KEY constraint, definition: PRIMARY KEY (ProductID), columns: ProductID

Indexes:

  • PRIMARY_KEY: PRIMARY KEY type, unique: true, null filtered: false, key columns: ProductID
    (ascending)
nested json

can you list all table names in spanner

╭────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✓ list_tables (mcptoolbox MCP Server) {"output_format":"simple"} │
│ │
│ {"object_details":{"name":"Account"},"object_name":"Account","schema_name":""} │
│ {"object_details":{"name":"AccountTransferAccount"},"object_name":"AccountTransferAccount", │
│ "schema_name":""} │
│ {"object_details":{"name":"Accounts"},"object_name":"Accounts","schema_name":""} │
│ {"object_details":{"name":"Customers"},"object_name":"Customers","schema_name":""} │
│ {"object_details":{"name":"Follows"},"object_name":"Follows","schema_name":""} │
│ {"object_details":{"name":"Knows"},"object_name":"Knows","schema_name":""} │
│ {"object_details":{"name":"Person"},"object_name":"Person","schema_name":""} │
│ {"object_details":{"name":"Persons"},"object_name":"Persons","schema_name":""} │
│ {"object_details":{"name":"Products"},"object_name":"Products","schema_name":""} │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ - Account

  • AccountTransferAccount
  • Accounts
  • Customers
  • Follows
  • Knows
  • Person
  • Persons
  • Products

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │
│ │
│ {"object_details":{"columns":[{"column_default":null,"column_name":"ProductID","data_type": │
│ "INT64","is_not_nullable":true,"ordinal_position":1},{"column_default":null,"column_name":" │
│ ProductName","data_type":"STRING(255)","is_not_nullable":false,"ordinal_position":2},{"colu │
│ mn_default":null,"column_name":"Description","data_type":"STRING(MAX)","is_not_nullable":fa │
│ lse,"ordinal_position":3},{"column_default":null,"column_name":"Price","data_type":"NUMERIC │
│ ","is_not_nullable":false,"ordinal_position":4},{"column_default":null,"column_name":"Categ │
│ ory","data_type":"STRING(100)","is_not_nullable":false,"ordinal_position":5},{"column_defau │
│ lt":null,"column_name":"Manufacturer","data_type":"STRING(100)","is_not_nullable":false,"or │
│ dinal_position":6},{"column_default":null,"column_name":"UnitsInStock","data_type":"INT64", │
│ "is_not_nullable":false,"ordinal_position":7}],"constraints":[{"constraint_columns":[""],"c │
│ onstraint_definition":"ProductID IS NOT │
│ NULL","constraint_name":"CK_IS_NOT_NULL_Products_ProductID","constraint_type":"CHECK","fore │
│ ign_key_referenced_columns":[""],"foreign_key_referenced_table":null},{"constraint_columns" │
│ :["ProductID"],"constraint_definition":"PRIMARY KEY │
│ (ProductID)","constraint_name":"PK_Products","constraint_type":"PRIMARY │
│ KEY","foreign_key_referenced_columns":[""],"foreign_key_referenced_table":null}],"indexes": │
│ [{"index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}],"index_name":"PRIMARY_ │
│ KEY","index_type":"PRIMARY_KEY","interleaved_in_table":"","is_null_filtered":false,"is_uniq │
│ ue":true,"storing_columns":[]}],"object_name":"Products","object_type":"BASE │
│ TABLE","schema_name":""},"object_name":"Products","schema_name":""} │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

1 {
2 "object_details": {
3 "columns": [
4 {
5 "column_default": null,
6 "column_name": "ProductID",
7 "data_type": "INT64",
8 "is_not_nullable": true,
9 "ordinal_position": 1
10 },
11 {
12 "column_default": null,
13 "column_name": "ProductName",
14 "data_type": "STRING(255)",
15 "is_not_nullable": false,
16 "ordinal_position": 2
17 },
18 {
19 "column_default": null,
20 "column_name": "Description",
21 "data_type": "STRING(MAX)",
22 "is_not_nullable": false,
23 "ordinal_position": 3
24 },
25 {
26 "column_default": null,
27 "column_name": "Price",
28 "data_type": "NUMERIC",
29 "is_not_nullable": false,
30 "ordinal_position": 4
31 },
32 {
33 "column_default": null,
34 "column_name": "Category",
35 "data_type": "STRING(100)",
36 "is_not_nullable": false,
37 "ordinal_position": 5
38 },
39 {
40 "column_default": null,
41 "column_name": "Manufacturer",
42 "data_type": "STRING(100)",
43 "is_not_nullable": false,
44 "ordinal_position": 6
45 },
46 {
47 "column_default": null,
48 "column_name": "UnitsInStock",
49 "data_type": "INT64",
50 "is_not_nullable": false,
51 "ordinal_position": 7
52 }
53 ],
54 "constraints": [
55 {
56 "constraint_columns": [
57 ""
58 ],
59 "constraint_definition": "ProductID IS NOT NULL",
60 "constraint_name": "CK_IS_NOT_NULL_Products_ProductID",
61 "constraint_type": "CHECK",
62 "foreign_key_referenced_columns": [
63 ""
64 ],
65 "foreign_key_referenced_table": null
66 },
67 {
68 "constraint_columns": [
69 "ProductID"
70 ],
71 "constraint_definition": "PRIMARY KEY (ProductID)",
72 "constraint_name": "PK_Products",
73 "constraint_type": "PRIMARY KEY",
74 "foreign_key_referenced_columns": [
75 ""
76 ],
77 "foreign_key_referenced_table": null
78 }
79 ],
80 "indexes": [
81 {
82 "index_key_columns": [
83 {
84 "column_name": "ProductID",
85 "ordering": "ASC"
86 }
87 ],
88 "index_name": "PRIMARY_KEY",
89 "index_type": "PRIMARY_KEY",
90 "interleaved_in_table": "",
91 "is_null_filtered": false,
92 "is_unique": true,
93 "storing_columns": []
94 }
95 ],
96 "object_name": "Products",
97 "object_type": "BASE TABLE",
98 "schema_name": ""
99 },
100 "object_name": "Products",
101 "schema_name": ""
102 }
The Products table has the following columns:

  • ProductID: INT64, not nullable, primary key
  • ProductName: STRING(255)
  • Description: STRING(MAX)
  • Price: NUMERIC
  • Category: STRING(100)
  • Manufacturer: STRING(100)
  • UnitsInStock: INT64

It has a primary key constraint on ProductID and a check constraint ensuring ProductID is not
null. There is also a primary key index on ProductID.

@twishabansal

twishabansal commented Nov 14, 2025

Copy link
Copy Markdown
Contributor

agent readability of output comparision

adk agent

queries = [
    "can you list all table name simple?",
    "can you get me detailed info about Products?",
]

main branch

A1 Here are the table names in your Spanner database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

A2 Here are the detailed schema information for the table Products:

Schema Name: (empty string) Object Name: Products Object Type: BASE TABLE

Columns:

  • ProductID (INT64, NOT NULL)
  • ProductName (STRING(255), NULLABLE)
  • Description (STRING(MAX), NULLABLE)
  • Price (NUMERIC, NULLABLE)
  • Category (STRING(100), NULLABLE)
  • Manufacturer (STRING(100), NULLABLE)
  • UnitsInStock (INT64, NULLABLE)

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID (CHECK, ProductID IS NOT NULL)
  • PK_Products (PRIMARY KEY, PRIMARY KEY (ProductID))

Indexes:

  • PRIMARY_KEY (PRIMARY_KEY, UNIQUE, index key column: ProductID)

nested json

A1 Here are the table names in your database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

A2 Here are the details for the Products table:

  • Columns:

    • ProductID (INT64, NOT NULL)
    • ProductName (STRING(255), NULLABLE)
    • Description (STRING(MAX), NULLABLE)
    • Price (NUMERIC, NULLABLE)
    • Category (STRING(100), NULLABLE)
    • Manufacturer (STRING(100), NULLABLE)
    • UnitsInStock (INT64, NULLABLE)
  • Constraints:

    • PK_Products: PRIMARY KEY (ProductID)
    • CK_IS_NOT_NULL_Products_ProductID: CHECK (ProductID IS NOT NULL)
  • Indexes:

    • PRIMARY_KEY: UNIQUE INDEX on ProductID

gemini cli

main branch

can you list all table names in spanner

✦ The table names in Spanner are: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, Products.

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │ │ │ │ {"object_details":"{"schema_name":"","object_name":"Products","object_type":"BAS │ │ E │ │ TABLE","columns":[{"column_name":"ProductID","data_type":"INT64","ordinal_posit │ │ ion":1,"is_not_nullable":true,"column_default":null},{"column_name":"ProductName", │ │ "data_type":"STRING(255)","ordinal_position":2,"is_not_nullable":false,"column_def │ │ ault":null},{"column_name":"Description","data_type":"STRING(MAX)","ordinal_posit │ │ ion":3,"is_not_nullable":false,"column_default":null},{"column_name":"Price","dat │ │ a_type":"NUMERIC","ordinal_position":4,"is_not_nullable":false,"column_default":nu │ │ ll},{"column_name":"Category","data_type":"STRING(100)","ordinal_position":5,"is │ │ not_nullable":false,"column_default":null},{"column_name":"Manufacturer","data_typ │ │ e":"STRING(100)","ordinal_position":6,"is_not_nullable":false,"column_default":nul │ │ l},{"column_name":"UnitsInStock","data_type":"INT64","ordinal_position":7,"is_no │ │ t_nullable":false,"column_default":null}],"constraints":[{"constraint_name":"CK_IS │ │ NOT_NULL_Products_ProductID","constraint_type":"CHECK","constraint_definition":"Pro │ │ ductID IS NOT │ │ NULL","constraint_columns":[""],"foreign_key_referenced_table":null,"foreign_key_re │ │ ferenced_columns":[""]},{"constraint_name":"PK_Products","constraint_type":"PRIMA │ │ RY KEY","constraint_definition":"PRIMARY KEY │ │ (ProductID)","constraint_columns":["ProductID"],"foreign_key_referenced_table":null, │ │ "foreign_key_referenced_columns":[""]}],"indexes":[{"index_name":"PRIMARY_KEY"," │ │ index_type":"PRIMARY_KEY","is_unique":true,"is_null_filtered":false,"interleaved_in │ │ _table":"","index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}], │ │ "storing_columns":[]}]}","object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ The detailed information for the Products table is as follows:

Table Name: Products Object Type: BASE TABLE

Columns:

  • ProductID: INT64, Not Nullable, Ordinal Position: 1
  • ProductName: STRING(255), Nullable, Ordinal Position: 2
  • Description: STRING(MAX), Nullable, Ordinal Position: 3
  • Price: NUMERIC, Nullable, Ordinal Position: 4
  • Category: STRING(100), Nullable, Ordinal Position: 5
  • Manufacturer: STRING(100), Nullable, Ordinal Position: 6
  • UnitsInStock: INT64, Nullable, Ordinal Position: 7

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID: CHECK constraint, definition: ProductID IS NOT NULL
  • PK_Products: PRIMARY KEY constraint, definition: PRIMARY KEY (ProductID), columns: ProductID

Indexes:

  • PRIMARY_KEY: PRIMARY KEY type, unique: true, null filtered: false, key columns: ProductID
    (ascending)

nested json

can you list all table names in spanner

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"output_format":"simple"} │ │ │ │ {"object_details":{"name":"Account"},"object_name":"Account","schema_name":""} │ │ {"object_details":{"name":"AccountTransferAccount"},"object_name":"AccountTransferAccount", │ │ "schema_name":""} │ │ {"object_details":{"name":"Accounts"},"object_name":"Accounts","schema_name":""} │ │ {"object_details":{"name":"Customers"},"object_name":"Customers","schema_name":""} │ │ {"object_details":{"name":"Follows"},"object_name":"Follows","schema_name":""} │ │ {"object_details":{"name":"Knows"},"object_name":"Knows","schema_name":""} │ │ {"object_details":{"name":"Person"},"object_name":"Person","schema_name":""} │ │ {"object_details":{"name":"Persons"},"object_name":"Persons","schema_name":""} │ │ {"object_details":{"name":"Products"},"object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ - Account

  • AccountTransferAccount
  • Accounts
  • Customers
  • Follows
  • Knows
  • Person
  • Persons
  • Products

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │ │ │ │ {"object_details":{"columns":[{"column_default":null,"column_name":"ProductID","data_type": │ │ "INT64","is_not_nullable":true,"ordinal_position":1},{"column_default":null,"column_name":" │ │ ProductName","data_type":"STRING(255)","is_not_nullable":false,"ordinal_position":2},{"colu │ │ mn_default":null,"column_name":"Description","data_type":"STRING(MAX)","is_not_nullable":fa │ │ lse,"ordinal_position":3},{"column_default":null,"column_name":"Price","data_type":"NUMERIC │ │ ","is_not_nullable":false,"ordinal_position":4},{"column_default":null,"column_name":"Categ │ │ ory","data_type":"STRING(100)","is_not_nullable":false,"ordinal_position":5},{"column_defau │ │ lt":null,"column_name":"Manufacturer","data_type":"STRING(100)","is_not_nullable":false,"or │ │ dinal_position":6},{"column_default":null,"column_name":"UnitsInStock","data_type":"INT64", │ │ "is_not_nullable":false,"ordinal_position":7}],"constraints":[{"constraint_columns":[""],"c │ │ onstraint_definition":"ProductID IS NOT │ │ NULL","constraint_name":"CK_IS_NOT_NULL_Products_ProductID","constraint_type":"CHECK","fore │ │ ign_key_referenced_columns":[""],"foreign_key_referenced_table":null},{"constraint_columns" │ │ :["ProductID"],"constraint_definition":"PRIMARY KEY │ │ (ProductID)","constraint_name":"PK_Products","constraint_type":"PRIMARY │ │ KEY","foreign_key_referenced_columns":[""],"foreign_key_referenced_table":null}],"indexes": │ │ [{"index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}],"index_name":"PRIMARY_ │ │ KEY","index_type":"PRIMARY_KEY","interleaved_in_table":"","is_null_filtered":false,"is_uniq │ │ ue":true,"storing_columns":[]}],"object_name":"Products","object_type":"BASE │ │ TABLE","schema_name":""},"object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ 1 { 2 "object_details": { 3 "columns": [ 4 { 5 "column_default": null, 6 "column_name": "ProductID", 7 "data_type": "INT64", 8 "is_not_nullable": true, 9 "ordinal_position": 1 10 }, 11 { 12 "column_default": null, 13 "column_name": "ProductName", 14 "data_type": "STRING(255)", 15 "is_not_nullable": false, 16 "ordinal_position": 2 17 }, 18 { 19 "column_default": null, 20 "column_name": "Description", 21 "data_type": "STRING(MAX)", 22 "is_not_nullable": false, 23 "ordinal_position": 3 24 }, 25 { 26 "column_default": null, 27 "column_name": "Price", 28 "data_type": "NUMERIC", 29 "is_not_nullable": false, 30 "ordinal_position": 4 31 }, 32 { 33 "column_default": null, 34 "column_name": "Category", 35 "data_type": "STRING(100)", 36 "is_not_nullable": false, 37 "ordinal_position": 5 38 }, 39 { 40 "column_default": null, 41 "column_name": "Manufacturer", 42 "data_type": "STRING(100)", 43 "is_not_nullable": false, 44 "ordinal_position": 6 45 }, 46 { 47 "column_default": null, 48 "column_name": "UnitsInStock", 49 "data_type": "INT64", 50 "is_not_nullable": false, 51 "ordinal_position": 7 52 } 53 ], 54 "constraints": [ 55 { 56 "constraint_columns": [ 57 "" 58 ], 59 "constraint_definition": "ProductID IS NOT NULL", 60 "constraint_name": "CK_IS_NOT_NULL_Products_ProductID", 61 "constraint_type": "CHECK", 62 "foreign_key_referenced_columns": [ 63 "" 64 ], 65 "foreign_key_referenced_table": null 66 }, 67 { 68 "constraint_columns": [ 69 "ProductID" 70 ], 71 "constraint_definition": "PRIMARY KEY (ProductID)", 72 "constraint_name": "PK_Products", 73 "constraint_type": "PRIMARY KEY", 74 "foreign_key_referenced_columns": [ 75 "" 76 ], 77 "foreign_key_referenced_table": null 78 } 79 ], 80 "indexes": [ 81 { 82 "index_key_columns": [ 83 { 84 "column_name": "ProductID", 85 "ordering": "ASC" 86 } 87 ], 88 "index_name": "PRIMARY_KEY", 89 "index_type": "PRIMARY_KEY", 90 "interleaved_in_table": "", 91 "is_null_filtered": false, 92 "is_unique": true, 93 "storing_columns": [] 94 } 95 ], 96 "object_name": "Products", 97 "object_type": "BASE TABLE", 98 "schema_name": "" 99 }, 100 "object_name": "Products", 101 "schema_name": "" 102 } The Products table has the following columns:

  • ProductID: INT64, not nullable, primary key
  • ProductName: STRING(255)
  • Description: STRING(MAX)
  • Price: NUMERIC
  • Category: STRING(100)
  • Manufacturer: STRING(100)
  • UnitsInStock: INT64

It has a primary key constraint on ProductID and a check constraint ensuring ProductID is not null. There is also a primary key index on ProductID.

@gRedHeadphone please make the following changes:

  • Add a conclusion to your findings
  • Reformat all logs in code blocks using backticks for easy readability

It would also be nice to move this discussion to the issue. This way, the PR can stay focussed on the code and basic design while the issue contains all the discussions and decisions for future reference.

@twishabansal

Copy link
Copy Markdown
Contributor

agent readability of output comparision

adk agent

queries = [
    "can you list all table name simple?",
    "can you get me detailed info about Products?",
]

main branch

A1 Here are the table names in your Spanner database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

A2 Here are the detailed schema information for the table Products:

Schema Name: (empty string) Object Name: Products Object Type: BASE TABLE

Columns:

  • ProductID (INT64, NOT NULL)
  • ProductName (STRING(255), NULLABLE)
  • Description (STRING(MAX), NULLABLE)
  • Price (NUMERIC, NULLABLE)
  • Category (STRING(100), NULLABLE)
  • Manufacturer (STRING(100), NULLABLE)
  • UnitsInStock (INT64, NULLABLE)

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID (CHECK, ProductID IS NOT NULL)
  • PK_Products (PRIMARY KEY, PRIMARY KEY (ProductID))

Indexes:

  • PRIMARY_KEY (PRIMARY_KEY, UNIQUE, index key column: ProductID)

nested json

A1 Here are the table names in your database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

A2 Here are the details for the Products table:

  • Columns:

    • ProductID (INT64, NOT NULL)
    • ProductName (STRING(255), NULLABLE)
    • Description (STRING(MAX), NULLABLE)
    • Price (NUMERIC, NULLABLE)
    • Category (STRING(100), NULLABLE)
    • Manufacturer (STRING(100), NULLABLE)
    • UnitsInStock (INT64, NULLABLE)
  • Constraints:

    • PK_Products: PRIMARY KEY (ProductID)
    • CK_IS_NOT_NULL_Products_ProductID: CHECK (ProductID IS NOT NULL)
  • Indexes:

    • PRIMARY_KEY: UNIQUE INDEX on ProductID

gemini cli

main branch

can you list all table names in spanner

✦ The table names in Spanner are: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, Products.

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │ │ │ │ {"object_details":"{"schema_name":"","object_name":"Products","object_type":"BAS │ │ E │ │ TABLE","columns":[{"column_name":"ProductID","data_type":"INT64","ordinal_posit │ │ ion":1,"is_not_nullable":true,"column_default":null},{"column_name":"ProductName", │ │ "data_type":"STRING(255)","ordinal_position":2,"is_not_nullable":false,"column_def │ │ ault":null},{"column_name":"Description","data_type":"STRING(MAX)","ordinal_posit │ │ ion":3,"is_not_nullable":false,"column_default":null},{"column_name":"Price","dat │ │ a_type":"NUMERIC","ordinal_position":4,"is_not_nullable":false,"column_default":nu │ │ ll},{"column_name":"Category","data_type":"STRING(100)","ordinal_position":5,"is │ │ not_nullable":false,"column_default":null},{"column_name":"Manufacturer","data_typ │ │ e":"STRING(100)","ordinal_position":6,"is_not_nullable":false,"column_default":nul │ │ l},{"column_name":"UnitsInStock","data_type":"INT64","ordinal_position":7,"is_no │ │ t_nullable":false,"column_default":null}],"constraints":[{"constraint_name":"CK_IS │ │ NOT_NULL_Products_ProductID","constraint_type":"CHECK","constraint_definition":"Pro │ │ ductID IS NOT │ │ NULL","constraint_columns":[""],"foreign_key_referenced_table":null,"foreign_key_re │ │ ferenced_columns":[""]},{"constraint_name":"PK_Products","constraint_type":"PRIMA │ │ RY KEY","constraint_definition":"PRIMARY KEY │ │ (ProductID)","constraint_columns":["ProductID"],"foreign_key_referenced_table":null, │ │ "foreign_key_referenced_columns":[""]}],"indexes":[{"index_name":"PRIMARY_KEY"," │ │ index_type":"PRIMARY_KEY","is_unique":true,"is_null_filtered":false,"interleaved_in │ │ _table":"","index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}], │ │ "storing_columns":[]}]}","object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ The detailed information for the Products table is as follows:

Table Name: Products Object Type: BASE TABLE

Columns:

  • ProductID: INT64, Not Nullable, Ordinal Position: 1
  • ProductName: STRING(255), Nullable, Ordinal Position: 2
  • Description: STRING(MAX), Nullable, Ordinal Position: 3
  • Price: NUMERIC, Nullable, Ordinal Position: 4
  • Category: STRING(100), Nullable, Ordinal Position: 5
  • Manufacturer: STRING(100), Nullable, Ordinal Position: 6
  • UnitsInStock: INT64, Nullable, Ordinal Position: 7

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID: CHECK constraint, definition: ProductID IS NOT NULL
  • PK_Products: PRIMARY KEY constraint, definition: PRIMARY KEY (ProductID), columns: ProductID

Indexes:

  • PRIMARY_KEY: PRIMARY KEY type, unique: true, null filtered: false, key columns: ProductID
    (ascending)

nested json

can you list all table names in spanner

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"output_format":"simple"} │ │ │ │ {"object_details":{"name":"Account"},"object_name":"Account","schema_name":""} │ │ {"object_details":{"name":"AccountTransferAccount"},"object_name":"AccountTransferAccount", │ │ "schema_name":""} │ │ {"object_details":{"name":"Accounts"},"object_name":"Accounts","schema_name":""} │ │ {"object_details":{"name":"Customers"},"object_name":"Customers","schema_name":""} │ │ {"object_details":{"name":"Follows"},"object_name":"Follows","schema_name":""} │ │ {"object_details":{"name":"Knows"},"object_name":"Knows","schema_name":""} │ │ {"object_details":{"name":"Person"},"object_name":"Person","schema_name":""} │ │ {"object_details":{"name":"Persons"},"object_name":"Persons","schema_name":""} │ │ {"object_details":{"name":"Products"},"object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ - Account

  • AccountTransferAccount
  • Accounts
  • Customers
  • Follows
  • Knows
  • Person
  • Persons
  • Products

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │ │ │ │ {"object_details":{"columns":[{"column_default":null,"column_name":"ProductID","data_type": │ │ "INT64","is_not_nullable":true,"ordinal_position":1},{"column_default":null,"column_name":" │ │ ProductName","data_type":"STRING(255)","is_not_nullable":false,"ordinal_position":2},{"colu │ │ mn_default":null,"column_name":"Description","data_type":"STRING(MAX)","is_not_nullable":fa │ │ lse,"ordinal_position":3},{"column_default":null,"column_name":"Price","data_type":"NUMERIC │ │ ","is_not_nullable":false,"ordinal_position":4},{"column_default":null,"column_name":"Categ │ │ ory","data_type":"STRING(100)","is_not_nullable":false,"ordinal_position":5},{"column_defau │ │ lt":null,"column_name":"Manufacturer","data_type":"STRING(100)","is_not_nullable":false,"or │ │ dinal_position":6},{"column_default":null,"column_name":"UnitsInStock","data_type":"INT64", │ │ "is_not_nullable":false,"ordinal_position":7}],"constraints":[{"constraint_columns":[""],"c │ │ onstraint_definition":"ProductID IS NOT │ │ NULL","constraint_name":"CK_IS_NOT_NULL_Products_ProductID","constraint_type":"CHECK","fore │ │ ign_key_referenced_columns":[""],"foreign_key_referenced_table":null},{"constraint_columns" │ │ :["ProductID"],"constraint_definition":"PRIMARY KEY │ │ (ProductID)","constraint_name":"PK_Products","constraint_type":"PRIMARY │ │ KEY","foreign_key_referenced_columns":[""],"foreign_key_referenced_table":null}],"indexes": │ │ [{"index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}],"index_name":"PRIMARY_ │ │ KEY","index_type":"PRIMARY_KEY","interleaved_in_table":"","is_null_filtered":false,"is_uniq │ │ ue":true,"storing_columns":[]}],"object_name":"Products","object_type":"BASE │ │ TABLE","schema_name":""},"object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ 1 { 2 "object_details": { 3 "columns": [ 4 { 5 "column_default": null, 6 "column_name": "ProductID", 7 "data_type": "INT64", 8 "is_not_nullable": true, 9 "ordinal_position": 1 10 }, 11 { 12 "column_default": null, 13 "column_name": "ProductName", 14 "data_type": "STRING(255)", 15 "is_not_nullable": false, 16 "ordinal_position": 2 17 }, 18 { 19 "column_default": null, 20 "column_name": "Description", 21 "data_type": "STRING(MAX)", 22 "is_not_nullable": false, 23 "ordinal_position": 3 24 }, 25 { 26 "column_default": null, 27 "column_name": "Price", 28 "data_type": "NUMERIC", 29 "is_not_nullable": false, 30 "ordinal_position": 4 31 }, 32 { 33 "column_default": null, 34 "column_name": "Category", 35 "data_type": "STRING(100)", 36 "is_not_nullable": false, 37 "ordinal_position": 5 38 }, 39 { 40 "column_default": null, 41 "column_name": "Manufacturer", 42 "data_type": "STRING(100)", 43 "is_not_nullable": false, 44 "ordinal_position": 6 45 }, 46 { 47 "column_default": null, 48 "column_name": "UnitsInStock", 49 "data_type": "INT64", 50 "is_not_nullable": false, 51 "ordinal_position": 7 52 } 53 ], 54 "constraints": [ 55 { 56 "constraint_columns": [ 57 "" 58 ], 59 "constraint_definition": "ProductID IS NOT NULL", 60 "constraint_name": "CK_IS_NOT_NULL_Products_ProductID", 61 "constraint_type": "CHECK", 62 "foreign_key_referenced_columns": [ 63 "" 64 ], 65 "foreign_key_referenced_table": null 66 }, 67 { 68 "constraint_columns": [ 69 "ProductID" 70 ], 71 "constraint_definition": "PRIMARY KEY (ProductID)", 72 "constraint_name": "PK_Products", 73 "constraint_type": "PRIMARY KEY", 74 "foreign_key_referenced_columns": [ 75 "" 76 ], 77 "foreign_key_referenced_table": null 78 } 79 ], 80 "indexes": [ 81 { 82 "index_key_columns": [ 83 { 84 "column_name": "ProductID", 85 "ordering": "ASC" 86 } 87 ], 88 "index_name": "PRIMARY_KEY", 89 "index_type": "PRIMARY_KEY", 90 "interleaved_in_table": "", 91 "is_null_filtered": false, 92 "is_unique": true, 93 "storing_columns": [] 94 } 95 ], 96 "object_name": "Products", 97 "object_type": "BASE TABLE", 98 "schema_name": "" 99 }, 100 "object_name": "Products", 101 "schema_name": "" 102 } The Products table has the following columns:

  • ProductID: INT64, not nullable, primary key
  • ProductName: STRING(255)
  • Description: STRING(MAX)
  • Price: NUMERIC
  • Category: STRING(100)
  • Manufacturer: STRING(100)
  • UnitsInStock: INT64

It has a primary key constraint on ProductID and a check constraint ensuring ProductID is not null. There is also a primary key index on ProductID.

Why does A2 for main branch have this:

Schema Name: (empty string)
Object Name: Products
Object Type: BASE TABLE

but not the A2 for the nested json?

@twishabansal

Copy link
Copy Markdown
Contributor

agent readability of output comparision

adk agent

queries = [
    "can you list all table name simple?",
    "can you get me detailed info about Products?",
]

main branch

A1 Here are the table names in your Spanner database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

A2 Here are the detailed schema information for the table Products:

Schema Name: (empty string) Object Name: Products Object Type: BASE TABLE

Columns:

  • ProductID (INT64, NOT NULL)
  • ProductName (STRING(255), NULLABLE)
  • Description (STRING(MAX), NULLABLE)
  • Price (NUMERIC, NULLABLE)
  • Category (STRING(100), NULLABLE)
  • Manufacturer (STRING(100), NULLABLE)
  • UnitsInStock (INT64, NULLABLE)

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID (CHECK, ProductID IS NOT NULL)
  • PK_Products (PRIMARY KEY, PRIMARY KEY (ProductID))

Indexes:

  • PRIMARY_KEY (PRIMARY_KEY, UNIQUE, index key column: ProductID)

nested json

A1 Here are the table names in your database: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, and Products.

A2 Here are the details for the Products table:

  • Columns:

    • ProductID (INT64, NOT NULL)
    • ProductName (STRING(255), NULLABLE)
    • Description (STRING(MAX), NULLABLE)
    • Price (NUMERIC, NULLABLE)
    • Category (STRING(100), NULLABLE)
    • Manufacturer (STRING(100), NULLABLE)
    • UnitsInStock (INT64, NULLABLE)
  • Constraints:

    • PK_Products: PRIMARY KEY (ProductID)
    • CK_IS_NOT_NULL_Products_ProductID: CHECK (ProductID IS NOT NULL)
  • Indexes:

    • PRIMARY_KEY: UNIQUE INDEX on ProductID

gemini cli

main branch

can you list all table names in spanner

✦ The table names in Spanner are: Account, AccountTransferAccount, Accounts, Customers, Follows, Knows, Person, Persons, Products.

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │ │ │ │ {"object_details":"{"schema_name":"","object_name":"Products","object_type":"BAS │ │ E │ │ TABLE","columns":[{"column_name":"ProductID","data_type":"INT64","ordinal_posit │ │ ion":1,"is_not_nullable":true,"column_default":null},{"column_name":"ProductName", │ │ "data_type":"STRING(255)","ordinal_position":2,"is_not_nullable":false,"column_def │ │ ault":null},{"column_name":"Description","data_type":"STRING(MAX)","ordinal_posit │ │ ion":3,"is_not_nullable":false,"column_default":null},{"column_name":"Price","dat │ │ a_type":"NUMERIC","ordinal_position":4,"is_not_nullable":false,"column_default":nu │ │ ll},{"column_name":"Category","data_type":"STRING(100)","ordinal_position":5,"is │ │ not_nullable":false,"column_default":null},{"column_name":"Manufacturer","data_typ │ │ e":"STRING(100)","ordinal_position":6,"is_not_nullable":false,"column_default":nul │ │ l},{"column_name":"UnitsInStock","data_type":"INT64","ordinal_position":7,"is_no │ │ t_nullable":false,"column_default":null}],"constraints":[{"constraint_name":"CK_IS │ │ NOT_NULL_Products_ProductID","constraint_type":"CHECK","constraint_definition":"Pro │ │ ductID IS NOT │ │ NULL","constraint_columns":[""],"foreign_key_referenced_table":null,"foreign_key_re │ │ ferenced_columns":[""]},{"constraint_name":"PK_Products","constraint_type":"PRIMA │ │ RY KEY","constraint_definition":"PRIMARY KEY │ │ (ProductID)","constraint_columns":["ProductID"],"foreign_key_referenced_table":null, │ │ "foreign_key_referenced_columns":[""]}],"indexes":[{"index_name":"PRIMARY_KEY"," │ │ index_type":"PRIMARY_KEY","is_unique":true,"is_null_filtered":false,"interleaved_in │ │ _table":"","index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}], │ │ "storing_columns":[]}]}","object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ The detailed information for the Products table is as follows:

Table Name: Products Object Type: BASE TABLE

Columns:

  • ProductID: INT64, Not Nullable, Ordinal Position: 1
  • ProductName: STRING(255), Nullable, Ordinal Position: 2
  • Description: STRING(MAX), Nullable, Ordinal Position: 3
  • Price: NUMERIC, Nullable, Ordinal Position: 4
  • Category: STRING(100), Nullable, Ordinal Position: 5
  • Manufacturer: STRING(100), Nullable, Ordinal Position: 6
  • UnitsInStock: INT64, Nullable, Ordinal Position: 7

Constraints:

  • CK_IS_NOT_NULL_Products_ProductID: CHECK constraint, definition: ProductID IS NOT NULL
  • PK_Products: PRIMARY KEY constraint, definition: PRIMARY KEY (ProductID), columns: ProductID

Indexes:

  • PRIMARY_KEY: PRIMARY KEY type, unique: true, null filtered: false, key columns: ProductID
    (ascending)

nested json

can you list all table names in spanner

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"output_format":"simple"} │ │ │ │ {"object_details":{"name":"Account"},"object_name":"Account","schema_name":""} │ │ {"object_details":{"name":"AccountTransferAccount"},"object_name":"AccountTransferAccount", │ │ "schema_name":""} │ │ {"object_details":{"name":"Accounts"},"object_name":"Accounts","schema_name":""} │ │ {"object_details":{"name":"Customers"},"object_name":"Customers","schema_name":""} │ │ {"object_details":{"name":"Follows"},"object_name":"Follows","schema_name":""} │ │ {"object_details":{"name":"Knows"},"object_name":"Knows","schema_name":""} │ │ {"object_details":{"name":"Person"},"object_name":"Person","schema_name":""} │ │ {"object_details":{"name":"Persons"},"object_name":"Persons","schema_name":""} │ │ {"object_details":{"name":"Products"},"object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ - Account

  • AccountTransferAccount
  • Accounts
  • Customers
  • Follows
  • Knows
  • Person
  • Persons
  • Products

can you get me detailed info about Products?

╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ✓ list_tables (mcptoolbox MCP Server) {"table_names":"Products","output_format":"detailed"} │ │ │ │ {"object_details":{"columns":[{"column_default":null,"column_name":"ProductID","data_type": │ │ "INT64","is_not_nullable":true,"ordinal_position":1},{"column_default":null,"column_name":" │ │ ProductName","data_type":"STRING(255)","is_not_nullable":false,"ordinal_position":2},{"colu │ │ mn_default":null,"column_name":"Description","data_type":"STRING(MAX)","is_not_nullable":fa │ │ lse,"ordinal_position":3},{"column_default":null,"column_name":"Price","data_type":"NUMERIC │ │ ","is_not_nullable":false,"ordinal_position":4},{"column_default":null,"column_name":"Categ │ │ ory","data_type":"STRING(100)","is_not_nullable":false,"ordinal_position":5},{"column_defau │ │ lt":null,"column_name":"Manufacturer","data_type":"STRING(100)","is_not_nullable":false,"or │ │ dinal_position":6},{"column_default":null,"column_name":"UnitsInStock","data_type":"INT64", │ │ "is_not_nullable":false,"ordinal_position":7}],"constraints":[{"constraint_columns":[""],"c │ │ onstraint_definition":"ProductID IS NOT │ │ NULL","constraint_name":"CK_IS_NOT_NULL_Products_ProductID","constraint_type":"CHECK","fore │ │ ign_key_referenced_columns":[""],"foreign_key_referenced_table":null},{"constraint_columns" │ │ :["ProductID"],"constraint_definition":"PRIMARY KEY │ │ (ProductID)","constraint_name":"PK_Products","constraint_type":"PRIMARY │ │ KEY","foreign_key_referenced_columns":[""],"foreign_key_referenced_table":null}],"indexes": │ │ [{"index_key_columns":[{"column_name":"ProductID","ordering":"ASC"}],"index_name":"PRIMARY_ │ │ KEY","index_type":"PRIMARY_KEY","interleaved_in_table":"","is_null_filtered":false,"is_uniq │ │ ue":true,"storing_columns":[]}],"object_name":"Products","object_type":"BASE │ │ TABLE","schema_name":""},"object_name":"Products","schema_name":""} │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ 1 { 2 "object_details": { 3 "columns": [ 4 { 5 "column_default": null, 6 "column_name": "ProductID", 7 "data_type": "INT64", 8 "is_not_nullable": true, 9 "ordinal_position": 1 10 }, 11 { 12 "column_default": null, 13 "column_name": "ProductName", 14 "data_type": "STRING(255)", 15 "is_not_nullable": false, 16 "ordinal_position": 2 17 }, 18 { 19 "column_default": null, 20 "column_name": "Description", 21 "data_type": "STRING(MAX)", 22 "is_not_nullable": false, 23 "ordinal_position": 3 24 }, 25 { 26 "column_default": null, 27 "column_name": "Price", 28 "data_type": "NUMERIC", 29 "is_not_nullable": false, 30 "ordinal_position": 4 31 }, 32 { 33 "column_default": null, 34 "column_name": "Category", 35 "data_type": "STRING(100)", 36 "is_not_nullable": false, 37 "ordinal_position": 5 38 }, 39 { 40 "column_default": null, 41 "column_name": "Manufacturer", 42 "data_type": "STRING(100)", 43 "is_not_nullable": false, 44 "ordinal_position": 6 45 }, 46 { 47 "column_default": null, 48 "column_name": "UnitsInStock", 49 "data_type": "INT64", 50 "is_not_nullable": false, 51 "ordinal_position": 7 52 } 53 ], 54 "constraints": [ 55 { 56 "constraint_columns": [ 57 "" 58 ], 59 "constraint_definition": "ProductID IS NOT NULL", 60 "constraint_name": "CK_IS_NOT_NULL_Products_ProductID", 61 "constraint_type": "CHECK", 62 "foreign_key_referenced_columns": [ 63 "" 64 ], 65 "foreign_key_referenced_table": null 66 }, 67 { 68 "constraint_columns": [ 69 "ProductID" 70 ], 71 "constraint_definition": "PRIMARY KEY (ProductID)", 72 "constraint_name": "PK_Products", 73 "constraint_type": "PRIMARY KEY", 74 "foreign_key_referenced_columns": [ 75 "" 76 ], 77 "foreign_key_referenced_table": null 78 } 79 ], 80 "indexes": [ 81 { 82 "index_key_columns": [ 83 { 84 "column_name": "ProductID", 85 "ordering": "ASC" 86 } 87 ], 88 "index_name": "PRIMARY_KEY", 89 "index_type": "PRIMARY_KEY", 90 "interleaved_in_table": "", 91 "is_null_filtered": false, 92 "is_unique": true, 93 "storing_columns": [] 94 } 95 ], 96 "object_name": "Products", 97 "object_type": "BASE TABLE", 98 "schema_name": "" 99 }, 100 "object_name": "Products", 101 "schema_name": "" 102 } The Products table has the following columns:

  • ProductID: INT64, not nullable, primary key
  • ProductName: STRING(255)
  • Description: STRING(MAX)
  • Price: NUMERIC
  • Category: STRING(100)
  • Manufacturer: STRING(100)
  • UnitsInStock: INT64

It has a primary key constraint on ProductID and a check constraint ensuring ProductID is not null. There is also a primary key index on ProductID.

Can you clarify the naming "main" vs "nested json" here? Does main refer to the original code and nested json refers to the change proposal?

@gRedHeadphone

Copy link
Copy Markdown
Contributor Author

Why does A2 for main branch have this:

Schema Name: (empty string)
Object Name: Products
Object Type: BASE TABLE

but not the A2 for the nested json?

That's the response generated by the adk agent, could be because of the change or model temperature

Can you clarify the naming "main" vs "nested json" here? Does main refer to the original code and nested json refers to the change proposal?

Yes

@twishabansal

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@averikitsch averikitsch merged commit 446d62a into main Nov 14, 2025
12 checks passed
@averikitsch averikitsch deleted the nested-json-in-spanner-list-tables branch November 14, 2025 22:18
@github-actions

Copy link
Copy Markdown
Contributor

🧨 Preview deployments removed.

github-actions Bot pushed a commit that referenced this pull request Nov 14, 2025
… string into map to make response have nested json (#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes #1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit that referenced this pull request Nov 14, 2025
… string into map to make response have nested json (#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes #1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to renovate-bot/googleapis-_-genai-toolbox that referenced this pull request Nov 14, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to renovate-bot/googleapis-_-genai-toolbox that referenced this pull request Nov 14, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to Jaleel-zhu/genai-toolbox that referenced this pull request Nov 14, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to Jaleel-zhu/genai-toolbox that referenced this pull request Nov 14, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to CrazyForks/genai-toolbox that referenced this pull request Nov 15, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to CrazyForks/genai-toolbox that referenced this pull request Nov 15, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to bhardwajRahul/genai-toolbox that referenced this pull request Nov 15, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to bhardwajRahul/genai-toolbox that referenced this pull request Nov 15, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to Px8Studio/genai-toolbox that referenced this pull request Nov 15, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to Px8Studio/genai-toolbox that referenced this pull request Nov 15, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to shaneholloman/mcp-genai-toolbox that referenced this pull request Nov 16, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to shaneholloman/mcp-genai-toolbox that referenced this pull request Nov 16, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to nandinisaini-google/genai-toolbox that referenced this pull request Nov 17, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
github-actions Bot pushed a commit to nandinisaini-google/genai-toolbox that referenced this pull request Nov 17, 2025
… string into map to make response have nested json (googleapis#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes googleapis#1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com> 446d62a
rahulpinto19 pushed a commit that referenced this pull request Nov 18, 2025
…into map to make response have nested json (#1894)

## Description

Unmarshal object_details json string into map to make response have
nested json in spannerlisttables instead of nested JSON string

## PR Checklist

- [x] Make sure you reviewed

[CONTRIBUTING.md](https://github.com/googleapis/genai-toolbox/blob/main/CONTRIBUTING.md)
- [x] Make sure to open an issue as a

[bug/issue](https://github.com/googleapis/genai-toolbox/issues/new/choose)
  before writing your code! That way we can discuss the change, evaluate
  designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)
- [x] Make sure to add `!` if this involve a breaking change

🛠️ Fixes #1838

---------

Co-authored-by: Averi Kitsch <akitsch@google.com>
@gRedHeadphone gRedHeadphone changed the title fix: unmarshal object_details json string into map to make response have nested json in spannerlisttables fix: return object_details as structured JSON in Spanner list tables tool Nov 19, 2025
Yuan325 added a commit that referenced this pull request Nov 19, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.21.0](v0.20.0...v0.21.0)
(2025-11-19)


### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([#1894](#1894))
([446d62a](446d62a))


### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([#1751](#1751))
([5abad5d](5abad5d))


### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([#1993](#1993))
([0e269a1](0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([#1969](#1969))
([2bff138](2bff138))

---
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 Nov 19, 2025
🤖 I have created a release *beep* *boop*
---

##
[0.21.0](v0.20.0...v0.21.0)
(2025-11-19)

### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([#1894](#1894))
([446d62a](446d62a))

### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([#1751](#1751))
([5abad5d](5abad5d))

### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([#1993](#1993))
([0e269a1](0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([#1969](#1969))
([2bff138](2bff138))

---
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> e81dfea
github-actions Bot pushed a commit that referenced this pull request Nov 19, 2025
🤖 I have created a release *beep* *boop*
---

##
[0.21.0](v0.20.0...v0.21.0)
(2025-11-19)

### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([#1894](#1894))
([446d62a](446d62a))

### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([#1751](#1751))
([5abad5d](5abad5d))

### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([#1993](#1993))
([0e269a1](0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([#1969](#1969))
([2bff138](2bff138))

---
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> e81dfea
github-actions Bot pushed a commit to renovate-bot/googleapis-_-genai-toolbox that referenced this pull request Nov 19, 2025
🤖 I have created a release *beep* *boop*
---

##
[0.21.0](googleapis/mcp-toolbox@v0.20.0...v0.21.0)
(2025-11-19)

### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([googleapis#1894](googleapis#1894))
([446d62a](googleapis@446d62a))

### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([googleapis#1751](googleapis#1751))
([5abad5d](googleapis@5abad5d))

### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([googleapis#1993](googleapis#1993))
([0e269a1](googleapis@0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([googleapis#1969](googleapis#1969))
([2bff138](googleapis@2bff138))

---
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> e81dfea
github-actions Bot pushed a commit to renovate-bot/googleapis-_-genai-toolbox that referenced this pull request Nov 19, 2025
🤖 I have created a release *beep* *boop*
---

##
[0.21.0](googleapis/mcp-toolbox@v0.20.0...v0.21.0)
(2025-11-19)

### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([googleapis#1894](googleapis#1894))
([446d62a](googleapis@446d62a))

### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([googleapis#1751](googleapis#1751))
([5abad5d](googleapis@5abad5d))

### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([googleapis#1993](googleapis#1993))
([0e269a1](googleapis@0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([googleapis#1969](googleapis#1969))
([2bff138](googleapis@2bff138))

---
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> e81dfea
github-actions Bot pushed a commit to CrazyForks/genai-toolbox that referenced this pull request Nov 20, 2025
🤖 I have created a release *beep* *boop*
---

##
[0.21.0](googleapis/mcp-toolbox@v0.20.0...v0.21.0)
(2025-11-19)

### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([googleapis#1894](googleapis#1894))
([446d62a](googleapis@446d62a))

### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([googleapis#1751](googleapis#1751))
([5abad5d](googleapis@5abad5d))

### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([googleapis#1993](googleapis#1993))
([0e269a1](googleapis@0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([googleapis#1969](googleapis#1969))
([2bff138](googleapis@2bff138))

---
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> e81dfea
NightStack15 added a commit to NightStack15/googleapis-_-genai-toolbox that referenced this pull request Mar 20, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.21.0](googleapis/mcp-toolbox@v0.20.0...v0.21.0)
(2025-11-19)


### ⚠ BREAKING CHANGES

* **tools/spanner-list-tables:** Unmarshal `object_details` json string
into map to make response have nested json
([#1894](googleapis/mcp-toolbox#1894))
([446d62a](googleapis/mcp-toolbox@446d62a))


### Features

* **tools/postgres:** Add `long_running_transactions`, `list_locks` and
`replication_stats` tools
([#1751](googleapis/mcp-toolbox#1751))
([5abad5d](googleapis/mcp-toolbox@5abad5d))


### Bug Fixes

* **tools/alloydbgetinstance:** Remove parameter duplication
([#1993](googleapis/mcp-toolbox#1993))
([0e269a1](googleapis/mcp-toolbox@0e269a1))
* **tools:** Check for query execution error for pgxpool.Pool
([#1969](googleapis/mcp-toolbox#1969))
([2bff138](googleapis/mcp-toolbox@2bff138))

---
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>
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.

Nested JSON in spanner-list-tables outputs as string

4 participants