Anthropic's MCP + Eunomia = Standard and Lightweight Data Governance

By Vincenzo Pecorella, Pietro Valfrè and Tommaso Tassi

January 22, 2025

Last November, Anthropic released its own Model Context Protocol (MCP) with the goal of standardizing the way LLMs access external data. This was great news, as we believe LLMs are only as useful as the data they have access to! We made sure that we at least shared some common ideas with the big fishes out there.

However, streamlining access to external data reminded us of the reason why we started What About You. We released Eunomia a few weeks ago to help developers around the world easily tackle the challenge of implementing DAG in their LLM-based applications, and we thought the release of Anthropic’s MCP was both a threat and an opportunity for pursuing our goal.

Today we are launching the integration of Eunomia with MCP, as we hope this will dramatically improve the ability to govern unstructured data flowing through an MCP server into any enterprise’s LLM-powered application.

Real Case Scenario

Let’s assume a legal firm specializing in M&A and PE deals just asked its AI team to implement an LLM-powered chatbot that could access files in their filesystem, such as clients’ docs, extract information, and summarize them, in order to help the firm employees access that information faster and with ease. The AI team just happened to have read Anthropic's MCP announcement this past weekend and they found out there is an already-built filesystem server, which enables streamlined integration for their application—they’re juggling in joy!

However, a few days later, the management comes back to the AI team and asks for a fix to the application; everything works fine but they don’t want their associates to access the names of the buying company, nor the selling company until the deal is publicly announced. Certain clients’ information should be kept accessible only by the partner who brokered the deal. Confidentiality is key at the firm. The AI team now needs an urgent fix to their awesome MCP integration and they are fearing they should start everything from scratch and build a custom solution.

But here comes the What About You team to save those devs’ hours and headaches.

From now on you can easily implement Eunomia’s Orchestras with MCP servers. For this specific case you can easily combine Financial Data Redaction and RBAC to remove specific financial data regarding the M&A deal, based on the role of the employee prompting the chatbot, in a few minutes.

Understanding the Current Architecture

Before diving into the solution, we need to understand the current architecture a bit better. The developers directly connected the MCP server—which works with the file system—to their client RAG (Retrieval-Augmented Generation) system. The current architecture is illustrated in the picture below:

Current Solution Schematic Overview

While the architecture was straightforward to develop thanks to the MCP framework, it lacks the ability to distinguish between different users. Whether an associate or a partner is asking a question, the system treats them the same way because it makes no distinction based on who is asking.

A naive solution might involve creating two different chatbots with separate sources of knowledge tailored for each user group. However, this approach increases complexity and isn't scalable.

Fortunately, there's the Eunomia MCP Server. It combines the ease of integrating any MCP server in a plug-and-play manner with the ability to enforce data governance. With Eunomia and the Eunomia MCP Server, it's possible to solve this problem—and many others—by imposing granular data governance policies for LLM solutions.

In the following sections, we'll explore how to integrate the Eunomia MCP Server into the current architecture and how to define the required policies.

Diving into the Technical Aspects

To integrate Eunomia within the MCP framework, we need to incorporate the newly released MCP Eunomia server into the existing architecture.

Integration Steps

  1. Connect Eunomia MCP Server to Existing Servers
    Link the Eunomia MCP server with the company's current server(s). For simplicity, we consider only the file system server in this scenario.

  2. Connect Eunomia MCP Server to the Client
    Ensure that the Eunomia MCP server communicates properly with the existing client. During this connection, define the necessary data access policies.

Below is a recap schema of the desired architecture after integration:

Final Solution Schematic Overview

Step 1: Connect Eunomia MCP Server to Existing Servers

Installing Eunomia MCP Server

Begin by installing the Eunomia MCP server through repository cloning.

git clone https://github.com/whataboutyou-ai/eunomia-MCP-server.git

The server primarily consists of two files:

  • server.py: The main Eunomia MCP server script.
  • config.py: The configuration file.

Key Configuration Focus: config.py

Within config.py, two major configuration sections are crucial:

  • MCP_SERVERS
  • ORCHESTRA

For this integration step, our focus is on MCP_SERVERS, as we need it to connect the Eunomia MCP server to the existing file system server.

Configuring MCP_SERVERS

To integrate, copy the command used to instantiate the file system server (as provided by its developer) into the MCP_SERVERS structure within config.py. This tells the Eunomia MCP server how to communicate with and connect to the file system server.

During this phase, the Eunomia MCP server acts as a client to all connected servers. Once started, it will automatically and seamlessly copy all Tools, Prompts, and Resources from each connected server.

Example Configuration for MCP_SERVERS

Below is an example snippet for the MCP_SERVERS variable configured to integrate with the File System Server:

MCP_SERVERS: dict = {
   "filesystem": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
        "--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
        "--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
        "mcp/filesystem",
        "/projects",
      ]
    }
  }
}

Note: For more details on how to instantiate the file system server, refer to its documentation.

While this example focused on integrating the File System MCP server, the Eunomia MCP server supports integration with various other servers. You can find a comprehensive list of available servers in the Official List.

Step 2: Define Policies and Instantiate Eunomia MCP Server

To connect the client with the Eunomia MCP server, treat it like connecting to any other server. Replace the servers dictionary currently used by the single Eunomia MCP server endpoint with the combined configuration. This works seamlessly because all current servers used by the client are already connected to the Eunomia server.

Defining Policies and Updating Server Configuration

First, update the server configuration by substituting the existing server dictionary with the new one that includes all connected servers. For example:

CLIENT_PARAMS = {
  "mcpServers": {
    "eunomia": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/server/eunomia-MCP-server",
        "run",
        "orchestra_server"
      ]
    }
  }
}

Defining Data Governance Policies

For this example, we will focus on two instruments:

  • Financial Data Redaction
  • Role-Based Access Control (RBAC)

Recap of Requirements

  • Partners: Should view all information in clear text. No policy restrictions needed.
  • Associates: Must not see information about the buying and acquired companies. We'll use the Financial Data Redaction instrument to define policies on:
    • Parties.BUYING_COMPANY
    • Parties.ACQUIRED_COMPANY

Policy Definition

The following policy configuration enforces these requirements:

Orchestra(
    instruments=[
        RbacInstrument(
            role="associate",
            instruments=[
                FinancialsInstrument(
                    entities=[
                        "Parties.BUYING_COMPANY",
                        "Parties.ACQUIRED_COMPANY",
                    ],
                    edit_mode="replace",
                )
            ]
        ),
    ]
)

Conclusions

We have successfully integrated the Eunomia MCP server into the architecture presented in our example in an easy and quick manner, ultimately making the company happy with the outcome. This integration not only streamlined access to external data but also enforced robust data governance policies, ensuring that sensitive financial data is appropriately redacted based on user roles.

Resources Used in This Example

  • Eunomia: link
  • Eunomia MCP Server: link
  • MCP Framework: link
  • File System MCP Server: link