Skip to main content

Local-first MCP server providing fresh Pipecat docs/examples context for Claude Code, Cursor, VS Code, and Zed.

Project description

Pipecat Context Hub

Local-first MCP server providing fresh Pipecat docs and examples context for Claude Code, Cursor, VS Code, and Zed.

Quick links: Client Setup | MCP Tools | Version-Aware Queries | Environment Variables | Report an Issue

What It Does

When your AI coding assistant needs Pipecat context, it calls MCP tools exposed by this server. The server queries a local index (ChromaDB + SQLite FTS5) and returns relevant documentation, code examples, and API source — all with source citations.

IDE/Agent  ←stdio→  pipecat-context-hub serve  ←→  Local index (~/.pipecat-context-hub/)

Install

git clone https://github.com/pipecat-ai/pipecat-context-hub.git
cd pipecat-context-hub
uv sync

Naming: the PyPI package is pipecat-ai-context-hub (official pipecat packages are pipecat-ai*); the command and MCP server name are pipecat-context-hub.

Populate the Local Index

Before the server can answer queries, build the local index:

# First-time setup (downloads docs, clones repos, computes embeddings)
uv run pipecat-context-hub refresh

# Force full re-ingest (ignores cached state)
uv run pipecat-context-hub refresh --force

# Recover from an unhealthy local index
uv run pipecat-context-hub refresh --force --reset-index

Tip: When gh CLI is authenticated, refresh also fetches GitHub release notes for deprecation data. Without it, check_deprecation coverage will be limited.

Start the Server

Run refresh at least once first (see above). serve exits with code 2 if the index is empty or cannot be opened — it will not start against an unusable index, since MCP clients would otherwise hang on zero-hit queries.

uv run pipecat-context-hub serve

Client Setup

Point your IDE's MCP config at the cloned repo using uv run --directory. Per-client setup guides:

Client Setup Guide
Claude Code docs/setup/claude-code.md
Cursor docs/setup/cursor.md
VS Code docs/setup/vscode.md
Zed docs/setup/zed.md

Example (Claude Code .mcp.json):

{
  "mcpServers": {
    "pipecat-context-hub": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/pipecat-context-hub", "pipecat-context-hub", "serve"],
      "env": {}
    }
  }
}

Config templates for all clients are in config/clients/.

Add CLAUDE.md Instructions (Recommended)

Add this to your project's CLAUDE.md (or ~/.claude/CLAUDE.md globally) so your coding agent prefers the MCP tools for Pipecat questions:

## MCP Tools

When pipecat-context-hub MCP is available, always prefer its tools
(`search_docs`, `search_api`, `search_examples`, `get_example`, `get_doc`,
`get_code_snippet`, `check_deprecation`) for Pipecat framework questions.
Do not read `.venv` or source files directly.

- "How do I ...?" → `search_docs`
- "Show me an example of ..." → `search_examples`, then `get_example`
- Class constructors, method signatures, frame types → `search_api`
- Specific code span or symbol → `get_code_snippet`
- Retrieve a specific doc page → `get_doc`
- Check if an import is deprecated → `check_deprecation`

**Multi-concept queries:** Use ` + ` or ` & ` as delimiters
(e.g., `search_docs("TTS + STT")`). Each concept is searched independently
and results are interleaved.

When suggesting commands for Pipecat projects, always use `uv` as the
package manager:
- Install dependencies: `uv sync` (not `pip install`)
- Run scripts: `uv run python bot.py` (not `python bot.py`)
- Add packages: `uv add <package>` (not `pip install <package>`)

MCP Tools

Tool Use when...
search_docs "How do I ...?" — conceptual questions, guides, configuration
get_doc Retrieve a specific doc page by ID or path (e.g. /guides/learn/transports)
search_examples "Show me an example of ..." — find working code by task or component
get_example Retrieve full source files for a specific example
search_api Class definitions, method signatures, frame types, inheritance
get_code_snippet Get targeted code by symbol name, intent, or file path + line range
check_deprecation Verify whether a pipecat import path is deprecated
get_hub_status Index health, reranker runtime state, record counts, framework version, commit SHAs

All search results include an EvidenceReport with confidence scores, source-grounded facts, unresolved questions, and suggested follow-up queries.

Filters

search_examples supports filters to narrow results:

  • domain"backend" (Python), "frontend" (JS/TS), "config", "infra"
  • language"python", "typescript"
  • repo — filter by GitHub repo slug
  • tags — filter by capability tags

search_api supports filters for framework internals:

  • module — module path prefix (e.g. "pipecat.services")
  • class_name — class name prefix (e.g. "DailyTransport")
  • chunk_type"method", "function", "class_overview", "module_overview", "type_definition"
  • yields — methods that yield a specific frame type
  • calls — methods that call a specific method

Multi-Concept Queries

Use + or & to search for multiple concepts at once:

search_docs("TTS + STT")
search_examples("idle timeout + function calling + Gemini")
search_api("BaseTransport + WebSocketTransport")

Each concept is searched independently and results are interleaved for balanced coverage.

Version-Aware Queries

If your project targets a specific pipecat version, pass pipecat_version to get results scored for compatibility:

search_examples("TTS pipeline", pipecat_version="0.0.96", domain="backend")
search_api("DailyTransport", pipecat_version="0.0.96")

Results are annotated with version_compatibility: "compatible", "newer_required", "older_targeted", or "unknown". Use version_filter="compatible_only" to exclude results requiring a newer version.

You can also pin the framework index to a specific version:

uv run pipecat-context-hub refresh --framework-version v0.0.96
# or via env var:
PIPECAT_HUB_FRAMEWORK_VERSION=v0.0.96 uv run pipecat-context-hub refresh

Environment Variables

Variable Default Description
PIPECAT_HUB_EXTRA_REPOS (empty) Comma-separated repo slugs to ingest alongside defaults
PIPECAT_HUB_FRAMEWORK_VERSION (empty) Pin framework repo to a specific git tag (e.g. v0.0.96)
PIPECAT_HUB_TAINTED_REPOS (empty) Comma-separated repo slugs to skip entirely
PIPECAT_HUB_TAINTED_REFS (empty) Comma-separated org/repo@ref entries to skip
PIPECAT_HUB_STALE_AFTER_DAYS 7 Index age (days) after which tool responses carry an index_staleness field with a refresh hint. 0 disables
PIPECAT_HUB_RERANKER_ENABLED 1 Set to 0 to disable cross-encoder reranking
PIPECAT_HUB_RERANKER_MODEL cross-encoder/ms-marco-MiniLM-L-6-v2 Swap reranker model. Allowed: cross-encoder/ms-marco-MiniLM-L-6-v2 (~80 MB), cross-encoder/ms-marco-MiniLM-L-12-v2 (~130 MB), cross-encoder/ms-marco-TinyBERT-L-2-v2 (~17 MB)
PIPECAT_HUB_IDLE_TIMEOUT_SECS 1800 Idle backstop: exit serve if no MCP request arrives for this many seconds. Auto-disabled when serve has reliable client-death detection (direct-parent launch, or uv run with a resolvable grandparent) — it would otherwise reap a warm hub mid-session. Stays armed when detection is unavailable (Windows, parent-watch disabled, unresolved grandparent). Set an explicit value (incl. 0) to override the auto-decision.
PIPECAT_HUB_PARENT_WATCH_INTERVAL 2.0 Hidden tuning knob (primarily for tests): poll interval (seconds) for the parent-death watchdog. Floored at 0.1s when non-zero. Set to 0 to disable the watchdog.
PIPECAT_HUB_WARMUP 1 Pre-warm embedding + cross-encoder at serve boot so the first MCP query doesn't pay the cold-start cost (matters most on Windows CPU, where cold loads can take 30-130s). Set to 0 to skip (faster boot, slower first query).

See .env.example for curated repo bundles you can copy into your .env.

MCP Client Configuration

Two ways to point an MCP client (Claude Code, Cursor, Zed, etc.) at this hub. Both exit cleanly within ~2s when the client goes away; they differ only in convenience.

Note: an MCP server is a subprocess the client spawns over stdio — it cannot restart itself. If you want the hub back after it exits, that is the MCP client's job (most clients respawn on the next request). The hub's contribution is to (a) stay alive for the whole session and (b) exit cleanly so the client can respawn without errors.

Recommended — direct invocation (instant orphan cleanup):

{
  "mcpServers": {
    "pipecat-context-hub": {
      "command": "/absolute/path/to/pipecat-context-hub/.venv/bin/pipecat-context-hub",
      "args": ["serve"]
    }
  }
}

Python is the immediate child of the MCP client. When the client dies or restarts, the parent-death watchdog fires within ~2s and the hub exits cleanly, releasing the Chroma + SQLite handles.

Alternative — uv run (simpler, slower cleanup):

{
  "mcpServers": {
    "pipecat-context-hub": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/pipecat-context-hub", "pipecat-context-hub", "serve"]
    }
  }
}

Convenient (no need to know the venv path). uv stays alive as an intermediate parent, so getppid() never flips when the client dies — but serve detects the uv launcher and watches the grandparent (the real client) directly, so it still exits within ~2s of the client going away. The idle timeout is auto-disabled in this case (it is no longer needed for cleanup), so the hub stays warm through quiet stretches of an active session. Set PIPECAT_HUB_IDLE_TIMEOUT_SECS if you still want an idle backstop.

Data Sources

