Data Product MCP
Executes SQL queries on Databricks SQL warehouses, leveraging Databricks as a data platform for querying data products.
Executes SQL queries on Google BigQuery, using a service account key for authentication to access data products.
Executes SQL queries on Snowflake, using programmatic access tokens for authentication and role-based access for data products.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Data Product MCPfind data products about customer churn"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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:
Discovery: Find relevant data products for task in the data product marketplace
Governance: Check and request access to data products
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
dataproduct_searchSearch 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.
dataproduct_getGet 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
dataproduct_request_accessRequest 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
dataproduct_queryExecute 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 |
| API key for authentication | Yes | N/A |
| Base URL for self-hosted instances | No |
|
| Enable/disable AI-based query access evaluation | No |
|
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
USAGEprivilege on the warehouse you want to use.An assigned role (e.g.,
DATAPRODUCT_MCP) with theUSAGEprivilege 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 |
| Your username |
| Your programmatic access token |
| The warehouse you want to use, such as |
| The assigned user role, e.g. |
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 |
| The OAuth2 client ID of the service principal |
| The OAuth2 client secret of the service principal |
| The Databricks workspace URL, without leading https://. e.g. |
| The HTTP path for the SQL endpoint, e.g. |
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 datasetsBigQuery Job User- to execute queries as jobs
Environment Variable | Description |
| 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:
Go to the Google Cloud Console
Navigate to IAM & Admin > Service Accounts
Create a new service account or use an existing one
Add the
BigQuery Data ViewerandBigQuery Job UserrolesGenerate and download a JSON key file
Set
BIGQUERY_CREDENTIALS_PATHto 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 toolsdataproduct_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.
| Name | Required | Description | Default |
|---|---|---|---|
| data_product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| purpose | Yes | ||
| output_port_id | Yes | ||
| data_product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | Yes | ||
| output_port_id | Yes | ||
| data_product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
dataproduct_searchA
Search data products based on the search term. Only returns active data products.
Args: search_term: Search term to filter data products. Multiple search terms are supported, separated by space.
Returns: List of data product summaries with basic information.
| Name | Required | Description | Default |
|---|---|---|---|
| search_term | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that only active data products are returned and that the result is a list of summaries, which is useful. However, it omits details like authentication requirements, error behavior, pagination, or what 'basic information' includes, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with a clear one-sentence summary followed by structured Args and Returns sections. Every sentence provides value, and the format aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter search tool, the description is mostly complete. It states the purpose, the active-only filter, and the return type. The existence of an output schema likely handles detailed return formats, but the description could note whether pagination or large result sets are handled. Overall, adequate for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only type and default for search_term, with no description. The description fills this gap effectively by explaining the parameter's purpose and supporting multiple space-separated terms. This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (search), the resource (data products), and the scope (active only). It naturally distinguishes from siblings like dataproduct_get or dataproduct_query by focusing on search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (for searching data products) and notes the active-only restriction, but it does not explicitly compare with alternatives or state when not to use it. Sibling tools are not mentioned, so guidance is limited to the basic scenario.
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.
4 tool updates
v0.1.10- First observed
dataproduct_get - First observed
dataproduct_query - First observed
dataproduct_request_access - First observed
dataproduct_search
TDQS
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.
All tools follow a consistent pattern of 'dataproduct_' followed by a verb (search, get, request_access, query). The naming convention is uniform and predictable.
Four tools cover the essential workflows for this domain: discovery, inspection, access request, and query. This is well-scoped and within the recommended range.
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
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
Let AI agents query data and act across all your business apps via MCP.
AI agents query normalized financial services data and run workflows via Milemarker MCP.
Connect AI agents to financial institution origination, analytics, and compliance workflows.
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search, explore data lineage, understand business context, and generate SQL queries across an organization's data ecosystem.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to explore Unity Catalog metadata, execute SQL queries, and analyze data lineage including notebooks and jobs, empowering autonomous data discovery and query generation in Databricks.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query live schema, lineage, and query-context across data warehouses, dbt projects, orchestration systems, and BI tools via MCP tools.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to audit data governance, check access control roles, query namespaces, and inspect Iceberg metadata.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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