The Core Content Services MCP Server provides a standardized interface that enables IBM FileNet Content Manager (FNCM) capabilities to be used by AI models. This MCP Server enables you to:
- Manage documents stored within FNCM through AI Agents, including document creation and deletion
- Perform updates to documents such as check in, check out, and property updates
- Search for objects such as documents and folders
- Manage folders and file / un-file documents in folders
- Manage document classes, folder classes, and more
The Core Content Services MCP Server provides the following tools for interacting with FileNet CPE:
-
get_document_versions: Retrieves a document's version history, including major and minor version numbers and document IDs for each version.
-
get_document_text_extract: Extracts text content from a document by retrieving its text extract annotations. If multiple text extracts are found, they are concatenated. Note: This functionality requires the Persistent Text Extract add-on to be installed in your object store. See the Prerequisites section for more details.
-
create_document: Creates a new document in the content repository with specified properties. Can upload files as the document's content if file paths are provided. Requires first calling determine_class and get_class_property_descriptions.
-
update_document_properties: Updates an existing document's properties without changing its class. Requires first calling get_class_property_descriptions to get valid properties for the document's current class.
-
update_document_class: Changes a document's class in the content repository. WARNING: Changing a document's class can result in loss of properties if the new class does not have the same properties as the old class. Requires first calling determine_class to get the new class_identifier.
-
checkin_document: Checks in a document that was previously checked out. Can upload new content files during check-in if file paths are provided.
-
checkout_document: Checks out a document for editing. Can download the document content to a specified folder path if provided.
-
cancel_document_checkout: Cancels a document checkout in the content repository, releasing the reservation.
-
get_document_property: Retrieves a document from the content repository by ID or path, returning the document object with its properties.
-
get_class_specific_properties_name: Retrieves a list of class-specific property names for a document based on its class definition. Filters out system properties and hidden properties.
-
delete_document_version: Deletes a specific document version in the content repository using its document ID.
-
delete_version_series: Deletes an entire version series (all versions of a document) in the content repository using the version series ID.
-
create_folder: Creates a new folder in the content repository with specified name, parent folder, and optional class identifier.
-
delete_folder: Deletes a folder from the repository using its ID or path.
-
unfile_document: Removes a document from a folder without deleting the document itself.
-
update_folder: Updates an existing folder's properties. Requires first calling determine_class and get_class_property_descriptions.
-
get_folder_documents: Get documents contained in a folder.
-
list_root_classes: Lists all classes of a specific root class in the repository.
-
list_all_classes: Lists all classes of a specific root class in the repository.
-
determine_class: Determines the appropiate class based on the available classes and the content of the user's message or context document.
-
get_class_property_descriptions: Retrieves detailed descriptions of all properties for a specified class.
-
get_searchable_property_descriptions: Retrieves descriptions of properties that can be used in search operations.
-
repository_object_search: Searches for repository objects based on specified criteria.
-
lookup_documents_by_name: Searches for documents by matching keywords against document names. Returns a ranked list of matching documents with confidence scores. Useful when you know part of a document's name but not its exact ID or path.
-
lookup_documents_by_path: Searches for documents based on their location in the folder hierarchy. Matches keywords against folder names and document containment names at each path level. Particularly useful when the user describes a document using path separators (e.g., "/Folder1/Subfolder/document").
- get_document_annotations: Retrieves all annotations associated with a document, including their IDs, names, descriptive text, and content elements.
The Core Content Services MCP Server has been tested with the following MCP client and LLM combinations:
- Claude Desktop: Sonnet 4.5, 4, 3.5 and Haiku 4.5
- Watsonx Orchestrate: Llama-3-2-90b-vision-instruct
While other MCP client and LLM combinations have not been tested, they may work with this server. We encourage you to experiment and validate for yourself.
For setup instructions with additional MCP clients, see:
Some MCP clients have limitations that affect which tools can be used. The following table shows known compatibility issues:
| MCP Client | Limitation | Affected Tools |
|---|---|---|
| Watson Orchestrate | Does not support complex Pydantic classes as input | • create_document• update_document_properties• checkout_document• checkin_document• update_folder• repository_object_search |
Note: These limitations are due to the MCP client's input handling capabilities, not the MCP server itself.
- Python 3.13+
- uv
- on macOS:
brew install uv - on Windows: see link above
- on macOS:
- Access to a FileNet Content Platform Engine (CPE) server with Content Services GraphQL API (CS-GQL) installed
- Persistent Text Extract Add-on must be installed in your object store if you want to use document content retrieval functionality
- This add-on enables the extraction and storage of text content from documents
- Without this add-on, the
get_document_text_extracttool will not return document content - For installation instructions, refer to the IBM Documentation on Installing the Persistent Text Add-on
The Core Content Services MCP Server requires several environment variables to connect to your FileNet CPE server:
| Environment Variable | Description | Default |
|---|---|---|
SERVER_URL |
Content Services GraphQL API endpoint URL (required) | - |
USERNAME |
Authentication username (required) | - |
PASSWORD |
Authentication password (required) | - |
OBJECT_STORE |
Object store identifier (required) | - |
| Environment Variable | Description | Default |
|---|---|---|
SSL_ENABLED |
Whether SSL is enabled. Can be set to true, a path to a certificate file, or false (not recommended for production) |
true |
TOKEN_SSL_ENABLED |
Whether SSL is enabled for token endpoint. Can be set to true, a path to a certificate file, or false (not recommended for production) |
true |
TOKEN_REFRESH |
Token refresh interval in seconds | 1800 |
TOKEN_URL |
OAuth token URL | - |
GRANT_TYPE |
OAuth grant type | - |
SCOPE |
OAuth scope | - |
CLIENT_ID |
OAuth client ID | - |
CLIENT_SECRET |
OAuth client secret | - |
REQUEST_TIMEOUT |
Request timeout in seconds | 30.0 |
POOL_CONNECTIONS |
Number of connection pool connections | 100 |
POOL_MAXSIZE |
Maximum pool size | 100 |
| Environment Variable | Description | Default |
|---|---|---|
ZENIAM_ZEN_URL |
Zen url to send IAM token for exchange to Zen token, for example: <zen_host_route>/v1/preauth/validateAuth | - |
ZENIAM_ZEN_SSL_ENABLED |
Whether SSL is enabled for Zen exchange route. Can be set to true, a path to a certificate file, or false (not recommended for production) |
true |
ZENIAM_IAM_URL |
IAM url to send user/pwd or client_id/client_secret to IAM to get back IAM token, for example: <iam_host_route>/idprovider/v1/auth/identitytoken | - |
ZENIAM_IAM_SSL_ENABLED |
Whether SSL is enabled for IAM route. Can be set to true, a path to a certificate file, or false (not recommended for production) |
true |
ZENIAM_IAM_GRANT_TYPE |
IAM grant type | - |
ZENIAM_IAM_SCOPE |
IAM scope | - |
ZENIAM_IAM_USER |
if grant type is password, specify the IAM user | - |
ZENIAM_IAM_PASSWORD |
if grant type is password, specify the IAM password | - |
ZENIAM_CLIENT_ID |
if grant type is client_credentials, specify the IAM client id | - |
ZENIAM_CLIENT_SECRET |
if grant type is client_credentials, specify the IAM client secret | - |
For SSL configuration (SSL_ENABLED, TOKEN_SSL_ENABLED, ZENIAM_ZEN_SSL_ENABLED, and ZENIAM_IAM_SSL_ENABLED), you have three options:
-
Use System Certificates (Recommended for Production): Set to
trueto use your system's certificate store. -
Provide Custom Certificate Path: Set to the file path of your certificate (e.g.,
/path/to/certificate.pem). -
Disable SSL Verification (Not Recommended for Production): Set to
falseto disable SSL verification.
Security Warning: Disabling SSL verification (
false) should only be used in testing environments. For production deployments, always use proper certificate validation to ensure secure communications.
The server supports two authentication methods:
Set the following environment variables:
SERVER_URL=https://your-graphql-endpoint
USERNAME=your_username
PASSWORD=your_password
OBJECT_STORE=your_object_store
SSL_ENABLED=your_path_to_graphql_certificate | true | false
Set the following environment variables:
SERVER_URL=https://your-graphql-endpoint
USERNAME=your_username
PASSWORD=your_password
TOKEN_URL=https://your-oauth-server/token
GRANT_TYPE=password
SCOPE=openid
CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
OBJECT_STORE=your_object_store
An example of ZEN/IAM environment variables when using USER/PASSWORD and SSL to all external servers
SERVER_URL=https://your-graphql-endpoint
SSL_ENABLED=your_path_to_graphql_certificate| true | false
OBJECT_STORE=your_object_store
ZENIAM_ZEN_URL=https://your-zen-exchange-route
ZENIAM_ZEN_SSL_ENABLED=your_path_to_zen_exchange_route_certicate | true | false
ZENIAM_IAM_URL=https://your-IAM-route
ZENIAM_IAM_SSL_ENABLED=your_path_to_IAM_route_certicate | true | false
ZENIAM_IAM_GRANT_TYPE=password
ZENIAM_IAM_SCOPE=openid
ZENIAM_IAM_USER=your_user_name
ZENIAM_IAM_PASSWORD=your_user_password
-
Open Claude Desktop Settings:
-
Navigate to the Developer tab and click Edit Config:
-
Add one of the following configuration examples to the claude_desktop_config.json file:
Option 1: Using local installation (if you've cloned the repository)
{ "mcpServers": { "core-cs-mcp-server": { "command": "/path/to/your/uvx", "args": [ "--from", "/path/to/your/cs-mcp-server", "core-cs-mcp-server" ], "env": { "USERNAME": "your_username", "PASSWORD": "your_password", "SERVER_URL": "https://your-graphql-server/content-services-graphql/graphql", "OBJECT_STORE": "your_object_store" } } } }Option 2: Installing directly from GitHub (recommended)
{ "mcpServers": { "core-cs-mcp-server": { "command": "uvx", "args": [ "--from", "git+https://github.com/ibm-ecm/cs-mcp-server", "core-cs-mcp-server" ], "env": { "USERNAME": "your_username", "PASSWORD": "your_password", "SERVER_URL": "https://your-graphql-server/content-services-graphql/graphql", "OBJECT_STORE": "your_object_store" } } } } -
Restart Claude Desktop:
- Simply closing the window is not enough, Claude Desktop must be stopped and restarted:
- on macOS: Claude > Quit
- on Windows: File > Exit
- Simply closing the window is not enough, Claude Desktop must be stopped and restarted:
-
Check Available Tools:
Note: The JSON configuration examples above show only the minimum required environment variables. For a complete list of all possible configuration options, refer to the Environment Variables tables above.
This section explains how to augment IBM watsonx Orchestrate with the Core Content Services MCP Server, enabling watsonx Orchestrate to interact with IBM FileNet Content Management during user interactions in a chat.
For SaaS or on-premises offering (UI):
- Click the main menu icon
- Navigate to Manage > Connections
- Click Add New Connection
- Enter connection ID and display name
- Click Next
- You will now configure draft connection details (test environment)
- Select authentication type dropdown to be Key value pair
- Enter each required variable:
SERVER_URL: Your Content Services GraphQL API endpoint URLUSERNAME: Authentication usernamePASSWORD: Authentication passwordOBJECT_STORE: Object store identifier
- Enter any optional variables as needed (e.g.,
SSL_ENABLED,TOKEN_REFRESH, etc.) - Click Next when done
- Now you will enter your live connection environment variables
- Select authentication type dropdown to be Key value pair
- Enter the same required variables as above
- Enter any optional variables as needed
- Select the preferred credential type
- Click Add Connection
For ADK (Application Development Kit):
For creating connections using the ADK CLI, please refer to the official documentation.
-
Click the main menu icon
-
Navigate to Build > Agent Builder
-
Navigate to All agents
-
Click Create agent + to add a new agent
-
Choose Create from scratch
-
Enter a Name (e.g.,
Core Content Services Agent) -
Enter a Description (e.g.,
This agent enables interaction with FileNet Content Management.) -
Click Create
-
Navigate to the Toolset section, click Add tool +
-
Click Import
-
Click Import from MCP server
-
Click Add MCP server
-
Enter a Server name without any space characters (e.g.,
core-cs-mcp-server) -
Optionally enter a Description (e.g.,
This MCP Server connects to FileNet Content Platform Engine, enabling content management operations.) -
Enter an Install command:
uvx --from git+https://github.com/ibm-ecm/cs-mcp-server core-cs-mcp-server -
Click Connect
-
If you see "Connection successful", click Done
-
Set the Activation toggle to On for the tools you want to enable
-
Associate your previously created connection with this agent
Once configured, you can interact with your FileNet repository through natural language in watsonx Orchestrate chats, depending on which tool you've enabled. For example:
-
"Find all documents containing the pdf in its document title"
-
"Create a new folder called Project Z"
Click Show Reasoning in any response to see the details of the operations performed.
If you have a local copy of the repository, you can run the server directly with:
USERNAME=your_username PASSWORD=your_password SERVER_URL=https://your-graphql-server/content-services-graphql/graphql OBJECT_STORE=your_object_store /path/to/your/uvx --from /path/to/your/cs-mcp-server core-cs-mcp-serverThe Core Content Services MCP Server can be integrated with AI Agents that support the MCP protocol. This allows the AI Agent to:
- Access and retrieve document properties
- Extract text from documents
- Create, update, check-in, and check-out documents
- Manage folders and document classifications
- Execute searches
- Get document annotations
-
Search and Discovery:
- Users typically start with descriptive information (name, content, keywords) rather than IDs
- The AI Agent first uses search tools to locate relevant objects:
get_searchable_property_descriptionsto discover valid search propertiesrepository_object_searchfor property-based searches
- Search results include object IDs needed for subsequent operations
-
Document Retrieval:
- Once an object ID is obtained through search, the AI Agent can retrieve:
- Document properties using the ID
- Version history
- Text content (requires Persistent Text Extract Add-on to be installed)
- Annotations
- Once an object ID is obtained through search, the AI Agent can retrieve:
-
Document Creation: Users can ask the AI Agent to create new documents with specific properties and content.
-
Document Update:
- After identifying a document through search, the AI Agent can:
- Check out the document using its ID
- Update properties or content
- Check the document back in
- After identifying a document through search, the AI Agent can:
-
Folder Operations:
- Folders can be identified by path or by ID from search results
- Documents can be filed/unfiled using both document and folder IDs
Note: Most operations that modify or access specific objects require an object ID, which is typically obtained through a search operation first. This workflow pattern ensures users can work with objects by their meaningful attributes rather than requiring them to know technical identifiers upfront.
See the LICENSE file for details.
Licensed Materials - Property of IBM (c) Copyright IBM Corp. 2019,2025 All Rights Reserved.
US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
IBM Corp.
DISCLAIMER OF WARRANTIES :
Permission is granted to copy and modify this Sample code, and to distribute modified versions provided that both the
copyright notice, and this permission notice and warranty disclaimer appear in all copies and modified versions.
THIS SAMPLE CODE IS LICENSED TO YOU AS-IS. IBM AND ITS SUPPLIERS AND LICENSORS DISCLAIM ALL WARRANTIES, EITHER
EXPRESS OR IMPLIED, IN SUCH SAMPLE CODE, INCLUDING THE WARRANTY OF NON-INFRINGEMENT AND THE IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL IBM OR ITS LICENSORS OR SUPPLIERS BE LIABLE FOR
ANY DAMAGES ARISING OUT OF THE USE OF OR INABILITY TO USE THE SAMPLE CODE, DISTRIBUTION OF THE SAMPLE CODE, OR
COMBINATION OF THE SAMPLE CODE WITH ANY OTHER CODE. IN NO EVENT SHALL IBM OR ITS LICENSORS AND SUPPLIERS BE LIABLE
FOR ANY LOST REVENUE, LOST PROFITS OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, EVEN IF IBM OR ITS LICENSORS OR SUPPLIERS HAVE
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
















