Skip to main content

Universal switchboard for the Context-Pipe Protocol (CPP)

Project description

โ›“๏ธ Context-Pipe

The Universal Standard for Context Engineering.

CI Tests Python License OSI

context-pipe is a high-performance orchestration layer designed to bring the Unix Philosophy to the AI context window. It allows you to connect AI tools (Spokes) into a series of Streams, ensuring that data is refined, distilled, and noise-free before it ever reaches the LLM.


๐Ÿš€ The Vision

The AI agent has a fundamental infrastructure problem: every tool call returns raw, unfiltered output directly into the context window. Logs arrive with timestamps. Search results arrive with boilerplate. Agent A's 40KB analysis gets passed verbatim to Agent B. The context window fills. Signal drowns in noise. The LLM degrades.

context-pipe solves this at the infrastructure layer โ€” before the LLM sees anything.

In the Studio of Two philosophy, we build Systems, not Patches. A patch would be a custom filter per tool. A system is a universal protocol: any tool that reads stdin and writes stdout becomes a node. Any sequence of nodes becomes a pipe. Any pipe is named, versioned, audited, and reusable across every project and every agent framework.

The result is a context supply chain: data enters raw, passes through a sequence of refineries (normalize โ†’ filter โ†’ compress โ†’ distil), and arrives at the LLM as dense, high-signal content. Every byte saved is accounted for in the Context Balance Sheet. Every pipe run is traceable. Every A2A handoff is protected.

This is not a wrapper around semantic-sift. It is the orchestration layer that makes any refinery composable, observable, and production-grade. A node can be a binary, a shell command, a Python script, a Skill (an expert-lens mandate injected into the stream), or โ€” coming in Phase 7.5 โ€” a full MCP tool (Figma, GitHub, context-mode, or any server registered in pipes.json). If it reads stdin and writes stdout, it belongs in the pipe.

Example โ€” crawl the web, research it, save it, and ship it:

trigger: tool:web_search | tool:web_fetch
[URL]
    โ†’ firecrawl/scrape             # MCP node โœฆ: fetch live page as clean text     ~18,400 tokens
    โ†’ markitdown                   # binary node: convert to structured Markdown     ~16,200 tokens
    โ†’ rg 'security|vulnerability'  # shell node: surface only relevant sections      ~3,100 tokens
    โ†’ prettier --parser markdown   # shell node: normalize formatting                ~3,050 tokens
    โ†’ semantic-sift-cli doc        # binary node: distil to high-signal summary        ~420 tokens
          โ†ณ tee โ†’ research.md      # T-pipe: save raw distilled copy to disk
    โ†’ security-auditor skill       # skill node: inject expert security lens           ~380 tokens
    โ†’ github/create_issue          # MCP node โœฆ: open a tracked issue with findings

โœฆ Phase 7.5 โ€” coming soon

Context Balance Sheet (illustrative)
  in:  18,400 tokens  โ†’  out: 380 tokens  โ€”  97.9% saved  ยท  1.2s total

Every node is a real subprocess. The T-pipe saves a raw copy at any point without interrupting the chain. The LLM receives only what matters โ€” and every byte in, byte out, and millisecond of latency is recorded in the Context Balance Sheet automatically.


๐Ÿ› ๏ธ Core Components

1. The Context-Pipe Protocol (CPP)

A language-agnostic standard with one rule: a node reads stdin, transforms content, and writes to stdout. Any binary, shell command, Python script, or MCP tool that honours this contract is a valid node. The protocol is defined in doc/CONTEXT_PIPE_PROTOCOL.md and is deliberately simple โ€” no SDKs, no registration, no framework coupling.

2. The Orchestration Spine (orchestrator.py)

The execution engine that chains nodes into pipes. Runs each node as a real OS subprocess with shell=False enforced (no injection surface). Features: per-node timeout guard (PIPE_NODE_TIMEOUT_MS), T-Pipe stream splitting (save raw input to disk before a node processes it), full trace accounting (input/output size + latency per node), and Adaptive Window Pressure (PIPE_WINDOW_PRESSURE env var passed to every node).

3. The Universal Switchboard (pipes.json + mappings)

