Skip to main content
Glama

update_document

Modify existing documents in Frappe by specifying the document type, name, and field values to update.

Instructions

    Update an existing document in Frappe.
    
    Args:
        doctype: DocType name
        name: Document name (case-sensitive)
        values: Field values to update
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
doctypeYes
nameYes
valuesYes

Implementation Reference

  • The handler function decorated with @mcp.tool() that implements the core logic for updating a Frappe document via REST API PUT request to /api/resource/{doctype}/{name}, handling success response and errors.
    @mcp.tool()
    async def update_document(
        doctype: str,
        name: str,
        values: Dict[str, Any]
    ) -> str:
        """
        Update an existing document in Frappe.
        
        Args:
            doctype: DocType name
            name: Document name (case-sensitive)
            values: Field values to update
        """
        try:
            client = get_client()
            
            # Make API request to update document
            response = await client.put(
                f"api/resource/{doctype}/{name}",
                json_data=values
            )
            
            if "data" in response:
                doc = response["data"]
                return f"Document updated successfully: {doctype} '{doc.get('name', name)}'"
            else:
                return json.dumps(response, indent=2)
                
        except Exception as error:
            return _format_error_response(error, "update_document")
  • src/server.py:40-40 (registration)
    Top-level registration call in the MCP server setup that invokes the register_tools function from the documents module, which defines and registers the update_document tool among others.
    documents.register_tools(mcp)
  • The @mcp.tool() decorator directly above the update_document function handler, which registers it as an MCP tool within the documents.register_tools(mcp) function.
    @mcp.tool()
  • Helper function used by update_document (and other tools) to format error responses with credential checks and diagnostic information.
    def _format_error_response(error: Exception, operation: str) -> str:
        """Format error response with detailed information."""
        credentials_check = validate_api_credentials()
        
        # Build diagnostic information
        diagnostics = [
            f"Error in {operation}",
            f"Error type: {type(error).__name__}",
            f"Is FrappeApiError: {isinstance(error, FrappeApiError)}",
            f"API Key available: {credentials_check['details']['api_key_available']}",
            f"API Secret available: {credentials_check['details']['api_secret_available']}"
        ]
        
        # Check for missing credentials first
        if not credentials_check["valid"]:
            error_msg = f"Authentication failed: {credentials_check['message']}. "
            error_msg += "API key/secret is the only supported authentication method."
            return error_msg
        
        # Handle FrappeApiError
        if isinstance(error, FrappeApiError):
            error_msg = f"Frappe API error: {error}"
            if error.status_code in (401, 403):
                error_msg += " Please check your API key and secret."
            return error_msg
        
        # Default error handling
        return f"Error in {operation}: {str(error)}"

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/appliedrelevance/frappe-mcp-server'

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