Skip to main content
Glama
ibm-ecm

IBM Core Content Services MCP Server

Official
by ibm-ecm

checkin_document

Check in documents to IBM Content Manager with updated properties, version control, and optional file uploads for content management workflows.

Instructions

Checks in a document in the content repository with specified properties.

:param identifier: The identifier (required). This can be either a reservation_id or document_id. Reservation ID (GUID) is prioritized. Otherwise, we use document_id (GUID). :param checkin_action: Check-in action parameters for the document. :param document_properties: Properties to update for the document during check-in. :param file_paths: Optional list of file paths to upload as the document's content.

:returns: If successful, returns a Document object with its updated properties. If unsuccessful, returns a ToolError with details about the failure.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
identifierYes
checkin_actionNo
document_propertiesNo
file_pathsNo

Implementation Reference

  • The core handler function for the 'checkin_document' tool. It performs a GraphQL 'checkinDocument' mutation to check in the specified document or reservation, optionally updating properties and uploading files. Handles errors and returns a Document object or ToolError.
    async def checkin_document( identifier: str, checkin_action: Optional[SubCheckinActionInput] = SubCheckinActionInput(), document_properties: Optional[DocumentPropertiesInput] = None, file_paths: Optional[List[str]] = None, ) -> Union[Document, ToolError]: """ Checks in a document in the content repository with specified properties. :param identifier: The identifier (required). This can be either a reservation_id or document_id. Reservation ID (GUID) is prioritized. Otherwise, we use document_id (GUID). :param checkin_action: Check-in action parameters for the document. :param document_properties: Properties to update for the document during check-in. :param file_paths: Optional list of file paths to upload as the document's content. :returns: If successful, returns a Document object with its updated properties. If unsuccessful, returns a ToolError with details about the failure. """ method_name = "checkin_document" try: # Prepare the mutation mutation = """ mutation ($object_store_name: String!, $identifier: String!, $document_properties: DocumentPropertiesInput, $checkin_action: SubCheckinActionInput!) { checkinDocument( repositoryIdentifier: $object_store_name identifier: $identifier documentProperties: $document_properties checkinAction: $checkin_action ) { id className reservation{ isReserved id } currentVersion{ contentElements{ ... on ContentTransferType { retrievalName contentType contentSize downloadUrl } } } properties { id value } } } """ # Prepare variables for the GraphQL query variables = { "object_store_name": graphql_client.object_store, "identifier": identifier, "document_properties": None, "checkin_action": None, } # Process file paths file_paths_dict = {} # Handle file upload if file paths are provided if file_paths: try: # Initialize document_properties if not provided if not document_properties: document_properties = DocumentPropertiesInput() file_paths_dict = document_properties.process_file_content( file_paths ) except Exception as e: logger.error("%s failed: %s", method_name, str(e)) logger.error(traceback.format_exc()) return ToolError( message=f"{method_name} failed: {str(e)}. Trace available in server logs." ) # Process document properties if provided if document_properties: try: transformed_props = document_properties.transform_properties_dict( exclude_none=True ) variables["document_properties"] = transformed_props except Exception as e: logger.error("Error transforming document properties: %s", str(e)) logger.error(traceback.format_exc()) return ToolError( message=f"{method_name} failed: {str(e)}. Trace available in server logs." ) if checkin_action: # Handle checkin action if provided # Use model_dump with exclude_none for cleaner code variables["checkin_action"] = checkin_action.model_dump( exclude_none=True ) # Execute the GraphQL mutation if file_paths_dict: # Use execute with file_paths for file upload logger.info("Executing document check-in with file upload") response = graphql_client.execute( query=mutation, variables=variables, file_paths=file_paths_dict, ) else: # Use execute_async for regular document check-in logger.info("Executing document check-in") response = await graphql_client.execute_async( query=mutation, variables=variables ) # Handle errors if "errors" in response: logger.error("GraphQL error: %s", response["errors"]) return ToolError(message=f"{method_name} failed: {response['errors']}") # Create and return a Document instance from the response return Document.create_an_instance( graphQL_changed_object_dict=response["data"]["checkinDocument"], class_identifier=DEFAULT_DOCUMENT_CLASS, ) except Exception as e: logger.error("%s failed: %s", method_name, str(e)) logger.error(traceback.format_exc()) return ToolError( message=f"{method_name} failed: {str(e)}. Trace available in server logs." )
  • The @mcp.tool decorator registers the 'checkin_document' handler function within the register_document_tools function.
    @mcp.tool( name="checkin_document", )
  • Calls register_document_tools to register document tools (including checkin_document) for CORE server type in register_server_tools function.
    if server_type == ServerType.CORE: register_document_tools(mcp, graphql_client, metadata_cache) register_folder_tools(mcp, graphql_client) register_class_tools(mcp, graphql_client, metadata_cache) register_search_tools(mcp, graphql_client, metadata_cache) register_annotation_tools(mcp, graphql_client) logger.info("Core tools registered")
  • Calls register_document_tools to register document tools (including checkin_document) for FULL server type in register_server_tools function.
    elif server_type == ServerType.FULL: register_document_tools(mcp, graphql_client, metadata_cache) register_folder_tools(mcp, graphql_client) register_class_tools(mcp, graphql_client, metadata_cache) register_search_tools(mcp, graphql_client, metadata_cache) register_annotation_tools(mcp, graphql_client) register_vector_search_tool(mcp, graphql_client) register_legalhold(mcp, graphql_client) logger.info("All tools registered")
  • Type hints define the input schema: identifier (str), checkin_action (SubCheckinActionInput), document_properties (DocumentPropertiesInput), file_paths (list[str]). Output: Document or ToolError.
    async def checkin_document( identifier: str, checkin_action: Optional[SubCheckinActionInput] = SubCheckinActionInput(), document_properties: Optional[DocumentPropertiesInput] = None, file_paths: Optional[List[str]] = None,

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/ibm-ecm/ibm-content-services-mcp-server'

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