Netzo API for agents via Model Context Protocol (Streamable HTTP). Same procedures and permissions as /api/rpc: OAuth sign-in (the user's module roles) or an org API key.
Protocol
MCP 2025-11-25
Server version
2026.10.13-233049
Supports
Tools
Resources
Prompts
Logging
Overall score
B
Overall quality score: 77 out of 10077/100
Server metadata
6 of 8 fields80/1006.4 / 8 pts
Identity, discovery, and usage metadata advertised during the MCP handshake.
Netzo API for agents via Model Context Protocol (Streamable HTTP). Same procedures and permissions as /api/rpc: OAuth sign-in (the user's module roles) or an org API key.
You are an agent interacting with the Netzo API through MCP. DISCOVERY: Call list_tables, then describe_table before querying an unfamiliar table. Read `information` when explaining what a table is. If list_tables fails, quote its message and stop: the connection grants no tables (API key matrix, or the signed-in user's module roles). That is authorization, not a connection failure. READ: Use find / count / get. Pagination uses { page, pageSize } (not limit/skip). Cap pageSize at 50. WRITE: Call describe_table first. Prefer archive over delete when available. Destructive tools need confirm:true or elicitation. Never invent field names or fabricate row data. When you write for the user, quote locale labels from list_tables, describe_table, or fieldLabels in backticks (e.g. `Weight`). Tool names, tableUid, and row keys stay UIDs. For visual host UI, prefer Netzo MCP Apps: find-table for columns, page-list / page-grid / page-gallery for cards, accordion for expandable groups, record-card for one row, kpi-stat for one number, chart for charts (Netzo fetches and aggregates the data itself; never pass numbers). Files, attachments, and generated PDFs: get_skill { name: "netzo-mcp-read", ref: "files" }. Report markdown: get_skill { name: "netzo-reports-author" }. Netzo renders charts, PDFs, and Comark. Do not look for a chart, Comark, PDF, email, or etiket MCP.
SKILLS: Before a multi-step task, call get_skill with the matching name and follow it. A `netzo://skills/{name}/{ref}` URI inside a skill is loaded the same way (get_skill accepts the URI as `name`). Catalog:
- netzo-mcp-discover: Discover Netzo tables, schemas, and allowed procedures through MCP. Use when the agent must learn which tables the user or API key can access, inspect a table before querying, or choose a module such as CRM or purchases.
- netzo-mcp-read: Read Netzo records, files, and generated PDFs through MCP. Use when listing, searching, counting, aggregating, or fetching a record by id, or when the us
Protocol
Pass100/10016 / 16 pts
Connection, authentication, and protocol compatibility.
How to fix: On each tool, declare annotations.readOnlyHint, annotations.destructiveHint, and annotations.openWorldHint as booleans. The policy review separately assesses whether their values match the tool's actual behavior.
How to fix: For Claude directory submission, declare the applicable annotations.readOnlyHint or annotations.destructiveHint value as a boolean on every tool.
How to fix: For tools that render a UI resource, add openai/toolInvocation with string fields invoking and invoked (present-tense labels shown while the tool runs and after it finishes, e.g. "Searching…" / "Searched").
How to fix: Use a ui:// URI and text/html;profile=mcp-app. For mcp-use v1, use widgetMetadata.metadata.widgetDescription; for v2, use the bound tool's view.description. The current description check reads _meta.ui.widgetDescription or _meta["openai/widgetDescription"] on resource contents or linked tools, not resource.description. Consequently, v2 view.description alone may leave this warning: report the checker compatibility gap instead of adding unsupported v1 fields or claiming the warning is fixed.
How to fix: For ChatGPT submission, set one exact HTTPS origin such as "https://app.example.com" on every view via _meta.ui.domain (or openai/widgetDomain). Paths are not valid and all views in one app must share the origin.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Run any procedure without a dedicated tool: lifecycle and special actions (archive, approve, process, createInvoice, …), duplicate, and the read shape findReferences. Non-table procedures use the namespace as tableUid (pricing.resolve, compositions.ensure). Call `describe_table` to see the procedures a table offers. Record procedures take `id` (+ optional `data`); query procedures take only `data` as their input. Consequential actions require confirm:true or elicitation.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs85/100
Explain the meaning of this value, not just its name.
tableUid
The table (or namespace, e.g. "pricing") the procedure belongs to.
Clear enough to supply this argument.
action
The procedure to run (e.g. "archive", "duplicate", "findAggregates"). Must be one of the procedures listed in describe_table for this table.
Clear enough to supply this argument.
id
The record id, for record procedures.
Explain the meaning of this value, not just its name.
data
Additional payload, or the whole input for query / namespace procedures.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirm
Required for destructive actions when the client lacks elicitation.
Clear enough to supply this argument.
Annotations25/100
Declare readOnlyHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"destructiveHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "action",
"title": "Run Procedure",
"description": "Run any procedure without a dedicated tool: lifecycle and special actions (archive, approve, process, createInvoice, …), duplicate, and the read shape findReferences. Non-table procedures use the namespace as tableUid (pricing.resolve, compositions.ensure). Call `describe_table` to see the procedures a table offers. Record procedures take `id` (+ optional `data`); query procedures take only `data` as their input. Consequential actions require confirm:true or elicitation.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"action"
],
"properties": {
"id": {
"type": "string",
"description": "The record id, for record procedures."
},
"data": {
"type": "object",
"description": "Additional payload, or the whole input for query / namespace procedures.",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"action": {
"type": "string",
"description": "The procedure to run (e.g. \"archive\", \"duplicate\", \"findAggregates\"). Must be one of the procedures listed in describe_table for this table."
},
"confirm": {
"type": "boolean",
"description": "Required for destructive actions when the client lacks elicitation."
},
"tableUid": {
"type": "string",
"description": "The table (or namespace, e.g. \"pricing\") the procedure belongs to."
}
}
},
"annotations": {
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Compute totals over a find scope without paging rows. With `aggregates`: count / countDistinct / sum / min / max / average / weightedAverage, optionally per `groupBy` field. With `field`: the distinct values of one field. Use this for KPIs and breakdowns instead of summing `find` pages.
Describe the returned information so the agent knows whether it will answer the request.
Inputs80/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
tableUid
The table to aggregate.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Explain the meaning of this value, not just its name.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Clear enough to supply this argument.
query › or › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Explain the meaning of this value, not just its name.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Clear enough to supply this argument.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
aggregates › items › op
count, countDistinct, sum, min, max, average, or weightedAverage.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
aggregates › items › value › var
Field UID to aggregate. Omit for count.
Clear enough to supply this argument.
aggregates › items › weight › var
Weight field UID. weightedAverage only.
Clear enough to supply this argument.
groupBy
Field UID to group by (aggregates only).
Clear enough to supply this argument.
field
Field UID for distinct values (instead of aggregates).
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "aggregate",
"title": "Aggregate Records",
"description": "Compute totals over a find scope without paging rows. With `aggregates`: count / countDistinct / sum / min / max / average / weightedAverage, optionally per `groupBy` field. With `field`: the distinct values of one field. Use this for KPIs and breakdowns instead of summing `find` pages.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID for distinct values (instead of aggregates)."
},
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional. Pagination is ignored."
},
"groupBy": {
"type": "string",
"description": "Field UID to group by (aggregates only)."
},
"tableUid": {
"type": "string",
"description": "The table to aggregate."
},
"aggregates": {
"type": "array",
"items": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"count",
"countDistinct",
"sum",
"min",
"max",
"average",
"weightedAverage"
],
"type": "string",
"description": "count, countDistinct, sum, min, max, average, or weightedAverage."
},
"value": {
"type": "object",
"required": [
"var"
],
"properties": {
"var": {
"type": "string",
"description": "Field UID to aggregate. Omit for count."
}
}
},
"weight": {
"type": "object",
"required": [
"var"
],
"properties": {
"var": {
"type": "string",
"description": "Weight field UID. weightedAverage only."
}
}
}
}
},
"minItems": 1,
"description": "Aggregate definitions, e.g. [{ op: \"sum\", value: { var: \"total\" } }]."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Use a file staged by upload_file. mode "preview": run the blob field's document extractor and return the fields the file would establish (writes nothing). mode "slot": store the file in the record's blob field `uid` (e.g. a CFDI `xml`). mode "file": add the file to the record's files list as source evidence. Which blob fields a table has is in describe_table.
The description explains the capability, when to use it, and what to expect.
Inputs76/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
mode
"preview", "slot", or "file".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
stagingId
The stagingId returned by upload_file.
Clear enough to supply this argument.
uid
The same uid passed to upload_file.
Clear enough to supply this argument.
tableUid
The table of the record.
Explain the meaning of this value, not just its name.
recordId
The record to attach to (required for "slot" and "file").
Clear enough to supply this argument.
filename
Display name in the files list ("file" mode).
Clear enough to supply this argument.
Annotations25/100
Declare readOnlyHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"destructiveHint": false
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "attach_file",
"title": "Attach File",
"description": "Use a file staged by upload_file. mode \"preview\": run the blob field's document extractor and return the fields the file would establish (writes nothing). mode \"slot\": store the file in the record's blob field `uid` (e.g. a CFDI `xml`). mode \"file\": add the file to the record's files list as source evidence. Which blob fields a table has is in describe_table.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"mode",
"stagingId",
"uid",
"tableUid"
],
"properties": {
"uid": {
"type": "string",
"description": "The same uid passed to upload_file."
},
"mode": {
"enum": [
"preview",
"slot",
"file"
],
"type": "string",
"description": "\"preview\", \"slot\", or \"file\"."
},
"filename": {
"type": "string",
"description": "Display name in the files list (\"file\" mode)."
},
"recordId": {
"type": "string",
"description": "The record to attach to (required for \"slot\" and \"file\")."
},
"tableUid": {
"type": "string",
"description": "The table of the record."
},
"stagingId": {
"type": "string",
"description": "The stagingId returned by upload_file."
}
}
},
"annotations": {
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Create a new record in a table. Call `describe_table` first to get the required createInput JSON Schema. Returns the created record.
The description explains the capability, when to use it, and what to expect.
Inputs63/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
tableUid
The table to create a record in.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
data
The record data (field values). Call describe_table for the createInput shape.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare readOnlyHint, destructiveHint, openWorldHint based on the tool’s actual behavior.
{
"idempotentHint": false
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "create",
"title": "Create Record",
"description": "Create a new record in a table. Call `describe_table` first to get the required createInput JSON Schema. Returns the created record.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "The record data (field values). Call describe_table for the createInput shape.",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"tableUid": {
"type": "string",
"description": "The table to create a record in."
}
}
},
"annotations": {
"idempotentHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Permanently delete a record by id. This action is irreversible. Prefer archiving (using the action tool) when available. Requires confirm:true or a client with elicitation support.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Explain the meaning of this value, not just its name.
tableUid
The table the record belongs to.
Explain the meaning of this value, not just its name.
id
The record id to delete.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
confirm
Must be true when the client does not support elicitation.
Clear enough to supply this argument.
Annotations25/100
Declare readOnlyHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"destructiveHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete",
"title": "Delete Record",
"description": "Permanently delete a record by id. This action is irreversible. Prefer archiving (using the action tool) when available. Requires confirm:true or a client with elicitation support.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The record id to delete."
},
"confirm": {
"type": "boolean",
"description": "Must be true when the client does not support elicitation."
},
"tableUid": {
"type": "string",
"description": "The table the record belongs to."
}
}
},
"annotations": {
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Returns the full JSON Schema for a table row, the create/update input shapes, relation keys (for the `with` param on find/get), semanticTypes, locale field labels, allowed procedures, `actions` (per-procedure description, policy, and `action.data` input fields), `events` (what the table announces: its actions and declared events, which webhooks and notification templates subscribe to), and `information` (semantic table facts). Always call this before creating or updating records. For a namespace from list_tables (e.g. "pricing"), returns the input schema of each procedure.
The description explains the capability, when to use it, and what to expect.
Inputs70/100
Input documentation gives an agent enough context to populate the arguments.
tableUid
The table (or namespace) to inspect.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "describe_table",
"title": "Describe Table",
"description": "Returns the full JSON Schema for a table row, the create/update input shapes, relation keys (for the `with` param on find/get), semanticTypes, locale field labels, allowed procedures, `actions` (per-procedure description, policy, and `action.data` input fields), `events` (what the table announces: its actions and declared events, which webhooks and notification templates subscribe to), and `information` (semantic table facts). Always call this before creating or updating records. For a namespace from list_tables (e.g. \"pricing\"), returns the input schema of each procedure.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid"
],
"properties": {
"tableUid": {
"type": "string",
"description": "The table (or namespace) to inspect."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Query records from a table using filters, sort, pagination, and search. Returns paginated rows. Use `with` to load related rows. Pagination uses { page, pageSize } (pageSize capped at 50). Use `describe_table` first to discover available fields and relation keys.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
tableUid
The table to query.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Explain the meaning of this value, not just its name.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Clear enough to supply this argument.
query › or › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Clear enough to supply this argument.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Clear enough to supply this argument.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Clear enough to supply this argument.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "find",
"title": "Find Records",
"description": "Query records from a table using filters, sort, pagination, and search. Returns paginated rows. Use `with` to load related rows. Pagination uses { page, pageSize } (pageSize capped at 50). Use `describe_table` first to discover available fields and relation keys.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid"
],
"properties": {
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional."
},
"tableUid": {
"type": "string",
"description": "The table to query."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Loads a Netzo workflow skill (markdown protocol) by name, or one of its references with `ref`. Call it before a multi-step task that matches a skill in the server instructions or list_skills, then follow it. Load a reference only when the skill body points to it.
Describe the returned information so the agent knows whether it will answer the request.
Inputs93/100
Input documentation gives an agent enough context to populate the arguments.
name
Skill name (e.g. "netzo-mcp-write"), or a `netzo://skills/{name}[/{ref}]` URI quoted in a skill.
Clear enough to supply this argument.
ref
Optional reference name listed by list_skills, e.g. "sequence".
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_skill",
"title": "Get Skill",
"description": "Loads a Netzo workflow skill (markdown protocol) by name, or one of its references with `ref`. Call it before a multi-step task that matches a skill in the server instructions or list_skills, then follow it. Load a reference only when the skill body points to it.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"ref": {
"type": "string",
"description": "Optional reference name listed by list_skills, e.g. \"sequence\"."
},
"name": {
"type": "string",
"description": "Skill name (e.g. \"netzo-mcp-write\"), or a `netzo://skills/{name}[/{ref}]` URI quoted in a skill."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Fetch a single record by its id. Returns the record fields at the top level (not an id/status/data envelope). Use `with` to include related rows. Call `describe_table` to discover available relation keys.
The description explains the capability, when to use it, and what to expect.
Inputs58/100
Explain the meaning of this value, not just its name.
tableUid
The table to fetch from.
Explain the meaning of this value, not just its name.
id
The record id.
Explain the meaning of this value, not just its name.
with
Relation keys to include (e.g. ["customer", "items"]).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get",
"title": "Get Record",
"description": "Fetch a single record by its id. Returns the record fields at the top level (not an id/status/data envelope). Use `with` to include related rows. Call `describe_table` to discover available relation keys.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The record id."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys to include (e.g. [\"customer\", \"items\"])."
},
"tableUid": {
"type": "string",
"description": "The table to fetch from."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Import many rows into one table. Run mode "validate" first: it reports per row whether it would create or update, and which rows have issues, without writing. Then run mode "commit" with the same input. A row with `id` updates that record. Otherwise `matchOn` (a unique key of the table, see describe_table) finds the record to update, and no match creates one, so re-running a commit does not duplicate records. Needs the data:import permission. Call describe_table first for field names.
Describe the returned information so the agent knows whether it will answer the request.
Inputs85/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
tableUid
The table to import into.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
rows
Source rows (max 500 per call). Keys are field UIDs, or source column names when `mapping` is set.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
mapping
Field UID → source column name. Omit when row keys already are field UIDs.
Clear enough to supply this argument.
matchOn
Field UIDs of a unique key of the table (natural key) used to find existing records.
Clear enough to supply this argument.
mode
"validate" writes nothing; "commit" creates and updates.
Clear enough to supply this argument.
Annotations50/100
Declare readOnlyHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "import_records",
"title": "Import Records",
"description": "Import many rows into one table. Run mode \"validate\" first: it reports per row whether it would create or update, and which rows have issues, without writing. Then run mode \"commit\" with the same input. A row with `id` updates that record. Otherwise `matchOn` (a unique key of the table, see describe_table) finds the record to update, and no match creates one, so re-running a commit does not duplicate records. Needs the data:import permission. Call describe_table first for field names.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"rows",
"mode"
],
"properties": {
"mode": {
"enum": [
"validate",
"commit"
],
"type": "string",
"description": "\"validate\" writes nothing; \"commit\" creates and updates."
},
"rows": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"maxItems": 500,
"minItems": 1,
"description": "Source rows (max 500 per call). Keys are field UIDs, or source column names when `mapping` is set."
},
"mapping": {
"type": "object",
"description": "Field UID → source column name. Omit when row keys already are field UIDs.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"matchOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs of a unique key of the table (natural key) used to find existing records."
},
"tableUid": {
"type": "string",
"description": "The table to import into."
}
}
},
"annotations": {
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Lists Netzo workflow skills: step-by-step protocols for multi-step work (import, analyse, triage, report authoring…). Each entry says when to use it and which references it has. Load one with get_skill before starting that work.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
scope
Optional: only skills of this scope (e.g. "mcp", "sales", "inventory").
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_skills",
"title": "List Skills",
"description": "Lists Netzo workflow skills: step-by-step protocols for multi-step work (import, analyse, triage, report authoring…). Each entry says when to use it and which references it has. Load one with get_skill before starting that work.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"scope": {
"type": "string",
"description": "Optional: only skills of this scope (e.g. \"mcp\", \"sales\", \"inventory\")."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Returns tables this connection can access (locale label, module, granted procedures), plus count, plus `namespaces` (non-table procedures such as pricing.resolve, run through `action`). Fails with the reason when the API key is missing or rejected, or has no table grants. An optional moduleUid that matches no granted table returns count 0 — that is not an error.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Input documentation gives an agent enough context to populate the arguments.
moduleUid
Optional: filter tables by module uid (e.g. "crm", "purchases").
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_tables",
"title": "List Tables",
"description": "Returns tables this connection can access (locale label, module, granted procedures), plus count, plus `namespaces` (non-table procedures such as pricing.resolve, run through `action`). Fails with the reason when the API key is missing or rejected, or has no table grants. An optional moduleUid that matches no granted table returns count 0 — that is not an error.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"moduleUid": {
"type": "string",
"description": "Optional: filter tables by module uid (e.g. \"crm\", \"purchases\")."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description70/100
Update an existing record by id. Call `describe_table` first to get the updateInput schema. Only include the fields you want to change.
Describe the returned information so the agent knows whether it will answer the request.
Inputs76/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tableUid
The table the record belongs to.
Clear enough to supply this argument.
id
The record id to update.
Clear enough to supply this argument.
data
Fields to update (partial patch — omit unchanged fields). Call describe_table for the updateInput shape.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare readOnlyHint, destructiveHint, openWorldHint based on the tool’s actual behavior.
{
"idempotentHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "update",
"title": "Update Record",
"description": "Update an existing record by id. Call `describe_table` first to get the updateInput schema. Only include the fields you want to change.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"id",
"data"
],
"properties": {
"id": {
"type": "string",
"description": "The record id to update."
},
"data": {
"type": "object",
"description": "Fields to update (partial patch — omit unchanged fields). Call describe_table for the updateInput shape.",
"propertyNames": {
"type": "string"
},
"additionalProperties": true
},
"tableUid": {
"type": "string",
"description": "The table the record belongs to."
}
}
},
"annotations": {
"idempotentHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Stage a source file (PDF, XML, image, CSV, …) as base64 so it can be previewed or attached with attach_file. Staging does not link the file to any record. Returns `stagingId`. Max 10 MB.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Input documentation gives an agent enough context to populate the arguments.
uid
The blob field UID the file is for (e.g. "pdf", "xml"), or "file" for the files list.
Clear enough to supply this argument.
filename
Original file name, e.g. "invoice-123.pdf".
Clear enough to supply this argument.
contentType
MIME type, e.g. "application/pdf".
Clear enough to supply this argument.
base64
File bytes, base64-encoded.
Clear enough to supply this argument.
Annotations25/100
Declare readOnlyHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"destructiveHint": false
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "upload_file",
"title": "Upload File",
"description": "Stage a source file (PDF, XML, image, CSV, …) as base64 so it can be previewed or attached with attach_file. Staging does not link the file to any record. Returns `stagingId`. Max 10 MB.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"uid",
"filename",
"contentType",
"base64"
],
"properties": {
"uid": {
"type": "string",
"description": "The blob field UID the file is for (e.g. \"pdf\", \"xml\"), or \"file\" for the files list."
},
"base64": {
"type": "string",
"description": "File bytes, base64-encoded."
},
"filename": {
"type": "string",
"description": "Original file name, e.g. \"invoice-123.pdf\"."
},
"contentType": {
"type": "string",
"description": "MIME type, e.g. \"application/pdf\"."
}
}
},
"annotations": {
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Render expandable panels (Nuxt UI Accordion). Pass items with label and content, or tableUid to find rows (max 25). Use for FAQs, grouped facts, and long field text. Prefer page-list for a stacked catalog.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › label
Panel title.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › content
Panel body text.
Clear enough to supply this argument.
tableUid
Table to query when items is omitted.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Clear enough to supply this argument.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Clear enough to supply this argument.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
labelField
Row field for the panel title.
Clear enough to supply this argument.
contentField
Row field for the panel body.
Explain what happens when this optional value is omitted.
title
Optional heading above the accordion.
Explain what happens when this optional value is omitted.
type
Open one panel or many (default multiple).
Explain what happens when this optional value is omitted.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "accordion",
"title": "App: Accordion",
"description": "Render expandable panels (Nuxt UI Accordion). Pass items with label and content, or tableUid to find rows (max 25). Use for FAQs, grouped facts, and long field text. Prefer page-list for a stacked catalog.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"type": {
"enum": [
"single",
"multiple"
],
"type": "string",
"description": "Open one panel or many (default multiple)."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"content"
],
"properties": {
"label": {
"type": "string",
"description": "Panel title."
},
"content": {
"type": "string",
"description": "Panel body text."
}
}
},
"maxItems": 25,
"description": "Authored panels. Omit when tableUid is set."
},
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional. pageSize is capped at 25."
},
"title": {
"type": "string",
"description": "Optional heading above the accordion."
},
"tableUid": {
"type": "string",
"description": "Table to query when items is omitted."
},
"labelField": {
"type": "string",
"description": "Row field for the panel title."
},
"contentField": {
"type": "string",
"description": "Row field for the panel body."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
Shorten the title to an action and subject; move usage details into the description.
Description79/100
Fetch a record and render lifecycle stamp fields (*At) as a timeline. Use for archive, approve, and other stamp history on the row.
Describe the returned information so the agent knows whether it will answer the request.
Inputs47/100
Explain the meaning of this value, not just its name.
tableUid
Table of the record.
Explain the meaning of this value, not just its name.
id
Record id.
Explain the meaning of this value, not just its name.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "activity-timeline",
"title": "App: Activity Timeline",
"description": "Fetch a record and render lifecycle stamp fields (*At) as a timeline. Use for archive, approve, and other stamp history on the row.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Record id."
},
"tableUid": {
"type": "string",
"description": "Table of the record."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
Align the title with the capability actually described by this tool.
Description86/100
Preview a write (action or delete) on a record and let the user confirm in the iframe. Confirm calls delete or action with confirm:true. Prefer this over silent writes.
The description explains the capability, when to use it, and what to expect.
Inputs19/100
3 of 8 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
tableUid
Table of the record.
Explain the meaning of this value, not just its name.
action
Lifecycle action, or "delete".
Explain the meaning of this value, not just its name.
id
Record id.
Explain the meaning of this value, not just its name.
fields › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
fields › items › label
Not provided
Missing description. Explain what this value means and how to supply it.
fields › items › type
Not provided
Missing description. Explain what this value means and how to supply it.
fields › items › value
Not provided
Missing description. Explain what this value means and how to supply it.
fields › items › options
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations25/100
Declare readOnlyHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"destructiveHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "approval-form",
"title": "App: Approval Form",
"description": "Preview a write (action or delete) on a record and let the user confirm in the iframe. Confirm calls delete or action with confirm:true. Prefer this over silent writes.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"action",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Record id."
},
"action": {
"type": "string",
"description": "Lifecycle action, or \"delete\"."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"enum": [
"text",
"select",
"checkbox"
],
"type": "string"
},
"label": {
"type": "string"
},
"value": {
"anyOf": [
{
"type": "string",
"minLength": 0,
"description": "Text or select value"
},
{
"type": "boolean",
"description": "Checkbox value"
}
]
},
"options": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"description": "Optional extra form fields sent as action data."
},
"tableUid": {
"type": "string",
"description": "Table of the record."
}
}
},
"annotations": {
"destructiveHint": true
}
}
Shorten the title to an action and subject; move usage details into the description.
Description93/100
Chart Netzo data. Netzo fetches the data itself under this connection's permissions — never pass numbers. Two modes: (1) aggregate (preferred for totals and breakdowns): set `aggregate.groupBy` and `aggregate.measures` (count / countDistinct / sum / min / max / average / weightedAverage); the chart data has the groupBy field plus one column per measure (`as`, default `{op}_{field}`, or `count`). (2) rows: omit `aggregate` to plot up to 50 records from `query` (scatter, timelines); larger scopes are sampled and flagged. `encodings` maps Flint channels (x, y, color, size, theta-like `size` for pie/donut, column, row…) to chart-data field names. Call describe_table first for field UIDs and semanticTypes. Returns the plotted data as text.
The description explains the capability, when to use it, and what to expect.
Inputs87/100
33 of 34 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
tableUid
Table to chart.
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Fetch rows from a table and render them as a data table (max 25 rows). Use when the user must compare columns. Prefer page-list, page-grid, or page-gallery for card layouts.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Explain the meaning of this value, not just its name.
tableUid
Table to query.
Explain the meaning of this value, not just its name.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Explain the meaning of this value, not just its name.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Clear enough to supply this argument.
query › or › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Explain the meaning of this value, not just its name.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Clear enough to supply this argument.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "find-table",
"title": "App: Find Table",
"description": "Fetch rows from a table and render them as a data table (max 25 rows). Use when the user must compare columns. Prefer page-list, page-grid, or page-gallery for card layouts.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid"
],
"properties": {
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional. pageSize is capped at 25 for this App."
},
"tableUid": {
"type": "string",
"description": "Table to query."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Render a Markdown explanation in the host UI (headings, lists, bold, code). Use for how-to answers. Do not put charts, data tables, or card catalogs in the Markdown — use the chart app, or find-table, page-list, page-grid, page-gallery, or accordion.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
content
Markdown text to render.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Optional heading above the prose.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "markdown-answer",
"title": "App: Markdown Answer",
"description": "Render a Markdown explanation in the host UI (headings, lists, bold, code). Use for how-to answers. Do not put charts, data tables, or card catalogs in the Markdown — use the chart app, or find-table, page-list, page-grid, page-gallery, or accordion.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"content"
],
"properties": {
"title": {
"type": "string",
"description": "Optional heading above the prose."
},
"content": {
"type": "string",
"description": "Markdown text to render."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Render a spotlight card gallery (Nuxt UI PageGrid + PageCard). Pass items, or tableUid to find rows (max 25). Use for visual browse. Do not pass remote image URLs (iframe CSP blocks them). Prefer page-grid for a plain catalog.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › title
Card title.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › description
Supporting text.
Explain the meaning of this value, not just its name.
tableUid
Table to query when items is omitted.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Explain the meaning of this value, not just its name.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Clear enough to supply this argument.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Clear enough to supply this argument.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
titleField
Row field for the card title.
Clear enough to supply this argument.
descriptionField
Row field for the card description.
Clear enough to supply this argument.
title
Optional heading above the gallery.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "page-gallery",
"title": "App: Page Gallery",
"description": "Render a spotlight card gallery (Nuxt UI PageGrid + PageCard). Pass items, or tableUid to find rows (max 25). Use for visual browse. Do not pass remote image URLs (iframe CSP blocks them). Prefer page-grid for a plain catalog.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Card title."
},
"description": {
"type": "string",
"description": "Supporting text."
}
}
},
"maxItems": 25,
"description": "Authored cards. Omit when tableUid is set."
},
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional. pageSize is capped at 25."
},
"title": {
"type": "string",
"description": "Optional heading above the gallery."
},
"tableUid": {
"type": "string",
"description": "Table to query when items is omitted."
},
"titleField": {
"type": "string",
"description": "Row field for the card title."
},
"descriptionField": {
"type": "string",
"description": "Row field for the card description."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Render a responsive grid of title/description cards (Nuxt UI PageGrid). Pass items, or tableUid to find rows (max 25). Use for catalogs. Prefer page-gallery for spotlight cards, find-table for columns.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › title
Card title.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › description
Supporting text.
Explain the meaning of this value, not just its name.
tableUid
Table to query when items is omitted.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Explain the meaning of this value, not just its name.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Clear enough to supply this argument.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Clear enough to supply this argument.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
titleField
Row field for the card title.
Clear enough to supply this argument.
descriptionField
Row field for the card description.
Clear enough to supply this argument.
title
Optional heading above the grid.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "page-grid",
"title": "App: Page Grid",
"description": "Render a responsive grid of title/description cards (Nuxt UI PageGrid). Pass items, or tableUid to find rows (max 25). Use for catalogs. Prefer page-gallery for spotlight cards, find-table for columns.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Card title."
},
"description": {
"type": "string",
"description": "Supporting text."
}
}
},
"maxItems": 25,
"description": "Authored cards. Omit when tableUid is set."
},
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional. pageSize is capped at 25."
},
"title": {
"type": "string",
"description": "Optional heading above the grid."
},
"tableUid": {
"type": "string",
"description": "Table to query when items is omitted."
},
"titleField": {
"type": "string",
"description": "Row field for the card title."
},
"descriptionField": {
"type": "string",
"description": "Row field for the card description."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Render a stacked list of title/description cards (Nuxt UI PageList). Pass items, or tableUid to find rows (max 25). Use for record summaries. Prefer find-table when the user must compare columns.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › title
Card title.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items › items › description
Supporting text.
Explain the meaning of this value, not just its name.
tableUid
Table to query when items is omitted.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › pagination › page
Page number, starting at 1.
Clear enough to supply this argument.
query › pagination › pageSize
Records per page. The server caps this.
Clear enough to supply this argument.
query › sort › items › id
Field UID.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
query › sort › items › desc
true means descending.
Clear enough to supply this argument.
query › filters › items › field
Field UID from describe_table.
Clear enough to supply this argument.
query › filters › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › filters › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Clear enough to supply this argument.
query › or › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › or › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › field
Field UID from describe_table.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › not › items › value
Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example ["a","b"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › relation
Relation key from describe_table.
Clear enough to supply this argument.
query › exists › items › field
Field UID on the related table.
Clear enough to supply this argument.
query › exists › items › operator
Comparison operator.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › exists › items › value
Comparison value. Same coercion rules as filters.value.
Clear enough to supply this argument.
query › search › columns
Field UIDs to search.
Clear enough to supply this argument.
query › search › value
Text to search for.
Clear enough to supply this argument.
query › with
Relation keys from describe_table.
Clear enough to supply this argument.
query › dateRange › field
Date field UID.
Clear enough to supply this argument.
query › dateRange › start
Inclusive ISO 8601 start.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query › dateRange › end
Inclusive ISO 8601 end.
Clear enough to supply this argument.
titleField
Row field for the card title.
Clear enough to supply this argument.
descriptionField
Row field for the card description.
Clear enough to supply this argument.
title
Optional heading above the list.
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "page-list",
"title": "App: Page List",
"description": "Render a stacked list of title/description cards (Nuxt UI PageList). Pass items, or tableUid to find rows (max 25). Use for record summaries. Prefer find-table when the user must compare columns.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Card title."
},
"description": {
"type": "string",
"description": "Supporting text."
}
}
},
"maxItems": 25,
"description": "Authored cards. Omit when tableUid is set."
},
"query": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Any of these conditions may match."
},
"not": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "None of these conditions may match."
},
"sort": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"desc"
],
"properties": {
"id": {
"type": "string",
"description": "Field UID."
},
"desc": {
"type": "boolean",
"description": "true means descending."
}
}
},
"description": "Sort order."
},
"with": {
"type": "array",
"items": {
"type": "string"
},
"description": "Relation keys from describe_table."
},
"exists": {
"type": "array",
"items": {
"type": "object",
"required": [
"relation",
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID on the related table."
},
"value": {
"type": "string",
"description": "Comparison value. Same coercion rules as filters.value."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
},
"relation": {
"type": "string",
"description": "Relation key from describe_table."
}
}
},
"description": "A related row must match."
},
"search": {
"type": "object",
"required": [
"columns",
"value"
],
"properties": {
"value": {
"type": "string",
"description": "Text to search for."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Field UIDs to search."
}
},
"description": "Full-text search."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator",
"value"
],
"properties": {
"field": {
"type": "string",
"description": "Field UID from describe_table."
},
"value": {
"type": "string",
"description": "Comparison value. The server coerces numbers, true, false, and null. For IN and NOT IN, send a JSON array, for example [\"a\",\"b\"]."
},
"operator": {
"enum": [
"=",
"!=",
">",
">=",
"<",
"<=",
"LIKE",
"NOT LIKE",
"ILIKE",
"NOT ILIKE",
"IN",
"NOT IN",
"IS",
"IS NOT"
],
"type": "string",
"description": "Comparison operator."
}
}
},
"description": "Every condition must match."
},
"dateRange": {
"type": "object",
"required": [
"field"
],
"properties": {
"end": {
"type": "string",
"description": "Inclusive ISO 8601 end."
},
"field": {
"type": "string",
"description": "Date field UID."
},
"start": {
"type": "string",
"description": "Inclusive ISO 8601 start."
}
},
"description": "Inclusive date range."
},
"pagination": {
"type": "object",
"required": [
"page",
"pageSize"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1."
},
"pageSize": {
"type": "number",
"description": "Records per page. The server caps this."
}
},
"description": "Which page to return."
}
},
"description": "Find query. Every field is optional. pageSize is capped at 25."
},
"title": {
"type": "string",
"description": "Optional heading above the list."
},
"tableUid": {
"type": "string",
"description": "Table to query when items is omitted."
},
"titleField": {
"type": "string",
"description": "Row field for the card title."
},
"descriptionField": {
"type": "string",
"description": "Row field for the card description."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Fetch one record and render a display-only reference chip (table + label). Use when the user needs to see which ERP record is in play without the full row.
The description explains the capability, when to use it, and what to expect.
Inputs57/100
Explain the meaning of this value, not just its name.
tableUid
Table of the record.
Explain the meaning of this value, not just its name.
id
Record id.
Explain the meaning of this value, not just its name.
labelField
Field to use as the chip label (default: name/code/id).
Clear enough to supply this argument.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "record-link",
"title": "App: Record Link",
"description": "Fetch one record and render a display-only reference chip (table + label). Use when the user needs to see which ERP record is in play without the full row.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Record id."
},
"tableUid": {
"type": "string",
"description": "Table of the record."
},
"labelField": {
"type": "string",
"description": "Field to use as the chip label (default: name/code/id)."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
Shorten the title to an action and subject; move usage details into the description.
Description77/100
Fetch a record field (default status) and render it as a status badge. Use for quote, order, and payment states.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
Explain the meaning of this value, not just its name.
tableUid
Table of the record.
Explain the meaning of this value, not just its name.
id
Record id.
Explain the meaning of this value, not just its name.
field
Field to show (default status).
Explain the meaning of this value, not just its name.
Annotations25/100
Declare destructiveHint, idempotentHint, openWorldHint based on the tool’s actual behavior.
{
"readOnlyHint": true
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "status-badge",
"title": "App: Status Badge",
"description": "Fetch a record field (default status) and render it as a status badge. Use for quote, order, and payment states.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tableUid",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Record id."
},
"field": {
"type": "string",
"description": "Field to show (default status)."
},
"tableUid": {
"type": "string",
"description": "Table of the record."
}
}
},
"annotations": {
"readOnlyHint": true
}
}
Netzo API setup, tools, quality score, publishing readiness, and alternatives.
How do I add Netzo API to Claude, ChatGPT, or Cursor?
Add Netzo API to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://app.netzo.io/mcp.
Is Netzo API MCP ready for ChatGPT and Claude?
As of October 14, 2026, Netzo API scores 79/100 on Manufact's MCP publishing checklist. The scan does not yet meet ChatGPT publishing checks and does not yet meet Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Netzo API's MCP tool documentation?
As of October 14, 2026, Netzo API scores 69/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 32 of 32 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Netzo API?
As of October 14, 2026, alternatives to Netzo API in financial-services on the Manufact MCP catalog include Contract-Factory — Sociétés & SIREN, Kavara Kirk, Ramp Data, Trade It, and Trioteca Hipotecas.
How can Netzo API improve its MCP documentation?
approval-form is the lowest-scoring reviewed tool at 51/100. No output schema is declared. Add one for structured results so clients can interpret returned fields. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.