Skip to main content

Hermes Kanban MCP (hermes-kanban-mcp-vn)

Restricted stdio MCP bridge that submits durable work to an existing Hermes Kanban board. It does not create another task database and does not expose arbitrary shell, workspace, profile, model, parent dependency, or runtime selection.

Architecture and security

MCP Hub --stdio/uvx--> this MCP --HTTPS bearer--> restricted backend --fixed argv--> Hermes Kanban

Hermes v0.21.0 has authenticated dashboard plugin routes, but its dashboard credential grants a broader surface than this integration needs. This package therefore includes a companion backend that exposes only four operations and invokes the installed Hermes CLI with an argv list and shell=False. It always creates a scratch workspace, records created-by=external-mcp, and force-loads kanban-team-workflow. Both MCP client and backend enforce board and assignee allowlists.

The backend defaults to loopback. Put TLS and source-IP/network policy at the reverse proxy or use a private VPN path; never expose the Hermes dashboard or this backend directly to the public Internet. Plain HTTP is rejected by the MCP client except for loopback tests. Keep bearer tokens only in the service/MCP Hub secret store, never in args, source, logs, or committed config.

ready is conservative: a profile must both exist on disk according to hermes kanban assignees and be explicitly listed in HERMES_KANBAN_READY_ASSIGNEES after Linus verifies its gateway, provider, and runtime. A created task remains asynchronous. Creating one does not authorize production deployment, deletion, external communication, or spending; normal task approval gates still apply.

MCP tools

  • list_agents: list only allowlisted profiles and their conservative readiness.
  • create_task: create a durable asynchronous task and return its real t_........ ID. Callers must reuse a stable idempotency_key for retries; Hermes stores the key durably.
  • get_task: return task status, comments, events, runs, results, and evidence metadata.
  • add_task_comment: append a durable comment as external-mcp.

All public inputs have descriptions, examples, length/pattern constraints, and read/write/ idempotency annotations in the generated MCP schema.

MCP Hub install (after PM code gate and PyPI publish)

Use a slug-safe server key and pin the reviewed version:

{
  "mcpServers": {
    "hermes-kanban": {
      "command": "uvx",
      "args": [
        "--from",
        "hermes-kanban-mcp-vn==0.1.1",
        "hermes-kanban-mcp"
      ],
      "env": {
        "HERMES_KANBAN_URL": "https://hermes-kanban.internal.example",
        "HERMES_KANBAN_TOKEN": "<secret-from-hub-secret-store>",
        "HERMES_KANBAN_ALLOWED_ASSIGNEES": "developer,project-manager",
        "HERMES_KANBAN_ALLOWED_BOARDS": "default",
        "HERMES_KANBAN_TIMEOUT": "20"
      }
    }
  }
}

Restricted backend contract

Run on the Hermes host with the same HERMES_HOME/board configuration as the installed CLI:

HERMES_KANBAN_BACKEND_TOKEN='<secret-from-service-store>' \
HERMES_KANBAN_CLI=/opt/hermes/bin/hermes \
HERMES_KANBAN_ALLOWED_ASSIGNEES=developer,project-manager \
HERMES_KANBAN_READY_ASSIGNEES=developer,project-manager \
HERMES_KANBAN_ALLOWED_BOARDS=default \
HERMES_KANBAN_COMMAND_TIMEOUT=20 \
uvx --from hermes-kanban-mcp-vn==0.1.1 hermes-kanban-backend

Optional listener variables are HERMES_KANBAN_BACKEND_HOST (default 127.0.0.1) and HERMES_KANBAN_BACKEND_PORT (default 8766). The reverse proxy must terminate TLS, require the private route, restrict MCP Hub source addresses, and avoid logging Authorization.

Authenticated endpoints:

  • GET /v1/agents?board=<slug>
  • POST /v1/tasks
  • GET /v1/tasks/{task_id}?board=<slug>
  • POST /v1/tasks/{task_id}/comments?board=<slug>

GET /healthz is unauthenticated and returns only {"ok": true}. The backend has no arbitrary command endpoint and disables OpenAPI/Redoc routes.

Development and verification

uv sync --extra dev
uv run pytest -q
uv run ruff check src tests scripts
uv run ruff format --check src tests scripts
uv run mypy src
uv build

Protocol smoke through source or a clean wheel:

uv run python scripts/mcp_smoke.py
HERMES_KANBAN_SMOKE_WHEEL=dist/hermes_kanban_mcp_vn-0.1.1-py3-none-any.whl \
  uv run python scripts/mcp_smoke.py

That smoke starts a loopback fake backend, launches the stdio server, performs MCP initialize, tools/list, and calls list_agents. Unit/backend tests mock network and Hermes CLI process results. They cover valid create/read/comment, duplicate submission, denied/non-allowlisted input, timeout, backend unavailable, secret-redacted errors, generated schemas, and tool annotations.

A harmless real-board E2E was also run against an isolated board: it initialized the MCP via uvx, listed/called tools, created task t_9beed776, retried with the same idempotency key and received the same task ID, read the task, and appended a comment. The fixture contains no deployment or destructive action. The fixed read-only evaluation is evaluations/hermes_kanban_read_only.xml.

Publish, rollout, and rollback (Linus; only after PM approval)

Publish destination: PyPI package hermes-kanban-mcp-vn, matching the repository's existing uvx package convention.

cd uvx/hermes-kanban
UV_PUBLISH_TOKEN='<from-approved-secret-store>' ./publish.sh

The script runs tests, Ruff, format check, mypy, build, and then uv publish. It contains no token. After publishing, verify the exact version on PyPI and clean-install it with the pinned uvx --from command before changing MCP Hub.

Rollout:

  1. Start the backend on loopback/private networking with an independently generated token.
  2. Verify /healthz, then verify missing/invalid bearer access is denied.
  3. Configure TLS/private routing and the pinned MCP Hub entry using its secret store.
  4. Reload MCP Hub, refresh client actions, call list_agents, then use an isolated harmless board to create/read/comment and retry the same idempotency key.
  5. Confirm the real Hermes task ID and evidence in the existing board before enabling more agents.

Rollback: restore the previous pinned package version (or remove the MCP Hub entry), reload Hub, and stop/disable the companion backend. Existing tasks remain durable in Hermes and are not deleted.

Metadata

Release files for hermes-kanban-mcp-vn 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hermes-kanban-mcp-vn 0.1.1
File Size Uploaded Provenance
hermes_kanban_mcp_vn-0.1.1.tar.gz 16.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for hermes-kanban-mcp-vn 0.1.1
File Interpreter ABI Platform
hermes_kanban_mcp_vn-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 27.7 kB

Release files / hermes_kanban_mcp_vn-0.1.1.tar.gz

Download URL hermes_kanban_mcp_vn-0.1.1.tar.gz
Size 16.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9fde00538849984af4ebda3c0ff54bec75f2133985b55c5994dd90a514d16d30
BLAKE2b-256 checksum
How to use checksums
2d25134d420665b58209451ff3dd753cd20bfc1f6504b46a4d2d9f74b7396645
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / hermes_kanban_mcp_vn-0.1.1-py3-none-any.whl

Download URL hermes_kanban_mcp_vn-0.1.1-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
10b57658841ba0080962ea1504a0508ba4a896c3fc011a7495fd5004356558e3
BLAKE2b-256 checksum
How to use checksums
292162576110629fce4953f5f7b15553e3d7cf1e1482f306e89c809f16591459
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for hermes-kanban-mcp-vn 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page