Skip to main content
Glama

Data Product MCP

A Model Context Protocol (MCP) server for discovering data products and requesting access in Data Mesh Manager, and executing queries on the data platform to access business data.

Concept

Idea: Enable AI agents to find and access any data product for semantic business context while enforcing data governance policies.

or, if you prefer:

Enable AI to answer any business question.

Data Products are managed high-quality business data sets shared with other teams within an organization and specified by data contracts. Data contracts describe the structure, semantics, quality, and terms of use. Data products provide the semantic context AI needs to understand not just what data exists, but what it means and how to use it correctly. We use Data Mesh Manager as a data product marketplace to search for available data products and evaluate if these are relevant for the task by analyzing its metadata.

Once a data product is identified, data governance plays a crucial role in ensuring that access to data products is controlled, queries are in line with the data contract's terms of use, and its compliance with organizational global policies. If necessary, the AI agent can request access to the data product's output port, which may require manual approval from the data product owner.

Finally, the LLM can generate SQL queries based on the data contracts data model descriptions and semantics. The SQL queries are executed, while security guardrails are in place to ensure that no sensitive data is misused and attack vectors (such as prompt injections) are mitigated. The results are returned to the AI agent, which can then use them to answer the original business question.

Steps:

  1. Discovery: Find relevant data products for task in the data product marketplace

  2. Governance: Check and request access to data products

  3. Query: Use platform-specific MCP servers to execute SQL statements.

Data Mesh Manager serves as the central data product marketplace and governance layer, providing metadata, access controls, and data contracts for all data products in your organization.

Data Platforms (Snowflake, Databricks, etc.) host the actual data and execute queries. The MCP server connects to these platforms to run SQL queries against the data products you have access to.

Related MCP server: Databricks MCP Server

Tools

  1. dataproduct_search

    • Search data products based on the search term. Uses multiple search approaches (list, semantic search) for comprehensive results. Only returns active data products.

    • Optional inputs:

      • search_term (string): Search term to filter data products. Searches in the id, title, and description. Multiple search terms are supported, separated by space.

    • Returns: Structured list of data products with their ID, name and description, owner information, and source of the result.

  2. dataproduct_get

    • Get a data product by its ID. The data product contains all its output ports and server information. The response includes access status for each output port and inlines any data contracts.

    • Required inputs:

      • data_product_id (string): The data product ID.

    • Returns: Data product details with enhanced output ports, including access status and inlined data contracts

  3. dataproduct_request_access

    • Request access to a specific output port of a data product. This creates an access request. Based on the data product configuration, purpose, and data governance rules, the access will be automatically granted, or it will be reviewed by the data product owner.

    • Required inputs:

      • data_product_id (string): The data product ID.

      • output_port_id (string): The output port ID.

      • purpose (string): The specific purpose what the user is doing with the data and the reason why they need access. If the access request needs to be approved by the data owner, the purpose is used by the data owner to decide if the access is eligible from a business, technical, and governance point of view.

    • Returns: Access request details including access_id, status, and approval information

  4. dataproduct_query

    • Execute a SQL query on a data product's output port. This tool connects to the underlying data platform and executes the provided SQL query. You must have active access to the output port to execute queries.

    • Required inputs:

      • data_product_id (string): The data product ID.

      • output_port_id (string): The output port ID.

      • query (string): The SQL query to execute.

    • Returns: Query results as structured data (limited to 100 rows)

Installation

You must have uv installed.

Then add this entry to your MCP client configuration:

