uCoz
Server Details
Manage uCoz sites from an AI assistant: templates, content, shop, users, and files.
- Status
- Healthy
- Uptime
- 70.5% over 21 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
TDQS
Scored across 15 tools
Tools are organized as distinct domain containers (content, shop, users, templates, files, ftp, subscriptions), and descriptions explicitly cross-reference boundaries with 'Not X' clarifications. A few overlaps remain: modules_tool vs apps_tool (panel modules vs server scripts environment) and content_tool vs templates_tool page_* vs tmaker_tool require careful reading to separate.
12 of 15 tools follow a consistent noun_tool pattern (content_tool, shop_tool, users_tool), while the three site-lifecycle tools use verb_noun (create_site, list_sites, select_site). The split is meaningful rather than chaotic, but it is not a single uniform convention.
15 tools sits within the well-scoped 3-15 range and each container earns its place by mapping to a real uCoz domain (shop, content, users, templates, subscriptions, apps, files, ftp). No redundant or filler tools.
Coverage is broad: site lifecycle (list/create/select), files, FTP, content, shop, users, templates, tmaker, modules, subscriptions, apps, plus skills and a docs fallback. The main gap is that module management is split between modules_tool (install) and scattered dedicated tools, with no unified update/delete surface.
Available Tools
15 toolsapps_toolAInspect
Server scripts environment on the selected site (call select_site first). Not modules_tool (panel modules), not files_tool or ftp_tool (the site storefront). uAPI: status, activate, visitor encryption key, login keys. Environment (DirectAdmin): session, files, archives, MySQL, PHP/Node/Python, FTP, cron, account backup, phpMyAdmin SSO. Order: get_guide, status, ensure_ready (confirm only after the user approves creating the account). File paths are relative to the environment home. Do not prefix /home and do not invent folders from status.domain; use session selected_domain or files_list path=domains. The download link uses the technical domain public_html via https://{site}/apps/mcp_dl/.... Large and binary files return that public URL instead of bytes. SQL export/import returns a phpMyAdmin link and does not send the dump. Login key main is stored for this site and is not included in the response. MySQL names are prefixed with {username}. FTP create uses type=ftp. Cron delete uses select0 (cron_id from cron_list). confirm:true is required for activate, key rotation/deletion, file/db/app removal, cron/ftp deletion, backup, and legacy file edit.
| 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 | Home-relative file path. Not /home/... . | |
| perm | No | Permission bits as a number, for example 644. | |
| user | No | FTP username without @domain. | |
| hosts | No | MySQL host patterns. | |
| limit | No | Listing limit. | |
| 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. | |
| query | No | File name query (files_search). | |
| trash | No | Move to trash instead of deleting. | |
| action | Yes | Operation. get_guide explains the order of calls. | |
| 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. | |
| offset | No | Listing offset. | |
| params | No | Extra CloudLinux params. PHP extension changes were rejected on the uCoz test environment. | |
| plugin | No | CloudLinux plugin for selector: 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 | Required after explicit user approval for destructive actions and activate. | |
| content | No | UTF-8 file text for files_write, files_patch, or files_legacy_edit. | |
| cron_id | No | Cron id from cron_list, for example 000. Sent as select0. | |
| members | No | Archive member names. Empty means all. | |
| 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. | |
| 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}/.... | |
| cron_ids | No | Several cron ids to delete (select0, select1, ...). | |
| 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 DirectAdmin login key. 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 | DirectAdmin login key may open the panel. Defaults to false. confirm is required when true. | |
| destination | No | Home-relative destination path. | |
| entry_point | No | Python WSGI callable inside the startup file (CloudLinux entry-point), for example application. A value ending in .py is sent as startup-file when startup_file is omitted. | |
| interpreter | No | CloudLinux interpreter for selector: php, nodejs, or python. | |
| new_password | No | Replacement database password (at least 8 characters). | |
| startup_file | No | CloudLinux startup-file. Node default app.js. Python default passenger_wsgi.py. Required by the Python interpreter. | |
| deny_commands | No | DirectAdmin login key command deny list. | |
| allow_commands | No | DirectAdmin login key command allow list. | |
| allow_networks | No | DirectAdmin login key network allow list. | |
| destination_dir | No | Home-relative destination directory for copy-to, move-to, and extract. | |
| selector_method | No | CloudLinux method for selector: get, set, create, start, stop, restart, destroy, install-modules. | |
| current_password | No | Current password, only if a DirectAdmin login-key call requires it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses confirm:true requirements for a concrete list of destructive actions, that login key 'main' is stored but omitted from responses, that SQL export/import returns a phpMyAdmin link rather than a dump, and that large/binary files return a public URL instead of bytes. Remaining gaps (rate limits, per-action side effects) are minor against how much non-obvious behavior is already surfaced.
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?
Dense and telegraphic, but nearly every clause carries a distinct constraint (path rules, download link domain, MySQL prefixing, confirm list) rather than filler. Front-loading the scope and sibling exclusions before the caveat pile-up is the right structure; the fragment style is terse but hard to scan.
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 58-parameter, 95-action tool with no annotations and no output schema, the description covers setup order, path semantics, response quirks, and destructive-action gating, and points to get_guide for the rest. Given the complexity, it is complete enough to call safely, though per-action return behavior is necessarily 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 is unusually detailed, so the baseline is 3. The description's parameter notes ('FTP create uses type=ftp', 'Cron delete uses select0', path-prefix rules) largely restate what the schema already encodes in select0/cron_id/name 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 states a specific domain (server scripts environment on the selected site) and explicitly rules out the three nearest siblings: modules_tool, files_tool, and ftp_tool. What holds it below 5 is the sheer breadth – 95 enum actions spanning uAPI, DirectAdmin env, MySQL, files, cron, FTP, Node/Python – so 'what it does' is clear as a category but diffuse as a single verb+resource.
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?
Provides real sequencing guidance ('call select_site first', 'Order: get_guide, status, ensure_ready') and predicates prerequisites on user approval. It does not give per-action when-to-use guidance for the 95 operations, but the get_guide pointer and the confirm gating cover the main routing decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_toolInspect
Content modules on the selected site (call select_site first). news/blog/publ/board/photo/video/faq/dir/load/gb/stuff/forum/mchat/polls. Not modules_tool, templates_tool page_*, users_tool, or shop_tool. Proxies to site uAPI with a server-minted Bearer key. File slots accept inline bytes (_base64 with _filename), a staged upload_direct id (_upload_id), a file already on the site (_site_path), or a local MCP server path (*_path); remote agents must use *_base64, *_upload_id, or *_site_path because they cannot write to the MCP server host.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Record, category, comment, or forum entity id. | |
| url | No | mchat author url field. | |
| www | No | Author website. | |
| date | No | List filter date yyyy-mm-dd or yyyy. | |
| mark | No | Guestbook rating: 1 good, 2 bad. | |
| name | No | Category, forum, section, or channel name. | |
| nfid | No | Target forum id (move/split). | |
| page | No | List page. | |
| sort | No | List sort asc|desc. | |
| tags | No | Comma-separated tags. | |
| tree | No | comments_all: yes tree / no flat. | |
| vote | No | Poll vote index(es), comma-separated. | |
| 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 | Content action. Destructive actions need confirm: true after user approval. | |
| active | No | polls update: yes|no. | |
| answer | No | FAQ answer. | |
| author | No | Author nick. | |
| closed | No | 1 = create closed topic. | |
| fields | No | Extra body keys not listed as top-level params. | |
| module | No | Module code. Not required for comments_all. | |
| 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. | |
| answer1 | No | polls add: first answer. | |
| answer2 | No | polls add: second answer. | |
| answers | No | Poll answers (| for forum, comma for site polls). | |
| confirm | No | Required for destructive actions after user approval. | |
| custom1 | No | mchat custom field 1. | |
| custom2 | No | mchat custom field 2. | |
| message | No | Full text (entry, comment, post). Use message_type=html when formatted. | |
| pending | No | 1 = moderation / pending-only list. | |
| poll_id | No | Poll id (forum or site polls). | |
| post_id | No | Forum post id. | |
| 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. | |
| forum_id | No | Forum id. | |
| password | No | Closed forum password. | |
| per_page | No | List page size (max 100). | |
| pollonly | No | 1 = poll-only mode. | |
| polltime | No | Poll duration, e.g. "1 week". | |
| position | No | Category position. | |
| post_ids | No | Comma-separated post ids. | |
| question | No | FAQ question text. | |
| topic_id | No | Topic id. | |
| 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. | |
| parent_id | No | Parent comment id. | |
| pollmulty | No | 1 = multi-select poll. | |
| subscribe | No | 1 = subscribe to comments. | |
| target_id | No | Join/move target id. | |
| 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. | |
| section_id | No | Forum section id. | |
| access2page | No | Category page access group ids. | |
| description | No | Short description / FAQ question. Use description_type=html when formatted. | |
| file_base64 | No | Base64 file body with file_filename (remote upload). Wins over file_upload_id, file_site_path, and file_path. | |
| 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. | |
| 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 | Message format. | |
| 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 | Description format. | |
| 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. |
create_siteAInspect
Create a new site under the authorized account, run first-login activation, and select it for this MCP session. Does not replace the existing Control Panel flow.
| 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?
With no annotations, the description carries the full burden and usefully discloses non-obvious behaviors: first-login activation, automatic selection for the MCP session, and that it does not replace the Control Panel. However, it still omits permission requirements, error cases, and whether creation is reversible or how it affects existing sites.
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 with no filler: the first front-loads the action and side effects, and the second adds a relevant limitation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with full parameter schema coverage but no annotations or output schema, the description covers the core operation and key side effects. It is nearly complete, though it could mention auth scope details or failure behavior.
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 three parameters, including the enum mapping for dom and the format for addr. The description adds no additional parameter meaning, which is acceptable given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Create) and resource (site), and it also names two important side effects: first-login activation and session selection. This distinguishes it from siblings like select_site and list_sites without needing their schemas.
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 the tool is for creating a new site under the authorized account, but it does not explicitly state when to use it versus alternatives such as select_site or list_sites. The note about the Control Panel flow is contextual, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_toolAInspect
Fallback OpenAPI YAML reference (api.ucoz.net/{module}-openapi.yaml). Use only when a rare uAPI key is missing from content_tool / users_tool / shop_tool / … schemas. Does not require select_site. list — catalog; search — YAML fragments; fetch_spec — full spec.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Direct YAML URL for fetch_spec (https://api.ucoz.net/{module}-openapi.yaml). | |
| 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?
No annotations are provided, so the description carries the full disclosure burden. It does add real context: this is a fallback source, it needs no select_site, and each action maps to a scope of output (catalog vs fragments vs full spec). However it says nothing about read-only nature, caching, rate limits, or response size for full spec fetches, which is material for a fetch-heavy 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?
Three short, front-loaded sentences: the resource and location first, then the fallback routing rule, then the action glossary. Dense but every clause earns its place. The telegraphic style ('… schemas', 'list — catalog') is terse but 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 5-parameter lookup tool with no output schema and full schema coverage, the description supplies the routing context (when it is the right tool) and the action semantics an agent needs. Absent only secondary detail like caching or response size, which is not required to call it correctly.
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 every parameter (url, limit, query, action, module) is already documented in the schema, including the action enum semantics and the module examples. The description restates the action breakdown rather than adding syntax, format, or edge-case meaning beyond it. 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 resource (the OpenAPI YAML reference at api.ucoz.net/{module}-openapi.yaml) and frames it as a fallback, distinguishing it from the primary content_tool/users_tool/shop_tool schemas. The three action verbs (list/search/fetch_spec) are enumerated, so an agent knows what it can do. It stops short of a single crisp verb+resource statement, but purpose is clearly inferable.
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 an explicit when-to-use condition ('Use only when a rare uAPI key is missing from content_tool / users_tool / shop_tool / … schemas'), which is the strongest form of routing guidance available. It also adds a prerequisite note ('Does not require select_site'), useful given select_site is a sibling tool. It lacks explicit when-not-to-use beyond the fallback framing, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_toolInspect
Site file manager on the selected site (call select_site first). Proxies to /uapi/files with a server-minted Bearer key. Path is a parameter, never a URL suffix. Empty path is the site root, except content_get, content_put, and mkdir, where the API rejects it. Path bytes are only A-Z a-z 0-9 . _ / -; segments cannot be empty, ".", "..", or start with a dot. Batch upload, upload_url, rename with items, move with paths, and delete return the API body with results even when an item has state=error. A tool error is only a failed whole request (error.code). Read limits with action=quota; do not hardcode them. Shell fast path for binaries: never read binary files into model context. Mint upload_direct, POST raw bytes with curl to its upload_url, then pass the returned upload_id to action=upload with path (file manager) or to the module update as *_upload_id. Inline content_base64 is for small files only; large base64 produced by a model arrives truncated. Pass size and sha256 of the local file with inline bodies: a mismatch fails the call before anything is stored, and a successful upload returns sent with both. content_get reads text files only; anything else comes back as FM_NOT_TEXT or FM_TOO_LARGE_TO_READ.
| 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. Empty string is the site root. Folder for list, info, upload, upload_url, and move destination context; file for content_*; 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. | |
| sort | No | list: name (default), size, or mtime. Anything else is treated as name by the API. | |
| 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 API always returns HTTP 200 and results, even if name is also set. | |
| limit | No | list: slice length. 0 (default) means the rest of the listing. | |
| order | No | list: asc (default). Only desc changes direction. | |
| paths | No | move: sources to move; a non-empty list ignores path and always returns HTTP 200. delete: targets, together with path. Items are clean paths. | |
| action | Yes | 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). | |
| create | No | content_put: create the file when it does not exist. Default false. Parent folder must already exist. | |
| filter | No | list: a quota.limits.filters name, or a comma-separated extension list (png,jpg). Unknown names are ignored by the API. | |
| offset | No | list: slice start after sorting. Default 0. | |
| sha256 | No | upload: expected SHA-256 hex of the single top-level body after base64 decoding; a mismatch fails the call. | |
| confirm | No | Required for delete after explicit user approval. | |
| 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. Foreign characters or a truncated length fail the call. |
ftp_toolAInspect
FTP password management on the selected site (call select_site first). Proxies to /uapi/ftp_password (GET/POST/PUT/DELETE). Requires CP access on the site API key (can_use_cp). Account MCP does not run file FTP (list/read/write/upload) — use files_tool for the site file manager. After ftp_password_set or ftp_password_change the response may include ftp_password in plain text — save it immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ftp_password_get — connection info without password (GET). ftp_password_set — set password when ftp_password_set=0 (POST). ftp_password_change — change existing password when ftp_password_set=1 (PUT). ftp_password_reset — clear password (DELETE; confirm required). | |
| confirm | No | Required for ftp_password_reset after explicit user approval. | |
| password | No | Synonym for ftp_password (uAPI body field name). | |
| ftp_password | No | New FTP password for ftp_password_set / ftp_password_change. [a-zA-Z0-9_-]{6,15}. Synonym: password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the required authorization ('Requires CP access on the site API key (can_use_cp)'), the upstream endpoint that is proxied, and a critical output trait ('the response may include ftp_password in plain text — save it immediately'). The sensitive-return warning is exactly the kind of context structured fields cannot convey.
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?
Dense but front-loaded: purpose first, then routing, then auth, then the plain-text warning. Each sentence carries distinct information with no filler, though the run-on nature of the first sentence slightly reduces readability.
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 4-parameter mutation tool with no annotations and no output schema, the description covers prerequisite ordering, authorization, the upstream proxy target, sibling routing, and return-value handling. An agent has everything needed to call it correctly.
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 each of the four parameters (including the enum and the password synonym) is already documented. The description reinforces the action semantics and notes the plain-text return for set/change, but adds no syntax or format detail beyond the schema. 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?
States a specific resource and scope ('FTP password management on the selected site') rather than restating the tool name. It explicitly distinguishes itself from siblings by declaring that files_tool, not this tool, handles file FTP operations. An agent can place it against files_tool and select_site without opening any 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 an explicit prerequisite ('call select_site first') and a clear negative route ('Account MCP does not run file FTP... use files_tool'). The action mapping (set=POST when unset, change=PUT when set, reset=DELETE with confirmation) tells the agent exactly when each mode applies. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesBInspect
List sites owned by the authorized uCoz account (GUID).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden. Beyond implying an authorization requirement via 'authorized account (GUID)', it says nothing about result size, pagination, ordering, or whether the call has side 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?
A single front-loaded sentence with no filler. It is appropriately sized for the operation, though it is minimal enough that it could have carried one more clause of useful context at no cost to clarity.
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 zero-parameter listing tool with no output schema, the description is minimally adequate but leaves the return shape, scope limits, and result volume unstated. Nothing here would cause a wrong invocation, but an agent knows little about what it will get back.
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 there is nothing for the description to disambiguate. The baseline for a parameterless tool 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 verb ('List') plus resource ('sites') and narrows scope to the authorized account, so the purpose is unambiguous. It does not distinguish itself from near-siblings such as select_site or create_site, which is the only gap.
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 versus select_site or create_site, nor any stated prerequisite beyond 'authorized'. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modules_toolAInspect
Site modules on the currently selected site (call select_site first). Proxies to the site uAPI with a server-minted Bearer key; the client never sees sk_live.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | active_mods — installed modules (GET /uapi/active_mods). modules_list — full catalog with active/api_enabled (GET /uapi/modules; CP access). module_status — one module (GET /uapi/modules/{module}; module_code; CP access). module_install — POST /uapi/modules/{module}. module_uninstall — DELETE (module_code + confirm). module_enable_uapi / module_disable_uapi — POST /uapi/{module}/enableuapi|disableuapi. quarantine_status — GET /uapi/quarantine. quarantine_unlock — POST unlock (confirm). | |
| confirm | No | Required for module_uninstall and quarantine_unlock after explicit user approval. | |
| module_code | No | Lowercase module identifier. Required for module_status, module_install, module_uninstall, module_enable_uapi, module_disable_uapi. Do not guess: take it from modules_list (field module) or active_mods (field code) on the selected site first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the auth architecture (server-minted Bearer key, 'the client never sees sk_live'), which is genuine context beyond the schema. However, it does not characterize which actions are destructive (uninstall, disable), what they affect, or rate/permission constraints, leaving the mutating behaviors underspecified.
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 tight sentences with the prerequisite front-loaded and the security note appended. Every clause carries information; nothing is redundant 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 9-action tool with no annotations and no output schema, the description leans heavily on the enum descriptions to convey per-action behavior. It covers hosting/auth context but omits which actions are read-only versus mutating and what each returns, so it is adequate rather than 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 all three parameters are thoroughly documented in the schema itself, including the per-action endpoint mapping and the confirm/module_code requirements. The description adds the select_site sequencing, but otherwise repeats the schema's burden; 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?
States the resource ('Site modules') and scope ('on the currently selected site'), plus a prerequisite. It is clear what the tool operates on, but the verb is weak (the noun 'modules' is used as an action) and it does not differentiate itself from siblings such as templates_tool or content_tool beyond the word 'modules'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'call select_site first', establishing a hard prerequisite, and the module_code parameter tells the agent to source identifiers from modules_list or active_mods rather than guessing. It does not say when to prefer this tool over siblings, but for a multi-action admin tool the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_siteBInspect
Remember a site from list_sites as the current site for this authorization.
| 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?
With no annotations, the description carries the full burden. It adds meaningful context by scoping the selection 'for this authorization' and describing it as setting a 'current' state, hinting at session-scoped persistence. It says nothing about overwriting a prior selection, validation failures, or permissions, so it is only partially adequate for a stateful mutation.
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 sentence, front-loaded with the verb and the outcome, with no filler. It is appropriately sized, though it has room to add one clause of behavioral detail without becoming bloated.
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 stateful tool with no annotations and no output schema, the description covers purpose and scope but omits behavior on repeat calls, failure modes, and whether any confirmation is returned. Adequate as a minimum viable definition but with clear 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 coverage is 100% for the single site_id parameter, so the schema already carries the semantics and the baseline is 3. The description restates that the site comes from list_sites, which duplicates rather than extends the schema's own 'Numeric site id from list_sites'.
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 action ('Remember a site ... as the current site'), naming the resource and the resulting state, which separates it from create_site (creates) and list_sites (enumerates). It does not explicitly name those siblings, so it falls short of the 5 bar.
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 reference to list_sites implies the intended workflow (pick an id from that tool, then select it), which is useful implied guidance. However, it never states when this should be called versus other tools, whether a site must already be selected, or what happens if it is called twice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_toolInspect
Internet shop on the selected site (call select_site first). Categories, goods, images, variations, stock, basket, checkout, orders, currencies, balance, product comments. Not content_tool, modules_tool, or templates_tool. Proxies to /uapi/shop/* with a server-minted Bearer key. Image slots accept inline bytes (_base64 with _filename), a file already on the site (_site_path), or a local MCP server path (_path); remote agents must use *_base64, *_upload_id, or *_site_path because they cannot write to the MCP server host.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Goods, category, comment, or basket line id. | |
| art | No | SKU / article. | |
| cnt | No | Basket quantity. | |
| del | No | 1 = delete category image. | |
| ids | No | Comma-separated ids (invoice_*, stock_remove). | |
| img | No | Image slot number. | |
| 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 | ||
| date | No | invoices_list created period date1|date2. | |
| dscr | No | Full description; pass html_dscr=1 when HTML. | |
| hide | No | Hide flag or invoices_list group. | |
| mode | No | Sub-action mode (category, basket, checkout, variation_dict). | |
| name | No | Goods or category name. | |
| note | No | ||
| page | No | List page (orders / goods). | |
| pnum | No | Goods list page. | |
| pros | No | ||
| sort | No | Goods list sort field. | |
| 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. | |
| cdate | No | invoices_list delivery period date1|date2. | |
| clear | No | 1 = clear wishlist (get). | |
| f_art | No | ||
| 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 | Shop action. Destructive actions need confirm: true after user approval. | |
| amount | No | Balance amount. | |
| cat_id | No | Goods category id (add/update). | |
| f_name | No | Goods name filter (plain; MCP encodes Base64). | |
| f_warr | No | ||
| fields | No | Extra form keys (checkout field_N, stock_*, var_*, cnt_REC_ID, …). | |
| 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. | |
| method | No | Usually submit for add/update goods. | |
| status | No | Order status code. | |
| undisc | No | ||
| values | No | variation_dict values comma-separated (S,M,L). | |
| weight | No | ||
| confirm | No | Required for destructive actions after user approval. | |
| del_all | No | 1 = delete all images (img_del). | |
| f_brand | No | ||
| f_price | No | Price filter MIN|MAX|CUR. | |
| f_stock | No | ||
| inv_sum | No | invoices_list sum1|sum2. | |
| 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. | |
| f_status | No | ||
| f_weight | No | ||
| goods_id | No | Wishlist goods id (get). | |
| 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. | |
| get_globals | No | 1 = global categories in category_list. | |
| 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. | |
| files_sequence | No | Image order after single img_del. | |
| 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 |
skills_toolInspect
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. | |
| limit | No | resolve: max alternatives (1–7, default 3). | |
| 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). | |
| 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). |
subscriptions_toolAInspect
Subscriptions module on the selected site (call select_site first). Tariff plans, user subscriptions, access checks, payments. Not shop_tool, users_tool, or content_tool. Module must be installed via modules_tool. Proxies to /uapi/subscriptions/* with a server-minted Bearer key.
| Name | Required | Description | Default |
|---|---|---|---|
| p | No | Page number (OpenAPI p). | |
| id | No | Legacy tariff id for /item endpoints. | |
| page | No | Synonym for p on list actions. | |
| type | No | Plan type: 0 free, 1 one-time, 2 recurring, 3 donate. | |
| price | No | ||
| query | No | Search query for subscribers/payments lists. | |
| title | No | Plan title (plan_add/update). | |
| action | Yes | Subscriptions action. Destructive actions need confirm: true after user approval. | |
| amount | No | Payment amount in minor currency units. | |
| fields | No | Extra form fields per OpenAPI. | |
| period | No | Recurring period in days. | |
| status | No | Status filter (comma-separated). | |
| confirm | No | Required for destructive actions after user approval. | |
| date_to | No | Payment date upper bound (unix). | |
| 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. | |
| date_from | No | Payment date lower bound (unix). | |
| 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 | ||
| expires_before | No | Unix timestamp filter. | |
| 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?
No annotations are provided, so the description carries the full burden. It usefully discloses the transport ('Proxies to /uapi/subscriptions/* with a server-minted Bearer key'), implying auth is handled for the caller. However, for a tool with destructive actions (plan_delete, subscription_cancel, payment_refund), it does not itself explain mutation/reversibility semantics beyond what the schema's action/confirm descriptions already say.
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?
Four dense sentences that are front-loaded with the module identity and scope. Every sentence carries routing, prerequisite, or transport information with no filler. Slightly more information density than strictly necessary but well-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 high-complexity 33-action tool with no output schema, the description covers scope, prerequisites, and transport but does not explain return shapes or how to navigate the action surface. The essentials for correct invocation (select_site, modules_tool, confirm) are present, but the coverage feels thin relative to the surface area.
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 79%, so the schema already documents most of the 33 parameters, including enums for action and type. The description adds no parameter-level syntax or format detail beyond what the schema provides. Baseline 3 is appropriate when 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 names the resource domain precisely (subscriptions module) and enumerates its functional areas: tariff plans, user subscriptions, access checks, and payments. It explicitly excludes siblings ('Not shop_tool, users_tool, or content_tool'), so an agent can place it against alternatives. It stops short of 5 because the tool is a 33-action mega-tool and the description gives no per-action verb precision.
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 states a concrete prerequisite ('call select_site first') and an install gate ('Module must be installed via modules_tool'), plus negative routing against three siblings. This is clear when-to-use and when-not-to-use context. It lacks guidance on choosing among the 33 actions, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_toolInspect
Site templates, global blocks, menus, mail forms, and pages on the selected site (call select_site first). Proxies to /uapi/templates, /uapi/gblocks, /uapi/menus, /uapi/mail, /uapi/pages with a server-minted Bearer key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Global block id (gblock_create). | |
| pda | No | PDA flag for gblock_create/gblock_delete. | |
| items | No | Menu items tree (menu_update_items). | |
| title | No | Menu title (menu_create, menu_update). | |
| action | Yes | 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. | |
| layout | No | Menu layout: 0 horizontal, 1 vertical. | |
| confirm | No | Required for delete_backup, restore_backup, gblock_delete, menu_delete, mail_delete_form, mail_delete_field, page_delete after user approval. | |
| 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 (menu_get, menu_update, menu_delete, menu_update_items). | |
| page_id | No | Site page id (page_get, page_update, page_delete; cannot delete id=1). | |
| mail_rez | No | Success message text for mail form. | |
| backup_id | No | Template backup id (delete_backup, restore_backup). | |
| gblock_id | No | Global block id (gblock_delete). | |
| mail_name | No | Mail form name (create/update) or field label (mail_add_field, mail_update_field). | |
| mail_tmpl | No | Mail notification HTML template (mail_save_template). | |
| module_id | No | Module id (get_variables, read_template, update_template, patch_template). | |
| page_name | No | Page title (page_add/update). | |
| page_page | No | List page number (page_list). | |
| page_tmpl | No | Custom template code. | |
| code_paste | No | Replacement fragment (patch_template / validate_template; empty string deletes match). | |
| code_search | No | Exact fragment to find (patch_template, or validate_template to check a patch). | |
| mail_emails | No | Recipient emails (string or array). | |
| mail_values | No | Options for select/radio mail fields. | |
| 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 module. | |
| html_content | No | Full template HTML (update_template only; use patch_template for edits). | |
| mail_form_id | No | Mail form id. | |
| page_message | No | Page HTML content. | |
| page_owntmpl | No | Use custom template flag. | |
| page_pending | No | Pending/moderation flag. | |
| mail_field_id | No | Mail field id. | |
| mail_required | No | Required flag for mail field. | |
| page_per_page | No | List page size (page_list). | |
| mail_direction | No | 0 = move field up, non-zero = down (mail_move_field). | |
| page_parent_id | No | Parent page id. | |
| mail_field_type | No | Mail field type code. | |
| page_access_all | No | Visible to all groups. | |
| page_images_alt | No | Image alt strings (page_add/update). | |
| page_meta_title | No | SEO title. | |
| page_image_paths | No | Local image paths for page_add/page_update (multipart; npm-mcp only until Site::Proxy supports it). | |
| include_variables | No | npm-mcp only: account MCP always returns variables in read_template JSON when available. | |
| page_images_title | No | Image title strings (page_add/update). | |
| page_meta_keywords | No | SEO keywords. | |
| page_del_image_slots | No | Image slot numbers to delete on page_update. | |
| page_access_group_ids | No | Group ids when page_access_all is off. | |
| page_meta_description | No | SEO description. |
tmaker_toolInspect
Template Maker (site skeleton) on the selected site (call select_site first). Read rules/designs/projects; validate/archive/publish skeleton HTML. Proxies to /uapi/tmaker/* with a server-minted Bearer key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Synonym for design_id or project_id on get/delete actions. | |
| pda | No | Publish mobile (PDA) skeleton instead of desktop (skeleton_publish only). | |
| tmpl | No | Skeleton HTML for validate, archive, save, or publish actions. | |
| action | Yes | 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). | |
| confirm | No | Required for skeleton_publish and project_delete after explicit user approval. | |
| design_id | No | Standard design id for design_get (from designs_list; typically >= 101). | |
| project_id | No | Saved project id for project_get or project_delete (from project_list). |
users_toolAInspect
Site users module on the currently selected site (call select_site first). List/profiles, groups, ranks, chlogin/chgroup/chpass. Proxies to /uapi/users/* with a server-minted Bearer key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Group id (group_update, group_delete, group_permissions). | |
| gid | No | Group id (chgroup, group_*). Synonym for id on group actions. | |
| nid | No | Target group id when deleting a group (move members). | |
| name | No | Display name (add) or group name (group_add/update). | |
| nick | No | Login/nick (get, add, delete). Synonym: user. | |
| page | No | Page number for list. | |
| user | No | Synonym for nick. | |
| No | Email (get, add, update). | ||
| login | No | New login (chlogin). | |
| action | Yes | list/get — users. add/register — POST /uapi/users. update — PUT (user_id). delete — DELETE by nick/user + confirm. groups* — /uapi/users/groups. groups_rights / group_permissions — fetch permission codes before group_add/update fields. ranks / fields — profile metadata. chlogin/chgroup/chpass — user admin (chpass + confirm). | |
| fields | No | Extra profile fields (add/update) or group permissions (group_add/update). Use codes from groups_rights / group_permissions; do not guess permission keys. | |
| confirm | No | Required for delete, chpass, and group_delete after explicit user approval. | |
| user_id | No | Numeric user id (get, update, chlogin, chgroup, chpass). | |
| password | No | Password (add, chpass). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real context: the tool proxies to /uapi/users/* under a server-minted Bearer key, implying delegated auth. However it says nothing about the destructive actions (delete, group_delete, chpass) or the approval/confirm requirement, which is the most important behavioral fact for this 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?
Two dense sentences with the prerequisite front-loaded and no filler. The telegraphic action list ('List/profiles, groups, ranks, chlogin/chgroup/chpass') is compact but slightly cryptic without the schema in hand.
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-parameter, nested-object, no-output-schema tool, the definition covers site prerequisite and auth path but omits the destructive-action/confirm flow, pagination via page, and the distinction between ranks/fields metadata and group permissions.
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 routing per action, so the baseline is 3. The description's 'List/profiles, groups, ranks, chlogin/chgroup/chpass' loosely maps to action families but adds 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?
It names the resource (site users module) and scopes it to the currently selected site, then enumerates the functional families it covers: profiles, groups, ranks, chlogin/chgroup/chpass. That is more than a restated name, though it is a multi-action router rather than a single verb+resource, and it never contrasts with any sibling.
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 parenthetical '(call select_site first)' gives an explicit hard prerequisite that the agent must satisfy before invoking. There are no competing user-management siblings to disambiguate against and no when-not guidance, but the sequencing context is stated concretely.
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_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 a WordPress site from your AI assistant: read, search, propose edits, Search Console data.
Let your AI manage WooCommerce and Shopify stores: products, SEO, descriptions and images.
AI-powered design and management for Webflow Sites
Related MCP Servers
- FlicenseCqualityBmaintenanceEnables 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.10046 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.