Skip to main content
Glama

Edit content

content_write
Destructive

Creates and updates entries, categories, comments, filters and video channels in a content module of the active site, sets entry tags and rates entries. Entries are published to the site.

Input Schema

NameRequiredDescriptionDefault
idNoRecord, category, comment, or forum entity id.
urlNomchat author url field.
wwwNoAuthor website.
markNoGuestbook rating: 1 good, 2 bad.
nameNoCategory, forum, section, or channel name; guestbook author name; author name or contact person of a publ, load, board, dir or stuff entry.
tagsNoComma-separated tags.
emailNoEmail (guestbook / author).
itemsNoFilter values separated by |.
ontopNo1 = pin entry/topic.
titleNoEntry or topic title; FAQ subject.
actionYesOperation to run. Each oneOf entry describes one action and lists its parameters.
activeNopolls update: yes|no.
answerNoFAQ answer.
authorNoLogin (nick) of the entry author.
closedNo1 = create closed topic.
fieldsNoExtra body keys not listed as top-level params.
moduleYesContent module code. poll is the same module as polls (module and settings lists name it poll). Not used by comments_all. The forum has its own forum_* tools.
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.
ad_typeNoBoard ad type: value id of filter 3 (see filter_list), same as filter3.
answer1Nopolls add: first answer.
answer2Nopolls add: second answer.
answersNoPoll answers (| for forum, comma for site polls).
custom1Nomchat custom field 1.
custom2Nomchat custom field 2.
filter1NoValue id of entry filter 1 (see filter_list); board takes several ids of filters 1-3 separated by commas.
filter2NoValue id of entry filter 2.
filter3NoValue id of entry filter 3 (board: the ad type).
filter4NoValue id of entry filter 4.
filter5NoValue id of entry filter 5.
messageNoFull text (entry, comment, post); the format of an entry text is set by message_type.
pendingNo1 = moderation / pending-only list.
poll_idNoPoll id (forum or site polls).
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.
passwordNoClosed forum password.
pollonlyNo1 = poll-only mode.
polltimeNoPoll duration, e.g. "1 week".
positionNoCategory position.
questionNoFAQ question text.
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.
link2siteNoSite link (dir).
parent_idNoParent comment id.
pollmultyNo1 = multi-select poll.
subscribeNo1 = subscribe to comments.
till_dateNoBoard ad end date yyyy-mm-dd hh:mm; 31 days from now when not set.
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.
access2pageNoCategory page access group ids.
author_siteNoAuthor website (publ, load, board, dir, stuff).
descriptionNoShort description / FAQ question; its format is set by description_type.
file_base64NoBase64 file body with file_filename (remote upload). Wins over file_upload_id, file_site_path, and file_path.
link2sourceNoSource link (publ).
show_attachNonews, blog: 1 = show the Attachments block (links to the entry images) on the entry page, 0 = hide it. Off for a new entry unless set; an update without it keeps the current value.
archive_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.
author_emailNoAuthor or contact email (publ, load, board, dir, stuff).
author_phoneNoContact phone (board).
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_typeNoFormat of message (faq: answer) on add and update: plain escapes the markup, bb turns BB codes into HTML, html keeps the HTML. news and load always keep the HTML; blog, publ, board, dir, stuff and faq keep it only when the user group may use HTML in the module, otherwise the markup is escaped. Without it a non-empty text of these modules is saved as html.
photo_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_typeNoFormat of description (faq: question); the same as message_type.
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / required
      Previous value: -[
      -  "action"
      -]New value: +[
      +  "action",
      +  "module"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / action / oneOf
      Previous value: -[
      -  {
      -    "const": "add",
      -    "description": "Creates an entry and publishes it. Fields depend on the module (faq: subject, question, answer; gb: name, message; video: object; polls: question, answer1, answer2; publ, load, board, dir, stuff: the author name or contact person in name). The required fields of a module are marked in content_read fields; there the code author of publ, load, board, dir and stuff is the name parameter, and ad_type of board is its filter 3. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids."
      -  },
      -  {
      -    "const": "update",
      -    "description": "Updates an entry. A replaced cover or image can keep its URL; its new width and height are in the reply. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module, id. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids."
      -  },
      -  {
      -    "const": "tags",
      -    "description": "Sets the tags of an entry (comma-separated). Required: module, id, tags."
      -  },
      -  {
      -    "const": "category_add",
      -    "description": "Creates a category; the image comes from the first filled slot (image, file, cover, photo). File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path."
      -  },
      -  {
      -    "const": "category_update",
      -    "description": "Updates a category. Empty values are not sent, so they cannot clear a field. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module, id. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path."
      -  },
      -  {
      -    "const": "comments_add",
      -    "description": "Adds a comment to an entry (entry id in id). Required: module, id, message. Optional: parent_id, user_id, fields."
      -  },
      -  {
      -    "const": "comments_update",
      -    "description": "Updates a comment. Required: module, id. Optional: message, fields."
      -  },
      -  {
      -    "const": "filter_add",
      -    "description": "Creates an entry filter (values separated by |). Required: module. Optional: filter_num, name, items, fields."
      -  },
      -  {
      -    "const": "filter_update",
      -    "description": "Updates an entry filter. Required: module, filter_num. Optional: name, items, fields."
      -  },
      -  {
      -    "const": "channel_add",
      -    "description": "Creates a video channel (module video). Required: module. Optional: name, title, category, description."
      -  },
      -  {
      -    "const": "channel_update",
      -    "description": "Updates a video channel (id in channel_id or id). Required: module. Optional: channel_id, id, name, title, category, description."
      -  },
      -  {
      -    "const": "channel_category_add",
      -    "description": "Creates a video channel category (module video). Required: module. Optional: name, title, parent_id, fields."
      -  },
      -  {
      -    "const": "channel_category_update",
      -    "description": "Updates a video channel category. Required: module, id. Optional: name, title, parent_id, fields."
      -  },
      -  {
      -    "const": "rate",
      -    "description": "Rates a guestbook entry (module gb). Required: module, id, mark."
      -  }
      -]New value: +[
      +  {
      +    "const": "add",
      +    "description": "Creates an entry and publishes it. Fields depend on the module (faq: subject, question, answer; gb: name, message; video: object; polls: question, answer1, answer2; publ, load, board, dir, stuff: the author name or contact person in name). The required fields of a module are marked in content_read fields; there the code author of publ, load, board, dir and stuff is the name parameter, and ad_type of board is its filter 3. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids."
      +  },
      +  {
      +    "const": "update",
      +    "description": "Updates an entry. A replaced cover or image can keep its URL; its new width and height are in the reply. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). The attached file (file_*; load, board, dir, stuff: archive_* too) is saved only when that field is on for the module (fname for news, archive for the others, in content_read fields) and the user group may upload files to the module; a call with a file for a turned-off field is refused. News replies show the attached file in file_name, file_url and file_size; a news add or update whose file was not saved returns the error FILE_NOT_SAVED with entry_saved true: the entry is saved, so the file goes with update and its id, not with a new add. Required: module, id. Optional: category, title, name, description, message, subject, question, answer, object, pending, ontop, comments, ownurl, hgu_title, meta_title, meta_description, meta_keywords, other1, other2, other3, other4, other5, author, author_id, user_id, add_date, uplastmod, description_type, message_type, subscribe, email, www, position, closed, polltime, pollonly, pollmulty, password, tags, url, custom1, custom2, answer1, answer2, answers, active, poll_id, show_attach, author_email, author_site, author_phone, till_date, link2site, link2source, ad_type, filter1, filter2, filter3, filter4, filter5, fields, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, archive_path, archive_base64, archive_filename, archive_upload_id, archive_site_path, screenshot_path, screenshot_base64, screenshot_filename, screenshot_upload_id, screenshot_site_path, image_upload_ids."
      +  },
      +  {
      +    "const": "tags",
      +    "description": "Sets the tags of an entry (comma-separated). Required: module, id, tags."
      +  },
      +  {
      +    "const": "category_add",
      +    "description": "Creates a category; the image comes from the first filled slot (image, file, cover, photo). File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path."
      +  },
      +  {
      +    "const": "category_update",
      +    "description": "Updates a category. Empty values are not sent, so they cannot clear a field. File slots take inline bytes (*_base64 with *_filename), an upload_direct id (*_upload_id), a file already on the site (*_site_path), or a path on the MCP server host (*_path, not reachable for remote agents). Required: module, id. Optional: name, title, description, hgu_title, ownurl, position, access2category, access2add, access2page, meta_title, meta_description, meta_keywords, fields, image_path, image_base64, image_filename, image_upload_id, image_site_path, file_path, file_base64, file_filename, file_upload_id, file_site_path, cover_path, cover_base64, cover_filename, cover_upload_id, cover_site_path, photo_path, photo_base64, photo_filename, photo_upload_id, photo_site_path."
      +  },
      +  {
      +    "const": "comments_add",
      +    "description": "Adds a comment to an entry (entry id in id). Required: module, id, message. Optional: parent_id, user_id, fields."
      +  },
      +  {
      +    "const": "comments_update",
      +    "description": "Updates a comment. Required: module, id. Optional: message, fields."
      +  },
      +  {
      +    "const": "filter_add",
      +    "description": "Creates an entry filter (values separated by |). Required: module. Optional: filter_num, name, items, fields."
      +  },
      +  {
      +    "const": "filter_update",
      +    "description": "Updates an entry filter. Required: module, filter_num. Optional: name, items, fields."
      +  },
      +  {
      +    "const": "channel_add",
      +    "description": "Creates a video channel (module video). Required: module. Optional: name, title, category, description."
      +  },
      +  {
      +    "const": "channel_update",
      +    "description": "Updates a video channel (id in channel_id or id). Required: module, channel_id or id. Optional: name, title, category, description."
      +  },
      +  {
      +    "const": "channel_category_add",
      +    "description": "Creates a video channel category (module video). Required: module. Optional: name, title, parent_id, fields."
      +  },
      +  {
      +    "const": "channel_category_update",
      +    "description": "Updates a video channel category. Required: module, id. Optional: name, title, parent_id, fields."
      +  },
      +  {
      +    "const": "rate",
      +    "description": "Rates a guestbook entry (module gb). Required: module, id, mark."
      +  }
      +]
  3. Changed4 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"Short description / FAQ question. Use description_type=html when formatted."New value: +"Short description / FAQ question; its format is set by description_type."
    • changedInput schema / properties / description_type / description
      Previous value: -"Description format."New value: +"Format of description (faq: question); the same as message_type."
    • changedInput schema / properties / message / description
      Previous value: -"Full text (entry, comment, post). Use message_type=html when formatted."New value: +"Full text (entry, comment, post); the format of an entry text is set by message_type."
    • changedInput schema / properties / message_type / description
      Previous value: -"Message format."New value: +"Format of message (faq: answer) on add and update: plain escapes the markup, bb turns BB codes into HTML, html keeps the HTML. news and load always keep the HTML; blog, publ, board, dir, stuff and faq keep it only when the user group may use HTML in the module, otherwise the markup is escaped. Without it a non-empty text of these modules is saved as html."
  4. Added

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is largely covered. The description adds that entries are published to the site, but it omits permission requirements, irreversibility, moderation behavior, and upload constraints that appear only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted wording and is front-loaded with the main capabilities. The second sentence adds the important publish side effect without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex 103-parameter, multi-action destructive tool, and the description is minimal at the top level. However, the schema's per-action oneOf descriptions document required and optional fields extensively, and annotations cover the safety profile; no output schema means return values need not be explained here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description broadly maps capabilities to resource types, but with 103 parameters it adds no parameter-level detail beyond the very rich schema and action oneOf descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names specific verbs and resources: creates and updates entries, categories, comments, filters, and video channels, plus tags and rates entries. This clearly distinguishes a write tool from content_read and content_delete, although it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the write verbs and the phrase 'active site,' so an agent can infer this is for mutations. However, the description gives no explicit when-to-use guidance, exclusions, or alternatives such as content_read, content_delete, or forum_write.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.