Data-driven routing that resolves the optimal pipe automatically based on three trigger types: tool name (tool:regex), payload size (size:>N), and default fallback. Pipe definitions live in pipes.json (project-level) and optionally ~/.mcp-pipe.json (global, merged with local precedence). No code changes required to add, modify, or re-route pipes.

4. The MCP Surface (server.py + mcp-pipe CLI)

Eight MCP tools expose every capability to AI assistants directly: pipe_run, pipe_run_dynamic, pipe_read_file, pipe_analyze_file, pipe_list_shadow_tools, pipe_agent_handoff, get_pipe_stats, and pipe_onboard. The mcp-pipe CLI mirrors the same surface for terminal-first workflows โ€” no IDE required. Shadow Tool Discovery (pipe_list_shadow_tools) gives the agent a live capability manifest combining configured pipes and curated PATH tools (jq, rg, markitdown, pandocโ€ฆ).

5. Subconscious Interceptors (pipe_hook.py + onboarding.py)

IDE hooks that apply pipes transparently after every tool call โ€” without the agent needing to invoke pipe_run explicitly. Supported: Cursor (postToolUse), VS Code/GitHub (hooks), Claude Code/Qwen/Codex (PostToolUse), Windsurf and Cline (pre-read security gateway), OpenClaw (native plugin). For OpenCode, the AGENTS.md SOP mandate is the active strategy (see Known Limitations). pipe_onboard injects all hooks, slash commands (/pipe-run, /pipe-dynamic, /pipe-handoff, /pipe-stats), and the full agent SOP in one command.

6. The A2A Bridge (a2a.py)

pipe_agent_handoff() distils Agent A's output before it enters Agent B's context window. Framework-agnostic โ€” no monkey-patching. Works in CrewAI task callbacks, Google ADK transfer hooks, LangGraph edge functions, or any custom handoff point. Available as both a Python function and an MCP tool. Returns the original output unchanged on any error, so the agent chain is never interrupted.


โœจ What Makes This Different

Feature What it does Where
Unix pipe model for AI Chain any stdinโ†’stdout tool into a named pipe. Binary, shell, skill, or MCP tool โ€” same contract. Advanced Node Types
MCP Node Type (Phase 7.5) Call any MCP tool (Figma, GitHub, context-modeโ€ฆ) as a first-class pipe node โ€” no wrapper scripts. doc/MCP_NODE_SPEC.md
Dynamic Pipes AI agents construct and execute ad-hoc node lists at runtime via pipe_run_dynamic โ€” no pipes.json entry required. Dynamic Pipes
Shadow MCP Registry MCP servers can be installed locally or called remotely without being registered in your IDE โ€” keeping them invisible to the agent's tool list, preventing MCP tool list bloat. pipe_list_shadow_tools boots and queries them on demand, routing calls through pipe_run or pipe_run_dynamic. Ideal for high-noise utility servers you never want polluting the agent's decision space: format converters (markitdown, pandoc), search tools (rg, fd), data processors (jq, yq), web scrapers (firecrawl), and document ingestors (unstructured, tika). One MCP tool in the IDE. Everything else stays shadow. Shadow MCP Registry
A2A Agent Handoff Distil Agent A's output before it enters Agent B's context window โ€” framework-agnostic, no monkey-patching. A2A Handoff
T-Pipe Stream Splitting Save a raw copy of any node's input to disk before it is distilled โ€” for audit, debugging, and quality measurement โ€” without interrupting the chain. T-Pipe Nodes
Adaptive Window Pressure PIPE_WINDOW_PRESSURE (0.0โ€“1.0) signals remaining context headroom to every node; semantic-sift auto-adjusts --rate accordingly. Environment Variables
Global Config (~/.mcp-pipe.json) Share pipe definitions and MCP server registries across all projects โ€” local pipes.json always wins. doc/ARCHITECTURE.md ยง10
Shell Alias Injection pipe_install_aliases writes mcp-pipe / cpipe into your shell profile โ€” terminal-ready without venv activation. Terminal Usage
Context Balance Sheet Every pipe run is accounted: chars in, chars out, latency per node, agent attribution, net ROI. Telemetry & ROI

โšก Quickstart (60 seconds)

