uCoz
Server Details
Manage uCoz sites from an AI assistant: templates, content, shop, users, and files.
- Status
- Healthy
- Uptime
- 85.5% over 42 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- ucoz-skills/ucoz-mcp
- GitHub Stars
- 1
- Server Listing
- ucoz-mcp
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 41 tools
The dominant read/write/delete triad per domain (apps, files, forum, shop, users, templates, etc.) gives each tool a distinct resource+action target, and descriptions explicitly cross-reference neighbours (e.g. ftp_write vs apps_write for FTP accounts, files_read vs apps_read for files). The only real overlap is between the file-manager tools and the server-environment tools, plus ftp vs apps FTP handling, but the descriptions defuse those confusions. An agent can pick correctly in nearly all cases.
Almost every tool follows a predictable `<domain>_<action>` pattern with the same three action verbs (read/write/delete), which makes the set very scannable. The deviations are list_sites/create_site/select_site (verb_noun style) and the odd `_tool` suffix on docs_tool and skills_tool, which don't fit the verb pattern. These are minor blemishes rather than a broken convention.
41 tools is well above the comfortable range, but the count is a direct consequence of covering ~13 genuinely separate CMS domains (content, forum, shop, subscriptions, templates, tmaker, users, files, apps, ftp, settings, modules, site management) with a read/write/delete split each. The mechanical triad keeps it navigable, yet each write tool is a mega-tool bundling dozens of operations, so the surface is heavy and coarse rather than well-scoped.
Coverage is broad and lifecycle-complete for the major modules: sites can be listed, created and selected; content, forum, shop, subscriptions and users all get read/write/delete; design, templates and server environment are fully supported, plus docs and skills helpers. Gaps are minor but present — no site deletion/transfer, and common uCoz modules like statistics, banners or SEO/webmaster tooling have no surface. Agents can work around these rather than hitting hard dead ends.
Available Tools
41 toolsapps_deleteDelete from server environmentADestructiveInspect
Deletes files, databases and database users, FTP accounts, cron jobs, Node.js and Python apps and keys of the server environment. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias of key_id. | |
| name | No | Database, database user, or FTP user short name. The username_ prefix is added for MySQL. | |
| path | No | File path relative to the environment home, without the /home/... prefix. Site folders live under domains/{selected_domain} (selected_domain from session, or list domains with files_list path=domains); status.domain is the technical account domain and may not be the folder you need. | |
| user | No | FTP username without @domain. | |
| paths | No | Home-relative paths for delete or chmod. | |
| trash | No | Move to trash instead of deleting. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| dbuser | No | MySQL user. Prefixed with {username}_ when missing. | |
| domain | No | Environment domain for an app, FTP account, or backup form. Defaults to selected_domain, not a file path. | |
| key_id | No | Login key id. Defaults to main on create. Letters and digits only. | |
| params | No | Extra selector parameters. PHP extension changes were rejected on the uCoz test environment. | |
| plugin | No | Language selector plugin: phpselector, nodejs_selector, python_selector. | |
| source | No | Home-relative source path. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: node_destroy, python_destroy, selector_destroy, files_delete, db_delete, db_delete_user, ftp_delete, cron_delete, login_key_delete, da_login_key_delete, visitor_key_delete. | |
| cron_id | No | Id of a cron job: jobs[].id of cron_list, such as 000. | |
| select0 | No | FTP account to delete: the short username from ftp_list. user@domain is accepted and the domain part is dropped. Also an alias of cron_id. | |
| sources | No | Home-relative paths for copy-to, move-to, or create-archive. | |
| app_root | No | Application directory relative to home, or /home/{username}/.... | |
| cron_ids | No | Ids of several cron jobs to delete (jobs[].id of cron_list). | |
| database | No | MySQL database. Prefixed with {username}_ when missing. | |
| interpreter | No | Selector interpreter: php, nodejs, or python. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds the important permanence trait ('Cannot be undone') and the breadth of destruction targets, which is real context beyond a generic destructive flag. It stops short of describing the confirm/user-approval gate or any permission requirements, which live only in the 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?
Two short sentences, front-loaded with the resource scope and closed with the irreversible-outcome warning. No filler, nothing repeated from the name/title.
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 21-parameter, multi-action destructive tool, the description establishes purpose and irreversibility but omits the operational workflow: that an action is required to select the deletion type, that confirm must only be passed after user approval, and that ids should come from listing tools. With a fully documented schema these gaps are partly absorbed, but the description alone would leave an agent underspecified.
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% and each action's oneOf entry already lists required and optional parameters, so the schema does the parameter work. The description only implies a mapping between listed resource types and the action enum, adding no syntax or format detail 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?
The description names a specific verb (deletes) and enumerates the exact resource families covered: files, databases, database users, FTP accounts, cron jobs, Node.js/Python apps and keys, matching the action enum. It is clear what the tool does, though it doesn't explicitly carve out territory versus overlapping siblings such as files_delete or ftp_delete.
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?
Usage is only implied through the scope phrase 'of the server environment'. There is no statement about when to pick apps_delete over apps_write or the narrower files_delete/ftp_delete/cron-style siblings, and no prerequisites (e.g. gather ids from cron_list/ftp_list first) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apps_readRead server environmentBRead-onlyIdempotentInspect
Reads the server environment of the active site: status and usage, files and directories, databases and database users, FTP accounts, cron jobs, Node.js, Python and PHP settings, backups, and key records.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias of key_id. | |
| name | No | Database, database user, or FTP user short name. The username_ prefix is added for MySQL. | |
| page | No | List page, from 1. | |
| path | No | File path relative to the environment home, without the /home/... prefix. Site folders live under domains/{selected_domain} (selected_domain from session, or list domains with files_list path=domains); status.domain is the technical account domain and may not be the folder you need. | |
| limit | No | files_*: the earlier name of per_page; per_page wins when both are set. files_tree: entries of the tree. | |
| query | No | File name query (files_search). | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| dbuser | No | MySQL user. Prefixed with {username}_ when missing. | |
| detail | No | Record form of a paged list. brief (default): for files name, folder, type, size, modification time (UTC, ISO 8601) and symlink flag; for other lists the records as they are. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| domain | No | Environment domain for an app, FTP account, or backup form. Defaults to selected_domain, not a file path. | |
| key_id | No | Login key id. Defaults to main on create. Letters and digits only. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| params | No | Extra selector parameters. PHP extension changes were rejected on the uCoz test environment. | |
| plugin | No | Language selector plugin: phpselector, nodejs_selector, python_selector. | |
| database | No | MySQL database. Prefixed with {username}_ when missing. | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. | |
| interpreter | No | Selector interpreter: php, nodejs, or python. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds scope ("active site") and lists covered resource categories, but does not disclose prerequisites, pagination behavior, or output characteristics beyond what the schema's action descriptions provide.
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 that efficiently states the tool's scope. The long enumeration is justified by the tool's breadth, though it could have used that space to clarify routing among overlapping siblings.
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 tool is highly complex with 32 actions and 17 parameters, and the schema is very rich. The description provides an adequate broad overview but does not explain how to choose among actions, how to interpret results, or how this tool relates to overlapping read-only siblings. It relies almost entirely on the schema 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 description coverage is 100%, and the action enum's oneOf entries document each operation's parameters and return behavior in detail. The top-level description adds only a broad resource list and no parameter-level meaning beyond the schema, so the 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 states a specific verb ("Reads") and resource ("server environment of the active site") and enumerates the data categories covered. It is clear what the tool does, but it does not explicitly distinguish itself from read-oriented siblings such as files_read or settings_read.
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 gives no explicit guidance on when to use this tool versus alternatives. This is especially problematic because sibling tools like files_read and settings_read overlap with actions exposed here (files_read, php_get, etc.), and the definition does not explain whether to use apps_read or the dedicated sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apps_writeChange server environmentBDestructiveInspect
Creates and changes the server environment of the active site: activates it, writes, patches, copies, moves and archives files, publishes files for download, manages databases and database users, FTP accounts, cron jobs, Node.js and Python apps, PHP version, backups and keys (without returning key values), and issues one-time phpMyAdmin links.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias of key_id. | |
| hour | No | Cron hour. Default *. | |
| name | No | Database, database user, or FTP user short name. The username_ prefix is added for MySQL. | |
| path | No | File path relative to the environment home, without the /home/... prefix. Site folders live under domains/{selected_domain} (selected_domain from session, or list domains with files_list path=domains); status.domain is the technical account domain and may not be the folder you need. | |
| perm | No | Permission bits as a number, for example 644. | |
| user | No | FTP username without @domain. | |
| hosts | No | MySQL host patterns. | |
| merge | No | mergeAndOverwrite for copy-to, move-to, and extract. | |
| month | No | Cron month. Default *. | |
| parts | No | Backup components: domain, database, ftp, email, subdomain. Default domain. | |
| paths | No | Home-relative paths for delete or chmod. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| dbuser | No | MySQL user. Prefixed with {username}_ when missing. | |
| domain | No | Environment domain for an app, FTP account, or backup form. Defaults to selected_domain, not a file path. | |
| key_id | No | Login key id. Defaults to main on create. Letters and digits only. | |
| minute | No | Cron minute. Default 0. | |
| params | No | Extra selector parameters. PHP extension changes were rejected on the uCoz test environment. | |
| plugin | No | Language selector plugin: phpselector, nodejs_selector, python_selector. | |
| source | No | Home-relative source path. | |
| app_uri | No | Public path. /hello is served as https://{site}/apps/hello. | |
| charset | No | MySQL charset. | |
| command | No | Cron shell command. This path may be absolute /home/{username}/... . | |
| confirm | No | Pass true only after the user approves this change. Required by: activate, switch_domain, files_legacy_edit, files_move, files_move_to, files_extract, db_change_password, db_change_hosts, db_change_privs, ftp_create, ftp_passwd, backup_create, login_key_rotate, da_login_key_patch, visitor_key_rotate. Required in some cases by: ensure_ready, da_login_key_create (see the action). | |
| content | No | UTF-8 file text for files_write, files_patch, or files_legacy_edit. | |
| members | No | Archive member names. Empty means all. | |
| sources | No | Home-relative paths for copy-to, move-to, or create-archive. | |
| version | No | PHP version (8.2, 8.3, native), Node version (default 22), or Python version (default 3.11). | |
| app_mode | No | Node only: development or production. Default production. Not sent for Python. | |
| app_root | No | Application directory relative to home, or /home/{username}/.... | |
| database | No | MySQL database. Prefixed with {username}_ when missing. | |
| env_vars | No | Optional environment variables for a new Node or Python app. | |
| password | No | Password for a new DB user, FTP account, or panel login key; at least 8 characters for FTP and DB users. Omit to let the environment generate a DB password. | |
| collation | No | MySQL collation. | |
| dayofweek | No | Cron day of week. Default *. | |
| overwrite | No | Overwrite on write/copy/move. files_write defaults to true. | |
| dayofmonth | No | Cron day of month. Default *. | |
| new_string | No | Replacement text (files_patch). | |
| old_string | No | Text to replace. Must occur once (files_patch). | |
| privileges | No | MySQL privilege map. Defaults to the full set on create. | |
| allow_login | No | The panel login key may open the panel UI. Defaults to false. confirm is required when true. | |
| destination | No | Home-relative destination path. | |
| entry_point | No | Python WSGI callable inside the startup file, for example application. A value ending in .py is used as startup_file when startup_file is omitted. | |
| interpreter | No | Selector interpreter: php, nodejs, or python. | |
| new_password | No | Replacement database password (at least 8 characters). | |
| startup_file | No | Application startup file. Node default app.js. Python default passenger_wsgi.py. | |
| deny_commands | No | Command deny list of a panel login key. | |
| allow_commands | No | Command allow list of a panel login key (da_login_key_commands lists them). | |
| allow_networks | No | Network allow list of a panel login key. | |
| destination_dir | No | Home-relative destination directory for copy-to, move-to, and extract. | |
| selector_method | No | selector_change method: set, create, start, stop, restart, install-modules. | |
| current_password | No | Current password, only if a panel login key call requires it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description adds real value on two points: login key values are never returned and phpMyAdmin links are one-time. It omits other consequential behavior that isn't in annotations, such as published files landing in public_html and requiring manual cleanup (only visible in the oneOf branch text).
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 run-on sentence that front-loads the core purpose, then lists roughly ten capability clusters in a breath. Each cluster is real, but the catalogue is hard to scan and largely restates what the action enum already lists action-by-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 that the action enum carries per-action requirements and all 51 parameters are fully documented in the schema, the description needs only to frame the tool's domain, which it does. The absence of an output schema is not a problem since the branches describe return values (password_once, download URLs, stored_path).
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% and the oneOf branches enumerate required/optional params per action, so the schema does nearly all the work. The top-level description adds no parameter syntax, defaults, or dispatch hints beyond what the enum already encodes, making the baseline 3 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?
Opens with a specific verb and resource ('Creates and changes the server environment of the active site'), which distinguishes it from apps_read and apps_delete. The enumerated capability list confirms its scope as a broad write surface, though the enumeration is more of a catalogue than a purpose statement.
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 pick this tool over alternatives, and the sibling list contains direct competitors whose names mirror its actions (files_write vs. action files_write, ftp_write vs. ftp_create/ftp_passwd). It also never explains that most actions need confirm=true and user approval first, which the schema buries in the confirm property.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_deleteDelete contentBDestructiveInspect
Deletes entries, categories, comments, filters and video channels from a content module of the active site. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| module | Yes | Content module code. poll is the same module as polls (module and settings lists name it poll). Not used by comments_all. The forum has its own forum_* tools. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: delete, category_delete, comments_delete, filter_delete, channel_delete, channel_category_delete. | |
| channel_id | No | Video channel id. | |
| filter_num | No | Filter number 1-3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description's addition of "Cannot be undone" genuinely confirms permanence — information a hint alone doesn't convey — but it stops there: nothing about required permissions, what happens to dependent records (e.g. comments on a deleted entry), or whether the confirm flag can be bypassed programmatically.
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, no filler, with scope stated first and the irreversibility warning front-loaded at the end where it lands hardest. Nothing repeats the title or the schema.
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 six-parameter destructive tool with full schema coverage and no output schema, the description covers what is deleted, from where, and that it's permanent. The remaining gaps — the user-approval gate for confirm, the forum exclusion, and the module/polls alias — are all handled in the schema, so nothing critical is missing, though a one-line cross-reference to content_write would have made it 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 description coverage is 100% and the action enum's oneOf entries already spell out per-action required parameters (id vs channel_id vs filter_num). The description adds no format or behavioral detail beyond the resource vocabulary that maps loosely to the action values, so it sits at the baseline rather than adding value.
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?
States a specific verb (deletes) plus the exact resource set (entries, categories, comments, filters, video channels) and scopes it to a content module of the active site. An agent immediately knows what this destroys, though the description itself does not differentiate it from the sibling content_write or point to forum_delete for forum content — that distinction only appears in the schema's module field.
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?
There is no guidance on when to choose this tool over content_write or the module-specific *_delete siblings, and no mention of prerequisites such as selecting a site first. The only directional statement is a consequence ("Cannot be undone"), which warns but does not route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_readRead contentBRead-onlyIdempotentInspect
Reads entries, categories, comments, filters, albums and video channels of a content module (news, blog, publ, board, photo, video, faq, dir, load, gb, stuff, mchat, polls) on the active site.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| date | No | List filter date yyyy-mm-dd or yyyy. | |
| page | No | List page, from 1. | |
| sort | No | List sort asc|desc. | |
| tree | No | comments_all: yes tree / no flat. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): the fields that identify a record, without full texts and HTML; for entries id, title up to 120 characters, status, date added (UTC, ISO 8601), public URL, category id and an excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| module | No | Content module code. poll is the same module as polls (module and settings lists name it poll). Not used by comments_all. The forum has its own forum_* tools. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| pending | No | 1 = moderation / pending-only list. | |
| user_id | No | Act-as user id. | |
| category | No | Category id (list filter / add). | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. | |
| channel_id | No | Video channel id. | |
| filter_num | No | Filter number 1-3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the 'active site' context and the module/resource scope; it says nothing about pagination, truncation, or return behavior beyond what the schema's detail/offset params already document.
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 with the verb first and no filler. The parenthetical module-code list partly duplicates the schema enum, a minor redundancy, but the sentence remains tight and readable.
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 complex 11-action, 15-parameter tool with no output schema, the one-line description is thin on return-value and paging behavior, though the action enum and detail parameter in the schema compensate substantially. Adequate but not fully self-contained.
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% and the action enum carries per-action required/optional parameter detail, so the schema does the heavy lifting. The description itself adds no parameter meaning, which is the baseline 3 case when coverage is high.
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 a specific verb ('Reads') and enumerates concrete resources (entries, categories, comments, filters, albums, video channels) plus the supported module codes. It clearly conveys the content-reading scope, but it does not explicitly differentiate itself from the content_write/content_delete siblings, relying on the name instead.
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 offers no when-to-use, when-not, or alternative guidance; it is a single scope sentence. Prerequisites (an active site) are only implied by 'on the active site', and the routing hints (e.g. forum_* tools, comments_all needing no module) live in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_writeEdit contentADestructiveInspect
Creates and updates entries, categories, comments, filters and video channels in a content module of the active site, sets entry tags and rates entries. Entries are published to the site.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| url | No | mchat author url field. | |
| www | No | Author website. | |
| mark | No | Guestbook rating: 1 good, 2 bad. | |
| name | No | Category, forum, section, or channel name; guestbook author name; author name or contact person of a publ, load, board, dir or stuff entry. | |
| tags | No | Comma-separated tags. | |
| No | Email (guestbook / author). | ||
| items | No | Filter values separated by |. | |
| ontop | No | 1 = pin entry/topic. | |
| title | No | Entry or topic title; FAQ subject. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| active | No | polls update: yes|no. | |
| answer | No | FAQ answer. | |
| author | No | Login (nick) of the entry author. | |
| closed | No | 1 = create closed topic. | |
| fields | No | Extra body keys not listed as top-level params. | |
| module | Yes | Content module code. poll is the same module as polls (module and settings lists name it poll). Not used by comments_all. The forum has its own forum_* tools. | |
| object | No | Video embed iframe HTML. | |
| other1 | No | Custom field 1 (see action=fields). | |
| other2 | No | Custom field 2. | |
| other3 | No | Custom field 3. | |
| other4 | No | Custom field 4. | |
| other5 | No | Custom field 5. | |
| ownurl | No | Custom URL slug or own URL. | |
| ad_type | No | Board ad type: value id of filter 3 (see filter_list), same as filter3. | |
| answer1 | No | polls add: first answer. | |
| answer2 | No | polls add: second answer. | |
| answers | No | Poll answers (| for forum, comma for site polls). | |
| custom1 | No | mchat custom field 1. | |
| custom2 | No | mchat custom field 2. | |
| filter1 | No | Value id of entry filter 1 (see filter_list); board takes several ids of filters 1-3 separated by commas. | |
| filter2 | No | Value id of entry filter 2. | |
| filter3 | No | Value id of entry filter 3 (board: the ad type). | |
| filter4 | No | Value id of entry filter 4. | |
| filter5 | No | Value id of entry filter 5. | |
| message | No | Full text (entry, comment, post); the format of an entry text is set by message_type. | |
| pending | No | 1 = moderation / pending-only list. | |
| poll_id | No | Poll id (forum or site polls). | |
| subject | No | FAQ subject line. | |
| user_id | No | Act-as user id. | |
| add_date | No | Publish date yyyy-mm-dd hh:mm. | |
| category | No | Category id (list filter / add). | |
| comments | No | 1 = allow comments, 0 = deny. | |
| password | No | Closed forum password. | |
| pollonly | No | 1 = poll-only mode. | |
| polltime | No | Poll duration, e.g. "1 week". | |
| position | No | Category position. | |
| question | No | FAQ question text. | |
| author_id | No | Author user id. | |
| file_path | No | Local MCP server path for file/photo/archive upload. Missing files are an error; remote agents must use file_base64, file_upload_id, or file_site_path. | |
| hgu_title | No | SEO slug in module path. | |
| link2site | No | Site link (dir). | |
| parent_id | No | Parent comment id. | |
| pollmulty | No | 1 = multi-select poll. | |
| subscribe | No | 1 = subscribe to comments. | |
| till_date | No | Board ad end date yyyy-mm-dd hh:mm; 31 days from now when not set. | |
| uplastmod | No | Update lastmod flag (maps to uplastmod/update_date/update_lastmod). | |
| access2add | No | Category add group ids (comma-separated). | |
| channel_id | No | Video channel id. | |
| cover_path | No | Local MCP server path for cover upload. Missing files are an error; remote agents must use cover_base64, cover_upload_id, or cover_site_path. | |
| filter_num | No | Filter number 1-3. | |
| image_path | No | Local MCP server path for image (entry file1 or category file). Missing files are an error; remote agents must use image_base64, image_upload_id, or image_site_path. | |
| meta_title | No | Meta title for an entry or a module category. | |
| photo_path | No | Local MCP server path for photo upload (multipart). Missing files are an error; remote agents must use photo_base64, photo_upload_id, or photo_site_path. | |
| access2page | No | Category page access group ids. | |
| author_site | No | Author website (publ, load, board, dir, stuff). | |
| description | No | Short description / FAQ question; its format is set by description_type. | |
| file_base64 | No | Base64 file body with file_filename (remote upload). Wins over file_upload_id, file_site_path, and file_path. | |
| link2source | No | Source link (publ). | |
| show_attach | No | news, blog: 1 = show the Attachments block (links to the entry images) on the entry page, 0 = hide it. Off for a new entry unless set; an update without it keeps the current value. | |
| archive_path | No | Local MCP server path for load archive. Missing files are an error; remote agents must use archive_base64, archive_upload_id, or archive_site_path. | |
| author_email | No | Author or contact email (publ, load, board, dir, stuff). | |
| author_phone | No | Contact phone (board). | |
| cover_base64 | No | Base64 cover body with cover_filename (remote upload). Wins over cover_upload_id, cover_site_path, and cover_path. | |
| image_base64 | No | Base64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path. | |
| message_type | No | Format of message (faq: answer) on add and update: plain escapes the markup, bb turns BB codes into HTML, html keeps the HTML. news and load always keep the HTML; blog, publ, board, dir, stuff and faq keep it only when the user group may use HTML in the module, otherwise the markup is escaped. Without it a non-empty text of these modules is saved as html. | |
| photo_base64 | No | Base64 photo body with photo_filename (remote upload). Wins over photo_upload_id, photo_site_path, and photo_path. | |
| file_filename | No | File name for file_base64, with extension. | |
| meta_keywords | No | Meta keywords for an entry or a module category. | |
| archive_base64 | No | Base64 archive body with archive_filename (remote upload). Wins over archive_upload_id, archive_site_path, and archive_path. | |
| cover_filename | No | File name for cover_base64, with extension. | |
| file_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over file_path. | |
| file_upload_id | No | upload_id from upload_direct. Wins over file_site_path and file_path. | |
| image_filename | No | File name for image_base64, with extension. | |
| photo_filename | No | File name for photo_base64, with extension. | |
| access2category | No | Category view group ids (comma-separated). | |
| cover_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over cover_path. | |
| cover_upload_id | No | upload_id from upload_direct. Wins over cover_site_path and cover_path. | |
| image_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over image_path. | |
| image_upload_id | No | upload_id from upload_direct for the first material image (multipart file1). Wins over image_site_path and image_path. | |
| photo_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over photo_path. | |
| photo_upload_id | No | upload_id from upload_direct. Wins over photo_site_path and photo_path. | |
| screenshot_path | No | Local MCP server path for load/video screenshot. Missing files are an error; remote agents must use screenshot_base64, screenshot_upload_id, or screenshot_site_path. | |
| archive_filename | No | File name for archive_base64, with extension. | |
| description_type | No | Format of description (faq: question); the same as message_type. | |
| image_upload_ids | No | Comma-separated upload_id values from upload_direct. They fill material image slots file1, file2, and so on, after image_upload_id when that is also set. At most 50. | |
| meta_description | No | Meta description for an entry or a module category. | |
| archive_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over archive_path. | |
| archive_upload_id | No | upload_id from upload_direct. Wins over archive_site_path and archive_path. | |
| screenshot_base64 | No | Base64 screenshot body with screenshot_filename (remote upload). Wins over screenshot_upload_id, screenshot_site_path, and screenshot_path. | |
| screenshot_filename | No | File name for screenshot_base64, with extension. | |
| screenshot_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over screenshot_path. | |
| screenshot_upload_id | No | upload_id from upload_direct. Wins over screenshot_site_path and screenshot_path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is largely covered. The description adds that entries are published to the site, but it omits permission requirements, irreversibility, moderation behavior, and upload constraints that appear only in the 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 is two sentences with no wasted wording and is front-loaded with the main capabilities. The second sentence adds the important publish side effect without repetition.
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?
This is a complex 103-parameter, multi-action destructive tool, and the description is minimal at the top level. However, the schema's per-action oneOf descriptions document required and optional fields extensively, and annotations cover the safety profile; no output schema means return values need not be explained here.
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 broadly maps capabilities to resource types, but with 103 parameters it adds no parameter-level detail beyond the very rich schema and action oneOf descriptions.
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 names specific verbs and resources: creates and updates entries, categories, comments, filters, and video channels, plus tags and rates entries. This clearly distinguishes a write tool from content_read and content_delete, although it does not explicitly name those siblings.
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?
Usage is implied by the write verbs and the phrase 'active site,' so an agent can infer this is for mutations. However, the description gives no explicit when-to-use guidance, exclusions, or alternatives such as content_read, content_delete, or forum_write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_siteCreate siteAInspect
Creates a new uCoz site on the signed-in account at the given address and zone, and makes it the active site.
| Name | Required | Description | Default |
|---|---|---|---|
| dom | Yes | Zone code (not the full hostname). Pass the code before "="; the site URL is https://{addr}.{host}. Available: l = usite.pro; r = ucoz.site; s = ucoz.club; e = ucoz.net; f = ucoz.org; 6 = clan.su; 7 = moy.su; 8 = do.am. | |
| lng | No | Two-letter language code, default en | |
| addr | Yes | Site address (2-15 chars, a-z0-9-) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the non-obvious side effect that the new site becomes the active site, which is meaningful state-change context beyond the annotations. It stops short of disclosing failure behavior, uniqueness constraints, or quota limits.
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 with no filler. The side effect is placed at the end where it naturally follows the core action, and nothing is redundant.
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 3-parameter creation tool with full schema coverage and annotations, the description covers the action, target, and side effect. It omits the 'lng' parameter and any failure/duplicate-address behavior, but no output schema exists so return values need not be explained.
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%, with the 'dom' enum codes fully mapped to hosts and 'addr'/'lng' constraints documented in the schema. The description only restates 'at the given address and zone' without adding format or validation detail, so baseline 3 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?
Uses a specific verb+resource ('Creates a new uCoz site') and states scope (signed-in account) and side effect ('makes it the active site'). An agent can distinguish it from list_sites and select_site purely from the description.
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?
Usage is implied by the verb — this is the only site-creation tool among siblings, so no alternative needs naming. However, it gives no prerequisites (auth requirements, whether the address must be free, quota limits) and no explicit when-to-use framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_tooluAPI documentationARead-onlyIdempotentInspect
Looks up the uCoz uAPI OpenAPI specifications: lists them, searches them, returns a full specification. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Direct YAML URL for fetch_spec; only https://api.ucoz.net/{module}-openapi.yaml is accepted. | |
| limit | No | search hits limit, 1–20 (default 5). | |
| query | No | Search string (action=search). | |
| action | Yes | list — module catalog and URLs. search — query YAML lines (pass module to scope). fetch_spec — full YAML. | |
| module | No | Spec code: news, blog, shop, user, templates, mail, … |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorldHint=false, so the safety profile is fully covered. The trailing "Read-only" merely repeats readOnlyHint and earns no credit. The description adds little behavioral context beyond the schema-documented URL constraint (only https://api.ucoz.net/{module}-openapi.yaml accepted), leaving it at a baseline 3.
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 with no filler, cleanly ordered purpose-then-capabilities-then-safety. It loses a point only because the closing "Read-only" is redundant against the annotations and could be dropped without loss.
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 5-parameter, enum-driven tool with 100% schema coverage and no output schema, the three modes are adequately described and it notes that fetch_spec returns a full specification. It could still say more about the shape/limits of returned specs (e.g. that results are YAML text), but nothing an agent needs to select or invoke it is missing.
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 schema already documents all five parameters including the enum, ranges, and URL format restriction. The description contributes no additional parameter detail (no default hints, no interaction notes between action and module/query), so the baseline 3 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?
States a specific verb and resource ("Looks up the uCoz uAPI OpenAPI specifications") and enumerates its three modes — list, search, fetch — each mapping directly to an action enum value. No sibling tool provides documentation lookup, so it is trivially distinguished from the *_read/write/delete family.
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 describes what the tool does but never states when to reach for it (e.g. before invoking a uAPI method) or any exclusions. Usage is only implied by the action enum in the schema, not spelled out in prose. No alternatives exist among siblings, so the omission is less severe, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_deleteDelete site filesBDestructiveInspect
Deletes files and folders from the site file manager. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Clean path without edge slashes, passed as a parameter (never as a URL suffix). Empty string is the site root; content_get, content_put and mkdir need a non-empty path. Allowed bytes are A-Z a-z 0-9 . _ / -; segments cannot be empty, ".", "..", or start with a dot. Folder for list, info, upload, upload_url and move; file for content_get and content_put; new folder for mkdir; source for rename, move and delete. | |
| paths | No | move: sources to move; a non-empty list ignores path and always returns results per item. delete: targets, together with path. Items are clean paths. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known from structured data. 'Cannot be undone' largely restates destructiveHint, though the framing that folders as well as files are removed adds a small amount of scope information. It says nothing about batch semantics (path + paths), partial failures, or the confirm gate, all of which remain in the 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?
Two short sentences with zero waste; the action and its irreversibility are both front-loaded. Nothing is repeated or padded.
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 destructive tool with two required parameters and batch support, the description is thin: it never mentions that multiple targets can be supplied, that missing targets fail the whole request, or that a confirm flag must be set. The rich schema and annotations compensate, making it adequate but with clear gaps for a high-risk operation.
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%, including detailed path rules, the paths/path relationship for delete, and the confirm requirement, so the baseline of 3 applies. The description adds no parameter-level information beyond what the schema already documents.
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?
States a specific verb and resource ('Deletes files and folders from the site file manager'), so an agent can tell it apart from files_read/files_write. It doesn't explicitly name the nearest destructive siblings (content_delete, ftp_delete) to route between them, so it stops short of a 5.
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?
There is no guidance on when to use this tool versus alternatives such as content_delete or ftp_delete, and no mention of prerequisites or when deletion should be avoided. The only usage-adjacent statement is the irreversibility warning, which is a consequence rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_readRead site filesCRead-onlyIdempotentInspect
Lists files and folders of the site file manager, returns file info and quota, reads text files.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | List page, from 1. | |
| path | No | Clean path without edge slashes, passed as a parameter (never as a URL suffix). Empty string is the site root; content_get, content_put and mkdir need a non-empty path. Allowed bytes are A-Z a-z 0-9 . _ / -; segments cannot be empty, ".", "..", or start with a dot. Folder for list, info, upload, upload_url and move; file for content_get and content_put; new folder for mkdir; source for rename, move and delete. | |
| sort | No | list: name (default), size, or mtime. Anything else is treated as name. | |
| limit | No | list: the earlier name of per_page; per_page wins when both are set, and 0 counts as not set. | |
| order | No | list: asc (default). Only desc changes direction. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): name, path, type, size, objects in a folder and modification time (UTC, ISO 8601). Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| filter | No | list: a quota.limits.filters name, or a comma-separated extension list (png,jpg). Unknown names are ignored. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds almost nothing beyond them; the one useful nugget, that only text files can be read, is stated more completely in the schema's content_get entry. No mention of auth requirements, size limits, or error 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?
A single front-loaded sentence that leads with the primary list capability and then covers the secondary actions. Nothing is padded, though for a 4-action, 10-parameter tool the compression is close to under-specification rather than tight writing.
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 exists, so return values are opaque at the description level, and with four distinct actions and ten parameters the one-sentence summary is thin. It is rescued by unusually rich enum and parameter descriptions in the schema, which supply the action-to-parameter mapping, but the overview itself does little for an agent deciding between content_get and content_read.
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% and the action enum's oneOf entries exhaustively document which parameters each action takes, so the description need not carry parameter meaning. It adds none, which is the correct baseline of 3 when the schema does all the work.
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 names the resource (site file manager) and four concrete operations: list, info, quota, and read text content. It is clearly a read-side tool, so it is distinguishable from files_write and files_delete. It stops short of naming any sibling explicitly, which keeps it at 4 rather than 5.
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?
It enumerates what the tool can do but never says when to choose it over alternatives — notably content_read, which appears to overlap with content_get, or when a caller should use files_write/files_delete for the mutation side. The only routing signal is the action enum, which is schema data, not description guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_writeEdit site filesCDestructiveInspect
Uploads files (text, base64 or URL), writes text files, creates folders, renames and moves items in the site file manager.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | upload_url: http:// or https:// URL that ends with a file name and extension. | |
| file | No | upload: synonym for a single text body when files and content are omitted. | |
| name | No | upload: saved name when the request has exactly one file. upload_url: saved name, or the last URL segment when omitted. rename: new leaf name (no slashes) for a single object. | |
| path | No | Clean path without edge slashes, passed as a parameter (never as a URL suffix). Empty string is the site root; content_get, content_put and mkdir need a non-empty path. Allowed bytes are A-Z a-z 0-9 . _ / -; segments cannot be empty, ".", "..", or start with a dot. Folder for list, info, upload, upload_url and move; file for content_get and content_put; new folder for mkdir; source for rename, move and delete. | |
| size | No | upload_direct: exact byte size of the file that will be POSTed to upload_url (1..16777216). The curl body must match it exactly. upload: expected byte size of the single top-level body after base64 decoding; a mismatch fails the call before anything is stored. | |
| files | No | upload: one or more files. Each item is { filename, content } or { filename, content_base64 }. Sent as a repeated multipart field named file. name applies only when this list has one file and no extra top-level body. | |
| items | No | rename batch: map of leaf name to new leaf name inside path. When this object is present the call always returns results per item, even if name is also set. | |
| paths | No | move: sources to move; a non-empty list ignores path and always returns results per item. delete: targets, together with path. Items are clean paths. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| create | No | content_put: create the file when it does not exist. Default false. Parent folder must already exist. | |
| sha256 | No | upload: expected SHA-256 hex of the single top-level body after base64 decoding; a mismatch fails the call before anything is stored. | |
| content | No | content_put: new file text (empty string is allowed). upload: text body of a single file when files is omitted. | |
| filename | No | upload and upload_direct: original file name (multipart filename). Falls back to name. | |
| add_wmark | No | upload and upload_url: apply the site watermark when it is enabled and the extension is an allowed image. | |
| upload_id | No | upload: id from upload_direct whose bytes were already POSTed. Saved into path under its upload_direct filename, or name when it is the only file. Spent only when that item is uploaded; otherwise it stays usable until it expires. | |
| upload_ids | No | upload: several upload_direct ids (a comma-separated string is accepted too), sent after upload_id and inline files. At most 20. | |
| destination | No | move: existing destination folder. Empty string is the site root. | |
| content_base64 | No | upload: standard base64 body of a single binary file when files is omitted. Inline base64 suits small files only: a long base64 body produced by a model arrives truncated. Foreign characters or a truncated length fail the call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and openWorldHint=true, but the description does not explain what may be overwritten or destroyed, whether operations are atomic, how partial per-item failures behave, or what permissions are required. It mostly restates the operation list already present in the 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 is a single front-loaded sentence with no filler, which is appropriately concise. However, for a multi-action destructive tool, the flat operation list could be structured more helpfully around action selection.
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 schema is unusually rich, with per-action oneOf descriptions and full parameter documentation, and the annotations cover the safety profile. The description itself remains minimal and omits sibling routing and overwrite/destruction specifics, so it is adequate but not fully complete for a complex 18-parameter write 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 description coverage is 100%, so the schema already documents all 18 parameters and the action enum in detail. The description only broadly mentions text, base64, and URL uploads and does not add parameter-level meaning beyond that baseline.
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 names specific write operations: uploading files, writing text, creating folders, renaming and moving items in the site file manager. It clearly identifies a file-mutation tool, but it does not explicitly distinguish itself from siblings such as files_read, files_delete, or content_write.
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 states what operations are available but gives no guidance on when to use this tool versus files_read, files_delete, content_write, or other write tools. It also omits prerequisites and conditions for choosing among its own actions, leaving selection to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forum_deleteDelete forum contentADestructiveInspect
Deletes forums, sections, topics, posts and polls. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: forum_delete, section_delete, topic_delete, post_delete, poll_delete. | |
| poll_id | No | Poll id (forum or site polls). | |
| post_id | No | Forum post id. | |
| forum_id | No | Forum id. | |
| topic_id | No | Topic id. | |
| section_id | No | Forum section id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description adds the irreversibility detail ('Cannot be undone'), which is real value. However, it omits important behavioral facts such as whether deleting a forum cascades to its topics/posts, and that confirm must be true only after user approval — that lives only in the 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?
Two short sentences, front-loaded with the scope of deletion and immediately followed by the irreversibility warning. Nothing is wasted or buried.
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 an 8-parameter destructive tool with no output schema, the description is adequate but thin: it says what gets deleted and that it is permanent, while the cascade behavior and the human-approval requirement are left to the schema. An agent reading only the description would have an incomplete model of consequences.
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%, and the oneOf entries already explain per-action id requirements and the confirm flag, so the schema does the heavy lifting. The description's list of entity types loosely mirrors the five actions but adds no id-format or precedence detail beyond what the schema states.
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 gives a specific verb ('Deletes') and enumerates the exact resource types covered (forums, sections, topics, posts, polls), which maps cleanly onto the action enum. It is clearly distinguishable from sibling forum_read and forum_write by its destructive scope, though it never names those siblings 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?
Usage is only implied: the enumeration of entity types plus 'Cannot be undone' signals a destructive operation to be used deliberately. There is no explicit guidance about when to choose this over forum_write, nor any mention of the approval/confirm workflow that the schema requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forum_readRead forumBRead-onlyIdempotentInspect
Reads forums, sections, topics, posts and polls of the forum module on the active site.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| page | No | List page, from 1. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): the fields that identify a record, without full texts and HTML; for entries id, title up to 120 characters, status, date added (UTC, ISO 8601), public URL, category id and an excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| poll_id | No | Poll id (forum or site polls). | |
| post_id | No | Forum post id. | |
| forum_id | No | Forum id. | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. | |
| topic_id | No | Topic id. | |
| section_id | No | Forum section id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds only that reads are scoped to the active site, which is genuinely useful context, but says nothing about pagination caps, brief-vs-full defaults or error 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?
A single front-loaded sentence with no filler, and the scope ('active site') is placed at the end where it reads naturally. It is arguably too thin for a ten-action tool, but there is no wasted text to trim.
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 ten-action tool with eleven parameters and no output schema, one sentence leaves the dispatcher model, paging behavior and site-scoping mechanics entirely to the schema. The schema is rich enough to carry most of that load, but the description does not prepare an agent for the action-per-call pattern.
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%: every action variant and every parameter (id, page, per_page, offset, detail, and each entity id) is documented in the oneOf entries and property descriptions. The description contributes nothing beyond the schema, so the baseline 3 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 verb 'Reads' plus the enumerated resources (forums, sections, topics, posts, polls) states exactly what data the tool surfaces and implicitly separates it from forum_write and forum_delete. The one gap is that it never mentions the action-dispatcher design, so the multi-operation nature only becomes visible in the 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?
There is no statement of when to choose this over forum_write/forum_delete, no mention that a site must first be selected via select_site, and no guidance on choosing among the ten actions. Only the phrase 'active site' hints at a prerequisite, and it is left unexplained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forum_writeEdit forumCDestructiveInspect
Creates and updates forums, sections, topics, posts and polls; closes, pins, moves, joins and splits topics and posts; votes in polls.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| name | No | Category, forum, section, or channel name; guestbook author name; author name or contact person of a publ, load, board, dir or stuff entry. | |
| nfid | No | Target forum id (move/split). | |
| vote | No | Poll vote index(es), comma-separated. | |
| ontop | No | 1 = pin entry/topic. | |
| title | No | Entry or topic title; FAQ subject. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| closed | No | 1 = create closed topic. | |
| fields | No | Extra body keys not listed as top-level params. | |
| answers | No | Poll answers (| for forum, comma for site polls). | |
| confirm | No | Pass true only after the user approves this change. Required by: topic_join, topic_split, post_move, poll_join, poll_split. | |
| message | No | Full text (entry, comment, post); the format of an entry text is set by message_type. | |
| poll_id | No | Poll id (forum or site polls). | |
| post_id | No | Forum post id. | |
| user_id | No | Act-as user id. | |
| forum_id | No | Forum id. | |
| password | No | Closed forum password. | |
| pollonly | No | 1 = poll-only mode. | |
| polltime | No | Poll duration, e.g. "1 week". | |
| post_ids | No | Comma-separated post ids. | |
| question | No | FAQ question text. | |
| topic_id | No | Topic id. | |
| author_id | No | Author user id. | |
| pollmulty | No | 1 = multi-select poll. | |
| target_id | No | Join/move target id. | |
| section_id | No | Forum section id. | |
| description | No | Short description / FAQ question; its format is set by description_type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the description's main added duty is to explain consequences, permissions, or gating — none of which it does. The operation list merely restates the action enum, adding no behavioural context such as irreversibility of deletes/moves or that confirm gates destructive actions.
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 enumerating the operation families, with no filler. It is somewhat redundant with the action enum but remains an efficient one-line summary for a 27-parameter tool.
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 enormous action enum and 100% parameter documentation in the schema carry most of the burden, so the description need not repeat parameters. However, for a destructive, 27-parameter write tool with no output schema, it should at minimum flag the confirm requirement and the read/delete siblings, which it does not.
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% and each oneOf action entry documents its own required and optional fields, so the schema already carries full parameter meaning. The description adds nothing parameter-specific (e.g. the overloaded id/name fields or required action), so the baseline 3 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 concrete verbs and resources ('creates and updates forums, sections, topics, posts and polls; closes, pins, moves, joins and splits') that accurately mirror the action enum, so an agent knows exactly what class of operation this tool performs. It stops short of distinguishing itself from the sibling forum_read and forum_delete tools, which is the missing piece for a 5.
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?
There is no statement of when to use this tool versus forum_read (read) or forum_delete (delete), and no prerequisites or ordering advice. It also never mentions the approval workflow encoded in the confirm parameter, which is essential guidance for the join/split/move actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ftp_deleteRemove FTP passwordADestructiveInspect
Removes the FTP password of the active site: FTP login stops working until a new password is set with ftp_write. The old password cannot be restored. An FTP account of the server environment is deleted with apps_delete ftp_delete instead.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: ftp_password_reset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds real consequence detail the annotations cannot convey: FTP login breaks until a new password is set and the old password is unrecoverable. The confirm gate and the 'fails when no password is set' condition live in the schema rather than the description, so it is not fully self-contained on 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?
Three short sentences with the consequence front-loaded, which is the right order. The final sentence about apps_delete is garbled ('with apps_delete ftp_delete instead'), costing clarity in what should be a crisp disambiguation.
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 two-parameter destructive tool with full schema coverage and no output schema, the description covers irreversibility, the resulting broken-login state and the sibling to use for a different deletion. The only gap is the imprecise cross-reference sentence and no mention of how to restore service beyond naming ftp_write.
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% and the enum documents the single action plus its required confirm parameter in detail. The description adds no parameter-level syntax or format information beyond what the schema already provides, so the baseline of 3 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?
States a specific verb and resource (remove the FTP password of the active site) and immediately delimits scope against two siblings: ftp_write to set a new password and apps_delete for deleting an FTP account. An agent can distinguish this from every other ftp_* and *_delete tool without opening the 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?
Gives clear when-to-use context (only for the password of the active site) and names the alternative path for a related-but-different operation (deleting an FTP account via apps_delete). No explicit exclusions such as prerequisites for the 'active site' selection, and the final cross-reference sentence is grammatically mangled, which slightly blunts the routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ftp_readRead FTP accessARead-onlyIdempotentInspect
Returns the FTP connection details of the active site: host, port, user name and whether an FTP password is set. Never returns the password and does not change anything. Site files are read with files_read. FTP accounts of the server environment are listed with apps_read ftp_list.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds useful behavioral context by stating that the password is never returned and that the tool does not change anything, though the latter largely reinforces the annotations.
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 three tight sentences with the primary return behavior front-loaded, followed by security behavior and sibling routing. Every sentence contributes useful selection or invocation 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?
For a simple read-only tool with rich annotations and a fully documented one-parameter schema, the description supplies the remaining needed context: what is returned, that the password is excluded, and which sibling tools to use for related tasks. No output schema is present, but the return fields are named in the description.
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?
There is only one parameter, and the schema documents it fully with a 100% schema description coverage and an enum value describing the operation. The description does not add parameter-level semantics beyond the overall tool purpose, so the schema does the heavy lifting.
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 and resource: it returns the FTP connection details of the active site, and it enumerates the returned fields (host, port, user name, password-set status). It also clearly distinguishes the tool from files_read and apps_read ftp_list, so an agent can identify its purpose without opening the 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?
It explicitly routes adjacent needs: site files are read with files_read, and server-environment FTP accounts are listed with apps_read ftp_list. It also states that the tool does not change anything, which excludes mutation use cases, leaving little ambiguity about when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ftp_writeSet FTP passwordADestructiveInspect
Sets the FTP password of the active site when none is set, or replaces the current one (the old password stops working). The reply has the connection details without the password. FTP accounts of the server environment are created and changed with apps_write.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: ftp_password_set, ftp_password_change. | |
| ftp_password | No | New FTP password: 6-15 characters, only Latin letters, digits, _ and -. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond destructiveHint=true, the description discloses the concrete consequence (the old password stops working) and the response contract (connection details returned without the password), plus the user-approval requirement implied by confirm. That is exactly the extra context annotations cannot express.
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 short sentences, front-loaded with the core action and its conditional scope, then the side effect, then the response, then the alternative. 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?
For a destructive 3-parameter write with full schema coverage, no output schema, and annotations covering safety, the description supplies the remaining essentials: what gets invalidated, what the reply contains, and where to go for other FTP-account work.
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% — each action, confirm, and the password format are already documented in the schema. The description adds the outcome of the change but no additional parameter syntax or constraints, so the baseline of 3 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?
Specific verb+resource (sets the FTP password of the active site) with the two states it operates in spelled out (none set vs. replace existing). It also names a sibling (apps_write) for the adjacent FTP-account operations, so an agent can orient it against neighbors.
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?
Clear context for both branches and a routing pointer: FTP accounts of the server environment are created/changed with apps_write, not here. It does not explicitly say when NOT to call it (e.g., prerequisite of selecting an active site), which keeps it just short of a 5; the per-action when-to-use is fully covered by the schema oneOf entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesList sitesARead-onlyIdempotentInspect
Lists the uCoz sites owned by the signed-in account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the useful scoping detail that results are limited to the signed-in account's sites, but says nothing about pagination or result ordering.
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, tight sentence with no wasted words. The key qualifier ("owned by the signed-in account") is included without preamble.
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 zero-parameter read tool whose safety traits are already declared by annotations, the description is essentially sufficient. The only mild gap is that with no output schema, the description could hint at what a listed site entry contains, but this is minor.
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 tool takes zero parameters, so the schema carries no per-parameter burden and the baseline for a no-param tool is 4. There is nothing further the description could document.
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 a specific verb ("Lists") and resource ("uCoz sites") with a clear scope ("owned by the signed-in account"). It is clear on its own, though it does not explicitly distinguish itself from the sibling select_site or create_site.
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?
Usage is only implied: an agent would infer this is for discovering which sites exist before selecting or operating on one. There is no explicit statement of when to use it versus select_site, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modules_readRead modulesBRead-onlyIdempotentInspect
Lists installed and available modules of the active site; shows module status and the indexing quarantine status.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| module_code | No | Lowercase module code, as listed by modules_list (field module) or active_mods (field code) on the active site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description contributes the useful scoping detail that it operates on the 'active site' and mentions the quarantine-status dimension, but says nothing about pagination limits or result shape beyond that.
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 compact sentence, front-loaded with the primary purpose and scoped to the active site. The second clause slightly overlaps with the first ('installed and available modules' vs 'module status'), but there is no padding.
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 does take on some burden of describing returns, and it does so at a high level (module status, quarantine status) while the schema handles all parameters. Combined with the read-only annotations, an agent has enough to call this correctly, though return fields and pagination behavior are only inferable from the 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 description coverage is 100%: every action variant, the offset semantics, and the module_code format are fully documented in the schema. The description adds no parameter detail beyond the schema, so the baseline 3 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?
Names a specific verb and resource (lists modules of the active site) and even enumerates the kinds of information returned (module status, indexing quarantine status), so the agent knows exactly what this tool surfaces. It does not explicitly differentiate itself from modules_write/modules_uninstall, but the read/list framing makes the boundary reasonably clear.
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 offers no when-to-use guidance, no prerequisites, and never names an alternative such as modules_write or modules_uninstall. The action enum lives entirely in the schema, so the description itself gives the agent nothing to route on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modules_uninstallUninstall moduleBDestructiveInspect
Uninstalls a module from the active site. Module data may be lost.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: module_uninstall. | |
| module_code | Yes | Lowercase module code, as listed by modules_list (field module) or active_mods (field code) on the active site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true and readOnlyHint=false, so the safety profile is declared. The description's "Module data may be lost" sharpens that into a concrete consequence (data, not just config) and adds the "active site" scoping, but says nothing about required permissions, reversibility, or dependency effects.
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 short sentences, zero filler, with the action and its risk front-loaded. Every clause 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?
For a 3-parameter, confirm-gated destructive tool with full schema coverage and explicit destructive annotations, the description is nearly sufficient. It only misses prerequisites such as dependencies or whether data loss is immediate vs deferred.
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% and the schema itself documents module_code lookup sources and the confirm approval gate. The description adds no parameter-level meaning beyond that, so baseline 3 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?
Specific verb+resource with scope: "Uninstalls a module from the active site." An agent can distinguish it from modules_read/modules_write, though the description never explicitly contrasts uninstall with a disable/deactivate path via modules_write.
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 statement of when to use this versus the sibling modules_write or modules_read tools, and no prerequisites or warnings about dependencies. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modules_writeConfigure modulesBDestructiveInspect
Installs a module, enables or disables uAPI for a module, lifts the indexing quarantine.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | No | Pass true only after the user approves this change. Required by: quarantine_unlock. | |
| module_code | No | Lowercase module code, as listed by modules_list (field module) or active_mods (field code) on the active site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=false, so the safety profile is covered. The description adds the scoping detail that quarantine_unlock affects the whole site's indexing and that the other actions target a module, but it is largely a restatement of the enum descriptions and says nothing about irreversibility or side effects of disabling uAPI or installing.
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 enumerates all four operations with no filler. It is appropriately sized for a multi-action tool, though the list-form phrasing is slightly dense for an opening line.
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 destructive 3-parameter mutation tool with no output schema, the description covers the 'what' but omits usage guidance and confirmation-flow context, relying entirely on the schema and annotations. It is minimally complete but leaves the agent to infer routing and approval semantics.
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%, with per-action oneOf descriptions spelling out required parameters (module_code, confirm) and the enum values documented inline. The description adds no syntax or format detail beyond the schema, so the 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 names a concrete verb set (installs, enables/disables uAPI, lifts quarantine) and the resource (module), and it maps cleanly onto the four enum actions. It is clearly a write/mutation tool distinct from modules_read and modules_uninstall, but it never explicitly names those siblings or contrasts itself with them.
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?
There is no statement of when to use this tool versus modules_read, modules_uninstall, or the *_write siblings, and no mention of prerequisites or the user-approval flow that the confirm parameter implies. The agent must infer all routing and sequencing from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_siteSelect siteAInspect
Sets the active site for the following calls in this session: the site tools then read and change that site. If the site has no active API key yet, creates one for MCP access. Site content is not changed.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Numeric site id from list_sites |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false with destructiveHint=false, and the description adds meaningful context beyond them: selecting a site can create an API key if none exists (a real write side effect), and it explicitly reassures that site content is not changed. That resolves the tension between 'not destructive' and 'not read-only'. It does not cover failure cases (invalid site_id) 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?
Three compact sentences, each earning its place: scope of effect, API-key side effect, and the content-unchanged reassurance, with the primary purpose front-loaded. 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?
For a one-parameter session-state tool with no output schema and non-destructive annotations, the description covers purpose, scope, persistence, and side effects adequately. Minor gaps remain around behavior for an unknown/invalid site_id and whether the selection survives beyond the session boundary.
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 the single parameter already documents 'Numeric site id from list_sites', so the schema carries the parameter meaning. The description implies which site is targeted but adds no format, range, or validation detail beyond the schema — the baseline 3 for high coverage 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?
States a specific verb and resource ('Sets the active site') and immediately scopes it ('for the following calls in this session'), which distinguishes it cleanly from siblings like list_sites and create_site. An agent can tell this is a session-state setter without opening the 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?
The description gives clear context for when this tool matters: it configures the site that subsequent site tools will read and change, and the schema points to list_sites as the id source. It does not explicitly name alternatives or state when-not-to-call, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_readRead module settingsARead-onlyIdempotentInspect
Reads module settings of the active site: lists the modules that have settings and whether each one is active, and returns the current settings of a module. Does not change anything.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| module | No | Module code. site holds the general site settings. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true and a closed world, so the safety profile is fully covered and 'Does not change anything' is largely redundant. The description adds a little context by scoping reads to the active site, but says nothing about permissions or how access-key redaction is returned beyond what the schema already notes.
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 compact sentence with the purpose and the two sub-behaviors front-loaded, followed immediately by the read-only reassurance. Efficient, though the semicolon clause packs two actions into one long sentence that could be split for faster scanning.
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 carries the return-value burden and does so adequately: it states that the list includes which modules have settings and whether each is active, and that a module's settings come back nested. Minor gaps remain on permissions and truncation behavior, but the schema covers truncation via offset/next.
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 oneOf action entries, the module enum and the offset/next semantics are already fully documented in the schema. The description contributes no additional parameter meaning such as mutual exclusivity rules or defaults, so the baseline 3 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?
States a specific verb and resource ('Reads module settings of the active site') and enumerates the two concrete behaviors: listing modules with active status, and returning a module's current settings. The scope is narrowed to the active site, so an agent can distinguish it from the sibling settings_write and from app/forum-specific readers without opening a 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?
Usage is only implied: the closing 'Does not change anything' signals read-only intent, which points an agent away from settings_write, but there is no explicit when-to-use statement, no conditions, and no named alternatives (e.g. modules_read vs settings_read). The agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_writeChange module settingsADestructiveInspect
Changes the settings of a module of the active site: updates only the passed keys and reports which of them changed. A dry run returns the current values of the keys without saving.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| module | Yes | Module code. site holds the general site settings. | |
| values | Yes | Flat setting keys and new values, e.g. { "name": "News", "entries_per_page": 10, "comments_enabled": true }. A flat key joins the nested path with _ (cover.thumb_width -> cover_thumb_width); list fields such as fields are sent whole. Key names are 1-64 letters, digits or _; field names are described in the module OpenAPI specification (docs_tool). | |
| confirm | No | Pass true only after the user approves this change. Required in some cases by: settings_update (see the action). | |
| dry_run | No | Return the current values of the requested keys without saving. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is partly covered. The description adds genuinely new behavior: only passed keys are written, the response distinguishes changed from unchanged keys, and a dry run previews without saving. It stops short of stating that some changes require confirm or are irreversible, which lives in the action's schema text rather than the 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?
Two sentences, front-loaded with the mutation semantics and followed by the dry-run caveat; no filler, no restatement of the title. Every clause carries information an agent needs.
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 destructive multi-module mutation, the description covers purpose, partial-update scope, result reporting and dry-run preview, while the schema carries the heavy confirm/irreversibility details and annotations flag destructiveness. The one meaningful omission is that the description never signals "some keys require confirm and may destroy data" — an agent skimming only the prose would miss that before opening the action enum text.
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% and every parameter carries a rich description, including the enum-constrained action with full confirm semantics and value-shape rules. The top-level description adds no parameter meaning beyond that (module, values, confirm and dry_run are untouched), so the baseline 3 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?
States a specific verb and resource ("Changes the settings of a module of the active site") plus the key semantic detail that it is a partial update touching only passed keys. It does not explicitly name settings_read or modules_write as the counterpart, so sibling differentiation is left to the tool-name pairing rather than stated.
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?
Usage is only implied: the dry_run sentence hints at a preview-then-commit workflow, and "reports which of them changed" implies verification use. There is no explicit when-to-use versus settings_read, no prerequisite guidance (e.g. needing module knowledge from modules_read or docs_tool), and no when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_deleteDelete shop contentADestructiveInspect
Deletes products, product and category images, stock records, basket items and product comments, and clears the wishlist. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Goods, category, comment, or basket line id. | |
| ids | No | Ids separated by commas (invoice_*: order ids, also separated by |; stock_remove). | |
| img | No | Image slot number, 0 for the main image. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| fields | No | Extra form keys (checkout field_N, stock_*, var_*, cnt_REC_ID, …). Routing and mode keys (method, mode, del, page, …) are ignored. | |
| confirm | No | Pass true only after the user approves this change. Required by: delete, img_del, category_image_delete, variation_dict_delete, stock_remove, stock_remove_all, comments_delete, wishlist_clear. Required in some cases by: basket_delete (see the action). | |
| del_all | No | 1 = delete all images (img_del); otherwise img_del needs img. | |
| files_sequence | No | Image order after single img_del. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds the important behavioral detail that deletion 'Cannot be undone' and specifies the full scope of what may be destroyed. It does not cover permissions or confirm requirements, but those are handled by the schema and annotations.
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, front-loaded with the core action and resource scope, followed by the irreversibility warning. Every sentence earns its place 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?
For a multi-action destructive tool with rich schema and annotations, the description is sufficiently complete: it names all affected resource types and warns that deletion is permanent. The action enum details and confirm requirements are fully covered by the schema, though the description could have briefly mentioned that an action parameter selects the specific operation.
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 detailed oneOf action parameter and other fields already document parameter semantics thoroughly. The description itself adds no parameter-specific detail beyond listing affected resources, making the baseline 3 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 a specific verb, 'Deletes,' and enumerates the exact resources affected: products, images, stock records, basket items, comments, and wishlist. This clearly distinguishes it from shop_read and shop_write siblings.
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?
Usage is implied by the destructive operation and the warning 'Cannot be undone,' but there is no explicit guidance on when to choose this over shop_write or other deletion tools, nor any stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_readRead shopBRead-onlyIdempotentInspect
Reads shop data of the active site: categories, products, variations, stock, basket, checkout form, orders, product comments, currencies and balance.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Goods, category, comment, or basket line id. | |
| cnt | No | Basket quantity. | |
| ids | No | Ids separated by commas (invoice_*: order ids, also separated by |; stock_remove). | |
| pid | No | Parent category id. | |
| date | No | invoices_list created period date1|date2. | |
| hide | No | Hide flag or invoices_list group. | |
| page | No | List page, from 1. | |
| pnum | No | Goods list page, the earlier name of page; page wins when both are set. | |
| sort | No | Goods list sort field. | |
| view | No | Goods list view. Default usergoods when user_id is given, otherwise allgoods. | |
| cdate | No | invoices_list delivery period date1|date2. | |
| f_art | No | ||
| order | No | List asc/desc or order hash. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): the fields that identify a record, without descriptions and HTML; for products id, title up to 120 characters, status (visible or hidden), date added (UTC, ISO 8601), public URL, price, stock, category id and an excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| f_name | No | Goods name filter (plain; MCP encodes Base64). | |
| f_warr | No | ||
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| status | No | Order status code. | |
| f_brand | No | ||
| f_price | No | Price filter MIN|MAX|CUR. | |
| f_stock | No | ||
| inv_sum | No | invoices_list sum1|sum2. | |
| user_id | No | User id filter or balance target. | |
| f_status | No | ||
| f_weight | No | ||
| goods_id | No | Wishlist goods id (get). | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. | |
| parent_id | No | Synonym for pid / category_list parent. | |
| payment_id | No | ||
| promo_code | No | ||
| delivery_id | No | ||
| get_globals | No | 1 = global categories in category_list. | |
| group_courier | No | ||
| variation_crc | No | Variation hash from variations_list. | |
| custom_delivery_tax | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description's only added context is that reads target the 'active site' (implying a dependency on select_site) and its enumeration of domains; it says nothing about permissions, pagination behavior, or cost of broad reads.
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?
One front-loaded sentence with a clear verb and scope and no wasted clauses. The trailing domain list is a slight dump but each item maps to a real action, so it 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?
For a 14-action, 36-parameter dispatcher this is thin: no explanation of how to choose an action, no mention that detail=full is needed for complete records, and no note that many params are action-specific. The unusually self-documenting oneOf schema carries most of that burden, keeping it at minimum-viable rather than inadequate.
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 description adds no information about any of the 36 parameters, not even the required `action` dispatcher. Schema coverage is 69% (below the 80% threshold where a 3 baseline would apply), so the description should compensate for the undocumented quarter but does not; the schema's oneOf blocks do the real work.
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?
States a specific verb ('Reads') and resource ('shop data of the active site') and enumerates the nine data domains covered, so an agent knows the breadth of the read surface. The read/write/delete split against shop_write and shop_delete is implied by the verb but not explicitly stated.
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 gives no when-to-use, when-not-to-use, or alternative routing: it never says to use shop_write for mutations or shop_delete for removal. Action selection among the 14 operations is left entirely to the schema's oneOf blocks, not to the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_writeEdit shopADestructiveInspect
Creates and updates shop categories, products, product images, variations, stock, basket and checkout, orders and their status, payment method and delivery, product comments and currency rates. No action takes or sends money through a payment system: placing an order or changing its payment method charges nothing (the new method may also set the payment processing status), a paid order status is set without a payment, and order status changes may credit or debit the internal shop balances of buyers, user sellers and referrers kept on the site; there is no action that sets or changes a balance directly.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Goods, category, comment, or basket line id. | |
| art | No | SKU / article. | |
| cnt | No | Basket quantity. | |
| ids | No | Ids separated by commas (invoice_*: order ids, also separated by |; stock_remove). | |
| img | No | Image slot number, 0 for the main image. | |
| now | No | 1 = buy now. | |
| opt | No | Selected options OPTION_ID-VALUE_ID:… for basket/order. | |
| pid | No | Parent category id. | |
| pos | No | Category position. | |
| url | No | Custom URL slug. | |
| cons | No | ||
| dscr | No | Full description; pass html_dscr=1 when HTML. | |
| hide | No | Hide flag or invoices_list group. | |
| mode | No | checkout_update mode. | |
| name | No | Goods or category name. | |
| note | No | ||
| pros | No | ||
| tags | No | ||
| type | No | Goods type: 0 material, 1 file, 2 e-code, 3 service. | |
| unit | No | ||
| warr | No | ||
| brand | No | Brand. | |
| brief | No | Short description. | |
| order | No | List asc/desc or order hash. | |
| price | No | Price (goods or variation_update). | |
| solds | No | ||
| stock | No | Stock count. | |
| views | No | ||
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| cat_id | No | Goods category id (add/update). | |
| fields | No | Extra form keys (checkout field_N, stock_*, var_*, cnt_REC_ID, …). Routing and mode keys (method, mode, del, page, …) are ignored. | |
| images | No | Files for img_add (remote upload). Each item is { filename, content_base64 }, { upload_id }, or { site_path }. Appended as file_add_N after the image_*/file_* slots. | |
| status | No | Order status code. | |
| undisc | No | ||
| values | No | Variation dictionary values, comma-separated (S,M,L). | |
| weight | No | ||
| confirm | No | Pass true only after the user approves this change. Required by: img_edit, variation_gen, checkout_submit, invoice_status, invoice_payment. | |
| message | No | Comment text. | |
| opt_sel | No | Option set for stock_add (e.g. 2-3:4). | |
| ordered | No | ||
| stock_q | No | ||
| user_id | No | User id filter or balance target. | |
| cats_add | No | Extra category ids [ID1, ID2, …]. | |
| entry_id | No | Goods id for comments_add. | |
| price_in | No | Purchase price. | |
| rate_num | No | ||
| rate_sum | No | ||
| ch_addcat | No | 1 when cats_add is passed. | |
| curr_code | No | ||
| curr_rate | No | ||
| file_path | No | Synonym for image_path (local MCP server path). | |
| html_dscr | No | 1 = dscr is HTML. | |
| meta_dscr | No | ||
| parent_id | No | Synonym for pid / category_list parent. | |
| price_old | No | Old price. | |
| add_groups | No | ||
| global_cat | No | ||
| image_path | No | Local MCP server path for image upload. Missing files are an error; remote agents must use image_base64, image_upload_id, or image_site_path. | |
| meta_title | No | ||
| payment_id | No | ||
| promo_code | No | ||
| delivery_id | No | ||
| file_base64 | No | Synonym for image_base64. | |
| image_paths | No | Comma-separated local MCP server paths (img_add). Missing files are an error. | |
| view_groups | No | ||
| file_add_cnt | No | ||
| image_base64 | No | Base64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path. | |
| file_filename | No | Synonym for image_filename. | |
| group_courier | No | ||
| variation_crc | No | Variation hash from variations_list. | |
| file_site_path | No | Synonym for image_site_path. | |
| file_upload_id | No | Synonym for image_upload_id. | |
| image_filename | No | File name for image_base64, with extension. | |
| image_site_path | No | File already on the site (img/x.jpg or its full site URL). Wins over image_path. | |
| image_upload_id | No | upload_id from upload_direct. Wins over image_site_path and image_path. | |
| image_site_paths | No | Comma-separated site files for img_add (img/x.jpg or full site URLs). | |
| image_upload_ids | No | Comma-separated upload_id values from upload_direct for img_add. | |
| custom_delivery_tax | No | ||
| subscribe_to_replies | No | ||
| exclude_from_discount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, and openWorld=true. The description adds important domain-specific behavior: no action takes or sends money, payment-method changes may set processing status, order status changes may credit or debit internal shop balances, and no action directly sets a balance. It could also mention confirmation requirements for destructive actions, but that detail is covered in the 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 is front-loaded with purpose and limited to two sentences with no filler. The second sentence is dense and lengthy, but it carries necessary financial caveats for a destructive shop-write tool.
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 rich action schema and annotations, the description supplies the high-level scope and critical financial/balance side effects that would otherwise be missed. It omits explicit routing to shop_read/shop_delete and confirmation guidance, but the schema covers action-specific details and the sibling names provide strong context.
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 description gives no parameter-level meaning beyond listing the shop areas affected. With 80 parameters and only 64% schema description coverage, many arguments rely entirely on schema text, and the description does not compensate for undocumented parameters or explain how action-specific parameters are selected.
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 clear write verbs ('Creates and updates') and enumerates the shop domains covered: categories, products, images, variations, stock, basket, checkout, orders, comments, and currency rates. It is clearly a broad write tool, but it does not explicitly distinguish itself from siblings like shop_read or shop_delete.
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 opening 'Creates and updates...' implies this tool is for write/edit operations, and the payment caveat clarifies that it does not process real money. However, it never says when to use this versus shop_read for reads or shop_delete for deletions, nor does it flag when to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_tooluCoz agent skillsBInspect
Looks up official uCoz agent skills. resolve matches a skill to a task description, catalog lists available skills, register_usage records skill usage for the selected site (requires select_site).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git branch or tag. Default: main. | |
| repo | No | GitHub repo with skills. Default: ucoz-skills/agent-skills. | |
| task | No | resolve: user task wording (the first 2000 characters are matched). | |
| limit | No | resolve: how many matching skills to return, the primary one included (default 3, up to the whole catalog). | |
| scope | No | install/status paths: global (~/.cursor/skills) or project (workspace/.cursor/skills). Default global. | |
| action | Yes | resolve — match skill by task. catalog — GitHub list. status — check_paths of a skill installation. install — source and target location of a skill. register_usage — site usage tracking (select_site); best effort: recorded=false with a message when tracking is temporarily unavailable. | |
| client | No | IDE client for status/install paths (default auto → cursor). | |
| compare | No | status: include catalog latest_version. | |
| version | No | register_usage: skill version (synonym skill_version). | |
| skill_id | No | Slug (^[a-z0-9-]+$). Required for install; optional for catalog/status/register_usage. | |
| skill_path | No | register_usage: path to SKILL.md (alternative to skill_id + version). | |
| skill_version | No | Synonym for version (register_usage). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, meaning the agent knows writes/network are involved, but the description never explains that 'install' writes skill files into a filesystem path, what status inspects, or that behavior depends on a remote GitHub repo. The only added context is the select_site prerequisite and the best-effort tracking note (which is already duplicated from the schema). For a multi-mode tool with two unmentioned mutating actions, this is thin.
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 tight sentence with the primary purpose front-loaded and zero filler. It loses a point only because compression came at the cost of omitting two of the five actions rather than being deliberately scoped.
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 12 parameters, 5 enum-gated actions, and no output schema, the description should explain each mode. It covers only resolve/catalog/register_usage, leaving status and install (the mutating one) entirely unexplained, so an agent cannot confidently select or invoke those modes from the definition alone.
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 every parameter is already documented in the input schema, including action, scope, client, and skill_id semantics. The description adds nothing beyond that (no mention of repo/ref defaults or limit behavior), so the baseline 3 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?
States a specific verb and resource ('Looks up official uCoz agent skills') and enumerates three actions, which distinguishes it clearly from the CRUD siblings. However, the schema exposes five actions (resolve, catalog, status, install, register_usage) while the description names only three, so the stated purpose under-describes the tool's actual surface.
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?
It gives partial routing cues ('resolve matches a skill to a task description, catalog lists available skills') and one hard prerequisite ('register_usage ... requires select_site'). But there is no guidance on when to choose status vs install, no mention of when this tool should be preferred over docs_tool, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscriptions_deleteDelete subscriptionsBDestructiveInspect
Deletes tariff plans and legacy tariffs, and cancels subscriptions. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Legacy tariff id. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: plan_delete, legacy_item_delete, subscription_cancel. | |
| plan_id | No | Tariff plan id. | |
| subscription_id | No | Subscription id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds a reinforcing 'Cannot be undone' warning but goes no further: it does not disclose the approval/confirm gate, the no-refund behavior of cancellation, or what happens to access on cancel — all of which live only in the 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?
Two short, front-loaded sentences with the destructive operation stated first and the irreversibility caveat second. No waste, though the second sentence largely restates destructiveHint and the first compresses three distinct operations into one clause.
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 5-parameter destructive tool with three distinct modes and a mandatory confirmation flag, the description is minimally adequate: the schema compensates, but the description never signals the multi-action dispatch or the user-approval prerequisite, which are the two things most likely to cause a bad call.
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%, including per-action requirements and the confirm gate, so the schema carries parameter meaning fully. The description adds nothing beyond it and never references action, confirm, or the id/plan_id distinction; 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 uses a specific verb with three enumerated resources ('deletes tariff plans and legacy tariffs, and cancels subscriptions') that map cleanly onto the action enum. It doesn't explicitly contrast itself with sibling tools like subscriptions_write or templates_delete, but an agent can tell it is the destructive member of the subscriptions family.
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?
There is no guidance on when to prefer this over alternatives such as subscriptions_write (e.g., downgrade versus cancel) or which of the three actions applies in a given situation. The only contextual statement is the irreversibility warning, which is a hazard note rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscriptions_readRead subscriptionsBRead-onlyIdempotentInspect
Reads tariff plans, subscriptions, subscribers, access checks and payments of the Subscriptions module on the active site.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | List page, the earlier name of page; page wins when both are set. | |
| id | No | Legacy tariff id. | |
| page | No | List page, from 1. | |
| query | No | Search query for subscribers/payments lists. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): id, status, plan, user id and email, dates (UTC, ISO 8601); payments also the amount. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| status | No | Status filter (comma-separated). | |
| date_to | No | Payment date upper bound (unix). | |
| plan_id | No | Tariff plan id. | |
| user_id | No | User id. | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. | |
| date_from | No | Payment date lower bound (unix). | |
| payment_id | No | Payment id. | |
| expires_before | No | Unix timestamp filter. | |
| subscription_id | No | Subscription id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description's only added context is site-scoped execution, which is genuinely useful. Rate limits, permission requirements and the 30 KB reply cap are left entirely to the 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?
One front-loaded sentence with the resource list immediately after the verb; nothing is wasted or padded. It is arguably too terse for a 12-action tool, but the dimension is about avoiding bloat and this is tight.
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 12-action paginated tool with no output schema, the description should at least signal the action-multiplexing pattern and that paged list replies can be truncated. The exceptionally rich schema and enum descriptions compensate for most of that gap, so this is adequate rather than deficient.
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% and the `action` enum carries per-operation descriptions listing required and optional parameters, so the schema is doing all the work. The description contributes nothing about the 16 parameters. Baseline 3 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?
States a specific verb ("Reads") plus the concrete resources covered: tariff plans, subscriptions, subscribers, access checks and payments, scoped to the Subscriptions module on the active site. That is enough to distinguish it from subscriptions_write/subscriptions_delete. It stops short of saying this is a single multiplexed entry point whose behavior is selected by the `action` enum, which is the tool's defining shape.
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 indication of when to pick this tool over siblings, no prerequisite about the active site needing to be selected first, and no note that write operations belong to subscriptions_write. The only usage-adjacent phrase is "on the active site," which implies scope but gives no instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscriptions_writeEdit subscriptionsADestructiveInspect
Creates and updates tariff plans and subscriptions: grants access and trials, renews, changes plan, pauses and resumes, records and confirms payments. No action charges or refunds money by itself: grant, trial, renew, plan change and payment confirmation give paid access without payment, and auto-renewal lets the payment system charge the saved payment method of the subscriber, possibly within the hour when the period ends soon (also turned back on by renew, resume and payment confirmation when a payment method is saved, even if it was turned off).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Legacy tariff id. | |
| type | No | Plan type: 0 free, 1 one-time, 2 recurring, 3 donate. | |
| price | No | ||
| title | No | Plan title (plan_add/update). | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| amount | No | Payment amount in minor currency units. | |
| fields | No | Extra request fields described in the subscriptions OpenAPI specification (docs_tool). | |
| period | No | Recurring period in days. | |
| confirm | No | Pass true only after the user approves this change. Required by: subscription_grant, payment_confirm. | |
| plan_id | No | Tariff plan id. | |
| user_id | No | User id. | |
| currency | No | ISO 4217 code, e.g. RUB. | |
| group_to | No | Group id while subscription is active. | |
| interval | No | Subscription interval in days. | |
| price_old | No | ||
| group_back | No | Group id after subscription ends. | |
| payment_id | No | Payment id. | |
| description | No | Plan description. | |
| is_discount | No | ||
| is_advantage | No | ||
| text_advantage | No | ||
| transaction_id | No | Idempotent payment transaction id. | |
| trial_interval | No | ||
| advantage_items | No | Advantage lines separated by newline. | |
| subscription_id | No | Subscription id. | |
| payment_method_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive and not read-only, and the description adds substantial extra context: no action charges or refunds money on its own, grant/trial/renew/plan change/payment confirm hand out paid access without payment, and auto-renewal can charge the saved card, possibly within the hour, and is silently re-enabled by renew/resume/payment confirm. These are exactly the side effects an agent must know before calling a destructive write 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?
Purpose is front-loaded, which is good, but the second sentence is a dense run-on with a nested parenthetical ('...possibly within the hour when the period ends soon (also turned back on by renew, resume and payment confirmation...)') that is hard to parse. Two long sentences for a 16-action tool is defensible in size but poorly structured.
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 26-parameter, 16-action mutation tool with no output schema, the description covers the critical risk surface (no money movement, unpaid access grants, auto-renewal surprises). Per-action parameter requirements are delegated to the schema, which is reasonable, though a pointer to subscriptions_read for lookup and to docs_tool for the fields object would round it out.
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 73% and the oneOf entries already document required/optional fields per action, so the parameter layer is largely self-contained. The description itself adds no syntax or format detail for parameters such as amount, confirm, or the loosely typed price/price_old fields, so the baseline 3 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 states a specific set of write verbs and resources: 'Creates and updates tariff plans and subscriptions', then enumerates the operation families (grants, trials, renew, change plan, pause/resume, record/confirm payments). This makes it immediately distinguishable from subscriptions_read and subscriptions_delete without needing the 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?
The description implies when each action applies but never states explicit when-to-use/when-not-to-use rules versus alternatives (e.g. read vs write, or docs_tool for extra fields). The per-action preconditions are present, but they live in the schema's oneOf entries rather than in the description, leaving routing guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_deleteDelete site designBDestructiveInspect
Deletes global blocks, menus, mail forms and fields, site pages and template backups, or restores a backup over the current templates. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Global block id (synonym for gblock_id). | |
| pda | No | Mobile (PDA) version flag of a global block. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: delete_backup, restore_backup, gblock_delete, menu_delete, mail_delete_form, mail_delete_field, page_delete. | |
| menu_id | No | Menu id from menu_list. | |
| page_id | No | Site page id. Page 1 cannot be deleted. | |
| backup_id | No | Template backup id from list_backups. | |
| gblock_id | No | Global block id. | |
| mail_form_id | No | Mail form id from mail_list_forms. | |
| mail_field_id | No | Mail form field id from mail_list_fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and 'Cannot be undone' largely restates that. The one genuine addition is that this tool also restores a backup over the current templates — a destructive overwrite that a 'delete' tool name would not suggest. No permission, ordering, or approval context is added beyond what annotations and the confirm parameter already cover.
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 tightly-packed sentence with the resource scope front-loaded and the irreversibility warning last. Every clause carries information; the only minor cost is that bundling seven action modes into one sentence makes it dense.
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 10-parameter, seven-action destructive tool the description plus a very rich oneOf schema and destructive annotations gives an agent enough to call it correctly, and no output schema is needed here. What is thin is the operational context: ordering/prerequisites against templates_read and the backup-listing tools, and the fact that 'restore' is not a deletion.
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% and every parameter plus each action's required set is documented inline via oneOf, so the schema does the heavy lifting. The description adds no parameter-level meaning (no required-field callout, no id-sourcing hints) beyond what the schema provides. Baseline 3 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?
States a specific verb and enumerates the exact resource types it acts on (global blocks, menus, mail forms/fields, pages, backups), which is far more informative than the title alone. It also discloses the non-obvious restore behavior. It does not distinguish itself from the many sibling *_delete tools (content_delete, tmaker_delete, etc.), so the boundary of 'site design templates' vs other deletable entities is left implicit.
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 when-to-use/when-not guidance and no naming of alternatives such as templates_write or the per-domain delete siblings. The enumeration of deletable entities only weakly implies the usage context, and nothing warns that restore_backup overwrites current templates rather than removing something.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_readRead site designARead-onlyIdempotentInspect
Reads design data of the active site: templates and their variables, template backups, menus, mail forms, site pages and the template guides. Does not change anything.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | List page, from 1. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): for site pages id, title, status, parent id, public URL, last change and a plain-text excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| content | No | Global block HTML (gblock_create) or full template body to check (validate_template; html_content is accepted too). | |
| menu_id | No | Menu id from menu_list. | |
| page_id | No | Site page id. Page 1 cannot be deleted. | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. | |
| module_id | No | Numeric module id of the template, from list_modules. | |
| page_page | No | page_list: the earlier name of page; page wins when both are set. | |
| code_paste | No | Replacement for code_search; an empty string deletes the fragment. | |
| code_search | No | Exact template fragment to find. | |
| template_id | No | Template id within the module, from list_modules. | |
| html_content | No | Full template HTML. For small edits use patch_template. | |
| mail_form_id | No | Mail form id from mail_list_forms. | |
| page_per_page | No | page_list: the earlier name of per_page; per_page wins when both are set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and idempotentHint, and "Does not change anything" merely restates that safety profile. No additional behavioral context (pagination/size limits, that validate_template performs no save, that 30 KB list truncation occurs) appears in the description — that detail lives only in the 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?
Two sentences, front-loaded with the resource scope and closed with the side-effect guarantee. Nothing is padded and the reader learns the domain in the first clause.
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 sixteen-action multiplexer the description correctly identifies the breadth of coverage, and the oneOf schema entries carry the per-action contracts. What is missing is only the connective guidance (which sibling read tool to prefer, site-selection prerequisite), so it is close to 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 description adds no parameter meaning of its own; all sixteen parameters, including the action enum and its per-action requirements, are documented at 100% coverage in the schema. Baseline 3 applies since the schema does all the work.
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?
A specific verb ("Reads") plus a concrete resource set: templates, backups, menus, mail forms, site pages, guides. The enumeration makes the tool's coverage unambiguous and clearly separates it from templates_write/templates_delete. It stops short of differentiating from adjacent read tools such as modules_read or tmaker_read, which also touch design data.
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?
Usage is only implied by the enumeration of resource families; there is no explicit statement of when to pick this over modules_read or tmaker_read, nor any prerequisite (e.g. site must be selected/active). The 'active site' phrase hints at a required context but doesn't state it as a condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_writeEdit site designADestructiveInspect
Creates and edits design data of the active site: templates (full replace or fragment patch), template backups, global blocks, menus, mail forms and their fields, site pages.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Global block id (synonym for gblock_id). | |
| pda | No | Mobile (PDA) version flag of a global block. | |
| items | No | Menu items tree; replaces the current items. Item fields: title (item text), url, target, class, children; other keys are refused. | |
| title | No | Menu title. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| layout | No | Menu layout: 0 horizontal, 1 vertical. | |
| content | No | Global block HTML (gblock_create) or full template body to check (validate_template; html_content is accepted too). | |
| menu_id | No | Menu id from menu_list. | |
| page_id | No | Site page id. Page 1 cannot be deleted. | |
| mail_rez | No | Message shown after the form is sent. | |
| gblock_id | No | Global block id. | |
| mail_name | No | Mail form name, or field label for field actions. | |
| mail_tmpl | No | HTML template of the notification email. | |
| module_id | No | Numeric module id of the template, from list_modules. | |
| page_name | No | Page title. | |
| page_tmpl | No | Code of the page own template. | |
| code_paste | No | Replacement for code_search; an empty string deletes the fragment. | |
| code_search | No | Exact template fragment to find. | |
| mail_emails | No | Recipient emails (string or array). | |
| mail_values | No | Options of a select or radio field. | |
| page_other1 | No | Extra field 1. | |
| page_other2 | No | Extra field 2. | |
| page_other3 | No | Extra field 3. | |
| page_other4 | No | Extra field 4. | |
| page_other5 | No | Extra field 5. | |
| page_ownurl | No | Custom URL slug. | |
| template_id | No | Template id within the module, from list_modules. | |
| html_content | No | Full template HTML. For small edits use patch_template. | |
| mail_form_id | No | Mail form id from mail_list_forms. | |
| page_message | No | Page HTML content. It is saved as HTML whatever editor the site uses. | |
| page_owntmpl | No | Use the page own template. | |
| page_pending | No | Pending (moderation) flag. | |
| mail_field_id | No | Mail form field id from mail_list_fields. | |
| mail_required | No | The field must be filled in. | |
| mail_direction | No | 0 moves the field up, any other value moves it down. | |
| page_parent_id | No | Parent page id. | |
| mail_field_type | No | Mail form field type code. | |
| page_access_all | No | Page is visible to all groups. | |
| page_meta_title | No | SEO title. | |
| page_meta_keywords | No | SEO keywords. | |
| page_meta_description | No | SEO description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds mutation scope (it writes live design data of the active site) but does not mention the automatic rotated backup, the LIMIT_REACHED refusal, or ALREADY_EXISTS conflicts — those important behavioral details live only in the schema's oneOf entries, not in the 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?
A single front-loaded sentence with no filler, and the resource enumeration is a compact way to convey the tool's breadth. It is slightly list-heavy but every clause maps to a real action family.
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 41-parameter, 15-action multiplexer with no output schema, the description stays minimal because the action enum's oneOf entries do the heavy lifting (required fields, backup behavior, error codes). What is missing from the description itself is a warning that operations act on the currently selected site and that most writes are destructive — but the annotations and schema largely compensate.
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% and the action enum's oneOf entries document required/optional parameters per action in detail, so the schema carries the burden. The description only contributes the '(full replace or fragment patch)' framing for the two template actions; it does not explain the action multiplexing or the id/gblock_id synonym.
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 gives a specific verb pair ('Creates and edits') plus the concrete resources it touches (templates, backups, global blocks, menus, mail forms, pages) and scopes it to the 'active site'. It does not name the sibling tools it competes with (templates_read, templates_delete), so an agent must infer the read/delete split from names alone.
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?
Usage is only implied: it is clearly the write-side counterpart to templates_read, and the parenthetical '(full replace or fragment patch)' hints at choosing between the two template actions. There is no explicit when-to-use/when-not, no prerequisite (select_site, list_modules) guidance, and no routing advice for the 15 action values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tmaker_deleteDelete Template Maker projectCDestructiveInspect
Deletes a saved Template Maker project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Synonym for design_id or project_id. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: project_delete. | |
| project_id | No | Saved project id from project_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=false, so the safety profile is known. The description adds nothing beyond that: it does not say the deletion is irreversible, what exactly is removed (project plus its pages/assets?), or how the required confirm flag gates execution.
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 with no filler, which is structurally clean, but its brevity reflects under-specification rather than efficiency — nothing is said that the name and title do not already convey.
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 an irreversible destructive operation with four parameters (including a numeric/enum indirection between id and project_id), the description omits irreversibility, confirmation semantics, and failure behavior. The rich schema mitigates this, but the description itself is too thin for the risk level.
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%, including the id/project_id synonym relationship and the confirm approval requirement, so the schema does the heavy lifting. The description contributes no additional parameter meaning, making the baseline 3 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?
States a specific verb and resource ("Deletes a saved Template Maker project"), but it is essentially a restatement of the title and adds no differentiation from the many sibling delete tools (templates_delete, apps_delete, content_delete, etc.). An agent cannot tell from the description alone how this differs from templates_delete.
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?
There is no guidance on when to use this tool versus tmaker_write or templates_delete, and no mention of prerequisites such as needing a project_id from tmaker_read/project_list or user approval before proceeding. The only 'when' information lives in the schema's confirm description, not the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tmaker_publishPublish site skeletonADestructiveInspect
Publishes skeleton HTML to the active site and replaces all of its templates. Changes the look of the whole public site.
| Name | Required | Description | Default |
|---|---|---|---|
| pda | No | Publish the mobile (PDA) skeleton instead of the desktop one. | |
| tmpl | Yes | Skeleton HTML. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: skeleton_publish. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the description isn't carrying the safety burden alone. It still adds real blast-radius context beyond the annotations: all templates are replaced and the entire public site's appearance changes. It does not mention the automatic backup/refusal behavior, but that is documented in the action enum 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?
Two short sentences, zero filler, and the destructive scope is front-loaded before the user-facing consequence. Nothing is repeated from the name or title alone.
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 destructive, open-world publish with no output schema, the description covers what is changed and how broadly. The remaining operational details (backup, refusal on backup failure, confirm approval) are fully specified in the schema, so the description is nearly 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 description coverage is 100% and every parameter (pda, tmpl, action, confirm) is documented in-schema, including the backup-and-refusal semantics and the confirm approval rule. The description adds nothing parameter-specific, so the baseline 3 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?
States a specific verb and resource: publishes skeleton HTML to the active site and replaces all its templates. The scope ('active site', 'all of its templates') distinguishes it from tmaker_write/templates_write, though it never names those siblings 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?
Usage is implied rather than stated: the phrase 'Changes the look of the whole public site' signals this is a high-impact, site-wide operation, which helps an agent decide whether to reach for it. There is no explicit when-to-use/when-not or reference to tmaker_write versus this publish step, and the confirm-gating workflow appears only in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tmaker_readRead Template MakerARead-onlyIdempotentInspect
Reads Template Maker data: skeleton guide and placeholder rules, standard designs, saved projects. Validates skeleton HTML without saving it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Synonym for design_id or project_id. | |
| tmpl | No | Skeleton HTML. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| design_id | No | Standard design id from designs_list (usually 101 or more). | |
| project_id | No | Saved project id from project_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered elsewhere. The only extra behavioral note is that skeleton validation does not persist anything ('without saving it'), but that same fact is already stated in the schema's skeleton_validate entry, so the description adds little beyond structured fields.
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 short, front-loaded sentences with no filler; the resource enumeration comes first and the validation caveat second. It is efficient, though it could have traded one clause for an explicit routing hint to the write/delete siblings.
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 100% schema coverage, an output-schema-free design, and annotations covering read-only/idempotency, the description is nearly complete for a multi-action read tool. The remaining gap is routing guidance to sibling mutation tools and pagination behavior, both of which are only partly addressed elsewhere.
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% and the action enum documents each operation along with its required id/tmpl/offset parameters. The description names the data categories but supplies no syntax, defaults, or id-source detail beyond what the schema already gives, so the baseline 3 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 names a specific verb (reads) plus the concrete resource groups it exposes: skeleton guide, placeholder rules, standard designs, saved projects, and skeleton validation. An agent can distinguish it from tmaker_write/tmaker_delete/tmaker_publish by the read/validate framing, though it never explicitly names those siblings.
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?
Usage is only implied by the word 'Reads' and by the per-action oneOf descriptions in the schema; the description itself offers no when-to-use, when-not-to-use, or explicit alternative (e.g. use tmaker_write to modify a project).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tmaker_writeSave Template Maker projectADestructiveInspect
Saves Template Maker projects. Builds a ZIP archive of skeleton HTML with its stylesheet and images, downloading external ones from the addresses in the HTML and CSS, and puts it in the public root of the site. Site templates are not changed.
| Name | Required | Description | Default |
|---|---|---|---|
| tmpl | Yes | Skeleton HTML. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructive=true, openWorld=true, and readOnly=false. The description adds useful behavioral context beyond annotations: it downloads external stylesheet and image resources from URLs embedded in HTML/CSS, writes a ZIP archive to the public root, and does not alter site templates. It stops short of explaining overwrite behavior or active-project semantics.
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 front-loaded, three sentences, and every sentence contributes: the primary purpose, the archive-building behavior, and the scope exclusion. There is no redundant or filler content.
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 two-parameter tool with full schema coverage and rich annotations, the description covers the main behavioral traits: saving, ZIP creation, external downloads, public-root placement, and unchanged site templates. It does not clarify the return value for skeleton_archive or overwrite behavior for project_save, leaving minor gaps.
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%, and the action enum includes detailed oneOf descriptions for each operation. The description adds no parameter-specific guidance beyond what the schema already provides, so it meets the baseline but does not enrich parameter 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 clearly states that the tool saves Template Maker projects and builds a ZIP archive of skeleton HTML with assets. It also clarifies that site templates are not changed, which distinguishes it from template-editing tools. However, it does not explicitly distinguish its three actions from siblings like tmaker_publish or tmaker_delete.
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 when to use the tool by describing save and archive behavior, and 'Site templates are not changed' provides a limited exclusion. However, it does not name alternatives such as tmaker_publish or explain when to choose project_save versus skeleton_archive beyond what the schema already says.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_deleteDelete usersBDestructiveInspect
Deletes a user or a user group; group members are moved to the target group.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Group id. | |
| gid | No | Group id. On group actions it is a synonym for id. | |
| nid | No | Group that receives the members of a deleted group. | |
| nick | No | User login (nick), 2-25 characters. Synonym: user. | |
| user | No | Synonym for nick. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| confirm | Yes | Pass true only after the user approves this change. Required by: delete, group_delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds meaningful behavior beyond annotations — that group members are moved to the target group rather than deleted — which is genuinely useful context. It stops short of noting that deletion is irreversible or that confirm must be true.
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 compact sentence with zero waste, front-loading the core action and then the notable side effect on group members.
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 destructive tool with full schema coverage and annotations carrying the safety profile, the description supplies the key non-obvious behavior (member relocation). It doesn't restate the two-action enum logic or confirm requirement, but those are well covered by the 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 description coverage is 100%, so parameters are fully documented in the schema, warranting the baseline of 3. The description's reference to 'the target group' loosely maps to nid but adds no syntax or format detail beyond what the schema 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?
States a specific verb ('Deletes') and resources ('a user or a user group'), making the dual scope clear. It does not explicitly differentiate from the sibling users_write, but the delete verb sufficiently separates it from users_read/users_write.
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 choose users_delete versus users_write (which might also handle removal/updating), and no mention of prerequisites such as the confirm flag or approval flow beyond what the schema says. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_readRead usersCRead-onlyIdempotentInspect
Reads site users and profiles, user groups, group permissions, ranks and profile fields.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Group id. | |
| gid | No | Group id. On group actions it is a synonym for id. | |
| nick | No | User login (nick), 2-25 characters. Synonym: user. | |
| page | No | List page, from 1. | |
| user | No | Synonym for nick. | |
| No | User email. | ||
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| detail | No | Record form of a paged list. brief (default): id, login, full name, email, group, status (active or banned) and registration date (UTC, ISO 8601). Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from. | |
| offset | No | Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next. | |
| user_id | No | Numeric user id. | |
| per_page | No | Records per page: 1-50, 20 by default, larger values count as 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds no behavioral context beyond the resource list — nothing about per-action required parameters, pagination/size-limit behavior (which sits in the schema), or what a caller gets back per action.
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 naming verb and resources, with no filler. It is efficient, though for an 11-parameter, 8-action tool the brevity edges toward under-specification.
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 multi-action read tool with no output schema, the description should at minimum flag the action-dispatch model and that required parameters vary per action. The rich enum descriptions compensate substantially, but the top-level description leaves the agent to discover the dispatch contract from the 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 description coverage is 100% and the action enum documents each operation and its parameters in detail, so the schema carries the full burden. The description contributes nothing to parameter meaning; baseline 3 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?
States a specific verb (Reads) and enumerates the resources covered: site users and profiles, user groups, group permissions, ranks and profile fields. It is clear enough to distinguish the read surface from users_write/users_delete by name, but it never says the tool is action-dispatched, so an agent cannot tell from the description alone that one call must pick among list/get/groups/ranks/fields.
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?
There is no when-to-use guidance, no alternatives named, and no statement that this is the read counterpart to users_write/users_delete. Any routing information lives in the action enum descriptions, not in the tool description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_writeEdit usersADestructiveInspect
Creates and updates users and user groups: profile data, login, password, group membership and group permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Group id. | |
| gid | No | Group id. On group actions it is a synonym for id. | |
| name | No | Full name of a user, 3-35 characters, or the name of a group. | |
| nick | No | User login (nick), 2-25 characters. Synonym: user. | |
| user | No | Synonym for nick. | |
| No | User email. | ||
| login | No | New login. | |
| action | Yes | Operation to run. Each oneOf entry describes one action and lists its parameters. | |
| fields | No | Extra profile fields of a user, or permissions of a group. Group permission codes come from groups_rights and group_permissions. | |
| confirm | No | Pass true only after the user approves this change. Required by: chpass. | |
| user_id | No | Numeric user id. | |
| password | No | User password: only Latin letters, digits, _ and -; 4-15 characters for add, 2-15 for chpass. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the risk profile is structured. The description adds the breadth of what is mutated (including group permissions) but says nothing about irreversibility, permission requirements, or the approval flow for password changes beyond what the schema states.
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 enumerates scope without filler. Every clause earns its place by naming a distinct thing that can be written.
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 12-parameter, nested, destructive multi-action mutation tool with no output schema, the description is thin: it doesn't explain that the tool dispatches to eight distinct operations, nor what a caller should expect on failure. The rich action enum description compensates heavily, making this barely adequate rather than clearly insufficient.
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 each action's required/optional parameters are documented in the enum's oneOf descriptions, so the schema does the work. The description's phrase 'group permissions' hints that permission codes travel via fields, but it adds little beyond that mapping.
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?
States a specific verb pair ('Creates and updates') and enumerates the resources covered: user profile data, login, password, group membership and group permissions. That scope, plus the name, cleanly separates it from users_read and users_delete without opening a 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?
The description implies when to reach for it (any create/modify operation on users or groups) but never states exclusions or points to an alternative for reads or deletions. Action-level usage rules live entirely in the schema's oneOf entries, not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
skills_tool2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"resolve: max alternatives (1–7, default 3)."New value: +"resolve: how many matching skills to return, the primary one included (default 3, up to the whole catalog)." - changed
Input schema / properties / task / descriptionPrevious value: -"resolve: user task wording."New value: +"resolve: user task wording (the first 2000 characters are matched)."
1 tool update
- Changed
settings_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "settings_update", - "description": "Changes only the passed keys of the settings of a module. The result lists changed keys (before and after) and unchanged keys: an unchanged key was unknown, already set, or clamped by the module; access keys are shown only as (set) or empty. confirm is required (not for a dry run) to turn on users reinstall_popup_templates or mass_mail, forum reset_visitor_record, site availability_closed, seo seo_DisableIndexing; to turn off users awards_enabled (deletes all awards), shop search_log_history (drops the search log), or options_other_categories of blog, news, board, publ, load, dir, stuff (removes entries from their additional categories); to change shop cart_invoice_next_number; and to pass users registration_allow_unet or registration_allow_local (can switch registration from uID to local users for good). These keys take a plain value, not an object or a list. A key passed both flat and nested is refused. Required: module, values. Optional: dry_run, confirm." - } -]New value: +[ + { + "const": "settings_update", + "description": "Changes only the passed keys of the settings of a module. The result lists changed keys (before and after) and unchanged keys: an unchanged key was unknown, already set, or clamped by the module; access keys are shown only as (set) or empty. warnings, when present, lists the passed values the module ignored. confirm is required (not for a dry run) to turn on users reinstall_popup_templates or mass_mail, forum reset_visitor_record, site availability_closed, seo seo_DisableIndexing; to turn off users awards_enabled (deletes all awards), shop search_log_history (drops the search log), or options_other_categories of blog, news, board, publ, load, dir, stuff (removes entries from their additional categories); to change shop cart_invoice_next_number; and to pass users registration_allow_unet or registration_allow_local (can switch registration from uID to local users for good). These keys take a plain value, not an object or a list. A key passed both flat and nested is refused. Required: module, values. Optional: dry_run, confirm." + } +]
18 tool updates
- Changed
apps_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
- Changed
apps_write4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "ensure_ready", - "activate", - "switch_domain", - "php_set_version", - "selector_change", - "node_create", - "node_start", - "node_stop", - "node_restart", - "node_install_modules", - "python_create", - "python_start", - "python_stop", - "python_restart", - "python_install_modules", - "files_write", - "files_patch", - "files_legacy_edit", - "files_mkdir", - "files_copy", - "files_copy_to", - "files_move", - "files_move_to", - "files_chmod", - "files_archive", - "files_extract", - "files_publish", - "files_download_archive", - "db_create", - "db_create_user", - "db_create_with_user", - "db_change_password", - "db_change_hosts", - "db_change_privs", - "db_import", - "db_export", - "phpmyadmin", - "ftp_create", - "ftp_modify", - "ftp_passwd", - "cron_create", - "backup_create", - "backup_publish", - "login_key_get", - "login_key_create", - "login_key_rotate", - "da_login_key_create", - "da_login_key_patch", - "visitor_key_get", - "visitor_key_create", - "visitor_key_rotate" -]New value: +[ + "ensure_ready", + "activate", + "switch_domain", + "php_set_version", + "selector_change", + "node_create", + "node_start", + "node_stop", + "node_restart", + "node_install_modules", + "python_create", + "python_start", + "python_stop", + "python_restart", + "python_install_modules", + "files_write", + "files_patch", + "files_legacy_edit", + "files_mkdir", + "files_copy", + "files_copy_to", + "files_move", + "files_move_to", + "files_chmod", + "files_archive", + "files_extract", + "files_publish", + "files_download_archive", + "db_create", + "db_create_user", + "db_create_with_user", + "db_change_password", + "db_change_hosts", + "db_change_privs", + "db_import", + "db_export", + "phpmyadmin", + "ftp_create", + "ftp_passwd", + "cron_create", + "backup_create", + "backup_publish", + "login_key_get", + "login_key_create", + "login_key_rotate", + "da_login_key_create", + "da_login_key_patch", + "visitor_key_get", + "visitor_key_create", + "visitor_key_rotate" +] - changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "ensure_ready", - "description": "Prepares the environment session: activates the account when needed (then confirm is required), creates the keys and returns username and selected_domain. Optional: confirm." - }, - { - "const": "activate", - "description": "Creates the server scripts account of the site. Required: confirm." - }, - { - "const": "switch_domain", - "description": "Switches the active environment domain. Required: domain, confirm." - }, - { - "const": "php_set_version", - "description": "Sets the PHP version (8.2, 8.3 or native). Required: version." - }, - { - "const": "selector_change", - "description": "Runs a language selector method that changes state: set, create, start, stop, restart or install-modules. Required: plugin, interpreter, selector_method. Optional: params." - }, - { - "const": "node_create", - "description": "Creates a Node.js application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, app_mode, startup_file, env_vars." - }, - { - "const": "node_start", - "description": "Starts a Node.js application. Required: app_root." - }, - { - "const": "node_stop", - "description": "Stops a Node.js application. Required: app_root." - }, - { - "const": "node_restart", - "description": "Restarts a Node.js application. Required: app_root." - }, - { - "const": "node_install_modules", - "description": "Installs the npm modules of a Node.js application. Required: app_root." - }, - { - "const": "python_create", - "description": "Creates a Python application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, startup_file, entry_point, env_vars." - }, - { - "const": "python_start", - "description": "Starts a Python application. Required: app_root." - }, - { - "const": "python_stop", - "description": "Stops a Python application. Required: app_root." - }, - { - "const": "python_restart", - "description": "Restarts a Python application. Required: app_root." - }, - { - "const": "python_install_modules", - "description": "Installs the pip modules of a Python application. Required: app_root." - }, - { - "const": "files_write", - "description": "Writes a text file (overwrites by default). Required: path, content. Optional: overwrite." - }, - { - "const": "files_patch", - "description": "Replaces old_string, which must occur exactly once, with new_string in a small text file. Required: path, old_string, new_string." - }, - { - "const": "files_legacy_edit", - "description": "Edits a file through the legacy file manager command. Usually fails with a login key; files_write is the regular way. Required: path, content, confirm." - }, - { - "const": "files_mkdir", - "description": "Creates a directory. Required: path." - }, - { - "const": "files_copy", - "description": "Copies source (or path) to destination. Required: destination. Optional: source, path, overwrite." - }, - { - "const": "files_copy_to", - "description": "Copies paths, sources, source or path into destination_dir. Optional: destination_dir, destination, paths, sources, source, path, merge." - }, - { - "const": "files_move", - "description": "Moves source (or path) to destination. Required: destination, confirm. Optional: source, path, overwrite." - }, - { - "const": "files_move_to", - "description": "Moves paths, sources, source or path into destination_dir. Required: confirm. Optional: destination_dir, destination, paths, sources, source, path, merge." - }, - { - "const": "files_chmod", - "description": "Changes permissions of paths. Required: perm. Optional: paths, sources, source, path." - }, - { - "const": "files_archive", - "description": "Creates an archive at destination from sources. Required: destination. Optional: paths, sources, source, path." - }, - { - "const": "files_extract", - "description": "Extracts an archive into destination_dir; may overwrite files. Required: confirm. Optional: source, path, destination_dir, destination, members, merge." - }, - { - "const": "files_publish", - "description": "Copies a file into a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: path, source." - }, - { - "const": "files_download_archive", - "description": "Packs paths into a ZIP in a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: paths, sources, source, path." - }, - { - "const": "db_create", - "description": "Creates a MySQL database; the name gets the {username}_ prefix. Optional: database, name, charset, collation." - }, - { - "const": "db_create_user", - "description": "Creates a MySQL user; the name gets the {username}_ prefix. Required: password. Optional: dbuser, name, hosts." - }, - { - "const": "db_create_with_user", - "description": "Creates a MySQL database and its user with full privileges; the password is returned once. Optional: database, name, dbuser, password, privileges, charset, collation, hosts." - }, - { - "const": "db_change_password", - "description": "Changes the password of a MySQL user. Required: dbuser or name, new_password or password, confirm." - }, - { - "const": "db_change_hosts", - "description": "Replaces the host patterns of a MySQL user. Required: dbuser or name, hosts, confirm." - }, - { - "const": "db_change_privs", - "description": "Replaces the privileges of a MySQL user on a database. Required: database, dbuser, confirm. Optional: privileges." - }, - { - "const": "db_import", - "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to import a database dump; the SQL does not pass through MCP." - }, - { - "const": "db_export", - "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to export a database dump; the SQL does not pass through MCP." - }, - { - "const": "phpmyadmin", - "description": "Opens a one-time phpMyAdmin sign-in session and returns its link." - }, - { - "const": "ftp_create", - "description": "Creates an environment FTP account. Required: password. Optional: user, name, domain." - }, - { - "const": "ftp_modify", - "description": "Changes an environment FTP account. Required: confirm. Optional: user, name, password, domain." - }, - { - "const": "ftp_passwd", - "description": "Changes the password of an environment FTP account. Required: password, confirm. Optional: user, name, domain." - }, - { - "const": "cron_create", - "description": "Creates a cron job (default schedule: minute 0 of every hour). Required: command. Optional: minute, hour, dayofmonth, month, dayofweek." - }, - { - "const": "backup_create", - "description": "Queues a full environment backup; the file appears later under backups/. Required: confirm. Optional: parts, domain." - }, - { - "const": "backup_publish", - "description": "Publishes a backup file backups/{file}. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Required: path." - }, - { - "const": "login_key_get", - "description": "Returns one login key with its secret value (default main; the value of main is stored for this site and not returned). Optional: key_id, id." - }, - { - "const": "login_key_create", - "description": "Creates a login key record (default main; the value of main is stored for this site and not returned). Optional: key_id, id." - }, - { - "const": "login_key_rotate", - "description": "Replaces the value of a login key; the old value stops working. Required: confirm. Optional: key_id, id." - }, - { - "const": "da_login_key_create", - "description": "Creates a panel login key; allow_login=true also requires confirm. Required: key_id or id, password. Optional: allow_login, allow_commands, deny_commands, allow_networks, current_password, confirm." - }, - { - "const": "da_login_key_patch", - "description": "Changes a panel login key. Required: key_id or id, confirm. Optional: password, allow_login, allow_commands, deny_commands, allow_networks, current_password." - }, - { - "const": "visitor_key_get", - "description": "Returns the visitor encryption key with its secret value." - }, - { - "const": "visitor_key_create", - "description": "Creates the visitor encryption key." - }, - { - "const": "visitor_key_rotate", - "description": "Replaces the visitor encryption key; existing scripts stop decrypting old visitor data. Required: confirm." - } -]New value: +[ + { + "const": "ensure_ready", + "description": "Prepares the environment session: activates the account when needed (then confirm is required), creates the keys and returns username and selected_domain. Optional: confirm." + }, + { + "const": "activate", + "description": "Creates the server scripts account of the site. Required: confirm." + }, + { + "const": "switch_domain", + "description": "Switches the active environment domain. Required: domain, confirm." + }, + { + "const": "php_set_version", + "description": "Sets the PHP version (8.2, 8.3 or native). Required: version." + }, + { + "const": "selector_change", + "description": "Runs a language selector method that changes state: set, create, start, stop, restart or install-modules. Required: plugin, interpreter, selector_method. Optional: params." + }, + { + "const": "node_create", + "description": "Creates a Node.js application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, app_mode, startup_file, env_vars." + }, + { + "const": "node_start", + "description": "Starts a Node.js application. Required: app_root." + }, + { + "const": "node_stop", + "description": "Stops a Node.js application. Required: app_root." + }, + { + "const": "node_restart", + "description": "Restarts a Node.js application. Required: app_root." + }, + { + "const": "node_install_modules", + "description": "Installs the npm modules of a Node.js application. Required: app_root." + }, + { + "const": "python_create", + "description": "Creates a Python application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, startup_file, entry_point, env_vars." + }, + { + "const": "python_start", + "description": "Starts a Python application. Required: app_root." + }, + { + "const": "python_stop", + "description": "Stops a Python application. Required: app_root." + }, + { + "const": "python_restart", + "description": "Restarts a Python application. Required: app_root." + }, + { + "const": "python_install_modules", + "description": "Installs the pip modules of a Python application. Required: app_root." + }, + { + "const": "files_write", + "description": "Writes a text file (overwrites by default). Required: path, content. Optional: overwrite." + }, + { + "const": "files_patch", + "description": "Replaces old_string, which must occur exactly once, with new_string in a small text file. Required: path, old_string, new_string." + }, + { + "const": "files_legacy_edit", + "description": "Edits a file through the legacy file manager command. Usually fails with a login key; files_write is the regular way. Required: path, content, confirm." + }, + { + "const": "files_mkdir", + "description": "Creates a directory. Required: path." + }, + { + "const": "files_copy", + "description": "Copies source (or path) to destination. Required: destination. Optional: source, path, overwrite." + }, + { + "const": "files_copy_to", + "description": "Copies paths, sources, source or path into destination_dir. Optional: destination_dir, destination, paths, sources, source, path, merge." + }, + { + "const": "files_move", + "description": "Moves source (or path) to destination. Required: destination, confirm. Optional: source, path, overwrite." + }, + { + "const": "files_move_to", + "description": "Moves paths, sources, source or path into destination_dir. Required: confirm. Optional: destination_dir, destination, paths, sources, source, path, merge." + }, + { + "const": "files_chmod", + "description": "Changes permissions of paths. Required: perm. Optional: paths, sources, source, path." + }, + { + "const": "files_archive", + "description": "Creates an archive at destination from sources. Required: destination. Optional: paths, sources, source, path." + }, + { + "const": "files_extract", + "description": "Extracts an archive into destination_dir; may overwrite files. Required: confirm. Optional: source, path, destination_dir, destination, members, merge." + }, + { + "const": "files_publish", + "description": "Copies a file into a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: path, source." + }, + { + "const": "files_download_archive", + "description": "Packs paths into a ZIP in a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: paths, sources, source, path." + }, + { + "const": "db_create", + "description": "Creates a MySQL database; the name gets the {username}_ prefix. Optional: database, name, charset, collation." + }, + { + "const": "db_create_user", + "description": "Creates a MySQL user; the name gets the {username}_ prefix. The password needs at least 8 characters. The reply does not repeat the password. Required: password. Optional: dbuser, name, hosts." + }, + { + "const": "db_create_with_user", + "description": "Creates a MySQL database and its user with full privileges. Without password the environment generates one and the reply returns it once (password_once); a password passed in the call needs at least 8 characters and is not repeated in the reply. Optional: database, name, dbuser, password, privileges, charset, collation, hosts." + }, + { + "const": "db_change_password", + "description": "Changes the password of a MySQL user after the user approves it; the old password stops working. The reply does not repeat the password. Required: dbuser or name, new_password or password, confirm." + }, + { + "const": "db_change_hosts", + "description": "Replaces the host patterns of a MySQL user. Required: dbuser or name, hosts, confirm." + }, + { + "const": "db_change_privs", + "description": "Replaces the privileges of a MySQL user on a database. Required: database, dbuser, confirm. Optional: privileges." + }, + { + "const": "db_import", + "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to import a database dump; the SQL does not pass through MCP." + }, + { + "const": "db_export", + "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to export a database dump; the SQL does not pass through MCP." + }, + { + "const": "phpmyadmin", + "description": "Opens a one-time phpMyAdmin sign-in session and returns its link." + }, + { + "const": "ftp_create", + "description": "Creates an environment FTP account (not the FTP of the uCoz site) after the user approves it. Its folder is the root folder of the domain, and anyone who has its password can sign in over FTP. The password needs at least 8 characters. The reply has the login and the folder. The reply does not repeat the password. Required: password, confirm. Optional: user, name, domain." + }, + { + "const": "ftp_passwd", + "description": "Replaces the password of an environment FTP account from ftp_list after the user approves it; the old password stops working and the folder stays. The password needs at least 8 characters. The main account of the environment is not changed here. The reply does not repeat the password. Required: password, confirm. Optional: user, name, domain." + }, + { + "const": "cron_create", + "description": "Creates a cron job (default schedule: minute 0 of every hour). Required: command. Optional: minute, hour, dayofmonth, month, dayofweek." + }, + { + "const": "backup_create", + "description": "Queues a full environment backup; the file appears later under backups/. Required: confirm. Optional: parts, domain." + }, + { + "const": "backup_publish", + "description": "Publishes a backup file backups/{file}. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Required: path." + }, + { + "const": "login_key_get", + "description": "Returns one login key record (default main): id, creation date and whether uCoz stores its value (value_known). The key value is not returned: the user can see and copy it in the site control panel, Server scripts section, API keys tab. The value of main is kept by MCP for this site. When value_known is false, uCoz does not store the value and the control panel cannot show it; login_key_rotate sets a new value it shows. Optional: key_id, id." + }, + { + "const": "login_key_create", + "description": "Creates a login key (default main). The key value is not returned: the user can see and copy it in the site control panel, Server scripts section, API keys tab. The value of main is kept by MCP for this site. Optional: key_id, id." + }, + { + "const": "login_key_rotate", + "description": "Replaces the value of a login key; the old value stops working. The key value is not returned: the user can see and copy it in the site control panel, Server scripts section, API keys tab. The value of main is kept by MCP for this site. Required: confirm. Optional: key_id, id." + }, + { + "const": "da_login_key_create", + "description": "Creates a panel login key; allow_login=true also requires confirm. Required: key_id or id, password. Optional: allow_login, allow_commands, deny_commands, allow_networks, current_password, confirm." + }, + { + "const": "da_login_key_patch", + "description": "Changes a panel login key. Required: key_id or id, confirm. Optional: password, allow_login, allow_commands, deny_commands, allow_networks, current_password." + }, + { + "const": "visitor_key_get", + "description": "Tells whether the visitor data encryption key is set (present). The key value is not returned: uCoz delivers the key to the environment by itself and scripts read it there, so it never has to be copied. The site control panel does not show it either." + }, + { + "const": "visitor_key_create", + "description": "Creates the visitor data encryption key. The key value is not returned: uCoz delivers the key to the environment by itself and scripts read it there, so it never has to be copied. The site control panel does not show it either." + }, + { + "const": "visitor_key_rotate", + "description": "Replaces the visitor data encryption key; existing scripts stop decrypting old visitor data. The key value is not returned: uCoz delivers the key to the environment by itself and scripts read it there, so it never has to be copied. The site control panel does not show it either. Required: confirm." + } +] - changed
Input schema / properties / confirm / descriptionPrevious value: -"Pass true only after the user approves this change. Required by: activate, switch_domain, files_legacy_edit, files_move, files_move_to, files_extract, db_change_password, db_change_hosts, db_change_privs, ftp_modify, ftp_passwd, backup_create, login_key_rotate, da_login_key_patch, visitor_key_rotate. Required in some cases by: ensure_ready, da_login_key_create (see the action)."New value: +"Pass true only after the user approves this change. Required by: activate, switch_domain, files_legacy_edit, files_move, files_move_to, files_extract, db_change_password, db_change_hosts, db_change_privs, ftp_create, ftp_passwd, backup_create, login_key_rotate, da_login_key_patch, visitor_key_rotate. Required in some cases by: ensure_ready, da_login_key_create (see the action)." - changed
Input schema / properties / password / descriptionPrevious value: -"Password for a new DB user, FTP account, or panel login key. Omit to let the environment generate a DB password."New value: +"Password for a new DB user, FTP account, or panel login key; at least 8 characters for FTP and DB users. Omit to let the environment generate a DB password."
- Changed
content_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "module", + "confirm" +]
- Changed
content_write1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "module" +]
- Changed
files_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
- Changed
forum_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
- Added
ftp_delete - Added
ftp_read - Removed
ftp_tool - Added
ftp_write - Changed
modules_uninstall1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "module_code", + "confirm" +]
- Changed
settings_write1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "module", + "values" +]
- Changed
subscriptions_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
- Changed
templates_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
- Changed
tmaker_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
- Changed
tmaker_publish1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "tmpl", + "confirm" +]
- Changed
tmaker_write1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "tmpl" +]
- Changed
users_delete1 field changed- changed
Input schema / requiredPrevious value: -[ - "action" -]New value: +[ + "action", + "confirm" +]
22 tool updates
- Changed
apps_delete3 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "node_destroy", - "description": "Destroys a Node.js application. Required: app_root, confirm." - }, - { - "const": "python_destroy", - "description": "Destroys a Python application. Required: app_root, confirm." - }, - { - "const": "selector_destroy", - "description": "Runs the destroy method of a language selector. Required: plugin, interpreter, confirm. Optional: params." - }, - { - "const": "files_delete", - "description": "Deletes paths, sources, source or path. Required: confirm. Optional: paths, sources, source, path, trash." - }, - { - "const": "db_delete", - "description": "Deletes a MySQL database (name in database or name). Required: confirm. Optional: database, name." - }, - { - "const": "db_delete_user", - "description": "Deletes a MySQL user (name in dbuser or name). Required: confirm. Optional: dbuser, name." - }, - { - "const": "ftp_delete", - "description": "Deletes an environment FTP account (short username from ftp_list in select0, user or name). Required: confirm. Optional: select0, user, name, domain." - }, - { - "const": "cron_delete", - "description": "Deletes cron jobs by cron_id (or cron_ids) from cron_list. Required: confirm. Optional: cron_id, cron_ids, select0." - }, - { - "const": "login_key_delete", - "description": "Deletes a login key record (default main). Required: confirm. Optional: key_id, id." - }, - { - "const": "da_login_key_delete", - "description": "Deletes a panel login key. Required: key_id, confirm. Optional: id." - }, - { - "const": "visitor_key_delete", - "description": "Deletes the visitor encryption key. Required: confirm." - } -]New value: +[ + { + "const": "node_destroy", + "description": "Destroys a Node.js application. Required: app_root, confirm." + }, + { + "const": "python_destroy", + "description": "Destroys a Python application. Required: app_root, confirm." + }, + { + "const": "selector_destroy", + "description": "Runs the destroy method of a language selector. Required: plugin, interpreter, confirm. Optional: params." + }, + { + "const": "files_delete", + "description": "Deletes paths, sources, source or path. Required: confirm. Optional: paths, sources, source, path, trash." + }, + { + "const": "db_delete", + "description": "Deletes a MySQL database (name in database or name). Required: database or name, confirm." + }, + { + "const": "db_delete_user", + "description": "Deletes a MySQL user (name in dbuser or name). Required: dbuser or name, confirm." + }, + { + "const": "ftp_delete", + "description": "Deletes an environment FTP account (short username from ftp_list in select0, user or name). Required: confirm. Optional: select0, user, name, domain." + }, + { + "const": "cron_delete", + "description": "Deletes cron jobs by cron_id (or cron_ids) from cron_list. Required: confirm. Optional: cron_id, cron_ids, select0." + }, + { + "const": "login_key_delete", + "description": "Deletes a login key record (default main). Required: confirm. Optional: key_id, id." + }, + { + "const": "da_login_key_delete", + "description": "Deletes a panel login key. Required: key_id or id, confirm." + }, + { + "const": "visitor_key_delete", + "description": "Deletes the visitor encryption key. Required: confirm." + } +] - changed
Input schema / properties / cron_id / descriptionPrevious value: -"Cron id from cron_list, for example 000. Sent as select0."New value: +"Id of a cron job: jobs[].id of cron_list, such as 000." - changed
Input schema / properties / cron_ids / descriptionPrevious value: -"Several cron ids to delete (select0, select1, ...)."New value: +"Ids of several cron jobs to delete (jobs[].id of cron_list)."
- Changed
apps_read1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "get_guide", - "description": "Returns a step-by-step guide to the server environment." - }, - { - "const": "info", - "description": "Returns information about the environment server." - }, - { - "const": "status", - "description": "Returns whether server scripts are available on the plan and activated, and the account username and technical domain." - }, - { - "const": "session", - "description": "Returns the current environment session, including selected_domain." - }, - { - "const": "session_state", - "description": "Returns the environment session state." - }, - { - "const": "usage", - "description": "Returns disk and resource usage of the environment." - }, - { - "const": "user_config", - "description": "Returns the environment user configuration." - }, - { - "const": "plugins", - "description": "Lists environment plugins. Optional: offset." - }, - { - "const": "php_get", - "description": "Returns the PHP version and settings." - }, - { - "const": "selector_get", - "description": "Reads a language selector (method get) of plugin phpselector, nodejs_selector or python_selector. Required: plugin, interpreter. Optional: params." - }, - { - "const": "node_list", - "description": "Lists Node.js applications. Optional: offset." - }, - { - "const": "python_list", - "description": "Lists Python applications. Optional: offset." - }, - { - "const": "files_list", - "description": "Lists a directory (default: home) a page at a time. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next. Optional: path, page, per_page, offset, detail, limit." - }, - { - "const": "files_tree", - "description": "Returns the directory tree under path. A tree over 30 KB loses its deepest levels (truncated, branches marked incomplete); a folder with more subfolders than fit keeps the first of them, and next names the files_list call that lists it in full. Optional: path, limit, offset." - }, - { - "const": "files_read", - "description": "Reads a small text file. A binary or larger file is refused; files_publish in apps_write returns a download link for it. Required: path." - }, - { - "const": "files_search", - "description": "Searches file names under path, a page at a time; the search finds up to 1000 files. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next, and incomplete is true when more files may match than the search found. Required: query. Optional: path, page, per_page, offset, detail, limit." - }, - { - "const": "files_disk", - "description": "Returns disk usage of the home directory." - }, - { - "const": "files_archive_list", - "description": "Lists the members of an archive a page at a time. The reply has page, per_page, total, has_more, truncated and next. Required: path. Optional: page, per_page, offset, detail." - }, - { - "const": "db_list", - "description": "Lists MySQL databases. Optional: offset." - }, - { - "const": "db_get", - "description": "Returns one MySQL database (name in database or name). Optional: database, name." - }, - { - "const": "db_info", - "description": "Returns MySQL server information." - }, - { - "const": "db_user", - "description": "Returns one MySQL user (name in dbuser or name). Optional: dbuser, name." - }, - { - "const": "db_users", - "description": "Lists the users of a MySQL database (name in database or name). Optional: database, name, offset." - }, - { - "const": "db_users_all", - "description": "Lists all MySQL users. Optional: offset." - }, - { - "const": "db_user_databases", - "description": "Lists the databases of a MySQL user (name in dbuser or name). Optional: dbuser, name, offset." - }, - { - "const": "ftp_list", - "description": "Lists environment FTP accounts of a domain. Optional: domain, offset." - }, - { - "const": "cron_list", - "description": "Lists cron jobs (each with its cron_id) and cron settings. Optional: offset." - }, - { - "const": "backup_list", - "description": "Lists environment backups. Optional: domain, offset." - }, - { - "const": "login_key_list", - "description": "Lists environment login key records without their values. Optional: offset." - }, - { - "const": "da_login_key_list", - "description": "Lists panel login keys of the environment without secret values. Optional: offset." - }, - { - "const": "da_login_key_get", - "description": "Returns the settings of one panel login key without secret values. Required: key_id. Optional: id." - }, - { - "const": "da_login_key_history", - "description": "Returns the usage history of a panel login key a page at a time. The reply has page, per_page, total, has_more, truncated and next. Required: key_id. Optional: id, page, per_page, offset, detail." - }, - { - "const": "da_login_key_commands", - "description": "Lists the commands a panel login key can be allowed or denied. Optional: offset." - } -]New value: +[ + { + "const": "get_guide", + "description": "Returns a step-by-step guide to the server environment." + }, + { + "const": "info", + "description": "Returns information about the environment server." + }, + { + "const": "status", + "description": "Returns whether server scripts are available on the plan and activated, and the account username and technical domain." + }, + { + "const": "session", + "description": "Returns the current environment session, including selected_domain." + }, + { + "const": "session_state", + "description": "Returns the environment session state." + }, + { + "const": "usage", + "description": "Returns disk and resource usage of the environment." + }, + { + "const": "user_config", + "description": "Returns the environment user configuration." + }, + { + "const": "plugins", + "description": "Lists environment plugins. Optional: offset." + }, + { + "const": "php_get", + "description": "Returns the PHP version and settings." + }, + { + "const": "selector_get", + "description": "Reads a language selector (method get) of plugin phpselector, nodejs_selector or python_selector. Required: plugin, interpreter. Optional: params." + }, + { + "const": "node_list", + "description": "Lists Node.js applications. Optional: offset." + }, + { + "const": "python_list", + "description": "Lists Python applications. Optional: offset." + }, + { + "const": "files_list", + "description": "Lists a directory (default: home) a page at a time. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next. Optional: path, page, per_page, offset, detail, limit." + }, + { + "const": "files_tree", + "description": "Returns the directory tree under path. A tree over 30 KB loses its deepest levels (truncated, branches marked incomplete); a folder with more subfolders than fit keeps the first of them, and next names the files_list call that lists it in full. Optional: path, limit, offset." + }, + { + "const": "files_read", + "description": "Reads a small text file. A binary or larger file is refused; files_publish in apps_write returns a download link for it. Required: path." + }, + { + "const": "files_search", + "description": "Searches file names under path, a page at a time; the search finds up to 1000 files. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next, and incomplete is true when more files may match than the search found. Required: query. Optional: path, page, per_page, offset, detail, limit." + }, + { + "const": "files_disk", + "description": "Returns disk usage of the home directory." + }, + { + "const": "files_archive_list", + "description": "Lists the members of an archive a page at a time. The reply has page, per_page, total, has_more, truncated and next. Required: path. Optional: page, per_page, offset, detail." + }, + { + "const": "db_list", + "description": "Lists MySQL databases. Optional: offset." + }, + { + "const": "db_get", + "description": "Returns one MySQL database (name in database or name). Required: database or name." + }, + { + "const": "db_info", + "description": "Returns MySQL server information." + }, + { + "const": "db_user", + "description": "Returns one MySQL user (name in dbuser or name). Required: dbuser or name." + }, + { + "const": "db_users", + "description": "Lists the users of a MySQL database (name in database or name). Required: database or name. Optional: offset." + }, + { + "const": "db_users_all", + "description": "Lists all MySQL users. Optional: offset." + }, + { + "const": "db_user_databases", + "description": "Lists the databases of a MySQL user (name in dbuser or name). Required: dbuser or name. Optional: offset." + }, + { + "const": "ftp_list", + "description": "Lists environment FTP accounts of a domain. Optional: domain, offset." + }, + { + "const": "cron_list", + "description": "Lists cron jobs (each with its cron_id) and cron settings. Optional: offset." + }, + { + "const": "backup_list", + "description": "Lists environment backups. Optional: domain, offset." + }, + { + "const": "login_key_list", + "description": "Lists environment login key records without their values. Optional: offset." + }, + { + "const": "da_login_key_list", + "description": "Lists panel login keys of the environment without secret values. Optional: offset." + }, + { + "const": "da_login_key_get", + "description": "Returns the settings of one panel login key without secret values. Required: key_id or id." + }, + { + "const": "da_login_key_history", + "description": "Returns the usage history of a panel login key a page at a time. The reply has page, per_page, total, has_more, truncated and next. Required: key_id or id. Optional: page, per_page, offset, detail." + }, + { + "const": "da_login_key_commands", + "description": "Lists the commands a panel login key can be allowed or denied. Optional: offset." + } +]
- Changed
apps_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "ensure_ready", - "description": "Prepares the environment session: activates the account when needed (then confirm is required), creates the keys and returns username and selected_domain. Optional: confirm." - }, - { - "const": "activate", - "description": "Creates the server scripts account of the site. Required: confirm." - }, - { - "const": "switch_domain", - "description": "Switches the active environment domain. Required: domain, confirm." - }, - { - "const": "php_set_version", - "description": "Sets the PHP version (8.2, 8.3 or native). Required: version." - }, - { - "const": "selector_change", - "description": "Runs a language selector method that changes state: set, create, start, stop, restart or install-modules. Required: plugin, interpreter, selector_method. Optional: params." - }, - { - "const": "node_create", - "description": "Creates a Node.js application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, app_mode, startup_file, env_vars." - }, - { - "const": "node_start", - "description": "Starts a Node.js application. Required: app_root." - }, - { - "const": "node_stop", - "description": "Stops a Node.js application. Required: app_root." - }, - { - "const": "node_restart", - "description": "Restarts a Node.js application. Required: app_root." - }, - { - "const": "node_install_modules", - "description": "Installs the npm modules of a Node.js application. Required: app_root." - }, - { - "const": "python_create", - "description": "Creates a Python application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, startup_file, entry_point, env_vars." - }, - { - "const": "python_start", - "description": "Starts a Python application. Required: app_root." - }, - { - "const": "python_stop", - "description": "Stops a Python application. Required: app_root." - }, - { - "const": "python_restart", - "description": "Restarts a Python application. Required: app_root." - }, - { - "const": "python_install_modules", - "description": "Installs the pip modules of a Python application. Required: app_root." - }, - { - "const": "files_write", - "description": "Writes a text file (overwrites by default). Required: path, content. Optional: overwrite." - }, - { - "const": "files_patch", - "description": "Replaces old_string, which must occur exactly once, with new_string in a small text file. Required: path, old_string, new_string." - }, - { - "const": "files_legacy_edit", - "description": "Edits a file through the legacy file manager command. Usually fails with a login key; files_write is the regular way. Required: path, content, confirm." - }, - { - "const": "files_mkdir", - "description": "Creates a directory. Required: path." - }, - { - "const": "files_copy", - "description": "Copies source (or path) to destination. Required: destination. Optional: source, path, overwrite." - }, - { - "const": "files_copy_to", - "description": "Copies paths, sources, source or path into destination_dir. Optional: destination_dir, destination, paths, sources, source, path, merge." - }, - { - "const": "files_move", - "description": "Moves source (or path) to destination. Required: destination, confirm. Optional: source, path, overwrite." - }, - { - "const": "files_move_to", - "description": "Moves paths, sources, source or path into destination_dir. Required: confirm. Optional: destination_dir, destination, paths, sources, source, path, merge." - }, - { - "const": "files_chmod", - "description": "Changes permissions of paths. Required: perm. Optional: paths, sources, source, path." - }, - { - "const": "files_archive", - "description": "Creates an archive at destination from sources. Required: destination. Optional: paths, sources, source, path." - }, - { - "const": "files_extract", - "description": "Extracts an archive into destination_dir; may overwrite files. Required: confirm. Optional: source, path, destination_dir, destination, members, merge." - }, - { - "const": "files_publish", - "description": "Copies a file into a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: path, source." - }, - { - "const": "files_download_archive", - "description": "Packs paths into a ZIP in a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: paths, sources, source, path." - }, - { - "const": "db_create", - "description": "Creates a MySQL database; the name gets the {username}_ prefix. Optional: database, name, charset, collation." - }, - { - "const": "db_create_user", - "description": "Creates a MySQL user; the name gets the {username}_ prefix. Required: password. Optional: dbuser, name, hosts." - }, - { - "const": "db_create_with_user", - "description": "Creates a MySQL database and its user with full privileges; the password is returned once. Optional: database, name, dbuser, password, privileges, charset, collation, hosts." - }, - { - "const": "db_change_password", - "description": "Changes the password of a MySQL user. Required: new_password, confirm. Optional: dbuser, name, password." - }, - { - "const": "db_change_hosts", - "description": "Replaces the host patterns of a MySQL user. Required: hosts, confirm. Optional: dbuser, name." - }, - { - "const": "db_change_privs", - "description": "Replaces the privileges of a MySQL user on a database. Required: database, dbuser, confirm. Optional: privileges." - }, - { - "const": "db_import", - "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to import a database dump; the SQL does not pass through MCP." - }, - { - "const": "db_export", - "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to export a database dump; the SQL does not pass through MCP." - }, - { - "const": "phpmyadmin", - "description": "Opens a one-time phpMyAdmin sign-in session and returns its link." - }, - { - "const": "ftp_create", - "description": "Creates an environment FTP account. Required: password. Optional: user, name, domain." - }, - { - "const": "ftp_modify", - "description": "Changes an environment FTP account. Required: confirm. Optional: user, name, password, domain." - }, - { - "const": "ftp_passwd", - "description": "Changes the password of an environment FTP account. Required: password, confirm. Optional: user, name, domain." - }, - { - "const": "cron_create", - "description": "Creates a cron job (default schedule: minute 0 of every hour). Required: command. Optional: minute, hour, dayofmonth, month, dayofweek." - }, - { - "const": "backup_create", - "description": "Queues a full environment backup; the file appears later under backups/. Required: confirm. Optional: parts, domain." - }, - { - "const": "backup_publish", - "description": "Publishes a backup file backups/{file}. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Required: path." - }, - { - "const": "login_key_get", - "description": "Returns one login key with its secret value (default main; the value of main is stored for this site and not returned). Optional: key_id, id." - }, - { - "const": "login_key_create", - "description": "Creates a login key record (default main; the value of main is stored for this site and not returned). Optional: key_id, id." - }, - { - "const": "login_key_rotate", - "description": "Replaces the value of a login key; the old value stops working. Required: confirm. Optional: key_id, id." - }, - { - "const": "da_login_key_create", - "description": "Creates a panel login key; allow_login=true also requires confirm. Required: key_id, password. Optional: id, allow_login, allow_commands, deny_commands, allow_networks, current_password, confirm." - }, - { - "const": "da_login_key_patch", - "description": "Changes a panel login key. Required: key_id, confirm. Optional: id, password, allow_login, allow_commands, deny_commands, allow_networks, current_password." - }, - { - "const": "visitor_key_get", - "description": "Returns the visitor encryption key with its secret value." - }, - { - "const": "visitor_key_create", - "description": "Creates the visitor encryption key." - }, - { - "const": "visitor_key_rotate", - "description": "Replaces the visitor encryption key; existing scripts stop decrypting old visitor data. Required: confirm." - } -]New value: +[ + { + "const": "ensure_ready", + "description": "Prepares the environment session: activates the account when needed (then confirm is required), creates the keys and returns username and selected_domain. Optional: confirm." + }, + { + "const": "activate", + "description": "Creates the server scripts account of the site. Required: confirm." + }, + { + "const": "switch_domain", + "description": "Switches the active environment domain. Required: domain, confirm." + }, + { + "const": "php_set_version", + "description": "Sets the PHP version (8.2, 8.3 or native). Required: version." + }, + { + "const": "selector_change", + "description": "Runs a language selector method that changes state: set, create, start, stop, restart or install-modules. Required: plugin, interpreter, selector_method. Optional: params." + }, + { + "const": "node_create", + "description": "Creates a Node.js application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, app_mode, startup_file, env_vars." + }, + { + "const": "node_start", + "description": "Starts a Node.js application. Required: app_root." + }, + { + "const": "node_stop", + "description": "Stops a Node.js application. Required: app_root." + }, + { + "const": "node_restart", + "description": "Restarts a Node.js application. Required: app_root." + }, + { + "const": "node_install_modules", + "description": "Installs the npm modules of a Node.js application. Required: app_root." + }, + { + "const": "python_create", + "description": "Creates a Python application in app_root, served at https://{site}/apps{app_uri}. Required: app_root. Optional: app_uri, version, domain, startup_file, entry_point, env_vars." + }, + { + "const": "python_start", + "description": "Starts a Python application. Required: app_root." + }, + { + "const": "python_stop", + "description": "Stops a Python application. Required: app_root." + }, + { + "const": "python_restart", + "description": "Restarts a Python application. Required: app_root." + }, + { + "const": "python_install_modules", + "description": "Installs the pip modules of a Python application. Required: app_root." + }, + { + "const": "files_write", + "description": "Writes a text file (overwrites by default). Required: path, content. Optional: overwrite." + }, + { + "const": "files_patch", + "description": "Replaces old_string, which must occur exactly once, with new_string in a small text file. Required: path, old_string, new_string." + }, + { + "const": "files_legacy_edit", + "description": "Edits a file through the legacy file manager command. Usually fails with a login key; files_write is the regular way. Required: path, content, confirm." + }, + { + "const": "files_mkdir", + "description": "Creates a directory. Required: path." + }, + { + "const": "files_copy", + "description": "Copies source (or path) to destination. Required: destination. Optional: source, path, overwrite." + }, + { + "const": "files_copy_to", + "description": "Copies paths, sources, source or path into destination_dir. Optional: destination_dir, destination, paths, sources, source, path, merge." + }, + { + "const": "files_move", + "description": "Moves source (or path) to destination. Required: destination, confirm. Optional: source, path, overwrite." + }, + { + "const": "files_move_to", + "description": "Moves paths, sources, source or path into destination_dir. Required: confirm. Optional: destination_dir, destination, paths, sources, source, path, merge." + }, + { + "const": "files_chmod", + "description": "Changes permissions of paths. Required: perm. Optional: paths, sources, source, path." + }, + { + "const": "files_archive", + "description": "Creates an archive at destination from sources. Required: destination. Optional: paths, sources, source, path." + }, + { + "const": "files_extract", + "description": "Extracts an archive into destination_dir; may overwrite files. Required: confirm. Optional: source, path, destination_dir, destination, members, merge." + }, + { + "const": "files_publish", + "description": "Copies a file into a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: path, source." + }, + { + "const": "files_download_archive", + "description": "Packs paths into a ZIP in a random public folder. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Optional: paths, sources, source, path." + }, + { + "const": "db_create", + "description": "Creates a MySQL database; the name gets the {username}_ prefix. Optional: database, name, charset, collation." + }, + { + "const": "db_create_user", + "description": "Creates a MySQL user; the name gets the {username}_ prefix. Required: password. Optional: dbuser, name, hosts." + }, + { + "const": "db_create_with_user", + "description": "Creates a MySQL database and its user with full privileges; the password is returned once. Optional: database, name, dbuser, password, privileges, charset, collation, hosts." + }, + { + "const": "db_change_password", + "description": "Changes the password of a MySQL user. Required: dbuser or name, new_password or password, confirm." + }, + { + "const": "db_change_hosts", + "description": "Replaces the host patterns of a MySQL user. Required: dbuser or name, hosts, confirm." + }, + { + "const": "db_change_privs", + "description": "Replaces the privileges of a MySQL user on a database. Required: database, dbuser, confirm. Optional: privileges." + }, + { + "const": "db_import", + "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to import a database dump; the SQL does not pass through MCP." + }, + { + "const": "db_export", + "description": "Opens a one-time phpMyAdmin sign-in session and returns its link to export a database dump; the SQL does not pass through MCP." + }, + { + "const": "phpmyadmin", + "description": "Opens a one-time phpMyAdmin sign-in session and returns its link." + }, + { + "const": "ftp_create", + "description": "Creates an environment FTP account. Required: password. Optional: user, name, domain." + }, + { + "const": "ftp_modify", + "description": "Changes an environment FTP account. Required: confirm. Optional: user, name, password, domain." + }, + { + "const": "ftp_passwd", + "description": "Changes the password of an environment FTP account. Required: password, confirm. Optional: user, name, domain." + }, + { + "const": "cron_create", + "description": "Creates a cron job (default schedule: minute 0 of every hour). Required: command. Optional: minute, hour, dayofmonth, month, dayofweek." + }, + { + "const": "backup_create", + "description": "Queues a full environment backup; the file appears later under backups/. Required: confirm. Optional: parts, domain." + }, + { + "const": "backup_publish", + "description": "Publishes a backup file backups/{file}. The result is a public download URL (https://{site}/apps/_mcp_dl/...) in the technical domain public_html; delete stored_path with apps_delete files_delete afterwards. Required: path." + }, + { + "const": "login_key_get", + "description": "Returns one login key with its secret value (default main; the value of main is stored for this site and not returned). Optional: key_id, id." + }, + { + "const": "login_key_create", + "description": "Creates a login key record (default main; the value of main is stored for this site and not returned). Optional: key_id, id." + }, + { + "const": "login_key_rotate", + "description": "Replaces the value of a login key; the old value stops working. Required: confirm. Optional: key_id, id." + }, + { + "const": "da_login_key_create", + "description": "Creates a panel login key; allow_login=true also requires confirm. Required: key_id or id, password. Optional: allow_login, allow_commands, deny_commands, allow_networks, current_password, confirm." + }, + { + "const": "da_login_key_patch", + "description": "Changes a panel login key. Required: key_id or id, confirm. Optional: password, allow_login, allow_commands, deny_commands, allow_networks, current_password." + }, + { + "const": "visitor_key_get", + "description": "Returns the visitor encryption key with its secret value." + }, + { + "const": "visitor_key_create", + "description": "Creates the visitor encryption key." + }, + { + "const": "visitor_key_rotate", + "description": "Replaces the visitor encryption key; existing scripts stop decrypting old visitor data. Required: confirm." + } +]
- Changed
content_delete1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "delete", - "description": "Deletes an entry. Required: module, id, confirm." - }, - { - "const": "category_delete", - "description": "Deletes a category. Required: module, id, confirm." - }, - { - "const": "comments_delete", - "description": "Deletes a comment. Required: module, id, confirm." - }, - { - "const": "filter_delete", - "description": "Deletes an entry filter. Required: module, filter_num, confirm." - }, - { - "const": "channel_delete", - "description": "Deletes a video channel (id in channel_id or id). Required: module, confirm. Optional: channel_id, id." - }, - { - "const": "channel_category_delete", - "description": "Deletes a video channel category. Required: module, id, confirm." - } -]New value: +[ + { + "const": "delete", + "description": "Deletes an entry. Required: module, id, confirm." + }, + { + "const": "category_delete", + "description": "Deletes a category. Required: module, id, confirm." + }, + { + "const": "comments_delete", + "description": "Deletes a comment. Required: module, id, confirm." + }, + { + "const": "filter_delete", + "description": "Deletes an entry filter. Required: module, filter_num, confirm." + }, + { + "const": "channel_delete", + "description": "Deletes a video channel (id in channel_id or id). Required: module, channel_id or id, confirm." + }, + { + "const": "channel_category_delete", + "description": "Deletes a video channel category. Required: module, id, confirm." + } +]
- Changed
content_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "add", - "description": "Creates an entry and publishes it. Fields depend on the module (faq: subject, question, answer; gb: name, message; video: object; polls: question, answer1, answer2; publ, load, board, dir, stuff: the author name or contact person in name). The required fields of a module are marked in content_read fields; there the code author of publ, load, board, dir and stuff is the name parameter, and ad_type of board is its filter 3. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids." - }, - { - "const": "update", - "description": "Updates an entry. A replaced cover or image can keep its URL; its new width and height are in the reply. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module, id. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids." - }, - { - "const": "tags", - "description": "Sets the tags of an entry (comma-separated). Required: module, id, tags." - }, - { - "const": "category_add", - "description": "Creates a category; the image comes from the first filled slot (image, file, cover, photo). File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path." - }, - { - "const": "category_update", - "description": "Updates a category. Empty values are not sent, so they cannot clear a field. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module, id. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path." - }, - { - "const": "comments_add", - "description": "Adds a comment to an entry (entry id in id). Required: module, id, message. Optional: parent_id, user_id, fields." - }, - { - "const": "comments_update", - "description": "Updates a comment. Required: module, id. Optional: message, fields." - }, - { - "const": "filter_add", - "description": "Creates an entry filter (values separated by |). Required: module. Optional: filter_num, name, items, fields." - }, - { - "const": "filter_update", - "description": "Updates an entry filter. Required: module, filter_num. Optional: name, items, fields." - }, - { - "const": "channel_add", - "description": "Creates a video channel (module video). Required: module. Optional: name, title, category, description." - }, - { - "const": "channel_update", - "description": "Updates a video channel (id in channel_id or id). Required: module. Optional: channel_id, id, name, title, category, description." - }, - { - "const": "channel_category_add", - "description": "Creates a video channel category (module video). Required: module. Optional: name, title, parent_id, fields." - }, - { - "const": "channel_category_update", - "description": "Updates a video channel category. Required: module, id. Optional: name, title, parent_id, fields." - }, - { - "const": "rate", - "description": "Rates a guestbook entry (module gb). Required: module, id, mark." - } -]New value: +[ + { + "const": "add", + "description": "Creates an entry and publishes it. Fields depend on the module (faq: subject, question, answer; gb: name, message; video: object; polls: question, answer1, answer2; publ, load, board, dir, stuff: the author name or contact person in name). The required fields of a module are marked in content_read fields; there the code author of publ, load, board, dir and stuff is the name parameter, and ad_type of board is its filter 3. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids." + }, + { + "const": "update", + "description": "Updates an entry. A replaced cover or image can keep its URL; its new width and height are in the reply. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module, id. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids." + }, + { + "const": "tags", + "description": "Sets the tags of an entry (comma-separated). Required: module, id, tags." + }, + { + "const": "category_add", + "description": "Creates a category; the image comes from the first filled slot (image, file, cover, photo). File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path." + }, + { + "const": "category_update", + "description": "Updates a category. Empty values are not sent, so they cannot clear a field. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module, id. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path." + }, + { + "const": "comments_add", + "description": "Adds a comment to an entry (entry id in id). Required: module, id, message. Optional: parent_id, user_id, fields." + }, + { + "const": "comments_update", + "description": "Updates a comment. Required: module, id. Optional: message, fields." + }, + { + "const": "filter_add", + "description": "Creates an entry filter (values separated by |). Required: module. Optional: filter_num, name, items, fields." + }, + { + "const": "filter_update", + "description": "Updates an entry filter. Required: module, filter_num. Optional: name, items, fields." + }, + { + "const": "channel_add", + "description": "Creates a video channel (module video). Required: module. Optional: name, title, category, description." + }, + { + "const": "channel_update", + "description": "Updates a video channel (id in channel_id or id). Required: module, channel_id or id. Optional: name, title, category, description." + }, + { + "const": "channel_category_add", + "description": "Creates a video channel category (module video). Required: module. Optional: name, title, parent_id, fields." + }, + { + "const": "channel_category_update", + "description": "Updates a video channel category. Required: module, id. Optional: name, title, parent_id, fields." + }, + { + "const": "rate", + "description": "Rates a guestbook entry (module gb). Required: module, id, mark." + } +]
- Changed
files_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "content_put", - "description": "Writes text into a file. Required: path, content. Optional: create." - }, - { - "const": "upload", - "description": "Uploads one or more files into the folder path. Bytes come from files, content, content_base64, file, upload_id and upload_ids. Pass size and sha256 with inline bodies; a successful upload returns sent with both. Returns per-item results. Optional: path, files, content, content_base64, file, filename, name, size, sha256, upload_id, upload_ids, add_wmark." - }, - { - "const": "upload_url", - "description": "Downloads a file from a public URL into the folder path. Returns per-item results. Required: url. Optional: path, name, add_wmark." - }, - { - "const": "upload_direct", - "description": "Creates a one-time upload URL for a file of the given name and exact size, so binary files never pass through the model context. POST the raw bytes to the returned upload_url (for example with curl); the response is upload_id, filename, size and sha256. Pass upload_id to upload (with path), or as *_upload_id to the content and shop write tools. Required: filename, size." - }, - { - "const": "mkdir", - "description": "Creates a folder. Required: path." - }, - { - "const": "rename", - "description": "Renames one item (path and name) or several items in the folder path (items). Batch form returns per-item results. Required: path. Optional: name, items." - }, - { - "const": "move", - "description": "Moves path, or every item of paths, into destination. The paths form returns per-item results. Required: destination. Optional: path, paths." - } -]New value: +[ + { + "const": "content_put", + "description": "Writes text into a file. Required: path, content. Optional: create." + }, + { + "const": "upload", + "description": "Uploads one or more files into the folder path. Bytes come from files, content, content_base64, file, upload_id and upload_ids. Pass size and sha256 with inline bodies; a successful upload returns sent with both. Returns per-item results. Optional: path, files, content, content_base64, file, filename, name, size, sha256, upload_id, upload_ids, add_wmark." + }, + { + "const": "upload_url", + "description": "Downloads a file from a public URL into the folder path. Returns per-item results. Required: url. Optional: path, name, add_wmark." + }, + { + "const": "upload_direct", + "description": "Creates a one-time upload URL for a file of the given name and exact size, so binary files never pass through the model context. POST the raw bytes to the returned upload_url (for example with curl); the response is upload_id, filename, size and sha256. Pass upload_id to upload (with path), or as *_upload_id to the content and shop write tools. Required: filename or name, size." + }, + { + "const": "mkdir", + "description": "Creates a folder. Required: path." + }, + { + "const": "rename", + "description": "Renames one item (path and name) or several items in the folder path (items). Batch form returns per-item results. Required: path. Optional: name, items." + }, + { + "const": "move", + "description": "Moves path, or every item of paths, into destination. The paths form returns per-item results. Required: destination. Optional: path, paths." + } +]
- Changed
forum_delete1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "forum_delete", - "description": "Deletes a forum (id in forum_id or id). Required: confirm. Optional: forum_id, id." - }, - { - "const": "section_delete", - "description": "Deletes a forum section (id in section_id or id). Required: confirm. Optional: section_id, id." - }, - { - "const": "topic_delete", - "description": "Deletes a topic (id in topic_id or id). Required: confirm. Optional: topic_id, id." - }, - { - "const": "post_delete", - "description": "Deletes a post (id in post_id or id). Required: confirm. Optional: post_id, id." - }, - { - "const": "poll_delete", - "description": "Deletes a forum poll (id in poll_id or id). Required: confirm. Optional: poll_id, id." - } -]New value: +[ + { + "const": "forum_delete", + "description": "Deletes a forum (id in forum_id or id). Required: forum_id or id, confirm." + }, + { + "const": "section_delete", + "description": "Deletes a forum section (id in section_id or id). Required: section_id or id, confirm." + }, + { + "const": "topic_delete", + "description": "Deletes a topic (id in topic_id or id). Required: topic_id or id, confirm." + }, + { + "const": "post_delete", + "description": "Deletes a post (id in post_id or id). Required: post_id or id, confirm." + }, + { + "const": "poll_delete", + "description": "Deletes a forum poll (id in poll_id or id). Required: poll_id or id, confirm." + } +]
- Changed
forum_read1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "forum_list", - "description": "Lists forums, or the forums under id (or forum_id). Optional: id, forum_id, offset." - }, - { - "const": "forum_get", - "description": "Returns one forum (id in forum_id or id). Optional: forum_id, id." - }, - { - "const": "section_list", - "description": "Lists forum sections, or returns one (id in section_id or id). Optional: section_id, id, offset." - }, - { - "const": "topic_list", - "description": "Lists the topics of a forum a page at a time. Brief topics by default; detail=full gives complete topics. The reply has page, per_page, total, has_more, truncated and next. Optional: forum_id, topic_id, page, per_page, offset, detail." - }, - { - "const": "topic_get", - "description": "Returns one topic (id in topic_id or id). Optional: topic_id, id, forum_id." - }, - { - "const": "post_list", - "description": "Lists the posts of a topic a page at a time. Brief posts by default, without full texts; detail=full gives complete posts, post_get one complete post. The reply has page, per_page, total, has_more, truncated and next. Optional: topic_id, post_id, page, per_page, offset, detail." - }, - { - "const": "post_get", - "description": "Returns one post (id in post_id or id). Optional: post_id, id, topic_id." - }, - { - "const": "poll_list", - "description": "Lists forum polls a page at a time. Brief polls by default; detail=full gives complete polls. The reply has page, per_page, total, has_more, truncated and next. Optional: forum_id, poll_id, page, per_page, offset, detail." - }, - { - "const": "poll_get", - "description": "Returns one forum poll (id in poll_id or id). Optional: poll_id, id, forum_id." - }, - { - "const": "poll_results", - "description": "Returns the results of a forum poll (id in poll_id or id). Optional: poll_id, id." - } -]New value: +[ + { + "const": "forum_list", + "description": "Lists forums, or the forums under id (or forum_id). Optional: id, forum_id, offset." + }, + { + "const": "forum_get", + "description": "Returns one forum (id in forum_id or id). Required: forum_id or id." + }, + { + "const": "section_list", + "description": "Lists forum sections, or returns one (id in section_id or id). Optional: section_id, id, offset." + }, + { + "const": "topic_list", + "description": "Lists the topics of a forum a page at a time. Brief topics by default; detail=full gives complete topics. The reply has page, per_page, total, has_more, truncated and next. Optional: forum_id, topic_id, page, per_page, offset, detail." + }, + { + "const": "topic_get", + "description": "Returns one topic (id in topic_id or id). Required: topic_id or id. Optional: forum_id." + }, + { + "const": "post_list", + "description": "Lists the posts of a topic a page at a time. Brief posts by default, without full texts; detail=full gives complete posts, post_get one complete post. The reply has page, per_page, total, has_more, truncated and next. Required: topic_id or post_id. Optional: page, per_page, offset, detail." + }, + { + "const": "post_get", + "description": "Returns one post (id in post_id or id). Required: post_id or id. Optional: topic_id." + }, + { + "const": "poll_list", + "description": "Lists forum polls a page at a time. Brief polls by default; detail=full gives complete polls. The reply has page, per_page, total, has_more, truncated and next. Optional: forum_id, poll_id, page, per_page, offset, detail." + }, + { + "const": "poll_get", + "description": "Returns one forum poll (id in poll_id or id). Required: poll_id or id. Optional: forum_id." + }, + { + "const": "poll_results", + "description": "Returns the results of a forum poll (id in poll_id or id). Required: poll_id or id." + } +]
- Changed
forum_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "forum_add", - "description": "Creates a forum in a section; forum_id makes it a subforum. Optional: name, title, description, section_id, forum_id, fields." - }, - { - "const": "forum_update", - "description": "Updates a forum (id in forum_id or id). Optional: forum_id, id, name, title, description, section_id, fields." - }, - { - "const": "section_add", - "description": "Creates a forum section. Optional: name, title, fields." - }, - { - "const": "section_update", - "description": "Updates a forum section (id in section_id or id). Optional: section_id, id, name, title, fields." - }, - { - "const": "topic_add", - "description": "Creates a topic in the forum forum_id (or id) with its first post. Optional: forum_id, id, name, title, description, message, user_id, author_id, closed, ontop, password, fields." - }, - { - "const": "topic_update", - "description": "Updates a topic (id in topic_id or id). Optional: topic_id, id, name, title, description, nfid, user_id, author_id, fields." - }, - { - "const": "topic_close", - "description": "Closes a topic (id in topic_id or id). Optional: topic_id, id." - }, - { - "const": "topic_open", - "description": "Reopens a topic (id in topic_id or id). Optional: topic_id, id." - }, - { - "const": "topic_pin", - "description": "Pins a topic (id in topic_id or id). Optional: topic_id, id." - }, - { - "const": "topic_unpin", - "description": "Unpins a topic (id in topic_id or id). Optional: topic_id, id." - }, - { - "const": "topic_move", - "description": "Moves a topic to the forum nfid (id in topic_id or id). Required: nfid. Optional: topic_id, id, name, title, description." - }, - { - "const": "topic_join", - "description": "Joins a topic (topic_id or id) into the topic target_id. Required: target_id, confirm. Optional: topic_id, id." - }, - { - "const": "topic_split", - "description": "Splits the posts post_ids into a new topic in the forum nfid. Required: post_ids, confirm. Optional: name, title, description, nfid." - }, - { - "const": "topic_subscribe", - "description": "Subscribes to a topic (id in topic_id or id). Optional: topic_id, id." - }, - { - "const": "topic_unsubscribe", - "description": "Unsubscribes from a topic (id in topic_id or id). Optional: topic_id, id." - }, - { - "const": "post_add", - "description": "Adds a post to a topic (id in topic_id or id). Required: message. Optional: topic_id, id, user_id, fields." - }, - { - "const": "post_update", - "description": "Updates a post (id in post_id or id). Optional: post_id, id, message, fields." - }, - { - "const": "post_move", - "description": "Moves the posts post_ids into the topic target_id. Required: post_ids, target_id, confirm." - }, - { - "const": "post_pin", - "description": "Pins the first post of a topic on every page (topic in topic_id or id). Optional: topic_id, id." - }, - { - "const": "post_unpin", - "description": "Unpins the first post of a topic (topic in topic_id or id). Optional: topic_id, id." - }, - { - "const": "poll_add", - "description": "Creates a poll topic in the forum forum_id (or id); answers are separated by |. Optional: forum_id, id, name, title, description, message, question, answers, polltime, pollonly, pollmulty, fields." - }, - { - "const": "poll_update", - "description": "Updates a forum poll (id in poll_id or id). Optional: poll_id, id, question, fields." - }, - { - "const": "poll_move", - "description": "Moves a forum poll to the forum nfid (id in poll_id or id). Required: nfid. Optional: poll_id, id, name, title, description." - }, - { - "const": "poll_close", - "description": "Closes a forum poll (id in poll_id or id). Optional: poll_id, id." - }, - { - "const": "poll_open", - "description": "Reopens a forum poll (id in poll_id or id). Optional: poll_id, id." - }, - { - "const": "poll_pin", - "description": "Pins a forum poll (id in poll_id or id). Optional: poll_id, id." - }, - { - "const": "poll_unpin", - "description": "Unpins a forum poll (id in poll_id or id). Optional: poll_id, id." - }, - { - "const": "poll_join", - "description": "Joins a forum poll (poll_id or id) into the topic target_id. Required: target_id, confirm. Optional: poll_id, id." - }, - { - "const": "poll_split", - "description": "Splits the posts post_ids of a forum poll into a new topic in the forum nfid. Required: post_ids, confirm. Optional: name, title, description, nfid." - }, - { - "const": "poll_subscribe", - "description": "Subscribes to a forum poll (id in poll_id or id). Optional: poll_id, id." - }, - { - "const": "poll_vote", - "description": "Votes in a forum poll (id in poll_id or id); vote holds the answer index, or several comma-separated. Required: vote. Optional: poll_id, id." - } -]New value: +[ + { + "const": "forum_add", + "description": "Creates a forum in a section; forum_id makes it a subforum. Required: name or title, section_id or forum_id. Optional: description, fields." + }, + { + "const": "forum_update", + "description": "Updates a forum (id in forum_id or id). Required: forum_id or id. Optional: name, title, description, section_id, fields." + }, + { + "const": "section_add", + "description": "Creates a forum section. Required: name or title. Optional: fields." + }, + { + "const": "section_update", + "description": "Updates a forum section (id in section_id or id). Required: section_id or id. Optional: name, title, fields." + }, + { + "const": "topic_add", + "description": "Creates a topic in the forum forum_id (or id) with its first post. Required: forum_id or id. Optional: name, title, description, message, user_id, author_id, closed, ontop, password, fields." + }, + { + "const": "topic_update", + "description": "Updates a topic (id in topic_id or id). Required: topic_id or id. Optional: name, title, description, nfid, user_id, author_id, fields." + }, + { + "const": "topic_close", + "description": "Closes a topic (id in topic_id or id). Required: topic_id or id." + }, + { + "const": "topic_open", + "description": "Reopens a topic (id in topic_id or id). Required: topic_id or id." + }, + { + "const": "topic_pin", + "description": "Pins a topic (id in topic_id or id). Required: topic_id or id." + }, + { + "const": "topic_unpin", + "description": "Unpins a topic (id in topic_id or id). Required: topic_id or id." + }, + { + "const": "topic_move", + "description": "Moves a topic to the forum nfid (id in topic_id or id). Required: topic_id or id, nfid. Optional: name, title, description." + }, + { + "const": "topic_join", + "description": "Joins a topic (topic_id or id) into the topic target_id. Required: topic_id or id, target_id, confirm." + }, + { + "const": "topic_split", + "description": "Splits the posts post_ids into a new topic in the forum nfid. Required: post_ids, confirm. Optional: name, title, description, nfid." + }, + { + "const": "topic_subscribe", + "description": "Subscribes to a topic (id in topic_id or id). Required: topic_id or id." + }, + { + "const": "topic_unsubscribe", + "description": "Unsubscribes from a topic (id in topic_id or id). Required: topic_id or id." + }, + { + "const": "post_add", + "description": "Adds a post to a topic (id in topic_id or id). Required: topic_id or id, message. Optional: user_id, fields." + }, + { + "const": "post_update", + "description": "Updates a post (id in post_id or id). Required: post_id or id. Optional: message, fields." + }, + { + "const": "post_move", + "description": "Moves the posts post_ids into the topic target_id. Required: post_ids, target_id, confirm." + }, + { + "const": "post_pin", + "description": "Pins the first post of a topic on every page (topic in topic_id or id). Required: topic_id or id." + }, + { + "const": "post_unpin", + "description": "Unpins the first post of a topic (topic in topic_id or id). Required: topic_id or id." + }, + { + "const": "poll_add", + "description": "Creates a poll topic in the forum forum_id (or id); answers are separated by |. Required: forum_id or id. Optional: name, title, description, message, question, answers, polltime, pollonly, pollmulty, fields." + }, + { + "const": "poll_update", + "description": "Updates a forum poll (id in poll_id or id). Required: poll_id or id. Optional: question, fields." + }, + { + "const": "poll_move", + "description": "Moves a forum poll to the forum nfid (id in poll_id or id). Required: poll_id or id, nfid. Optional: name, title, description." + }, + { + "const": "poll_close", + "description": "Closes a forum poll (id in poll_id or id). Required: poll_id or id." + }, + { + "const": "poll_open", + "description": "Reopens a forum poll (id in poll_id or id). Required: poll_id or id." + }, + { + "const": "poll_pin", + "description": "Pins a forum poll (id in poll_id or id). Required: poll_id or id." + }, + { + "const": "poll_unpin", + "description": "Unpins a forum poll (id in poll_id or id). Required: poll_id or id." + }, + { + "const": "poll_join", + "description": "Joins a forum poll (poll_id or id) into the topic target_id. Required: poll_id or id, target_id, confirm." + }, + { + "const": "poll_split", + "description": "Splits the posts post_ids of a forum poll into a new topic in the forum nfid. Required: post_ids, confirm. Optional: name, title, description, nfid." + }, + { + "const": "poll_subscribe", + "description": "Subscribes to a forum poll (id in poll_id or id). Required: poll_id or id." + }, + { + "const": "poll_vote", + "description": "Votes in a forum poll (id in poll_id or id); vote holds the answer index, or several comma-separated. Required: poll_id or id, vote." + } +]
- Changed
shop_delete1 field changed- changed
Input schema / properties / ids / descriptionPrevious value: -"Comma-separated ids (invoice_*, stock_remove)."New value: +"Ids separated by commas (invoice_*: order ids, also separated by |; stock_remove)."
- Changed
shop_read3 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "category_list", - "description": "Lists shop categories (children of parent_id when set). Optional: parent_id, pid, get_globals, offset." - }, - { - "const": "list", - "description": "Lists products a page at a time, with sorting and filters: all goods, the wishlist of the current user, or the goods of user_id (view usergoods). By default products are brief, without descriptions; complete products come with detail=full, and one complete product card from get by id. The reply has page, per_page, total, has_more, truncated and, while products remain, next with the paging arguments of the following page. A shop that shows fewer than 5 products a catalog page serves fewer products a list page than per_page asks; the reply per_page names how many, and pages by number stay consecutive. Optional: view, user_id, page, pnum, per_page, offset, detail, sort, order, f_name, f_brand, f_art, f_price, f_stock, f_status, f_warr, f_weight." - }, - { - "const": "get", - "description": "Returns one product card. Required: id. Optional: cnt, goods_id." - }, - { - "const": "variations_list", - "description": "Lists the variations of a product. Required: id. Optional: offset." - }, - { - "const": "variation_get", - "description": "Returns one variation of a product. Required: id, variation_crc." - }, - { - "const": "variation_dict_list", - "description": "Returns one variation dictionary (name and values) by its id. Required: id." - }, - { - "const": "stock_get", - "description": "Returns the stock of a product by option sets. Required: id. Optional: offset." - }, - { - "const": "basket_get", - "description": "Returns the basket of the current user, or of user_id. Optional: user_id." - }, - { - "const": "checkout_get", - "description": "Returns the checkout form data for the current basket. Optional: promo_code, custom_delivery_tax." - }, - { - "const": "invoices_list", - "description": "Lists orders with filters, a page at a time, paged like list. Brief orders by default; detail=full gives complete orders, order_get one complete order. Optional: page, per_page, offset, detail, user_id, hide, status, group_courier, payment_id, delivery_id, ids, id, inv_sum, cdate, date." - }, - { - "const": "order_get", - "description": "Returns one order (order hash in order or id). Optional: order, id." - }, - { - "const": "comments_list", - "description": "Lists the comments of a product a page at a time, paged like list. Brief comments by default; detail=full gives complete comments. Required: id. Optional: page, per_page, offset, detail." - }, - { - "const": "currencies", - "description": "Lists shop currencies and rates. Optional: offset." - }, - { - "const": "balance_get", - "description": "Returns the balance of a user. Optional: user_id." - } -]New value: +[ + { + "const": "category_list", + "description": "Lists shop categories (children of parent_id when set). Optional: parent_id, pid, get_globals, offset." + }, + { + "const": "list", + "description": "Lists products a page at a time, with sorting and filters: all goods, the wishlist of the current user, or the goods of user_id (view usergoods, which user_id alone selects). By default products are brief, without descriptions; complete products come with detail=full, and one complete product card from get by id. The reply has page, per_page, total, has_more, truncated and, while products remain, next with the paging arguments of the following page. A shop that shows fewer than 5 products a catalog page serves fewer products a list page than per_page asks; the reply per_page names how many, and pages by number stay consecutive. Optional: view, user_id, page, pnum, per_page, offset, detail, sort, order, f_name, f_brand, f_art, f_price, f_stock, f_status, f_warr, f_weight." + }, + { + "const": "get", + "description": "Returns one product card. Required: id. Optional: cnt, goods_id." + }, + { + "const": "variations_list", + "description": "Lists the variations of a product. Required: id. Optional: offset." + }, + { + "const": "variation_get", + "description": "Returns one variation of a product. Required: id, variation_crc." + }, + { + "const": "variation_dict_list", + "description": "Returns one variation dictionary (name and values) by its id. Required: id." + }, + { + "const": "stock_get", + "description": "Returns the stock of a product by option sets. Required: id. Optional: offset." + }, + { + "const": "basket_get", + "description": "Returns the basket of the current user, or of user_id. Optional: user_id." + }, + { + "const": "checkout_get", + "description": "Returns the checkout form data for the current basket. Optional: promo_code, custom_delivery_tax." + }, + { + "const": "invoices_list", + "description": "Lists orders with filters, a page at a time, paged like list. Brief orders by default; detail=full gives complete orders, order_get one complete order. Optional: page, per_page, offset, detail, user_id, hide, status, group_courier, payment_id, delivery_id, ids, id, inv_sum, cdate, date." + }, + { + "const": "order_get", + "description": "Returns one order (order hash in order or id). Required: order or id." + }, + { + "const": "comments_list", + "description": "Lists the comments of a product a page at a time, paged like list. Brief comments by default; detail=full gives complete comments. Required: id. Optional: page, per_page, offset, detail." + }, + { + "const": "currencies", + "description": "Lists shop currencies and rates. Optional: offset." + }, + { + "const": "balance_get", + "description": "Returns the balance of a user. Optional: user_id." + } +] - changed
Input schema / properties / ids / descriptionPrevious value: -"Comma-separated ids (invoice_*, stock_remove)."New value: +"Ids separated by commas (invoice_*: order ids, also separated by |; stock_remove)." - changed
Input schema / properties / view / descriptionPrevious value: -"Goods list view. Default allgoods."New value: +"Goods list view. Default usergoods when user_id is given, otherwise allgoods."
- Changed
shop_write2 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "category_add", - "description": "Creates a category, with an image when an image slot is filled. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." - }, - { - "const": "category_update", - "description": "Updates a category; a filled image slot replaces its image. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." - }, - { - "const": "category_show", - "description": "Shows a hidden category. Required: id. Optional: fields." - }, - { - "const": "category_hide", - "description": "Hides a category. Required: id. Optional: fields." - }, - { - "const": "category_image", - "description": "Uploads the image of a category from the first filled image slot. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." - }, - { - "const": "add", - "description": "Creates a product. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." - }, - { - "const": "update", - "description": "Updates a product. Required: id. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." - }, - { - "const": "hide", - "description": "Hides or shows a product. Required: id. Optional: hide, fields." - }, - { - "const": "cnt_save", - "description": "Saves product counters (views, sales, orders, rating, stock). Required: id. Optional: views, solds, ordered, rate_num, rate_sum, stock_q, fields." - }, - { - "const": "img_add", - "description": "Adds images to a product. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, image_paths, image_upload_ids, image_site_paths, images, file_add_cnt, fields." - }, - { - "const": "img_edit", - "description": "Replaces the product image in slot img (0 is the main image; the slot must already hold an image). The new image can keep the URL of the old one. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id, img, confirm. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." - }, - { - "const": "variation_update", - "description": "Updates one variation of a product. Required: id, variation_crc. Optional: art, stock, price, price_old, weight, fields." - }, - { - "const": "variation_dict_save", - "description": "Creates a variation dictionary (name and values), or updates the dictionary id: a new name and/or the full list of values. Optional: id, name, values, fields." - }, - { - "const": "variation_load", - "description": "Loads the variations of a product into its edit form. Required: id. Optional: fields." - }, - { - "const": "variation_gen", - "description": "Generates product variations from var_* keys in fields. Required: id, confirm. Optional: fields." - }, - { - "const": "variation_edit_save", - "description": "Saves product variations from var_* keys in fields. Required: id. Optional: fields." - }, - { - "const": "stock_genall", - "description": "Generates all option sets of a product stock. Required: id. Optional: fields." - }, - { - "const": "stock_add", - "description": "Adds an option set to a product stock. Required: id, opt_sel. Optional: fields." - }, - { - "const": "stock_save", - "description": "Saves product stock from stock_* keys in fields. Required: id. Optional: fields." - }, - { - "const": "basket_add", - "description": "Adds a product to the basket. Required: id. Optional: cnt, opt, now, fields." - }, - { - "const": "basket_update", - "description": "Changes the quantity of a basket line. Required: id. Optional: cnt, opt, now, fields." - }, - { - "const": "checkout_update", - "description": "Recalculates or changes the unfinished order (mode recalc or change; checkout field_N keys in fields). Required: mode. Optional: fields." - }, - { - "const": "checkout_submit", - "description": "Places the order from the basket and sends the order notices. No payment is taken: the order waits for payment by the chosen method. Required: confirm. Optional: payment_id, delivery_id, promo_code, custom_delivery_tax, fields." - }, - { - "const": "invoice_hide", - "description": "Moves orders to an order group. Optional: ids, id, hide, fields." - }, - { - "const": "invoice_courier", - "description": "Assigns a courier to orders. Required: group_courier. Optional: ids, id, fields." - }, - { - "const": "invoice_status", - "description": "Sets the status of orders; a paid status is set without any payment. When the shop returns cancelled payments to the balance, moving an order that a registered buyer actually paid online or from the balance from a paid status (2-8) to new, awaiting payment, cancelled or payment processing credits its total to the internal shop balance of the buyer; the buyer gets nothing back for an order that was never paid online or from the balance. Whether a later return to a paid status debits the credited total depends on the status history of the order: it may not be debited, repeated status changes may credit it again, and with some shop settings it may be debited again. Moving an order between the delivered or completed statuses and any other status also credits or debits the internal balances of the user sellers of its goods and the Telegram shop referrer reward, when those are in use, whether or not the order was paid; a move between delivered and completed changes nothing. Required: status, confirm. Optional: ids, id, fields." - }, - { - "const": "invoice_payment", - "description": "Changes the payment method of an order that can still be paid (order hash in order or id); no payment is taken. When the new method is set up so, the order also gets the payment processing status, which can credit or debit internal balances as in invoice_status. The reply may carry the order link and the payment form of the new method for the buyer. Required: payment_id, confirm. Optional: order, id, fields." - }, - { - "const": "order_update", - "description": "Changes the goods of an order: quantities, options and prices of its lines, or removes lines (keys in fields). The order total is recalculated, and that total is what may later go back to the balance of the buyer on cancellation. The status and note values are not applied: use invoice_status for the status. Required: order. Optional: status, note, fields." - }, - { - "const": "order_add_goods", - "description": "Adds goods to an order. Required: order. Optional: fields." - }, - { - "const": "order_delivery_tax", - "description": "Sets a custom delivery cost of an order. Required: order, custom_delivery_tax. Optional: fields." - }, - { - "const": "comments_add", - "description": "Adds a product comment (product id in entry_id or id). Required: message. Optional: entry_id, id, pros, cons, parent_id, user_id, subscribe_to_replies, fields." - }, - { - "const": "comments_update", - "description": "Updates a product comment. Required: id. Optional: message, pros, cons, fields." - }, - { - "const": "set_currency_rate", - "description": "Sets the rate of a shop currency. Required: curr_code, curr_rate. Optional: fields." - } -]New value: +[ + { + "const": "category_add", + "description": "Creates a category, with an image when an image slot is filled. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: name. Optional: pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." + }, + { + "const": "category_update", + "description": "Updates a category; a filled image slot replaces its image. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." + }, + { + "const": "category_show", + "description": "Shows a hidden category. Required: id. Optional: fields." + }, + { + "const": "category_hide", + "description": "Hides a category. Required: id. Optional: fields." + }, + { + "const": "category_image", + "description": "Uploads the image of a category from the first filled image slot. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." + }, + { + "const": "add", + "description": "Creates a product. Required: cat_id, name. Optional: brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." + }, + { + "const": "update", + "description": "Updates a product. Required: id. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." + }, + { + "const": "hide", + "description": "Hides or shows a product. Required: id. Optional: hide, fields." + }, + { + "const": "cnt_save", + "description": "Saves product counters (views, sales, orders, rating, stock). Required: id. Optional: views, solds, ordered, rate_num, rate_sum, stock_q, fields." + }, + { + "const": "img_add", + "description": "Adds images to a product. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, image_paths, image_upload_ids, image_site_paths, images, file_add_cnt, fields." + }, + { + "const": "img_edit", + "description": "Replaces the product image in slot img (0 is the main image; the slot must already hold an image). The new image can keep the URL of the old one. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id, img, confirm. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." + }, + { + "const": "variation_update", + "description": "Updates one variation of a product. Required: id, variation_crc. Optional: art, stock, price, price_old, weight, fields." + }, + { + "const": "variation_dict_save", + "description": "Creates a variation dictionary (name and values), or updates the dictionary id: a new name and/or the full list of values. Required: id or name. Optional: values, fields." + }, + { + "const": "variation_load", + "description": "Loads the variations of a product into its edit form. Required: id. Optional: fields." + }, + { + "const": "variation_gen", + "description": "Generates product variations from var_* keys in fields. Required: id, confirm. Optional: fields." + }, + { + "const": "variation_edit_save", + "description": "Saves product variations from var_* keys in fields. Required: id. Optional: fields." + }, + { + "const": "stock_genall", + "description": "Generates all option sets of a product stock. Required: id. Optional: fields." + }, + { + "const": "stock_add", + "description": "Adds an option set to a product stock. Required: id, opt_sel. Optional: fields." + }, + { + "const": "stock_save", + "description": "Saves product stock from stock_* keys in fields. Required: id. Optional: fields." + }, + { + "const": "basket_add", + "description": "Adds a product to the basket. Required: id. Optional: cnt, opt, now, fields." + }, + { + "const": "basket_update", + "description": "Changes the quantity of a basket line. Required: id. Optional: cnt, opt, now, fields." + }, + { + "const": "checkout_update", + "description": "Recalculates or changes the unfinished order (mode recalc or change; checkout field_N keys in fields). Required: mode. Optional: fields." + }, + { + "const": "checkout_submit", + "description": "Places the order from the basket and sends the order notices. No payment is taken: the order waits for payment by the chosen method. Required: confirm. Optional: payment_id, delivery_id, promo_code, custom_delivery_tax, fields." + }, + { + "const": "invoice_hide", + "description": "Moves orders to an order group. Required: ids or id. Optional: hide, fields." + }, + { + "const": "invoice_courier", + "description": "Assigns a courier to orders. Required: ids or id, group_courier. Optional: fields." + }, + { + "const": "invoice_status", + "description": "Sets the status of orders; a paid status is set without any payment. When the shop returns cancelled payments to the balance, moving an order that a registered buyer actually paid online or from the balance from a paid status (2-8) to new, awaiting payment, cancelled or payment processing credits its total to the internal shop balance of the buyer; the buyer gets nothing back for an order that was never paid online or from the balance. Whether a later return to a paid status debits the credited total depends on the status history of the order: it may not be debited, repeated status changes may credit it again, and with some shop settings it may be debited again. Moving an order between the delivered or completed statuses and any other status also credits or debits the internal balances of the user sellers of its goods and the Telegram shop referrer reward, when those are in use, whether or not the order was paid; a move between delivered and completed changes nothing. Required: ids or id, status, confirm. Optional: fields." + }, + { + "const": "invoice_payment", + "description": "Changes the payment method of an order that can still be paid (order hash in order or id); no payment is taken. When the new method is set up so, the order also gets the payment processing status, which can credit or debit internal balances as in invoice_status. The reply may carry the order link and the payment form of the new method for the buyer. Required: order or id, payment_id, confirm. Optional: fields." + }, + { + "const": "order_update", + "description": "Changes the goods of an order: quantities, options and prices of its lines, or removes lines (keys in fields). The order total is recalculated, and that total is what may later go back to the balance of the buyer on cancellation. The status and note values are not applied: use invoice_status for the status. Required: order. Optional: status, note, fields." + }, + { + "const": "order_add_goods", + "description": "Adds goods to an order. Required: order. Optional: fields." + }, + { + "const": "order_delivery_tax", + "description": "Sets a custom delivery cost of an order. Required: order, custom_delivery_tax. Optional: fields." + }, + { + "const": "comments_add", + "description": "Adds a product comment (product id in entry_id or id). Required: entry_id or id, message. Optional: pros, cons, parent_id, user_id, subscribe_to_replies, fields." + }, + { + "const": "comments_update", + "description": "Updates a product comment. Required: id. Optional: message, pros, cons, fields." + }, + { + "const": "set_currency_rate", + "description": "Sets the rate of a shop currency. Required: curr_code, curr_rate. Optional: fields." + } +] - changed
Input schema / properties / ids / descriptionPrevious value: -"Comma-separated ids (invoice_*, stock_remove)."New value: +"Ids separated by commas (invoice_*: order ids, also separated by |; stock_remove)."
- Changed
subscriptions_delete1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "plan_delete", - "description": "Deletes a tariff plan. Required: plan_id, confirm." - }, - { - "const": "legacy_item_delete", - "description": "Deletes a legacy tariff (id in id or plan_id). Required: confirm. Optional: id, plan_id." - }, - { - "const": "subscription_cancel", - "description": "Cancels a subscription at once: access ends and automatic charges stop. No money is refunded. Required: subscription_id, confirm." - } -]New value: +[ + { + "const": "plan_delete", + "description": "Deletes a tariff plan. Required: plan_id, confirm." + }, + { + "const": "legacy_item_delete", + "description": "Deletes a legacy tariff (id in id or plan_id). Required: id or plan_id, confirm." + }, + { + "const": "subscription_cancel", + "description": "Cancels a subscription at once: access ends and automatic charges stop. No money is refunded. Required: subscription_id, confirm." + } +]
- Changed
subscriptions_read1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "plans_list", - "description": "Lists tariff plans. Optional: offset." - }, - { - "const": "plan_get", - "description": "Returns one tariff plan. Required: plan_id." - }, - { - "const": "plan_stats", - "description": "Returns statistics of a tariff plan. Required: plan_id." - }, - { - "const": "plan_users", - "description": "Lists the users of a tariff plan a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: plan_id. Optional: page, p, per_page, offset, detail, status, expires_before." - }, - { - "const": "legacy_items_list", - "description": "Lists legacy tariffs. Optional: offset." - }, - { - "const": "legacy_item_get", - "description": "Returns one legacy tariff (id in id or plan_id). Optional: id, plan_id." - }, - { - "const": "user_subscriptions", - "description": "Lists the subscriptions of a user a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: user_id. Optional: page, p, per_page, offset, detail, status, expires_before." - }, - { - "const": "subscription_get", - "description": "Returns one subscription. Required: subscription_id." - }, - { - "const": "access_check", - "description": "Checks whether a user has access through a plan. Optional: user_id, plan_id." - }, - { - "const": "subscribers_list", - "description": "Lists subscribers, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, plan_id, status, expires_before." - }, - { - "const": "payments_list", - "description": "Lists payments, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, user_id, subscription_id, plan_id, status, date_from, date_to." - }, - { - "const": "payment_get", - "description": "Returns one payment. Required: payment_id." - } -]New value: +[ + { + "const": "plans_list", + "description": "Lists tariff plans. Optional: offset." + }, + { + "const": "plan_get", + "description": "Returns one tariff plan. Required: plan_id." + }, + { + "const": "plan_stats", + "description": "Returns statistics of a tariff plan. Required: plan_id." + }, + { + "const": "plan_users", + "description": "Lists the users of a tariff plan a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: plan_id. Optional: page, p, per_page, offset, detail, status, expires_before." + }, + { + "const": "legacy_items_list", + "description": "Lists legacy tariffs. Optional: offset." + }, + { + "const": "legacy_item_get", + "description": "Returns one legacy tariff (id in id or plan_id). Required: id or plan_id." + }, + { + "const": "user_subscriptions", + "description": "Lists the subscriptions of a user a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: user_id. Optional: page, p, per_page, offset, detail, status, expires_before." + }, + { + "const": "subscription_get", + "description": "Returns one subscription. Required: subscription_id." + }, + { + "const": "access_check", + "description": "Checks whether a user has access through a plan. Required: user_id, plan_id." + }, + { + "const": "subscribers_list", + "description": "Lists subscribers, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, plan_id, status, expires_before." + }, + { + "const": "payments_list", + "description": "Lists payments, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, user_id, subscription_id, plan_id, status, date_from, date_to." + }, + { + "const": "payment_get", + "description": "Returns one payment. Required: payment_id." + } +]
- Changed
subscriptions_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "plan_add", - "description": "Creates a tariff plan. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "plan_update", - "description": "Updates a tariff plan. Required: plan_id. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "plan_enable", - "description": "Enables a tariff plan. Required: plan_id." - }, - { - "const": "plan_disable", - "description": "Disables a tariff plan. Required: plan_id." - }, - { - "const": "legacy_item_add", - "description": "Creates a legacy tariff. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "legacy_item_update", - "description": "Updates a legacy tariff (id in id or plan_id). Optional: id, plan_id, title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "subscription_create", - "description": "Creates an unpaid subscription of a user to a plan. Instead of a new one it reuses the unpaid subscription of the user to this plan (for a recurring plan also a paused or expired one, which keeps its status), refreshes it from the current plan and clears its saved payment method, so its auto-renewal is lost. Refused when the user has an active or trial subscription to any plan (unless the requested plan is a donation plan). Gives no access, charges nothing and records no payment. Required: user_id, plan_id. Optional: fields." - }, - { - "const": "subscription_grant", - "description": "Grants a user paid access to a plan without any payment: a subscription is created, or an unpaid one of the user to this plan (for a recurring plan also a paused or expired one) is reused and refreshed from the plan, and it is activated at once for one plan period (unlimited when the plan has no period). The user is moved to the plan group, and the user and the site owner are notified. No payment is recorded. Refused when the user has an active or trial subscription to any plan (unless the requested plan is a donation plan). Required: user_id, plan_id, confirm. Optional: fields." - }, - { - "const": "subscription_trial", - "description": "Starts a free trial of a recurring plan that has trial days: the subscription gets the trial status for trial_interval days without a card or any payment. The user group is not changed. Refused when the user already has this plan active, in trial or paused, or has an active or trial subscription to any other plan. Required: user_id, plan_id. Optional: fields." - }, - { - "const": "subscription_renew", - "description": "Extends a subscription by one plan period without payment and without a payment record: from its end date, or from now when it has ended. The subscription becomes active and the user is moved to the plan group, even if it was unpaid, in trial or paused. A cancelled one is refused. When the subscription has a saved payment method, automatic charges are scheduled again, even if auto-renewal was turned off. Required: subscription_id." - }, - { - "const": "subscription_change_plan", - "description": "Moves a subscription to another plan at once: the new price, period and group (for an active or trial subscription) apply now, without extra payment, refund or price recalculation, and the end date stays. Auto-renewal is kept when the new plan is recurring at the same price, and later charges then follow the new plan period; otherwise it is turned off and the saved payment method is removed. PayPal subscriptions are refused. Required: subscription_id, plan_id. Optional: fields." - }, - { - "const": "subscription_pause", - "description": "Pauses a subscription. Required: subscription_id." - }, - { - "const": "subscription_resume", - "description": "Resumes a paused subscription that has not ended: the user is moved back to the plan group, and automatic charges of a saved payment method are scheduled again, even if auto-renewal was turned off before the pause; the next charge may come within the hour when the period ends soon. Required: subscription_id." - }, - { - "const": "subscription_autorenew_disable", - "description": "Turns off auto-renewal of a subscription. Required: subscription_id." - }, - { - "const": "payment_create", - "description": "Records an unpaid payment of a subscription in the module accounts only: nothing is charged, no payment system is contacted, and the subscription does not change. amount is in minor currency units; the payment method must be enabled on the site. Required: subscription_id, amount. Optional: payment_method_id, currency, transaction_id, fields." - }, - { - "const": "payment_confirm", - "description": "Marks an unpaid or awaiting payment as paid without any check that money was received; nothing is charged. The subscription is activated and extended by one plan period, the user is moved to the plan group, and the payment counts in paid totals (plan_stats). The amount is not checked against the plan price. When the subscription has a saved payment method, automatic charges are scheduled again, even if auto-renewal was turned off; the next charge may come within the hour when the plan period is short. Required: payment_id, confirm." - } -]New value: +[ + { + "const": "plan_add", + "description": "Creates a tariff plan. Required: title. Optional: description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "plan_update", + "description": "Updates a tariff plan. Required: plan_id. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "plan_enable", + "description": "Enables a tariff plan. Required: plan_id." + }, + { + "const": "plan_disable", + "description": "Disables a tariff plan. Required: plan_id." + }, + { + "const": "legacy_item_add", + "description": "Creates a legacy tariff. Required: title. Optional: description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "legacy_item_update", + "description": "Updates a legacy tariff (id in id or plan_id). Required: id or plan_id. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "subscription_create", + "description": "Creates an unpaid subscription of a user to a plan. Instead of a new one it reuses the unpaid subscription of the user to this plan (for a recurring plan also a paused or expired one, which keeps its status), refreshes it from the current plan and clears its saved payment method, so its auto-renewal is lost. Refused when the user has an active or trial subscription to any plan (unless the requested plan is a donation plan). Gives no access, charges nothing and records no payment. Required: user_id, plan_id. Optional: fields." + }, + { + "const": "subscription_grant", + "description": "Grants a user paid access to a plan without any payment: a subscription is created, or an unpaid one of the user to this plan (for a recurring plan also a paused or expired one) is reused and refreshed from the plan, and it is activated at once for one plan period (unlimited when the plan has no period). The user is moved to the plan group, and the user and the site owner are notified. No payment is recorded. Refused when the user has an active or trial subscription to any plan (unless the requested plan is a donation plan). Required: user_id, plan_id, confirm. Optional: fields." + }, + { + "const": "subscription_trial", + "description": "Starts a free trial of a recurring plan that has trial days: the subscription gets the trial status for trial_interval days without a card or any payment. The user group is not changed. Refused when the user already has this plan active, in trial or paused, or has an active or trial subscription to any other plan. Required: user_id, plan_id. Optional: fields." + }, + { + "const": "subscription_renew", + "description": "Extends a subscription by one plan period without payment and without a payment record: from its end date, or from now when it has ended. The subscription becomes active and the user is moved to the plan group, even if it was unpaid, in trial or paused. A cancelled one is refused. When the subscription has a saved payment method, automatic charges are scheduled again, even if auto-renewal was turned off. Required: subscription_id." + }, + { + "const": "subscription_change_plan", + "description": "Moves a subscription to another plan at once: the new price, period and group (for an active or trial subscription) apply now, without extra payment, refund or price recalculation, and the end date stays. Auto-renewal is kept when the new plan is recurring at the same price, and later charges then follow the new plan period; otherwise it is turned off and the saved payment method is removed. PayPal subscriptions are refused. Required: subscription_id, plan_id. Optional: fields." + }, + { + "const": "subscription_pause", + "description": "Pauses a subscription. Required: subscription_id." + }, + { + "const": "subscription_resume", + "description": "Resumes a paused subscription that has not ended: the user is moved back to the plan group, and automatic charges of a saved payment method are scheduled again, even if auto-renewal was turned off before the pause; the next charge may come within the hour when the period ends soon. Required: subscription_id." + }, + { + "const": "subscription_autorenew_disable", + "description": "Turns off auto-renewal of a subscription. Required: subscription_id." + }, + { + "const": "payment_create", + "description": "Records an unpaid payment of a subscription in the module accounts only: nothing is charged, no payment system is contacted, and the subscription does not change. amount is in minor currency units; the payment method must be enabled on the site. Required: subscription_id, amount. Optional: payment_method_id, currency, transaction_id, fields." + }, + { + "const": "payment_confirm", + "description": "Marks an unpaid or awaiting payment as paid without any check that money was received; nothing is charged. The subscription is activated and extended by one plan period, the user is moved to the plan group, and the payment counts in paid totals (plan_stats). The amount is not checked against the plan price. When the subscription has a saved payment method, automatic charges are scheduled again, even if auto-renewal was turned off; the next charge may come within the hour when the plan period is short. Required: payment_id, confirm." + } +]
- Changed
templates_read1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "list_modules", - "description": "Lists the modules that have templates, with their template ids. Optional: offset." - }, - { - "const": "get_variables", - "description": "Returns a template together with the variables available in it. Required: module_id, template_id." - }, - { - "const": "read_template", - "description": "Returns the template code and its variables. Required: module_id, template_id." - }, - { - "const": "validate_template", - "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id. Optional: content, html_content, code_search, code_paste." - }, - { - "const": "list_backups", - "description": "Lists template backups. Optional: offset." - }, - { - "const": "get_reference", - "description": "Returns the template variables reference (markdown)." - }, - { - "const": "get_guide", - "description": "Returns the template editing guide (markdown)." - }, - { - "const": "get_backup_guide", - "description": "Returns the template backup guide (markdown)." - }, - { - "const": "menu_list", - "description": "Lists site menus. Optional: offset." - }, - { - "const": "menu_get", - "description": "Returns one menu with its items. Required: menu_id." - }, - { - "const": "mail_list_forms", - "description": "Lists mail forms. Optional: offset." - }, - { - "const": "mail_get_form", - "description": "Returns one mail form. Required: mail_form_id." - }, - { - "const": "mail_list_fields", - "description": "Lists the fields of a mail form. Required: mail_form_id. Optional: offset." - }, - { - "const": "mail_get_template", - "description": "Returns the notification email template of a mail form. Required: mail_form_id." - }, - { - "const": "page_list", - "description": "Lists site pages a page at a time. Brief pages by default, without their content; detail=full gives complete pages, page_get one complete page. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, page_page, page_per_page." - }, - { - "const": "page_get", - "description": "Returns one site page. Required: page_id." - } -]New value: +[ + { + "const": "list_modules", + "description": "Lists the modules that have templates, with their template ids. Optional: offset." + }, + { + "const": "get_variables", + "description": "Returns a template together with the variables available in it. Required: module_id, template_id." + }, + { + "const": "read_template", + "description": "Returns the template code and its variables. Required: module_id, template_id." + }, + { + "const": "validate_template", + "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id, content or html_content or code_search. Optional: code_paste." + }, + { + "const": "list_backups", + "description": "Lists template backups. Optional: offset." + }, + { + "const": "get_reference", + "description": "Returns the template variables reference (markdown)." + }, + { + "const": "get_guide", + "description": "Returns the template editing guide (markdown)." + }, + { + "const": "get_backup_guide", + "description": "Returns the template backup guide (markdown)." + }, + { + "const": "menu_list", + "description": "Lists site menus. Optional: offset." + }, + { + "const": "menu_get", + "description": "Returns one menu with its items. Required: menu_id." + }, + { + "const": "mail_list_forms", + "description": "Lists mail forms. Optional: offset." + }, + { + "const": "mail_get_form", + "description": "Returns one mail form. Required: mail_form_id." + }, + { + "const": "mail_list_fields", + "description": "Lists the fields of a mail form. Required: mail_form_id. Optional: offset." + }, + { + "const": "mail_get_template", + "description": "Returns the notification email template of a mail form. Required: mail_form_id." + }, + { + "const": "page_list", + "description": "Lists site pages a page at a time. Brief pages by default, without their content; detail=full gives complete pages, page_get one complete page. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, page_page, page_per_page." + }, + { + "const": "page_get", + "description": "Returns one site page. Required: page_id." + } +]
- Changed
templates_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "update_template", - "description": "Replaces the whole template. After validation an automatic backup (rotated) is made; the save is refused if the backup fails, and the result carries backup.id. Required: module_id, template_id, html_content." - }, - { - "const": "patch_template", - "description": "Replaces one exact fragment of a template with code_paste. Makes the same automatic backup as update_template. Required: module_id, template_id, code_search, code_paste." - }, - { - "const": "create_backup", - "description": "Makes a manual template backup (never rotated; refused with LIMIT_REACHED when the limit is reached) and returns backup.id." - }, - { - "const": "gblock_create", - "description": "Creates or replaces a global block (block id in id or gblock_id). Optional: id, gblock_id, content, pda." - }, - { - "const": "menu_create", - "description": "Creates a menu. Required: title. Optional: layout." - }, - { - "const": "menu_update", - "description": "Changes the title or layout of a menu. Required: menu_id. Optional: title, layout." - }, - { - "const": "menu_update_items", - "description": "Replaces the items of a menu. The text of an item goes in title. Required: menu_id, items." - }, - { - "const": "mail_create_form", - "description": "Creates a mail form. Required: mail_name, mail_emails. Optional: mail_rez." - }, - { - "const": "mail_update_form", - "description": "Updates a mail form. Required: mail_form_id. Optional: mail_name, mail_emails, mail_rez." - }, - { - "const": "mail_add_field", - "description": "Adds a field to a mail form. Required: mail_form_id, mail_field_type, mail_name. Optional: mail_required, mail_values." - }, - { - "const": "mail_update_field", - "description": "Updates a mail form field. Required: mail_form_id, mail_field_id. Optional: mail_field_type, mail_name, mail_required, mail_values." - }, - { - "const": "mail_move_field", - "description": "Moves a mail form field up or down. Required: mail_form_id, mail_field_id, mail_direction." - }, - { - "const": "mail_save_template", - "description": "Saves the notification email template of a mail form. Required: mail_form_id, mail_tmpl." - }, - { - "const": "page_add", - "description": "Creates a site page. Optional: page_name, page_message, page_parent_id, page_pending, page_owntmpl, page_tmpl, page_ownurl, page_access_all, page_meta_title, page_meta_description, page_meta_keywords, page_other1, page_other2, page_other3, page_other4, page_other5." - }, - { - "const": "page_update", - "description": "Updates a site page. Required: page_id. Optional: page_name, page_message, page_parent_id, page_pending, page_owntmpl, page_tmpl, page_ownurl, page_access_all, page_meta_title, page_meta_description, page_meta_keywords, page_other1, page_other2, page_other3, page_other4, page_other5." - } -]New value: +[ + { + "const": "update_template", + "description": "Replaces the whole template. After validation an automatic backup (rotated) is made; the save is refused if the backup fails, and the result carries backup.id. Required: module_id, template_id, html_content." + }, + { + "const": "patch_template", + "description": "Replaces one exact fragment of a template with code_paste. Makes the same automatic backup as update_template. Required: module_id, template_id, code_search, code_paste." + }, + { + "const": "create_backup", + "description": "Makes a manual template backup (never rotated; refused with LIMIT_REACHED when the limit is reached) and returns backup.id." + }, + { + "const": "gblock_create", + "description": "Creates a global block (block id in id or gblock_id: Latin letters, cut to 10 and upper-cased). Without content the block is created empty. A block that already exists is refused (ALREADY_EXISTS). Required: id or gblock_id. Optional: content, pda." + }, + { + "const": "menu_create", + "description": "Creates a menu. Required: title. Optional: layout." + }, + { + "const": "menu_update", + "description": "Changes the title or layout of a menu. Required: menu_id. Optional: title, layout." + }, + { + "const": "menu_update_items", + "description": "Replaces the items of a menu. The text of an item goes in title. Required: menu_id, items." + }, + { + "const": "mail_create_form", + "description": "Creates a mail form. Required: mail_name, mail_emails. Optional: mail_rez." + }, + { + "const": "mail_update_form", + "description": "Updates a mail form. Required: mail_form_id. Optional: mail_name, mail_emails, mail_rez." + }, + { + "const": "mail_add_field", + "description": "Adds a field to a mail form. Required: mail_form_id, mail_field_type, mail_name. Optional: mail_required, mail_values." + }, + { + "const": "mail_update_field", + "description": "Updates a mail form field. Required: mail_form_id, mail_field_id. Optional: mail_field_type, mail_name, mail_required, mail_values." + }, + { + "const": "mail_move_field", + "description": "Moves a mail form field up or down. Required: mail_form_id, mail_field_id, mail_direction." + }, + { + "const": "mail_save_template", + "description": "Saves the notification email template of a mail form. Required: mail_form_id, mail_tmpl." + }, + { + "const": "page_add", + "description": "Creates a site page. Required: page_name. Optional: page_message, page_parent_id, page_pending, page_owntmpl, page_tmpl, page_ownurl, page_access_all, page_meta_title, page_meta_description, page_meta_keywords, page_other1, page_other2, page_other3, page_other4, page_other5." + }, + { + "const": "page_update", + "description": "Updates a site page. Required: page_id. Optional: page_name, page_message, page_parent_id, page_pending, page_owntmpl, page_tmpl, page_ownurl, page_access_all, page_meta_title, page_meta_description, page_meta_keywords, page_other1, page_other2, page_other3, page_other4, page_other5." + } +]
- Changed
tmaker_delete1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "project_delete", - "description": "Deletes a saved project (id in project_id or id). Required: confirm. Optional: project_id, id." - } -]New value: +[ + { + "const": "project_delete", + "description": "Deletes a saved project (id in project_id or id). Required: project_id or id, confirm." + } +]
- Changed
tmaker_read1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "skeleton_guide", - "description": "Returns the skeleton guide (markdown)." - }, - { - "const": "skeleton_rules", - "description": "Returns the placeholder codes allowed in skeleton HTML. Optional: offset." - }, - { - "const": "designs_list", - "description": "Lists standard designs. Optional: offset." - }, - { - "const": "design_get", - "description": "Returns one standard design (id in design_id or id). Optional: design_id, id." - }, - { - "const": "project_list", - "description": "Lists saved projects. Optional: offset." - }, - { - "const": "project_get", - "description": "Returns one saved project (id in project_id or id). Optional: project_id, id." - }, - { - "const": "skeleton_validate", - "description": "Checks skeleton HTML without saving it. Required: tmpl." - } -]New value: +[ + { + "const": "skeleton_guide", + "description": "Returns the skeleton guide (markdown)." + }, + { + "const": "skeleton_rules", + "description": "Returns the placeholder codes allowed in skeleton HTML. Optional: offset." + }, + { + "const": "designs_list", + "description": "Lists standard designs. Optional: offset." + }, + { + "const": "design_get", + "description": "Returns one standard design (id in design_id or id). Required: design_id or id." + }, + { + "const": "project_list", + "description": "Lists saved projects. Optional: offset." + }, + { + "const": "project_get", + "description": "Returns one saved project (id in project_id or id). Required: project_id or id." + }, + { + "const": "skeleton_validate", + "description": "Checks skeleton HTML without saving it. Required: tmpl." + } +]
- Changed
users_delete1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "delete", - "description": "Deletes a user (login in nick or user). Required: confirm. Optional: nick, user." - }, - { - "const": "group_delete", - "description": "Deletes a user group (group id in id or gid) and moves its members to the group nid. Required: confirm. Optional: id, gid, nid." - } -]New value: +[ + { + "const": "delete", + "description": "Deletes a user (login in nick or user). Required: nick or user, confirm." + }, + { + "const": "group_delete", + "description": "Deletes a user group (group id in id or gid) and moves its members to the group nid. Required: id or gid, confirm. Optional: nid." + } +]
- Changed
users_read1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "list", - "description": "Lists site users page by page, optionally filtered by login, id or email. Brief users by default; detail=full gives complete profiles, get one complete user. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, nick, user, user_id, email." - }, - { - "const": "get", - "description": "Returns one user by id, login or email. Optional: user_id, nick, user, email." - }, - { - "const": "groups", - "description": "Lists user groups. Optional: offset." - }, - { - "const": "groups_list", - "description": "Lists user groups (same as groups). Optional: offset." - }, - { - "const": "groups_rights", - "description": "Lists the permission codes that a group can have. Optional: offset." - }, - { - "const": "group_permissions", - "description": "Returns the permissions of one group (group id in id or gid). Optional: id, gid." - }, - { - "const": "ranks", - "description": "Lists user ranks. Optional: offset." - }, - { - "const": "fields", - "description": "Lists user profile fields. Optional: offset." - } -]New value: +[ + { + "const": "list", + "description": "Lists site users page by page, optionally filtered by login, id or email. Brief users by default; detail=full gives complete profiles, get one complete user. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, nick, user, user_id, email." + }, + { + "const": "get", + "description": "Returns one user by id, login or email. Required: user_id or nick or user or email." + }, + { + "const": "groups", + "description": "Lists user groups. Optional: offset." + }, + { + "const": "groups_list", + "description": "Lists user groups (same as groups). Optional: offset." + }, + { + "const": "groups_rights", + "description": "Lists the permission codes that a group can have. Optional: offset." + }, + { + "const": "group_permissions", + "description": "Returns the permissions of one group (group id in id or gid). Required: id or gid." + }, + { + "const": "ranks", + "description": "Lists user ranks. Optional: offset." + }, + { + "const": "fields", + "description": "Lists user profile fields. Optional: offset." + } +]
- Changed
users_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "add", - "description": "Creates a user (login in nick or user). The full name goes in name (or fields.full_name). Required: password, email, name. Optional: nick, user, fields." - }, - { - "const": "register", - "description": "Creates a user (same as add). Required: password, email, name. Optional: nick, user, fields." - }, - { - "const": "update", - "description": "Updates a user profile: values that are not passed keep their stored values, an empty string clears a value. The full name goes in name (or fields.full_name). Required: user_id. Optional: name, email, fields." - }, - { - "const": "chlogin", - "description": "Changes the login of a user. Required: user_id, login." - }, - { - "const": "chgroup", - "description": "Moves a user to another group. Required: user_id, gid." - }, - { - "const": "chpass", - "description": "Sets a new password for a user. Required: user_id, password, confirm." - }, - { - "const": "group_add", - "description": "Creates a user group. Required: name. Optional: fields." - }, - { - "const": "group_update", - "description": "Updates a user group (group id in id or gid). Optional: id, gid, name, fields." - } -]New value: +[ + { + "const": "add", + "description": "Creates a user (login in nick or user). The full name goes in name (or fields.full_name). Required: password, email, name. Optional: nick, user, fields." + }, + { + "const": "register", + "description": "Creates a user (same as add). Required: password, email, name. Optional: nick, user, fields." + }, + { + "const": "update", + "description": "Updates a user profile: values that are not passed keep their stored values, an empty string clears a value. The full name goes in name (or fields.full_name). Required: user_id. Optional: name, email, fields." + }, + { + "const": "chlogin", + "description": "Changes the login of a user. Required: user_id, login." + }, + { + "const": "chgroup", + "description": "Moves a user to another group. Required: user_id, gid." + }, + { + "const": "chpass", + "description": "Sets a new password for a user. Required: user_id, password, confirm." + }, + { + "const": "group_add", + "description": "Creates a user group. Required: name. Optional: fields." + }, + { + "const": "group_update", + "description": "Updates a user group (group id in id or gid). Required: id or gid. Optional: name, fields." + } +]
3 tool updates
- Changed
shop_write4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "category_add", - "category_update", - "category_show", - "category_hide", - "category_image", - "add", - "update", - "hide", - "cnt_save", - "img_add", - "img_edit", - "variation_update", - "variation_dict_save", - "variation_load", - "variation_gen", - "variation_edit_save", - "stock_genall", - "stock_add", - "stock_save", - "basket_add", - "basket_update", - "checkout_update", - "checkout_submit", - "invoice_hide", - "invoice_courier", - "invoice_status", - "invoice_payment", - "order_update", - "order_add_goods", - "order_delivery_tax", - "comments_add", - "comments_update", - "set_currency_rate", - "balance_change", - "balance_set" -]New value: +[ + "category_add", + "category_update", + "category_show", + "category_hide", + "category_image", + "add", + "update", + "hide", + "cnt_save", + "img_add", + "img_edit", + "variation_update", + "variation_dict_save", + "variation_load", + "variation_gen", + "variation_edit_save", + "stock_genall", + "stock_add", + "stock_save", + "basket_add", + "basket_update", + "checkout_update", + "checkout_submit", + "invoice_hide", + "invoice_courier", + "invoice_status", + "invoice_payment", + "order_update", + "order_add_goods", + "order_delivery_tax", + "comments_add", + "comments_update", + "set_currency_rate" +] - changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "category_add", - "description": "Creates a category, with an image when an image slot is filled. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." - }, - { - "const": "category_update", - "description": "Updates a category; a filled image slot replaces its image. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." - }, - { - "const": "category_show", - "description": "Shows a hidden category. Required: id. Optional: fields." - }, - { - "const": "category_hide", - "description": "Hides a category. Required: id. Optional: fields." - }, - { - "const": "category_image", - "description": "Uploads the image of a category from the first filled image slot. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." - }, - { - "const": "add", - "description": "Creates a product. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." - }, - { - "const": "update", - "description": "Updates a product. Required: id. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." - }, - { - "const": "hide", - "description": "Hides or shows a product. Required: id. Optional: hide, fields." - }, - { - "const": "cnt_save", - "description": "Saves product counters (views, sales, orders, rating, stock). Required: id. Optional: views, solds, ordered, rate_num, rate_sum, stock_q, fields." - }, - { - "const": "img_add", - "description": "Adds images to a product. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, image_paths, image_upload_ids, image_site_paths, images, file_add_cnt, fields." - }, - { - "const": "img_edit", - "description": "Replaces the product image in slot img (0 is the main image; the slot must already hold an image). The new image can keep the URL of the old one. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id, img, confirm. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." - }, - { - "const": "variation_update", - "description": "Updates one variation of a product. Required: id, variation_crc. Optional: art, stock, price, price_old, weight, fields." - }, - { - "const": "variation_dict_save", - "description": "Creates a variation dictionary (name and values), or updates the dictionary id: a new name and/or the full list of values. Optional: id, name, values, fields." - }, - { - "const": "variation_load", - "description": "Loads the variations of a product into its edit form. Required: id. Optional: fields." - }, - { - "const": "variation_gen", - "description": "Generates product variations from var_* keys in fields. Required: id, confirm. Optional: fields." - }, - { - "const": "variation_edit_save", - "description": "Saves product variations from var_* keys in fields. Required: id. Optional: fields." - }, - { - "const": "stock_genall", - "description": "Generates all option sets of a product stock. Required: id. Optional: fields." - }, - { - "const": "stock_add", - "description": "Adds an option set to a product stock. Required: id, opt_sel. Optional: fields." - }, - { - "const": "stock_save", - "description": "Saves product stock from stock_* keys in fields. Required: id. Optional: fields." - }, - { - "const": "basket_add", - "description": "Adds a product to the basket. Required: id. Optional: cnt, opt, now, fields." - }, - { - "const": "basket_update", - "description": "Changes the quantity of a basket line. Required: id. Optional: cnt, opt, now, fields." - }, - { - "const": "checkout_update", - "description": "Recalculates or changes the unfinished order (mode recalc or change; checkout field_N keys in fields). Required: mode. Optional: fields." - }, - { - "const": "checkout_submit", - "description": "Places the order from the basket. Required: confirm. Optional: payment_id, delivery_id, promo_code, custom_delivery_tax, fields." - }, - { - "const": "invoice_hide", - "description": "Moves orders to an order group. Optional: ids, id, hide, fields." - }, - { - "const": "invoice_courier", - "description": "Assigns a courier to orders. Required: group_courier. Optional: ids, id, fields." - }, - { - "const": "invoice_status", - "description": "Sets the status of orders. Required: status. Optional: ids, id, fields." - }, - { - "const": "invoice_payment", - "description": "Changes the payment method of an order (order hash in order or id). Required: payment_id. Optional: order, id, fields." - }, - { - "const": "order_update", - "description": "Changes the goods, status or note of an order. Required: order. Optional: status, note, fields." - }, - { - "const": "order_add_goods", - "description": "Adds goods to an order. Required: order. Optional: fields." - }, - { - "const": "order_delivery_tax", - "description": "Sets a custom delivery cost of an order. Required: order, custom_delivery_tax. Optional: fields." - }, - { - "const": "comments_add", - "description": "Adds a product comment (product id in entry_id or id). Required: message. Optional: entry_id, id, pros, cons, parent_id, user_id, subscribe_to_replies, fields." - }, - { - "const": "comments_update", - "description": "Updates a product comment. Required: id. Optional: message, pros, cons, fields." - }, - { - "const": "set_currency_rate", - "description": "Sets the rate of a shop currency. Required: curr_code, curr_rate. Optional: fields." - }, - { - "const": "balance_change", - "description": "Changes the balance of a user by amount: a positive amount adds to it, a negative one subtracts. A subtraction larger than the current balance is refused. A note goes in fields.comment. Required: user_id, amount, confirm. Optional: fields." - }, - { - "const": "balance_set", - "description": "Sets the balance of a user. Required: user_id, amount, confirm. Optional: fields." - } -]New value: +[ + { + "const": "category_add", + "description": "Creates a category, with an image when an image slot is filled. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." + }, + { + "const": "category_update", + "description": "Updates a category; a filled image slot replaces its image. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: name, pid, parent_id, global_cat, dscr, brief, meta_title, meta_dscr, url, pos, view_groups, add_groups, exclude_from_discount, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path." + }, + { + "const": "category_show", + "description": "Shows a hidden category. Required: id. Optional: fields." + }, + { + "const": "category_hide", + "description": "Hides a category. Required: id. Optional: fields." + }, + { + "const": "category_image", + "description": "Uploads the image of a category from the first filled image slot. The category image must be a .jpg, .png or .gif file (.jpeg is renamed to .jpg). The current image is removed before the new one is saved, so a file with such an extension that is not a valid image leaves the category without an image. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." + }, + { + "const": "add", + "description": "Creates a product. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." + }, + { + "const": "update", + "description": "Updates a product. Required: id. Optional: cat_id, name, brief, dscr, html_dscr, price, price_in, price_old, stock, art, brand, url, meta_title, meta_dscr, tags, type, cats_add, ch_addcat, unit, weight, warr, undisc, fields." + }, + { + "const": "hide", + "description": "Hides or shows a product. Required: id. Optional: hide, fields." + }, + { + "const": "cnt_save", + "description": "Saves product counters (views, sales, orders, rating, stock). Required: id. Optional: views, solds, ordered, rate_num, rate_sum, stock_q, fields." + }, + { + "const": "img_add", + "description": "Adds images to a product. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, image_paths, image_upload_ids, image_site_paths, images, file_add_cnt, fields." + }, + { + "const": "img_edit", + "description": "Replaces the product image in slot img (0 is the main image; the slot must already hold an image). The new image can keep the URL of the old one. Image slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: id, img, confirm. Optional: image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, fields." + }, + { + "const": "variation_update", + "description": "Updates one variation of a product. Required: id, variation_crc. Optional: art, stock, price, price_old, weight, fields." + }, + { + "const": "variation_dict_save", + "description": "Creates a variation dictionary (name and values), or updates the dictionary id: a new name and/or the full list of values. Optional: id, name, values, fields." + }, + { + "const": "variation_load", + "description": "Loads the variations of a product into its edit form. Required: id. Optional: fields." + }, + { + "const": "variation_gen", + "description": "Generates product variations from var_* keys in fields. Required: id, confirm. Optional: fields." + }, + { + "const": "variation_edit_save", + "description": "Saves product variations from var_* keys in fields. Required: id. Optional: fields." + }, + { + "const": "stock_genall", + "description": "Generates all option sets of a product stock. Required: id. Optional: fields." + }, + { + "const": "stock_add", + "description": "Adds an option set to a product stock. Required: id, opt_sel. Optional: fields." + }, + { + "const": "stock_save", + "description": "Saves product stock from stock_* keys in fields. Required: id. Optional: fields." + }, + { + "const": "basket_add", + "description": "Adds a product to the basket. Required: id. Optional: cnt, opt, now, fields." + }, + { + "const": "basket_update", + "description": "Changes the quantity of a basket line. Required: id. Optional: cnt, opt, now, fields." + }, + { + "const": "checkout_update", + "description": "Recalculates or changes the unfinished order (mode recalc or change; checkout field_N keys in fields). Required: mode. Optional: fields." + }, + { + "const": "checkout_submit", + "description": "Places the order from the basket and sends the order notices. No payment is taken: the order waits for payment by the chosen method. Required: confirm. Optional: payment_id, delivery_id, promo_code, custom_delivery_tax, fields." + }, + { + "const": "invoice_hide", + "description": "Moves orders to an order group. Optional: ids, id, hide, fields." + }, + { + "const": "invoice_courier", + "description": "Assigns a courier to orders. Required: group_courier. Optional: ids, id, fields." + }, + { + "const": "invoice_status", + "description": "Sets the status of orders; a paid status is set without any payment. When the shop returns cancelled payments to the balance, moving an order that a registered buyer actually paid online or from the balance from a paid status (2-8) to new, awaiting payment, cancelled or payment processing credits its total to the internal shop balance of the buyer; the buyer gets nothing back for an order that was never paid online or from the balance. Whether a later return to a paid status debits the credited total depends on the status history of the order: it may not be debited, repeated status changes may credit it again, and with some shop settings it may be debited again. Moving an order between the delivered or completed statuses and any other status also credits or debits the internal balances of the user sellers of its goods and the Telegram shop referrer reward, when those are in use, whether or not the order was paid; a move between delivered and completed changes nothing. Required: status, confirm. Optional: ids, id, fields." + }, + { + "const": "invoice_payment", + "description": "Changes the payment method of an order that can still be paid (order hash in order or id); no payment is taken. When the new method is set up so, the order also gets the payment processing status, which can credit or debit internal balances as in invoice_status. The reply may carry the order link and the payment form of the new method for the buyer. Required: payment_id, confirm. Optional: order, id, fields." + }, + { + "const": "order_update", + "description": "Changes the goods of an order: quantities, options and prices of its lines, or removes lines (keys in fields). The order total is recalculated, and that total is what may later go back to the balance of the buyer on cancellation. The status and note values are not applied: use invoice_status for the status. Required: order. Optional: status, note, fields." + }, + { + "const": "order_add_goods", + "description": "Adds goods to an order. Required: order. Optional: fields." + }, + { + "const": "order_delivery_tax", + "description": "Sets a custom delivery cost of an order. Required: order, custom_delivery_tax. Optional: fields." + }, + { + "const": "comments_add", + "description": "Adds a product comment (product id in entry_id or id). Required: message. Optional: entry_id, id, pros, cons, parent_id, user_id, subscribe_to_replies, fields." + }, + { + "const": "comments_update", + "description": "Updates a product comment. Required: id. Optional: message, pros, cons, fields." + }, + { + "const": "set_currency_rate", + "description": "Sets the rate of a shop currency. Required: curr_code, curr_rate. Optional: fields." + } +] - removed
Input schema / properties / amountRemoved value: -{ - "description": "balance_change: signed change, non-zero. balance_set: the new balance, zero or more.", - "type": [ - "number", - "string" - ] -} - changed
Input schema / properties / confirm / descriptionPrevious value: -"Pass true only after the user approves this change. Required by: img_edit, variation_gen, checkout_submit, balance_change, balance_set."New value: +"Pass true only after the user approves this change. Required by: img_edit, variation_gen, checkout_submit, invoice_status, invoice_payment."
- Changed
subscriptions_delete1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "plan_delete", - "description": "Deletes a tariff plan. Required: plan_id, confirm." - }, - { - "const": "legacy_item_delete", - "description": "Deletes a legacy tariff (id in id or plan_id). Required: confirm. Optional: id, plan_id." - }, - { - "const": "subscription_cancel", - "description": "Cancels a subscription. Required: subscription_id, confirm." - } -]New value: +[ + { + "const": "plan_delete", + "description": "Deletes a tariff plan. Required: plan_id, confirm." + }, + { + "const": "legacy_item_delete", + "description": "Deletes a legacy tariff (id in id or plan_id). Required: confirm. Optional: id, plan_id." + }, + { + "const": "subscription_cancel", + "description": "Cancels a subscription at once: access ends and automatic charges stop. No money is refunded. Required: subscription_id, confirm." + } +]
- Changed
subscriptions_write3 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "plan_add", - "plan_update", - "plan_enable", - "plan_disable", - "legacy_item_add", - "legacy_item_update", - "subscription_create", - "subscription_grant", - "subscription_trial", - "subscription_renew", - "subscription_change_plan", - "subscription_pause", - "subscription_resume", - "subscription_autorenew_enable", - "subscription_autorenew_disable", - "payment_create", - "payment_confirm", - "payment_refund" -]New value: +[ + "plan_add", + "plan_update", + "plan_enable", + "plan_disable", + "legacy_item_add", + "legacy_item_update", + "subscription_create", + "subscription_grant", + "subscription_trial", + "subscription_renew", + "subscription_change_plan", + "subscription_pause", + "subscription_resume", + "subscription_autorenew_disable", + "payment_create", + "payment_confirm" +] - changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "plan_add", - "description": "Creates a tariff plan. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "plan_update", - "description": "Updates a tariff plan. Required: plan_id. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "plan_enable", - "description": "Enables a tariff plan. Required: plan_id." - }, - { - "const": "plan_disable", - "description": "Disables a tariff plan. Required: plan_id." - }, - { - "const": "legacy_item_add", - "description": "Creates a legacy tariff. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "legacy_item_update", - "description": "Updates a legacy tariff (id in id or plan_id). Optional: id, plan_id, title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." - }, - { - "const": "subscription_create", - "description": "Creates a subscription of a user to a plan. Required: user_id, plan_id. Optional: fields." - }, - { - "const": "subscription_grant", - "description": "Grants a user access to a plan without payment. Required: user_id, plan_id, confirm. Optional: fields." - }, - { - "const": "subscription_trial", - "description": "Starts a trial subscription of a user to a plan. Required: user_id, plan_id. Optional: fields." - }, - { - "const": "subscription_renew", - "description": "Renews a subscription. Required: subscription_id." - }, - { - "const": "subscription_change_plan", - "description": "Moves a subscription to another plan. Required: subscription_id, plan_id. Optional: fields." - }, - { - "const": "subscription_pause", - "description": "Pauses a subscription. Required: subscription_id." - }, - { - "const": "subscription_resume", - "description": "Resumes a paused subscription. Required: subscription_id." - }, - { - "const": "subscription_autorenew_enable", - "description": "Turns on auto-renewal of a subscription. Required: subscription_id." - }, - { - "const": "subscription_autorenew_disable", - "description": "Turns off auto-renewal of a subscription. Required: subscription_id." - }, - { - "const": "payment_create", - "description": "Creates a payment for a subscription. Required: subscription_id. Optional: amount, payment_method_id, currency, transaction_id, fields." - }, - { - "const": "payment_confirm", - "description": "Confirms a payment. Required: payment_id, confirm." - }, - { - "const": "payment_refund", - "description": "Refunds a payment. Required: payment_id, confirm." - } -]New value: +[ + { + "const": "plan_add", + "description": "Creates a tariff plan. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "plan_update", + "description": "Updates a tariff plan. Required: plan_id. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "plan_enable", + "description": "Enables a tariff plan. Required: plan_id." + }, + { + "const": "plan_disable", + "description": "Disables a tariff plan. Required: plan_id." + }, + { + "const": "legacy_item_add", + "description": "Creates a legacy tariff. Optional: title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "legacy_item_update", + "description": "Updates a legacy tariff (id in id or plan_id). Optional: id, plan_id, title, description, type, price, price_old, is_discount, is_advantage, interval, period, trial_interval, group_to, group_back, text_advantage, advantage_items, fields." + }, + { + "const": "subscription_create", + "description": "Creates an unpaid subscription of a user to a plan. Instead of a new one it reuses the unpaid subscription of the user to this plan (for a recurring plan also a paused or expired one, which keeps its status), refreshes it from the current plan and clears its saved payment method, so its auto-renewal is lost. Refused when the user has an active or trial subscription to any plan (unless the requested plan is a donation plan). Gives no access, charges nothing and records no payment. Required: user_id, plan_id. Optional: fields." + }, + { + "const": "subscription_grant", + "description": "Grants a user paid access to a plan without any payment: a subscription is created, or an unpaid one of the user to this plan (for a recurring plan also a paused or expired one) is reused and refreshed from the plan, and it is activated at once for one plan period (unlimited when the plan has no period). The user is moved to the plan group, and the user and the site owner are notified. No payment is recorded. Refused when the user has an active or trial subscription to any plan (unless the requested plan is a donation plan). Required: user_id, plan_id, confirm. Optional: fields." + }, + { + "const": "subscription_trial", + "description": "Starts a free trial of a recurring plan that has trial days: the subscription gets the trial status for trial_interval days without a card or any payment. The user group is not changed. Refused when the user already has this plan active, in trial or paused, or has an active or trial subscription to any other plan. Required: user_id, plan_id. Optional: fields." + }, + { + "const": "subscription_renew", + "description": "Extends a subscription by one plan period without payment and without a payment record: from its end date, or from now when it has ended. The subscription becomes active and the user is moved to the plan group, even if it was unpaid, in trial or paused. A cancelled one is refused. When the subscription has a saved payment method, automatic charges are scheduled again, even if auto-renewal was turned off. Required: subscription_id." + }, + { + "const": "subscription_change_plan", + "description": "Moves a subscription to another plan at once: the new price, period and group (for an active or trial subscription) apply now, without extra payment, refund or price recalculation, and the end date stays. Auto-renewal is kept when the new plan is recurring at the same price, and later charges then follow the new plan period; otherwise it is turned off and the saved payment method is removed. PayPal subscriptions are refused. Required: subscription_id, plan_id. Optional: fields." + }, + { + "const": "subscription_pause", + "description": "Pauses a subscription. Required: subscription_id." + }, + { + "const": "subscription_resume", + "description": "Resumes a paused subscription that has not ended: the user is moved back to the plan group, and automatic charges of a saved payment method are scheduled again, even if auto-renewal was turned off before the pause; the next charge may come within the hour when the period ends soon. Required: subscription_id." + }, + { + "const": "subscription_autorenew_disable", + "description": "Turns off auto-renewal of a subscription. Required: subscription_id." + }, + { + "const": "payment_create", + "description": "Records an unpaid payment of a subscription in the module accounts only: nothing is charged, no payment system is contacted, and the subscription does not change. amount is in minor currency units; the payment method must be enabled on the site. Required: subscription_id, amount. Optional: payment_method_id, currency, transaction_id, fields." + }, + { + "const": "payment_confirm", + "description": "Marks an unpaid or awaiting payment as paid without any check that money was received; nothing is charged. The subscription is activated and extended by one plan period, the user is moved to the plan group, and the payment counts in paid totals (plan_stats). The amount is not checked against the plan price. When the subscription has a saved payment method, automatic charges are scheduled again, even if auto-renewal was turned off; the next charge may come within the hour when the plan period is short. Required: payment_id, confirm." + } +] - changed
Input schema / properties / confirm / descriptionPrevious value: -"Pass true only after the user approves this change. Required by: subscription_grant, payment_confirm, payment_refund."New value: +"Pass true only after the user approves this change. Required by: subscription_grant, payment_confirm."
1 tool update
- Changed
users_write1 field changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "add", - "description": "Creates a user (login in nick or user). The full name goes in name (or fields.full_name). Required: password, email, name. Optional: nick, user, fields." - }, - { - "const": "register", - "description": "Creates a user (same as add). Required: password, email, name. Optional: nick, user, fields." - }, - { - "const": "update", - "description": "Updates a user profile. Required: user_id. Optional: name, email, fields." - }, - { - "const": "chlogin", - "description": "Changes the login of a user. Required: user_id, login." - }, - { - "const": "chgroup", - "description": "Moves a user to another group. Required: user_id, gid." - }, - { - "const": "chpass", - "description": "Sets a new password for a user. Required: user_id, password, confirm." - }, - { - "const": "group_add", - "description": "Creates a user group. Required: name. Optional: fields." - }, - { - "const": "group_update", - "description": "Updates a user group (group id in id or gid). Optional: id, gid, name, fields." - } -]New value: +[ + { + "const": "add", + "description": "Creates a user (login in nick or user). The full name goes in name (or fields.full_name). Required: password, email, name. Optional: nick, user, fields." + }, + { + "const": "register", + "description": "Creates a user (same as add). Required: password, email, name. Optional: nick, user, fields." + }, + { + "const": "update", + "description": "Updates a user profile: values that are not passed keep their stored values, an empty string clears a value. The full name goes in name (or fields.full_name). Required: user_id. Optional: name, email, fields." + }, + { + "const": "chlogin", + "description": "Changes the login of a user. Required: user_id, login." + }, + { + "const": "chgroup", + "description": "Moves a user to another group. Required: user_id, gid." + }, + { + "const": "chpass", + "description": "Sets a new password for a user. Required: user_id, password, confirm." + }, + { + "const": "group_add", + "description": "Creates a user group. Required: name. Optional: fields." + }, + { + "const": "group_update", + "description": "Updates a user group (group id in id or gid). Optional: id, gid, name, fields." + } +]
3 tool updates
- Changed
content_write4 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Short description / FAQ question. Use description_type=html when formatted."New value: +"Short description / FAQ question; its format is set by description_type." - changed
Input schema / properties / description_type / descriptionPrevious value: -"Description format."New value: +"Format of description (faq: question); the same as message_type." - changed
Input schema / properties / message / descriptionPrevious value: -"Full text (entry, comment, post). Use message_type=html when formatted."New value: +"Full text (entry, comment, post); the format of an entry text is set by message_type." - changed
Input schema / properties / message_type / descriptionPrevious value: -"Message format."New value: +"Format of message (faq: answer) on add and update: plain escapes the markup, bb turns BB codes into HTML, html keeps the HTML. news and load always keep the HTML; blog, publ, board, dir, stuff and faq keep it only when the user group may use HTML in the module, otherwise the markup is escaped. Without it a non-empty text of these modules is saved as html."
- Changed
forum_write2 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Short description / FAQ question. Use description_type=html when formatted."New value: +"Short description / FAQ question; its format is set by description_type." - changed
Input schema / properties / message / descriptionPrevious value: -"Full text (entry, comment, post). Use message_type=html when formatted."New value: +"Full text (entry, comment, post); the format of an entry text is set by message_type."
- Changed
templates_write1 field changed- changed
Input schema / properties / page_message / descriptionPrevious value: -"Page HTML content."New value: +"Page HTML content. It is saved as HTML whatever editor the site uses."
11 tool updates
- Changed
apps_read6 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "get_guide", - "description": "Returns a step-by-step guide to the server environment." - }, - { - "const": "info", - "description": "Returns information about the environment server." - }, - { - "const": "status", - "description": "Returns whether server scripts are available on the plan and activated, and the account username and technical domain." - }, - { - "const": "session", - "description": "Returns the current environment session, including selected_domain." - }, - { - "const": "session_state", - "description": "Returns the environment session state." - }, - { - "const": "usage", - "description": "Returns disk and resource usage of the environment." - }, - { - "const": "user_config", - "description": "Returns the environment user configuration." - }, - { - "const": "plugins", - "description": "Lists environment plugins." - }, - { - "const": "php_get", - "description": "Returns the PHP version and settings." - }, - { - "const": "selector_get", - "description": "Reads a language selector (method get) of plugin phpselector, nodejs_selector or python_selector. Required: plugin, interpreter. Optional: params." - }, - { - "const": "node_list", - "description": "Lists Node.js applications." - }, - { - "const": "python_list", - "description": "Lists Python applications." - }, - { - "const": "files_list", - "description": "Lists a directory (default: home). Optional: path, limit, offset." - }, - { - "const": "files_tree", - "description": "Returns the directory tree under path. Optional: path, limit, offset." - }, - { - "const": "files_read", - "description": "Reads a small text file. A binary or larger file is refused; files_publish in apps_write returns a download link for it. Required: path." - }, - { - "const": "files_search", - "description": "Searches file names under path. Required: query. Optional: path, limit, offset." - }, - { - "const": "files_disk", - "description": "Returns disk usage of the home directory." - }, - { - "const": "files_archive_list", - "description": "Lists the members of an archive. Required: path." - }, - { - "const": "db_list", - "description": "Lists MySQL databases." - }, - { - "const": "db_get", - "description": "Returns one MySQL database (name in database or name). Optional: database, name." - }, - { - "const": "db_info", - "description": "Returns MySQL server information." - }, - { - "const": "db_user", - "description": "Returns one MySQL user (name in dbuser or name). Optional: dbuser, name." - }, - { - "const": "db_users", - "description": "Lists the users of a MySQL database (name in database or name). Optional: database, name." - }, - { - "const": "db_users_all", - "description": "Lists all MySQL users." - }, - { - "const": "db_user_databases", - "description": "Lists the databases of a MySQL user (name in dbuser or name). Optional: dbuser, name." - }, - { - "const": "ftp_list", - "description": "Lists environment FTP accounts of a domain. Optional: domain." - }, - { - "const": "cron_list", - "description": "Lists cron jobs (each with its cron_id) and cron settings." - }, - { - "const": "backup_list", - "description": "Lists environment backups. Optional: domain." - }, - { - "const": "login_key_list", - "description": "Lists environment login key records without their values." - }, - { - "const": "da_login_key_list", - "description": "Lists panel login keys of the environment without secret values." - }, - { - "const": "da_login_key_get", - "description": "Returns the settings of one panel login key without secret values. Required: key_id. Optional: id." - }, - { - "const": "da_login_key_history", - "description": "Returns the usage history of a panel login key. Required: key_id. Optional: id." - }, - { - "const": "da_login_key_commands", - "description": "Lists the commands a panel login key can be allowed or denied." - } -]New value: +[ + { + "const": "get_guide", + "description": "Returns a step-by-step guide to the server environment." + }, + { + "const": "info", + "description": "Returns information about the environment server." + }, + { + "const": "status", + "description": "Returns whether server scripts are available on the plan and activated, and the account username and technical domain." + }, + { + "const": "session", + "description": "Returns the current environment session, including selected_domain." + }, + { + "const": "session_state", + "description": "Returns the environment session state." + }, + { + "const": "usage", + "description": "Returns disk and resource usage of the environment." + }, + { + "const": "user_config", + "description": "Returns the environment user configuration." + }, + { + "const": "plugins", + "description": "Lists environment plugins. Optional: offset." + }, + { + "const": "php_get", + "description": "Returns the PHP version and settings." + }, + { + "const": "selector_get", + "description": "Reads a language selector (method get) of plugin phpselector, nodejs_selector or python_selector. Required: plugin, interpreter. Optional: params." + }, + { + "const": "node_list", + "description": "Lists Node.js applications. Optional: offset." + }, + { + "const": "python_list", + "description": "Lists Python applications. Optional: offset." + }, + { + "const": "files_list", + "description": "Lists a directory (default: home) a page at a time. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next. Optional: path, page, per_page, offset, detail, limit." + }, + { + "const": "files_tree", + "description": "Returns the directory tree under path. A tree over 30 KB loses its deepest levels (truncated, branches marked incomplete); a folder with more subfolders than fit keeps the first of them, and next names the files_list call that lists it in full. Optional: path, limit, offset." + }, + { + "const": "files_read", + "description": "Reads a small text file. A binary or larger file is refused; files_publish in apps_write returns a download link for it. Required: path." + }, + { + "const": "files_search", + "description": "Searches file names under path, a page at a time; the search finds up to 1000 files. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next, and incomplete is true when more files may match than the search found. Required: query. Optional: path, page, per_page, offset, detail, limit." + }, + { + "const": "files_disk", + "description": "Returns disk usage of the home directory." + }, + { + "const": "files_archive_list", + "description": "Lists the members of an archive a page at a time. The reply has page, per_page, total, has_more, truncated and next. Required: path. Optional: page, per_page, offset, detail." + }, + { + "const": "db_list", + "description": "Lists MySQL databases. Optional: offset." + }, + { + "const": "db_get", + "description": "Returns one MySQL database (name in database or name). Optional: database, name." + }, + { + "const": "db_info", + "description": "Returns MySQL server information." + }, + { + "const": "db_user", + "description": "Returns one MySQL user (name in dbuser or name). Optional: dbuser, name." + }, + { + "const": "db_users", + "description": "Lists the users of a MySQL database (name in database or name). Optional: database, name, offset." + }, + { + "const": "db_users_all", + "description": "Lists all MySQL users. Optional: offset." + }, + { + "const": "db_user_databases", + "description": "Lists the databases of a MySQL user (name in dbuser or name). Optional: dbuser, name, offset." + }, + { + "const": "ftp_list", + "description": "Lists environment FTP accounts of a domain. Optional: domain, offset." + }, + { + "const": "cron_list", + "description": "Lists cron jobs (each with its cron_id) and cron settings. Optional: offset." + }, + { + "const": "backup_list", + "description": "Lists environment backups. Optional: domain, offset." + }, + { + "const": "login_key_list", + "description": "Lists environment login key records without their values. Optional: offset." + }, + { + "const": "da_login_key_list", + "description": "Lists panel login keys of the environment without secret values. Optional: offset." + }, + { + "const": "da_login_key_get", + "description": "Returns the settings of one panel login key without secret values. Required: key_id. Optional: id." + }, + { + "const": "da_login_key_history", + "description": "Returns the usage history of a panel login key a page at a time. The reply has page, per_page, total, has_more, truncated and next. Required: key_id. Optional: id, page, per_page, offset, detail." + }, + { + "const": "da_login_key_commands", + "description": "Lists the commands a panel login key can be allowed or denied. Optional: offset." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): for files name, folder, type, size, modification time (UTC, ISO 8601) and symlink flag; for other lists the records as they are. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Listing limit."New value: +"files_*: the earlier name of per_page; per_page wins when both are set. files_tree: entries of the tree." - changed
Input schema / properties / offset / descriptionPrevious value: -"Listing offset."New value: +"Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next." - added
Input schema / properties / pageAdded value: +{ + "description": "List page, from 1.", + "type": "number" +} - added
Input schema / properties / per_pageAdded value: +{ + "description": "Records per page: 1-50, 20 by default, larger values count as 50.", + "type": "number" +}
- Changed
content_read5 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "list", - "description": "Lists entries of a module (photo: albums), with paging and filters. Required: module. Optional: id, page, per_page, category, date, pending, user_id, sort." - }, - { - "const": "get", - "description": "Returns one entry. Required: module, id." - }, - { - "const": "fields", - "description": "Lists the entry fields of a module, including custom fields other1-other5. Required: module." - }, - { - "const": "category_list", - "description": "Lists the categories of a module, or returns one category by id. Required: module. Optional: id." - }, - { - "const": "comments_list", - "description": "Lists the comments of an entry. Required: module, id." - }, - { - "const": "comments_all", - "description": "Lists the latest comments of all modules. No module is needed. Optional: page, per_page, tree, sort." - }, - { - "const": "filter_list", - "description": "Lists the entry filters of a module. Required: module. Optional: filter_num, id." - }, - { - "const": "album_list", - "description": "Lists photo albums (module photo). Required: module. Optional: category, page." - }, - { - "const": "channel_list", - "description": "Lists video channels, or returns one by channel_id or id (module video). Required: module. Optional: channel_id, id." - }, - { - "const": "channel_category_list", - "description": "Lists video channel categories (module video). Required: module. Optional: id." - }, - { - "const": "smiles", - "description": "Lists chat smiles (module mchat). Required: module." - } -]New value: +[ + { + "const": "list", + "description": "Lists entries of a module (photo: photos of the albums) a page at a time, with filters. By default entries are brief, without full texts; complete entries come with detail=full, and one complete entry from get by id. The reply has page, per_page, total, has_more, truncated and, while entries remain, next with the paging arguments of the following page. Required: module. Optional: id, page, per_page, offset, detail, category, date, pending, user_id, sort." + }, + { + "const": "get", + "description": "Returns one entry. Required: module, id." + }, + { + "const": "fields", + "description": "Lists the entry fields of a module, including custom fields other1-other5. Required: module. Optional: offset." + }, + { + "const": "category_list", + "description": "Lists the categories of a module, or returns one category by id. Required: module. Optional: id, offset." + }, + { + "const": "comments_list", + "description": "Lists the comments of an entry a page at a time, paged like list. Brief comments by default; detail=full gives complete comments with their replies. Required: module, id. Optional: page, per_page, offset, detail." + }, + { + "const": "comments_all", + "description": "Lists the latest comments of all modules a page at a time, paged like list. No module is needed. Brief comments by default; detail=full gives complete comments. Optional: page, per_page, offset, detail, tree, sort." + }, + { + "const": "filter_list", + "description": "Lists the entry filters of a module. Required: module. Optional: filter_num, id, offset." + }, + { + "const": "album_list", + "description": "Lists the photos of photo albums (module photo), of one album when category is set; paged like list. Required: module. Optional: category, page, per_page, offset, detail." + }, + { + "const": "channel_list", + "description": "Lists video channels, or returns one by channel_id or id (module video). Required: module. Optional: channel_id, id, offset." + }, + { + "const": "channel_category_list", + "description": "Lists video channel categories (module video). Required: module. Optional: id, offset." + }, + { + "const": "smiles", + "description": "Lists chat smiles (module mchat). Required: module. Optional: offset." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): the fields that identify a record, without full texts and HTML; for entries id, title up to 120 characters, status, date added (UTC, ISO 8601), public URL, category id and an excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +} - changed
Input schema / properties / page / descriptionPrevious value: -"List page."New value: +"List page, from 1." - changed
Input schema / properties / per_page / descriptionPrevious value: -"List page size (max 100)."New value: +"Records per page: 1-50, 20 by default, larger values count as 50."
- Changed
files_read6 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "list", - "description": "Lists a folder of the site file manager (default: site root, sorted by name, no filter). Optional: path, filter, sort, order, offset, limit." - }, - { - "const": "info", - "description": "Returns information about a file or folder. Optional: path." - }, - { - "const": "quota", - "description": "Returns the disk quota and the upload limits (size, allowed filters)." - }, - { - "const": "content_get", - "description": "Reads a text file. Other files come back as FM_NOT_TEXT or FM_TOO_LARGE_TO_READ. Required: path." - } -]New value: +[ + { + "const": "list", + "description": "Lists a folder of the site file manager (default: site root, sorted by name, no filter) a page at a time. Brief entries by default; detail=full gives complete entries. The reply has page, per_page, total, has_more, truncated and next. Optional: path, filter, sort, order, page, per_page, offset, detail, limit." + }, + { + "const": "info", + "description": "Returns information about a file or folder. Optional: path." + }, + { + "const": "quota", + "description": "Returns the disk quota and the upload limits (size, allowed filters)." + }, + { + "const": "content_get", + "description": "Reads a text file. Other files come back as FM_NOT_TEXT or FM_TOO_LARGE_TO_READ. Required: path." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): name, path, type, size, objects in a folder and modification time (UTC, ISO 8601). Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"list: slice length. 0 (default) means the rest of the listing."New value: +"list: the earlier name of per_page; per_page wins when both are set, and 0 counts as not set." - changed
Input schema / properties / offset / descriptionPrevious value: -"list: slice start after sorting. Default 0."New value: +"Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next." - added
Input schema / properties / pageAdded value: +{ + "description": "List page, from 1.", + "type": "number" +} - added
Input schema / properties / per_pageAdded value: +{ + "description": "Records per page: 1-50, 20 by default, larger values count as 50.", + "type": "number" +}
- Changed
forum_read5 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "forum_list", - "description": "Lists forums, or the forums under id (or forum_id). Optional: id, forum_id." - }, - { - "const": "forum_get", - "description": "Returns one forum (id in forum_id or id). Optional: forum_id, id." - }, - { - "const": "section_list", - "description": "Lists forum sections, or returns one (id in section_id or id). Optional: section_id, id." - }, - { - "const": "topic_list", - "description": "Lists the topics of a forum. Optional: forum_id, topic_id, page, per_page." - }, - { - "const": "topic_get", - "description": "Returns one topic (id in topic_id or id). Optional: topic_id, id, forum_id." - }, - { - "const": "post_list", - "description": "Lists the posts of a topic. Optional: topic_id, post_id, page, per_page." - }, - { - "const": "post_get", - "description": "Returns one post (id in post_id or id). Optional: post_id, id, topic_id." - }, - { - "const": "poll_list", - "description": "Lists forum polls. Optional: forum_id, poll_id, page, per_page." - }, - { - "const": "poll_get", - "description": "Returns one forum poll (id in poll_id or id). Optional: poll_id, id, forum_id." - }, - { - "const": "poll_results", - "description": "Returns the results of a forum poll (id in poll_id or id). Optional: poll_id, id." - } -]New value: +[ + { + "const": "forum_list", + "description": "Lists forums, or the forums under id (or forum_id). Optional: id, forum_id, offset." + }, + { + "const": "forum_get", + "description": "Returns one forum (id in forum_id or id). Optional: forum_id, id." + }, + { + "const": "section_list", + "description": "Lists forum sections, or returns one (id in section_id or id). Optional: section_id, id, offset." + }, + { + "const": "topic_list", + "description": "Lists the topics of a forum a page at a time. Brief topics by default; detail=full gives complete topics. The reply has page, per_page, total, has_more, truncated and next. Optional: forum_id, topic_id, page, per_page, offset, detail." + }, + { + "const": "topic_get", + "description": "Returns one topic (id in topic_id or id). Optional: topic_id, id, forum_id." + }, + { + "const": "post_list", + "description": "Lists the posts of a topic a page at a time. Brief posts by default, without full texts; detail=full gives complete posts, post_get one complete post. The reply has page, per_page, total, has_more, truncated and next. Optional: topic_id, post_id, page, per_page, offset, detail." + }, + { + "const": "post_get", + "description": "Returns one post (id in post_id or id). Optional: post_id, id, topic_id." + }, + { + "const": "poll_list", + "description": "Lists forum polls a page at a time. Brief polls by default; detail=full gives complete polls. The reply has page, per_page, total, has_more, truncated and next. Optional: forum_id, poll_id, page, per_page, offset, detail." + }, + { + "const": "poll_get", + "description": "Returns one forum poll (id in poll_id or id). Optional: poll_id, id, forum_id." + }, + { + "const": "poll_results", + "description": "Returns the results of a forum poll (id in poll_id or id). Optional: poll_id, id." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): the fields that identify a record, without full texts and HTML; for entries id, title up to 120 characters, status, date added (UTC, ISO 8601), public URL, category id and an excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +} - changed
Input schema / properties / page / descriptionPrevious value: -"List page."New value: +"List page, from 1." - changed
Input schema / properties / per_page / descriptionPrevious value: -"List page size (max 100)."New value: +"Records per page: 1-50, 20 by default, larger values count as 50."
- Changed
modules_read2 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "active_mods", - "description": "Lists the modules installed on the site." - }, - { - "const": "modules_list", - "description": "Lists all modules with their installed and uAPI flags (needs Control Panel access)." - }, - { - "const": "module_status", - "description": "Returns the status of one module (needs Control Panel access). Required: module_code." - }, - { - "const": "quarantine_status", - "description": "Returns the indexing quarantine status of the site." - } -]New value: +[ + { + "const": "active_mods", + "description": "Lists the modules installed on the site. Optional: offset." + }, + { + "const": "modules_list", + "description": "Lists all modules with their installed and uAPI flags (needs Control Panel access). Optional: offset." + }, + { + "const": "module_status", + "description": "Returns the status of one module (needs Control Panel access). Required: module_code." + }, + { + "const": "quarantine_status", + "description": "Returns the indexing quarantine status of the site." + } +] - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +}
- Changed
settings_read2 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "settings_modules", - "description": "Lists the modules whose settings can be read and changed, and whether each one is active on the site (null when not tracked)." - }, - { - "const": "settings_get", - "description": "Returns the current settings of a module (nested). Access keys are shown only as (set) or empty. Required: module." - } -]New value: +[ + { + "const": "settings_modules", + "description": "Lists the modules whose settings can be read and changed, and whether each one is active on the site (null when not tracked). Optional: offset." + }, + { + "const": "settings_get", + "description": "Returns the current settings of a module (nested). Access keys are shown only as (set) or empty. Required: module." + } +] - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +}
- Changed
shop_read6 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "category_list", - "description": "Lists shop categories (children of parent_id when set). Optional: parent_id, pid, get_globals." - }, - { - "const": "list", - "description": "Lists products with paging, sorting and filters: all goods, the wishlist of the current user, or the goods of user_id (view usergoods). Optional: view, user_id, pnum, page, sort, order, f_name, f_brand, f_art, f_price, f_stock, f_status, f_warr, f_weight." - }, - { - "const": "get", - "description": "Returns one product card. Required: id. Optional: cnt, goods_id." - }, - { - "const": "variations_list", - "description": "Lists the variations of a product. Required: id." - }, - { - "const": "variation_get", - "description": "Returns one variation of a product. Required: id, variation_crc." - }, - { - "const": "variation_dict_list", - "description": "Returns one variation dictionary (name and values) by its id. Required: id." - }, - { - "const": "stock_get", - "description": "Returns the stock of a product by option sets. Required: id." - }, - { - "const": "basket_get", - "description": "Returns the basket of the current user, or of user_id. Optional: user_id." - }, - { - "const": "checkout_get", - "description": "Returns the checkout form data for the current basket. Optional: promo_code, custom_delivery_tax." - }, - { - "const": "invoices_list", - "description": "Lists orders with filters. Optional: page, user_id, hide, status, group_courier, payment_id, delivery_id, ids, id, inv_sum, cdate, date." - }, - { - "const": "order_get", - "description": "Returns one order (order hash in order or id). Optional: order, id." - }, - { - "const": "comments_list", - "description": "Lists the comments of a product. Required: id." - }, - { - "const": "currencies", - "description": "Lists shop currencies and rates." - }, - { - "const": "balance_get", - "description": "Returns the balance of a user. Optional: user_id." - } -]New value: +[ + { + "const": "category_list", + "description": "Lists shop categories (children of parent_id when set). Optional: parent_id, pid, get_globals, offset." + }, + { + "const": "list", + "description": "Lists products a page at a time, with sorting and filters: all goods, the wishlist of the current user, or the goods of user_id (view usergoods). By default products are brief, without descriptions; complete products come with detail=full, and one complete product card from get by id. The reply has page, per_page, total, has_more, truncated and, while products remain, next with the paging arguments of the following page. A shop that shows fewer than 5 products a catalog page serves fewer products a list page than per_page asks; the reply per_page names how many, and pages by number stay consecutive. Optional: view, user_id, page, pnum, per_page, offset, detail, sort, order, f_name, f_brand, f_art, f_price, f_stock, f_status, f_warr, f_weight." + }, + { + "const": "get", + "description": "Returns one product card. Required: id. Optional: cnt, goods_id." + }, + { + "const": "variations_list", + "description": "Lists the variations of a product. Required: id. Optional: offset." + }, + { + "const": "variation_get", + "description": "Returns one variation of a product. Required: id, variation_crc." + }, + { + "const": "variation_dict_list", + "description": "Returns one variation dictionary (name and values) by its id. Required: id." + }, + { + "const": "stock_get", + "description": "Returns the stock of a product by option sets. Required: id. Optional: offset." + }, + { + "const": "basket_get", + "description": "Returns the basket of the current user, or of user_id. Optional: user_id." + }, + { + "const": "checkout_get", + "description": "Returns the checkout form data for the current basket. Optional: promo_code, custom_delivery_tax." + }, + { + "const": "invoices_list", + "description": "Lists orders with filters, a page at a time, paged like list. Brief orders by default; detail=full gives complete orders, order_get one complete order. Optional: page, per_page, offset, detail, user_id, hide, status, group_courier, payment_id, delivery_id, ids, id, inv_sum, cdate, date." + }, + { + "const": "order_get", + "description": "Returns one order (order hash in order or id). Optional: order, id." + }, + { + "const": "comments_list", + "description": "Lists the comments of a product a page at a time, paged like list. Brief comments by default; detail=full gives complete comments. Required: id. Optional: page, per_page, offset, detail." + }, + { + "const": "currencies", + "description": "Lists shop currencies and rates. Optional: offset." + }, + { + "const": "balance_get", + "description": "Returns the balance of a user. Optional: user_id." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): the fields that identify a record, without descriptions and HTML; for products id, title up to 120 characters, status (visible or hidden), date added (UTC, ISO 8601), public URL, price, stock, category id and an excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +} - changed
Input schema / properties / page / descriptionPrevious value: -"List page (orders / goods)."New value: +"List page, from 1." - added
Input schema / properties / per_pageAdded value: +{ + "description": "Records per page: 1-50, 20 by default, larger values count as 50.", + "type": "number" +} - changed
Input schema / properties / pnum / descriptionPrevious value: -"Goods list page."New value: +"Goods list page, the earlier name of page; page wins when both are set."
- Changed
subscriptions_read6 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "plans_list", - "description": "Lists tariff plans." - }, - { - "const": "plan_get", - "description": "Returns one tariff plan. Required: plan_id." - }, - { - "const": "plan_stats", - "description": "Returns statistics of a tariff plan. Required: plan_id." - }, - { - "const": "plan_users", - "description": "Lists the users of a tariff plan. Required: plan_id. Optional: p, page, status, expires_before." - }, - { - "const": "legacy_items_list", - "description": "Lists legacy tariffs." - }, - { - "const": "legacy_item_get", - "description": "Returns one legacy tariff (id in id or plan_id). Optional: id, plan_id." - }, - { - "const": "user_subscriptions", - "description": "Lists the subscriptions of a user. Required: user_id. Optional: p, page, status, expires_before." - }, - { - "const": "subscription_get", - "description": "Returns one subscription. Required: subscription_id." - }, - { - "const": "access_check", - "description": "Checks whether a user has access through a plan. Optional: user_id, plan_id." - }, - { - "const": "subscribers_list", - "description": "Lists subscribers, optionally filtered. Optional: p, page, query, plan_id, status, expires_before." - }, - { - "const": "payments_list", - "description": "Lists payments, optionally filtered. Optional: p, page, query, user_id, subscription_id, plan_id, status, date_from, date_to." - }, - { - "const": "payment_get", - "description": "Returns one payment. Required: payment_id." - } -]New value: +[ + { + "const": "plans_list", + "description": "Lists tariff plans. Optional: offset." + }, + { + "const": "plan_get", + "description": "Returns one tariff plan. Required: plan_id." + }, + { + "const": "plan_stats", + "description": "Returns statistics of a tariff plan. Required: plan_id." + }, + { + "const": "plan_users", + "description": "Lists the users of a tariff plan a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: plan_id. Optional: page, p, per_page, offset, detail, status, expires_before." + }, + { + "const": "legacy_items_list", + "description": "Lists legacy tariffs. Optional: offset." + }, + { + "const": "legacy_item_get", + "description": "Returns one legacy tariff (id in id or plan_id). Optional: id, plan_id." + }, + { + "const": "user_subscriptions", + "description": "Lists the subscriptions of a user a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: user_id. Optional: page, p, per_page, offset, detail, status, expires_before." + }, + { + "const": "subscription_get", + "description": "Returns one subscription. Required: subscription_id." + }, + { + "const": "access_check", + "description": "Checks whether a user has access through a plan. Optional: user_id, plan_id." + }, + { + "const": "subscribers_list", + "description": "Lists subscribers, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, plan_id, status, expires_before." + }, + { + "const": "payments_list", + "description": "Lists payments, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, user_id, subscription_id, plan_id, status, date_from, date_to." + }, + { + "const": "payment_get", + "description": "Returns one payment. Required: payment_id." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): id, status, plan, user id and email, dates (UTC, ISO 8601); payments also the amount. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +} - changed
Input schema / properties / p / descriptionPrevious value: -"Page number."New value: +"List page, the earlier name of page; page wins when both are set." - changed
Input schema / properties / page / descriptionPrevious value: -"Synonym for p on list actions."New value: +"List page, from 1." - added
Input schema / properties / per_pageAdded value: +{ + "description": "Records per page: 1-50, 20 by default, larger values count as 50.", + "type": "number" +}
- Changed
templates_read7 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "list_modules", - "description": "Lists the modules that have templates, with their template ids." - }, - { - "const": "get_variables", - "description": "Returns a template together with the variables available in it. Required: module_id, template_id." - }, - { - "const": "read_template", - "description": "Returns the template code and its variables. Required: module_id, template_id." - }, - { - "const": "validate_template", - "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id. Optional: content, html_content, code_search, code_paste." - }, - { - "const": "list_backups", - "description": "Lists template backups." - }, - { - "const": "get_reference", - "description": "Returns the template variables reference (markdown)." - }, - { - "const": "get_guide", - "description": "Returns the template editing guide (markdown)." - }, - { - "const": "get_backup_guide", - "description": "Returns the template backup guide (markdown)." - }, - { - "const": "menu_list", - "description": "Lists site menus." - }, - { - "const": "menu_get", - "description": "Returns one menu with its items. Required: menu_id." - }, - { - "const": "mail_list_forms", - "description": "Lists mail forms." - }, - { - "const": "mail_get_form", - "description": "Returns one mail form. Required: mail_form_id." - }, - { - "const": "mail_list_fields", - "description": "Lists the fields of a mail form. Required: mail_form_id." - }, - { - "const": "mail_get_template", - "description": "Returns the notification email template of a mail form. Required: mail_form_id." - }, - { - "const": "page_list", - "description": "Lists site pages. Optional: page_page, page_per_page." - }, - { - "const": "page_get", - "description": "Returns one site page. Required: page_id." - } -]New value: +[ + { + "const": "list_modules", + "description": "Lists the modules that have templates, with their template ids. Optional: offset." + }, + { + "const": "get_variables", + "description": "Returns a template together with the variables available in it. Required: module_id, template_id." + }, + { + "const": "read_template", + "description": "Returns the template code and its variables. Required: module_id, template_id." + }, + { + "const": "validate_template", + "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id. Optional: content, html_content, code_search, code_paste." + }, + { + "const": "list_backups", + "description": "Lists template backups. Optional: offset." + }, + { + "const": "get_reference", + "description": "Returns the template variables reference (markdown)." + }, + { + "const": "get_guide", + "description": "Returns the template editing guide (markdown)." + }, + { + "const": "get_backup_guide", + "description": "Returns the template backup guide (markdown)." + }, + { + "const": "menu_list", + "description": "Lists site menus. Optional: offset." + }, + { + "const": "menu_get", + "description": "Returns one menu with its items. Required: menu_id." + }, + { + "const": "mail_list_forms", + "description": "Lists mail forms. Optional: offset." + }, + { + "const": "mail_get_form", + "description": "Returns one mail form. Required: mail_form_id." + }, + { + "const": "mail_list_fields", + "description": "Lists the fields of a mail form. Required: mail_form_id. Optional: offset." + }, + { + "const": "mail_get_template", + "description": "Returns the notification email template of a mail form. Required: mail_form_id." + }, + { + "const": "page_list", + "description": "Lists site pages a page at a time. Brief pages by default, without their content; detail=full gives complete pages, page_get one complete page. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, page_page, page_per_page." + }, + { + "const": "page_get", + "description": "Returns one site page. Required: page_id." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): for site pages id, title, status, parent id, public URL, last change and a plain-text excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +} - added
Input schema / properties / pageAdded value: +{ + "description": "List page, from 1.", + "type": "number" +} - changed
Input schema / properties / page_page / descriptionPrevious value: -"Page number of the page list."New value: +"page_list: the earlier name of page; page wins when both are set." - changed
Input schema / properties / page_per_page / descriptionPrevious value: -"Page size of the page list."New value: +"page_list: the earlier name of per_page; per_page wins when both are set." - added
Input schema / properties / per_pageAdded value: +{ + "description": "Records per page: 1-50, 20 by default, larger values count as 50.", + "type": "number" +}
- Changed
tmaker_read2 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "skeleton_guide", - "description": "Returns the skeleton guide (markdown)." - }, - { - "const": "skeleton_rules", - "description": "Returns the placeholder codes allowed in skeleton HTML." - }, - { - "const": "designs_list", - "description": "Lists standard designs." - }, - { - "const": "design_get", - "description": "Returns one standard design (id in design_id or id). Optional: design_id, id." - }, - { - "const": "project_list", - "description": "Lists saved projects." - }, - { - "const": "project_get", - "description": "Returns one saved project (id in project_id or id). Optional: project_id, id." - }, - { - "const": "skeleton_validate", - "description": "Checks skeleton HTML without saving it. Required: tmpl." - } -]New value: +[ + { + "const": "skeleton_guide", + "description": "Returns the skeleton guide (markdown)." + }, + { + "const": "skeleton_rules", + "description": "Returns the placeholder codes allowed in skeleton HTML. Optional: offset." + }, + { + "const": "designs_list", + "description": "Lists standard designs. Optional: offset." + }, + { + "const": "design_get", + "description": "Returns one standard design (id in design_id or id). Optional: design_id, id." + }, + { + "const": "project_list", + "description": "Lists saved projects. Optional: offset." + }, + { + "const": "project_get", + "description": "Returns one saved project (id in project_id or id). Optional: project_id, id." + }, + { + "const": "skeleton_validate", + "description": "Checks skeleton HTML without saving it. Required: tmpl." + } +] - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +}
- Changed
users_read5 fields changed- changed
Input schema / properties / action / oneOfPrevious value: -[ - { - "const": "list", - "description": "Lists site users page by page, optionally filtered by login, id or email. Optional: page, nick, user, user_id, email." - }, - { - "const": "get", - "description": "Returns one user by id, login or email. Optional: user_id, nick, user, email." - }, - { - "const": "groups", - "description": "Lists user groups." - }, - { - "const": "groups_list", - "description": "Lists user groups (same as groups)." - }, - { - "const": "groups_rights", - "description": "Lists the permission codes that a group can have." - }, - { - "const": "group_permissions", - "description": "Returns the permissions of one group (group id in id or gid). Optional: id, gid." - }, - { - "const": "ranks", - "description": "Lists user ranks." - }, - { - "const": "fields", - "description": "Lists user profile fields." - } -]New value: +[ + { + "const": "list", + "description": "Lists site users page by page, optionally filtered by login, id or email. Brief users by default; detail=full gives complete profiles, get one complete user. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, nick, user, user_id, email." + }, + { + "const": "get", + "description": "Returns one user by id, login or email. Optional: user_id, nick, user, email." + }, + { + "const": "groups", + "description": "Lists user groups. Optional: offset." + }, + { + "const": "groups_list", + "description": "Lists user groups (same as groups). Optional: offset." + }, + { + "const": "groups_rights", + "description": "Lists the permission codes that a group can have. Optional: offset." + }, + { + "const": "group_permissions", + "description": "Returns the permissions of one group (group id in id or gid). Optional: id, gid." + }, + { + "const": "ranks", + "description": "Lists user ranks. Optional: offset." + }, + { + "const": "fields", + "description": "Lists user profile fields. Optional: offset." + } +] - added
Input schema / properties / detailAdded value: +{ + "description": "Record form of a paged list. brief (default): id, login, full name, email, group, status (active or banned) and registration date (UTC, ISO 8601). Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.", + "enum": [ + "brief", + "full" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.", + "type": "number" +} - changed
Input schema / properties / page / descriptionPrevious value: -"Page number of the user list."New value: +"List page, from 1." - added
Input schema / properties / per_pageAdded value: +{ + "description": "Records per page: 1-50, 20 by default, larger values count as 50.", + "type": "number" +}
1 tool update
- Changed
skills_tool1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"resolve — match skill by task. catalog — GitHub list. status — check_paths of a skill installation. install — source and target location of a skill. register_usage — site usage tracking (select_site)."New value: +"resolve — match skill by task. catalog — GitHub list. status — check_paths of a skill installation. install — source and target location of a skill. register_usage — site usage tracking (select_site); best effort: recorded=false with a message when tracking is temporarily unavailable."
44 tool updates
- Added
apps_delete - Added
apps_read - Removed
apps_tool - Added
apps_write - Added
content_delete - Added
content_read - Removed
content_tool - Added
content_write - Changed
docs_tool1 field changed- changed
Input schema / properties / url / descriptionPrevious value: -"Direct YAML URL for fetch_spec (https://api.ucoz.net/{module}-openapi.yaml)."New value: +"Direct YAML URL for fetch_spec; only https://api.ucoz.net/{module}-openapi.yaml is accepted."
- Added
files_delete - Added
files_read - Removed
files_tool - Added
files_write - Added
forum_delete - Added
forum_read - Added
forum_write - Added
modules_read - Removed
modules_tool - Added
modules_uninstall - Added
modules_write - Added
settings_read - Removed
settings_tool - Added
settings_write - Added
shop_delete - Added
shop_read - Removed
shop_tool - Added
shop_write - Added
subscriptions_delete - Added
subscriptions_read - Removed
subscriptions_tool - Added
subscriptions_write - Added
templates_delete - Added
templates_read - Removed
templates_tool - Added
templates_write - Added
tmaker_delete - Added
tmaker_publish - Added
tmaker_read - Removed
tmaker_tool - Added
tmaker_write - Added
users_delete - Added
users_read - Removed
users_tool - Added
users_write
1 tool update
- Added
settings_tool
1 tool update
- Changed
skills_tool5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"resolve — match skill by task. catalog — GitHub list. status — local check_paths (host agent verifies). install — install_command for host agent. register_usage — site usage tracking (select_site)."New value: +"resolve — match skill by task. catalog — GitHub list. status — check_paths of a skill installation. install — source and target location of a skill. register_usage — site usage tracking (select_site)." - changed
Input schema / properties / client / descriptionPrevious value: -"IDE client for status/install path hints (default auto → cursor)."New value: +"IDE client for status/install paths (default auto → cursor)." - changed
Input schema / properties / compare / descriptionPrevious value: -"status: include catalog latest_version for update hints."New value: +"status: include catalog latest_version." - removed
Input schema / properties / methodRemoved value: -{ - "description": "install: npx skills add (recommended) or git sparse copy hint.", - "enum": [ - "auto", - "npx", - "copy" - ], - "type": "string" -} - changed
Input schema / properties / skill_path / descriptionPrevious value: -"register_usage only on host: path to SKILL.md (account MCP: prefer skill_id + version)."New value: +"register_usage: path to SKILL.md (alternative to skill_id + version)."
3 tool updates
- Changed
files_tool8 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"list — GET /uapi/files (default path is root, sort=name, no filter). info — GET /uapi/files/info. content_get — GET /uapi/files/content. content_put — PUT /uapi/files/content. quota — GET /uapi/files/quota, no arguments. upload — POST /uapi/files/upload (multipart field file, repeatable). upload_url — POST /uapi/files/upload_url. upload_direct — mint a one-shot curl URL (filename and size; call select_site first). POST the raw file to upload_url. The response is upload_id, filename, and size. Pass that upload_id to content_tool or shop_tool as *_upload_id when updating the material. mkdir — POST /uapi/files/mkdir. rename — POST /uapi/files/rename (one object fails the request; items is always HTTP 200). move — POST /uapi/files/move (one path fails the request; paths is always HTTP 200). delete — DELETE /uapi/files (confirm; missing targets fail the request, otherwise HTTP 200 with results)."New value: +"list — GET /uapi/files (default path is root, sort=name, no filter). info — GET /uapi/files/info. content_get — GET /uapi/files/content. content_put — PUT /uapi/files/content. quota — GET /uapi/files/quota, no arguments. upload — POST /uapi/files/upload (multipart field file, repeatable); bytes come from files/content/content_base64 and from upload_id/upload_ids. upload_url — POST /uapi/files/upload_url. upload_direct — mint a one-shot curl URL (filename and size; call select_site first). POST the raw file to upload_url. The response is upload_id, filename, size, and sha256. Pass that upload_id to action=upload with path to place it in the file manager, or to content_tool or shop_tool as *_upload_id when updating the material. mkdir — POST /uapi/files/mkdir. rename — POST /uapi/files/rename (one object fails the request; items is always HTTP 200). move — POST /uapi/files/move (one path fails the request; paths is always HTTP 200). delete — DELETE /uapi/files (confirm; missing targets fail the request, otherwise HTTP 200 with results)." - changed
Input schema / properties / content_base64 / descriptionPrevious value: -"upload: base64 body of a single binary file when files is omitted."New value: +"upload: standard base64 body of a single binary file when files is omitted. Foreign characters or a truncated length fail the call." - added
Input schema / properties / files / items / properties / sha256Added value: +{ + "description": "Expected SHA-256 hex of this body after decoding.", + "type": "string" +} - added
Input schema / properties / files / items / properties / sizeAdded value: +{ + "description": "Expected byte size of this body after decoding.", + "type": "number" +} - added
Input schema / properties / sha256Added value: +{ + "description": "upload: expected SHA-256 hex of the single top-level body after base64 decoding; a mismatch fails the call.", + "type": "string" +} - changed
Input schema / properties / size / descriptionPrevious value: -"upload_direct: exact byte size of the file that will be POSTed to upload_url (1..16777216). The curl body must match it exactly."New value: +"upload_direct: exact byte size of the file that will be POSTed to upload_url (1..16777216). The curl body must match it exactly. upload: expected byte size of the single top-level body after base64 decoding; a mismatch fails the call." - added
Input schema / properties / upload_idAdded value: +{ + "description": "upload: id from upload_direct whose bytes were already POSTed. Saved into path under its upload_direct filename, or name when it is the only file. Spent only when that item is uploaded; otherwise it stays usable until it expires.", + "type": "string" +} - added
Input schema / properties / upload_idsAdded value: +{ + "description": "upload: several upload_direct ids (a comma-separated string is accepted too), sent after upload_id and inline files. At most 20.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
templates_tool4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Template actions use module_id + template_id. Destructive actions need confirm: true."New value: +"Template actions use module_id + template_id. Destructive actions need confirm: true. update_template / patch_template make an automatic backup (source mcp, rotated) after validation and before saving; the save is refused if that backup fails, and the result carries backup.id. validate_template checks content (or code_search + code_paste) with the same rules as a save, without saving or backing up. create_backup makes a manual backup (source cp, never rotated, refused with LIMIT_REACHED when full) and returns backup.id." - changed
Input schema / properties / code_paste / descriptionPrevious value: -"Replacement fragment (patch_template; empty string deletes match)."New value: +"Replacement fragment (patch_template / validate_template; empty string deletes match)." - changed
Input schema / properties / code_search / descriptionPrevious value: -"Exact fragment to find (patch_template)."New value: +"Exact fragment to find (patch_template, or validate_template to check a patch)." - changed
Input schema / properties / content / descriptionPrevious value: -"Global block HTML (gblock_create) or validate_template body."New value: +"Global block HTML (gblock_create) or full template body to check (validate_template; html_content is accepted too)."
- Changed
tmaker_tool1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"skeleton_guide — markdown guide (no uAPI). skeleton_rules — placeholder codes. designs_list / design_get — standard designs (design_id). project_list / project_get — saved projects (project_id). skeleton_validate / skeleton_archive / project_save* — POST tmpl. skeleton_publish — POST export (confirm; overwrites all site templates). project_delete — DELETE project (confirm)."New value: +"skeleton_guide — markdown guide (no uAPI). skeleton_rules — placeholder codes. designs_list / design_get — standard designs (design_id). project_list / project_get — saved projects (project_id). skeleton_validate / skeleton_archive / project_save* — POST tmpl. skeleton_publish — POST export (confirm; overwrites all site templates; makes an automatic template backup first, source mcp, returned as data.backup; publish is refused if the backup fails). project_delete — DELETE project (confirm)."
3 tool updates
- Changed
content_tool31 fields changed- added
Input schema / properties / archive_base64Added value: +{ + "description": "Base64 archive body with archive_filename (remote upload). Wins over archive_upload_id, archive_site_path, and archive_path.", + "type": "string" +} - added
Input schema / properties / archive_filenameAdded value: +{ + "description": "File name for archive_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / archive_path / descriptionPrevious value: -"Server path for load archive."New value: +"Local MCP server path for load archive. Missing files are an error; remote agents must use archive_base64, archive_upload_id, or archive_site_path." - added
Input schema / properties / archive_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over archive_path.", + "type": "string" +} - added
Input schema / properties / archive_upload_idAdded value: +{ + "description": "upload_id from upload_direct. Wins over archive_site_path and archive_path.", + "type": "string" +} - added
Input schema / properties / cover_base64Added value: +{ + "description": "Base64 cover body with cover_filename (remote upload). Wins over cover_upload_id, cover_site_path, and cover_path.", + "type": "string" +} - added
Input schema / properties / cover_filenameAdded value: +{ + "description": "File name for cover_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / cover_path / descriptionPrevious value: -"Server path for cover upload."New value: +"Local MCP server path for cover upload. Missing files are an error; remote agents must use cover_base64, cover_upload_id, or cover_site_path." - added
Input schema / properties / cover_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over cover_path.", + "type": "string" +} - added
Input schema / properties / cover_upload_idAdded value: +{ + "description": "upload_id from upload_direct. Wins over cover_site_path and cover_path.", + "type": "string" +} - added
Input schema / properties / file_base64Added value: +{ + "description": "Base64 file body with file_filename (remote upload). Wins over file_upload_id, file_site_path, and file_path.", + "type": "string" +} - added
Input schema / properties / file_filenameAdded value: +{ + "description": "File name for file_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / file_path / descriptionPrevious value: -"Server path for file/photo/archive upload."New value: +"Local MCP server path for file/photo/archive upload. Missing files are an error; remote agents must use file_base64, file_upload_id, or file_site_path." - added
Input schema / properties / file_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over file_path.", + "type": "string" +} - added
Input schema / properties / file_upload_idAdded value: +{ + "description": "upload_id from upload_direct. Wins over file_site_path and file_path.", + "type": "string" +} - added
Input schema / properties / image_base64Added value: +{ + "description": "Base64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path.", + "type": "string" +} - added
Input schema / properties / image_filenameAdded value: +{ + "description": "File name for image_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / image_path / descriptionPrevious value: -"Server path for image (entry file1 or category file)."New value: +"Local MCP server path for image (entry file1 or category file). Missing files are an error; remote agents must use image_base64, image_upload_id, or image_site_path." - added
Input schema / properties / image_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over image_path.", + "type": "string" +} - added
Input schema / properties / image_upload_idAdded value: +{ + "description": "upload_id from upload_direct for the first material image (multipart file1). Wins over image_site_path and image_path.", + "type": "string" +} - added
Input schema / properties / image_upload_idsAdded value: +{ + "description": "Comma-separated upload_id values from upload_direct. They fill material image slots file1, file2, and so on, after image_upload_id when that is also set. At most 50.", + "type": "string" +} - added
Input schema / properties / photo_base64Added value: +{ + "description": "Base64 photo body with photo_filename (remote upload). Wins over photo_upload_id, photo_site_path, and photo_path.", + "type": "string" +} - added
Input schema / properties / photo_filenameAdded value: +{ + "description": "File name for photo_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / photo_path / descriptionPrevious value: -"Server path for photo upload (multipart)."New value: +"Local MCP server path for photo upload (multipart). Missing files are an error; remote agents must use photo_base64, photo_upload_id, or photo_site_path." - added
Input schema / properties / photo_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over photo_path.", + "type": "string" +} - added
Input schema / properties / photo_upload_idAdded value: +{ + "description": "upload_id from upload_direct. Wins over photo_site_path and photo_path.", + "type": "string" +} - added
Input schema / properties / screenshot_base64Added value: +{ + "description": "Base64 screenshot body with screenshot_filename (remote upload). Wins over screenshot_upload_id, screenshot_site_path, and screenshot_path.", + "type": "string" +} - added
Input schema / properties / screenshot_filenameAdded value: +{ + "description": "File name for screenshot_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / screenshot_path / descriptionPrevious value: -"Server path for load/video screenshot."New value: +"Local MCP server path for load/video screenshot. Missing files are an error; remote agents must use screenshot_base64, screenshot_upload_id, or screenshot_site_path." - added
Input schema / properties / screenshot_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over screenshot_path.", + "type": "string" +} - added
Input schema / properties / screenshot_upload_idAdded value: +{ + "description": "upload_id from upload_direct. Wins over screenshot_site_path and screenshot_path.", + "type": "string" +}
- Changed
files_tool4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"list — GET /uapi/files (default path is root, sort=name, no filter). info — GET /uapi/files/info. content_get — GET /uapi/files/content. content_put — PUT /uapi/files/content. quota — GET /uapi/files/quota, no arguments. upload — POST /uapi/files/upload (multipart field file, repeatable). upload_url — POST /uapi/files/upload_url. mkdir — POST /uapi/files/mkdir. rename — POST /uapi/files/rename (one object fails the request; items is always HTTP 200). move — POST /uapi/files/move (one path fails the request; paths is always HTTP 200). delete — DELETE /uapi/files (confirm; missing targets fail the request, otherwise HTTP 200 with results)."New value: +"list — GET /uapi/files (default path is root, sort=name, no filter). info — GET /uapi/files/info. content_get — GET /uapi/files/content. content_put — PUT /uapi/files/content. quota — GET /uapi/files/quota, no arguments. upload — POST /uapi/files/upload (multipart field file, repeatable). upload_url — POST /uapi/files/upload_url. upload_direct — mint a one-shot curl URL (filename and size; call select_site first). POST the raw file to upload_url. The response is upload_id, filename, and size. Pass that upload_id to content_tool or shop_tool as *_upload_id when updating the material. mkdir — POST /uapi/files/mkdir. rename — POST /uapi/files/rename (one object fails the request; items is always HTTP 200). move — POST /uapi/files/move (one path fails the request; paths is always HTTP 200). delete — DELETE /uapi/files (confirm; missing targets fail the request, otherwise HTTP 200 with results)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "info", - "content_get", - "content_put", - "quota", - "upload", - "upload_url", - "mkdir", - "rename", - "move", - "delete" -]New value: +[ + "list", + "info", + "content_get", + "content_put", + "quota", + "upload", + "upload_url", + "upload_direct", + "mkdir", + "rename", + "move", + "delete" +] - changed
Input schema / properties / filename / descriptionPrevious value: -"upload: original name of a single file (multipart filename). Falls back to name."New value: +"upload and upload_direct: original file name (multipart filename). Falls back to name." - added
Input schema / properties / sizeAdded value: +{ + "description": "upload_direct: exact byte size of the file that will be POSTed to upload_url (1..16777216). The curl body must match it exactly.", + "type": "number" +}
- Changed
shop_tool14 fields changed- added
Input schema / properties / file_base64Added value: +{ + "description": "Synonym for image_base64.", + "type": "string" +} - added
Input schema / properties / file_filenameAdded value: +{ + "description": "Synonym for image_filename.", + "type": "string" +} - changed
Input schema / properties / file_path / descriptionPrevious value: -"Synonym for image_path."New value: +"Synonym for image_path (local MCP server path)." - added
Input schema / properties / file_site_pathAdded value: +{ + "description": "Synonym for image_site_path.", + "type": "string" +} - added
Input schema / properties / file_upload_idAdded value: +{ + "description": "Synonym for image_upload_id.", + "type": "string" +} - added
Input schema / properties / image_base64Added value: +{ + "description": "Base64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path.", + "type": "string" +} - added
Input schema / properties / image_filenameAdded value: +{ + "description": "File name for image_base64, with extension.", + "type": "string" +} - changed
Input schema / properties / image_path / descriptionPrevious value: -"Server path for image upload."New value: +"Local MCP server path for image upload. Missing files are an error; remote agents must use image_base64, image_upload_id, or image_site_path." - changed
Input schema / properties / image_paths / descriptionPrevious value: -"Comma-separated local paths (img_add)."New value: +"Comma-separated local MCP server paths (img_add). Missing files are an error." - added
Input schema / properties / image_site_pathAdded value: +{ + "description": "File already on the site (img/x.jpg or its full site URL). Wins over image_path.", + "type": "string" +} - added
Input schema / properties / image_site_pathsAdded value: +{ + "description": "Comma-separated site files for img_add (img/x.jpg or full site URLs).", + "type": "string" +} - added
Input schema / properties / image_upload_idAdded value: +{ + "description": "upload_id from upload_direct. Wins over image_site_path and image_path.", + "type": "string" +} - added
Input schema / properties / image_upload_idsAdded value: +{ + "description": "Comma-separated upload_id values from upload_direct for img_add.", + "type": "string" +} - added
Input schema / properties / imagesAdded value: +{ + "description": "Files for img_add (remote upload). Each item is { filename, content_base64 }, { upload_id }, or { site_path }. Appended as file_add_N after the image_*/file_* slots.", + "items": { + "properties": { + "content_base64": { + "description": "Base64 file body.", + "type": "string" + }, + "filename": { + "description": "File name with extension (content_base64 items).", + "type": "string" + }, + "site_path": { + "description": "File already on the site (img/x.jpg or its full site URL).", + "type": "string" + }, + "upload_id": { + "description": "upload_id from upload_direct.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
1 tool update
- Changed
content_tool3 fields changed- changed
Input schema / properties / meta_description / descriptionPrevious value: -"Meta description."New value: +"Meta description for an entry or a module category." - changed
Input schema / properties / meta_keywords / descriptionPrevious value: -"Meta keywords."New value: +"Meta keywords for an entry or a module category." - changed
Input schema / properties / meta_title / descriptionPrevious value: -"Meta title."New value: +"Meta title for an entry or a module category."
1 tool update
- Added
apps_tool
14 tool updates
- First observed
content_tool - First observed
create_site - First observed
docs_tool - First observed
files_tool - First observed
ftp_tool - First observed
list_sites - First observed
modules_tool - First observed
select_site - First observed
shop_tool - First observed
skills_tool - First observed
subscriptions_tool - First observed
templates_tool - First observed
tmaker_tool - First observed
users_tool
Related MCP Connectors
Manage your NanoCart store from any AI agent: products, orders, coupons, subscribers, reports.
Manage your WordPress site from your AI assistant: posts, pages, media, comments and WooCommerce.
Let AI assistants manage an Appset website: pages, blog posts, products, services and bookings.
Manage a WordPress site from your AI assistant: read, search, propose edits, Search Console data.
Related MCP Servers
- FlicenseCqualityCmaintenanceEnables AI agents to manage BeTheme-powered WordPress sites, including building pages with BeBuilder, configuring templates, handling plugins, and administering WooCommerce.21-
- AlicenseCqualityDmaintenanceEnables AI to manage WordPress sites with 190+ tools for complete control over content, themes, plugins, files, and more.10018 npmMIT

Zarla MCP serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI assistants to build, edit, preview, and publish websites through natural language, including managing pages, designs, products, and site publishing.MIT- AlicenseNot gradedqualityBmaintenanceLets AI assistants manage a self-hosted content hub: create, edit, publish, and update articles across nine platforms, refresh account article lists, and sync changes through natural language.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.