diff --git a/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl
index aa2cba5c..ece38c02 100644
--- a/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl
+++ b/enterprise/e2e/html/hurl/mcp-2025-03-26.all.hurl
@@ -175,6 +175,7 @@ jsonpath "$.result.tools" count == 11
jsonpath "$.result.tools[0].name" == "list_directory"
jsonpath "$.result.tools[0].description" == "List the contents of a directory in the catalog"
jsonpath "$.result.tools[0].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/list/rpc"
+jsonpath "$.result.tools[0].inputSchema.type" == "object"
jsonpath "$.result.tools[0].annotations.title" == "List Directory"
jsonpath "$.result.tools[0].annotations.readOnlyHint" == true
jsonpath "$.result.tools[0].annotations.destructiveHint" == false
@@ -183,6 +184,7 @@ jsonpath "$.result.tools[0].annotations.openWorldHint" == false
jsonpath "$.result.tools[1].name" == "get_schema_dependencies"
jsonpath "$.result.tools[1].description" == "Look up the dependency graph of a specific schema (incoming or outgoing)"
jsonpath "$.result.tools[1].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/dependencies/rpc"
+jsonpath "$.result.tools[1].inputSchema.type" == "object"
jsonpath "$.result.tools[1].annotations.title" == "Get Schema Dependencies"
jsonpath "$.result.tools[1].annotations.readOnlyHint" == true
jsonpath "$.result.tools[1].annotations.destructiveHint" == false
diff --git a/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl
index 425adb75..12731eb8 100644
--- a/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl
+++ b/enterprise/e2e/html/hurl/mcp-2025-06-18.all.hurl
@@ -166,7 +166,9 @@ jsonpath "$.result.tools" count == 11
jsonpath "$.result.tools[0].name" == "list_directory"
jsonpath "$.result.tools[0].description" == "List the contents of a directory in the catalog"
jsonpath "$.result.tools[0].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/list/rpc"
+jsonpath "$.result.tools[0].inputSchema.type" == "object"
jsonpath "$.result.tools[0].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/list/response"
+jsonpath "$.result.tools[0].outputSchema.type" == "object"
jsonpath "$.result.tools[0].annotations.title" == "List Directory"
jsonpath "$.result.tools[0].annotations.readOnlyHint" == true
jsonpath "$.result.tools[0].annotations.destructiveHint" == false
diff --git a/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl
index 3fb435b6..a1f29fb1 100644
--- a/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl
+++ b/enterprise/e2e/html/hurl/mcp-2025-11-25-resources.all.hurl
@@ -223,7 +223,7 @@ jsonpath "$.result.resources[40].uri" == "{{base}}/self/v1/schemas/mcp/response"
jsonpath "$.result.resources[40].name" == "response"
jsonpath "$.result.resources[40].description" == "Any outgoing MCP response the server returns"
jsonpath "$.result.resources[40].mimeType" == "application/schema+json"
-jsonpath "$.result.resources[40].size" == 3215
+jsonpath "$.result.resources[40].size" == 3279
jsonpath "$.result.resources[41].uri" == "{{base}}/self/v1/schemas/mcp/tools/call/request"
jsonpath "$.result.resources[41].name" == "request"
jsonpath "$.result.resources[41].description" == "Request from a client to invoke an MCP tool by name"
@@ -243,7 +243,7 @@ jsonpath "$.result.resources[44].uri" == "{{base}}/self/v1/schemas/mcp/tools/lis
jsonpath "$.result.resources[44].name" == "response"
jsonpath "$.result.resources[44].description" == "Sourcemeta One's list of MCP tools"
jsonpath "$.result.resources[44].mimeType" == "application/schema+json"
-jsonpath "$.result.resources[44].size" == 3820
+jsonpath "$.result.resources[44].size" == 4074
jsonpath "$.result.resources[45].uri" == "{{base}}/test/object"
jsonpath "$.result.resources[45].name" == "object"
jsonpath "$.result.resources[45].description" == "An Object Example"
diff --git a/enterprise/e2e/html/hurl/mcp-2025-11-25-tools.all.hurl b/enterprise/e2e/html/hurl/mcp-2025-11-25-tools.all.hurl
index 3dcc5224..94b9bf4c 100644
--- a/enterprise/e2e/html/hurl/mcp-2025-11-25-tools.all.hurl
+++ b/enterprise/e2e/html/hurl/mcp-2025-11-25-tools.all.hurl
@@ -22,7 +22,9 @@ jsonpath "$.result.tools" count == 11
jsonpath "$.result.tools[0].name" == "list_directory"
jsonpath "$.result.tools[0].description" == "List the contents of a directory in the catalog"
jsonpath "$.result.tools[0].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/list/rpc"
+jsonpath "$.result.tools[0].inputSchema.type" == "object"
jsonpath "$.result.tools[0].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/list/response"
+jsonpath "$.result.tools[0].outputSchema.type" == "object"
jsonpath "$.result.tools[0].annotations.title" == "List Directory"
jsonpath "$.result.tools[0].annotations.readOnlyHint" == true
jsonpath "$.result.tools[0].annotations.destructiveHint" == false
@@ -31,7 +33,9 @@ jsonpath "$.result.tools[0].annotations.openWorldHint" == false
jsonpath "$.result.tools[1].name" == "get_schema_dependencies"
jsonpath "$.result.tools[1].description" == "Look up the dependency graph of a specific schema (incoming or outgoing)"
jsonpath "$.result.tools[1].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/dependencies/rpc"
+jsonpath "$.result.tools[1].inputSchema.type" == "object"
jsonpath "$.result.tools[1].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/dependencies/response"
+jsonpath "$.result.tools[1].outputSchema.type" == "object"
jsonpath "$.result.tools[1].annotations.title" == "Get Schema Dependencies"
jsonpath "$.result.tools[1].annotations.readOnlyHint" == true
jsonpath "$.result.tools[1].annotations.destructiveHint" == false
@@ -40,7 +44,9 @@ jsonpath "$.result.tools[1].annotations.openWorldHint" == false
jsonpath "$.result.tools[2].name" == "get_schema_dependents"
jsonpath "$.result.tools[2].description" == "Look up the dependency graph of a specific schema (incoming or outgoing)"
jsonpath "$.result.tools[2].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/dependents/rpc"
+jsonpath "$.result.tools[2].inputSchema.type" == "object"
jsonpath "$.result.tools[2].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/dependents/response"
+jsonpath "$.result.tools[2].outputSchema.type" == "object"
jsonpath "$.result.tools[2].annotations.title" == "Get Schema Dependents"
jsonpath "$.result.tools[2].annotations.readOnlyHint" == true
jsonpath "$.result.tools[2].annotations.destructiveHint" == false
@@ -49,7 +55,9 @@ jsonpath "$.result.tools[2].annotations.openWorldHint" == false
jsonpath "$.result.tools[3].name" == "get_schema_health"
jsonpath "$.result.tools[3].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[3].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/health/rpc"
+jsonpath "$.result.tools[3].inputSchema.type" == "object"
jsonpath "$.result.tools[3].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/health/response"
+jsonpath "$.result.tools[3].outputSchema.type" == "object"
jsonpath "$.result.tools[3].annotations.title" == "Get Schema Health"
jsonpath "$.result.tools[3].annotations.readOnlyHint" == true
jsonpath "$.result.tools[3].annotations.destructiveHint" == false
@@ -58,7 +66,9 @@ jsonpath "$.result.tools[3].annotations.openWorldHint" == false
jsonpath "$.result.tools[4].name" == "get_schema_locations"
jsonpath "$.result.tools[4].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[4].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/locations/rpc"
+jsonpath "$.result.tools[4].inputSchema.type" == "object"
jsonpath "$.result.tools[4].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/locations/response"
+jsonpath "$.result.tools[4].outputSchema.type" == "object"
jsonpath "$.result.tools[4].annotations.title" == "Get Schema Locations"
jsonpath "$.result.tools[4].annotations.readOnlyHint" == true
jsonpath "$.result.tools[4].annotations.destructiveHint" == false
@@ -67,7 +77,9 @@ jsonpath "$.result.tools[4].annotations.openWorldHint" == false
jsonpath "$.result.tools[5].name" == "get_schema_positions"
jsonpath "$.result.tools[5].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[5].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/positions/rpc"
+jsonpath "$.result.tools[5].inputSchema.type" == "object"
jsonpath "$.result.tools[5].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/positions/response"
+jsonpath "$.result.tools[5].outputSchema.type" == "object"
jsonpath "$.result.tools[5].annotations.title" == "Get Schema Positions"
jsonpath "$.result.tools[5].annotations.readOnlyHint" == true
jsonpath "$.result.tools[5].annotations.destructiveHint" == false
@@ -76,7 +88,9 @@ jsonpath "$.result.tools[5].annotations.openWorldHint" == false
jsonpath "$.result.tools[6].name" == "get_schema_stats"
jsonpath "$.result.tools[6].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[6].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/stats/rpc"
+jsonpath "$.result.tools[6].inputSchema.type" == "object"
jsonpath "$.result.tools[6].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/stats/response"
+jsonpath "$.result.tools[6].outputSchema.type" == "object"
jsonpath "$.result.tools[6].annotations.title" == "Get Schema Stats"
jsonpath "$.result.tools[6].annotations.readOnlyHint" == true
jsonpath "$.result.tools[6].annotations.destructiveHint" == false
@@ -85,7 +99,9 @@ jsonpath "$.result.tools[6].annotations.openWorldHint" == false
jsonpath "$.result.tools[7].name" == "get_schema_metadata"
jsonpath "$.result.tools[7].description" == "Read a navigation artifact for browsing schemas"
jsonpath "$.result.tools[7].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/metadata/rpc"
+jsonpath "$.result.tools[7].inputSchema.type" == "object"
jsonpath "$.result.tools[7].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/metadata/response"
+jsonpath "$.result.tools[7].outputSchema.type" == "object"
jsonpath "$.result.tools[7].annotations.title" == "Get Schema Metadata"
jsonpath "$.result.tools[7].annotations.readOnlyHint" == true
jsonpath "$.result.tools[7].annotations.destructiveHint" == false
@@ -94,7 +110,9 @@ jsonpath "$.result.tools[7].annotations.openWorldHint" == false
jsonpath "$.result.tools[8].name" == "evaluate_schema"
jsonpath "$.result.tools[8].description" == "Validate a JSON instance against a schema and return whether it is valid plus any errors"
jsonpath "$.result.tools[8].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/evaluate/rpc"
+jsonpath "$.result.tools[8].inputSchema.type" == "object"
jsonpath "$.result.tools[8].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/evaluate/response"
+jsonpath "$.result.tools[8].outputSchema.type" == "object"
jsonpath "$.result.tools[8].annotations.title" == "Evaluate Schema"
jsonpath "$.result.tools[8].annotations.readOnlyHint" == true
jsonpath "$.result.tools[8].annotations.destructiveHint" == false
@@ -103,7 +121,9 @@ jsonpath "$.result.tools[8].annotations.openWorldHint" == false
jsonpath "$.result.tools[9].name" == "trace_schema_evaluation"
jsonpath "$.result.tools[9].description" == "Validate a JSON instance against a schema and return detailed information about every step of the evaluation process"
jsonpath "$.result.tools[9].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/trace/rpc"
+jsonpath "$.result.tools[9].inputSchema.type" == "object"
jsonpath "$.result.tools[9].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/trace/response"
+jsonpath "$.result.tools[9].outputSchema.type" == "object"
jsonpath "$.result.tools[9].annotations.title" == "Trace Schema Evaluation"
jsonpath "$.result.tools[9].annotations.readOnlyHint" == true
jsonpath "$.result.tools[9].annotations.destructiveHint" == false
@@ -112,7 +132,9 @@ jsonpath "$.result.tools[9].annotations.openWorldHint" == false
jsonpath "$.result.tools[10].name" == "search_schemas"
jsonpath "$.result.tools[10].description" == "Search for schemas by query term"
jsonpath "$.result.tools[10].inputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/search/rpc"
+jsonpath "$.result.tools[10].inputSchema.type" == "object"
jsonpath "$.result.tools[10].outputSchema['$ref']" == "{{base}}/self/v1/schemas/api/schemas/search/response"
+jsonpath "$.result.tools[10].outputSchema.type" == "object"
jsonpath "$.result.tools[10].annotations.title" == "Search Schemas"
jsonpath "$.result.tools[10].annotations.readOnlyHint" == true
jsonpath "$.result.tools[10].annotations.destructiveHint" == false
diff --git a/enterprise/e2e/path/hurl/mcp-2025-03-26.all.hurl b/enterprise/e2e/path/hurl/mcp-2025-03-26.all.hurl
index 958921c4..c41ba43e 100644
--- a/enterprise/e2e/path/hurl/mcp-2025-03-26.all.hurl
+++ b/enterprise/e2e/path/hurl/mcp-2025-03-26.all.hurl
@@ -175,6 +175,7 @@ jsonpath "$.result.tools" count == 11
jsonpath "$.result.tools[0].name" == "list_directory"
jsonpath "$.result.tools[0].description" == "List the contents of a directory in the catalog"
jsonpath "$.result.tools[0].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/list/rpc"
+jsonpath "$.result.tools[0].inputSchema.type" == "object"
jsonpath "$.result.tools[0].annotations.title" == "List Directory"
jsonpath "$.result.tools[0].annotations.readOnlyHint" == true
jsonpath "$.result.tools[0].annotations.destructiveHint" == false
@@ -183,6 +184,7 @@ jsonpath "$.result.tools[0].annotations.openWorldHint" == false
jsonpath "$.result.tools[1].name" == "get_schema_dependencies"
jsonpath "$.result.tools[1].description" == "Look up the dependency graph of a specific schema (incoming or outgoing)"
jsonpath "$.result.tools[1].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/dependencies/rpc"
+jsonpath "$.result.tools[1].inputSchema.type" == "object"
jsonpath "$.result.tools[1].annotations.title" == "Get Schema Dependencies"
jsonpath "$.result.tools[1].annotations.readOnlyHint" == true
jsonpath "$.result.tools[1].annotations.destructiveHint" == false
diff --git a/enterprise/e2e/path/hurl/mcp-2025-06-18.all.hurl b/enterprise/e2e/path/hurl/mcp-2025-06-18.all.hurl
index 2681af3e..20cd1f22 100644
--- a/enterprise/e2e/path/hurl/mcp-2025-06-18.all.hurl
+++ b/enterprise/e2e/path/hurl/mcp-2025-06-18.all.hurl
@@ -166,7 +166,9 @@ jsonpath "$.result.tools" count == 11
jsonpath "$.result.tools[0].name" == "list_directory"
jsonpath "$.result.tools[0].description" == "List the contents of a directory in the catalog"
jsonpath "$.result.tools[0].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/list/rpc"
+jsonpath "$.result.tools[0].inputSchema.type" == "object"
jsonpath "$.result.tools[0].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/list/response"
+jsonpath "$.result.tools[0].outputSchema.type" == "object"
jsonpath "$.result.tools[0].annotations.title" == "List Directory"
jsonpath "$.result.tools[0].annotations.readOnlyHint" == true
jsonpath "$.result.tools[0].annotations.destructiveHint" == false
diff --git a/enterprise/e2e/path/hurl/mcp-2025-11-25-resources.all.hurl b/enterprise/e2e/path/hurl/mcp-2025-11-25-resources.all.hurl
index 08d6649c..8f1c94c7 100644
--- a/enterprise/e2e/path/hurl/mcp-2025-11-25-resources.all.hurl
+++ b/enterprise/e2e/path/hurl/mcp-2025-11-25-resources.all.hurl
@@ -223,7 +223,7 @@ jsonpath "$.result.resources[40].uri" == "{{base}}/v1/catalog/self/v1/schemas/mc
jsonpath "$.result.resources[40].name" == "response"
jsonpath "$.result.resources[40].description" == "Any outgoing MCP response the server returns"
jsonpath "$.result.resources[40].mimeType" == "application/schema+json"
-jsonpath "$.result.resources[40].size" == 3226
+jsonpath "$.result.resources[40].size" == 3290
jsonpath "$.result.resources[41].uri" == "{{base}}/v1/catalog/self/v1/schemas/mcp/tools/call/request"
jsonpath "$.result.resources[41].name" == "request"
jsonpath "$.result.resources[41].description" == "Request from a client to invoke an MCP tool by name"
@@ -243,7 +243,7 @@ jsonpath "$.result.resources[44].uri" == "{{base}}/v1/catalog/self/v1/schemas/mc
jsonpath "$.result.resources[44].name" == "response"
jsonpath "$.result.resources[44].description" == "Sourcemeta One's list of MCP tools"
jsonpath "$.result.resources[44].mimeType" == "application/schema+json"
-jsonpath "$.result.resources[44].size" == 3831
+jsonpath "$.result.resources[44].size" == 4085
jsonpath "$.result.resources[45].uri" == "{{base}}/v1/catalog/example/full"
jsonpath "$.result.resources[45].name" == "full"
jsonpath "$.result.resources[45].description" == "A schema that has both a title and a description"
diff --git a/enterprise/e2e/path/hurl/mcp-2025-11-25-tools.all.hurl b/enterprise/e2e/path/hurl/mcp-2025-11-25-tools.all.hurl
index be5161ed..fae15d79 100644
--- a/enterprise/e2e/path/hurl/mcp-2025-11-25-tools.all.hurl
+++ b/enterprise/e2e/path/hurl/mcp-2025-11-25-tools.all.hurl
@@ -22,7 +22,9 @@ jsonpath "$.result.tools" count == 11
jsonpath "$.result.tools[0].name" == "list_directory"
jsonpath "$.result.tools[0].description" == "List the contents of a directory in the catalog"
jsonpath "$.result.tools[0].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/list/rpc"
+jsonpath "$.result.tools[0].inputSchema.type" == "object"
jsonpath "$.result.tools[0].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/list/response"
+jsonpath "$.result.tools[0].outputSchema.type" == "object"
jsonpath "$.result.tools[0].annotations.title" == "List Directory"
jsonpath "$.result.tools[0].annotations.readOnlyHint" == true
jsonpath "$.result.tools[0].annotations.destructiveHint" == false
@@ -31,7 +33,9 @@ jsonpath "$.result.tools[0].annotations.openWorldHint" == false
jsonpath "$.result.tools[1].name" == "get_schema_dependencies"
jsonpath "$.result.tools[1].description" == "Look up the dependency graph of a specific schema (incoming or outgoing)"
jsonpath "$.result.tools[1].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/dependencies/rpc"
+jsonpath "$.result.tools[1].inputSchema.type" == "object"
jsonpath "$.result.tools[1].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/dependencies/response"
+jsonpath "$.result.tools[1].outputSchema.type" == "object"
jsonpath "$.result.tools[1].annotations.title" == "Get Schema Dependencies"
jsonpath "$.result.tools[1].annotations.readOnlyHint" == true
jsonpath "$.result.tools[1].annotations.destructiveHint" == false
@@ -40,7 +44,9 @@ jsonpath "$.result.tools[1].annotations.openWorldHint" == false
jsonpath "$.result.tools[2].name" == "get_schema_dependents"
jsonpath "$.result.tools[2].description" == "Look up the dependency graph of a specific schema (incoming or outgoing)"
jsonpath "$.result.tools[2].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/dependents/rpc"
+jsonpath "$.result.tools[2].inputSchema.type" == "object"
jsonpath "$.result.tools[2].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/dependents/response"
+jsonpath "$.result.tools[2].outputSchema.type" == "object"
jsonpath "$.result.tools[2].annotations.title" == "Get Schema Dependents"
jsonpath "$.result.tools[2].annotations.readOnlyHint" == true
jsonpath "$.result.tools[2].annotations.destructiveHint" == false
@@ -49,7 +55,9 @@ jsonpath "$.result.tools[2].annotations.openWorldHint" == false
jsonpath "$.result.tools[3].name" == "get_schema_health"
jsonpath "$.result.tools[3].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[3].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/health/rpc"
+jsonpath "$.result.tools[3].inputSchema.type" == "object"
jsonpath "$.result.tools[3].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/health/response"
+jsonpath "$.result.tools[3].outputSchema.type" == "object"
jsonpath "$.result.tools[3].annotations.title" == "Get Schema Health"
jsonpath "$.result.tools[3].annotations.readOnlyHint" == true
jsonpath "$.result.tools[3].annotations.destructiveHint" == false
@@ -58,7 +66,9 @@ jsonpath "$.result.tools[3].annotations.openWorldHint" == false
jsonpath "$.result.tools[4].name" == "get_schema_locations"
jsonpath "$.result.tools[4].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[4].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/locations/rpc"
+jsonpath "$.result.tools[4].inputSchema.type" == "object"
jsonpath "$.result.tools[4].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/locations/response"
+jsonpath "$.result.tools[4].outputSchema.type" == "object"
jsonpath "$.result.tools[4].annotations.title" == "Get Schema Locations"
jsonpath "$.result.tools[4].annotations.readOnlyHint" == true
jsonpath "$.result.tools[4].annotations.destructiveHint" == false
@@ -67,7 +77,9 @@ jsonpath "$.result.tools[4].annotations.openWorldHint" == false
jsonpath "$.result.tools[5].name" == "get_schema_positions"
jsonpath "$.result.tools[5].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[5].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/positions/rpc"
+jsonpath "$.result.tools[5].inputSchema.type" == "object"
jsonpath "$.result.tools[5].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/positions/response"
+jsonpath "$.result.tools[5].outputSchema.type" == "object"
jsonpath "$.result.tools[5].annotations.title" == "Get Schema Positions"
jsonpath "$.result.tools[5].annotations.readOnlyHint" == true
jsonpath "$.result.tools[5].annotations.destructiveHint" == false
@@ -76,7 +88,9 @@ jsonpath "$.result.tools[5].annotations.openWorldHint" == false
jsonpath "$.result.tools[6].name" == "get_schema_stats"
jsonpath "$.result.tools[6].description" == "Look up a precomputed artifact about a specific schema by its absolute URI"
jsonpath "$.result.tools[6].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/stats/rpc"
+jsonpath "$.result.tools[6].inputSchema.type" == "object"
jsonpath "$.result.tools[6].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/stats/response"
+jsonpath "$.result.tools[6].outputSchema.type" == "object"
jsonpath "$.result.tools[6].annotations.title" == "Get Schema Stats"
jsonpath "$.result.tools[6].annotations.readOnlyHint" == true
jsonpath "$.result.tools[6].annotations.destructiveHint" == false
@@ -85,7 +99,9 @@ jsonpath "$.result.tools[6].annotations.openWorldHint" == false
jsonpath "$.result.tools[7].name" == "get_schema_metadata"
jsonpath "$.result.tools[7].description" == "Read a navigation artifact for browsing schemas"
jsonpath "$.result.tools[7].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/metadata/rpc"
+jsonpath "$.result.tools[7].inputSchema.type" == "object"
jsonpath "$.result.tools[7].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/metadata/response"
+jsonpath "$.result.tools[7].outputSchema.type" == "object"
jsonpath "$.result.tools[7].annotations.title" == "Get Schema Metadata"
jsonpath "$.result.tools[7].annotations.readOnlyHint" == true
jsonpath "$.result.tools[7].annotations.destructiveHint" == false
@@ -94,7 +110,9 @@ jsonpath "$.result.tools[7].annotations.openWorldHint" == false
jsonpath "$.result.tools[8].name" == "evaluate_schema"
jsonpath "$.result.tools[8].description" == "Validate a JSON instance against a schema and return whether it is valid plus any errors"
jsonpath "$.result.tools[8].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/evaluate/rpc"
+jsonpath "$.result.tools[8].inputSchema.type" == "object"
jsonpath "$.result.tools[8].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/evaluate/response"
+jsonpath "$.result.tools[8].outputSchema.type" == "object"
jsonpath "$.result.tools[8].annotations.title" == "Evaluate Schema"
jsonpath "$.result.tools[8].annotations.readOnlyHint" == true
jsonpath "$.result.tools[8].annotations.destructiveHint" == false
@@ -103,7 +121,9 @@ jsonpath "$.result.tools[8].annotations.openWorldHint" == false
jsonpath "$.result.tools[9].name" == "trace_schema_evaluation"
jsonpath "$.result.tools[9].description" == "Validate a JSON instance against a schema and return detailed information about every step of the evaluation process"
jsonpath "$.result.tools[9].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/trace/rpc"
+jsonpath "$.result.tools[9].inputSchema.type" == "object"
jsonpath "$.result.tools[9].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/trace/response"
+jsonpath "$.result.tools[9].outputSchema.type" == "object"
jsonpath "$.result.tools[9].annotations.title" == "Trace Schema Evaluation"
jsonpath "$.result.tools[9].annotations.readOnlyHint" == true
jsonpath "$.result.tools[9].annotations.destructiveHint" == false
@@ -112,7 +132,9 @@ jsonpath "$.result.tools[9].annotations.openWorldHint" == false
jsonpath "$.result.tools[10].name" == "search_schemas"
jsonpath "$.result.tools[10].description" == "Search for schemas by query term"
jsonpath "$.result.tools[10].inputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/search/rpc"
+jsonpath "$.result.tools[10].inputSchema.type" == "object"
jsonpath "$.result.tools[10].outputSchema['$ref']" == "{{base}}/v1/catalog/self/v1/schemas/api/schemas/search/response"
+jsonpath "$.result.tools[10].outputSchema.type" == "object"
jsonpath "$.result.tools[10].annotations.title" == "Search Schemas"
jsonpath "$.result.tools[10].annotations.readOnlyHint" == true
jsonpath "$.result.tools[10].annotations.destructiveHint" == false
diff --git a/enterprise/index/enterprise_index.cc b/enterprise/index/enterprise_index.cc
index 48de3bb1..7748e8ed 100644
--- a/enterprise/index/enterprise_index.cc
+++ b/enterprise/index/enterprise_index.cc
@@ -140,6 +140,8 @@ auto generate_mcp_tools(const sourcemeta::core::URITemplateRouterView &router,
assert(input_schema_url.has_value());
auto input_schema_ref{sourcemeta::core::JSON::make_object()};
+ // The MCP schema requires `type: "object"` on tool input schemas
+ input_schema_ref.assign("type", sourcemeta::core::JSON{"object"});
input_schema_ref.assign(
"$ref", sourcemeta::core::JSON{std::move(input_schema_url).value()});
@@ -150,6 +152,8 @@ auto generate_mcp_tools(const sourcemeta::core::URITemplateRouterView &router,
assert(output_schema_url.has_value());
auto ref{sourcemeta::core::JSON::make_object()};
+ // The MCP schema requires `type: "object"` on tool output schemas
+ ref.assign("type", sourcemeta::core::JSON{"object"});
ref.assign("$ref",
sourcemeta::core::JSON{std::move(output_schema_url).value()});
output_schema_ref.emplace(std::move(ref));
diff --git a/src/self/v1/schemas/mcp/response.json b/src/self/v1/schemas/mcp/response.json
index 6e93020d..31153ab7 100644
--- a/src/self/v1/schemas/mcp/response.json
+++ b/src/self/v1/schemas/mcp/response.json
@@ -76,9 +76,11 @@
"name": "list_directory",
"description": "List the contents of a directory in the catalog",
"inputSchema": {
+ "type": "object",
"$ref": "https://example.com/v1/self/v1/schemas/api/list/rpc"
},
"outputSchema": {
+ "type": "object",
"$ref": "https://example.com/v1/self/v1/schemas/api/list/response"
},
"annotations": {
diff --git a/src/self/v1/schemas/mcp/tools/list/response.json b/src/self/v1/schemas/mcp/tools/list/response.json
index 4ac7c618..840e847a 100644
--- a/src/self/v1/schemas/mcp/tools/list/response.json
+++ b/src/self/v1/schemas/mcp/tools/list/response.json
@@ -12,9 +12,11 @@
"name": "list_directory",
"description": "List the contents of a directory in the catalog",
"inputSchema": {
+ "type": "object",
"$ref": "https://example.com/v1/self/v1/schemas/api/list/rpc"
},
"outputSchema": {
+ "type": "object",
"$ref": "https://example.com/v1/self/v1/schemas/api/list/response"
},
"annotations": {
@@ -60,8 +62,11 @@
"inputSchema": {
"x-lint-exclude": [ "simple_properties_identifiers" ],
"type": "object",
- "required": [ "$ref" ],
+ "required": [ "type", "$ref" ],
"properties": {
+ "type": {
+ "const": "object"
+ },
"$ref": {
"$comment": "TODO: Use Format Assertion when supported on Blaze",
"type": "string",
@@ -73,8 +78,11 @@
"outputSchema": {
"x-lint-exclude": [ "simple_properties_identifiers" ],
"type": "object",
- "required": [ "$ref" ],
+ "required": [ "type", "$ref" ],
"properties": {
+ "type": {
+ "const": "object"
+ },
"$ref": {
"$comment": "TODO: Use Format Assertion when supported on Blaze",
"type": "string",