Skip to main content
Glama

create_document

Create new documents in Frappe by specifying the document type and field values. Handles required fields, links, and table data for structured data entry.

Instructions

Create a new document in Frappe. Args: doctype: DocType name values: Document field values. Required fields must be included. For Link fields, provide the exact document name. For Table fields, provide an array of row objects.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
doctypeYes
valuesYes

Implementation Reference

  • The create_document tool handler: creates a new Frappe document via POST to api/resource/{doctype}, handles errors with formatted response.
    @mcp.tool() async def create_document( doctype: str, values: Dict[str, Any] ) -> str: """ Create a new document in Frappe. Args: doctype: DocType name values: Document field values. Required fields must be included. For Link fields, provide the exact document name. For Table fields, provide an array of row objects. """ try: client = get_client() # Create the document data doc_data = { "doctype": doctype, **values } # Make API request to create document response = await client.post( f"api/resource/{doctype}", json_data=doc_data ) if "data" in response: doc = response["data"] return f"Document created successfully: {doctype} '{doc.get('name', 'Unknown')}'" else: return json.dumps(response, indent=2) except Exception as error: return _format_error_response(error, "create_document")
  • src/server.py:40-40 (registration)
    Calls register_tools on the documents module to register all document tools including create_document with the MCP server.
    documents.register_tools(mcp)
  • Helper function _format_error_response used by create_document to format and return detailed error messages.
    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