Skip to main content
Glama

workflowy_update_node

Modify existing WorkFlowy nodes by updating their name, note content, layout format, or completion status to keep outlines current and organized.

Instructions

Update an existing WorkFlowy node

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
_completedNo
layout_modeNo
nameNo
node_idYes
noteNo

Implementation Reference

  • Handler function executing the workflowy_update_node tool logic, decorated with @mcp.tool for registration.
    @mcp.tool(name="workflowy_update_node", description="Update an existing WorkFlowy node") async def update_node( node_id: str, name: str | None = None, note: str | None = None, layout_mode: Literal["bullets", "todo", "h1", "h2", "h3"] | None = None, _completed: bool | None = None, ) -> WorkFlowyNode: """Update an existing WorkFlowy node. Args: node_id: The ID of the node to update name: New text content for the node (optional) note: New note/description (optional) layout_mode: New layout mode for the node (bullets, todo, h1, h2, h3) (optional) _completed: New completion status (not used - use complete_node/uncomplete_node) Returns: The updated WorkFlowy node """ client = get_client() request = NodeUpdateRequest( # type: ignore[call-arg] name=name, note=note, layoutMode=layout_mode, ) if _rate_limiter: await _rate_limiter.acquire() try: node = await client.update_node(node_id, request) if _rate_limiter: _rate_limiter.on_success() return node except Exception as e: if _rate_limiter and hasattr(e, "__class__") and e.__class__.__name__ == "RateLimitError": _rate_limiter.on_rate_limit(getattr(e, "retry_after", None)) raise
  • Pydantic input schema model used in the update_node handler.
    class NodeUpdateRequest(BaseModel): """Request payload for updating an existing node.""" name: str | None = Field(None, description="New text content") note: str | None = Field(None, description="New note content") layoutMode: Literal["bullets", "todo", "h1", "h2", "h3"] | None = Field( None, description="New display mode (bullets, todo, h1, h2, h3)" ) def has_updates(self) -> bool: """Check if at least one field is provided for update.""" return any(getattr(self, field) is not None for field in self.model_fields)
  • WorkFlowyClient method that makes the HTTP API call to update the node.
    async def update_node(self, node_id: str, request: NodeUpdateRequest) -> WorkFlowyNode: """Update an existing node.""" try: response = await self.client.post( f"/nodes/{node_id}", json=request.model_dump(exclude_none=True) ) data = await self._handle_response(response) # API returns the full node object return WorkFlowyNode(**data) except httpx.TimeoutException as err: raise TimeoutError("update_node") from err except httpx.NetworkError as e: raise NetworkError(f"Network error: {str(e)}") from e
  • Pydantic output model returned by the workflowy_update_node tool.
    class WorkFlowyNode(BaseModel): """Represents a single node in the WorkFlowy outline hierarchy.""" # API fields (what the API actually returns) id: str = Field(..., description="Unique identifier for the node") name: str | None = Field( None, validation_alias=AliasChoices("name", "nm"), description="Text content of the node" ) note: str | None = Field(

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vladzima/workflowy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server