QuantPlace
For Developers

QuantPlace Developer Hub

Let AI agents search and preview trading datasets inside your IDE — and automate dataset updates from cron jobs or Python scripts.

Part 1 — MCP Server

AI Agent Integration

Available tools

search_datasets

Search by title, category, tags, and max price. Returns structured results with IDs, ratings, and sales stats.

Params: query, category, tags, max_price, limit

get_dataset_metadata

Full metadata: column names extracted from the preview CSV, description, price, validation report summary, and vendor ID.

Params: dataset_id

get_preview_sample

Fetches the auto-generated 50-row preview and returns it as a markdown table — readable directly in the agent's context window.

Params: dataset_id

get_vendor_profile

Seller rating (verified buyers only), bio, member since date, and active listings — trust signals alongside dataset recommendations.

Params: vendor_id

get_my_purchases

List all datasets purchased by the authenticated user. Requires an API key. Returns title, status, amount, and escrow release date.

Requires API key

Params: api_key

get_download_url

Get a 15-minute presigned download URL for a purchased dataset. Returns a ready URL or a 'preparing' status with retry guidance.

Requires API key

Params: api_key, dataset_id

Installation

Step 1 — Clone & install
$ git clone https://github.com/KuroskeNB/quantplace-mcp
$ cd quantplace-mcp
$ pip install -r requirements.txt
Step 2 — Test it
$ python server.py
# Server starts and waits for MCP messages on stdio

Connect to your IDE

Replace /absolute/path/to/quantplace-mcp/server.py with the actual path on your machine.

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "quantplace": {
      "command": "python",
      "args": [
        "/absolute/path/to/quantplace-mcp/server.py"
      ],
      "env": {
        "QUANTPLACE_API_URL": "https://api.quantplace.io/api/v1"
      }
    }
  }
}

Example agent workflow

1

search_datasets(query="BTC", category="orderbook_l2", max_price=50)

Returns matching datasets with IDs and stats

2

get_dataset_metadata(dataset_id from step 1)

Columns: timestamp, bid_price, bid_size, ask_price, ask_size

3

get_preview_sample(dataset_id from step 1)

Agent sees 50 real rows → generates parsing code before you buy

4

get_vendor_profile(vendor_id from metadata)

Rating 4.8/5 (23 reviews) — trust signals alongside recommendation

Part 2 — Auto-Update API

Programmatic Dataset Updates

Keep dynamic datasets fresh without touching the UI. One API call — upload your zip, the backend handles R2 and validation automatically. Column mapping is inherited from your active version. Requires a vendor API key or JWT.

How it works

1
POST /datasets/{id}/auto-update

Upload your .zip as multipart. Backend streams to R2, inherits column mapping from the active version, enqueues Celery validation. Returns {version_id}.

2
GET /datasets/{id}/versions/{version_id}

Poll every 3s — status moves from validating → active (new version live) or rejected (validation_report.error has the reason). Old version stays live until the new one passes.

Python example

update_dataset.py
import requests
import time

API_KEY = "your_api_key_here"
DATASET_ID = "your-dataset-uuid"
ZIP_PATH = "/path/to/new_data.zip"

headers = {"X-API-Key": API_KEY}
base = "https://api.quantplace.io/api/v1"

# Single call — upload the zip, backend handles R2 and triggers validation
with open(ZIP_PATH, "rb") as f:
    resp = requests.post(
        f"{base}/datasets/{DATASET_ID}/auto-update",
        files={"file": ("data.zip", f, "application/zip")},
        headers=headers,
    )
resp.raise_for_status()
version_id = resp.json()["version_id"]
print(f"Uploaded. Polling validation for version {version_id}...")

# Poll until validation completes (optional — can also fire-and-forget)
for _ in range(40):
    time.sleep(3)
    result = requests.get(
        f"{base}/datasets/{DATASET_ID}/versions/{version_id}",
        headers=headers,
    ).json()
    if result["status"] == "active":
        print("Validation passed — new version is live")
        break
    elif result["status"] == "rejected":
        print("Validation failed:", result["validation_report"].get("error"))
        break
else:
    print("Timed out — check dashboard for result")
Part 3 — API Key

Personal Access Token

Log in to generate an API key for programmatic access.

Log in

Read-only & safe (MCP). The MCP server only wraps public QuantPlace endpoints — no auth token required, no purchases triggered automatically. If the MCP server stops, the QuantPlace platform is completely unaffected.