DX MCP Server
# DX MCP Server
<h4>Use natural language to write and execute queries on your organizational data in DX Data Cloud!</h4>
.png)
## About
The DX MCP Server is a Python-based tool that empowers AI applications, such as [Claude for Desktop](https://claude.ai/download) and [Cursor](https://www.cursor.com/), to interact with your DX Data Cloud database. The server includes tools to:
- establish a connection to your Postgres database, allowing the AI to actively formulate and execute queries on the database
- find/utilize context about your software entities and their relationships and scorecards via DX catalog tools
Learn more about the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction).
**Note**: DX intends for [the CLI](https://docs.getdx.com/cli/) to become the primary interface for AI agents and is investing in it as the long-term direction beyond the MCP server. Both interfaces remain supported.
## Demo
https://github.com/user-attachments/assets/c6ce12a5-4562-4b44-b235-2d04871c3142
## Getting Started
There are two ways to use the DX MCP Server:
1. **Remote hosting** (recommended): Connect to our hosted server at `https://ai.getdx.com/mcp`
2. **Local hosting**: Run the server on your machine
### Prerequisites
- A DX account with access to Data Cloud
- **For remote hosting**:
- A DX API token, generated in your [DX Account Settings](https://app.getdx.com/settings/user/preferences)
- Admin users can create an organization API token with read scopes granted, and non-admin users can generate personal access tokens to authenticate with the MCP server.
- **For local hosting**:
- Python 3.10 or higher
- Your database connection URL (configured on DX's [DB Users settings page](https://app.getdx.com/datacloud/dbusers))
- A DX API token, generated in your [DX Account Settings](https://app.getdx.com/settings/user/preferences)
- Admin users can create an organization API token with read scopes granted, and non-admin users can generate personal access tokens to authenticate with the MCP server.
---
## Option 1: Remote Hosting (Recommended)
The hosted MCP server uses streamable HTTP transport and is available at `https://ai.getdx.com/mcp`. This option requires no local installation; just configure your AI client with the mcp using http transport and provided with a valid DX API Token.
### Claude Code
Run this command in your terminal:
```bash
claude mcp add --transport http dx-mcp https://ai.getdx.com/mcp --header "Authorization: Bearer [YOUR_DX_API_TOKEN]"
```
### Cursor
Add this configuration to your MCP settings (**Cursor > Settings > Cursor Settings > MCP**):
```json
{
"mcpServers": {
"dx-mcp": {
"url": "https://ai.getdx.com/mcp",
"headers": {
"Authorization": "Bearer [YOUR_DX_API_TOKEN]"
}
}
}
}
```
---
## Option 2: Local Installation
If you prefer to run the DX MCP Server locally, you can install it via PyPI or run it from source.
### Installation Method 1: Install from PyPI
Install the package using pip:
```bash
pip install dx-mcp-server
```
> **Note for macOS users**: If you encounter an "externally-managed-environment" error, use `pipx` instead:
> ```bash
> pipx install dx-mcp-server
> ```
### Installation Method 2: Clone from Source
Clone this repository to run from source:
```bash
git clone https://github.com/get-dx/dx-mcp-server
cd dx-mcp-server
```
### Configuration
Once installed, configure your AI client with the appropriate settings:
#### Claude Code
Run this command in your terminal (adjust based on your installation method):
```bash
# If installed via pip/pipx
claude mcp add dx-mcp-server --env DB_URL=YOUR_DB_URL --env WEB_API_TOKEN=YOUR_DX_API_TOKEN -- $(which dx-mcp-server)
```
#### Claude for Desktop
Click **Claude > Settings > Developer > Edit Config** and add:
**If you installed via pip:**
```json
{
"mcpServers": {
"dx-mcp": {
"command": "dx-mcp-server",
"args": ["run"],
"env": {
"DB_URL": "YOUR-DATABASE-URL",
"WEB_API_TOKEN": "YOUR_DX_API_TOKEN"
}
}
}
}
```
**If you're running from source:**
```json
{
"mcpServers": {
"dx-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/dx-mcp-server", "run", "-m", "dx_mcp_server", "run"],
"env": {
"DB_URL": "YOUR-DATABASE-URL",
"WEB_API_TOKEN": "YOUR-DX-API-TOKEN"
}
}
}
}
```
#### Cursor
Click **Cursor > Settings > Cursor Settings > MCP > Add new global MCP Server** and add:
**If you installed via pip:**
```json
{
"mcpServers": {
"dx-mcp": {
"command": "dx-mcp-server",
"args": ["run"],
"env": {
"DB_URL": "YOUR-DATABASE-URL",
"WEB_API_TOKEN": "YOUR-DX-API-TOKEN"
}
}
}
}
```
**If you're running from source:**
```json
{
"mcpServers": {
"dx-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/dx-mcp-server", "run", "-m", "dx_mcp_server", "run"],
"env": {
"DB_URL": "YOUR-DATABASE-URL",
"WEB_API_TOKEN": "YOUR-DX-API-TOKEN"
}
}
}
}
```
### Configuration Parameters
- **`DB_URL`** (required): Your DX Data Cloud Postgres connection string. Get this from [DX DB Users settings](https://app.getdx.com/datacloud/dbusers).
- Format: `postgresql://username:password@host:port/database`
- **`WEB_API_TOKEN`**: Your DX API Token (either an organization token or a personal access token). This enables additional catalog and entity tools. Find this in your DX account settings.
### Usage
After saving the configuration, restart your AI client. You should see "dx-mcp" in the available MCP servers. When you ask questions about your data or catalog, the AI will use these tools to query your database or hit the relevant web apis.
---
## Troubleshooting
### Path Resolution Issues
The most common issue involves the MCP client not finding the `dx-mcp-server`/`uv` command, as GUI applications don't inherit the same PATH environment variables as the terminal. The solution is to use the full path to the executable in the json config.
#### For pip/pipx installations:
Find the full path to `dx-mcp-server`:
```bash
# Find the path on macOS/Linux
which dx-mcp-server
# Find the path on Windows (in Command Prompt)
where dx-mcp-server
```
Then use the full path in your configuration:
```json
{
"mcpServers": {
"dx-mcp": {
"command": "/full/path/to/dx-mcp-server",
"args": ["run"],
"env": {
"DB_URL": "YOUR-DATABASE-URL",
"WEB_API_TOKEN": "YOUR-DX-API-TOKEN"
}
}
}
}
```
#### For source installations:
Find the full path to `uv`:
```bash
# Find the path on macOS/Linux
which uv
# Find the path on Windows (in Command Prompt)
where uv
```
Then use the full path in your configuration:
```json
{
"mcpServers": {
"dx-mcp": {
"command": "/full/path/to/uv",
"args": ["--directory", "/absolute/path/to/dx-mcp-server", "run", "-m", "dx_mcp_server", "run"],
"env": {
"DB_URL": "YOUR-DATABASE-URL",
"WEB_API_TOKEN": "YOUR-DX-API-TOKEN"
}
}
}
}
```
### Checking Logs
If you're still experiencing issues:
- **Claude Desktop**: Check logs at:
- macOS: `~/Library/Logs/Claude/`
- Windows: `%APPDATA%\Claude\logs\`
- **Cursor**: Check logs at:
- macOS: `~/Library/Application Support/Cursor/logs/[SESSION_ID]`
- Windows: `%APPDATA%\Cursor\logs\[SESSION_ID]`
The logs will show warning and error messages when starting or running the MCP server.
TDQS
Scored across 10 tools
Most tools have distinct purposes targeting different resources (entities, initiatives, scorecards, teams, tasks, and data queries), but getEntityDetails and getScorecardInfo could potentially overlap if scorecards are part of entity details. The descriptions clarify their focus, but there's minor ambiguity in the entity/scorecard relationship.
Tools follow a consistent verb_noun pattern (getEntityDetails, listEntities, etc.) with clear prefixes (get, list, query, review). The only deviation is queryData which uses 'query' instead of 'get' or 'list', but this is semantically appropriate for SQL execution, maintaining overall readability.
With 10 tools, the count is well-scoped for a DX software catalog and operational readiness server. Each tool serves a clear purpose in managing entities, initiatives, scorecards, teams, tasks, and data queries, avoiding bloat while covering essential operations.
The toolset provides good read/list coverage for entities, initiatives, scorecards, and teams, plus task review and data querying. However, there are notable gaps in write operations (e.g., no create/update/delete tools for these resources) and limited task management beyond review, which may hinder full lifecycle management in the domain.