{
  "mcpServers": {
    "dataproduct": {
      "command": "uvx",
      "args": [
        "dataproduct_mcp"
      ],
      "env": {
        "DATAMESH_MANAGER_API_KEY": "dmm_live_user_...",
        "DATAMESH_MANAGER_HOST": "https://api.datamesh-manager.com",
        "QUERY_ACCESS_EVALUATION_ENABLED": "true",
        "SNOWFLAKE_USER": "",
        "SNOWFLAKE_PASSWORD": "",
        "SNOWFLAKE_ROLE": "",
        "SNOWFLAKE_WAREHOUSE": "COMPUTE_WH",
        "DATABRICKS_HOST": "adb-xxx.azuredatabricks.net",
        "DATABRICKS_HTTP_PATH": "/sql/1.0/warehouses/xxx",
        "DATABRICKS_CLIENT_ID": "",
        "DATABRICKS_CLIENT_SECRET": "",
        "BIGQUERY_CREDENTIALS_PATH": "/path/to/service-account-key.json"
      }
    }
  }
}

This is the format for Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json), other MCP clients have similar config options.

Configuration

Data Mesh Manager Configuration

Environment Variable

Description

Required

Default

DATAMESH_MANAGER_API_KEY

API key for authentication

Yes

N/A

DATAMESH_MANAGER_HOST

Base URL for self-hosted instances

No

https://api.datamesh-manager.com

QUERY_ACCESS_EVALUATION_ENABLED

Enable/disable AI-based query access evaluation

No

true

To authenticate with Data Mesh Manager, you need to set the DATAMESH_MANAGER_API_KEY variable to your API key.

How to create an API Key in Data Mesh Manager.

For self-hosted Data Mesh Manager instances, set the DATAMESH_MANAGER_HOST environment variable to your instance URL.

Set QUERY_ACCESS_EVALUATION_ENABLED to false to disable AI-based query access evaluation when AI features are not enabled in your Data Mesh Manager instance.

(Yes, we will work on OAuth2 based authentication to simplify this in the future.)

Snowflake

If you use Snowflake as a data platform, create a programmatic access token for your user. Create a new user in Snowflake if the AI agent is not acting on behalf of a real user, create a new service user for the AI agent, and grant it the necessary permissions to access the data products.

You also might need to configure the network policies to enable programmatic access tokens.

The user needs:

  • The USAGE privilege on the warehouse you want to use.

  • An assigned role (e.g., DATAPRODUCT_MCP) with the USAGE privilege on the database and schema of the data products you want to access.

You can use the Snowflake Connector to automatically grant access to the data in Snowflake, when the access request is approved in Data Mesh Manager.

Environment Variable

Description

DATACONTRACT_SNOWFLAKE_USERNAME

Your username

DATACONTRACT_SNOWFLAKE_PASSWORD

Your programmatic access token

DATACONTRACT_SNOWFLAKE_WAREHOUSE

The warehouse you want to use, such as COMPUTE_WH.

DATACONTRACT_SNOWFLAKE_ROLE

The assigned user role, e.g. DATAPRODUCT_MCP

Databricks

If you use Databricks as a data platform, you need to create a service principal and assign it the necessary permissions to access the data products. Create an OAuth2 client ID and secret for the service principal.

You can use the Databricks Connector to automatically grant access to the data in Databricks, when the access request is approved in Data Mesh Manager.

You need to configure a Databricks SQL warehouse. The serverless warehouse is recommended for fast query execution.

Environment Variable

Description

DATABRICKS_CLIENT_ID

The OAuth2 client ID of the service principal

DATABRICKS_CLIENT_SECRET

The OAuth2 client secret of the service principal

DATABRICKS_HOST

The Databricks workspace URL, without leading https://. e.g. adb-xxx.azuredatabricks.net. Go to Compute -> SQL warehouses -> Your Warehouse -> Connection details -> Server hostname

DATABRICKS_HTTP_PATH

The HTTP path for the SQL endpoint, e.g. /sql/1.0/warehouses/xxx. Go to Compute -> SQL warehouses -> Your Warehouse -> Connection details -> HTTP path

BigQuery

If you use BigQuery as a data platform, you need to create a service account and assign it the necessary permissions to access the data products. Download the service account key as a JSON file.

You can use the BigQuery Connector to automate permission management in BigQuery, when the access request is approved in Data Mesh Manager.

The service account needs the following IAM roles:

  • BigQuery Data Viewer - to query datasets

  • BigQuery Job User - to execute queries as jobs

