Releasing in November 2026! Early access builds are open now for teams working with Python, Polars and PySpark. Request early access →
Optional · MCP server · Cursor · Claude

Vibe code freely. Fix it before it hits GitHub.

PyFluent doesn't need AI, which is why it's fast and inexpensive. When you write Python with Cursor or Claude, the MCP server lets your assistant check its code against the whole directory and fix anti-patterns in seconds—before anything hits GitHub.

No extra model calls Checks unsaved buffers Nothing written until you save
Review score_nightly.py before I merge.
optimize_python · score_nightly.py
Three high-severity findings:
action-in-loopproven
Each loop pass starts a Spark job. Count once outside the loop.
round-tripproven auto
The job writes this table, then reads it back.
withcolumn-in-loopproven review
The plan grows each pass. Use one select().
Illustrative session. Finding text is from the current build.
Apply the safe fixes.
fix_python · automatic fixes only
Removed the read-back of mart.member_bands. Nothing is saved yet.
  scored.write.mode("overwrite").saveAsTable("mart.member_bands")
- saved = spark.table("mart.member_bands")
+ # later steps use scored
The loop fix adds a plan_id column to mart.plan_scores, so it needs your call. Accept it?
Illustrative session. The rewrite is the worked example from our Spark walkthrough.
Move member_bands.py to Polars.
convert_python · pandas → polars
Converted. I added .sort('plan') so the group order matches pandas.
- df = df[df["amount"] > 0]
+ df = df.filter(pl.col('amount') > 0)
- top = df.groupby("plan")["amount"].sum().reset_index()
+ top = df.group_by('plan').agg(pl.col('amount').sum()).sort('plan')
Illustrative session. The tool output is excerpted from a real run.

Vibe coding, with a safety net

A chat window guesses. An engine knows.

Data code is full of details a model has to recall: which Polars release renamed what, which Spark pattern rescans a table. PyFluent turns recall into lookup, so the draft your assistant writes gets checked by something that doesn't guess.

TaskAI assistant aloneWith PyFluent over MCP
pandas to PolarsRewrites by hand and can change group order or null handling.Deterministic conversion, with .sort() added to keep pandas group order.
PySpark and Python upgradesRemembers whichever version it saw most.scan_upgrade lists exactly which APIs change from your version to the target.
Wasteful Spark codeReviews the file you pasted.100+ static rules, each labeled proven, likely or unknown.
Across a whole directoryLimited to the files you paste into the prompt; misses helper & config links.Continuous whole-directory lineage in seconds, execution stages, and cycle detection.
Did the move hold?It looks right, so it reads right.Verify checks dataset reads and writes and column lineage.

8 tools

What your assistant can do once it's connected.

Map the repo

Datasets, lineage, run order and findings across files.

assess_python

Review code

Find slow or risky Spark, Polars and pandas patterns it just wrote.

optimize_python

Fix safely

Apply the 8 automatic rewrites, plus findings you accept by id.

fix_python

Switch engines

pandas, PySpark, Polars and Snowpark, with what needs review.

convert_python

Plan upgrades

Breaking changes from PySpark 2.4 to 4.x and Python 3.7 to 3.15.

scan_upgrade

Prove the move

Static check of reads, writes and column lineage, before and after.

verify_migration

Order the work

Migration waves and a Databricks bundle skeleton from dependencies.

plan_lakebridge_waves

Hand it off

Export the analysis as a workspace document for planning tools.

export_workspace

You stay in control

The assistant proposes. You approve.

Nothing is written until you save

Fix and convert return the new text. The assistant shows you the change, and you save it.

Every fix has a mode

auto applies on its own, review needs you to pass the finding id, and manual is for you to decide.

Your code is never run

PyFluent reads source on your machine. It doesn't execute it or connect to your data, clusters or accounts.

Set up in seconds

Add one block of JSON.

1
Get PyFluent

The PyPI package is coming. Email us for an early build today.

2
Add the server

Paste the block into .cursor/mcp.json or your Claude Desktop config. It runs over stdio, or over HTTP with --http PORT.

3
Ask

A Cursor rule ships with PyFluent, so the assistant knows when to call the tools.

.cursor/mcp.jsonstdio or --http
{
  "mcpServers": {
    "pyfluent": {
      "command": "pyfluent-mcp",
      "args": []
    }
  }
}

Prefer to review yourself?

The same engine, in a local Workbench.

Side-by-side, Cells and Coach views with J/K/A review keys, and a Learn panel that opens a worked example for any call you click. Polars version upgrades run here and in the CLI today.

Side-by-side diffJ / K / A
PyFluent Workbench side-by-side diff
Coach view with the Learn panel997 lessons
PyFluent Coach view with the Learn panel

Shipping next

A gate for the whole team, not just your editor.

Dashed cards are on the roadmap, not released.

pre-commit + GitHub Action

Coming

Block the same findings before a commit or in a pull request, with SARIF annotations.

VS Code extension

Coming

Findings and quick fixes in the editor, with no assistant needed.

MCP registry listing

Coming

Find and install PyFluent from an MCP directory.

Vibe code with a safety net.

No AI required, no token bill. Tell us your stack and we will get you an early build.