Skip to main content
Glama

Save Posts

save_posts
Destructive

Adds and edits posts on a padlet. A post_id starting with new_ adds a post, and an existing post's id edits it. This tool cannot delete posts. Delete them with delete_padlet_items.

  • Returns { success: true }, plus created_post_ids mapping each new_ id to the real post id.

  • When some posts or fields could not be applied, the result also has not_applied, a list of { post_id, reason }. Tell the user which posts or fields did not change and why, using the reason, and never say a listed change was made.

  • When the result has awaiting_approval_post_ids, those posts wait for the padlet's approval or content check, so tell the user others cannot see them yet.

  • Adding needs write permission on the padlet. You can edit only posts you created, unless you are an admin or moderator of the padlet. get_padlet marks them editable: true.

  • To edit a post, send only the fields to change. To empty a field, name it in clear. An empty string leaves it as it is.

  • section_id takes an existing section's id, so a new section and posts in it take two calls: save_sections, then this tool with the id it returns.

  • To add an attachment, send attachment_type with attachment_search, or a URL in attachment. A poll comes from attachment_props and never shares a post with attachment or attachment_search.

  • Pass a chat-dropped file as file to start_attachment_upload. For a local file, use start_attachment_upload plus complete_attachment_upload when the client can issue an HTTP PUT. Pass a public web link directly as attachment.

  • Post colors are red, orange, green, blue, purple, orange for yellow, plus white on a light padlet and black on a dark one.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "wall_url": "<wall_url>",
      "posts": "<posts>"
    },
    "name": "save_posts"
  }
}

Input Schema

NameRequiredDescriptionDefault
postsYesPosts to add or edit.
wall_urlYesThe padlet's link (e.g. https://padlet.com/foo/bar-a1b2c3): the link you were given, the `wall_url` a previous call returned, or a link the user pasted. Not a breakout-room or submission link, and not a padlet id: no tool takes a wall_id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / posts / items / properties / custom_field_values / items / properties / field_value / description
      Previous value: -"The value of the custom field. This value depends on the type of the custom field in custom_post_fields.field_type. If field_type is text, any string is allowed. If field_type is number, string must be convertible to a number (integer or float). If field_type is date, string must be in the format YYYY-MM-DDTHH:MM:SSZ. If field_type is single_select, string must be the id of the option. Get option id from the selection_options array of the custom field using the get_padlet_content tool."New value: +"The value of the custom field. This value depends on the type of the custom field in custom_post_fields.field_type. If field_type is text, any string is allowed. If field_type is number, string must be convertible to a number (integer or float). If field_type is date, string must be in the format YYYY-MM-DDTHH:MM:SSZ. If field_type is single_select, string must be the id of the option. Get option id from the selection_options array of the custom field in the padlet's content."
  2. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the description is not carrying the safety profile alone — yet it adds substantial operational context: the not_applied list and the instruction never to claim a listed change succeeded, the awaiting_approval_post_ids state where other users cannot see posts, and the fact that an empty string does not empty a field (only `clear` does). It also warns a new section plus posts in it requires two calls and that polls never combine with `attachment` or attachment_search.

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?

The two-sentence purpose statement is front-loaded and the follow-on bullets each address a distinct operational concern, so the length is largely justified. It loses a point for repeating schema-level detail (empty-string vs `clear`, attachment_type routing) in both the description and the per-field descriptions.

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 two-parameter, nested-array mutation tool with no output schema, the description covers return shape (success, created_post_ids, not_applied, awaiting_approval_post_ids), permission model, and attachment workflows — everything an agent needs to call it correctly and interpret the result. Nothing material is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it enumerates the allowed post colors (including the orange-for-yellow substitution and white/black depending on padlet lightness), which the `color` schema field leaves open. It also restates the edit-by-sending-only-changed-fields pattern and the clear-vs-empty-string distinction, though the latter duplicates what the schema already says.

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 opens with a specific verb+resource pair, then immediately disambiguates add vs edit via the `new_` post_id convention, and explicitly states the exclusion ("This tool cannot delete posts"). An agent can distinguish this from delete_padlet_items and save_sections 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?

It names concrete alternatives and the conditions selecting them: delete via delete_padlet_items, create sections first with save_sections then pass the returned id, chat-dropped files via start_attachment_upload, local files via start_attachment_upload + complete_attachment_upload, and public web links passed directly. It also states the permission precondition (write access; edit only your own posts unless admin/moderator, verified via get_padlet's `editable: true`).

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.