Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

elsa-mcp

An MCP (Model Context Protocol) server in Python that lets an AI client author Elsa Workflows 3 definitions against a live Elsa engine. The catalog of activities is fetched from the engine's own /elsa/api/descriptors/activities endpoint — the same one Elsa Studio uses — so the MCP always reflects whatever modules, custom activities, and dynamic providers are actually loaded on the target server.

Architecture

[AI client] ──MCP──▶ [elsa-mcp (this project)] ──HTTPS──▶ [Elsa server]
                     (stateless adapter)                   (the engine, untouched)

elsa-mcp is a separate process from Elsa. It depends on Elsa's public REST API and adds:

  • LLM-friendly tool surfaces (search → fetch → validate → publish)
  • A curated authoring guide as an MCP resource
  • Capability gating (readonly / draft / full modes)
  • Short-TTL descriptor caching with stale-on-error fallback
  • Structured, actionable validation errors

Install from PyPI

# Recommended — installs the elsa-mcp command into ~/.local/bin
uv tool install elsa-mcp

# Include preview/dev releases
uv tool install --prerelease=allow elsa-mcp

# Alternative: pipx
pipx install elsa-mcp

After install, verify:

which elsa-mcp        # → /Users/<you>/.local/bin/elsa-mcp
elsa-mcp --help

To upgrade or uninstall later:

uv tool upgrade elsa-mcp
uv tool uninstall elsa-mcp

Configure

Set environment variables (the server reads them at startup):

Variable Required Default Description
ELSA_BASE_URL yes https://localhost:5001 Base URL of the Elsa server
ELSA_API_KEY yes* — API key for Authorization: ApiKey <KEY>
ELSA_BEARER_TOKEN yes* — Alternative: JWT for Authorization: Bearer <JWT>
ELSA_MODE no readonly One of readonly, draft, full
ELSA_VERIFY_TLS no true Set false to accept self-signed dev certs
ELSA_CACHE_TTL no 60 Descriptor cache TTL in seconds

* one of ELSA_API_KEY / ELSA_BEARER_TOKEN is required.

Capability modes

  • readonly — only search/get/list/validate tools registered. Safe default for production.
  • draft — adds create/update tools, but publish is forced to false. Good for staging.
  • full — adds publish + dispatch. Use only on dev environments.

Tools are registered conditionally at startup — in readonly mode the LLM literally cannot see the write tools.

Wire up to Claude

Claude Code

claude mcp add elsa \
  -e ELSA_BASE_URL=http://localhost:12000 \
  -e ELSA_BEARER_TOKEN=<jwt> \
  -e ELSA_MODE=draft \
  -- "$(which elsa-mcp)"

Argument order matters: the server name comes before the -e flags, and -- separates them from the command path. Without --, the variadic -e swallows the path and you'll get error: missing required argument 'commandOrUrl'.

Add -s user to register globally across all projects, or -s project to write a shareable .mcp.json in the current repo.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "elsa": {
      "command": "/Users/<you>/.local/bin/elsa-mcp",
      "env": {
        "ELSA_BASE_URL": "http://localhost:12000",
        "ELSA_BEARER_TOKEN": "<jwt>",
        "ELSA_MODE": "draft"
      }
    }
  }
}

Use the output of which elsa-mcp for the command path — Claude Desktop does not inherit your shell PATH, so absolute paths are required. Fully quit and relaunch the app after editing.

Run hosted (Streamable HTTP)

ELSA_BASE_URL=https://elsa.example.com \
ELSA_API_KEY=... \
ELSA_MODE=draft \
elsa-mcp --http --host 0.0.0.0 --port 8000

Put TLS termination + bearer-token validation in a reverse proxy (Caddy / Traefik) in front.

Spin up a test Elsa server

The repo ships a docker-compose.yml with the Elsa server + Studio:

docker compose up -d
# Elsa server  → http://localhost:12000
# Elsa Studio  → http://localhost:13000  (default login: admin / password)

Then point ELSA_BASE_URL=http://localhost:12000 when running elsa-mcp.

Inspect with the MCP Inspector

npx @modelcontextprotocol/inspector elsa-mcp

Opens a browser UI on http://localhost:6274 where you can manually exercise tools and resources.

Develop from source

git clone https://github.com/neoblue-tech/elsa-mcp.git
cd elsa-mcp
uv sync                              # installs deps + creates .venv
uv run elsa-mcp --help               # run without installing globally
uv tool install --editable .         # OR: install on PATH, live-reloading from source

Run tests:

uv run pytest

Unit tests use respx to mock the Elsa REST API.

Releasing

The project is published to PyPI by .github/workflows/publish.yml:

  • Push to main → publishes a preview X.Y.Z.devN to PyPI (only installable with uv tool install --prerelease=allow elsa-mcp).
  • Tag vMAJOR.MINOR.PATCH → publishes the stable version + creates a GitHub Release.

Versions are derived from git via hatch-vcs; no manual version bumps required.

git tag v0.1.0
git push origin v0.1.0
# → publishes elsa-mcp==0.1.0

License

MIT

Metadata

Release files for elsa-mcp 0.1.dev10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for elsa-mcp 0.1.dev10
File Size Uploaded Provenance
elsa_mcp-0.1.dev10.tar.gz 134.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for elsa-mcp 0.1.dev10
File Interpreter ABI Platform
elsa_mcp-0.1.dev10-py3-none-any.whl Python 3 none any Details

Total release size: 185.6 kB

Release files / elsa_mcp-0.1.dev10.tar.gz

Download URL elsa_mcp-0.1.dev10.tar.gz
Size 134.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a2d792d557cb986607c8993edfb2c0513922e269181731178ca5616c39394cef
BLAKE2b-256 checksum
How to use checksums
ce3dd901caf3c936d4979cb30fd5bfe87f16e263eb99739941abc508a537b24b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release files / elsa_mcp-0.1.dev10-py3-none-any.whl

Download URL elsa_mcp-0.1.dev10-py3-none-any.whl
Size 50.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc96f01153de0da43c0d5add4b04b7bd59f07e9ea253e07405460753ae9e96f7
BLAKE2b-256 checksum
How to use checksums
5febd76ec2c74c9f9fb207665ef5e727feeda4e85ac3d6ea4c5bb845666a4b48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Security for elsa-mcp 0.1.dev10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for elsa_mcp-0.1.dev10.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page