mcpField
M
mcp-server-celery

mcp-server-celery

Local
github.com/taltal-beepCloud & Infra0Updated 1w ago

About mcp-server-celery

mcp-server-celery is a read-only MCP server for AI agents investigating running Celery deployments. It reports worker status and queue depths, and masks broker credentials in responses.

Key features

  1. 01Lists responsive workers and their queues
  2. 02Reports queue depth and consumers
  3. 03Supports RabbitMQ and Redis brokers
  4. 04Masks credentials in outputs

Use cases

  1. 01Finding queues with a backlog and no consumers
  2. 02Checking which queues workers listen to
  3. 03Investigating a worker missing from inspection

MCP support

Provides MCP tools for inspecting Celery workers and queue depths. The tools are read-only by default.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"taltal-beep-mcp-server-celery": {
"command": "uvx",
"args": [
"mcp-server-celery"
],
"env": {
"CELERY_BROKER_URL": "<CELERY_BROKER_URL>",
"CELERY_RESULT_BACKEND": "<CELERY_RESULT_BACKEND>",
"CELERY_APP": "<CELERY_APP>",
"CELERY_INSPECT_TIMEOUT": "<CELERY_INSPECT_TIMEOUT>"
}
}
}
}
Run commanduvx mcp-server-celery
Environment variables to set
CELERY_BROKER_URLSecretBroker URL, e.g. redis://localhost:6379/0 or amqp://user:pass@host:5672//
CELERY_RESULT_BACKENDSecretResult backend URL, needed for task_status
CELERY_APPImport path of your Celery app (e.g. proj.celery:app) to pick up its queues and routes
CELERY_INSPECT_TIMEOUTSeconds to wait for worker replies (default 1.0)

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypimcp-server-celery0.1.0

Tools

2

Saved tool list · updated 1w ago

ParameterTypeRequiredDescription
timeoutanyNoSeconds to wait for worker replies. Defaults to CELERY_INSPECT_TIMEOUT.

Details

From the project README

mcp-server-celery

PyPI CI

An MCP server that lets AI agents debug a running Celery deployment. It checks which workers are alive, what each one consumes, and where messages are piling up — the checks you'd otherwise run by hand with celery inspect and rabbitmqctl every time something gets stuck.

It is read-only by default. Broker passwords are masked in every response, including the broker info that Celery's own inspect stats sends back in plain text.

Works with RabbitMQ (amqp://) and Redis (redis://, rediss://).

Tools

ToolWhat it answers
list_workersWhich workers respond, their pool and concurrency, uptime, prefetch count, tasks processed, and the queues each one listens to.
queue_depthsHow many messages are waiting in each queue and which workers consume it. With no arguments it checks your configured queues plus every queue a live worker consumes.

Coming next: active_tasks, reserved_tasks, scheduled_tasks, task_status, and diagnose_stuck, which cross-references the above to flag queues no worker listens to, tasks routed to queues with no consumer, and workers that stopped responding. See the roadmap.

Install

Requires Python 3.10+ and uv.

uvx mcp-server-celery

Configuration

All configuration is through environment variables.

VariableDefaultPurpose
CELERY_BROKER_URLamqp://guest:guest@localhost:5672//Broker to inspect.
CELERY_RESULT_BACKEND—Result backend (used by task_status, coming in the next release).
CELERY_APP—Import path of your app, e.g. proj.celery:app. Lets the server see your task_queues and routes. CELERY_BROKER_URL still overrides the app's broker if both are set.
CELERY_INSPECT_TIMEOUT1.0Seconds to wait for worker replies. Raise it for large or slow clusters.

CELERY_APP has to be importable, so run the server from your project's directory and environment:

uv run --with mcp-server-celery mcp-server-celery

Connect it

Claude Code
claude mcp add celery -e CELERY_BROKER_URL=redis://localhost:6379/0 -- uvx mcp-server-celery
Cursor

In .cursor/mcp.json:

{
  "mcpServers": {
    "celery": {
      "command": "uvx",
      "args": ["mcp-server-celery"],
      "env": { "CELERY_BROKER_URL": "redis://localhost:6379/0" }
    }
  }
}
Claude Desktop

In claude_desktop_config.json, use the same command, args and env block as Cursor, under mcpServers.

Example

Ask the agent "why are my email tasks not running?" and it can call queue_depths:

{
  "broker": "amqp://app:****@rabbit:5672//",
  "queues": [
    { "queue": "celery", "exists": true, "messages": 0, "consumers": 2, "workers_consuming": ["w1@web", "w2@web"] },
    { "queue": "emails", "exists": true, "messages": 1843, "consumers": 0, "workers_consuming": [] }
  ]
}

emails has a backlog and no worker consumes it: the workers were started without -Q emails.

Notes on the data

  • Redis has no notion of consumers, so consumers is null; use workers_consuming, which comes from the workers themselves. Redis also deletes a queue's key once it is empty, so a drained queue shows "messages": 0, "exists": null.
  • RabbitMQ checks use a passive declare, so the server never creates a queue. A queue that doesn't exist shows "exists": false.
  • Workers that are too busy to answer within CELERY_INSPECT_TIMEOUT don't appear in list_workers. If a worker you expect is missing, try a larger timeout argument before assuming it's dead.

Safety

  • Every tool is annotated readOnlyHint: true. Write actions (revoke, retry, purge) will only be available behind an explicit opt-in flag.
  • URL credentials and password/secret/token fields are masked in all output and error messages.

Roadmap

v0.1 — list_workers, queue_depths ✅

v1 — active_tasks, reserved_tasks, scheduled_tasks, task_status(task_id), diagnose_stuck

v2 — summarize_failures: groups recent failures by task name and exception type. Celery keeps no failure history by default, so this needs an event listener.

Development

uv sync
uv run pytest tests/unit
uv run ruff check . && uv run ruff format --check .

Integration tests start a real worker and need a broker:

CELERY_BROKER_URL=redis://localhost:6379/0 uv run pytest tests/integration -m integration

CI runs them against Redis and RabbitMQ on every push.

Releasing

Bump the version in pyproject.toml and in both version fields of server.json, commit, then push a vX.Y.Z tag. The Release workflow checks that all three versions match the tag, publishes to PyPI, and then publishes server.json to the MCP registry.

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.