# SiLA 2 Bridge

Connects AI agents to laboratory instruments via the SiLA 2 standard over gRPC. Useful for running automated pipetters and plate readers.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 23
- Author: K-Dense-AI
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/K-Dense-AI/lab-instrument-mcps/tree/HEAD/servers/protocols/sila2
- Updated: 2026-09-26
- HTML: https://affpapa.org/en/nevibecode/mcp/sila-2-bridge

## What it does

The bridge connects AI agents to laboratory equipment supporting the SiLA 2 standard. It talks to servers implemented in `sila_python` or `sila_java` over gRPC across Ethernet. The tool reads Feature Definitions (FDL) straight from the target instrument. It verifies constraints beforehand. Because parameters undergo schema checks prior to transmission, invalid values never hit the device.

Instruments on the local subnet are located with mDNS via the `discover_servers` tool. The server handles both immediate and observable actions. When an operation takes time, the bridge reports progress and intermediate payloads. Long-running tasks can be aborted cleanly using `cancel_command` via `CancelController`.

Production devices usually enable TLS with self-signed certificates. A connection fails immediately unless you provide the certificate authority file using `root_cert`.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `LABMCP_ADDRESS`, `LABMCP_SIMULATE`, `LABMCP_READ_ONLY`, `LABMCP_LIMITS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> --transport stdio sila2 -- uvx labmcp-sila2
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-sila2 <command>

### Codex

**Platform CLI**
```bash
codex mcp add sila2 --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> -- uvx labmcp-sila2
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-sila2 <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "sila2": {
            "command": "uvx",
            "args": [
                "labmcp-sila2"
            ],
            "env": {
                "LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
                "LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
                "LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
                "LABMCP_LIMITS": "<LABMCP_LIMITS>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-sila2 <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "sila2": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "labmcp-sila2"
            ],
            "env": {
                "LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
                "LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
                "LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
                "LABMCP_LIMITS": "<LABMCP_LIMITS>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-sila2 <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e LABMCP_ADDRESS=<LABMCP_ADDRESS> -e LABMCP_SIMULATE=<LABMCP_SIMULATE> -e LABMCP_READ_ONLY=<LABMCP_READ_ONLY> -e LABMCP_LIMITS=<LABMCP_LIMITS> sila2 uvx labmcp-sila2
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-sila2 <command>

## When to use it
- discover lab devices on the local network using mDNS
- validate command arguments against FDL schemas before execution
- track execution status and intermediate values of long operations
- abort running instrument actions using CancelController

## Example prompts
- Discover all SiLA 2 servers active on the local subnet.
- Read the current temperature from the thermoblock and heat to 37 degrees.
- Stop the active long-running command using CancelController.

## Similar
- [Zotero MCP](https://affpapa.org/en/nevibecode/mcp/zotero-mcp.md) — MCP server · ★ 5585
- [arxiv-mcp-server](https://affpapa.org/en/nevibecode/mcp/arxiv-mcp-server.md) — MCP server · ★ 3235
- [PaperBanana](https://affpapa.org/en/nevibecode/mcp/paperbanana.md) — MCP server · ★ 2418
- [MATLAB MCP Server](https://affpapa.org/en/nevibecode/mcp/matlab-mcp-server.md) — MCP server · ★ 1723
- [Hex Research](https://affpapa.org/en/nevibecode/mcp/hex-research.md) — MCP server · ★ 584
- [DocsAgent — Zotero, Obsidian & Apple Notes MCP Server](https://affpapa.org/en/nevibecode/mcp/docsagent-zotero-obsidian-apple-notes-mcp-server.md) — MCP server · ★ 578

From the same set: [k-dense-ai/lab-instrument-mcps](https://affpapa.org/en/nevibecode/by/k-dense-ai/lab-instrument-mcps.md) — 28 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
