Product Kit · 1.0.0
Browser-local · no tool execution or publication
Tool Schema Publishing Kit
Publish one strict tool contract into deterministic provider definitions, executable fixtures, assertions, OpenAPI, and documentation.
Agent developers maintaining one bounded tool schema across OpenAI, Anthropic, MCP, JSON Schema, OpenAPI, tests, and human docs.
Generated artifacts
[
{
"name": "anthropic_definition",
"media_type": "application/json",
"bytes": 818
},
{
"name": "canonical_json_schema",
"media_type": "application/json",
"bytes": 629
},
{
"name": "executable_fixture",
"media_type": "application/json",
"bytes": 239
},
{
"name": "generated_assertions",
"media_type": "text/javascript",
"bytes": 2410
},
{
"name": "markdown_docs",
"media_type": "text/markdown",
"bytes": 2618
},
{
"name": "mcp_schema",
"media_type": "application/json",
"bytes": 1079
},
{
"name": "openai_definition",
"media_type": "application/json",
"bytes": 930
},
{
"name": "openapi_fragment",
"media_type": "application/json",
"bytes": 2583
}
]Complete publishing envelope
{
"ok": true,
"schema_version": "utilito.product-kit.v1",
"kit": {
"id": "tool-schema-publishing-kit",
"version": "1.0.0"
},
"result": {
"canonical_json_schema": {
"additionalProperties": false,
"description": "Weather lookup input.",
"properties": {
"city": {
"description": "City name.",
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"options": {
"additionalProperties": false,
"properties": {
"include_wind": {
"type": "boolean"
}
},
"required": [],
"type": "object"
},
"units": {
"description": "Temperature units.",
"enum": [
"celsius",
"fahrenheit"
],
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
},
"openai_definition": {
"type": "function",
"function": {
"name": "lookup_weather",
"description": "Look up submitted weather fixture data for one city.",
"parameters": {
"additionalProperties": false,
"description": "Weather lookup input.",
"properties": {
"city": {
"description": "City name.",
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"options": {
"additionalProperties": false,
"properties": {
"include_wind": {
"type": "boolean"
}
},
"required": [],
"type": "object"
},
"units": {
"description": "Temperature units.",
"enum": [
"celsius",
"fahrenheit"
],
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
}
}
},
"anthropic_definition": {
"name": "lookup_weather",
"description": "Look up submitted weather fixture data for one city.",
"input_schema": {
"additionalProperties": false,
"description": "Weather lookup input.",
"properties": {
"city": {
"description": "City name.",
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"options": {
"additionalProperties": false,
"properties": {
"include_wind": {
"type": "boolean"
}
},
"required": [],
"type": "object"
},
"units": {
"description": "Temperature units.",
"enum": [
"celsius",
"fahrenheit"
],
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
}
},
"mcp_schema": {
"name": "lookup_weather",
"description": "Look up submitted weather fixture data for one city.",
"inputSchema": {
"additionalProperties": false,
"description": "Weather lookup input.",
"properties": {
"city": {
"description": "City name.",
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"options": {
"additionalProperties": false,
"properties": {
"include_wind": {
"type": "boolean"
}
},
"required": [],
"type": "object"
},
"units": {
"description": "Temperature units.",
"enum": [
"celsius",
"fahrenheit"
],
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
},
"outputSchema": {
"additionalProperties": false,
"properties": {
"summary": {
"type": "string"
},
"temperature": {
"type": "number"
}
},
"required": [
"temperature"
],
"type": "object"
}
},
"openapi_fragment": {
"openapi": "3.1.0",
"x-utilito-typed-failures": [
{
"code": "CITY_NOT_FOUND",
"description": "The submitted city has no fixture.",
"retryable": false
},
{
"code": "TEMPORARY_SOURCE_UNAVAILABLE",
"description": "The caller-owned source is unavailable.",
"retryable": true
}
],
"paths": {
"/tools/lookup_weather": {
"post": {
"operationId": "lookup_weather",
"description": "Look up submitted weather fixture data for one city.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"additionalProperties": false,
"description": "Weather lookup input.",
"properties": {
"city": {
"description": "City name.",
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"options": {
"additionalProperties": false,
"properties": {
"include_wind": {
"type": "boolean"
}
},
"required": [],
"type": "object"
},
"units": {
"description": "Temperature units.",
"enum": [
"celsius",
"fahrenheit"
],
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Successful tool result.",
"content": {
"application/json": {
"schema": {
"additionalProperties": false,
"properties": {
"summary": {
"type": "string"
},
"temperature": {
"type": "number"
}
},
"required": [
"temperature"
],
"type": "object"
}
}
}
},
"422": {
"description": "Typed tool failure. See x-utilito-typed-failures."
}
}
}
}
}
},
"executable_fixture": {
"tool_name": "lookup_weather",
"input": {
"city": "example",
"options": {
"include_wind": false
},
"units": "celsius"
},
"validation": {
"valid": true,
"validator": "utilito.schema-contract.v1"
}
},
"generated_assertions": {
"runtime": "node",
"node_source": "import assert from 'node:assert/strict';\nconst toolName=\"lookup_weather\";\nconst schema={\n \"additionalProperties\": false,\n \"description\": \"Weather lookup input.\",\n \"properties\": {\n \"city\": {\n \"description\": \"City name.\",\n \"maxLength\": 80,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"options\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"include_wind\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"units\": {\n \"description\": \"Temperature units.\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ],\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"city\"\n ],\n \"type\": \"object\"\n};\nconst fixture={\n \"city\": \"example\",\n \"options\": {\n \"include_wind\": false\n },\n \"units\": \"celsius\"\n};\nconst typedFailures=[\n \"CITY_NOT_FOUND\",\n \"TEMPORARY_SOURCE_UNAVAILABLE\"\n];\nfunction valid(node,value){if(node.enum&&!node.enum.some(item=>JSON.stringify(item)===JSON.stringify(value)))return false;if(node.type==='object'){if(!value||typeof value!=='object'||Array.isArray(value))return false;for(const key of node.required)if(!(key in value))return false;for(const [key,item] of Object.entries(value)){if(node.properties[key]){if(!valid(node.properties[key],item))return false;}else if(node.additionalProperties===false)return false;}return true;}if(node.type==='array')return Array.isArray(value)&&(node.minItems===undefined||value.length>=node.minItems)&&(node.maxItems===undefined||value.length<=node.maxItems)&&value.every(item=>valid(node.items,item));if(node.type==='integer'&&!Number.isInteger(value))return false;if(node.type==='number'&&!(typeof value==='number'&&Number.isFinite(value)))return false;if((node.type==='integer'||node.type==='number')&&((node.minimum!==undefined&&value<node.minimum)||(node.maximum!==undefined&&value>node.maximum)))return false;if(node.type==='null')return value===null;if(node.type==='string')return typeof value==='string'&&(node.minLength===undefined||value.length>=node.minLength)&&(node.maxLength===undefined||value.length<=node.maxLength);return node.type==='boolean'?typeof value==='boolean':true;}\nassert.match(toolName,/^[A-Za-z_][A-Za-z0-9_-]{0,63}$/);\nassert.equal(valid(schema,fixture),true);\nassert.equal(new Set(typedFailures).size,typedFailures.length);\nconsole.log('Generated Tool Schema Publishing Kit assertions passed');\n"
},
"markdown_docs": "# lookup_weather\n\nLook up submitted weather fixture data for one city.\n\n## Supported schema subset\n\nSupported keywords: `additionalProperties`, `description`, `enum`, `items`, `maxItems`, `maxLength`, `maximum`, `minItems`, `minLength`, `minimum`, `properties`, `required`, `type`. Generated fixture strings are capped at 10000 characters and arrays at 1000 items; the complete fixture is capped at 10000 generated values and 65536 UTF-8 bytes. Every known object record must declare `additionalProperties: false`. Arbitrary JSON maps are accepted only at an explicit inert boundary with empty `properties`, empty `required`, `additionalProperties: true`, and `x-utilito-inert-json: true`. Combiners, references, unions, conditionals, pattern properties, unevaluated properties, and provider extensions are rejected.\n\n## Input schema\n\n```json\n{\n \"additionalProperties\": false,\n \"description\": \"Weather lookup input.\",\n \"properties\": {\n \"city\": {\n \"description\": \"City name.\",\n \"maxLength\": 80,\n \"minLength\": 1,\n \"type\": \"string\"\n },\n \"options\": {\n \"additionalProperties\": false,\n \"properties\": {\n \"include_wind\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [],\n \"type\": \"object\"\n },\n \"units\": {\n \"description\": \"Temperature units.\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ],\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"city\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Output schema\n\nYes; represented by MCP and OpenAPI, explicitly unsupported in OpenAI/Anthropic tool definitions.\n\n```json\n{\n \"additionalProperties\": false,\n \"properties\": {\n \"summary\": {\n \"type\": \"string\"\n },\n \"temperature\": {\n \"type\": \"number\"\n }\n },\n \"required\": [\n \"temperature\"\n ],\n \"type\": \"object\"\n}\n```\n\n## Provider support\n\n- **openai:** input represented; output unsupported_explicit; failures documentation_only.\n- **anthropic:** input represented; output unsupported_explicit; failures documentation_only.\n- **mcp:** input represented; output represented; failures documentation_only.\n- **openapi:** input represented; output represented; failures documented_responses.\n\n## Typed failures\n\n- `CITY_NOT_FOUND` — The submitted city has no fixture. Retryable: no.\n- `TEMPORARY_SOURCE_UNAVAILABLE` — The caller-owned source is unavailable. Retryable: yes.\n\n## Trust boundary\n\nGeneration is deterministic and local. No tool is executed, reflected, published, registered, called, or sent to a provider. No network, model, storage, telemetry, credential, provider secret, or arbitrary URL is used.\n",
"provider_support": [
{
"provider": "openai",
"input_schema": "represented",
"output_schema": "unsupported_explicit",
"typed_failures": "documentation_only"
},
{
"provider": "anthropic",
"input_schema": "represented",
"output_schema": "unsupported_explicit",
"typed_failures": "documentation_only"
},
{
"provider": "mcp",
"input_schema": "represented",
"output_schema": "represented",
"typed_failures": "documentation_only"
},
{
"provider": "openapi",
"input_schema": "represented",
"output_schema": "represented",
"typed_failures": "documented_responses"
}
],
"typed_failures": [
{
"code": "CITY_NOT_FOUND",
"description": "The submitted city has no fixture.",
"retryable": false
},
{
"code": "TEMPORARY_SOURCE_UNAVAILABLE",
"description": "The caller-owned source is unavailable.",
"retryable": true
}
],
"artifact_manifest": [
{
"name": "anthropic_definition",
"media_type": "application/json",
"bytes": 818
},
{
"name": "canonical_json_schema",
"media_type": "application/json",
"bytes": 629
},
{
"name": "executable_fixture",
"media_type": "application/json",
"bytes": 239
},
{
"name": "generated_assertions",
"media_type": "text/javascript",
"bytes": 2410
},
{
"name": "markdown_docs",
"media_type": "text/markdown",
"bytes": 2618
},
{
"name": "mcp_schema",
"media_type": "application/json",
"bytes": 1079
},
{
"name": "openai_definition",
"media_type": "application/json",
"bytes": 930
},
{
"name": "openapi_fragment",
"media_type": "application/json",
"bytes": 2583
}
],
"safety": {
"tool_execution": false,
"publication": false,
"provider_calls": false,
"network_used": false,
"model_used": false,
"storage_used": false,
"telemetry_used": false,
"reflection": false
}
},
"receipt": {
"input_bytes": 915,
"output_bytes": 11428,
"operations": 4,
"omitted_items": 0,
"warnings": [
"OPENAI_OUTPUT_SCHEMA_UNSUPPORTED",
"ANTHROPIC_OUTPUT_SCHEMA_UNSUPPORTED"
],
"artifacts": 8,
"schema_nodes": 8,
"properties": 6,
"typed_failures": 2,
"fixture_valid": true,
"values_invented": 3
},
"provenance": {
"deterministic": true,
"model_used": false,
"network_used": false,
"storage_used": false,
"core_versions": {
"tool_schema_publishing_kit": "1.0.0",
"tool_schema_generator": "tool-schema-generator-core",
"json_schema_to_tool_definition": "json-schema-to-tool-definition-core",
"structured_schema": "utilito.schema-contract.v1",
"tool_calling_validator": "tool-calling-validator-core"
}
},
"error": null
}Free runnable capability
Generate and download one complete bounded schema publishing packet locally with no signup.
Builder capability
The existing Builder Pilot can coordinate higher bounded review volume; it does not add provider calls, tool execution, publication, package release, storage, or telemetry.
See the existing Builder PilotPrivacy boundary
Browser generation runs locally. API and MCP requests are response-only; no tool execution, provider or network call, publication, reflection, credential, storage, or telemetry is accepted or used.
Limits and trust boundary
- The executable subset is intentionally smaller than full JSON Schema: closed object records, arrays, primitive types, enum, descriptions, and bounded length, item, and numeric constraints. References, combiners, unions, conditionals, pattern properties, defaults, formats, and provider extensions are rejected.
- Every known object record must set additionalProperties:false. Arbitrary dynamic keys are allowed only at an explicit empty inert JSON boundary marked x-utilito-inert-json:true with additionalProperties:true.
- OpenAI and Anthropic tool definitions do not represent the submitted output schema or typed failures. Those omissions are explicit in provider support diagnostics and documentation; MCP and OpenAPI carry the output schema when supplied.
- Generated fixtures are deterministic examples, not live tool results. Assertions validate only the documented subset. The kit never executes, reflects, registers, publishes, calls, stores, or sends the tool or its artifacts.
- Dangerous names and keys, credentials, provider secrets, accessors, proxies, cycles, unsupported prototypes, non-finite values, oversized inputs, and unsupported keywords fail closed.