Your MCP Pinot Server is running successfully with dual transport support!
- ✅ STDIO Transport: Running (for Claude Desktop)
- ✅ HTTP Transport: Running at
http://127.0.0.1:8080 - ✅ REST API: Available at
/api/tools/*endpoints - ✅ Pinot Connection: Connected to local quickstart
- ✅ Tables Found: 10 tables with sample data
- airlineStats - 1,824+ records
- dailySales - Sales data
- fineFoodReviews - Food review data
- githubEvents - GitHub events data
- meetupRsvp - Meetup RSVP data
- meetupRsvpComplexType - Complex meetup data
- meetupRsvpJson - JSON meetup data
- upsertJsonMeetupRsvp - Upsert JSON data
- upsertMeetupRsvp - Upsert meetup data
- upsertPartialMeetupRsvp - Partial upsert data
python3 simple_query_builtin.pycurl -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "list-tables", "arguments": {}}'curl -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "read-query", "arguments": {"query": "SELECT COUNT(*) as total FROM airlineStats"}}'curl -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "read-query", "arguments": {"query": "SELECT * FROM githubEvents LIMIT 5"}}'curl -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "test-connection", "arguments": {}}'curl -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "table-details", "arguments": {"tableName": "airlineStats"}}'./test_rest_api.sh| Tool | Description | Example |
|---|---|---|
list-tables |
List all tables | {"name": "list-tables", "arguments": {}} |
read-query |
Execute SQL SELECT | {"name": "read-query", "arguments": {"query": "SELECT * FROM table LIMIT 5"}} |
test-connection |
Test Pinot connection | {"name": "test-connection", "arguments": {}} |
table-details |
Get table size info | {"name": "table-details", "arguments": {"tableName": "airlineStats"}} |
-- Count all records
SELECT COUNT(*) FROM airlineStats
-- Get recent GitHub events
SELECT id, type, created_at FROM githubEvents ORDER BY created_at DESC LIMIT 10
-- Analyze meetup data
SELECT COUNT(*) as total_rsvps FROM meetupRsvp
-- Sample airline data
SELECT * FROM airlineStats LIMIT 5-- Group by event type
SELECT type, COUNT(*) as count FROM githubEvents GROUP BY type ORDER BY count DESC LIMIT 5
-- Date-based analysis (if date columns exist)
SELECT DATE_TRUNC('day', created_at) as day, COUNT(*)
FROM githubEvents
GROUP BY DATE_TRUNC('day', created_at)
ORDER BY day DESC LIMIT 7- GET
/api/tools/list- List available tools - POST
/api/tools/call- Execute tool calls - GET
/sse- MCP SSE endpoint (for MCP clients)
for table in airlineStats githubEvents meetupRsvp dailySales; do
echo -n "$table: "
curl -s -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d "{\"name\": \"read-query\", \"arguments\": {\"query\": \"SELECT COUNT(*) as count FROM $table\"}}" \
| grep -o '"count":[0-9]*' | cut -d':' -f2
done# List all available tools
curl -s http://127.0.0.1:8080/api/tools/list | jq '.tools[].name'
# Test if server is responsive
curl -s -X POST http://127.0.0.1:8080/api/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "test-connection", "arguments": {}}' | jq '.result.connection_test'- Use the STDIO transport (already running)
- Configure in Claude Desktop settings
- Use the REST API endpoints
- Base URL:
http://127.0.0.1:8080 - JSON request/response format
- Use the provided k8s manifests in
k8s/directory - Supports HTTPS with Ingress
# Check if server is running
curl -s http://127.0.0.1:8080/api/tools/list
# Restart server if needed
uv run python examples/http_server_demo.py both- Only SELECT queries are allowed for security
- Table names are case-sensitive
- Use proper SQL syntax for Pinot
- Ensure Pinot quickstart is running (ports 8000, 9000)
- Check if tables are loaded:
curl -s http://localhost:9000/tables
Your MCP Pinot Server is working perfectly with:
- ✅ 10 tables loaded and queryable
- ✅ REST API returning actual results
- ✅ Dual transport (STDIO + HTTP)
- ✅ Production-ready for Kubernetes
You can now query your Pinot data using simple HTTP requests! 🚀