mcpkit-data
Provides tools for querying Consul services, including listing services, getting service IPs, and checking service health.
Allows querying local data sources (Parquet, CSV, etc.) using DuckDB SQL.
Provides comprehensive data manipulation tools using pandas, such as creating DataFrames, grouping, joining, filtering, sampling, and exporting.
Offers fast data processing with Polars, including creating DataFrames, grouping, and exporting.
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., "@mcpkit-datalist all Kafka topics"
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.
๐ mcpkit-data
The ultimate MCP server for data engineers who want to stop context-switching and start shipping โจ
A comprehensive Model Context Protocol server that gives your AI assistant superpowers to work with Kafka, databases, AWS, data pipelines, and more. Stop jumping between terminals, dashboards, and docs. Just ask your AI to do it.
โ ๏ธ Early Days Disclaimer
Hey there! ๐ Before you dive in, here's the deal:
This is a brand new project fresh out of the oven ๐. We're talking:
๐ First release - Like, literally just born
๐งช Not production-ready - More like "works on my machine" ready
๐ฅ Limited testing - It's mostly been tested by... well, me
๐ ๏ธ Actively evolving - Things might break, change, or surprise you
What this means:
โ Great for experimentation and learning
โ Perfect for side projects and personal use
โ Awesome if you want to contribute and shape the future
โ Probably not ideal for critical production systems (yet!)
โ Might have bugs, quirks, or "interesting" behaviors
โ Documentation might be incomplete or confusing
But here's the cool part: You can help make it better! ๐ Found a bug? Report it! Want a feature? Ask for it! Want to contribute? We'd love that!
TL;DR: This is the "early access" version. Use at your own risk, have fun, and help us make it awesome! ๐
Related MCP server: MCP Kafka
๐ฏ What is this?
mcpkit-data is your AI assistant's Swiss Army knife for data engineering. It exposes 66+ tools through the MCP protocol, letting your AI:
๐ Debug Kafka pipelines without leaving your editor
๐ Query databases (JDBC, Athena) and analyze results
๐ผ Process data with pandas, polars, and DuckDB
โ๏ธ Work with AWS (Athena, S3, Glue) seamlessly
๐๏ธ Inspect infrastructure (Nomad, Consul) in real-time
๐ Generate charts and evidence bundles automatically
โ Validate data quality with Great Expectations
All without you writing a single line of code. Just chat with your AI. ๐
โก Quick Start
Installation
pip install -e ".[dev]"Run the Server
python -m mcpkit.serverConfigure Cursor (or your MCP client)
Add to your Cursor MCP settings:
{
"mcpServers": {
"mcpkit-data": {
"command": "python",
"args": ["-m", "mcpkit.server"],
"env": {
"MCPKIT_KAFKA_BOOTSTRAP": "localhost:9092",
"MCPKIT_SCHEMA_REGISTRY_URL": "http://localhost:8081",
"MCPKIT_JDBC_DRIVER_CLASS": "org.postgresql.Driver",
"MCPKIT_JDBC_URL": "jdbc:postgresql://localhost/test",
"MCPKIT_JDBC_JARS": "/path/to/postgresql.jar",
"MCPKIT_ROOTS": "/allowed/path1:/allowed/path2"
}
}
}
}That's it! Your AI can now use all 66+ tools. ๐
๐ ๏ธ Tools Overview
๐ฆ Dataset Registry (4 tools)
Your data's home base. Store, query, and manage datasets as Parquet files.
Tool | What it does | When to use |
| ๐ List all datasets | See what data you have |
| โน๏ธ Get dataset metadata | Check schema, row count |
| ๐พ Store rows as Parquet | Save query results |
| ๐๏ธ Delete a dataset | Clean up old data |
๐ง Kafka Tools (8 tools)
Debug, consume, and analyze Kafka topics like a pro.
Tool | What it does | When to use |
| ๐ List all topics | Discover what's available |
| ๐ Get partition offsets | Check lag, find positions |
| ๐ฅ Consume messages โ dataset | Extract data for analysis |
| ๐ Get last N messages | Debug recent events |
| ๐ Filter with JMESPath | Find specific records |
| ๐ Flatten nested records | Normalize JSON structures |
| ๐ Group by extracted key | Aggregate by message key |
| ๐ Get topic config/partitions | Inspect topic metadata |
๐ Schema Registry & Decoding (4 tools)
Work with Avro, Protobuf, and schema discovery.
Tool | What it does | When to use |
| ๐ Get schema by ID/subject | Fetch schema definitions |
| ๐ List all subjects | Discover available schemas |
| ๐ Decode Avro messages | Parse binary Avro data |
| ๐ Decode Protobuf messages | Parse binary Protobuf data |
๐๏ธ Database Tools (2 tools)
Query databases safely with read-only enforcement.
Tool | What it does | When to use |
| ๐ Execute read-only SQL | Query any database |
| ๐ Introspect schema | Discover tables/columns |
Safety: Automatically blocks DROP, INSERT, UPDATE, DELETE, etc. โ
โ๏ธ AWS Tools (9 tools)
Query Athena, list S3, manage Glue partitions.
Tool | What it does | When to use |
| ๐ Start SQL query | Run analytics queries |
| โณ Check query status | Monitor execution |
| ๐ Get query results | Fetch data |
| ๐ Explain query plan | Optimize queries |
| ๐ List partitions | Check table structure |
| ๐ง Repair table (MSCK) | Fix partition metadata |
| ๐ค CTAS export | Export to S3 |
| ๐ List S3 objects | Browse buckets |
Safety: SQL validation blocks dangerous operations by default. โ
๐ผ Pandas Tools (12 tools)
The data scientist's best friend, now in your AI assistant.
Tool | What it does | When to use |
| ๐ Create DataFrame | Build datasets |
| ๐ Get statistics | Understand your data |
| ๐ข Group + aggregate | Summarize by categories |
| ๐ Join datasets | Combine data sources |
| ๐ Filter rows | Subset your data |
| โฐ Filter by time | Time-series analysis |
| ๐ Compare datasets | Find differences |
| โ Validate schema | Ensure data quality |
| ๐ฒ Stratified sample | Balanced sampling |
| ๐ฒ Random sample | Quick data preview |
| ๐ข Count unique values | Cardinality analysis |
| ๐พ Export to CSV/Parquet/Excel | Save results |
| ๐ Get first/last N rows | Quick data preview |
โก Polars Tools (3 tools)
Lightning-fast data processing with Polars.
Tool | What it does | When to use |
| ๐ Create DataFrame | Build datasets |
| ๐ข Group + aggregate | Fast aggregations |
| ๐พ Export to CSV/Parquet/JSON | Save results |
๐ฆ DuckDB Tools (1 tool)
SQL on local data sources. No server needed.
Tool | What it does | When to use |
| ๐ SQL on local data | Query Parquet/CSV files |
๐จ JSON & Data Quality (5 tools)
Transform, validate, and correlate events.
Tool | What it does | When to use |
| ๐ JMESPath transform | Extract/transform JSON |
| โ JSONSchema validation | Validate data structure |
| ๐ Generate fingerprint | Create unique IDs |
| ๐งน Deduplicate records | Remove duplicates |
| ๐ Correlate events | Join across batches |
๐ File & Format Tools (4 tools)
Work with files and convert formats.
Tool | What it does | When to use |
| ๐ Inspect Parquet schema | Understand file structure |
| ๐ Convert formats | Parquet โ CSV โ JSON |
| ๐ Read file (with offset) | Read large files efficiently |
| ๐ List directory | Browse filesystem |
| ๐ Search with ripgrep | Find patterns in code/data |
๐ Visualization & Evidence (2 tools)
Generate charts and evidence bundles automatically.
Tool | What it does | When to use |
| ๐ Auto-generate charts | Visualize data instantly |
| ๐ฆ Generate evidence bundle | Export stats + samples |
๐๏ธ Infrastructure Tools (8 tools)
Monitor Nomad jobs and Consul services.
Tool | What it does | When to use |
| ๐ List Nomad jobs (fuzzy search) | Find running services |
| ๐ Get full job status | Inspect job details |
| ๐ Read allocation logs | Debug failing jobs |
| ๐ Get lifecycle events | Track job history |
| ๐ฅ๏ธ Get node status | Check node health |
| ๐ Get service IPs (fuzzy) | Find service endpoints |
| ๐ List all services | Discover service catalog |
| โค๏ธ Get service health | Check service status |
Fuzzy search: Find services even with partial names! ๐ฏ
๐ HTTP Tools (1 tool)
Make HTTP requests safely.
Tool | What it does | When to use |
| ๐ HTTP GET/POST | Call APIs, test endpoints |
Safety: POST disabled by default. Opt-in required. โ
โ Great Expectations (1 tool)
Data quality validation with GE.
Tool | What it does | When to use |
| โ Run GE validation | Validate data quality |
๐ Reconciliation (1 tool)
Compare datasets and find differences.
Tool | What it does | When to use |
| ๐ Reconcile record counts | Compare datasets |
๐ Security & Guardrails
๐ก๏ธ Built-in Safety
Filesystem Allowlist: All file operations restricted to
MCPKIT_ROOTSSQL Validation: JDBC and Athena queries validated (read-only by default)
HTTP Safety: POST requests disabled by default
Output Limits: Automatic caps on rows, records, and bytes
Path Traversal Protection: Blocks
..and unsafe paths
๐ Configurable Limits
Variable | Default | What it does |
|
| Operation timeout |
|
| Max output size |
|
| Max rows returned |
|
| Max records returned |
โ๏ธ Configuration
๐ AWS Credentials
AWS uses the standard boto3 credential chain:
Environment Variables (recommended):
export AWS_ACCESS_KEY_ID=your-key export AWS_SECRET_ACCESS_KEY=your-secret export AWS_REGION=eu-central-1AWS Credentials File (
~/.aws/credentials):[default] aws_access_key_id = your-key aws_secret_access_key = your-secretIAM Roles (auto-detected on EC2/ECS/Lambda)
AWS SSO (use
aws sso loginfirst)
๐ Filesystem Security
export MCPKIT_ROOTS="/allowed/path1:/allowed/path2"๐ง Kafka Configuration
export MCPKIT_KAFKA_BOOTSTRAP="localhost:9092"
export MCPKIT_KAFKA_SECURITY_PROTOCOL="SASL_SSL" # optional
export MCPKIT_KAFKA_SASL_MECHANISM="PLAIN" # optional
export MCPKIT_KAFKA_SASL_USERNAME="user" # optional
export MCPKIT_KAFKA_SASL_PASSWORD="pass" # optional๐ Schema Registry
export MCPKIT_SCHEMA_REGISTRY_URL="http://localhost:8081"
export MCPKIT_SCHEMA_REGISTRY_BASIC_AUTH="user:pass" # optional๐๏ธ JDBC
export MCPKIT_JDBC_DRIVER_CLASS="org.postgresql.Driver"
export MCPKIT_JDBC_URL="jdbc:postgresql://localhost/test"
export MCPKIT_JDBC_JARS="/path/to/postgresql.jar"
export MCPKIT_JDBC_USER="user" # optional
export MCPKIT_JDBC_PASSWORD="pass" # optional๐ฏ Example Workflows
๐ End-to-End Kafka Pipeline Debugging
You: "Debug the 'order-events' topic: consume recent messages, decode Avro, filter errors, analyze patterns, and create a chart"
AI Response:
I'll debug the order-events pipeline end-to-end.
[Step 1: kafka_consume_tail] Consuming last 50 messages...
โ Consumed 50 messages from 'order-events'
[Step 2: schema_registry_get] Fetching Avro schema...
โ Schema retrieved: order-event v2.3 (ID: 145)
[Step 3: avro_decode] Decoding Avro messages...
โ Decoded 50 messages successfully
[Step 4: kafka_filter] Filtering error events...
โ Found 8 error events matching criteria
[Step 5: pandas_groupby] Analyzing error patterns...
Error breakdown:
- Payment failures: 4 (50%)
- Validation errors: 2 (25%)
- Timeout errors: 2 (25%)
[Step 6: dataset_to_chart] Creating visualization...
โ Chart saved: .artifacts/order_errors_analysis.png
[Step 7: pandas_export] Exporting error details...
โ CSV exported: .artifacts/order_errors_20251221.csv
Summary: 8 errors out of 50 messages (16% error rate). Payment failures are the primary issue.Tools used: kafka_consume_tail โ schema_registry_get โ avro_decode โ kafka_filter โ pandas_groupby โ dataset_to_chart โ pandas_export (7 tools)
๐ Multi-Source Data Reconciliation
You: "Compare sales data between Athena and Postgres: query both, join on order_id, find discrepancies, and export differences"
AI Response:
I'll reconcile sales data between Athena and Postgres.
[Step 1: athena_start_query] Querying Athena sales table...
โ Query started: execution_id abc123
[Step 2: athena_poll_query] Waiting for completion...
โ Query completed in 3.2s (scanned 1.2 GB)
[Step 3: athena_get_results] Fetching results...
โ Retrieved 5,234 rows from Athena
[Step 4: pandas_from_rows] Storing Athena data...
โ Dataset created: athena_sales_20251221
[Step 5: db_query_ro] Querying Postgres sales table...
โ Retrieved 5,189 rows from Postgres
[Step 6: pandas_from_rows] Storing Postgres data...
โ Dataset created: postgres_sales_20251221
[Step 7: pandas_join] Joining datasets on order_id...
โ Joined datasets: 5,180 matching orders
[Step 8: pandas_diff_frames] Finding discrepancies...
Discrepancies found:
- Missing in Postgres: 54 orders
- Missing in Athena: 9 orders
- Amount mismatches: 12 orders
- Total discrepancy value: $3,456.78
[Step 9: pandas_export] Exporting differences...
โ Differences exported: .artifacts/sales_reconciliation_diff.csv
[Step 10: reconcile_counts] Generating reconciliation report...
โ Report saved: .artifacts/sales_reconciliation_report.jsonTools used: athena_start_query โ athena_poll_query โ athena_get_results โ pandas_from_rows โ db_query_ro โ pandas_from_rows โ pandas_join โ pandas_diff_frames โ pandas_export โ reconcile_counts (10 tools)
๐๏ธ Service Health Investigation
You: "Investigate the 'payment-service': find it in Nomad, check Consul health, get logs, filter errors, correlate with events, and export report"
AI Response:
I'll investigate the payment-service health comprehensively.
[Step 1: nomad_list_jobs] Finding payment-service...
โ Found: platform-payment-service-app (status: running)
[Step 2: nomad_get_job_status] Getting job details...
โ Job running on node: node-abc-123
โ Allocation: alloc-def-456
[Step 3: consul_get_service_health] Checking Consul health...
โ Service health: passing (3/3 checks passing)
โ Service IPs: 10.0.1.45:8080, 10.0.1.46:8080
[Step 4: nomad_get_allocation_logs] Retrieving logs...
โ Retrieved last 200 log lines
[Step 5: pandas_from_rows] Storing logs as dataset...
โ Dataset created: payment_service_logs
[Step 6: pandas_filter_query] Filtering error logs...
โ Found 15 error entries in last hour
[Step 7: kafka_consume_batch] Consuming related events...
โ Consumed 100 payment events from Kafka
[Step 8: event_correlate] Correlating logs with events...
โ Correlated 12 error logs with payment events
[Step 9: pandas_groupby] Analyzing error patterns...
Error analysis:
- Database timeouts: 8 (53%)
- External API failures: 4 (27%)
- Validation errors: 3 (20%)
[Step 10: evidence_bundle_plus] Generating evidence bundle...
โ Bundle created:
- .artifacts/payment_service_investigation_stats.json
- .artifacts/payment_service_error_logs.csv
- .artifacts/payment_service_correlated_events.csv
Summary: Service is healthy but experiencing intermittent database timeouts affecting 8 transactions.Tools used: nomad_list_jobs โ nomad_get_job_status โ consul_get_service_health โ nomad_get_allocation_logs โ pandas_from_rows โ pandas_filter_query โ kafka_consume_batch โ event_correlate โ pandas_groupby โ evidence_bundle_plus (10 tools)
โ Data Quality Validation Pipeline
You: "Validate Kafka events: consume batch, flatten nested JSON, validate against schema, check data quality, and generate report"
AI Response:
I'll run a complete data quality validation on Kafka events.
[Step 1: kafka_consume_batch] Consuming event batch...
โ Consumed 500 messages from 'user-actions' topic
[Step 2: kafka_flatten] Flattening nested JSON structures...
โ Flattened 500 records into 45 columns
โ Dataset created: user_actions_flattened
[Step 3: schema_registry_get] Fetching validation schema...
โ Retrieved JSONSchema: user-action-event v1.2
[Step 4: pandas_sample_random] Sampling for validation...
โ Sampled 50 random records
[Step 5: event_validate] Validating against schema...
Validation results:
- Valid records: 47 (94%)
- Invalid records: 3 (6%)
- Missing required field 'timestamp': 2
- Invalid enum value 'action_type': 1
[Step 6: pandas_schema_check] Checking data types and constraints...
โ Schema check passed: all required columns present
โ ๏ธ Warning: 12% null values in 'metadata' column
[Step 7: pandas_count_distinct] Analyzing data quality...
Distinct value counts:
- user_id: 234 unique (expected: ~250)
- action_type: 8 distinct (expected: 10)
- session_id: 198 unique
[Step 8: pandas_filter_time_range] Filtering recent events...
โ Filtered to last 24 hours: 487 events
[Step 9: great_expectations_check] Running GE validation suite...
โ Expectations passed: 8/10
โ ๏ธ Failed:
- expect_column_values_to_be_unique (user_id)
- expect_column_values_to_not_be_null (metadata)
[Step 10: evidence_bundle_plus] Generating quality report...
โ Quality report: .artifacts/data_quality_report_20251221.zipTools used: kafka_consume_batch โ kafka_flatten โ schema_registry_get โ pandas_sample_random โ event_validate โ pandas_schema_check โ pandas_count_distinct โ pandas_filter_time_range โ great_expectations_check โ evidence_bundle_plus (10 tools)
๐ Time-Series Analysis & Forecasting
You: "Analyze sales trends: query Athena for last 6 months, filter by date range, group by week, sample for quality, create chart, and export"
AI Response:
I'll analyze sales trends over the last 6 months.
[Step 1: athena_start_query] Starting sales query...
โ Query: SELECT * FROM sales WHERE date >= '2025-06-01'
[Step 2: athena_poll_query] Monitoring execution...
โ Query running... (scanned 2.1 GB so far)
[Step 3: athena_get_results] Fetching results...
โ Retrieved 45,678 sales records
[Step 4: pandas_from_rows] Storing in dataset...
โ Dataset created: sales_6months
[Step 5: pandas_filter_time_range] Filtering date range...
โ Filtered: 2025-06-01 to 2025-12-21 (45,234 records)
[Step 6: pandas_groupby] Grouping by week and region...
โ Aggregated: 26 weeks ร 4 regions = 104 groups
[Step 7: pandas_sample_stratified] Stratified sampling...
โ Sampled 20 records per region for validation
[Step 8: pandas_describe] Statistical analysis...
Statistics:
- Total sales: $12,345,678
- Average per week: $474,833
- Trend: +5.2% week-over-week
- Peak week: Week 24 ($567,890)
[Step 9: dataset_to_chart] Creating time-series chart...
โ Chart: .artifacts/sales_trends_6months.png
[Step 10: pandas_export] Exporting aggregated data...
โ Exported: .artifacts/sales_by_week_region.csv (104 rows)
โ Exported: .artifacts/sales_statistics.jsonTools used: athena_start_query โ athena_poll_query โ athena_get_results โ pandas_from_rows โ pandas_filter_time_range โ pandas_groupby โ pandas_sample_stratified โ pandas_describe โ dataset_to_chart โ pandas_export (10 tools)
๐ Cross-System Event Correlation
You: "Correlate user events across systems: get Kafka events, query database for user profiles, join datasets, deduplicate, correlate timestamps, and export"
AI Response:
I'll correlate user events across Kafka and database systems.
[Step 1: kafka_consume_batch] Consuming user events...
โ Consumed 1,000 events from 'user-events' topic
[Step 2: kafka_flatten] Flattening event structure...
โ Flattened to 1,000 records with 32 columns
[Step 3: db_query_ro] Querying user profiles...
โ Retrieved 850 user profiles from database
[Step 4: pandas_from_rows] Storing profiles...
โ Dataset created: user_profiles
[Step 5: pandas_join] Joining events with profiles...
โ Joined on user_id: 987 matched records
[Step 6: dedupe_by_id] Removing duplicate events...
โ Deduplicated: 23 duplicates removed (964 unique)
[Step 7: event_correlate] Correlating by timestamp...
โ Correlated events into 234 user sessions
[Step 8: pandas_groupby] Analyzing session patterns...
Session analysis:
- Average session duration: 12.5 minutes
- Events per session: 4.1
- Most active users: 12 users with 10+ events
[Step 9: pandas_filter_query] Filtering high-value sessions...
โ Found 45 sessions with purchase events
[Step 10: pandas_export] Exporting correlated data...
โ Exported: .artifacts/correlated_user_sessions.csv
โ Exported: .artifacts/session_analysis.jsonTools used: kafka_consume_batch โ kafka_flatten โ db_query_ro โ pandas_from_rows โ pandas_join โ dedupe_by_id โ event_correlate โ pandas_groupby โ pandas_filter_query โ pandas_export (10 tools)
๐งช Testing
Quick Start
# Run all tests
pytest
# Run unit tests only (no Docker required)
make test-unit
# Run integration tests (requires Docker)
make test-integration
# Run with coverage
make test-coverageCoverage
# Run tests with coverage
make test-coverage
# Generate HTML report
make coverage-html
open htmlcov/index.htmlTarget: 95% coverage for core modules. See tests/COVERAGE.md for details.
All tests use Docker containers for external services (Kafka, PostgreSQL, LocalStack, Consul, Nomad). No real AWS credentials needed! โ
๐ Reloading MCP Server After Code Changes
When you modify MCP tool code (e.g., mcpkit/core/*.py or mcpkit/server.py), Cursor needs to reload the MCP server to pick up your changes.
Quick reload:
./reload_mcp_server.shThis script modifies your Cursor MCP config file to trigger an automatic reload. If automatic reload doesn't work, restart Cursor manually.
When to reload:
โ After editing tool implementations in
mcpkit/core/*.pyโ After adding/modifying tools in
mcpkit/server.pyโ After changing tool documentation or parameters
โ Not needed for config changes (environment variables)
Manual reload alternative:
Open Cursor settings โ MCP
Temporarily disable the
mcpkit-dataserverRe-enable it
Cursor will reload the server
๐ค Contributing
We โค๏ธ contributions! Here's how to help:
๐ Found a bug? Open an issue
๐ก Have an idea? Propose a new tool or feature
๐ง Want to code? Check out
TOOLS_ANALYSIS.mdfor gaps๐ Docs unclear? Improve them!
Design Principles:
๐ฏ KISS: One tool, one job
๐ Composable: Tools work together seamlessly
๐ Safe: Read-only by default, explicit opt-ins
โก Fast: Efficient operations, smart limits
๐ Learn More
Model Context Protocol - The protocol we use
FastMCP - The framework we build on
Cursor - The IDE that makes this shine โจ
๐ License
MIT License - Use it, fork it, make it better! ๐
Made with โค๏ธ for data engineers who want to ship faster
Stop context-switching. Start shipping. ๐ฏ
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/TidyMaze/mcpkit-data'
If you have feedback or need assistance with the MCP directory API, please join our Discord server