LabscoMCP early access ↗
deepset-aiMCP SERVER · OFFICIAL PROJECT

Hayhooks

Deploy a Haystack pipeline or agent and it becomes a REST endpoint, an OpenAI-compatible chat backend, and an MCP tool — from one wrapper class.

by deepset-ai ↗PaaS Deployment & App Hosting✓ Official

LABSCO SUMMARY

One wrapper class, four ways to call it.

The economy here is that the integration surfaces are generated rather than written. A single PipelineWrapper with a run method yields a validated REST endpoint, an OpenAI-compatible streaming chat backend, and an MCP tool — so the same Haystack agent serves a web app, Open WebUI, and Cursor without three adapters. The core tools go one step further and let the client deploy and undeploy pipelines mid-conversation.

What it is

A server that turns Haystack pipelines and agents into deployed services. You write a wrapper class with a setup method and a run method; Hayhooks generates the HTTP API, the OpenAI-compatible chat completions endpoint, and — running as an MCP server — an MCP tool per deployed pipeline.

What you get

  • Each deployed pipeline or agent exposed as an MCP tool, so anything you built in Haystack becomes callable from Cursor or Claude Desktop
  • Core tools for controlling Hayhooks itself from the client — read the status of everything deployed, deploy something new, or take it down — get_all_pipeline_statuses, deploy_pipeline, undeploy_pipeline
  • A POST endpoint per pipeline with its input arguments auto-validated by a generated Pydantic model
  • An OpenAI-compatible /chat/completions endpoint with streaming, which is what makes Open WebUI integration work
  • A2A support (pip install "hayhooks[a2a]") with auto-generated agent cards, so other agents can discover a pipeline and delegate to it
  • An embedded Chainlit chat UI (pip install "hayhooks[chainlit]", then hayhooks run --with-chainlit) with streaming, pipeline selection and custom widgets, needing no configuration
  • OpenTelemetry tracing (pip install "hayhooks[tracing]") covering deploy, run and undeploy across both REST and MCP, with request-level spans on the MCP transport endpoints and domain spans for list_tools and call_tool, plus a /dashboard UI
  • Built-in file upload handling for pipelines that ingest documents
  • Both YAML-based and wrapper-based deployment, plus a CLI for pipeline management

Requirements

Python 3.10+, and pip install hayhooks[mcp] — the MCP server comes with that extra. hayhooks run starts the REST server on port 1416; the MCP server is a separate command, hayhooks mcp run, listening on HAYHOOKS_MCP_HOST and HAYHOOKS_MCP_PORT — localhost:1417 by default — and serving Streamable HTTP at /mcp with SSE also supported. Clients that only speak stdio can bridge through supergateway. Deploy a pipeline with hayhooks pipeline deploy-files, passing -n and a name followed by the wrapper directory. The A2A, Chainlit and tracing features each come from their own extra. Whatever your pipeline itself needs — an OpenAI key for a chat generator, for instance — is on you.

Setup effort

Follow the published steps — pip install hayhooks[mcp]