Release v2.10.4
We're excited to announce Bublik v2.10.4!
This release introduces powerful new AI integration features and an enhanced global search form in History. We also fixed full test path search in History, made VCS tags visible in the revisions list in run details, and improved dashboard navigation.
What's New
MCP Server
In this release, we've added an MCP (Model Context Protocol) server, enabling seamless integration with AI agents and assistants.
Run Filters for Obtained Results
We've enhanced the run page with powerful new filtering capabilities in the results table.
History Global Search Form Improved
The history global search form has been completely revamped for better usability. Filters are now organized into clear sections (TEST, RUN, RESULT, VERDICT), with frequently used fields prominently displayed and advanced options collapsed by default.
Highlights
MCP Server
We're introducing a Model Context Protocol (MCP) server that allows AI agents to interact with Bublik programmatically. This opens up possibilities for:
- Automated Analysis: Let AI assistants analyze test failures and identify patterns
- Natural Language Queries: Ask questions about your test data in plain language
- Workflow Integration: Connect Bublik to your existing AI-powered workflows
Here's an example of naive just for the start conversation
You can connect to it via these configs as an example:
- OpenCode:
"bublik-mcp": {
"type": "remote",
"url": "https://<bublik_url>/mcp",
}
- Claude:
"bublik-mcp": {
"type": "http",
"url": "https://<bublik_url>/mcp"
}
Run Filters For Obtained Results

History Global Search Form Improved
The form now shows the most commonly used fields by default, with advanced options available through expandable sections. Long test paths are intelligently truncated to show only the end portion by default, making the interface cleaner.

Cleaner Legend — We've also removed unnecessary clutter from the history legend by hiding empty values, giving you a cleaner view of your test data.

Dashboard Navigation Tooltips Improved
Dashboard tooltips now display the navigation target rather than repeating the value, making navigation easier to understand.

