 [ ← blog / drupal ](/) Mar 03, 2026  ·  \#drupal  ·  4 min read 

# drupalorg-cli 0.8.0: GitLab issue fork and merge request commands

The 0.7.0 release was housekeeping — fixing the release notes command and clearing out deprecation warnings. 0.8.0 has two goals: add native GitLab issue fork and merge request commands, and make the CLI useful for developers using AI agents to assist with Drupal.org issues.



      ![drupalorg cli command list](/sites/default/files/styles/large/public/2026-02/Screenshot%202026-02-28%20at%201.47.48%E2%80%AFPM.png?itok=v6IGONTb) 

 

The 0.7.0 release was housekeeping — fixing the release notes command and clearing out deprecation warnings. 0.8.0 has two goals: add native GitLab issue fork and merge request commands, and make the CLI useful for developers using AI agents to assist with Drupal.org issues.

On the GitLab side, there are new commands for discovering forks, setting up remotes, checking out branches, and inspecting merge requests and their CI pipelines. The `issue:show` command also gained a `--with-comments` flag, which pulls the full comment thread alongside the issue details — skipping system-generated messages so you get the actual discussion.

That flag is useful for anyone catching up on a long thread — and it gives agents enough context to do useful, bounded work — like evaluating whether the issue summary is still accurate and drafting an update if it isn't. Issue summaries on Drupal.org routinely fall out of date as discussion evolves, and catching up on a long thread to write an accurate summary is exactly the kind of tedious task an agent handles well. The CLI ships a skill for that specifically, alongside a full contribution workflow skill for when you're ready to go further.

## GitLab Merge Request Commands

Drupal.org uses GitLab for issue forks and merge requests. The CLI now has a full suite of commands to work with that workflow directly.

Start by discovering the fork for an issue and adding it as a git remote:

```bash
# See fork URLs and available branches
drupalorg issue:get-fork <nid>

# Add the fork as a git remote and fetch its branches
drupalorg issue:setup-remote <nid>

# Check out a branch from the fork
drupalorg issue:checkout <nid> <branch>
```

`issue:setup-remote` is idempotent — safe to run multiple times. `issue:checkout` sets up tracking automatically, so `git push` targets the fork branch and updates the existing MR without any extra steps.

From there, the `mr:*` commands cover the full review and debug cycle:

```bash
# List open merge requests for an issue
drupalorg mr:list 

# See which files changed in an MR
drupalorg mr:files  

# Read the full unified diff
drupalorg mr:diff  

# Check the GitLab CI pipeline status
drupalorg mr:status  

# Read failed job traces from the latest pipeline
drupalorg mr:logs  
```

## Agent Skills

The CLI ships three agent skills, installed with:

```bash
drupalorg skill:install
```

Run this in your Drupal project root to install the skills into `.claude/skills/drupalorg-cli/` for that project. Run it in your home directory instead and the skills land in `~/.claude/skills/drupalorg-cli/`, making them available globally across all your projects. Claude Code and other MCP-compatible agents pick them up automatically from either location.

`<strong>drupalorg-cli</strong>` is the general-purpose skill. It documents every command, its arguments, and how to chain commands together. All data-fetching commands accept `--format=llm`, which returns structured XML optimized for agent consumption — clearly labelled fields, contributor lists, and change records.

```bash
drupalorg issue:show  --format=llm
drupalorg issue:show  --with-comments --format=llm
drupalorg mr:list  --format=llm
drupalorg mr:status   --format=llm
```

The `--with-comments` flag on `issue:show` pulls the full comment thread (skipping system-generated messages), giving an agent the full history of what's been tried and where things stand.

`<strong>drupalorg-issue-summary-update</strong>` teaches an agent to evaluate whether an issue summary is current based on the comment thread, and to draft an updated summary if it isn't. Issue summaries on Drupal.org frequently fall out of date as discussions evolve — this skill makes it something an agent can handle.

`<strong>drupal-work-on-issue</strong>` covers the full contribution workflow end-to-end. Given an issue NID, an agent can fetch issue context, discover and check out the issue fork's branch, make and push changes, and monitor the CI pipeline — all without leaving the agent loop.

## MCP Server

The CLI exposes an MCP stdio server:

```bash
drupalorg mcp:serve
```

Wire it into your MCP host configuration and every CLI command becomes a callable tool. Example config for Claude Code:

```json
{
  "mcpServers": {
    "drupalorg": {
      "command": "drupalorg",
      "args": ["mcp:serve"]
    }
  }
}
```

With this in place, an agent can call `issue:show`, `mr:list`, `mr:logs`, or any other command directly from the agent loop when it does not have direct shell access, like some desktop clients.

## Installing or Upgrading

Download the Phar from the l[atest release](https://github.com/mglaman/drupalorg-cli/releases/latest/download/drupalorg.phar), make it executable, and put it on your PATH:

```json
curl -OL https://github.com/mglaman/drupalorg-cli/releases/latest/download/drupalorg.phar
chmod +x drupalorg.phar
mv drupalorg.phar /usr/local/bin/drupalorg
```

To upgrade, repeat the same steps — automatic updates aren't supported yet.

Full release notes and the complete changelog are on [GitHub](https://github.com/mglaman/drupalorg-cli/releases).

 

  ![](/themes/custom/mglaman/images/headshot.webp)Thanks for reading

I write about Drupal, PHP, and the quiet infrastructure behind large sites — caching, config, and testing. New posts land every week or two.

 [Subscribe via RSS →](/rss.xml) [About me →](/about-me) 

 



 

  [← Older

Automating Drupal release notes in Dependabot PRs

 ](/blog/automating-drupal-release-notes-dependabot-prs) [Newer →

The nightmare of permissions and OAuth scopes in Drupal

 ](/blog/nightmare-permissions-and-oauth-scopes-drupal)