Skip to main content
Glama
openl-tablets

OpenL MCP Server

Official

Create New Table

openl_create_project_table

Create a project table from its complete RawSource 2D cell matrix, preserving covered cells and spans. Specify moduleName or new .xlsx modulePath; style is rejected; check status afterward.

Instructions

Create a table from its complete RawSource 2D cell matrix. Typed table creation DTOs are intentionally unsupported because they omit workbook features and do not round-trip reliably. Requires moduleName plus table { tableType: "RawSource", name, source }. By default moduleName identifies an existing module; pass modulePath ending in .xlsx to create a new module. Build the exact OpenL grid from the bundled guides or copy an existing raw source, including covered cells/spans where needed. Studio table write APIs cannot set cell formatting, so style is rejected. The response is metadata, not a compilation result; call openl_project_status afterward.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tableYes
projectIdYesProject ID returned by backend. Use the exact 'projectId' value from openl_list_projects() response without modification or reformatting.
sheetNameNoName of the sheet where the table will be created within the Excel file. If not provided, the table name will be used as the sheet name.
moduleNameYesName of an existing project module where the table will be created (for example, 'Main' or 'Rules').
modulePathNoProject-relative .xlsx path for a new module. When omitted, moduleName must identify an existing module.
response_formatNoResponse format: 'json' for structured, round-trippable data (default), 'markdown' for human-readable output, 'markdown_concise' for a brief summary (1-2 paragraphs), or 'markdown_detailed' for full details with contextjson

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed9 schema fields changedv1.2.0
    • addedInput schema / properties / modulePath
      Added value: +{
      +  "description": "Project-relative .xlsx path for a new module. When omitted, moduleName must identify an existing module.",
      +  "pattern": ".+\\.xlsx$",
      +  "type": "string"
      +}
    • changedInput schema / properties / response_format / default
      Previous value: -"markdown"New value: +"json"
    • changedInput schema / properties / response_format / description
      Previous value: -"Response format: 'json' for structured data, 'markdown' for human-readable (default), 'markdown_concise' for brief summary (1-2 paragraphs), 'markdown_detailed' for full details with context"New value: +"Response format: 'json' for structured, round-trippable data (default), 'markdown' for human-readable output, 'markdown_concise' for a brief summary (1-2 paragraphs), or 'markdown_detailed' for full details with context"
    • addedInput schema / properties / table / additionalProperties
      Added value: +false
    • removedInput schema / properties / table / description
      Removed value: -"Complete table structure (EditableTableView), selected by the CASE-SENSITIVE 'tableType' discriminator (Datatype, Vocabulary, Spreadsheet, SimpleSpreadsheet, SimpleRules, SmartRules, SimpleLookup, SmartLookup, Data, Test, RawSource — lowercase like 'datatype' is rejected). Each table type has a DIFFERENT shape (shown per branch); the backend rejects unknown/extra fields with a 400 'Failed to read request'. Rules tables use args/returnType/headers[{title}]/rules; Data and Test tables use headers[{fieldName}]/rows[{values}] (Test also needs testedTableName) — do NOT mix the two. There is NO 'signature' field. Tip: openl_get_table() on an existing table of the SAME type returns this exact shape to copy."
    • removedInput schema / properties / table / oneOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "extends": {
      -        "description": "Parent datatype to extend, if any.",
      -        "type": "string"
      -      },
      -      "fields": {
      -        "description": "Field definitions: [{ name, type }].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "defaultValue": {},
      -            "name": {
      -              "type": "string"
      -            },
      -            "required": {
      -              "anyOf": [
      -                {
      -                  "type": "boolean"
      -                },
      -                {
      -                  "type": "string"
      -                }
      -              ],
      -              "description": "Whether the field is required (backend stores a String; a boolean is accepted and coerced)."
      -            },
      -            "type": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "tableType": {
      -        "const": "Datatype",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "tableType": {
      -        "const": "Vocabulary",
      -        "type": "string"
      -      },
      -      "type": {
      -        "description": "Vocabulary element type.",
      -        "type": "string"
      -      },
      -      "values": {
      -        "description": "Vocabulary values: [{ value }].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "value": {}
      -          },
      -          "required": [
      -            "value"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "args": {
      -        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Parameter name, e.g. 'app'.",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "collect": {
      -        "type": "boolean"
      -      },
      -      "headers": {
      -        "description": "Column captions, e.g. [{title:'creditScore'},{title:'RET1'}].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "title": {
      -              "description": "Column caption.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "title"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "returnType": {
      -        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      -        "type": "string"
      -      },
      -      "rules": {
      -        "description": "Rows as maps keyed by the header titles, e.g. { creditScore: '< 580', RET1: 'Poor' }.",
      -        "items": {
      -          "additionalProperties": {},
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "SimpleRules",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "args": {
      -        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Parameter name, e.g. 'app'.",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "collect": {
      -        "type": "boolean"
      -      },
      -      "headers": {
      -        "description": "Condition column headers: [{ title, width? }].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "title": {
      -              "description": "Condition column caption.",
      -              "type": "string"
      -            },
      -            "width": {
      -              "description": "Number of condition columns this header spans (defaults to 1).",
      -              "maximum": 9007199254740991,
      -              "minimum": -9007199254740991,
      -              "type": "integer"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "returnType": {
      -        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      -        "type": "string"
      -      },
      -      "rules": {
      -        "description": "Rows as maps keyed by the header captions.",
      -        "items": {
      -          "additionalProperties": {},
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "SmartRules",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "args": {
      -        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Parameter name, e.g. 'app'.",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "collect": {
      -        "type": "boolean"
      -      },
      -      "headers": {
      -        "description": "Lookup column headers: [{ title?, children? }] — children nest for multi-level column grouping.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "children": {
      -              "description": "Nested sub-column headers ({ title, children }) for multi-level grouping.",
      -              "items": {
      -                "additionalProperties": {},
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "title": {
      -              "description": "Header caption.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "returnType": {
      -        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      -        "type": "string"
      -      },
      -      "rows": {
      -        "description": "Lookup rows as maps keyed by the columns.",
      -        "items": {
      -          "additionalProperties": {},
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "SimpleLookup",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "args": {
      -        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Parameter name, e.g. 'app'.",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "collect": {
      -        "type": "boolean"
      -      },
      -      "headers": {
      -        "description": "Lookup column headers: [{ title?, children? }] — children nest for multi-level column grouping.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "children": {
      -              "description": "Nested sub-column headers ({ title, children }) for multi-level grouping.",
      -              "items": {
      -                "additionalProperties": {},
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "title": {
      -              "description": "Header caption.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "returnType": {
      -        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      -        "type": "string"
      -      },
      -      "rows": {
      -        "description": "Lookup rows as maps keyed by the columns.",
      -        "items": {
      -          "additionalProperties": {},
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "SmartLookup",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "args": {
      -        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Parameter name, e.g. 'app'.",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "returnType": {
      -        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      -        "type": "string"
      -      },
      -      "steps": {
      -        "description": "Named steps: [{ name, type?, value }]. The formula goes in 'value' (e.g. value: '= app.annualIncome / 12'); there is NO 'formula' field. Reference earlier steps as $StepName.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Step name (referenced elsewhere as $StepName).",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Step result type, e.g. 'Double', 'String'.",
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "The step's formula or value, e.g. '= app.annualIncome / 12'. NOT 'formula'."
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "value"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "SimpleSpreadsheet",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "args": {
      -        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "description": "Parameter name, e.g. 'app'.",
      -              "type": "string"
      -            },
      -            "type": {
      -              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "cells": {
      -        "description": "2D matrix of cells: [[{ value }]]. The formula/value goes in each cell's 'value'.",
      -        "items": {
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "value": {}
      -            },
      -            "required": [
      -              "value"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "type": "array"
      -      },
      -      "columns": {
      -        "description": "Column headers: [{ name, type? }].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "type": "string"
      -            },
      -            "type": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "returnType": {
      -        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      -        "type": "string"
      -      },
      -      "rows": {
      -        "description": "Row headers: [{ name, type? }].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "type": "string"
      -            },
      -            "type": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "Spreadsheet",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "dataType": {
      -        "description": "Element type of the data table.",
      -        "type": "string"
      -      },
      -      "headers": {
      -        "description": "Columns: [{fieldName}].",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "displayName": {
      -              "type": "string"
      -            },
      -            "fieldName": {
      -              "description": "Column accessor, e.g. 'app.age' (an input) or '_res_.eligible' (an expected result).",
      -              "type": "string"
      -            },
      -            "foreignKey": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "fieldName"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "rows": {
      -        "description": "Rows as positional { values: [...] }.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "values": {
      -              "description": "Positional cell values — one per header, in header order.",
      -              "items": {},
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "values"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "Data",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "headers": {
      -        "description": "Test columns: [{fieldName}] — inputs like 'app.age' and expected results like '_res_.eligible'.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "displayName": {
      -              "type": "string"
      -            },
      -            "fieldName": {
      -              "description": "Column accessor, e.g. 'app.age' (an input) or '_res_.eligible' (an expected result).",
      -              "type": "string"
      -            },
      -            "foreignKey": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "fieldName"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "rows": {
      -        "description": "Test cases as positional { values: [...] } (NOT 'rules'); one value per header.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "values": {
      -              "description": "Positional cell values — one per header, in header order.",
      -              "items": {},
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "values"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "Test",
      -        "type": "string"
      -      },
      -      "testedTableName": {
      -        "description": "Name of the table/method under test (NOT 'testedMethodName').",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name",
      -      "testedTableName"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "description": "Optional; ignored on create.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Informational only — NOT the discriminator (that is tableType).",
      -        "type": "string"
      -      },
      -      "messages": {
      -        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      -        "items": {},
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      -        "type": "string"
      -      },
      -      "pos": {
      -        "type": "string"
      -      },
      -      "properties": {
      -        "additionalProperties": {},
      -        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "source": {
      -        "description": "2D matrix of raw cells: [[{ value, colspan?, rowspan?, covered? }]].",
      -        "items": {
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "colspan": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "covered": {
      -                "type": "boolean"
      -              },
      -              "rowspan": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "value": {}
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "type": "array"
      -      },
      -      "tableType": {
      -        "const": "RawSource",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "tableType",
      -      "name"
      -    ],
      -    "type": "object"
      -  }
      -]
    • addedInput schema / properties / table / properties
      Added value: +{
      +  "id": {
      +    "description": "Table id; ignored on create and validated against the path on update.",
      +    "type": "string"
      +  },
      +  "kind": {
      +    "description": "Informational table kind.",
      +    "enum": [
      +      "Rules",
      +      "Spreadsheet",
      +      "Datatype",
      +      "Data",
      +      "Test",
      +      "TBasic",
      +      "Column Match",
      +      "Method",
      +      "Run",
      +      "Constants",
      +      "Conditions",
      +      "Actions",
      +      "Returns",
      +      "Environment",
      +      "Properties",
      +      "Other"
      +    ],
      +    "type": "string"
      +  },
      +  "messages": {
      +    "description": "Read-only diagnostics tolerated when a get response is round-tripped.",
      +    "items": {},
      +    "type": "array"
      +  },
      +  "name": {
      +    "description": "Required nonblank table name (a valid Java identifier, e.g. 'calculatePremium').",
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "pos": {
      +    "type": "string"
      +  },
      +  "source": {
      +    "description": "Complete 2D source matrix. Preserve cell positions, covered placeholders, and spans when replacing a table. Remove read-only style objects returned by styles=true; Studio table write APIs cannot change formatting.",
      +    "items": {
      +      "items": {
      +        "additionalProperties": false,
      +        "description": "Writable raw cell. Studio exposes style only when reading with styles=true; table write APIs do not support changing style, so style is intentionally rejected.",
      +        "properties": {
      +          "cell": {
      +            "type": "string"
      +          },
      +          "colspan": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "covered": {
      +            "type": "boolean"
      +          },
      +          "rowspan": {
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "value": {}
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "type": "array"
      +  },
      +  "tableType": {
      +    "const": "RawSource",
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / table / required
      Added value: +[
      +  "tableType",
      +  "name",
      +  "source"
      +]
    • addedInput schema / properties / table / type
      Added value: +"object"
  2. Changed6 schema fields changedv1.1.0
    • changedInput schema / properties / moduleName / description
      Previous value: -"Name of an existing project module where the table will be created (for example, 'Rules')."New value: +"Name of an existing project module where the table will be created (for example, 'Main' or 'Rules')."
    • removedInput schema / properties / table / additionalProperties
      Removed value: -{}
    • changedInput schema / properties / table / description
      Previous value: -"Complete table structure (EditableTableView). Must include at least tableType, kind, and name, plus type-specific data (for example rules/headers for Rules tables, rows for Spreadsheet, fields for Datatype). id is optional for create requests."New value: +"Complete table structure (EditableTableView), selected by the CASE-SENSITIVE 'tableType' discriminator (Datatype, Vocabulary, Spreadsheet, SimpleSpreadsheet, SimpleRules, SmartRules, SimpleLookup, SmartLookup, Data, Test, RawSource — lowercase like 'datatype' is rejected). Each table type has a DIFFERENT shape (shown per branch); the backend rejects unknown/extra fields with a 400 'Failed to read request'. Rules tables use args/returnType/headers[{title}]/rules; Data and Test tables use headers[{fieldName}]/rows[{values}] (Test also needs testedTableName) — do NOT mix the two. There is NO 'signature' field. Tip: openl_get_table() on an existing table of the SAME type returns this exact shape to copy."
    • addedInput schema / properties / table / oneOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "extends": {
      +        "description": "Parent datatype to extend, if any.",
      +        "type": "string"
      +      },
      +      "fields": {
      +        "description": "Field definitions: [{ name, type }].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "defaultValue": {},
      +            "name": {
      +              "type": "string"
      +            },
      +            "required": {
      +              "anyOf": [
      +                {
      +                  "type": "boolean"
      +                },
      +                {
      +                  "type": "string"
      +                }
      +              ],
      +              "description": "Whether the field is required (backend stores a String; a boolean is accepted and coerced)."
      +            },
      +            "type": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "tableType": {
      +        "const": "Datatype",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "tableType": {
      +        "const": "Vocabulary",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Vocabulary element type.",
      +        "type": "string"
      +      },
      +      "values": {
      +        "description": "Vocabulary values: [{ value }].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "value": {}
      +          },
      +          "required": [
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "args": {
      +        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Parameter name, e.g. 'app'.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "collect": {
      +        "type": "boolean"
      +      },
      +      "headers": {
      +        "description": "Column captions, e.g. [{title:'creditScore'},{title:'RET1'}].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "title": {
      +              "description": "Column caption.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "title"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "returnType": {
      +        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      +        "type": "string"
      +      },
      +      "rules": {
      +        "description": "Rows as maps keyed by the header titles, e.g. { creditScore: '< 580', RET1: 'Poor' }.",
      +        "items": {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "SimpleRules",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "args": {
      +        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Parameter name, e.g. 'app'.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "collect": {
      +        "type": "boolean"
      +      },
      +      "headers": {
      +        "description": "Condition column headers: [{ title, width? }].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "title": {
      +              "description": "Condition column caption.",
      +              "type": "string"
      +            },
      +            "width": {
      +              "description": "Number of condition columns this header spans (defaults to 1).",
      +              "maximum": 9007199254740991,
      +              "minimum": -9007199254740991,
      +              "type": "integer"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "returnType": {
      +        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      +        "type": "string"
      +      },
      +      "rules": {
      +        "description": "Rows as maps keyed by the header captions.",
      +        "items": {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "SmartRules",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "args": {
      +        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Parameter name, e.g. 'app'.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "collect": {
      +        "type": "boolean"
      +      },
      +      "headers": {
      +        "description": "Lookup column headers: [{ title?, children? }] — children nest for multi-level column grouping.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "children": {
      +              "description": "Nested sub-column headers ({ title, children }) for multi-level grouping.",
      +              "items": {
      +                "additionalProperties": {},
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "title": {
      +              "description": "Header caption.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "returnType": {
      +        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      +        "type": "string"
      +      },
      +      "rows": {
      +        "description": "Lookup rows as maps keyed by the columns.",
      +        "items": {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "SimpleLookup",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "args": {
      +        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Parameter name, e.g. 'app'.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "collect": {
      +        "type": "boolean"
      +      },
      +      "headers": {
      +        "description": "Lookup column headers: [{ title?, children? }] — children nest for multi-level column grouping.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "children": {
      +              "description": "Nested sub-column headers ({ title, children }) for multi-level grouping.",
      +              "items": {
      +                "additionalProperties": {},
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "title": {
      +              "description": "Header caption.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "returnType": {
      +        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      +        "type": "string"
      +      },
      +      "rows": {
      +        "description": "Lookup rows as maps keyed by the columns.",
      +        "items": {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "SmartLookup",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "args": {
      +        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Parameter name, e.g. 'app'.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "returnType": {
      +        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      +        "type": "string"
      +      },
      +      "steps": {
      +        "description": "Named steps: [{ name, type?, value }]. The formula goes in 'value' (e.g. value: '= app.annualIncome / 12'); there is NO 'formula' field. Reference earlier steps as $StepName.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Step name (referenced elsewhere as $StepName).",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Step result type, e.g. 'Double', 'String'.",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "The step's formula or value, e.g. '= app.annualIncome / 12'. NOT 'formula'."
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "SimpleSpreadsheet",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "args": {
      +        "description": "Input parameters: [{ name, type }]. There is NO 'signature' field — use this instead.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Parameter name, e.g. 'app'.",
      +              "type": "string"
      +            },
      +            "type": {
      +              "description": "Parameter type, e.g. 'LoanApplication', 'Integer'.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "cells": {
      +        "description": "2D matrix of cells: [[{ value }]]. The formula/value goes in each cell's 'value'.",
      +        "items": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "value": {}
      +            },
      +            "required": [
      +              "value"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "type": "array"
      +      },
      +      "columns": {
      +        "description": "Column headers: [{ name, type? }].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "type": "string"
      +            },
      +            "type": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "returnType": {
      +        "description": "Return type, e.g. 'String', 'Double', 'EligibilityResult', 'SpreadsheetResult'.",
      +        "type": "string"
      +      },
      +      "rows": {
      +        "description": "Row headers: [{ name, type? }].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "type": "string"
      +            },
      +            "type": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "Spreadsheet",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "dataType": {
      +        "description": "Element type of the data table.",
      +        "type": "string"
      +      },
      +      "headers": {
      +        "description": "Columns: [{fieldName}].",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "displayName": {
      +              "type": "string"
      +            },
      +            "fieldName": {
      +              "description": "Column accessor, e.g. 'app.age' (an input) or '_res_.eligible' (an expected result).",
      +              "type": "string"
      +            },
      +            "foreignKey": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "fieldName"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "rows": {
      +        "description": "Rows as positional { values: [...] }.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "values": {
      +              "description": "Positional cell values — one per header, in header order.",
      +              "items": {},
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "values"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "Data",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "headers": {
      +        "description": "Test columns: [{fieldName}] — inputs like 'app.age' and expected results like '_res_.eligible'.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "displayName": {
      +              "type": "string"
      +            },
      +            "fieldName": {
      +              "description": "Column accessor, e.g. 'app.age' (an input) or '_res_.eligible' (an expected result).",
      +              "type": "string"
      +            },
      +            "foreignKey": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "fieldName"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "rows": {
      +        "description": "Test cases as positional { values: [...] } (NOT 'rules'); one value per header.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "values": {
      +              "description": "Positional cell values — one per header, in header order.",
      +              "items": {},
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "values"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "Test",
      +        "type": "string"
      +      },
      +      "testedTableName": {
      +        "description": "Name of the table/method under test (NOT 'testedMethodName').",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name",
      +      "testedTableName"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "description": "Optional; ignored on create.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Informational only — NOT the discriminator (that is tableType).",
      +        "type": "string"
      +      },
      +      "messages": {
      +        "description": "Read-only diagnostics; tolerated if a payload is copied from openl_get_table().",
      +        "items": {},
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Table name (a valid Java identifier, e.g. 'calculatePremium').",
      +        "type": "string"
      +      },
      +      "pos": {
      +        "type": "string"
      +      },
      +      "properties": {
      +        "additionalProperties": {},
      +        "description": "Dimension/table properties, e.g. { state: 'CA', lob: 'Auto' }.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "source": {
      +        "description": "2D matrix of raw cells: [[{ value, colspan?, rowspan?, covered? }]].",
      +        "items": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "colspan": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "covered": {
      +                "type": "boolean"
      +              },
      +              "rowspan": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "value": {}
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "type": "array"
      +      },
      +      "tableType": {
      +        "const": "RawSource",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tableType",
      +      "name"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / table / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedInput schema / properties / table / type
      Removed value: -"object"
  3. First observedv0.0.0

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The only annotation is openWorldHint, so the description carries the behavioral burden, and it does so well: it discloses unsupported DTOs, the style-rejection behavior, the need for covered cells/spans, and the fact that the response is metadata, not a compilation result. These are exactly the non-obvious behaviors an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then adds each constraint as a separate compact sentence: DTOs, module modes, source construction, style, and response semantics. There is no filler or redundant explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-source tool with no output schema, it covers the payload shape, module creation mode, source construction, style limitation, and the follow-up status call. It stops short of describing what metadata fields the response contains, which would have made it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the baseline is 3, and the description largely restates what the schema already documents, such as moduleName vs modulePath, style rejection, and required table fields. While 'Build the exact OpenL grid from the bundled guides or copy an existing raw source' adds some practical guidance, the 'Requires moduleName plus table...' phrasing omits projectId, so it earns no higher credit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific action and resource: create a table from its complete RawSource 2D cell matrix. This clearly separates the tool from project creation and table mutation tools via the create + RawSource scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete conditions: use moduleName for an existing module, pass a .xlsx modulePath to create a new module, and call openl_project_status afterward. It also explains that typed table creation DTOs are unsupported, though it does not explicitly name update/copy sibling tools as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/openl-tablets/openl-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server