Admin Section
Backend Update
The nginx_conf deploy step requires root rights. If you don't have root, you must manually update the Nginx config using bublik/templates/nginx.bublik.template.
cd bublikgit remote updategit checkout v2.10.4- Set path for user systemd services:
export USER_SERVICES_PATH="${HOME}/.config/systemd/user"
- Set full path for the MCP service file:
export MCP_SERVICE_PATH="${USER_SERVICES_PATH}/bublik-mcp.service"
- Create the user systemd directory:
mkdir -p $USER_SERVICES_PATH
- Run deploy script with steps:
./scripts/deploy --steps pip_requirements django_settings mcp_service nginx_conf run_services
- Clear all Redis caches to remove old data due to changing the caching backend:
redis-cli FLUSHALL
Frontend Update
- Trigger the workflow in your frontend repository
- Synchronize the mirrors
cd bublik-uigit remote updategit checkout v2.10.4
Documentation Update
- Trigger the workflow in your frontend repository
- Synchronize the mirrors
cd bublik-docsgit remote updategit checkout v2.10.4
Docker Instance Update
task backup:create- Open your
.envfile and changeIMAGE_TAGto2.10.0 grep -q "BUBLIK_DOCKER_MCP_HOST" .env || echo "BUBLIK_DOCKER_MCP_HOST=127.0.0.1" >> .envgrep -q "BUBLIK_DOCKER_MCP_PORT" .env || echo "BUBLIK_DOCKER_MCP_PORT=8001" >> .envtask pulltask uptask reset-redis-cache
Changelog
Frontend
🚀 New Feature
- api: add components for handling API errors in a centralized manner (fba28d8)
- api: add normalized error handling (c8c5a06)
- api: create library for centralized display of API errors (0f5c423)
- run: expose obtained-result facets in result table toolbar (302ee2c)
- ui: [input] allow input to oprionally show end of value on mount (302c499)
- ui: add shared primitives for handling API errors in a centralized manner (cfa28df)
💅 Polish
- dashboard: remove line wrap for run progress nok/ok results (063be18)
- dashboard: separate refresh button from clock widget (a829cee)
- dashboard: [header] align header items gap with the rest of the app style (cfdf357)
- form: change gray color for input placeholders and app labels (e596185)
- history: capitalize labels for history legend items (eb8978e)
- history: don't display placeholder for empty legend items (8867bfa)
- log: [meta] improve structure for log time information (d855ce4)
- ui: [checkbox] allow passing className for icon as a prop (90e0ddc)
- ui: [hover-card] fix incorrect arrow position (c983414)
🐛 Bug Fix
- history: stop prefiltering history shortcuts by classification (a69e212), closes #512
- log: expand nested
ERRORrows in log (be1288a) - run: [details] clarify Run ID label (79f7e2f)
- run: [multiple] preserve
runIdsquery params on columns reset (3f89cee), closes #511 - run: make filtering exact and prevent accidental dim reference selection (e401ded)
- runs,history,report: fix memory leak (4527f0a)
- runs: [charts] align day charts to daily aggregates (55ae3dc)
- runs: [charts] guard pass rate against zero totals (8d85479)
- runs: rename metadata filter label from 'Tags' to 'Metas' (8160813), closes #505
- dashboard: incorrect prefetch without project filters (bc7595a)
- dashboard: prevent empty-state flicker when changing project filter (15d297e)
- config: sanitize persisted editor content (9439acf)
- dashboard: display API errors for implicit-date resolution failures (ebfb411)
- dashboard: don't show stale data in case of error (0718788)
- dashboard: validation error when dashboard contains report links (238cfd3)
♻️ Code Refactoring
- history: revamp global search form interactions (b7c3d91)
- report: extract hooks for performance from report to reusable library (fc1fb29)
- run: make dim mode default in result table (5cd151b)
- ui: [badge-input] improve ergonomics (523907d)
- use single component for API errors handling and empty states (2e54fda)
📦 Chores
- dashboard: remove links from subrow and add link hints to tooltips (93d11fa), closes #488
- history: rename "Test Name" to "Test Path" (6b5ff68)
- run: [comment] close after succesufull edit/create/update form (7aa905d)
- run: [result-table] move button and rename to "Filters" for opening toolbar (33de7ff)
- test: update snapshot tests (da533b7)
⚡ Performance Improvements
- history: [series] improve performance of series charts (bc58b7a)
- report: improve performance for report charts (a42f530)
Backend
🐛 Bug Fix
- metadata: fix false positive LSP error (a063081)
- history: fix full test path parsing during history search (276d0f2)
- history: fix test retrieval by full path by removing legacy session traversal (72a79d8), closes #277
- dashboard: fix formatting validation to ignore default 'progress' (6c32c3b)
- dashboard: prevent shared state between payload instances (7446414)
- runs: ensure project parameter is correctly typed (affd42c)
- dashboard: fix passing ignore parameter for formatting validation (4363497)
🚀 New Feature
- run data: make VCS tags visible in revisions list in run details (fdf4982)
- mcp: add pagination helpers for usage in MCP (35b24af)
- mcp: add MCP server implementation (06d5a1a)
- log: add json log pydantic models for validation (2810fc8)
- log: add json log processor for processing log to markdown (533d389)
- deploy: add MCP service deployment (401ec32)
- nginx: add Nginx proxy for MCP service (80111cb)
⚡ Performance Improvements
- dashboard: improve performance when applying payload to rows (b215b01)
- dashboard: improve performance when building dashboard rows (8c1989d)
- runs: fix lazy evaluation to prevent extra queries for run IDs (3ee9753)
📦 Chores
- requirements: update packages versions to pick up bug fixes (76f2d17)
- requirements: add and upgrade required dependencies for MCP server integration (fe5c982)
- requirements: update Django version to pick up bug fixes (a262442)
♻️ Code Refactoring
- auth: ensure consistent error handling (5eccae7)
- run: extract run related operations for separations of concern (7b92d01)
- run: adjust run API routes to use service layer (e44416c)
- result: extract result related operations for separation of concern (397282b)
- result: adjust result API routes to use service layer (88a01fa)
- history: extract history related operations for separation of concern (105ffdb)
- history: adjust history API routes to use service layer (df6d09c)
- log: extract log related operations for separation of concern (663a63b)
- log: adjust log API routes to use service layer (0f8e3a8)
- tree: extract tree related operations for separation of concern (3fde322)
- tree: adjust tree API routes to use service layer (d0c3781)
- report: extract report related operations for separation of concern (08ca9b8)
- report: adjust report API routes to use service layer (540d364)
- measurements: extract measurements related operations for separation of concern (c67dff7)
- measurements: adjust measurements API routes to use service layer (4a6db43)
- dashboard: extract dashboard related operations for separation of concern (bfb046b)
- dashboard: adjust dashboard API routes to use service layer (39ceab5)
- project: extract project related operations for separation of concern (7c14e57)
- project: adjust project API routes to use service layer (2dae29f)
- server: extract server related operations for separation of concern (d6c5adc)
- server: adjust server API routes to use service layer (192ce89)
- dashboard: simplify row preparation method (98ccdad)
- runs: improve readability of queryset retrieval (92b5a1c)
💅 Polish
- dashboard: improve navigation tooltip wording for consistency (b45206d)

