Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
MCP server for Tecan Cavro syringe pumps (XLP 6000, XMP 6000, XCalibur) over the DT protocol.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
LABMCP_ADDRESS, LABMCP_SIMULATE, LABMCP_READ_ONLY, LABMCP_LIMITSNecesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"labmcp-cavro": {
"command": "uvx",
"args": [
"labmcp-cavro"
],
"env": {
"LABMCP_ADDRESS": "your-value",
"LABMCP_SIMULATE": "your-value",
"LABMCP_READ_ONLY": "your-value",
"LABMCP_LIMITS": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add labmcp-cavro --env LABMCP_ADDRESS=your-value --env LABMCP_SIMULATE=your-value --env LABMCP_READ_ONLY=your-value --env LABMCP_LIMITS=your-value -- uvx labmcp-cavroCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"labmcp-cavro": {
"command": "uvx",
"args": [
"labmcp-cavro"
],
"env": {
"LABMCP_ADDRESS": "your-value",
"LABMCP_SIMULATE": "your-value",
"LABMCP_READ_ONLY": "your-value",
"LABMCP_LIMITS": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"labmcp-cavro": {
"type": "stdio",
"command": "uvx",
"args": [
"labmcp-cavro"
],
"env": {
"LABMCP_ADDRESS": "your-value",
"LABMCP_SIMULATE": "your-value",
"LABMCP_READ_ONLY": "your-value",
"LABMCP_LIMITS": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
LABMCP_ADDRESS envLABMCP_SIMULATE envLABMCP_READ_ONLY envLABMCP_LIMITS envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 8 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub K-Dense-AI, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.1.3) llegó al registro hace 42 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, Tethered Trust
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Fit, compatibility and recall checks for AI agents before they buy: verdicts, evidence, receipts.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Let an AI agent initialize, aspirate and dispense microlitre volumes at set flow rates, switch valve ports and stop Tecan Cavro OEM syringe pumps through the documented Cavro Data Terminal (DT) protocol.
| Package | labmcp-cavro |
| Instruments | Cavro XLP 6000, Cavro XMP 6000, Cavro XCalibur (with 3-port, 4-port or distribution valves, or valveless) |
| Interfaces | RS-232, RS-485 (with an RS-485 adapter), serial-to-Ethernet adapters |
| Protocol | Cavro DT protocol (XLP 6000 Operating Manual, 734237-C, chapter 3 and appendix G); step resolution per Tecan XCalibur / XMP 6000 specifications |
| Status | 🧪 simulated: tested against a wire-level simulator, not yet verified on hardware. Report a hardware test |
uvx labmcp-cavro --simulate --check
The simulator is an XLP 6000 with a 1 mL syringe and a 3-port valve. Moves take real time; add --option sim_speed=10 to speed it up.
1, switch 1 is 2, … switch 8 is 9, switches 9–E are : ; < = > ?). The pump detects DT versus OEM protocol from the first message after power-up. The default is 9600 baud, 8N1; 38400 baud is selected with the U47 configuration command.--option syringe_ul=1000: syringe volume in µL.--option model=xlp6000 (or xmp6000, 6000 increments per stroke; xcalibur, 3000). For another DT-compatible pump, give --option steps_per_stroke= instead.--option resolution=fine (N1, 8× finer volume steps; applied by initialize) and --option pump_address=2.uvx labmcp ports uvx labmcp-cavro --address /dev/ttyUSB0 --option syringe_ul=1000 --option model=xcalibur --check
uvx labmcp-cavro --address COM3 --option syringe_ul=500 --option model=xlp6000 --check
Non-default baud rates go in the address: `serial://COM3?baudrate=38400`.
Claude Code
claude mcp add cavro -- uvx labmcp-cavro --address /dev/ttyUSB0 --option syringe_ul=1000 --option model=xcalibur
Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)
{
"mcpServers": { "cavro": { "command": "uvx", "args": ["labmcp-cavro", "--address", "/dev/ttyUSB0", "--option", "syringe_ul=1000", "--option", "model=xcalibur"] } } }
Add --read-only to allow status reads but block every move.
| Tool | Kind | Description |
|---|---|---|
aspirate_ul | ⚠️ hazard | Draw volume_ul into the syringe at flow_ul_s through the current (or given) valve port, and wait until the move has finished. The pump must be initialized and have room for the volume. |
dispense_ul | ⚠️ hazard | Push volume_ul out of the syringe at flow_ul_s through the current (or given) valve port, and wait until the move has finished. The syringe must contain at least that volume. |
get_command_log | 👁 read | Return the most recent raw commands sent to / replies received from the instrument (newest last). Useful for debugging and for recording what was done. |
get_connection_info | 👁 read | Report which instrument is connected (identity, address, simulated or real), whether the server is read-only, and the active safety limits. Call this first. |
get_status | 👁 read | Report whether the pump is ready or busy, any error (decoded), the plunger position as the volume in the syringe, the valve position, resolution mode and current top speed. |
initialize | ⚠️ hazard | Initialize the pump: drive the plunger to the top of the syringe (expelling its contents through the valve), set that as position 0 and home the valve. Needed after power-up, a plunger overload or terminate. Route the valve output to waste first. Takes a few seconds. |
reconnect | 🛑 safety | Close and re-open the connection to the instrument (e.g. after it was power cycled or a cable was re-plugged). |
set_valve | ⚠️ hazard | Turn the valve to a named position (3/4-port valves) or to a numbered port (distribution valves). In bypass the plunger cannot move. Returns the new status. |
terminate | 🛑 safety | Stop any plunger move, loop or delay immediately (DT command T). A valve move in progress still completes. Re-initialize afterwards: the plunger may have lost steps. |
| Limit | Default | Meaning |
|---|---|---|
max_volume_ul | 5000 µL | Largest volume one aspirate_ul/dispense_ul may move |
max_flow_ul_s | 500 µL/s | Highest plunger flow rate an agent may use |
Override at launch: --limit max_flow_ul_s=50. Independently of the limits, the server refuses moves that would overfill or over-empty the syringe, and flows the pump cannot produce with the installed syringe (top speed 5–6000 pulses/s).
?28) before every move. Top speed V = flow × 6000 ÷ syringe volume: on all three models a full stroke is 6000 speed pulses in N0/N1. For the XCalibur this is derived from Tecan's published 1.2 s–20 min per stroke, not from its operating manual; please confirm on hardware.Q, as the manual requires. Invalid commands are reported immediately; invalid operands (e.g. a move past the end of the syringe) are reported by the next Q, and the server turns both into clear errors.T without R: in the DT command set R resumes a terminated string. T does not stop a valve move in progress. Re-initialize after terminating. If a move or initialization is still busy well past its expected duration (1.5× + 10 s), or the link fails while waiting, the server sends T itself instead of leaving the plunger moving.--option steps_per_stroke=…, but they are untested.| Model | Firmware | Interface | Verified by | Date |
|---|---|---|---|---|
| *none yet: be the first* |