Environment Variable

Description

BIGQUERY_CREDENTIALS_PATH

Path to the service account key JSON file

Note: Google Cloud Project ID and dataset information are specified in the data product's output port server configuration, not as environment variables.

To get your service account credentials:

  1. Go to the Google Cloud Console

  2. Navigate to IAM & Admin > Service Accounts

  3. Create a new service account or use an existing one

  4. Add the BigQuery Data Viewer and BigQuery Job User roles

  5. Generate and download a JSON key file

  6. Set BIGQUERY_CREDENTIALS_PATH to the path of the JSON file

Supported Server Types

The dataproduct_query tool supports executing queries on data products. The MCP client formulates SQL queries based on the data contract with its data model structure and semantics.

The following server types are currently supported out-of-the-box:

Server Type

Status

Notes

Snowflake

Requires SNOWFLAKE_USER, SNOWFLAKE_PASSWORD, SNOWFLAKE_WAREHOUSE, SNOWFLAKE_ROLE environment variables

Databricks

Requires DATABRICKS_HOST, DATABRICKS_HTTP_PATH, DATABRICKS_CLIENT_ID, DATABRICKS_CLIENT_SECRET environment variables

BigQuery

Requires BIGQUERY_CREDENTIALS_PATH environment variable

S3

Coming soon

Implemented through DuckDB client

Fabric

Coming soon

Note: Use additional Platform-specific MCP servers for other data platform types (e.g., Redshift, PostgreSQL) by adding them to your MCP client.

Contributing

See CONTRIBUTING.md for development setup and contribution guidelines.

Credits

Maintained by Simon Harrer, André Deuerling, and Jochen Christ.

.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}

Available Tools

4 tools
dataproduct_getA

Get a data product by its ID. The data product contains all its output ports and server information. The response includes access status for each output port and inlines any data contracts.

Args: data_product_id: The data product ID.

Returns: Dict containing the data product details with enhanced output ports.

ParametersJSON Schema
NameRequiredDescriptionDefault
data_product_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Without annotations, the description carries the burden of behavioral disclosure. It explains that the response includes access status per output port and inlines data contracts, giving useful insight into what the tool returns. However, it does not mention error handling, permissions, or rate limits, leaving some behavioral aspects unspecified.

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

Conciseness4/5

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

The description is concise and front-loaded with the main purpose, followed by Args and Returns sections. It is well-structured without filler, though the Returns section might be considered redundant given the existence of an output schema.

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

Completeness3/5

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

For a simple get-by-ID tool with an output schema, the description covers the core functionality and return contents. However, it lacks explicit usage guidance relative to sibling tools and does not address error cases or edge conditions, making it minimally complete.

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

Parameters2/5

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

The only parameter, data_product_id, is described as 'The data product ID,' which merely restates the schema's property title. With 0% schema description coverage, the description was expected to compensate with additional meaning (e.g., format, usage, examples), but it fails to provide any beyond the obvious.

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 'Get a data product by its ID,' using the verb 'Get' and identifying the specific resource (data product) and key (ID). It distinguishes from sibling tools like dataproduct_search (search vs. get) and dataproduct_query (query vs. get).

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

Usage Guidelines3/5

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

Usage is implied: the description says 'by its ID', indicating it is for direct retrieval by ID. However, it does not explicitly state when to use this tool instead of alternatives (e.g., searching by name), nor does it mention exclusions or prerequisites.

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

dataproduct_queryA

Execute an SQL query on a data product's output port. This tool connects to the underlying data platform (Snowflake, Databricks) and executes the provided SQL query. You must have access to the output port to execute queries.

If the data contract specifies terms of use (such as usage, or limitations), you may only execute this tool when the query is in line with these terms.

Args: data_product_id: The ID of the data product. output_port_id: The ID of the output port to query. purpose: The business purpose for executing this query. Use a high-level description of why you need this data. If there is a data contract, the purpose must be in line with the terms specified in the data contract. query: The SQL query to execute. Try to use fully qualified table names when appropriate.