# 1. Install
pip install mcp-context-pipe "semantic-sift[neural]"

# 2. Onboard (writes pipes.json + hooks for your IDE)
context-pipe-onboard   # or: ask your AI "Run pipe_onboard()"

# 3. Verify the full stack
echo "noisy log [14:22:05.123] DEBUG: heartbeat ok" | context-pipe run standard-distill
# โ†’ distilled, noise-free output with audit header

Full setup guide (Sovereign Dual-Repo Pattern, venv layout, IDE config): doc/OPERATOR_GUIDE.md


๐Ÿ—๏ธ Getting Started

1. Installation

Option A: Quick Install (PyPI)

Because MCP servers require an explicit Python executable path in your IDE config, you must create a virtual environment first:

โ„น๏ธ What you get: This installs the Context-Pipe orchestration layer and Semantic-Sift's core Python server. The sift-core Rust binary (for near-instant heuristic sifting) is included in the PyPI wheel โ€” no Rust toolchain required. The [neural] extra adds PyTorch (~1.5 GB) for large-payload semantic compression.

uv venv
# Windows: .\.venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
uv pip install mcp-context-pipe "semantic-sift[neural,multi-modal]"

Option B: Sovereign Pattern (Recommended for Studio of Two) Clone both repos side-by-side. The context-pipe venv acts as the master environment holding both packages. See Section 0 of the Operator's Guide for the full sequence.

# 1. Clone both repos
git clone https://github.com/luismichio/context-pipe.git
git clone https://github.com/luismichio/semantic-sift.git

# 2. Master venv in context-pipe - holds both packages
cd context-pipe
python3.12 -m venv venv
# Windows:
.\venv\Scripts\activate
# macOS/Linux:
# source venv/bin/activate
uv pip install -e .
uv pip install -e ../semantic-sift  # semantic-sift-cli lands in context-pipe/venv/Scripts/ (Win) or venv/bin/ (Mac/Linux)

# 3. ML runtime venv in semantic-sift (Python 3.12 for torch/CUDA compatibility)
cd ../semantic-sift
python3.12 -m venv venv312
# Windows:
.\venv312\Scripts\activate
# macOS/Linux:
# source venv312/bin/activate
uv pip install -e .[neural]         # torch, transformers, llmlingua

Note: The package name on PyPI is mcp-context-pipe but the installed module is context_pipe. The semantic-sift-cli binary is registered only in the venv where semantic-sift is pip-installed (step 2 above). Both pipes.json files must reference that absolute path.

2. Connect the MCP

CRITICAL: For exact configuration paths for Cursor, Gemini, OpenCode, VS Code, and Claude, reference the Master Configuration Matrix.

3. Connect a Refinery

Context-Pipe is the "Switchboard," but it needs a "Refinery" to distill data. Semantic-Sift is the flagship intelligence engine for this ecosystem. It uses heuristic sieves and neural models (BERT/ONNX) to incinerate noise (timestamps, boilerplate) while preserving 95% of the signal.

Note: In the Sovereign Pattern, semantic-sift is cross-installed into context-pipe/venv (step 2 above). Context-Pipe will also auto-discover a separately installed semantic-sift-cli across all known locations (system PATH, pipx, sibling venv directories) via pipe_onboard or pipe_verify.

4. Verify the Installation

After installing both packages, ask your AI assistant to verify the full stack:

"Run pipe_verify() to confirm the installation."

This will report the health of every component and automatically link semantic-sift-cli into pipes.json if it was found in a separate environment.

5. Configure your first Pipe

Edit pipes.json (see pipes.json.example) to define your high-fidelity context streams.

6. Auto-Onboard

Once connected, ask your AI Assistant to configure your workspace:

"Run pipe_onboard(environment='Cursor') to configure this project."

pipe_onboard auto-detects your IDE if environment is omitted โ€” it inspects environment variables and parent-process names to fingerprint 12+ platforms (Cursor, Gemini, OpenCode, VS Code, Windsurf, Claude, Cline, etc.). Pass environment explicitly only when auto-detection is ambiguous.


๐Ÿ“š Documentation

Detailed documentation is available in the doc/ directory.


๐Ÿ Programmatic Usage

Context-Pipe exposes a single pipe() function for direct integration into Python scripts, notebooks, and agent frameworks (LangChain, CrewAI, etc.) โ€” no MCP server or CLI required.

from context_pipe import pipe

# Auto-route based on pipes.json mappings
clean = pipe(raw_logs, tool_name="bash")

# Specify a pipe explicitly
distilled = pipe(document_text, pipe_name="semantic-refinery")

# Minimal usage โ€” returns input unchanged if no pipe resolves
result = pipe(text)

Function signature:

def pipe(
    text: str,
    pipe_name: str | None = None,   # explicit pipe name; auto-routes if omitted
    tool_name: str = "",            # used for trigger matching and telemetry
    config_path: str = "pipes.json",
) -> str: ...

The function always returns the original text unchanged on any error (subprocess failure, missing config, etc.), so it is safe to use as a drop-in filter.


๐Ÿค A2A (Agent-to-Agent) Handoff

When chaining agents, use pipe_agent_handoff to distil Agent A's output before it enters Agent B's context window. Works with any framework โ€” no monkey-patching required.

from context_pipe.a2a import pipe_agent_handoff

# In a CrewAI task callback, ADK transfer hook, or any custom handoff point:
agent_b_input = pipe_agent_handoff(
    agent_a_output,
    pipe_name="semantic-refinery",   # optional; auto-routes if omitted
    from_agent="researcher",
    to_agent="writer",
)

Also available as an MCP tool โ€” ask your AI assistant: "Run pipe_agent_handoff() to distil this agent output before passing it on."

Function signature:

def pipe_agent_handoff(
    output: str,
    pipe_name: str | None = None,   # explicit pipe; auto-routes if omitted
    from_agent: str | None = None,  # producing agent label (telemetry + routing)
    to_agent: str | None = None,    # consuming agent label (telemetry only)
    config_path: str = "pipes.json",
) -> str: ...

Always returns the original output unchanged on any error โ€” the agent chain is never interrupted.


๐Ÿ’ป Terminal Usage (mcp-pipe CLI)

Context-Pipe ships a first-class terminal runner โ€” mcp-pipe โ€” so you can use every capability without an IDE or MCP server.

# Run a named pipe on stdin
cat app.log | mcp-pipe run standard-distill

# Run a named pipe on a file directly
mcp-pipe run semantic-refinery --file spec.md

# Run an ad-hoc node array (shell synergy requires --allow-shell)
echo "noisy output" | mcp-pipe run-dynamic '[{"cmd":"semantic-sift-cli","args":["logs"]}]'

# List all configured pipes + curated PATH tools (Shadow MCP discovery)
mcp-pipe list

# Print the Context Balance Sheet (ROI across all sessions)
mcp-pipe stats

# Start the MCP server manually (stdio transport)
mcp-pipe serve

# Install/remove the cpipe shell alias
mcp-pipe aliases install
mcp-pipe aliases remove

The mcp-pipe entry point is registered automatically when you pip install mcp-context-pipe. Use cpipe as a shorthand after running mcp-pipe aliases install.

Shadow MCP Registry

Every MCP server you add to an IDE registers its tools globally โ€” they all appear in the agent's tool list whether the agent needs them or not. At scale this causes MCP tool bloat: hundreds of tools in the prompt, wasted tokens on every inference call, and a higher chance the agent picks the wrong one.

context-pipe takes a different approach. Instead of registering every context-processing tool as a first-class MCP tool, it exposes a single discovery tool โ€” pipe_list_shadow_tools โ€” that returns a live capability manifest on demand. The tools stay hidden ("shadow") until the agent asks for them. One MCP tool does the work of many.

What the manifest includes:

  1. pipes.json pipes โ€” every named pipe configured in your project.
  2. Curated PATH tools โ€” probes 7 well-known CLI tools (jq, yq, markitdown, pandoc, rg, fd, bat) and surfaces any found on PATH.

Known limitation: shadow tools are not callable as independent MCP tools โ€” the agent must route them through pipe_run or pipe_run_dynamic. This is by design (it keeps the MCP surface minimal), but it means the agent cannot call jq or markitdown directly without constructing a dynamic pipe node.

Terminal access via mcp-pipe: the same manifest is available without an IDE or MCP server โ€” mcp-pipe list prints every pipe and curated PATH tool to stdout. Pipe any content through a shadow tool directly from the terminal:

# Discover what's available
mcp-pipe list

# Run a shadow tool via a dynamic pipe โ€” no pipes.json entry needed
echo "# My Doc" | mcp-pipe run-dynamic '[{"cmd":"markitdown"},{"cmd":"semantic-sift-cli","args":["doc"]}]'

๐Ÿ”— Advanced Node Types

Context-Pipe supports more than just simple binaries. You can chain standard OS tools and expert mandates.

1. Bash Nodes (shell: true)

Execute arbitrary shell commands as part of your pipe.

{ "cmd": "grep 'ERROR'", "shell": true }

2. Skill Nodes

Apply an "Expert Lens" to the context by injecting specialized skill mandates.

{ "cmd": "context-pipe-skill", "args": ["security-auditor"] }

3. T-Pipe Nodes (Stream Splitting)

Save a raw copy of the stream to disk before a node distils it โ€” without interrupting the chain. Useful for debugging pipe quality and auditing what was sifted out.

{
  "cmd": "semantic-sift-cli",
  "args": ["logs"],
  "tee": {
    "sink": "file",
    "path": "logs/{tool_name}_{iso_date}.log",
    "mode": "append"
  }
}

path supports {iso_date} (YYYY-MM-DD) and {tool_name} tokens. A tee failure never interrupts the main chain.

4. MCP Nodes (Phase 7.5 โ€” coming soon)

Call any MCP tool as a pipe node. No wrapper scripts โ€” the orchestrator spawns the MCP server, calls the tool, and passes the result downstream via stdout.

{
  "type": "mcp",
  "server": "figma",
  "tool": "get_file",
  "input_key": "file_id"
}

Server definitions live in a servers block in pipes.json or ~/.mcp-pipe.json. See doc/MCP_NODE_SPEC.md for the full spec.


๐Ÿ”— The Ecosystem (Studio of Two)

Context-Pipe is a foundational member of the Studio of Two infrastructure. It is designed to work in high-fidelity harmony with:

  • Semantic-Sift: The intelligent refinery for agentic context. Sift is the flagship distillation engine for Context-Pipe, providing the mathematical and neural sifting nodes used in our standard templates.

๐Ÿงฉ Tool Synergies & Boundaries

Four tools often appear together in a Studio of Two stack. They are complementary, not overlapping โ€” each owns a distinct layer.

Tool Layer Primary Role Relationship
context-pipe Orchestration Routes content through named pipes; manages node execution, timeouts, T-pipe, telemetry, and A2A handoff. The switchboard. Calls all other tools as nodes when wired together.
semantic-sift Distillation Heuristic + neural compression of text. Removes noise (timestamps, boilerplate, repeated tokens) while preserving signal. Fully standalone CLI and MCP server. The flagship refinery node inside context-pipe pipes.
context-mode In-session indexing BM25 full-text search over content indexed during the current agent session. Fast retrieval without a vector database. Fully standalone MCP server. Optionally wired as an mcp node (Phase 7.5) to index or search within a pipe.
Serena Code intelligence LSP-backed symbol search, refactoring, and code navigation. Understands the AST โ€” not just text. Fully standalone MCP server. Optionally wired as an mcp node to feed precise code symbols into a pipe instead of raw file reads.

When to use which

Use context-pipe when you need to orchestrate: chain tools, apply pipes automatically on tool call, route by trigger, save T-pipe snapshots, account for ROI, or bridge agent handoffs.

Use semantic-sift when you need to compress: a large document, a log file, a search result, or any payload where noise-to-signal ratio is high. Runs standalone via CLI or MCP โ€” and as a node inside context-pipe pipes.

Use context-mode when you need to retrieve: you have already ingested content this session and want fast BM25 search over it. Works standalone as an MCP server in any IDE. Pair it with semantic-sift on both sides โ€” upstream to compress content before indexing (smaller index, faster search), and downstream to distil retrieved chunks before they hit the context window.

Use Serena when you need to navigate code: find a symbol, trace references, inspect types, or perform a refactor. Works standalone as an MCP server. Its structured, precise output is far better than a raw file read as input to any downstream tool โ€” including a sifting pipe.

Complementary setup โ€” reducing token usage

Each tool independently reduces token pressure. Together, the savings compound:

  • Serena returns only the symbol you asked for โ€” not the entire file.
  • semantic-sift compresses content before it enters context-mode (smaller index, faster search) and after retrieval (noise-free chunks into the context window).
  • context-mode returns only the relevant indexed chunks โ€” not the entire ingested corpus.
  • context-pipe ensures this sequence fires automatically and is accounted for โ€” no manual wiring per task.

The result: the agent works with a fraction of the raw token volume, every session, without changing how it thinks or what tools it calls.

Synergy example

[user query]
    โ†’ serena/find_symbol           # MCP node: precise code symbol โ€” not a raw file dump
    โ†’ context-mode/search          # MCP node: retrieve related session context
    โ†’ semantic-sift-cli semantic   # binary node: compress both into a dense summary
    โ†’ security-auditor skill       # skill node: expert lens over the result

All four tools in one pipe. Each doing exactly one job.


โš™๏ธ Environment Variables

Variable Default Description
PIPE_CONFIG_PATH pipes.json Absolute path to the project's pipes.json config file.
PIPE_NODE_TIMEOUT_MS 30000 Per-node execution timeout in milliseconds.
PIPE_WINDOW_PRESSURE (unset) Float 0.0โ€“1.0 passed to each node as an env var. semantic-sift-cli reads this and overrides --rate accordingly. Set by context-pipe routing when payload pressure is high (cross-project dependency with semantic-sift).
allow_shell false Enable arbitrary shell command nodes in dynamic pipes (pipe_run_dynamic MCP tool / run_dynamic_pipe() API). Requires the final node to be a semantic-sift terminal command to guarantee context safety.

โš ๏ธ Known Limitations

OpenCode โ€” MCP Tool Output Interception

The "subconscious interceptor" feature (pipe_hook.py) works transparently for Cursor, VS Code, Gemini CLI, and Claude Desktop by injecting hook handlers that fire after every tool call.

OpenCode is the exception. The tool.execute.after hook is declared in the OpenCode plugin Hooks interface but is never triggered by the OpenCode runtime (confirmed via source audit of session/processor.ts, session/llm.ts, tool/registry.ts, agent.ts). The plugin's output mutation code is silently a no-op.

Current workaround: The AGENTS.md SOP mandate (pipe_read_file for all file reads) is the active interception strategy for OpenCode until transparent hook injection is supported upstream.


โš–๏ธ Licensing

context-pipe is licensed under the Apache License 2.0. It is an "Open Source, Closed Contribution" project maintained by the Studio of Two to ensure architectural integrity.


Building High-Fidelity Infrastructure for the Intelligence Age.

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

mcp_context_pipe-0.2.0.tar.gz (76.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_context_pipe-0.2.0-py3-none-any.whl (56.1 kB view details)

Uploaded Python 3

File details

Details for the file mcp_context_pipe-0.2.0.tar.gz.

File metadata

  • Download URL: mcp_context_pipe-0.2.0.tar.gz
  • Upload date:
  • Size: 76.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcp_context_pipe-0.2.0.tar.gz
Algorithm Hash digest
SHA256 30b893a437f1854edd1726971022679a54400ea8ebf5401bc4a10f5fb9c4ab85
MD5 6a83489bc53c07f5063458acb4a2b0ce
BLAKE2b-256 5c264c319d0a7091114cb892c2f4cb2cd82f699235a7234412cae2e810c57510

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_context_pipe-0.2.0.tar.gz:

Publisher: release.yml on luismichio/context-pipe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_context_pipe-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_context_pipe-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ecd58bc13835d5e5af8d83851897c8f3f09d9f0a395275876e6e029539e6d74
MD5 7c8fc8f0d67276639886378551c0dd99
BLAKE2b-256 9317dd5a3887393221245a68f6b83bd032faafcbfb112d93f838687a0c079839

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_context_pipe-0.2.0-py3-none-any.whl:

Publisher: release.yml on luismichio/context-pipe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page