The default index includes:

  • Pipecat documentationdocs.pipecat.ai (200+ pages)
  • Pipecat frameworkpipecat-ai/pipecat (Python AST-indexed: classes, methods, imports, call graphs)
  • Pipecat examplespipecat-ai/pipecat-examples (project-level code examples)
  • Pipecat Flowspipecat-ai/pipecat-flows (conversation flow framework, Python AST-indexed)
  • Daily Python SDKdaily-co/daily-python (.pyi stubs + RST type definitions)
  • TypeScript SDKspipecat-client-web, pipecat-client-web-transports, pipecat-client-react-native-transports, voice-ui-kit, pipecat-prebuilt (tree-sitter-indexed)

CLI usage (pipecat init, pipecat cloud deploy) is covered by the indexed docs.pipecat.ai pages (/api-reference/cli/*); the pipecat-ai/pipecat-cli repo itself is opt-in (it adds only CLI-internal source). Add more repos via PIPECAT_HUB_EXTRA_REPOS (full org/repo slugs, e.g. pipecat-ai/pipecat-cli, pipecat-ai/pipecat-mcp-server, pipecat-ai/pipecat-flows-editor, pipecat-ai/pipecat-krisp). Only Python, TypeScript, and RST are parsed — Swift/Kotlin/C++ client SDKs (iOS, Android, cxx, esp32) clone but yield zero source/API chunks (only a few README/config fallback chunks), so they don't surface in search_api / get_code_snippet.

Security

Troubleshooting

  • Empty results — run uv run pipecat-context-hub refresh to populate the index
  • Stale results — run uv run pipecat-context-hub refresh --force to re-ingest from latest upstream
  • Index corruption — run uv run pipecat-context-hub refresh --force --reset-index to wipe and rebuild
  • serve exits immediately with code 2 — the index is empty or unopenable. Run uv run pipecat-context-hub refresh (or refresh --force --reset-index if the error message mentions a failed open) and try again. This is deliberate: prior versions started anyway and MCP clients hung on every query.
  • Stale serve processesserve polls its parent PID every 2s and exits cleanly when the MCP client disappears (look for Shutting down: parent_died original_ppid=… current_ppid=1 in the trace). Under uv run (where the immediate parent is uv, not the client), it instead watches the grandparent and logs Shutting down: client_died client_pid=…. If you still see orphans (older versions, an unrecognized lingering launcher, or Windows where the watchdog is disabled), pkill -f "pipecat-context-hub serve" is safe to run between sessions.
  • Idle watchdog disabled: watching … for client exit on boot — this INFO line is expected and benign. It means serve has reliable client-death detection (direct parent, or uv/uvx/poetry/… with a resolved grandparent), so the idle timeout is switched off to keep the hub warm through quiet stretches of an active session. No action needed; set PIPECAT_HUB_IDLE_TIMEOUT_SECS if you want an idle backstop anyway.
  • Diagnosing degraded starts — on serve boot, look for pipecat-context-hub vX.Y.Z starting: … (INFO) to confirm the running version and index content-type counts. If reranking is off, a Reranker disabled at startup: reason=… (WARNING) line names the cause (config_disabled | not_cached) and, for not_cached, the exact HF cache directory probed.

Windows

  • Refresh appears to hang or returns zero code results — a prior refresh may have left a clone half-initialised (common after an interrupted run or antivirus quarantine). pipecat-context-hub now detects this on the next refresh and re-clones automatically; look for Recovered N corrupt clone(s): … in the summary. As a manual remedy you can delete %LOCALAPPDATA%\pipecat-context-hub\repos\.
  • UnicodeEncodeError in the refresh summary — the summary table uses box-drawing characters that some Windows code pages (cp1252, cp1254, etc.) cannot encode. The server falls back to ASCII automatically. To opt into the full Unicode output, set PYTHONIOENCODING=utf-8 before invoking refresh, or use Windows Terminal (which defaults to UTF-8).

If the server returns poor or missing results, file a retrieval quality issue — the issue template includes a diagnostic prompt your coding agent can run to generate a structured report.

Contributing

See CONTRIBUTING.md for architecture, development workflow, benchmarking, and project structure.

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

pipecat_ai_context_hub-0.2.0.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

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

pipecat_ai_context_hub-0.2.0-py3-none-any.whl (168.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pipecat_ai_context_hub-0.2.0.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","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}

File hashes

Hashes for pipecat_ai_context_hub-0.2.0.tar.gz
Algorithm Hash digest
SHA256 52611b181132cade1819f1d540774ab701694c162f6ba801fca6e4fefe4cb5b6
MD5 02041ff3eb80cbe186a4a8c953969123
BLAKE2b-256 f51c555fdd67ab94e9dc0871a49c5f7ef53212815e1d9fa90ae58b09584f9216

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pipecat_ai_context_hub-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 168.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","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}

File hashes

Hashes for pipecat_ai_context_hub-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 15755516e3ed40f72af616b48da6ef88dd6fd304c86f6798b72673792169b4e8
MD5 ac5ce595876af7a48005219ed8a096e8
BLAKE2b-256 0ae0857387745538665711cbf4c01694e781665c1e2e3948475c989f9f903f59

See more details on using hashes here.

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