pipen-mcp
A pipen CLI plugin that exposes pipen processes and pipelines as MCP (Model Context Protocol) tools, allowing AI assistants to discover and run bioinformatics pipelines.
Overview
pipen-mcp bridges pipen's process/pipeline ecosystem with AI assistants that support the Model Context Protocol. Once installed, any namespace registered via the pipen_cli_run entry point group is automatically discoverable and executable by an MCP-compatible client (e.g., Claude, VS Code Copilot, Cursor).
Installation
pip install pipen-mcp
pipen-mcp requires Python ≥ 3.10 and depends on:
pipen-cli-run≥ 1.0.1pipen-annotate≥ 1.0mcp[cli]≥ 2.0
Usage
pipen-mcp adds an mcp subcommand to the pipen CLI:
pipen mcp [--transport {stdio,sse,streamable-http}] [--host HOST] [--port PORT]
| Option | Description | Default |
|---|---|---|
--transport |
MCP transport (stdio, sse, or streamable-http) |
stdio |
--host |
Host to bind to (SSE / streamable-http only) | 127.0.0.1 |
--port |
Port to listen on (SSE / streamable-http only) | 8520 |
stdio (default)
Suitable for direct integration with MCP clients that launch the server as a subprocess:
pipen mcp
SSE
Starts an HTTP server with Server-Sent Events transport:
pipen mcp --transport sse --host 0.0.0.0 --port 8520
Streamable HTTP
Starts an HTTP server with the streamable-HTTP transport:
pipen mcp --transport streamable-http --host 0.0.0.0 --port 8520
MCP Tools
The server exposes four tools that support a progressive-disclosure workflow:
| Tool | Description |
|---|---|
get_namespaces |
List all available namespaces. Start here to discover what is installed. |
get_processes |
List all processes/pipelines available in a namespace. |
get_process |
Get the full argument schema for a specific process/pipeline. |
run_process |
Execute a process/pipeline with a list of CLI arguments. |
Typical workflow
1. get_namespaces()
→ "delim", "bam", "rnaseq", ...
2. get_processes("delim")
→ RowsBinder (proc): Bind rows of input files
→ ColsBinder (proc): Bind columns of input files
3. get_process("delim", "RowsBinder")
→ Required:
--in.infiles <list[str]> Input files
→ Optional:
--envs.sep <str> (default: '\t') Separator
--outdir <str> Output directory
...
4. run_process("delim", "RowsBinder", [
"--in.infiles", "/tmp/a.csv,/tmp/b.csv",
"--envs.sep", ",",
"--outdir", "/tmp/out"
])
→ Pipeline output / logs
VS Code / Copilot Integration
Add the server to your MCP configuration (~/.vscode/mcp.json or ~/.vscode-server/data/User/mcp.json):
{
"servers": {
"pipen-mcp": {
"type": "stdio",
"command": "pipen",
"args": ["mcp"]
}
}
}
Or for SSE:
{
"servers": {
"pipen-mcp": {
"type": "sse",
"url": "http://127.0.0.1:8520/sse"
}
}
}
Authoring a Namespace
Any package can register processes/pipelines with pipen-mcp by declaring a pipen_cli_run entry point:
# pyproject.toml
[project.entry-points."pipen_cli_run"]
myns = "mypackage.ns.myns"
The referenced module should contain Proc subclasses (with an input attribute) or ProcGroup subclasses. Use pipen-annotate to document arguments — annotated fields are exposed in get_process output and used to build the tool schema.
# mypackage/ns/myns.py
"""My namespace — tools for processing text files."""
from pipen import Proc
from pipen_annotate import annotate
@annotate
class MyProc(Proc):
"""Concatenate rows from multiple files.
Input:
infiles (list): Input files to concatenate
Envs:
sep (str): Column separator. Default: ","
"""
input = "infiles:files"
output = "outfile:file:{{in.infiles[0] | stem}}_concat.tsv"
script = "..."
License
MIT
Release files for pipen-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pipen_mcp-0.1.0.tar.gz | 140.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pipen_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 149.4 kB
Release files / pipen_mcp-0.1.0.tar.gz
| Download URL | pipen_mcp-0.1.0.tar.gz |
|---|---|
| Size | 140.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5b99df1ccbd5bb7a2a83ffdbfe213f0506e54d051a6443de83f38286696fac98
|
|
BLAKE2b-256 checksum How to use checksums |
5b12f4b84289e052f9e253afc08c41b0abc479bc1e51b050f1ab0318f1cf3a7b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pipen_mcp-0.1.0-py3-none-any.whl
| Download URL | pipen_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cda69b3767179f60d68798b996bac0e9b9257dd029eb791110fac694e1e8fe19
|
|
BLAKE2b-256 checksum How to use checksums |
0dd042cda235cb6785fd959ba0c1d60640553135f5880ff6275283ed26571588
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|