A generic SQL query interface for MCAP robotics data via the Model Context Protocol
Project description
MCAP MCP Server
Query your robot's MCAP recordings with SQL — straight from your LLM.
Setup
{
"mcpServers": {
"mcap-query": {
"command": "uvx",
"args": ["mcap-mcp-server[all]"]
}
}
}
No install, no database, no API keys. Requires uv.
Usage
Just talk to your LLM:
- "Tell me what topics are in session_003.mcap"
- "In session_017.mcap find all moments where voltage dropped below 22V"
- "Correlate IMU acceleration with motor current."
- "Compare average battery voltage across my last 5 runs"
- "What version of mcap-mcp-server am I running? Update it"
Tools
| Tool | Needs loading | What it does |
|---|---|---|
list_recordings |
no | Find MCAP files in your project (or any path) |
get_recording_info |
no | Metadata, channels, attachments for a file |
get_schema |
no | SQL table names & column types — for query planning |
load_recording |
— | Decode MCAP into DuckDB (the LLM calls this automatically) |
query |
yes | Run SQL (full DuckDB — including ASOF JOIN) |
get_version |
no | Server version, available decoders, upgrade command |
Project documentation — configuration, Docker, development setup, and architecture.
Example SQL (under the hood)
-- Time-windowed stats
SELECT (timestamp_us / 1000000) as second,
AVG(voltage) as avg_v, MIN(voltage) as min_v
FROM battery GROUP BY second ORDER BY second
-- Cross-sensor correlation via ASOF JOIN
SELECT b.timestamp_us, b.voltage, i.linear_acceleration_x
FROM battery b ASOF JOIN imu i ON b.timestamp_us >= i.timestamp_us
-- Multi-recording comparison
SELECT 'run1' as run, AVG(voltage) FROM r1_battery
UNION ALL
SELECT 'run2', AVG(voltage) FROM r2_battery
Performance
Metadata tools (list_recordings, get_recording_info, get_schema) return in < 1 ms regardless of file size. SQL queries execute in 1–20 ms once data is loaded. The one-time load_recording cost scales with file size:
| Messages | File size | Load time | Memory | Query time |
|---|---|---|---|---|
| 1K | 23 KB | 8 ms | < 1 MB | 1 ms |
| 10K | 220 KB | 90 ms | 0.5 MB | 1–3 ms |
| 100K | 2.2 MB | 0.7 s | 5 MB | 1–5 ms |
| 500K | 11 MB | 3.9 s | 23 MB | 2–9 ms |
| 1M | 23 MB | 8 s | 46 MB | 2–13 ms |
| 2M | 48 MB | 18 s | 92 MB | 2–22 ms |
Measured on Apple M4 with JSON-encoded messages, 5 fields per message. Query times are median across aggregation, filter, and window function queries. Memory is the DuckDB in-memory footprint (default budget: 2 GB).
Tip: use
topicsandstart_time/end_timefilters onload_recordingto load only what you need.
Update
uvx mcap-mcp-server[all] --upgrade
Or ask your LLM — the get_version tool returns the running version and the upgrade command.
License
GNU General Public License v3.0 — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcap_mcp_server-0.5.0.tar.gz.
File metadata
- Download URL: mcap_mcp_server-0.5.0.tar.gz
- Upload date:
- Size: 84.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a39e4bd5e162dd353ce4d69770bbad1a1fc2985e8e2c641c2f815280c7e1f5a
|
|
| MD5 |
a0e3104adc908fe2b2ad82d81ea55adc
|
|
| BLAKE2b-256 |
cb46504977adbaaf8ecea9bf69078f3c358715b081c5a4d6cbd9982021c5a6dc
|
Provenance
The following attestation bundles were made for mcap_mcp_server-0.5.0.tar.gz:
Publisher:
ci.yml on turkenberg/mcap_mcp_server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcap_mcp_server-0.5.0.tar.gz -
Subject digest:
7a39e4bd5e162dd353ce4d69770bbad1a1fc2985e8e2c641c2f815280c7e1f5a - Sigstore transparency entry: 1038406250
- Sigstore integration time:
-
Permalink:
turkenberg/mcap_mcp_server@ccf3e39ed3c4d35eb035f5341b1808a4bf44a40e -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/turkenberg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@ccf3e39ed3c4d35eb035f5341b1808a4bf44a40e -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcap_mcp_server-0.5.0-py3-none-any.whl.
File metadata
- Download URL: mcap_mcp_server-0.5.0-py3-none-any.whl
- Upload date:
- Size: 44.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3487a7d08b9056df47e2a72ce32175d5ee7c35eec2dc7e6df62c0be650c5abae
|
|
| MD5 |
c073758576532c51ba410af0adfe7575
|
|
| BLAKE2b-256 |
c796275b203fac6779f18f111a642840fab4a6b8cdcbf10fbf463f295f8aade1
|
Provenance
The following attestation bundles were made for mcap_mcp_server-0.5.0-py3-none-any.whl:
Publisher:
ci.yml on turkenberg/mcap_mcp_server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcap_mcp_server-0.5.0-py3-none-any.whl -
Subject digest:
3487a7d08b9056df47e2a72ce32175d5ee7c35eec2dc7e6df62c0be650c5abae - Sigstore transparency entry: 1038406279
- Sigstore integration time:
-
Permalink:
turkenberg/mcap_mcp_server@ccf3e39ed3c4d35eb035f5341b1808a4bf44a40e -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/turkenberg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@ccf3e39ed3c4d35eb035f5341b1808a4bf44a40e -
Trigger Event:
release
-
Statement type: