MCP Server in MDM
This article introduces the MDM MCP Server, an experimental feature that exposes MDM metadata, records, and tasks to AI agents through the Model Context Protocol (MCP).
To enable and configure the MCP Server, see Set Up the MDM MCP Server.
|
The MDM MCP Server is an experimental feature. The protocol, tool definitions, configuration properties, and authentication mechanisms are subject to change in future releases. We recommend using the MCP Server for research, development, sandbox testing, and internal proof-of-concept workflows. Do not deploy it in production environments without appropriate network isolation, rate limiting, and oversight. |
About MDM MCP Server
The Model Context Protocol (MCP) is an open standard based on JSON-RPC 2.0 that lets AI clients—such as Claude Code, Cursor, and OpenCode—interact with external tools and data sources. The MDM MCP Server enables AI agents to query and interact with MDM metadata, records, and tasks programmatically, under the same security boundaries and permissions as human users.
The server is embedded directly in the MDM Server and is available in all deployment types (Ataccama Cloud, Custom Ataccama Cloud, self-managed).
The MCP Server operates in read-only mode and AI agents cannot modify entities directly. Any proposed changes are captured in tasks and drafts, which follow the usual publishing and approval workflows.
| Because the MCP Server exposes raw metadata and golden record contents to connected AI clients, which might use external cloud model providers depending on your client configuration, exercise caution with personally identifiable information (PII) and other sensitive data. See Data privacy considerations. |
Authentication
The MCP Server uses OAuth 2.0 authentication, with clients using the OAuth 2.0 Authorization Code grant with PKCE against a pre-registered public OpenID Connect client in Keycloak.
Every request to the server must meet the following requirements:
-
Bearer token: There is a valid JSON Web Token (JWT) in the
Authorization: Bearer <token>header. -
Audience and scope binding: The token contains the audience claim (
aud)urn:ataccama:mdm:mcp-serverand includes themcpscope. This prevents a token issued for another client or service from being used to access the MCP Server. -
Session binding: When a client establishes a session (identified by the
X-MCP-Session-Idheader), that session is bound to the user’s identity. If a different user attempts to use the same session ID, the server rejects the request with a403 Forbiddenresponse.
For the full Keycloak setup, see Configure Keycloak.
Permissions
Once connected, an agent operates as the authenticated user: it has the same access to entities, records, and tasks that the user has in the MDM web application, and no more. The MCP Server reuses the existing MDM Web Application permissions rather than introducing a separate model.
In practice, this means:
-
Agents can only see entities, records, and tasks the user is allowed to see.
-
Column and row permissions configured in MDM apply to data returned to the agent.
-
Workflow and task actions are limited to those permitted by the user’s roles.
For more information about the underlying permission model, see Configuring Permissions and MDM Web App Permissions.
Data privacy considerations
When an agent calls a data tool such as getRecord, getRecordWithRelation, or findRecords, record contents are retrieved from MDM and transmitted to the connected AI client.
Depending on how that client is configured, the data might be sent to an external cloud model provider.
To reduce the risk of exposing PII and other sensitive data:
-
Review your column and row permissions. Use MDM column and row permissions to restrict sensitive columns so they are not returned to the agent.
-
Keep sensitive data out of prompts. Do not enter raw personal data, passwords, or secrets into natural language prompts or prompt templates.
-
Use private model endpoints. For sensitive data, configure your clients to use local, private, or corporate-hosted model endpoints rather than public cloud models.
Tools
Tools are the capabilities the server exposes to an AI agent. The agent decides when to call a tool, interprets the user’s request, and fills in the parameters.
Tools fall into these categories:
|
Data-intensive tools such as
|
Metadata tools
These tools let the agent discover the MDM model (that is, entity names, columns, data types, and relationships) before running data queries.
| Tool | Description |
|---|---|
|
Lists lightweight identifiers for all entities the caller can access, across both the instance and master layers. Useful for basic discovery. Returns a list of entities, each with its technical name, type (master or instance), and master view (for master entities). |
|
Lists instance-layer entities with their canonical technical names. Use it before the record tools to avoid casing or naming mismatches. Returns a list of instance-layer entities with their technical names. |
|
Lists master-layer (golden record) entities with their canonical technical names and associated master views. Returns a list of master-layer entities with their technical names and master views. |
|
Retrieves the detailed metadata of a specific entity, including its attributes and relationships. Use it before writing a query to see which fields can be filtered or returned. The labels and descriptions configured in your model are included in the response, which helps the agent choose the right fields.
|
Data tools
These tools retrieve and search master and instance records.
| Tool | Description |
|---|---|
|
Retrieves a single record by its technical ID.
|
|
Retrieves a record together with its related records in a single call, following the relationship paths you specify (for example, an author and that author’s company). The result can be narrowed with a JsonPath expression.
|
|
Searches for records using filter conditions, logical operators, and pagination.
By default, |
When building filters, follow these rules:
-
Use the canonical, case-sensitive field names returned by
getEntityor the listing tools (for example,birth_date, notbirthDate). -
Join conditions with
ANDorOR(ANDis the default). -
Use only these operators:
EQ,NE,GT,LT,GE,LE,CONTAINS,NOT_CONTAINS,BEGINS_WITH,NOT_BEGINS_WITH,ENDS_WITH,NOT_ENDS_WITH,IS_NULL,IS_NOT_NULL. Avoid SQL symbols and aliases such as=,LIKE,NEQ,GTE, orLTE. -
Pass Boolean values as JSON Booleans (
true/false), not as strings.
Task and draft tools
These tools browse and inspect workflow tasks and the draft changes attached to them.
| Tool | Description |
|---|---|
|
Lists workflow tasks, optionally filtered by ownership and by active or closed state.
|
|
Retrieves the details of a specific task.
|
|
Retrieves the proposed changes held in a draft, so they can be reviewed before the task is resolved.
|
Resources and prompts
In addition to tools, the server can expose resources and prompts that you define in MDM Server application properties.
Resources are read-only text—instructions, schemas, or guidelines that the agent reads as context.
For example, a party-search-strategy resource can tell the agent which view to search first.
Prompts are predefined instruction templates that let users trigger a complex query quickly, for example a search-party prompt.
Configuring resources
Resources are configured under the com.ataccama.mdm.mcp.resource.custom prefix.
com.ataccama.mdm.mcp.resource.custom.party-search-strategy.uri=mdm://instructions/custom/party-search-strategy
com.ataccama.mdm.mcp.resource.custom.party-search-strategy.name=party-search-strategy
com.ataccama.mdm.mcp.resource.custom.party-search-strategy.title=Party Search Strategy
com.ataccama.mdm.mcp.resource.custom.party-search-strategy.description=Information about default search and view configuration.
com.ataccama.mdm.mcp.resource.custom.party-search-strategy.text=By default, the 'masters' view is used for the 'party' entity. Search operations look up master records first, and if not found, search instance records.
Configuring prompts
Prompts are configured under the com.ataccama.mdm.mcp.prompt.prompt prefix.
com.ataccama.mdm.mcp.prompt.prompt.search-party.description=Search in master party entity
com.ataccama.mdm.mcp.prompt.prompt.search-party.prompt=Search in master party entity, use MCP tools, read definitions
Using resources and prompts in Claude Code
A connected client such as Claude Code can discover and use these capabilities:
-
/tools: Lists available programmatic tools. -
/resources: Lists exposed custom resources. -
/prompts: Lists available custom prompts.
To attach a resource as grounding context, reference it with @ followed by the resource name within your request, for example: Review @party-search-strategy and find the record for John Smith.
To run a prompt, use /prompts run <prompt-key> (for example, /prompts run search-party).
Example prompts
The following examples show how natural language questions could map to sequences of tool calls.
Look up a record and several of its attributes
User question: Find the product named "Aspirin 100mg" and tell me its product type, whether it’s a package product, and its validity dates.
The agent workflow:
-
Calls
listMasterEntitiesto identify theproductentity and its master view -
Calls
getEntityto resolve the exact column names for product type, package flag, and validity dates -
Runs
findRecordswith anEQfilter on the name. -
Reads the matching record and presents the requested fields in plain language.
Traverse a parent-to-child relationship
User question: Find the healthcare organization "City General Health" and list all medical facilities it operates.
The agent workflow:
-
Runs
findRecordson thehcoentity to find the organization and its ID. -
Calls
getEntityon thefacilityentity to find the foreign-key column that references the parent. -
Runs
findRecordsonfacilityfiltered by that key. -
Lists the returned facilities.
Navigate a hierarchy
User question: Show me the immediate child products of "Product Family A".
The agent workflow:
-
Runs
findRecordsonproductto get the parent’s ID. -
Queries the product-to-product relationship entity to retrieve the child IDs.
-
Resolves child IDs back to product names with
findRecords(orgetRecord). -
Presents child entities as a list.
Recover from a typo (fuzzy search)
User question: Find the organization "Ataccma" [misspelled].
The agent workflow:
-
Tries
findRecordswith anEQfilter, which returns no results. -
Retries the query with a
CONTAINSorBEGINS_WITHfilter on a partial form of the name. -
Identifies the closest match.
-
Presents the closest match with a note about the spelling correction.
Review a pending change
User question: What change is being proposed in the open task for the person record "John Smith"?
The agent workflow:
-
Calls
findTasks(withfromClosed=false) to locate the active task. -
Calls
getTaskto read its state and the attacheddraftId. -
Calls
getDraftto retrieve the proposed values. -
Compares the before and after states.
-
Summarizes the pending modifications, for example in a table.
Was this page useful?