| Name | gx-mcp-server JSON |
| Version |
2.0.2
JSON |
| download |
| home_page | None |
| Summary | Expose Great Expectations data-quality checks via MCP |
| upload_time | 2025-08-06 11:20:29 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.11 |
| license | MIT License
Copyright (c) 2025 David Front
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
| keywords |
data validation
great-expectations
mcp
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# Great Expectations MCP Server
> Expose Great Expectations data-quality checks as MCP tools for LLM agents.
[](https://pypi.org/project/gx-mcp-server)
[](https://pypi.org/project/gx-mcp-server)
[](https://hub.docker.com/r/davidf9999/gx-mcp-server)
[](LICENSE)
[](https://github.com/davidf9999/gx-mcp-server/actions/workflows/ci.yaml)
[](https://github.com/davidf9999/gx-mcp-server/actions/workflows/publish.yaml)
## Table of Contents
- [Motivation](#motivation)
- [Quick Start](#quick-start)
- [Features](#features)
- [Installation & Usage](#installation--usage)
- [MCP Client Configuration](#mcp-client-configuration)
- [Authentication](#authentication)
- [Docker](#docker)
- [Configuration](#configuration)
- [Development](#development)
- [Security](#security)
- [License & Contributing](#license--contributing)
## Motivation
Large Language Model (LLM) agents often need to interact with and validate data. Great Expectations is a powerful open-source tool for data quality, but it's not natively accessible to LLM agents. This server bridges that gap by exposing core Great Expectations functionality through the Model Context Protocol (MCP), allowing agents to:
- Programmatically load datasets from various sources.
- Define data quality rules (Expectations) on the fly.
- Run validation checks and interpret the results.
- Integrate robust data quality checks into their automated workflows.
## Quick Start
**Docker (Recommended):**
```bash
docker run -d -p 8000:8000 --name gx-mcp-server davidf9999/gx-mcp-server:latest
claude mcp add gx-mcp-server --transport http http://localhost:8000/mcp/
claude "Load CSV data id,age\n1,25\n2,19\n3,45 and validate ages 21-65, show failed records"
```
**Local Development:**
```bash
git clone https://github.com/davidf9999/gx-mcp-server && cd gx-mcp-server
just install
claude mcp add gx-mcp-server-local -- uv run python -m gx_mcp_server
```
## Installation & Usage
## Features
- Load CSV data from file, URL, or inline (up to 1 GB, configurable)
- Load tables from Snowflake or BigQuery using URI prefixes
- Define and modify ExpectationSuites (profiler flag is **deprecated**)
- Validate data and fetch detailed results (sync or async)
- Choose **in-memory** (default) or **SQLite** storage for datasets & results
- Optional **Basic** or **Bearer** token authentication for HTTP clients
- Configure **HTTP rate limiting** per minute
- Restrict origins with `--allowed-origins`
- **Prometheus** metrics on `--metrics-port`
- **OpenTelemetry** tracing via `--trace` (OTLP exporter)
- Multiple transport modes: **STDIO**, **HTTP**, **Inspector (GUI)**
**Development Setup:**
```bash
just install # Install dependencies
just serve # Run HTTP server
just run-examples # Try examples
just test # Run tests
just ci # Lint and type-check
```
**Server Modes:**
```bash
uv run python -m gx_mcp_server # STDIO (for AI clients)
uv run python -m gx_mcp_server --http # HTTP (for web clients)
uv run python -m gx_mcp_server --inspect # Inspector GUI
```
**With Authentication:**
```bash
uv run python -m gx_mcp_server --http --basic-auth user:pass
uv run python -m gx_mcp_server --http --rate-limit 30
```
## MCP Client Configuration
Configure any MCP-compatible client (Claude Desktop, Claude CLI, custom applications) to connect to the server.
### Claude CLI Setup
**Local Development (STDIO):**
```bash
claude mcp add gx-mcp-server-local -- uv run python -m gx_mcp_server
```
**Docker without Authentication:**
```bash
docker run -d -p 8000:8000 --name gx-mcp-server davidf9999/gx-mcp-server:latest
claude mcp add gx-mcp-server --transport http http://localhost:8000/mcp/
```
**Docker with Basic Authentication:**
```bash
docker run -d -p 8000:8000 --name gx-mcp-server \
-e MCP_SERVER_USER=myuser -e MCP_SERVER_PASSWORD=mypass \
davidf9999/gx-mcp-server:latest
claude mcp add gx-mcp-server --transport http \
--header "Authorization: Basic $(echo -n 'myuser:mypass' | base64)" \
http://localhost:8000/mcp/
```
**Remote Server with JWT:**
```bash
claude mcp add gx-mcp-server-remote --transport http \
--header "Authorization: Bearer YOUR_JWT_TOKEN" \
https://your-server.com:8000/mcp/
```
### Manual Configuration
For custom MCP clients, add to your config file:
**STDIO Mode:**
```json
{
"mcpServers": {
"gx-mcp-server": {
"type": "stdio",
"command": "uv",
"args": ["run", "python", "-m", "gx_mcp_server"]
}
}
}
```
**HTTP Mode with Authentication:**
```json
{
"mcpServers": {
"gx-mcp-server": {
"type": "http",
"url": "https://your-server.com:8000/mcp/",
"headers": {
"Authorization": "Basic dXNlcjpwYXNz"
}
}
}
}
```
### Testing & Management
**Test the Server:**
```bash
claude "Load CSV data id,age\n1,25\n2,19\n3,45 and validate ages 21-65, show failed records"
```
**Manage Multiple Servers:**
```bash
claude mcp add gx-local -- uv run python -m gx_mcp_server
claude mcp add gx-docker --transport http http://localhost:8000/mcp/
claude mcp list
claude mcp remove gx-local
```
### Troubleshooting
**Connection Issues:**
```bash
# Check server health (HTTP mode)
curl http://localhost:8000/mcp/health
# Check MCP server status
claude mcp list
# Test with verbose logging
claude mcp add gx-debug -- uv run python -m gx_mcp_server --log-level DEBUG
```
**Common Issues:**
- **"Failed to connect":** Ensure server is running and port is accessible
- **"Authentication failed":** Verify credentials and auth headers are correct
- **"401 Unauthorized":** Check if server requires authentication but none provided
- **"403 Forbidden":** Authentication succeeded but insufficient permissions
- **"File not found":** For local files, ensure paths are correct relative to server working directory
- **"Permission denied":** Check file permissions for mounted volumes in Docker
**Authentication Debugging:**
```bash
# Test server health (no auth required)
curl http://localhost:8000/mcp/health
# Test with basic auth
curl -H "Authorization: Basic $(echo -n 'user:pass' | base64)" \
http://localhost:8000/mcp/health
# Test with bearer token
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8000/mcp/health
```
## Authentication
By default, the server runs **without any authentication enabled**. For production or secure environments, you should enable one of the supported methods below.
The server supports two authentication methods for the HTTP and Inspector modes: Basic and Bearer.
### Basic Authentication
Use a simple username and password to protect the server. You can provide credentials via command-line arguments or environment variables.
**Command-line argument:**
```bash
uv run python -m gx_mcp_server --http --basic-auth myuser:mypassword
```
**Environment variables:**
```bash
export MCP_SERVER_USER=myuser
export MCP_SERVER_PASSWORD=mypassword
uv run python -m gx_mcp_server --http
```
### Bearer Authentication
For more secure, token-based authentication, you can use bearer tokens (JWTs). This is the recommended approach for production environments.
**How it Works:** The `gx-mcp-server` acts as a *resource server* and **validates** JWTs. It does not issue them. Your AI agent (the client) must first obtain a JWT from a dedicated **Identity Provider** (like Auth0, Okta, or a custom auth service).
**Configuration:**
```bash
# Example using a public key file
uv run python -m gx_mcp_server --http \
--bearer-public-key-file /path/to/public_key.pem \
--bearer-issuer https://my-auth-provider.com/ \
--bearer-audience https://my-api.com
# Example using a JWKS URL
uv run python -m gx_mcp_server --http \
--bearer-jwks https://my-auth-provider.com/.well-known/jwks.json \
--bearer-issuer https://my-auth-provider.com/ \
--bearer-audience https://my-api.com
```
- `--bearer-public-key-file`: Path to the RSA public key for verifying the JWT signature.
- `--bearer-jwks`: URL of the JSON Web Key Set (JWKS) to fetch the public key.
- `--bearer-issuer`: The expected issuer (`iss`) claim in the JWT.
- `--bearer-audience`: The expected audience (`aud`) claim in the JWT.
**Legacy Environment Variables (for custom clients):**
Some clients may expect these environment variables:
```bash
export MCP_SERVER_URL=http://localhost:8000/mcp/
export MCP_AUTH_TOKEN="myuser:mypassword" # For basic auth
export MCP_AUTH_TOKEN="YOUR_JWT_TOKEN" # For bearer auth
```
## Configuration
### CSV File Size Limit
Default: **50 MB**. Override via environment variable:
```bash
export MCP_CSV_SIZE_LIMIT_MB=200 # 1–1024 MB allowed
```
### Warehouse Connectors
Install extras:
```bash
uv pip install -e .[snowflake]
uv pip install -e .[bigquery]
```
Use URI prefixes:
```python
load_dataset("snowflake://user:pass@account/db/schema/table?warehouse=WH")
load_dataset("bigquery://project/dataset/table")
```
`load_dataset` automatically detects these prefixes and delegates to the appropriate connector.
### Metrics and Tracing
- Prometheus metrics: `http://localhost:9090/metrics`
- OpenTelemetry: `uv run python -m gx_mcp_server --http --trace`
## Docker
### Using Pre-built Images (Recommended)
The easiest way to run `gx-mcp-server` is using the official Docker image:
```bash
# Run latest stable version
docker run -d -p 8000:8000 --name gx-mcp-server davidf9999/gx-mcp-server:latest
# Run with authentication
docker run -d -p 8000:8000 --name gx-mcp-server \
-e MCP_SERVER_USER=myuser \
-e MCP_SERVER_PASSWORD=mypass \
davidf9999/gx-mcp-server:latest
# Run with file access (for loading local CSV files)
docker run -d -p 8000:8000 --name gx-mcp-server \
-v "$(pwd)/data:/app/data" \
davidf9999/gx-mcp-server:latest
```
### Building Local Images
Build and run the server from source:
```bash
# Build the production image
just docker-build
# Run the server
just docker-run
```
The server will be available at `http://localhost:8000`.
For development, you can build a development image that includes test dependencies and run tests or examples:
```bash
# Build the development image
just docker-build-dev
# Run tests
just docker-test
# Run examples (requires OPENAI_API_KEY in .env file)
just docker-run-examples
```
## Development
```bash
just install
cp .env.example .env # optional: add your OpenAI API key
just run-examples
```
### Telemetry
Great Expectations sends anonymous usage data by default. Disable:
```bash
export GX_ANALYTICS_ENABLED=false
```
### Current Limitations
- Stores last 100 datasets/results only
- In-process asyncio concurrency (no external queue)
- API may evolve as project stabilizes
## Security
- Run behind a reverse proxy (Nginx, Caddy, cloud LB) in production
- Supply `--ssl-certfile` / `--ssl-keyfile` only if the proxy cannot terminate TLS
- Anonymous sessions use UUIDv4; persistent apps should use `secrets.token_urlsafe(32)`
## Project Roadmap
See [ROADMAP-v2.md](ROADMAP-v2.md) for upcoming sprints.
## License & Contributing
MIT License – see [CONTRIBUTING.md](CONTRIBUTING.md) for how to help!
## Author
David Front – dfront@gmail.com | GitHub: [davidf9999](https://github.com/davidf9999)
Raw data
{
"_id": null,
"home_page": null,
"name": "gx-mcp-server",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "David Front <dfront@gmail.com>",
"keywords": "data validation, great-expectations, mcp",
"author": null,
"author_email": "David Front <dfront@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/35/cf/9db3900f95a7b45e6b9f33365f8cd6d524bdaab185d22f8da360eee10f9e/gx_mcp_server-2.0.2.tar.gz",
"platform": null,
"description": "# Great Expectations MCP Server\n\n> Expose Great Expectations data-quality checks as MCP tools for LLM agents.\n\n[](https://pypi.org/project/gx-mcp-server) \n[](https://pypi.org/project/gx-mcp-server) \n[](https://hub.docker.com/r/davidf9999/gx-mcp-server) \n[](LICENSE) \n[](https://github.com/davidf9999/gx-mcp-server/actions/workflows/ci.yaml) \n[](https://github.com/davidf9999/gx-mcp-server/actions/workflows/publish.yaml)\n\n## Table of Contents\n\n- [Motivation](#motivation)\n- [Quick Start](#quick-start)\n- [Features](#features)\n- [Installation & Usage](#installation--usage)\n- [MCP Client Configuration](#mcp-client-configuration)\n- [Authentication](#authentication)\n- [Docker](#docker)\n- [Configuration](#configuration)\n- [Development](#development)\n- [Security](#security)\n- [License & Contributing](#license--contributing)\n\n## Motivation\n\nLarge Language Model (LLM) agents often need to interact with and validate data. Great Expectations is a powerful open-source tool for data quality, but it's not natively accessible to LLM agents. This server bridges that gap by exposing core Great Expectations functionality through the Model Context Protocol (MCP), allowing agents to:\n\n- Programmatically load datasets from various sources.\n- Define data quality rules (Expectations) on the fly.\n- Run validation checks and interpret the results.\n- Integrate robust data quality checks into their automated workflows.\n\n## Quick Start\n\n**Docker (Recommended):**\n```bash\ndocker run -d -p 8000:8000 --name gx-mcp-server davidf9999/gx-mcp-server:latest\nclaude mcp add gx-mcp-server --transport http http://localhost:8000/mcp/\nclaude \"Load CSV data id,age\\n1,25\\n2,19\\n3,45 and validate ages 21-65, show failed records\"\n```\n\n**Local Development:**\n```bash\ngit clone https://github.com/davidf9999/gx-mcp-server && cd gx-mcp-server\njust install\nclaude mcp add gx-mcp-server-local -- uv run python -m gx_mcp_server\n```\n\n## Installation & Usage\n\n## Features\n\n- Load CSV data from file, URL, or inline (up to 1 GB, configurable)\n- Load tables from Snowflake or BigQuery using URI prefixes\n- Define and modify ExpectationSuites (profiler flag is **deprecated**)\n- Validate data and fetch detailed results (sync or async)\n- Choose **in-memory** (default) or **SQLite** storage for datasets & results\n- Optional **Basic** or **Bearer** token authentication for HTTP clients\n- Configure **HTTP rate limiting** per minute\n- Restrict origins with `--allowed-origins`\n- **Prometheus** metrics on `--metrics-port`\n- **OpenTelemetry** tracing via `--trace` (OTLP exporter)\n- Multiple transport modes: **STDIO**, **HTTP**, **Inspector (GUI)**\n\n**Development Setup:**\n```bash\njust install # Install dependencies\njust serve # Run HTTP server\njust run-examples # Try examples\njust test # Run tests\njust ci # Lint and type-check\n```\n\n**Server Modes:**\n```bash\nuv run python -m gx_mcp_server # STDIO (for AI clients)\nuv run python -m gx_mcp_server --http # HTTP (for web clients)\nuv run python -m gx_mcp_server --inspect # Inspector GUI\n```\n\n**With Authentication:**\n```bash\nuv run python -m gx_mcp_server --http --basic-auth user:pass\nuv run python -m gx_mcp_server --http --rate-limit 30\n```\n\n## MCP Client Configuration\n\nConfigure any MCP-compatible client (Claude Desktop, Claude CLI, custom applications) to connect to the server.\n\n### Claude CLI Setup\n\n**Local Development (STDIO):**\n```bash\nclaude mcp add gx-mcp-server-local -- uv run python -m gx_mcp_server\n```\n\n**Docker without Authentication:**\n```bash\ndocker run -d -p 8000:8000 --name gx-mcp-server davidf9999/gx-mcp-server:latest\nclaude mcp add gx-mcp-server --transport http http://localhost:8000/mcp/\n```\n\n**Docker with Basic Authentication:**\n```bash\ndocker run -d -p 8000:8000 --name gx-mcp-server \\\n -e MCP_SERVER_USER=myuser -e MCP_SERVER_PASSWORD=mypass \\\n davidf9999/gx-mcp-server:latest\nclaude mcp add gx-mcp-server --transport http \\\n --header \"Authorization: Basic $(echo -n 'myuser:mypass' | base64)\" \\\n http://localhost:8000/mcp/\n```\n\n**Remote Server with JWT:**\n```bash\nclaude mcp add gx-mcp-server-remote --transport http \\\n --header \"Authorization: Bearer YOUR_JWT_TOKEN\" \\\n https://your-server.com:8000/mcp/\n```\n\n### Manual Configuration\n\nFor custom MCP clients, add to your config file:\n\n**STDIO Mode:**\n```json\n{\n \"mcpServers\": {\n \"gx-mcp-server\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\"run\", \"python\", \"-m\", \"gx_mcp_server\"]\n }\n }\n}\n```\n\n**HTTP Mode with Authentication:**\n```json\n{\n \"mcpServers\": {\n \"gx-mcp-server\": {\n \"type\": \"http\",\n \"url\": \"https://your-server.com:8000/mcp/\",\n \"headers\": {\n \"Authorization\": \"Basic dXNlcjpwYXNz\"\n }\n }\n }\n}\n```\n\n### Testing & Management\n\n**Test the Server:**\n```bash\nclaude \"Load CSV data id,age\\n1,25\\n2,19\\n3,45 and validate ages 21-65, show failed records\"\n```\n\n**Manage Multiple Servers:**\n```bash\nclaude mcp add gx-local -- uv run python -m gx_mcp_server\nclaude mcp add gx-docker --transport http http://localhost:8000/mcp/\nclaude mcp list\nclaude mcp remove gx-local\n```\n\n### Troubleshooting\n\n**Connection Issues:**\n```bash\n# Check server health (HTTP mode)\ncurl http://localhost:8000/mcp/health\n\n# Check MCP server status \nclaude mcp list\n\n# Test with verbose logging\nclaude mcp add gx-debug -- uv run python -m gx_mcp_server --log-level DEBUG\n```\n\n**Common Issues:**\n- **\"Failed to connect\":** Ensure server is running and port is accessible\n- **\"Authentication failed\":** Verify credentials and auth headers are correct\n- **\"401 Unauthorized\":** Check if server requires authentication but none provided\n- **\"403 Forbidden\":** Authentication succeeded but insufficient permissions \n- **\"File not found\":** For local files, ensure paths are correct relative to server working directory\n- **\"Permission denied\":** Check file permissions for mounted volumes in Docker\n\n**Authentication Debugging:**\n```bash\n# Test server health (no auth required)\ncurl http://localhost:8000/mcp/health\n\n# Test with basic auth\ncurl -H \"Authorization: Basic $(echo -n 'user:pass' | base64)\" \\\n http://localhost:8000/mcp/health \n\n# Test with bearer token\ncurl -H \"Authorization: Bearer YOUR_JWT_TOKEN\" \\\n http://localhost:8000/mcp/health\n```\n\n## Authentication\n\nBy default, the server runs **without any authentication enabled**. For production or secure environments, you should enable one of the supported methods below.\n\nThe server supports two authentication methods for the HTTP and Inspector modes: Basic and Bearer.\n\n### Basic Authentication\n\nUse a simple username and password to protect the server. You can provide credentials via command-line arguments or environment variables.\n\n**Command-line argument:**\n\n```bash\nuv run python -m gx_mcp_server --http --basic-auth myuser:mypassword\n```\n\n**Environment variables:**\n\n```bash\nexport MCP_SERVER_USER=myuser\nexport MCP_SERVER_PASSWORD=mypassword\nuv run python -m gx_mcp_server --http\n```\n\n### Bearer Authentication\n\nFor more secure, token-based authentication, you can use bearer tokens (JWTs). This is the recommended approach for production environments.\n\n**How it Works:** The `gx-mcp-server` acts as a *resource server* and **validates** JWTs. It does not issue them. Your AI agent (the client) must first obtain a JWT from a dedicated **Identity Provider** (like Auth0, Okta, or a custom auth service).\n\n**Configuration:**\n\n```bash\n# Example using a public key file\nuv run python -m gx_mcp_server --http \\\n --bearer-public-key-file /path/to/public_key.pem \\\n --bearer-issuer https://my-auth-provider.com/ \\\n --bearer-audience https://my-api.com\n\n# Example using a JWKS URL\nuv run python -m gx_mcp_server --http \\\n --bearer-jwks https://my-auth-provider.com/.well-known/jwks.json \\\n --bearer-issuer https://my-auth-provider.com/ \\\n --bearer-audience https://my-api.com\n```\n\n- `--bearer-public-key-file`: Path to the RSA public key for verifying the JWT signature.\n- `--bearer-jwks`: URL of the JSON Web Key Set (JWKS) to fetch the public key.\n- `--bearer-issuer`: The expected issuer (`iss`) claim in the JWT.\n- `--bearer-audience`: The expected audience (`aud`) claim in the JWT.\n\n\n**Legacy Environment Variables (for custom clients):**\nSome clients may expect these environment variables:\n```bash\nexport MCP_SERVER_URL=http://localhost:8000/mcp/\nexport MCP_AUTH_TOKEN=\"myuser:mypassword\" # For basic auth\nexport MCP_AUTH_TOKEN=\"YOUR_JWT_TOKEN\" # For bearer auth\n```\n\n## Configuration\n\n### CSV File Size Limit\nDefault: **50 MB**. Override via environment variable:\n```bash\nexport MCP_CSV_SIZE_LIMIT_MB=200 # 1\u20131024 MB allowed\n```\n\n### Warehouse Connectors\n\nInstall extras:\n```bash\nuv pip install -e .[snowflake]\nuv pip install -e .[bigquery]\n```\n\nUse URI prefixes:\n```python\nload_dataset(\"snowflake://user:pass@account/db/schema/table?warehouse=WH\")\nload_dataset(\"bigquery://project/dataset/table\")\n```\n`load_dataset` automatically detects these prefixes and delegates to the appropriate connector.\n\n### Metrics and Tracing\n- Prometheus metrics: `http://localhost:9090/metrics`\n- OpenTelemetry: `uv run python -m gx_mcp_server --http --trace`\n\n## Docker\n\n### Using Pre-built Images (Recommended)\n\nThe easiest way to run `gx-mcp-server` is using the official Docker image:\n\n```bash\n# Run latest stable version\ndocker run -d -p 8000:8000 --name gx-mcp-server davidf9999/gx-mcp-server:latest\n\n# Run with authentication\ndocker run -d -p 8000:8000 --name gx-mcp-server \\\n -e MCP_SERVER_USER=myuser \\\n -e MCP_SERVER_PASSWORD=mypass \\\n davidf9999/gx-mcp-server:latest\n\n# Run with file access (for loading local CSV files)\ndocker run -d -p 8000:8000 --name gx-mcp-server \\\n -v \"$(pwd)/data:/app/data\" \\\n davidf9999/gx-mcp-server:latest\n```\n\n### Building Local Images\n\nBuild and run the server from source:\n\n```bash\n# Build the production image\njust docker-build\n\n# Run the server\njust docker-run\n```\n\nThe server will be available at `http://localhost:8000`.\n\nFor development, you can build a development image that includes test dependencies and run tests or examples:\n\n```bash\n# Build the development image\njust docker-build-dev\n\n# Run tests\njust docker-test\n\n# Run examples (requires OPENAI_API_KEY in .env file)\njust docker-run-examples\n```\n\n\n## Development\n\n```bash\njust install\ncp .env.example .env # optional: add your OpenAI API key\njust run-examples\n```\n\n### Telemetry\nGreat Expectations sends anonymous usage data by default. Disable:\n```bash\nexport GX_ANALYTICS_ENABLED=false\n```\n\n### Current Limitations\n- Stores last 100 datasets/results only\n- In-process asyncio concurrency (no external queue)\n- API may evolve as project stabilizes\n\n## Security\n\n- Run behind a reverse proxy (Nginx, Caddy, cloud LB) in production\n- Supply `--ssl-certfile` / `--ssl-keyfile` only if the proxy cannot terminate TLS\n- Anonymous sessions use UUIDv4; persistent apps should use `secrets.token_urlsafe(32)`\n\n## Project Roadmap\n\nSee [ROADMAP-v2.md](ROADMAP-v2.md) for upcoming sprints.\n\n## License & Contributing\n\nMIT License \u2013 see [CONTRIBUTING.md](CONTRIBUTING.md) for how to help!\n\n## Author\n\nDavid Front \u2013 dfront@gmail.com | GitHub: [davidf9999](https://github.com/davidf9999)",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 David Front\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "Expose Great Expectations data-quality checks via MCP",
"version": "2.0.2",
"project_urls": {
"Documentation": "https://github.com/dfront/gx-mcp-server#readme",
"Homepage": "https://github.com/dfront/gx-mcp-server",
"Issues": "https://github.com/dfront/gx-mcp-server/issues",
"Repository": "https://github.com/dfront/gx-mcp-server"
},
"split_keywords": [
"data validation",
" great-expectations",
" mcp"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "29494f5f61d5f31cd4fc5b23e0efa1555445c93683698d5c8b4f6ddedd5fe959",
"md5": "c022155f803f0cba5d5caf05341e383c",
"sha256": "0c0d3390fbeb1ac6ea9e5d8c5907c0a02095cbb1a63af8c515287c098c75ffaf"
},
"downloads": -1,
"filename": "gx_mcp_server-2.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c022155f803f0cba5d5caf05341e383c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 39850,
"upload_time": "2025-08-06T11:20:28",
"upload_time_iso_8601": "2025-08-06T11:20:28.349536Z",
"url": "https://files.pythonhosted.org/packages/29/49/4f5f61d5f31cd4fc5b23e0efa1555445c93683698d5c8b4f6ddedd5fe959/gx_mcp_server-2.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "35cf9db3900f95a7b45e6b9f33365f8cd6d524bdaab185d22f8da360eee10f9e",
"md5": "1789b2a29a7c14cc9e4323776d4efbdd",
"sha256": "2472ed0cd68aadd07c40cfbc37007fac43428bdf7571d0cf14c480800af35611"
},
"downloads": -1,
"filename": "gx_mcp_server-2.0.2.tar.gz",
"has_sig": false,
"md5_digest": "1789b2a29a7c14cc9e4323776d4efbdd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 49479,
"upload_time": "2025-08-06T11:20:29",
"upload_time_iso_8601": "2025-08-06T11:20:29.847891Z",
"url": "https://files.pythonhosted.org/packages/35/cf/9db3900f95a7b45e6b9f33365f8cd6d524bdaab185d22f8da360eee10f9e/gx_mcp_server-2.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-06 11:20:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dfront",
"github_project": "gx-mcp-server#readme",
"github_not_found": true,
"lcname": "gx-mcp-server"
}