Skip to main content

MCP server exposing the Orkestrr project-management hierarchy (Bundles, Goals, Tasks) to AI agents

Project description

orkestrr-mcp

An MCP server that lets an AI agent (e.g. Claude Code) create, reuse, and manage the Orkestrr project-management hierarchy — Bundles, Goals, and Tasks — through the existing Orkestrr REST API.

It is a standalone process that talks to Orkestrr over HTTP, so once registered at user scope it works from any project/repo you open, against local or production Orkestrr.

What it exposes

Hierarchy tools (read + write):

Area Tools
Projects list_projects, get_project, list_project_members
Bundles list_bundles, create_bundle, update_bundle (incl. status & archive)
Goals list_goals, create_goal, update_goal (incl. status)
Tasks list_tasks, create_task, update_task (incl. status & assignment)

Task details:

Area Tools
Status set_task_status
Estimation list_estimation_values, set_task_estimation
Labels list_labels, create_label, add_task_labels, remove_task_labels

Status changes propagate up the hierarchy automatically (Task → Goal → Bundle → Project), handled by the Orkestrr backend. add_task_labels reads the task's current labels and sends the union (the API replaces the label set on update), so existing labels are preserved.

Backend quirks worked around (candidates for a future backend fix)

  • POST /labels/ does not return the new label's idcreate_label resolves it by re-querying labels by name.
  • A task's estimation_label is null in list/update payloads (only the nested estimation object on the detail payload carries the label) — set_task_estimation re-fetches the detail so it can confirm the value.

Authentication

Uses Orkestrr's existing DRF token auth (Authorization: Token <key>). No backend changes needed.

Get a token by logging in:

curl -X POST http://localhost:9000/api/auth/login/ \
  -H "Content-Type: application/json" \
  -d '{"email":"<email>","password":"<password>"}'
# -> copy the "token" value from the response

For production, prefer a dedicated integration user (e.g. agent@orkestrr.app) added to the relevant projects with the least role needed — better audit trail and scoped permissions than a personal token. The token acts with that user's organization/project permissions.

Configuration

Two environment variables select the target environment:

Variable Example Notes
ORKESTRR_BASE_URL http://localhost:9000 /api is appended automatically if absent.
ORKESTRR_TOKEN 9b1f… DRF token (see above).

Install

From PyPI (recommended — no repo checkout needed):

uv tool install orkestrr-mcp        # or: pipx install orkestrr-mcp
# installs the `orkestrr-mcp` command on your PATH; upgrade with `uv tool upgrade orkestrr-mcp`

From source (for development on the server itself):

git clone git@github.com:cafadev/faztor.git
uv tool install --editable ./faztor/orkestrr-mcp

Register with Claude Code (user scope = available in every project)

# Local Orkestrr
claude mcp add --scope user orkestrr-local \
  --env ORKESTRR_BASE_URL=http://localhost:9000 \
  --env ORKESTRR_TOKEN=<local-token> \
  -- orkestrr-mcp

# Production Orkestrr
claude mcp add --scope user orkestrr \
  --env ORKESTRR_BASE_URL=https://<prod-domain> \
  --env ORKESTRR_TOKEN=<prod-token> \
  -- orkestrr-mcp

Restart Claude Code and run /mcp to confirm the tools are listed. Tokens live only in your user config (~/.claude.json) — never commit them.

Develop

uv sync          # install deps + this package (editable)
uv run pytest    # run the test suite

Publishing to PyPI (maintainers)

Publishing is automated by GitHub Actions (.github/workflows/orkestrr-mcp-publish.yml) using PyPI Trusted Publishing (OIDC) — no API token is stored anywhere.

One-time setup on PyPI (do this before the first release): on https://pypi.org/manage/account/publishing/ add a pending trusted publisher:

Field Value
PyPI Project Name orkestrr-mcp
Owner cafadev
Repository name faztor
Workflow name orkestrr-mcp-publish.yml
Environment (leave blank)

Each release:

  1. Bump version in pyproject.toml (PyPI never lets you re-upload the same version) and merge it.
  2. Create a GitHub Release whose tag starts with orkestrr-mcp-v (e.g. orkestrr-mcp-v0.1.0). The tag prefix is what triggers the workflow (and keeps it monorepo-safe).

The workflow builds the sdist + wheel and publishes them. Teammates then uv tool install orkestrr-mcp.

Manual fallback (if Actions is unavailable) — needs an API token from Account settings → API tokens:

rm -rf dist && uv build
uvx twine check dist/*
UV_PUBLISH_TOKEN=pypi-XXXX uv publish

Out of scope (for now)

Acceptance criteria, action items, comments, blockers, and estimation-scale configuration (creating/editing the scale itself — only assigning existing values is supported). A dedicated API-key / OAuth2 machine-to-machine auth layer is also deferred — token auth covers current needs.

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

orkestrr_mcp-0.1.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.

orkestrr_mcp-0.1.0-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

Details for the file orkestrr_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: orkestrr_mcp-0.1.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 orkestrr_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c535ceb3e5ffa535d746ad8bec768aeb59815937eb5e4f4875f97021c7920c87
MD5 4f56cfc1bace59a8a45b25fc17616a0a
BLAKE2b-256 728bd0b0c7a8184b3fa5cef4638b9303f6fa0942ea6334dfa830e80b8c3c8952

See more details on using hashes here.

Provenance

The following attestation bundles were made for orkestrr_mcp-0.1.0.tar.gz:

Publisher: orkestrr-mcp-publish.yml on cafadev/orkestrr

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

File details

Details for the file orkestrr_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: orkestrr_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orkestrr_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e0667308102fc2d6e7800e8589006c75addf80105ae5a54c581a9d0ea43cc3a7
MD5 697af95cb7c6ab79a5a664d718cf0372
BLAKE2b-256 489f3a75847ab09c99d8122a67c4e2afcbbada7c42d7ba40c17ce2004eeda57e

See more details on using hashes here.

Provenance

The following attestation bundles were made for orkestrr_mcp-0.1.0-py3-none-any.whl:

Publisher: orkestrr-mcp-publish.yml on cafadev/orkestrr

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