Returns: Dict containing query results with row count and data (limited to 100 rows).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
purposeYes
output_port_idYes
data_product_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It transparently discloses that the tool connects to Snowflake/Databricks, executes the provided SQL, enforces data contract terms, and returns at most 100 rows. It does not explicitly clarify whether only read-only queries are allowed or describe error behavior, which prevents a perfect score.

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

Conciseness5/5

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

The description is concise and well-structured: a clear opening sentence, necessary governance/access context, and a straightforward Args/Returns layout. No filler or redundancy.

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

Completeness4/5

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

The description covers access requirements, data contract compliance, parameter meanings, and return shape (row count and 100-row limit). Since an output schema exists, return details need not be fully repeated. It lacks explicit error conditions and read-only clarification, so it is strong but not exhaustive.

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 Args section fully defines every parameter, including the business-purpose requirement and the tip to use fully qualified table names. This adds substantial meaning beyond the raw schema.

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 action ('Execute an SQL query') and the target ('a data product's output port'). It also distinguishes itself from siblings like search/get/request_access by specifying that the tool runs SQL against the underlying data platform.

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

Usage Guidelines4/5

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

It states prerequisites: access to the output port is required, and queries must comply with data contract terms. It does not explicitly name sibling tools as alternatives or specify when not to use the tool, so it stops short of a 5.

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

dataproduct_request_accessA

Request access to a specific output port of a data product. This creates an access request. Based on the data product configuration, purpose, and data governance rules, the access will be automatically granted, or it will be reviewed by the data product owner.

Args: data_product_id: The ID of the data product. output_port_id: The ID of the output port to request access to. purpose: The business purpose/reason for requesting access to this data. Use a high-level description of why you need this data.

Returns: Dict containing access request details including access_id, status, and approval information.

ParametersJSON Schema
NameRequiredDescriptionDefault
purposeYes
output_port_idYes
data_product_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool creates an access request, that access may be auto-granted or reviewed by the owner, and that the response includes access details. This goes beyond simple 'requests access' without contradicting any annotations.

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

Conciseness5/5

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

The description is concise and well-structured: a one-line summary, a brief process note, a clean Args list, and a Returns line. Every sentence adds value without unnecessary verbosity.

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

Completeness4/5

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

The description covers the tool's purpose, process, all parameters, and return structure. With an output schema present and no nested objects, this is sufficient for an agent to select and invoke the tool correctly. It could possibly mention prerequisites or failure modes, but none are critical for this action.

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?

Schema description coverage is 0%, so the description's Args section is essential. It explains all three parameters in plain terms and adds extra guidance for the purpose parameter ('Use a high-level description of why you need this data.'), fully compensating for the schema gap.

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 uses a specific verb 'Request access' with a clear resource ('output port of a data product') and adds context about the access review process. It is clearly distinguishable from sibling read-only tools like search, get, and query.

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

Usage Guidelines4/5

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

The description clearly states this tool is for requesting access to a data product output port, which makes the use case obvious. It does not explicitly mention alternatives or when-not-to-use, but the context alone is strong enough to guide an agent.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.10
    • First observeddataproduct_get
    • First observeddataproduct_query
    • First observeddataproduct_request_access
    • First observeddataproduct_search

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a distinct purpose: search for data products, get full details, request access to an output port, and execute a query. No two tools overlap in function, making selection unambiguous.

Naming Consistency5/5

All tools follow a consistent pattern of 'dataproduct_' followed by a verb (search, get, request_access, query). The naming convention is uniform and predictable.

Tool Count5/5

Four tools cover the essential workflows for this domain: discovery, inspection, access request, and query. This is well-scoped and within the recommended range.

Completeness4/5

The core lifecycle is covered, but there is a minor gap: there's no way to list all data products without a search term, which limits catalog browsing. Also, no mechanism for canceling or revoking access requests is provided.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/entropy-data/dataproduct-mcp'

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