nocobase-mcp-server
nocobase-mcp-server enables AI assistants to programmatically manage a NocoBase instance via MCP tools, covering collections, UI schemas, desktop routes, flowPage blocks, and JS blocks.
Collections
List all collections and retrieve details by name.
UI Schemas (Classic Pages)
List all UI schema nodes; get a full nested tree, direct child properties, or parent schema by UID.
Create root-level nodes, insert new nodes (via
insertNewSchema), or insert relative to a target (before/after, first/last child).Patch a single node or batch-patch multiple nodes; remove a node and its descendants; save a node as a reusable block template.
Desktop Routes / Navigation
List all desktop routes (pages, menus, groups, tabs) for classic and flowPages.
FlowPage Blocks
Get a block by UID or by parent ID + subKey.
Create or update blocks; attach to a container at a specific position; move, duplicate (deep copy, auto-attached), or delete a block and its children.
JavaScript Blocks
Get and update JS block code in classic pages.
Update JS block code in flowPages using the NocoBase sandbox (
ctx.render(), supporting React + Ant Design).
Dynamic Tools
Auto-generate additional tools from NocoBase's OpenAPI/Swagger spec when the API documentation plugin is enabled.
Provides integration with Ant Design UI components within NocoBase's JS block sandbox, enabling AI assistants to render JSX interfaces using Ant Design's React components for building rich user interfaces.
Provides integration with React within NocoBase's JS block sandbox, enabling AI assistants to create and render React components for building dynamic user interfaces in flowPage blocks.
Enables dynamic tool generation from NocoBase's OpenAPI/Swagger specifications, automatically loading all API endpoints as tools when the API documentation plugin is enabled.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nocobase-mcp-serverlist all collections in my NocoBase instance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nocobase-mcp-server
An MCP (Model Context Protocol) server for NocoBase, enabling AI assistants like Claude to interact with your NocoBase instance — read collections, manage UI schemas, build flowPage blocks, and run dynamic API operations via OpenAPI.
Features
24 hand-crafted tools covering collections, UI schemas, desktop routes, flow models, and JS blocks
Dynamic tools auto-generated from your NocoBase's OpenAPI/Swagger spec (requires API documentation plugin)
Works with NocoBase v2.x (tested on
2.0.17-full)
Related MCP server: anyapi-mcp-server
Requirements
Node.js 18+
A running NocoBase instance
A NocoBase API token (root or sufficient permissions)
Installation
Option A — via npm (recommended)
npm install -g @reroet/nocobase-mcp-serverThen add to ~/.claude/mcp.json:
{
"mcpServers": {
"nocobase": {
"type": "stdio",
"command": "nocobase-mcp-server",
"env": {
"NOCOBASE_URL": "http://localhost:13000",
"NOCOBASE_API_TOKEN": "your-api-token-here"
}
}
}
}Or use npx without installing globally:
{
"mcpServers": {
"nocobase": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@reroet/nocobase-mcp-server"],
"env": {
"NOCOBASE_URL": "http://localhost:13000",
"NOCOBASE_API_TOKEN": "your-api-token-here"
}
}
}
}Option B — from source
git clone https://github.com/puguhsudarma/nocobase-mcp-server.git
cd nocobase-mcp-server
pnpm installThen add to ~/.claude/mcp.json:
{
"mcpServers": {
"nocobase": {
"type": "stdio",
"command": "/absolute/path/to/nocobase-mcp-server/node_modules/.bin/tsx",
"args": ["/absolute/path/to/nocobase-mcp-server/src/index.ts"],
"env": {
"NOCOBASE_URL": "http://localhost:13000",
"NOCOBASE_API_TOKEN": "your-api-token-here"
}
}
}
}Replace /absolute/path/to/nocobase-mcp-server with the actual path (e.g. /Users/yourname/Projects/nocobase-mcp-server).
Environment Variables
Variable | Required | Default | Description |
| Yes | — | NocoBase API token |
| No |
| NocoBase instance base URL |
Getting an API Token
In NocoBase UI: Settings → Plugins → enable the API keys plugin
Go to Settings → API keys → Add API key
Copy the generated token
Enabling Dynamic Tools (optional)
Enable the API documentation plugin in NocoBase (Settings → Plugins). Once active, the server will automatically load all additional API endpoints as tools on startup.
Tools Reference
Collections
Tool | Description |
| List all collections |
| Get a collection by name |
UI Schemas (Classic Pages)
Tool | Description |
| List all UI schema nodes |
| Get full nested UI schema tree by UID |
| Get the parent schema of a node |
| Create a new root-level UI schema node |
| Create and insert a new UI schema node |
| Insert a schema node relative to a target node |
| Patch an existing UI schema node |
| Patch multiple UI schema nodes in one request |
| Remove a UI schema node and its descendants ⚠️ |
| Save a UI schema node as a reusable block template |
Desktop Routes / Navigation
Tool | Description |
| List all desktop routes (pages, menus, groups, tabs) |
Flow Models (flowPage blocks)
Tool | Description |
| Get a flowPage block by UID |
| Get a flowPage block by parent ID and subKey |
| Create or update a flowPage block |
| Attach a block to a flowPage container |
| Move a block to a different position |
| Deep-copy a block and auto-attach it |
| Delete a block and its children ⚠️ |
JS Blocks
Tool | Description |
| Get a JS block schema (classic page) |
| Update JS block code (classic page) |
| Update JS block code inside a flowPage — use |
⚠️ Destructive operations cannot be undone.
JS Block Sandbox
flowPage JS blocks run in NocoBase's sandbox. Available APIs:
// Render HTML
ctx.render(`<h1>Hello</h1>`);
// Render JSX with React + Ant Design
const { React, antd } = ctx.libs;
const { useState } = React;
const { Table, Tag } = antd;
function MyComponent() {
const [tab, setTab] = useState("a");
return <div>...</div>;
}
ctx.render(<MyComponent />);Example Prompts
How to get UIDs:
Block UID — right-click any block in NocoBase UI → Copy UID (e.g.
add17a3cf3f)Page UID — visible in the browser URL when you open a page (e.g.
http://localhost:13000/page/96acpujiwc6→ UID is96acpujiwc6)
Without Figma MCP
List all collections in my NocoBase, then create a JS block on flowPage "<your-page-uid>"
that shows a summary dashboard with total records from the "users" collection.Get the flowPage with UID "<your-page-uid>", add a new JS block below the existing ones
(the grid block UID is "<your-grid-uid>"), and implement a tabbed table showing data
from the "orders" and "products" collections.Show me all desktop routes, then fetch the UI schema tree of the first page
and explain its block structure.With Figma MCP
Here's my Figma design: https://www.figma.com/board/XXXXXXXXXXXXXXXX/MyApp?node-id=8273-xxxx
Implement it as a JS block on flowPage "<your-page-uid>" (grid UID: "<your-grid-uid>").
Use React + Ant Design from ctx.libs. Use dummy data for now.Fetch the Figma design at the link above, then create a new JS block on my NocoBase
flowPage and implement the tabs component with the exact columns from the Figma table.
The block UID I want to update is "<your-block-uid>".Contributing
Contributions are welcome! To add a new tool:
Fork the repo and create a feature branch
Add your tool in
src/index.tsusingserver.registerTool()Follow the existing pattern — use
nocoFetch()for API calls andok()to format responsesUpdate the tool list in
README.mdOpen a pull request
For bug reports or feature requests, open an issue on GitHub.
License
MIT — see LICENSE for details.
Available Tools
23 toolsattach_flow_modelA
Attach an existing flowPage block/model to a parent. Use this to add an existing block into a flowPage container at a specific position.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Flow model UID to attach | |
| parentId | Yes | Parent flow model UID to attach to | |
| subKey | Yes | Sub-key within the parent (e.g. 'items') | |
| subType | No | Sub-type (e.g. 'array') | |
| position | No | Sort position index |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states the basic action of attaching, without disclosing side effects, prerequisites (e.g., does the block need to be unattached?), error behavior, or whether it modifies the parent schema. This lack of behavioral context leaves the agent guessing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words, front-loaded with the key action. It is appropriately sized for a tool that is conceptually simple.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns (if anything) and error conditions. It only covers purpose and usage. Missing details like behavior on missing UIDs, position handling, and effects on the parent schema make it incomplete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters. The description adds no additional meaning or context beyond what the schema provides, earning the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool attaches an existing flowPage block/model to a parent at a specific position, using specific verb and resource, and distinguishes from siblings like insert_new_schema and move_flow_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context ('Use this to add an existing block into a flowPage container at a specific position'), but does not explicitly exclude alternatives or specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_patch_ui_schemaA
Patch multiple UI schema nodes in a single request. Each object in the patches array must include 'x-uid' plus the fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| patches | Yes | Array of partial schema patch objects, each identified by x-uid |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool patches multiple nodes, but does not describe side effects (e.g., whether it replaces or merges fields), authentication needs, rate limits, or error behavior. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a brief instruction, making it concise and front-loaded. However, the instruction could be integrated more naturally; it feels slightly tacked on. Still, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema, no annotations), the description covers the essential purpose and a critical usage constraint. It does not explain return values or limits on batch size, but these are not strictly necessary for a basic tool. Overall, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for 'patches', but the schema itself is very permissive (additionalProperties: {}). The description adds the key constraint that each object must include 'x-uid', which is not enforced by the schema. Beyond that, no additional semantics are provided for the parameter structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'patch' and the resource 'UI schema nodes', and explicitly states it operates on 'multiple' nodes in a single request. This distinguishes it from sibling tools like 'update_ui_schema' which likely handles single nodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the requirement that each object must include 'x-uid' plus fields, which guides usage. However, it does not explicitly state when to use this tool versus the alternative 'update_ui_schema' for single updates, nor does it mention any preconditions or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageB
Create a new root-level UI schema node in NocoBase
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | UI schema object to create (JSON) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It merely says 'create' without disclosing side effects, permissions, or behavior if the schema already exists. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a complex nested parameter and no output schema, the description lacks details about return values, success indicators, or how the schema relates to existing pages. It leaves the agent guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema's 'UI schema object to create (JSON)'. No parameter documentation beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create) and resource (root-level UI schema node) and system (NocoBase). It distinguishes from siblings like 'update_ui_schema' by specifying 'root-level'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'insert_new_schema' or 'insert_adjacent_schema'. The description does not mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
destroy_flow_modelA
Delete a flowPage block/model by UID. DESTRUCTIVE — also removes child blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Flow model UID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states the tool is destructive and that it also removes child blocks, which are important behavioral traits. It does not detail irreversibility or system-side effects, but for a delete tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that wastes no words. It front-loads the action ('Delete') and immediately provides critical context (DESTRUCTIVE and child removal).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete tool without an output schema, the description sufficiently covers what the tool does and its destructive scope. It could mention the return value (e.g., success indicator), but this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the parameter as 'Flow model UID to delete' with 100% coverage. The description adds no further meaning beyond what is in the schema, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete'), the target object ('a flowPage block/model'), and the method of identification ('by UID'). It distinguishes itself from siblings like 'duplicate_flow_model' and 'save_flow_model' by explicitly noting its destructive nature and scope (removes child blocks).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly conveys when to use the tool: when you need to delete a flow model and its children. No alternative deletion tool exists among siblings, so explicit when-not guidance is unnecessary. The warning 'DESTRUCTIVE — also removes child blocks' provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_flow_modelB
Duplicate an existing flowPage block/model (deep copy) and automatically attach it to the same parent. Returns the new block's data.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Flow model UID to duplicate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds some value by mentioning 'deep copy' and 'automatically attach to same parent', but it does not cover permissions, reversibility, or what happens to the original. Basic transparency is provided but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that immediately states the action and key behaviors. Every word is functional; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the action and return value, but does not describe the return structure beyond 'the new block's data'. Additional details about the data format or potential error conditions would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'uid' is fully covered by the schema (100% coverage). The description merely restates the schema's description ('Flow model UID to duplicate') without adding new meaning or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('duplicate'), resource ('flowPage block/model'), and scope ('deep copy, attach to same parent'). It distinguishes from sibling tools that do related but different actions (e.g., destroy, move), though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'destroy_flow_model' or 'save_flow_model'. It does not mention prerequisites (e.g., existence of the source model) or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionB
Get a specific collection by name
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Collection name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states it retrieves a collection but does not disclose behaviors such as error handling (e.g., if name not found), idempotency, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that efficiently conveys the tool's purpose with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is reasonably complete. It covers purpose and identification, though it could mention return format or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'name' is fully described in the input schema ('Collection name'), and the description adds the contextual phrase 'by name'. With 100% schema coverage, the baseline is 3, and the description adds minimal extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a specific collection by name' clearly states the action (Get), resource (collection), and identifier (name). It effectively distinguishes from sibling 'list_collections' which retrieves multiple collections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives or when not to use it. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_modelA
Get a flowPage block/model by UID. Use this for blocks inside flowPage type pages (not classic 'page' type). Returns the block's model data including 'use' (component type), 'parentId', 'stepParams', etc.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Flow model UID (from 'Copy UID' on a block inside a flowPage) | |
| includeAsyncNode | No | Whether to include async node data (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It explains that the tool returns model data including specific fields, implying a read operation. However, it does not explicitly state that the operation is read-only or disclose any potential side effects, permissions, or error conditions. The information is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first immediately states the purpose, and the second adds usage guidance and return info. Every sentence is valuable and there is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters and no output schema, the description covers the main functionality, usage context, and key return fields. However, it does not mention the 'includeAsyncNode' parameter in the text, which is a minor gap. Overall, it is mostly complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds some context for the 'uid' parameter (mentioning 'Copy UID' usage) but does not provide additional meaning for 'includeAsyncNode' beyond what the schema already states. Thus, it does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('flowPage block/model by UID'), and explicitly distinguishes it from sibling tools like get_flow_model_by_parent by specifying 'use this for blocks inside flowPage type pages (not classic page type)'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context by saying 'Use this for blocks inside flowPage type pages (not classic page type)', which tells when to use this tool vs. alternatives. It does not explicitly list when not to use it, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_model_by_parentB
Get a flowPage block/model by its parent ID and subKey. Useful for navigating the flowPage block tree.
| Name | Required | Description | Default |
|---|---|---|---|
| parentId | Yes | Parent flow model UID | |
| subKey | No | Sub-key within the parent (e.g. 'items') | |
| includeAsyncNode | No | Whether to include async node data (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as idempotency, read-only nature, or side effects. It only describes the operation's purpose without additional behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey the tool's purpose and use case without any redundant words. The information is front-loaded and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter tool with no output schema, the description covers the basic usage scenario. However, it lacks details about return values, error conditions, or the structure of a flowPage block model, which could be helpful for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description reinforces the key parameters (parentId and subKey) but adds no new semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a flowPage block/model by its parent ID and subKey', using a specific verb and resource. It distinguishes itself from siblings like 'get_flow_model' by specifying the lookup method, though it could explicitly differentiate from other getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Useful for navigating the flowPage block tree', implying when to use it, but does not provide explicit when-not-to-use guidance or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_js_blockA
Get a JS block UI schema by UID (for classic 'page' type pages, not flowPage)
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID of the JS block |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It correctly indicates a read operation ('Get') with no mention of side effects. However, it lacks details on authentication, rate limits, or error conditions, which are not critical for a simple getter but would add transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It efficiently conveys purpose and context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is mostly complete. It explains the return (UI schema) implicitly through the verb 'Get'. Could be improved by explicitly stating the return format, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'uid', which the schema describes as 'UI schema UID of the JS block'. The description adds no further semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'JS block UI schema', and the method 'by UID'. It also distinguishes from sibling tools by specifying it is for 'classic page type pages, not flowPage', which is a clear qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use the tool, i.e., for classic page type pages, and explicitly excludes flowPage. This helps the agent decide when to use this tool versus others like get_flow_model, though no alternative tool names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageA
Get the full nested UI schema tree for a node by UID (uses :getProperties to include all descendants)
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses inclusion of all descendants and :getProperties method, but lacks info on error handling, permissions, or idempotency. Annotations absent so burden on description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with purpose front-loaded and method detail in parentheses. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description gives high-level idea of return type but lacks specifics on structure or fields. Adequate for simple tool but incomplete for agent to fully anticipate response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds context to the 'uid' parameter by specifying it's a node UID in UI schema tree, beyond the schema's brief description. Single param with 100% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get' and specific resource 'full nested UI schema tree' with method hint. Distinguishes from siblings like get_flow_model or get_parent_schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when full tree is needed but no explicit guidance on when not to use or alternatives like get_parent_schema for single node.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parent_schemaB
Get the parent UI schema of a node by UID
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID of the child node |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It does not mention side effects, permissions, error handling (e.g., if UID not found), or whether the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no unnecessary words. It conveys the essential information concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one required parameter and no output schema, the description is adequate. It could mention the return value (the parent UI schema) for greater completeness, but is still sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the parameter as 'UI schema UID of the child node' (100% coverage). The tool description adds no additional meaning beyond confirming the UID identifies the child node.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('parent UI schema'), and the identifier ('by UID'). It distinguishes this read operation from sibling tools which involve creation, updates, or deletions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives, nor does it mention prerequisites or contexts where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_adjacent_schemaA
Insert a schema node at a position relative to a target node. Position values: beforeBegin (prev sibling), afterBegin (first child), beforeEnd (last child), afterEnd (next sibling)
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Target UI schema UID to insert relative to | |
| schema | Yes | New schema node to insert (JSON) | |
| position | Yes | Insert position relative to the target node |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only describes the insertion mechanics. It does not disclose side effects, error behavior, permissions, or what happens if the target UID is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence plus a concise listing of positions, with no fluff. It is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and positions, but lacks details on return value, validation, or success/failure behavior, which would help given the schema has nested objects and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions; the tool description adds value by explaining the four position values in plain language, which complements the enum in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (insert) and the resource (schema node relative to a target), distinguishing it from siblings like insert_new_schema which likely inserts without relative positioning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the meaning of each position value, but does not explicitly state when to use this tool versus alternatives (e.g., insert_new_schema, update_ui_schema) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_new_schemaB
Create and insert a new UI schema node via NocoBase's insertNewSchema action
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | Schema node to create and insert (JSON) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states 'create and insert' but does not disclose behavioral traits like conflict handling, permission requirements, or side effects. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 14 words, no redundant information. Efficiently communicates the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a complex nested object parameter and no output schema, the description does not explain the schema node structure or return behavior. Insufficient for an agent to confidently invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds 'via NocoBase's insertNewSchema action', but does not elaborate on the expected structure of the schema object beyond what the schema already specifies. Adequate but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'create and insert' and the resource 'UI schema node', and differentiates from siblings like insert_adjacent_schema by specifying it's a new insertion via NocoBase action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like insert_adjacent_schema or update_ui_schema. Lacks context for selecting this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsA
List all collections in NocoBase
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description indicates read-only behavior ('list') but does not disclose any potential side effects, rate limits, or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (two words) and front-loaded. Every word is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, the description adequately conveys its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0 parameters with 100% coverage, so description does not need to add extra meaning. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'list' and resource 'collections', and clarifies scope as 'all'. It implicitly distinguishes from sibling 'get_collection' which retrieves a single collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get_collection'. No context on prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_desktop_routesA
List all desktop routes (pages and menus) in NocoBase v2. Each route has a type: 'page', 'flowPage', 'group', 'tabs'. Use schemaUid to fetch page content. Works for both classic pages and flowPages.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Number of routes per page (default 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the tool is a read operation (list), describes the output includes type and schemaUid, and confirms compatibility with classic pages and flowPages. This provides sufficient behavioral context beyond the parameter schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two sentences. The first sentence immediately states the purpose, and the second adds key details about output and usage. No redundant or unnecessary information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, no output schema, and no annotations, the description sufficiently covers its purpose, output shape (types and schemaUid), and scope (classic pages and flowPages). It lacks explicit pagination details, but the schema covers the pageSize parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the pageSize parameter with default 100. The description adds no additional meaning to the parameter beyond what the schema provides. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all desktop routes (pages and menus) in NocoBase v2', providing a specific verb and resource. It further distinguishes itself from siblings like list_pages by mentioning route types and that it works for both classic pages and flowPages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating 'Use schemaUid to fetch page content' and 'Works for both classic pages and flowPages', but it does not explicitly mention when not to use this tool or name alternatives like list_pages for comparison. Guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesA
List all UI schemas in NocoBase (returns raw schema nodes, not page-level navigation)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals the return type (raw schema nodes) and that it returns all schemas, but lacks details on side effects, permissions, rate limits, or error behavior. It is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no wasted words. The first sentence states the main purpose, the second clarifies the output type. Perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description adequately covers what the tool does and returns. It specifies 'all UI schemas' and 'raw schema nodes'. However, it could mention if there are any limitations (e.g., pagination) or error scenarios. Overall, it is mostly complete for a simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the baseline is 4. The description does not need to add parameter info, and it does not. It accurately conveys that no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all UI schemas in NocoBase, using specific verb ('list') and resource ('UI schemas'). It also clarifies that it returns raw schema nodes, not page-level navigation, distinguishing it from siblings like get_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly suggests when to use this tool (getting raw schema nodes) vs siblings (e.g., get_page for a specific page). However, it does not explicitly state when not to use or provide alternatives, missing the chance to offer stronger guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_flow_modelB
Move a flowPage block/model to a different position relative to another block.
| Name | Required | Description | Default |
|---|---|---|---|
| sourceId | Yes | UID of the flow model to move | |
| targetId | Yes | UID of the target flow model (reference position) | |
| position | No | Target sort position index |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states 'move' but does not clarify whether the operation is destructive (removing from original position) or if it's a copy. It also omits side effects, permission requirements, or behavior on invalid references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently conveys the core action without unnecessary words. It is front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of flow models and the absence of an output schema or annotations, the description is quite brief. It does not explain return values, error behavior, or constraints like whether moving can affect child elements. Adequate for a simple operation but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for parameters (sourceId, targetId, position). The description adds minimal value beyond the schema, only clarifying the repositioning is 'relative to another block'. With full schema coverage, baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Move' and the resource 'flowPage block/model', specifying the operation 'to a different position relative to another block'. It effectively distinguishes from sibling tools like attach_flow_model and duplicate_flow_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use attach_flow_model or duplicate_flow_model instead. It lacks any context about prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_ui_schemaA
Remove a UI schema node and all its descendants by UID. DESTRUCTIVE — cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explicitly states the action is destructive and cannot be undone, adding behavioral context. However, it does not disclose additional details such as required permissions, side effects beyond removing descendants, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loading the purpose and adding a critical warning. No redundant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single required parameter, no output schema, well-defined behavior), the description is largely complete. It explains the destructive nature and the scope of removal, which is sufficient for an agent to understand its effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema's parameter description ('UI schema UID to remove') by stating 'by UID'. This does not significantly enhance semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove'), the target ('UI schema node'), the scope ('and all its descendants'), and the identifier ('by UID'). It effectively distinguishes from siblings like update_ui_schema (which modifies) and insert_adjacent_schema (which adds).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly communicates when to use this tool (for removal) and includes a explicit warning about its destructive nature. However, it does not explicitly state when not to use it or provide alternative tools for related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_as_templateB
Save an existing UI schema node as a reusable block template
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID to save as template | |
| values | Yes | Template metadata (e.g. name, componentName, collectionName) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions 'Save' (mutation) but lacks details on side effects, permissions, or whether the template is stored independently or modifies the source node. This is insufficient for safe and correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is concise but could be more informative without significant bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a nested object parameter and no output schema, the description lacks explanation of what constitutes a 'reusable block template' or how the template is later used or retrieved. It does not address potential constraints or behavioral nuances, making it incomplete for complex usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description does not add new semantic information beyond the schema, which already specifies 'UI schema UID' and 'Template metadata (e.g. name, componentName, collectionName)'. With high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Save an existing UI schema node as a reusable block template', which clearly identifies the verb, resource, and outcome. It distinguishes from sibling tools like 'save_ui_schema' or 'update_ui_schema' by specifying 'as a reusable block template'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating templates but provides no explicit guidance on when to use this tool versus alternatives like 'save_flow_model' or 'insert_adjacent_schema'. No when-not-to-use or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_flow_modelA
Create or update a flowPage block/model. If 'uid' is provided in values, it updates; otherwise creates a new one. The 'use' field specifies the component type (e.g. 'JSBlockModel', 'TableBlockModel'). NOTE: after creating, call attach_flow_model to make it appear on the page.
| Name | Required | Description | Default |
|---|---|---|---|
| values | Yes | Flow model data. Key fields: uid (optional), use (component type), parentId, subKey, subType, stepParams, sortIndex |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the core behavior (create/update based on uid) and the need for attach_flow_model, but doesn't detail side effects, return values, or error conditions. With no annotations, more behavior disclosure would improve confidence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose, conditional logic, and key usage note. No wasted words, front-loaded with primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main workflow and crucial post-call. Lacks return value description and any error handling notes. Given the tool's complexity (one parameter, no output schema), it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the 'values' parameter with 100% coverage. The description adds meaning by explaining how 'uid' controls update logic and lists key fields, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates or updates a flowPage block/model. Distinguishes from sibling tools like attach_flow_model (which is for making it appear) and destroy_flow_model. Gives concrete examples of component types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to create vs update based on uid. Provides critical guidance to call attach_flow_model after creation. Could have mentioned alternatives like destroy or get, but the note suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_flow_js_blockA
Update the JavaScript code of a JSBlockModel inside a flowPage. Code runs in NocoBase sandbox — use ctx.render(htmlString) to render output. Example: ctx.render(<h1>Hello</h1>);
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Flow model UID of the JS block (JSBlockModel) | |
| code | Yes | JavaScript code using ctx.render(htmlString) sandbox API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that code runs in a NocoBase sandbox requiring ctx.render(htmlString), which is essential behavioral context. It could also mention that the code fully replaces existing code, but the main behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver purpose and key behavioral info with a code example, no unnecessary words. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description covers purpose, sandbox behavior, and a usage example. It could mention return value or that the update is persistent, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters with 100% coverage, so the description adds value by providing a concrete sandbox example and clarifying the render API, going beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates JavaScript code of a JSBlockModel inside a flowPage, distinguishing it from sibling update_js_block by specifying the flowPage context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for flowPage JS blocks by mentioning the sandbox and giving an example, but it does not explicitly state when to use this tool over alternatives like update_js_block.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_js_blockA
Update the code content of a JS block UI schema by UID (for classic 'page' type pages, not flowPage)
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID of the JS block | |
| code | Yes | New JavaScript code content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'update', which is a mutation. It does not disclose any behavioral traits such as destructive potential, permissions needed, or idempotency, leaving the agent with minimal information beyond the fact that code content will be modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the core purpose and scope, with no redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 required parameters and no output schema, the description covers the essential scope (classic pages vs flow pages). However, it lacks details about return values, side effects, or confirmation of success, which could help an agent understand the full behavior after invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both uid and code. The description adds no extra meaning beyond the schema, and there are no constraints or formatting hints for the code parameter, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates code content of a JS block UI schema by UID, specifying 'for classic page type pages, not flowPage', which effectively distinguishes it from siblings like update_flow_js_block.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly limits usage to classic pages, implying when not to use it (flow pages). While it does not name alternatives, the sibling list includes update_flow_js_block for flow pages, providing indirect guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ui_schemaB
Patch an existing UI schema node by UID (partial update)
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UI schema UID | |
| patch | Yes | Partial schema fields to update (JSON) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only mentions 'partial update' but lacks details on idempotency, error behavior, required permissions, or what happens on invalid UID/patch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, to the point, no redundant words. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations. For a mutation tool, more detail on success/failure behavior and patch structure would improve completeness. Sibling tools exist but no distinction provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds no extra meaning beyond schema; does not clarify patch format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Patch', resource 'UI schema node', and key detail 'partial update'. It distinguishes from siblings like 'batch_patch_ui_schema' which implies batch operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., batch_patch_ui_schema). No prerequisites or context provided for when partial update is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools are generally distinct, with clear differentiation between flowPage blocks, classic pages, JS blocks, and UI schema operations. However, the high number of flow model and schema tools could cause some confusion, though descriptions help.
All tool names follow a consistent verb_noun pattern in snake_case, with no mixing of conventions. Examples include 'attach_flow_model', 'batch_patch_ui_schema', 'get_flow_model_by_parent'.
23 tools is slightly on the high side but appropriate for a full-featured low-code platform like NocoBase. The count reflects the complexity of managing UI schemas, blocks, collections, and routes without being excessive.
The tool set covers most essential operations for UI schema management: create, read, update, delete, move, duplicate, and template. Minor gaps exist (e.g., no direct tool for updating page metadata), but these can be handled via update_ui_schema.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides AI assistants with access to documentation, schemas, and operations for over 535 n8n workflow automation nodes. It enables models to understand, create, and manage n8n workflows through natural language by connecting to the n8n API.123,606MIT
- AlicenseNot gradedqualityDmaintenanceA universal MCP server that connects any REST API to AI assistants via OpenAPI or Postman specifications. It enables dynamic tool creation with GraphQL-style field selection and automatic schema inference for efficient data retrieval.136Unlicense - libtelnet variant
- FlicenseNot gradedqualityDmaintenanceRemote MCP server that auto-generates tools from NocoBase OpenAPI specs to enable full CRUD operations on collections across multiple instances. Supports streamable HTTP transport and API key authentication for secure, natural language interaction with NocoBase deployments.

VoIPbin MCP Serverofficial
AlicenseBqualityCmaintenanceAn MCP server that enables AI assistants to interact with the VoIPbin CPaaS platform, exposing tools for managing calls, flows, messaging, conferencing, and more.521MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/puguhsudarma/nocobase-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server