Skip to main content
Glama
ibm-ecm

IBM Core Content Services MCP Server

Official
by ibm-ecm

get_document_versions

Retrieves all versions in a document's version series by providing the document ID or path.

Instructions

Retrieves all versions in the version series that includes the specified document. This returns all versions (past, current, and future) that belong to the same version series.

:param identifier: The document id or path (required). This can be either the document's ID (GUID) or its path in the repository (e.g., "/Folder1/document.pdf").

:returns: A dictionary containing the version series details, including: - versionSeries (dict): A dictionary containing version series details, including: - versions (list): A list of all versions in the series, with each version containing: - versionables (list): A list of versionable objects, each containing: - majorVersionNumber (int): The major version number. The format to print out version number is majorVersionNumber.minorVersionNumber. - minorVersionNumber (int): The minor version number. The format to print out version number is majorVersionNumber.minorVersionNumber. - id (str): The unique identifier of the version's document id.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
identifierYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The `register_document_tools` function registers the `get_document_versions` tool. The handler function is `get_document_versions` (defined as an async inner function at line 66), which takes an `identifier` parameter and executes a GraphQL query to retrieve all versions in the version series. It builds a GraphQL query `getDocumentVersions` and returns the result from `graphql_client.execute_async()`. No schema validation (beyond the `identifier: str` parameter) or helper utilities are needed.
    def register_document_tools(
        mcp: FastMCP, graphql_client: GraphQLClient, metadata_cache: MetadataCache
    ) -> None:
        @mcp.tool(
            name="get_document_versions",
        )
        async def get_document_versions(identifier: str) -> dict:
            """
            Retrieves all versions in the version series that includes the specified document.
            This returns all versions (past, current, and future) that belong to the same version series.
    
            :param identifier: The document id or path (required). This can be either the document's ID (GUID)
                              or its path in the repository (e.g., "/Folder1/document.pdf").
    
            :returns: A dictionary containing the version series details, including:
                - versionSeries (dict): A dictionary containing version series details, including:
                    - versions (list): A list of all versions in the series, with each version containing:
                        - versionables (list): A list of versionable objects, each containing:
                            - majorVersionNumber (int): The major version number. The format to print out version number is majorVersionNumber.minorVersionNumber.
                            - minorVersionNumber (int): The minor version number. The format to print out version number is majorVersionNumber.minorVersionNumber.
                            - id (str): The unique identifier of the version's document id.
            """
            query = """
            query getDocumentVersions($object_store_name: String!, $identifier: String!){
                document(
                    repositoryIdentifier: $object_store_name
                    identifier: $identifier
                ) {
                    versionSeries {
                        versions {
                            versionables {
                                id
                                majorVersionNumber
                                minorVersionNumber
                            }
                        }
                    }
                }
            }
            """
    
            variables = {
                "identifier": identifier,
                "object_store_name": graphql_client.object_store,
            }
    
            return await graphql_client.execute_async(query=query, variables=variables)
  • The registration of the `get_document_versions` tool happens via the `@mcp.tool(name='get_document_versions')` decorator on line 63-64, inside the `register_document_tools` function. The tool is registered when `register_document_tools` is called from `mcp_server_main.py` (line 270 for CORE server type, line 293 for FULL server type).
    def register_document_tools(
        mcp: FastMCP, graphql_client: GraphQLClient, metadata_cache: MetadataCache
    ) -> None:
        @mcp.tool(
            name="get_document_versions",
        )
  • The GraphQL query string (lines 82-99) embedded in the handler is a helper/data component that defines the query to retrieve document versions. It queries the `document` by identifier, traverses to `versionSeries` -> `versions` -> `versionables`, returning `id`, `majorVersionNumber`, and `minorVersionNumber`.
    query = """
    query getDocumentVersions($object_store_name: String!, $identifier: String!){
        document(
            repositoryIdentifier: $object_store_name
            identifier: $identifier
        ) {
            versionSeries {
                versions {
                    versionables {
                        id
                        majorVersionNumber
                        minorVersionNumber
                    }
                }
            }
        }
    }
    """
    
    variables = {
        "identifier": identifier,
        "object_store_name": graphql_client.object_store,
    }
    
    return await graphql_client.execute_async(query=query, variables=variables)
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full disclosure burden. It explains that it returns all versions (past, current, future) in the series and details return structure. It does not mention permissions or side effects, but for a read-only operation this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary followed by nested return details, but it is verbose (multiple lines) and could be more concise without losing crucial information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter, no annotations, and an existing output schema, the description covers the tool's purpose, parameter semantics, and return structure in detail, making it complete for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description compensates fully: it explains the 'identifier' parameter can be a document ID (GUID) or path with an example, adding meaning beyond the schema's type string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all versions in the version series for a specified document, using the verb 'retrieves' and resource 'all versions in the version series'. It distinguishes itself from siblings like delete_document_version or checkin_document as a read-only version history tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. While it mentions the identifier can be document id or path, it does not specify prerequisites, when to prefer this over get_document_properties, or scenarios where it should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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