Skip to main content
Glama

create_document

Create new documents in a specified collection for knowledge bases, guides, or notes. Add content via markdown, nest under parent documents, and publish immediately or save as draft.

Instructions

    Creates a new document in a specified collection.
    
    Use this tool when you need to:
    - Add new content to a knowledge base
    - Create documentation, guides, or notes
    - Add a child document to an existing parent
    - Start a new document thread or topic
    
    Args:
        title: The document title
        collection_id: The collection ID to create the document in
        text: Optional markdown content for the document
        parent_document_id: Optional parent document ID for nesting
        publish: Whether to publish the document immediately (True) or 
            save as draft (False)
        
    Returns:
        Result message with the new document ID
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
collection_idYes
parent_document_idNo
publishNo
textNo
titleYes

Implementation Reference

  • The core handler function for the 'create_document' tool. It uses the OutlineClient to POST to 'documents.create' endpoint with the provided title, collection_id, text, parent, and publish parameters.
    @mcp.tool(
        annotations=ToolAnnotations(
            readOnlyHint=False,
            destructiveHint=False,
            idempotentHint=False,
        )
    )
    async def create_document(
        title: str,
        collection_id: str,
        text: str = "",
        parent_document_id: Optional[str] = None,
        publish: bool = True,
    ) -> str:
        """
        Creates a new document in a specified collection.
    
        Use this tool when you need to:
        - Add new content to a knowledge base
        - Create documentation, guides, or notes
        - Add a child document to an existing parent
        - Start a new document thread or topic
    
        Note: For Mermaid diagrams, use ```mermaidjs (not ```mermaid)
        as the code fence language identifier for proper rendering.
    
        Args:
            title: The document title
            collection_id: The collection ID to create the document in
            text: Optional markdown content for the document
            parent_document_id: Optional parent document ID for nesting
            publish: Whether to publish the document immediately (True) or
                save as draft (False)
    
        Returns:
            Result message with the new document ID
        """
        try:
            client = await get_outline_client()
    
            data = {
                "title": title,
                "text": text,
                "collectionId": collection_id,
                "publish": publish,
            }
    
            if parent_document_id:
                data["parentDocumentId"] = parent_document_id
    
            response = await client.post("documents.create", data)
            document = response.get("data", {})
    
            if not document:
                return "Failed to create document."
    
            doc_id = document.get("id", "unknown")
            doc_title = document.get("title", "Untitled")
    
            return f"Document created successfully: {doc_title} (ID: {doc_id})"
        except OutlineClientError as e:
            return f"Error creating document: {str(e)}"
        except Exception as e:
            return f"Unexpected error: {str(e)}"
  • Conditional registration of write tools including document_content.register_tools(mcp) which registers the create_document handler, only when OUTLINE_READ_ONLY is not set.
    # Conditionally register write tools (disabled in read-only mode)
    if os.getenv("OUTLINE_READ_ONLY", "").lower() not in (
        "true",
        "1",
        "yes",
    ):
        document_content.register_tools(mcp)
        document_lifecycle.register_tools(mcp)
        document_organization.register_tools(mcp)
        batch_operations.register_tools(mcp)
  • The register function that orchestrates registration of all document tools, calling document_content.register_tools among others conditionally.
    def register(
        mcp, api_key: Optional[str] = None, api_url: Optional[str] = None
  • The function signature defines the input schema via type hints: title (str required), collection_id (str required), text (str optional), parent_document_id (str optional), publish (bool default True). Returns str message with new doc ID.
    async def create_document(
        title: str,
        collection_id: str,
        text: str = "",
        parent_document_id: Optional[str] = None,
        publish: bool = True,
    ) -> str:

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/Vortiago/mcp-outline'

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