CI dashboard for Claude Code — MCP server, web GUI, TUI for managing Forgejo workflows
Find a file
az bed21fb827 Update Forgejo URL to public silo.retromonkey.com.au
Update FORGEJO_URL default and MCP setup examples to use public
Forgejo URL, with LAN as fallback note.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-05 17:35:48 +10:00
.gitignore Claude CI Dashboard — MCP server, web GUI, TUI 2026-06-05 15:52:55 +10:00
dashboard.py Claude CI Dashboard — MCP server, web GUI, TUI 2026-06-05 15:52:55 +10:00
forgejo_api.py Claude CI Dashboard — MCP server, web GUI, TUI 2026-06-05 15:52:55 +10:00
mcp_server.py Claude CI Dashboard — MCP server, web GUI, TUI 2026-06-05 15:52:55 +10:00
README.md Update Forgejo URL to public silo.retromonkey.com.au 2026-06-05 17:35:48 +10:00
state.py Claude CI Dashboard — MCP server, web GUI, TUI 2026-06-05 15:52:55 +10:00
web.py Claude CI Dashboard — MCP server, web GUI, TUI 2026-06-05 15:52:55 +10:00

Claude CI Dashboard

CI dashboard for managing Claude Code workflows on Forgejo. Three interfaces: MCP server, web GUI, and TUI.

Components

File Description
mcp_server.py FastMCP server — tools for Claude Code to manage issues, runs, PRs
web.py Flask web GUI — kanban board with issue management
dashboard.py Textual TUI — terminal dashboard
forgejo_api.py Forgejo API client (urllib, no deps)
state.py State machine: new -> clarifying -> planning -> implementing -> reviewing -> merged

Setup

pip install flask fastmcp textual rich

Environment Variables

Variable Default Description
FORGEJO_URL https://silo.retromonkey.com.au Forgejo instance URL (LAN fallback: http://192.168.0.33:3200)
FORGEJO_TOKEN Forgejo API token
FORGEJO_REPO aaron/claude-ci-demo Target repo (owner/repo)

MCP Server Setup

Add to Claude Code (user scope)

claude mcp add claude-ci -s user -- python3 /path/to/claude_ci_mcp.py \
  -e FORGEJO_URL=https://silo.retromonkey.com.au \
  -e FORGEJO_TOKEN=<your-token> \
  -e FORGEJO_REPO=aaron/claude-ci-demo

Available Scopes

Scope Flag Persist across projects? Use case
local -s local (default) No One-off testing
user -s user Yes Personal setup, all projects
project -s project Per project (.mcp.json) Team-shared config

Managing MCP Servers

# List all servers (with health check)
claude mcp list

# Get details for one server
claude mcp get claude-ci

# Remove a server
claude mcp remove -s user claude-ci

# Reset all project-scoped approvals
claude mcp reset-project-choices

# Add SSE server (e.g. searchmcp)
claude mcp add searchmcp -s user --transport sse --url http://192.168.0.33:8013/sse

Blocking Unwanted Servers

Add to ~/.claude/settings.json:

{
  "deniedMcpServers": ["unwanted-server-name"]
}

Note: Some servers may be injected by the API provider (e.g. Z.ai) and cannot be blocked this way.

MCP Tools

The server exposes the following tools to Claude Code:

Tool Description
ci_dashboard Full CI dashboard summary: issues, runs, runner status
ci_create_issue Create a new issue (title, body)
ci_get_issue Get issue details including comments
ci_list_issues List issues with state labels (open/closed/all)
ci_reply Comment on an issue
ci_approve Approve an issue — adds approved comment, sets awaiting-approval label
ci_list_runs List recent workflow runs
ci_runner_status Check runner health and status
ci_list_pulls List pull requests (open/closed/all)
ci_get_pull Get pull request details

Running

Web GUI (port 8100)

python web.py --port 8100

MCP Server

python mcp_server.py

TUI

python dashboard.py --refresh 10

CI State Machine

NEW → CLARIFYING → PLANNING → IMPLEMENTING → REVIEWING → MERGED

Issues flow through states via labels:

  • awaiting-clarification → clarifying
  • awaiting-approval → planning
  • awaiting-review → reviewing

Web GUI Features

  • Kanban board with columns per state
  • Issue detail panel with comments
  • Create/reply/approve actions
  • Workflow runs sidebar with status
  • State machine visualization
  • Runner health indicator
  • Auto-refresh every 30s
  • Keyboard shortcuts: R refresh, N new issue, Esc close