mq-bridge-app
io.github.marcomqPublished by GitHub account marcomqv1.0.2Updated Oct 24, 2026
Move data between 15+ databases, queues and files at high throughput, without it entering context
Overview
MCP front end to mq-bridge, a zero-code ETL engine that moves data between 15+ databases, brokers, queues and files without loading it into context.
- What you can do
- Run configured routes that copy data between brokers, databases, files and HTTP endpoints
- Stream Postgres or MongoDB changes into Kafka, files or warehouses
- Read and write SQL databases, MongoDB, ClickHouse, object storage and CSV/JSONL files
- Apply transforms, retries, dead-letter queues, deduplication and rate limiting along a route
- Call OpenAI-compatible LLM and embedding endpoints to classify, summarise or embed messages
- When to use it
- Useful when an assistant should set up or drive bulk data movement between systems — broker-to-broker bridging, database ingestion, CDC pipelines or file conversion — without piping records through the model. It is a data-movement tool, not a stream-processing engine for windowing or joins.
- Requirements
- Runs as a local desktop process over stdio, distributed as an OCI image or a Cargo package. Each route needs connection details for its source and sink systems (broker URLs, database credentials, object storage, HTTP endpoints), typically supplied through YAML configuration or environment variables. No authentication or environment variables are declared by the manifest.
Installation
In SourceWeft
- Open mq-bridge-app in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
mqb · mq-bridge
crossing streams · library
One fast Rust engine to move and reshape data between brokers, databases, files and HTTP. Try it in the CLI, ship it in your Rust, Python or Node.js service.
[Crates.io] [Docs.rs] [Book] [Benchmark] [Linux] [Windows] [macOS] [Supply chain] [Security] [License]
🖥️ mq-bridge-app · 📊 ETL benchmarks · 🏗️ Architecture · ⚙️ Config · 📚 Middleware & endpoint reference
What is mq-bridge?
mq-bridge is an asynchronous Rust library that moves messages and data between systems: Kafka, NATS, RabbitMQ, MQTT, MongoDB, PostgreSQL/MySQL/SQLite, Postgres CDC, ClickHouse, Redis Streams, HTTP, WebSocket, gRPC, ZeroMQ, AWS SQS/SNS, IBM MQ, cloud object storage, files, and in-memory channels. Every endpoint sits behind the same batch-shaped receive_batch / send_batch traits, so any source can feed any sink.
A route connects one input to one output and shapes the data on the way: transform, filter, switch, fan out, enrich, retry, rate-limit, deduplicate, or answer a request, all by configuration. The engine is fast: a typing transform runs at ~1.6M rows/s, ~19.5x Redpanda Connect on the same job. Structural endpoints such as switch, fanout and sequence nest freely inside a route, and wrong delivery combinations fail when the route starts, not in production. Where configuration isn't enough, you add a handler in Rust, Python or Node.js. Batching, ack/nack, commit ordering and broker I/O stay in the Tokio-based core, so your code works with plain CanonicalMessages and doesn't handle Kafka offsets or AMQP nacks.
Try it in the CLI, ship it in your service: mq-bridge-app runs a route from the command line (mqb), as a server, desktop app or MCP server; the same config runs as a library inside your Rust, Python or Node.js service when you need lower latency or want the pipeline in your production code. No daemon or platform to operate.
Bridge between ecosystems: two plugins add over 100 more inputs and outputs: Redpanda Connect's components and faucet's connectors. They load only when a route uses them and run in the same process, so one route can read with one framework, process with a second and write with a third, under one ack chain and with mq-bridge's retry, DLQ and deduplication around all of it. See Combine ecosystems in one route.
Use cases
Quick Start
Install the library for your language:
Describe a route — here Kafka → NATS with retries — in routes.yaml:
Run it:
Attach a handler (with_handler / withHandler) when you need business logic in between. No code at all? mq-bridge-app runs the same engine from the command line or a desktop UI:
Capabilities at a glance
Every row works from the Rust crate, the Python and Node.js packages, and the zero-code app; the Cargo feature is only needed when you build the Rust crate yourself. The linked book documents the library as well as the app.
The Connect plugin links only Redpanda Connect components free of Redpanda Community License code (bundled code is Apache-2.0 and MIT), so some upstream components, such as its Kafka, AWS and Snowflake ones, are not included; see what is not included. Native endpoints and the faucet plugin cover most of that gap.
Combine ecosystems in one route
No single framework has every connector and processor. mq-bridge combines three in one route:
Plugins load only when a route names them and run in-process. Acks, commits, retry, dlq and deduplication work across all parts, and plugin endpoints nest inside switch, fanout and sequence. Where a system has both, prefer the native endpoint.
Install the Connect plugin with brew, conda, pip or npm (install), the faucet plugin with pip install mq-bridge-faucet or npm install mq-bridge-faucet (README).
For AI agents: llms.txt is a curated index of the documentation, and
npx skills add marcomq/mq-bridge installs a skill that
teaches Claude Code, Codex and other agents to drive mqb.
Benchmarks
Like-for-like ETL comparisons, measured through the zero-code mq-bridge-app; every number, baseline and command is in the ETL benchmark harness:
The CSV row reuses an existing, independently published 1M-row CSV → JSONL workload, on a byte-identical fixture: 7 mixed-type columns, seed 42, 121,981,421 bytes, SHA-256 a84894e0…0c45b221 (full definition). Whole-process wall-clock, no transformation, Meltano run on the same machine and file.
All figures: mq-bridge 0.4.20, except the Redpanda Connect rows, which were measured together with their native mq-bridge figures in one later session (scenario 10). DuckDB is a throughput ceiling for the conversion itself, not an ETL tool.
External benchmark: both the Rust library (mq-bridge) and the Python binding (mq-bridge-py) are entries on the third-party http-arena.com leaderboard, which compares HTTP frameworks by requests per second (live, so rankings shift over time). It measures mq-bridge's HTTP (and WebSocket) serving path, which is one endpoint among many, not broker or ETL throughput; those are covered under Benchmarks. See the Python analysis notes for the local comparison harness.
Why mq-bridge
What you get from one engine, whichever language you call it from:
- 20+ native transports, 100+ more via plugin, one API: every connector listed above, plus
dir_spool(a crash-safe directory FIFO queue), behind the samereceive_batch/send_batchshape. - Redpanda Connect reach: the Connect plugin adds Redpanda Connect's production-proven components — 56 inputs and 68 outputs as endpoints, plus 86 processors, most of which also run as middleware on any endpoint — while mq-bridge keeps routing, batching, retries, DLQ and deduplication.
- faucet reach: the faucet plugin adds faucet's 41 sources and 34 sinks as one
faucetendpoint: MySQL / SQL Server / Oracle CDC, Snowflake, BigQuery, Iceberg, Delta, GraphQL APIs and Singer taps, with commit-token exactly-once into sinks that support it. - The best of three frameworks in one route: native endpoints, Connect and faucet parts mix freely in one route and one process; see Combine ecosystems in one route.
- Change Data Capture: stream row-level changes from Postgres (logical replication /
pgoutput) and MongoDB (change streams) as flat rows with an operation marker. - Restart-safe delivery: batch-aware ack/nack with commit sequencing for cumulative-ack brokers; the integration suite shows no data loss during in-flight broker restarts, including a Postgres CDC restart-safety test.
- Reliability middleware, not a framework: retries, dead-letter queues, deduplication, rate limiting, and cookie/session persistence wrap any endpoint.
- Polyglot on one engine: the same Rust core ships as native Python and Node.js bindings; routing, batching, and broker I/O stay in Rust.
- TLS everywhere, one config shape: a single
TlsConfigblock (CA bundle, client cert/key for mTLS, insecure-skip) is reused across transports. - Self-hosted, no daemon: generate config in the optional UI, paste it into your code, run it in-process. No hosted control plane, no separate scheduler.
Prefer not to write code? mq-bridge-app runs the exact same engine as a standalone, zero-code ETL service configured entirely by YAML or environment variables. It ships a Postman-style UI to build, send, and inspect messages against a route, and can import Postman collections and AsyncAPI documents to scaffold routes and endpoints. Everything about the app — install, CLI, UI, cookbook, tuning — is in the 📖 book.
When to use mq-bridge
- Hybrid Messaging: Connect systems speaking different protocols (e.g., MQTT to Kafka) without writing a custom adapter for every pair.
- Batch-heavy Pipelines: Increase throughput by moving messages in batches while keeping per-message ack/nack decisions.
- Infrastructure Abstraction: Write business logic against
CanonicalMessages and swap the underlying transport later. - Resilient Pipelines: Apply retry, DLQ, deduplication, limiter, and cookie/session behavior consistently around endpoints.
- Database Integration: Combine databases with message brokers, for example by ingesting messages into SQL/MongoDB or forwarding outbox rows to a broker.
- Sidecar / Gateway: Run the bridge beside another service to ingest, filter, and route messages before they reach the core application.
When NOT to use mq-bridge
- Stateful Stream Processing: For windowing, joins, or complex aggregations over time, dedicated stream processing engines are more suitable.
- Domain Aggregate Management: If you need a framework to manage the lifecycle, versioning, and replay of domain aggregates (Event Sourcing), use a specialized library.
mq-bridgehandles the bus, not the entity. - Protocol-Specific Power Features:
mq-bridgeintentionally exposes a common subset: publish/consume, pub/sub where possible, request-reply where possible, batching, middleware, and ack/nack handling. If your application depends on highly specific broker features, using that broker's native client directly may be better.
Documentation
The 📖 mq-bridge book covers the library and the app. Connectors, middleware and tuning use the same settings in both.
Status
mq-bridge was created in 2025. Its reliability behavior is exercised by an automated integration and performance suite across supported endpoints, in each of the queue and subscriber modes that endpoint supports:
- All endpoints showed no data loss during in-flight broker restarts; MQTT publish confirmation was hardened until a chaos test drove in-flight loss to zero.
- Postgres CDC has a restart-safety test: an un-acked, in-flight batch is redelivered after a database restart with no loss and no gap.
It is used as rust library in armature and as python lib in omniload.
Stability and Rust version
Since 1.0 the Rust API follows semantic versioning: the crate root and the modules models, traits, errors, outcomes, extensions, plugin (the SDK), type_handler, publisher, route and checkpoint. The implementation modules endpoints, middleware, support and test_utils may change in a minor release, and so may the major version of a re-exported driver crate (mq_bridge::sqlx, mq_bridge::rdkafka, ...).
A minor release may add a configuration field, a variant of a configuration or error enum, and raise the minimum Rust version. Code that writes config structs with ..Default::default() and gives a match on these enums a _ arm compiles unchanged across such releases.
The minimum Rust version is 1.89. The features aws, sqlx and postgres-cdc, and so full, need 1.94.1; zeromq-omq needs 1.93.
Running Tests
The project includes integration and performance tests. Most backend tests require Docker.
To run the performance benchmarks for all supported backends:
To run the criterion benchmarks:
Criterion numbers vary with the machine they run on; for comparable throughput figures use the integration performance test above, or see the ETL benchmarks.
Contributing
Contributions are welcome. See CONTRIBUTING.md for setup notes, code style, and pull request guidelines.
AI Disclaimer
This library was written with a lot of AI assistance. The core started as my own code; many endpoints and docs were expanded with Gemini, CodeRabbit, Claude, and Codex, which made adding transports much faster once the endpoint traits were stable.
Generated code can look plausible while missing important details, so I review every commit manually, clean up and refactor the output, and rely on the integration suite to catch regressions. I trust the current code as much as if I had written it myself. Given the large feature set there may still be open issues; the current focus is testing and documentation.
License
mq-bridge is dual-licensed under either the MIT license or the
Apache License, Version 2.0, at your option.
Binary distributions carry their applicable third-party terms in
THIRD_PARTY_LICENSES.txt. Their current maintenance process is documented in
docs/THIRD_PARTY_LICENSES.md.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in mq-bridge by you, as defined in the Apache-2.0 license, shall
be dual licensed as above, without any additional terms or conditions.
Source: README.md at commit 136e88c
Tools
0Version history
13- v1.0.2LatestOct 20, 2026
- v1.0.1Oct 16, 2026
- v1.0.0Oct 13, 2026
- v0.4.20Oct 9, 2026
- v0.4.19Oct 4, 2026
- v0.4.18Oct 3, 2026
- v0.4.17Oct 2, 2026
- v0.4.16Sep 29, 2026
- v0.4.15Sep 26, 2026
- v0.4.14Sep 25, 2026
- v0.4.13Sep 21, 2026
- v0.4.12Sep 19, 2026
- v0.4.11Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts