Skip to main content
Glama

Server Details

Manage uCoz sites from an AI assistant: templates, content, shop, users, and files.

Ownership verified
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

A3.7/5.0

Scored across 15 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
apps_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAlias of key_id.
hourNoCron hour. Default *.
nameNoDatabase, database user, or FTP user short name. The username_ prefix is added for MySQL.
pathNoHome-relative file path. Not /home/... .
permNoPermission bits as a number, for example 644.
userNoFTP username without @domain.
hostsNoMySQL host patterns.
limitNoListing limit.
mergeNomergeAndOverwrite for copy-to, move-to, and extract.
monthNoCron month. Default *.
partsNoBackup components: domain, database, ftp, email, subdomain. Default domain.
pathsNoHome-relative paths for delete or chmod.
queryNoFile name query (files_search).
trashNoMove to trash instead of deleting.
actionYesOperation. get_guide explains the order of calls.
dbuserNoMySQL user. Prefixed with {username}_ when missing.
domainNoEnvironment domain for an app, FTP account, or backup form. Defaults to selected_domain, not a file path.
key_idNoLogin key id. Defaults to main on create. Letters and digits only.
minuteNoCron minute. Default 0.
offsetNoListing offset.
paramsNoExtra CloudLinux params. PHP extension changes were rejected on the uCoz test environment.
pluginNoCloudLinux plugin for selector: phpselector, nodejs_selector, python_selector.
sourceNoHome-relative source path.
app_uriNoPublic path. /hello is served as https://{site}/apps/hello.
charsetNoMySQL charset.
commandNoCron shell command. This path may be absolute /home/{username}/... .
confirmNoRequired after explicit user approval for destructive actions and activate.
contentNoUTF-8 file text for files_write, files_patch, or files_legacy_edit.
cron_idNoCron id from cron_list, for example 000. Sent as select0.
membersNoArchive member names. Empty means all.
select0NoFTP 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.
sourcesNoHome-relative paths for copy-to, move-to, or create-archive.
versionNoPHP version (8.2, 8.3, native), Node version (default 22), or Python version (default 3.11).
app_modeNoNode only: development or production. Default production. Not sent for Python.
app_rootNoApplication directory relative to home, or /home/{username}/....
cron_idsNoSeveral cron ids to delete (select0, select1, ...).
databaseNoMySQL database. Prefixed with {username}_ when missing.
env_varsNoOptional environment variables for a new Node or Python app.
passwordNoPassword for a new DB user, FTP account, or DirectAdmin login key. Omit to let the environment generate a DB password.
collationNoMySQL collation.
dayofweekNoCron day of week. Default *.
overwriteNoOverwrite on write/copy/move. files_write defaults to true.
dayofmonthNoCron day of month. Default *.
new_stringNoReplacement text (files_patch).
old_stringNoText to replace. Must occur once (files_patch).
privilegesNoMySQL privilege map. Defaults to the full set on create.
allow_loginNoDirectAdmin login key may open the panel. Defaults to false. confirm is required when true.
destinationNoHome-relative destination path.
entry_pointNoPython 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.
interpreterNoCloudLinux interpreter for selector: php, nodejs, or python.
new_passwordNoReplacement database password (at least 8 characters).
startup_fileNoCloudLinux startup-file. Node default app.js. Python default passenger_wsgi.py. Required by the Python interpreter.
deny_commandsNoDirectAdmin login key command deny list.
allow_commandsNoDirectAdmin login key command allow list.
allow_networksNoDirectAdmin login key network allow list.
destination_dirNoHome-relative destination directory for copy-to, move-to, and extract.
selector_methodNoCloudLinux method for selector: get, set, create, start, stop, restart, destroy, install-modules.
current_passwordNoCurrent password, only if a DirectAdmin login-key call requires it.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRecord, category, comment, or forum entity id.
urlNomchat author url field.
wwwNoAuthor website.
dateNoList filter date yyyy-mm-dd or yyyy.
markNoGuestbook rating: 1 good, 2 bad.
nameNoCategory, forum, section, or channel name.
nfidNoTarget forum id (move/split).
pageNoList page.
sortNoList sort asc|desc.
tagsNoComma-separated tags.
treeNocomments_all: yes tree / no flat.
voteNoPoll vote index(es), comma-separated.
emailNoEmail (guestbook / author).
itemsNoFilter values separated by |.
ontopNo1 = pin entry/topic.
titleNoEntry or topic title; FAQ subject.
actionYesContent action. Destructive actions need confirm: true after user approval.
activeNopolls update: yes|no.
answerNoFAQ answer.
authorNoAuthor nick.
closedNo1 = create closed topic.
fieldsNoExtra body keys not listed as top-level params.
moduleNoModule code. Not required for comments_all.
objectNoVideo embed iframe HTML.
other1NoCustom field 1 (see action=fields).
other2NoCustom field 2.
other3NoCustom field 3.
other4NoCustom field 4.
other5NoCustom field 5.
ownurlNoCustom URL slug or own URL.
answer1Nopolls add: first answer.
answer2Nopolls add: second answer.
answersNoPoll answers (| for forum, comma for site polls).
confirmNoRequired for destructive actions after user approval.
custom1Nomchat custom field 1.
custom2Nomchat custom field 2.
messageNoFull text (entry, comment, post). Use message_type=html when formatted.
pendingNo1 = moderation / pending-only list.
poll_idNoPoll id (forum or site polls).
post_idNoForum post id.
subjectNoFAQ subject line.
user_idNoAct-as user id.
add_dateNoPublish date yyyy-mm-dd hh:mm.
categoryNoCategory id (list filter / add).
commentsNo1 = allow comments, 0 = deny.
forum_idNoForum id.
passwordNoClosed forum password.
per_pageNoList page size (max 100).
pollonlyNo1 = poll-only mode.
polltimeNoPoll duration, e.g. "1 week".
positionNoCategory position.
post_idsNoComma-separated post ids.
questionNoFAQ question text.
topic_idNoTopic id.
author_idNoAuthor user id.
file_pathNoLocal 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_titleNoSEO slug in module path.
parent_idNoParent comment id.
pollmultyNo1 = multi-select poll.
subscribeNo1 = subscribe to comments.
target_idNoJoin/move target id.
uplastmodNoUpdate lastmod flag (maps to uplastmod/update_date/update_lastmod).
access2addNoCategory add group ids (comma-separated).
channel_idNoVideo channel id.
cover_pathNoLocal 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_numNoFilter number 1-3.
image_pathNoLocal 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_titleNoMeta title for an entry or a module category.
photo_pathNoLocal 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_idNoForum section id.
access2pageNoCategory page access group ids.
descriptionNoShort description / FAQ question. Use description_type=html when formatted.
file_base64NoBase64 file body with file_filename (remote upload). Wins over file_upload_id, file_site_path, and file_path.
archive_pathNoLocal 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_base64NoBase64 cover body with cover_filename (remote upload). Wins over cover_upload_id, cover_site_path, and cover_path.
image_base64NoBase64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path.
message_typeNoMessage format.
photo_base64NoBase64 photo body with photo_filename (remote upload). Wins over photo_upload_id, photo_site_path, and photo_path.
file_filenameNoFile name for file_base64, with extension.
meta_keywordsNoMeta keywords for an entry or a module category.
archive_base64NoBase64 archive body with archive_filename (remote upload). Wins over archive_upload_id, archive_site_path, and archive_path.
cover_filenameNoFile name for cover_base64, with extension.
file_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over file_path.
file_upload_idNoupload_id from upload_direct. Wins over file_site_path and file_path.
image_filenameNoFile name for image_base64, with extension.
photo_filenameNoFile name for photo_base64, with extension.
access2categoryNoCategory view group ids (comma-separated).
cover_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over cover_path.
cover_upload_idNoupload_id from upload_direct. Wins over cover_site_path and cover_path.
image_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over image_path.
image_upload_idNoupload_id from upload_direct for the first material image (multipart file1). Wins over image_site_path and image_path.
photo_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over photo_path.
photo_upload_idNoupload_id from upload_direct. Wins over photo_site_path and photo_path.
screenshot_pathNoLocal 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_filenameNoFile name for archive_base64, with extension.
description_typeNoDescription format.
image_upload_idsNoComma-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_descriptionNoMeta description for an entry or a module category.
archive_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over archive_path.
archive_upload_idNoupload_id from upload_direct. Wins over archive_site_path and archive_path.
screenshot_base64NoBase64 screenshot body with screenshot_filename (remote upload). Wins over screenshot_upload_id, screenshot_site_path, and screenshot_path.
screenshot_filenameNoFile name for screenshot_base64, with extension.
screenshot_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over screenshot_path.
screenshot_upload_idNoupload_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domYesZone 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.
lngNoTwo-letter language code, default en
addrYesSite address (2-15 chars, a-z0-9-)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoDirect YAML URL for fetch_spec (https://api.ucoz.net/{module}-openapi.yaml).
limitNosearch hits limit, 1–20 (default 5).
queryNoSearch string (action=search).
actionYeslist — module catalog and URLs. search — query YAML lines (pass module to scope). fetch_spec — full YAML.
moduleNoSpec code: news, blog, shop, user, templates, mail, …

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoupload_url: http:// or https:// URL that ends with a file name and extension.
fileNoupload: synonym for a single text body when files and content are omitted.
nameNoupload: 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.
pathNoClean 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.
sizeNoupload_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.
sortNolist: name (default), size, or mtime. Anything else is treated as name by the API.
filesNoupload: 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.
itemsNorename 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.
limitNolist: slice length. 0 (default) means the rest of the listing.
orderNolist: asc (default). Only desc changes direction.
pathsNomove: sources to move; a non-empty list ignores path and always returns HTTP 200. delete: targets, together with path. Items are clean paths.
actionYeslist — 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).
createNocontent_put: create the file when it does not exist. Default false. Parent folder must already exist.
filterNolist: a quota.limits.filters name, or a comma-separated extension list (png,jpg). Unknown names are ignored by the API.
offsetNolist: slice start after sorting. Default 0.
sha256Noupload: expected SHA-256 hex of the single top-level body after base64 decoding; a mismatch fails the call.
confirmNoRequired for delete after explicit user approval.
contentNocontent_put: new file text (empty string is allowed). upload: text body of a single file when files is omitted.
filenameNoupload and upload_direct: original file name (multipart filename). Falls back to name.
add_wmarkNoupload and upload_url: apply the site watermark when it is enabled and the extension is an allowed image.
upload_idNoupload: 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_idsNoupload: several upload_direct ids (a comma-separated string is accepted too), sent after upload_id and inline files. At most 20.
destinationNomove: existing destination folder. Empty string is the site root.
content_base64Noupload: 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesftp_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).
confirmNoRequired for ftp_password_reset after explicit user approval.
passwordNoSynonym for ftp_password (uAPI body field name).
ftp_passwordNoNew FTP password for ftp_password_set / ftp_password_change. [a-zA-Z0-9_-]{6,15}. Synonym: password.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesactive_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).
confirmNoRequired for module_uninstall and quarantine_unlock after explicit user approval.
module_codeNoLowercase 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

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYesNumeric site id from list_sites

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoGoods, category, comment, or basket line id.
artNoSKU / article.
cntNoBasket quantity.
delNo1 = delete category image.
idsNoComma-separated ids (invoice_*, stock_remove).
imgNoImage slot number.
nowNo1 = buy now.
optNoSelected options OPTION_ID-VALUE_ID:… for basket/order.
pidNoParent category id.
posNoCategory position.
urlNoCustom URL slug.
consNo
dateNoinvoices_list created period date1|date2.
dscrNoFull description; pass html_dscr=1 when HTML.
hideNoHide flag or invoices_list group.
modeNoSub-action mode (category, basket, checkout, variation_dict).
nameNoGoods or category name.
noteNo
pageNoList page (orders / goods).
pnumNoGoods list page.
prosNo
sortNoGoods list sort field.
tagsNo
typeNoGoods type: 0 material, 1 file, 2 e-code, 3 service.
unitNo
warrNo
brandNoBrand.
briefNoShort description.
cdateNoinvoices_list delivery period date1|date2.
clearNo1 = clear wishlist (get).
f_artNo
orderNoList asc/desc or order hash.
priceNoPrice (goods or variation_update).
soldsNo
stockNoStock count.
viewsNo
actionYesShop action. Destructive actions need confirm: true after user approval.
amountNoBalance amount.
cat_idNoGoods category id (add/update).
f_nameNoGoods name filter (plain; MCP encodes Base64).
f_warrNo
fieldsNoExtra form keys (checkout field_N, stock_*, var_*, cnt_REC_ID, …).
imagesNoFiles 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.
methodNoUsually submit for add/update goods.
statusNoOrder status code.
undiscNo
valuesNovariation_dict values comma-separated (S,M,L).
weightNo
confirmNoRequired for destructive actions after user approval.
del_allNo1 = delete all images (img_del).
f_brandNo
f_priceNoPrice filter MIN|MAX|CUR.
f_stockNo
inv_sumNoinvoices_list sum1|sum2.
messageNoComment text.
opt_selNoOption set for stock_add (e.g. 2-3:4).
orderedNo
stock_qNo
user_idNoUser id filter or balance target.
cats_addNoExtra category ids [ID1, ID2, …].
entry_idNoGoods id for comments_add.
f_statusNo
f_weightNo
goods_idNoWishlist goods id (get).
price_inNoPurchase price.
rate_numNo
rate_sumNo
ch_addcatNo1 when cats_add is passed.
curr_codeNo
curr_rateNo
file_pathNoSynonym for image_path (local MCP server path).
html_dscrNo1 = dscr is HTML.
meta_dscrNo
parent_idNoSynonym for pid / category_list parent.
price_oldNoOld price.
add_groupsNo
global_catNo
image_pathNoLocal 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_titleNo
payment_idNo
promo_codeNo
delivery_idNo
file_base64NoSynonym for image_base64.
get_globalsNo1 = global categories in category_list.
image_pathsNoComma-separated local MCP server paths (img_add). Missing files are an error.
view_groupsNo
file_add_cntNo
image_base64NoBase64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path.
file_filenameNoSynonym for image_filename.
group_courierNo
variation_crcNoVariation hash from variations_list.
file_site_pathNoSynonym for image_site_path.
file_upload_idNoSynonym for image_upload_id.
files_sequenceNoImage order after single img_del.
image_filenameNoFile name for image_base64, with extension.
image_site_pathNoFile already on the site (img/x.jpg or its full site URL). Wins over image_path.
image_upload_idNoupload_id from upload_direct. Wins over image_site_path and image_path.
image_site_pathsNoComma-separated site files for img_add (img/x.jpg or full site URLs).
image_upload_idsNoComma-separated upload_id values from upload_direct for img_add.
custom_delivery_taxNo
subscribe_to_repliesNo
exclude_from_discountNo
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).

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoGit branch or tag. Default: main.
repoNoGitHub repo with skills. Default: ucoz-skills/agent-skills.
taskNoresolve: user task wording.
limitNoresolve: max alternatives (1–7, default 3).
scopeNoinstall/status paths: global (~/.cursor/skills) or project (workspace/.cursor/skills). Default global.
actionYesresolve — 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).
clientNoIDE client for status/install paths (default auto → cursor).
compareNostatus: include catalog latest_version.
versionNoregister_usage: skill version (synonym skill_version).
skill_idNoSlug (^[a-z0-9-]+$). Required for install; optional for catalog/status/register_usage.
skill_pathNoregister_usage: path to SKILL.md (alternative to skill_id + version).
skill_versionNoSynonym 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pNoPage number (OpenAPI p).
idNoLegacy tariff id for /item endpoints.
pageNoSynonym for p on list actions.
typeNoPlan type: 0 free, 1 one-time, 2 recurring, 3 donate.
priceNo
queryNoSearch query for subscribers/payments lists.
titleNoPlan title (plan_add/update).
actionYesSubscriptions action. Destructive actions need confirm: true after user approval.
amountNoPayment amount in minor currency units.
fieldsNoExtra form fields per OpenAPI.
periodNoRecurring period in days.
statusNoStatus filter (comma-separated).
confirmNoRequired for destructive actions after user approval.
date_toNoPayment date upper bound (unix).
plan_idNoTariff plan id.
user_idNoUser id.
currencyNoISO 4217 code, e.g. RUB.
group_toNoGroup id while subscription is active.
intervalNoSubscription interval in days.
date_fromNoPayment date lower bound (unix).
price_oldNo
group_backNoGroup id after subscription ends.
payment_idNoPayment id.
descriptionNoPlan description.
is_discountNo
is_advantageNo
expires_beforeNoUnix timestamp filter.
text_advantageNo
transaction_idNoIdempotent payment transaction id.
trial_intervalNo
advantage_itemsNoAdvantage lines separated by newline.
subscription_idNoSubscription id.
payment_method_idNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoGlobal block id (gblock_create).
pdaNoPDA flag for gblock_create/gblock_delete.
itemsNoMenu items tree (menu_update_items).
titleNoMenu title (menu_create, menu_update).
actionYesTemplate 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.
layoutNoMenu layout: 0 horizontal, 1 vertical.
confirmNoRequired for delete_backup, restore_backup, gblock_delete, menu_delete, mail_delete_form, mail_delete_field, page_delete after user approval.
contentNoGlobal block HTML (gblock_create) or full template body to check (validate_template; html_content is accepted too).
menu_idNoMenu id (menu_get, menu_update, menu_delete, menu_update_items).
page_idNoSite page id (page_get, page_update, page_delete; cannot delete id=1).
mail_rezNoSuccess message text for mail form.
backup_idNoTemplate backup id (delete_backup, restore_backup).
gblock_idNoGlobal block id (gblock_delete).
mail_nameNoMail form name (create/update) or field label (mail_add_field, mail_update_field).
mail_tmplNoMail notification HTML template (mail_save_template).
module_idNoModule id (get_variables, read_template, update_template, patch_template).
page_nameNoPage title (page_add/update).
page_pageNoList page number (page_list).
page_tmplNoCustom template code.
code_pasteNoReplacement fragment (patch_template / validate_template; empty string deletes match).
code_searchNoExact fragment to find (patch_template, or validate_template to check a patch).
mail_emailsNoRecipient emails (string or array).
mail_valuesNoOptions for select/radio mail fields.
page_other1NoExtra field 1.
page_other2NoExtra field 2.
page_other3NoExtra field 3.
page_other4NoExtra field 4.
page_other5NoExtra field 5.
page_ownurlNoCustom URL slug.
template_idNoTemplate id within module.
html_contentNoFull template HTML (update_template only; use patch_template for edits).
mail_form_idNoMail form id.
page_messageNoPage HTML content.
page_owntmplNoUse custom template flag.
page_pendingNoPending/moderation flag.
mail_field_idNoMail field id.
mail_requiredNoRequired flag for mail field.
page_per_pageNoList page size (page_list).
mail_directionNo0 = move field up, non-zero = down (mail_move_field).
page_parent_idNoParent page id.
mail_field_typeNoMail field type code.
page_access_allNoVisible to all groups.
page_images_altNoImage alt strings (page_add/update).
page_meta_titleNoSEO title.
page_image_pathsNoLocal image paths for page_add/page_update (multipart; npm-mcp only until Site::Proxy supports it).
include_variablesNonpm-mcp only: account MCP always returns variables in read_template JSON when available.
page_images_titleNoImage title strings (page_add/update).
page_meta_keywordsNoSEO keywords.
page_del_image_slotsNoImage slot numbers to delete on page_update.
page_access_group_idsNoGroup ids when page_access_all is off.
page_meta_descriptionNoSEO 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSynonym for design_id or project_id on get/delete actions.
pdaNoPublish mobile (PDA) skeleton instead of desktop (skeleton_publish only).
tmplNoSkeleton HTML for validate, archive, save, or publish actions.
actionYesskeleton_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).
confirmNoRequired for skeleton_publish and project_delete after explicit user approval.
design_idNoStandard design id for design_get (from designs_list; typically >= 101).
project_idNoSaved 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoGroup id (group_update, group_delete, group_permissions).
gidNoGroup id (chgroup, group_*). Synonym for id on group actions.
nidNoTarget group id when deleting a group (move members).
nameNoDisplay name (add) or group name (group_add/update).
nickNoLogin/nick (get, add, delete). Synonym: user.
pageNoPage number for list.
userNoSynonym for nick.
emailNoEmail (get, add, update).
loginNoNew login (chlogin).
actionYeslist/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).
fieldsNoExtra profile fields (add/update) or group permissions (group_add/update). Use codes from groups_rights / group_permissions; do not guess permission keys.
confirmNoRequired for delete, chpass, and group_delete after explicit user approval.
user_idNoNumeric user id (get, update, chlogin, chgroup, chpass).
passwordNoPassword (add, chpass).

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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. 1 tool update
    • Changedskills_tool5 fields changed
      • changedInput schema / properties / action / description
        Previous 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)."
      • changedInput schema / properties / client / description
        Previous value: -"IDE client for status/install path hints (default auto → cursor)."New value: +"IDE client for status/install paths (default auto → cursor)."
      • changedInput schema / properties / compare / description
        Previous value: -"status: include catalog latest_version for update hints."New value: +"status: include catalog latest_version."
      • removedInput schema / properties / method
        Removed value: -{
        -  "description": "install: npx skills add (recommended) or git sparse copy hint.",
        -  "enum": [
        -    "auto",
        -    "npx",
        -    "copy"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / skill_path / description
        Previous 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)."
  2. 3 tool updates
    • Changedfiles_tool8 fields changed
      • changedInput schema / properties / action / description
        Previous 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)."
      • changedInput schema / properties / content_base64 / description
        Previous 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."
      • addedInput schema / properties / files / items / properties / sha256
        Added value: +{
        +  "description": "Expected SHA-256 hex of this body after decoding.",
        +  "type": "string"
        +}
      • addedInput schema / properties / files / items / properties / size
        Added value: +{
        +  "description": "Expected byte size of this body after decoding.",
        +  "type": "number"
        +}
      • addedInput schema / properties / sha256
        Added value: +{
        +  "description": "upload: expected SHA-256 hex of the single top-level body after base64 decoding; a mismatch fails the call.",
        +  "type": "string"
        +}
      • changedInput schema / properties / size / description
        Previous 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."
      • addedInput schema / properties / upload_id
        Added 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"
        +}
      • addedInput schema / properties / upload_ids
        Added 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"
        +}
    • Changedtemplates_tool4 fields changed
      • changedInput schema / properties / action / description
        Previous 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."
      • changedInput schema / properties / code_paste / description
        Previous value: -"Replacement fragment (patch_template; empty string deletes match)."New value: +"Replacement fragment (patch_template / validate_template; empty string deletes match)."
      • changedInput schema / properties / code_search / description
        Previous value: -"Exact fragment to find (patch_template)."New value: +"Exact fragment to find (patch_template, or validate_template to check a patch)."
      • changedInput schema / properties / content / description
        Previous 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)."
    • Changedtmaker_tool1 field changed
      • changedInput schema / properties / action / description
        Previous 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. 3 tool updates
    • Changedcontent_tool31 fields changed
      • addedInput schema / properties / archive_base64
        Added value: +{
        +  "description": "Base64 archive body with archive_filename (remote upload). Wins over archive_upload_id, archive_site_path, and archive_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / archive_filename
        Added value: +{
        +  "description": "File name for archive_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / archive_path / description
        Previous 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."
      • addedInput schema / properties / archive_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over archive_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / archive_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct. Wins over archive_site_path and archive_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / cover_base64
        Added value: +{
        +  "description": "Base64 cover body with cover_filename (remote upload). Wins over cover_upload_id, cover_site_path, and cover_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / cover_filename
        Added value: +{
        +  "description": "File name for cover_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / cover_path / description
        Previous 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."
      • addedInput schema / properties / cover_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over cover_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / cover_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct. Wins over cover_site_path and cover_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / file_base64
        Added value: +{
        +  "description": "Base64 file body with file_filename (remote upload). Wins over file_upload_id, file_site_path, and file_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / file_filename
        Added value: +{
        +  "description": "File name for file_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / file_path / description
        Previous 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."
      • addedInput schema / properties / file_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over file_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / file_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct. Wins over file_site_path and file_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_base64
        Added value: +{
        +  "description": "Base64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_filename
        Added value: +{
        +  "description": "File name for image_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / image_path / description
        Previous 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."
      • addedInput schema / properties / image_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over image_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct for the first material image (multipart file1). Wins over image_site_path and image_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_upload_ids
        Added 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"
        +}
      • addedInput schema / properties / photo_base64
        Added value: +{
        +  "description": "Base64 photo body with photo_filename (remote upload). Wins over photo_upload_id, photo_site_path, and photo_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / photo_filename
        Added value: +{
        +  "description": "File name for photo_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / photo_path / description
        Previous 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."
      • addedInput schema / properties / photo_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over photo_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / photo_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct. Wins over photo_site_path and photo_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / screenshot_base64
        Added value: +{
        +  "description": "Base64 screenshot body with screenshot_filename (remote upload). Wins over screenshot_upload_id, screenshot_site_path, and screenshot_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / screenshot_filename
        Added value: +{
        +  "description": "File name for screenshot_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / screenshot_path / description
        Previous 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."
      • addedInput schema / properties / screenshot_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over screenshot_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / screenshot_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct. Wins over screenshot_site_path and screenshot_path.",
        +  "type": "string"
        +}
    • Changedfiles_tool4 fields changed
      • changedInput schema / properties / action / description
        Previous 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)."
      • changedInput schema / properties / action / enum
        Previous 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"
        +]
      • changedInput schema / properties / filename / description
        Previous 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."
      • addedInput schema / properties / size
        Added 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"
        +}
    • Changedshop_tool14 fields changed
      • addedInput schema / properties / file_base64
        Added value: +{
        +  "description": "Synonym for image_base64.",
        +  "type": "string"
        +}
      • addedInput schema / properties / file_filename
        Added value: +{
        +  "description": "Synonym for image_filename.",
        +  "type": "string"
        +}
      • changedInput schema / properties / file_path / description
        Previous value: -"Synonym for image_path."New value: +"Synonym for image_path (local MCP server path)."
      • addedInput schema / properties / file_site_path
        Added value: +{
        +  "description": "Synonym for image_site_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / file_upload_id
        Added value: +{
        +  "description": "Synonym for image_upload_id.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_base64
        Added value: +{
        +  "description": "Base64 image body with image_filename (remote upload). Wins over image_upload_id, image_site_path, and image_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_filename
        Added value: +{
        +  "description": "File name for image_base64, with extension.",
        +  "type": "string"
        +}
      • changedInput schema / properties / image_path / description
        Previous 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."
      • changedInput schema / properties / image_paths / description
        Previous value: -"Comma-separated local paths (img_add)."New value: +"Comma-separated local MCP server paths (img_add). Missing files are an error."
      • addedInput schema / properties / image_site_path
        Added value: +{
        +  "description": "File already on the site (img/x.jpg or its full site URL). Wins over image_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_site_paths
        Added value: +{
        +  "description": "Comma-separated site files for img_add (img/x.jpg or full site URLs).",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_upload_id
        Added value: +{
        +  "description": "upload_id from upload_direct. Wins over image_site_path and image_path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / image_upload_ids
        Added value: +{
        +  "description": "Comma-separated upload_id values from upload_direct for img_add.",
        +  "type": "string"
        +}
      • addedInput schema / properties / images
        Added 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"
        +}
  4. 1 tool update
    • Changedcontent_tool3 fields changed
      • changedInput schema / properties / meta_description / description
        Previous value: -"Meta description."New value: +"Meta description for an entry or a module category."
      • changedInput schema / properties / meta_keywords / description
        Previous value: -"Meta keywords."New value: +"Meta keywords for an entry or a module category."
      • changedInput schema / properties / meta_title / description
        Previous value: -"Meta title."New value: +"Meta title for an entry or a module category."
  5. 1 tool update
    • Addedapps_tool
  6. 14 tool updates
    • First observedcontent_tool
    • First observedcreate_site
    • First observeddocs_tool
    • First observedfiles_tool
    • First observedftp_tool
    • First observedlist_sites
    • First observedmodules_tool
    • First observedselect_site
    • First observedshop_tool
    • First observedskills_tool
    • First observedsubscriptions_tool
    • First observedtemplates_tool
    • First observedtmaker_tool
    • First observedusers_tool

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.