Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

BanditDB

von dynamicpricing-aiVersion 0.3.1i★ –iLäuft auf deinem Computer
Name in der Registrycom.banditdb/mcp

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

Persistent decision memory for agents — learns which action works in which context

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Läuft auf deinem Computer
  • Transport: stdio
  • Kategorie: Suche & KI-Gedächtnis
  • Das musst du eintragen: BANDITDB_URL, BANDITDB_API_KEY

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 1 von 1 bestanden
  • Läuft auf deinem Computer mit den Rechten deines Benutzerkontos (Dateien, Netzwerk, Apps).
  • Das trägst du selbst ein: BANDITDB_URL, BANDITDB_API_KEY

Als geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.

Du brauchst

  • PyPIuv für Python installiert (für den Befehl uvx)

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein

{
  "mcpServers": {
    "banditdb": {
      "command": "uvx",
      "args": [
        "banditdb-python"
      ],
      "env": {
        "BANDITDB_URL": "your-value",
        "BANDITDB_API_KEY": "your-value"
      }
    }
  }
}

Führe das in deinem Terminal aus

claude mcp add banditdb --env BANDITDB_URL=your-value --env BANDITDB_API_KEY=your-value -- uvx banditdb-python

Trag die leeren Werte ein, bevor du ihn startest.

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "banditdb": {
      "command": "uvx",
      "args": [
        "banditdb-python"
      ],
      "env": {
        "BANDITDB_URL": "your-value",
        "BANDITDB_API_KEY": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "banditdb": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "banditdb-python"
      ],
      "env": {
        "BANDITDB_URL": "your-value",
        "BANDITDB_API_KEY": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Werte, die du selbst einträgst

  • BANDITDB_URL erforderlich env
    Base URL of the BanditDB server, e.g. http://localhost:8080 or https://your-instance.api.banditdb.com. Try it against the public sandbox at https://sandbox.banditdb.com before running your own.
  • BANDITDB_API_KEY geheim erforderlich env
    API key. A writer-role key is enough for get_intuition and record_outcome; admin is needed to create or delete campaigns.

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde über die Domain banditdb.com bestätigt (die Registry prüft, wem die Domain gehört)

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • – Nicht zutreffend

    Endpunkt antwortet

    Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet

  • – Nicht zutreffend

    Anmeldung mit OAuth

    Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen

Im Vergleich mit anderen in Suche & KI-Gedächtnisi

  • Mehr Sterne als 0 % der anderen 7246 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 58 % der anderen 7246 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 7246 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist BanditDB sicher?

Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Das musst du eintragen: BANDITDB_URL, BANDITDB_API_KEY

Läuft er auf meinem Computer oder in der Cloud?

Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.3.1) kam vor 26 Tagen in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Context7, Codebase Memory, Exa

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Context7

von upstash

Up-to-date docs for AI agents

Computer oder Cloud★ 64.224MITAktualisiert heute
Installieren

Codebase Memory

von DeusData

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

Läuft auf deinem Computer★ 48.148MITAktualisiert vor 20 Tagen
Installieren

Exa

von exa-labs

Connect AI agents to Exa for web search, content fetching, and multi-step research.

Läuft in der Cloud★ 5.213MITAktualisiert letzten Monat
Installieren

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

BanditDB Python SDK

The official Python client and Model Context Protocol (MCP) server for BanditDB — the ultra-fast, lock-free Contextual Bandit database written in Rust.

BanditDB abstracts away the complex linear algebra of Reinforcement Learning (LinUCB, Thompson Sampling) behind a dead-simple API. Build real-time personalizers, dynamic A/B tests, and give LLM agents mathematically rigorous persistent memory.

mcp-name: com.banditdb/mcp

Installation

pip install banditdb-python

Requires the BanditDB Rust server running (default: http://localhost:8080).


1. Standard SDK Usage

The client features automatic connection pooling, exponential backoff retries, and strict timeouts.

from banditdb import Client, BanditDBError

Connect to the BanditDB server.

Pass api_key if BANDITDB_API_KEY is set on the server.

db = Client( url="http://localhost:8080", timeout=2.0, api_key="your-secret-key", # omit if server runs without auth )

try:

1. Create a campaign (run once at startup)

algorithm defaults to "linucb"; use "thompson_sampling" for Bayesian exploration

db.create_campaign( campaign_id="checkout_upsell", arms=["offer_discount", "offer_free_shipping"], features=["is_mobile", "cart_value", "is_returning_user"], )

or: db.create_campaign(..., algorithm="thompson_sampling")

2. A user arrives — ask the database what to show them.

Scale each value to 0–1; the SDK puts them in order, adds a constant 1

and normalises the vector.

arm_id, interaction_id = db.predict("checkout_upsell", { "is_mobile": 1.0, "cart_value": min(cart_total / 200, 1.0), "is_returning_user": 0.0, }) print(f"Showing: {arm_id}") # e.g., "offer_free_shipping"

3. The user clicked — send the reward

db.reward(interaction_id, reward=1.0)

except BanditDBError as e: print(f"Database error: {e}")

Named features or a vector. With features=[...] the campaign stores the feature order in its metadata, and predict, batch_predict and interact accept a dict keyed by name. A missing or misspelt name raises ValueError before any request is sent. Campaigns created in the BanditDB console accept dicts too. The order is read once per campaign with campaign_info() and cached on the client. To manage the vector yourself, pass feature_dim instead and send lists — normalize_context() scales one to unit length.

All Client methods

Health

MethodDescription
health()Returns True if the server is reachable and the WAL writer is healthy.
health_detail()Returns the full health dict including per-campaign entropy and status ("ok" / "warning" / "critical").

Campaigns

MethodDescription
create_campaign(campaign_id, arms, feature_dim=None, alpha=1.0, algorithm="linucb", metadata=None, decay_half_life_hours=None, pacing=None, features=None)Register a new campaign. Pass features (names, in order) to predict with dicts, or feature_dim to send vectors. algorithm accepts "linucb", "thompson_sampling", NeuralLinUCBConfig, NeuralTSConfig, or ProgressiveConfig. metadata is an arbitrary JSON dict (≤ 64 KB). pacing takes a PacingConfig — see Budget constraints.
list_campaigns()Returns a list of all campaigns (active and archived) with alpha, arm_count, and algorithm.
campaign_info(campaign_id)Returns full per-arm state: theta, theta_norm, prediction and reward counters. Raises APIError (404) if not found.
report(campaign_id)Business-level convergence report. converged=True means one arm has a statistically significant lead at 95% CI — safe to stop. converged=False means leading but CIs still overlap. converged=None means not enough data yet (< 30 rewards per arm).
diagnostics(campaign_id)Operator diagnostics: per-arm theta norms, A_inv uncertainty bounds, entropy health (selection_entropy, entropy_status, entropy_trend, likely_cause, suggested_action), tournament traffic, and neural buffer size.
archive_campaign(campaign_id)Soft-delete: pauses predictions/rewards but preserves all learned weights. Recoverable with restore_campaign().
restore_campaign(campaign_id)Restore an archived campaign to active status with all weights intact.
delete_campaign(campaign_id)Permanently delete a campaign. Returns False if not found.
pacing(campaign_id)Budget state of a pacing campaign: per-resource budget, consumed, remaining, utilization, lambda (shadow price), is_exhausted. None if the campaign has no pacing. Server 2.3.0+.
add_arm(campaign_id, arm_id, group=None, warm_start=None, costs=None)Add an arm to a live campaign (admin key). costs maps resource name → units consumed per prediction, for pacing campaigns.
set_arm_status(campaign_id, arm_id, status)"active", "paused" (not selectable, reversible) or "retired". The arm keeps what it learned. Admin key.

Predict & Reward

MethodDescription
predict(campaign_id, context, eligible_arms=None, exclude_arms=None)context is a dict of feature values (named campaigns) or a vector. Returns (arm_id, interaction_id). Pass interaction_id to reward() to close the loop. The optional filters narrow candidates for this call only.
batch_predict(predictions)Predict for up to 100 campaign/context pairs in a single round-trip. Each item: `{"campaign_id": str, "context": dictList[float]}. Returns list of {arm_id, interaction_id} or {error}` per item.
reward(interaction_id, reward)Record outcome. reward must be in [0.0, 1.0]. Raises APIError if the interaction has already been rewarded or has expired (default TTL: 24 h).

Data & Export

MethodDescription
checkpoint()Flush WAL, snapshot models, write Parquet shards, run neural retrain + tournament eval, rotate WAL. Returns a summary string.
export()List Parquet export shards grouped by campaign. Returns {export_dir, shards}.
Budget constraints

Server 2.3.0+. Give a campaign one or more budgeted resources and per-arm costs; the server learns a shadow price per resource and steers spend to last the horizon, choosing costly arms only where their uplift is worth it.

from banditdb import Client, PacingConfig, ResourceConstraint

db.create_campaign( "promos", ["none", "discount_10", "discount_20"], feature_dim=4, pacing=PacingConfig(resources=[ ResourceConstraint( name="promo_budget", budget=5_000.0, # units available over the horizon horizon=100_000, # decisions the budget should last arm_costs={"discount_10": 1.0, "discount_20": 2.0}, # "none" costs 0 ), ]), )

Arms added later declare their own costs

db.add_arm("promos", "discount_30", costs={"promo_budget": 3.0})

for r in db.pacing("promos")["resources"]: print(f"{r['name']}: {r['utilization']:.0%} spent, lambda={r['lambda']:.3f}")

Worth knowing:

  • Budget is spent at `predict`, not `reward`. A recommendation you never act on still consumes budget.
  • Budget never resets and pacing is immutable. Once spent, costly arms stay unselectable until the campaign is recreated.
  • arm_costs keys must be campaign arms. The server would silently treat a misspelt arm as free; the SDK raises ValueError instead.
  • Predicts on a pacing campaign can return 503 if the server's WAL is saturated.
  • Downgrading the server below 2.3.0 silently drops pacing.

2. The AI "Hive Mind" (Model Context Protocol)

Standard LLM agents are stateless — if they route a task to the wrong model and fail, they repeat the same mistake tomorrow. BanditDB's built-in MCP server gives the entire agent swarm shared persistent memory.

Starting the MCP server
# Set environment variables before starting

export BANDITDB_URL=http://localhost:8080 export BANDITDB_API_KEY=your-secret-key # omit if server runs without auth

banditdb-mcp

Connecting to Claude Desktop

Add to your Claude configuration file:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{

"mcpServers": { "banditdb": { "command": "banditdb-mcp", "args": [], "env": { "BANDITDB_URL": "http://localhost:8080", "BANDITDB_API_KEY": "your-secret-key" } } } }

The agent swarm now has twelve tools:

ToolWhat it does
create_campaignCreate a new decision campaign. Accepts algorithm ("linucb" or "thompson_sampling"), alpha, and optional budgets for actions that cost something limited. Use Thompson Sampling for natural Bayesian exploration with no tuning needed.
list_campaignsList all active campaigns (shows algorithm and alpha) — useful to check what exists before calling get_intuition.
campaign_diagnosticsInspect per-arm learning state: theta_norm, prediction counts, reward rates, and entropy health. Use when a campaign doesn't seem to be learning or one arm is dominating.
campaign_reportBusiness-level convergence report. Tells you whether the campaign has statistically converged and which arm is winning with confidence intervals.
get_intuitionAsk BanditDB which arm to pick for a given context. Optional exclude_arms / eligible_arms narrow the choice for this request only. Returns the arm and an interaction_id to save.
batch_get_intuitionGet decisions for multiple campaigns in a single round-trip. Pass a list of {campaign_id, context} dicts.
record_outcomeReport whether the chosen action succeeded (1.0) or failed (0.0). Updates the shared model.
archive_campaignSoft-delete a campaign. Pauses predictions/rewards but preserves all learned weights.
restore_campaignRestore an archived campaign to active status with all weights intact.
campaign_budgetBudget spend per resource: consumed, remaining, utilization, shadow price, exhaustion.
add_armAdd an action to a live campaign, optionally warm-started from existing arms and with budget costs.
set_arm_statusPause, retire, or reactivate an action. It keeps everything it learned.

Every decision made by any agent in the network improves the routing for all future agents.


3. Data Science & Offline Evaluation

BanditDB event-sources every prediction and reward to a Write-Ahead Log (WAL). Calling checkpoint() compiles completed prediction→reward pairs into Snappy-compressed Parquet files — one per campaign — for offline analysis with Polars or Pandas.

Every prediction is guaranteed to appear in the Parquet file even if its reward arrives hours later: BanditDB re-emits in-flight interactions at each checkpoint so delayed rewards are always captured in a future cycle.

# Checkpoint: snapshot models, write Parquet, rotate the WAL.

Call this on a schedule or after significant traffic.

summary = db.checkpoint() print(summary)

"Checkpoint written and WAL rotated: 2 campaigns, offset 4821 bytes,

150 interactions exported, 3 in-flight re-emitted"

List which Parquet files are available

print(db.export())

'Parquet files in /data/exports: ["llm_routing.parquet"]'

Load directly from the mounted volume into Polars.

Flat schema: interaction_id | arm_id | reward | predicted_at | rewarded_at | propensity | feature_0 | ...

import polars as pl df = p

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen