GitHub Action Trigger MCP Server
# GitHub Action Trigger MCP Server
A Model Context Protocol server for GitHub Actions integration.
## Overview
This is a TypeScript-based MCP server designed for GitHub Actions integration. It provides the following features:
- Tool for fetching available GitHub Actions from a repository
- Tool for getting detailed information about a specific GitHub Action
- Tool for triggering GitHub workflow dispatch events
- Tool for fetching the latest releases from a GitHub repository
- Tool for enabling auto-merge on pull requests
## Features
### Tools
- `get_github_actions` - Get available GitHub Actions for a repository
- Required parameters: `owner` (repository owner, username or organization) and `repo` (repository name)
- Optional parameters: `token` (GitHub personal access token, for accessing private repositories or increasing API rate limits)
- Returns JSON data with workflow ID, name, path, state, URL, and content
- `get_github_action` - Get detailed information about a specific GitHub Action, including inputs and their requirements
- Required parameters: `owner` (Action owner, username or organization) and `repo` (repository name of the action)
- Optional parameters:
- `path`: Path to the action definition file (default: 'action.yml')
- `ref`: Git reference (branch, tag, or commit SHA, default: 'main')
- `token`: GitHub personal access token (optional)
- Returns detailed information about the Action, including name, description, author, inputs (and whether they're required), etc.
- `trigger_github_action` - Trigger a GitHub workflow and pass relevant parameters
- Required parameters:
- `owner`: Repository owner (username or organization)
- `repo`: Repository name
- `workflow_id`: The ID or filename of the workflow to trigger
- Optional parameters:
- `ref`: The git reference to trigger the workflow on (default: 'main')
- `inputs`: Inputs to pass to the workflow (must match the workflow's defined inputs)
- `token`: GitHub personal access token (must have the workflow scope)
- Returns workflow run information, including status, URL, etc.
- `get_github_release` - Get the latest 2 releases from a GitHub repository
- Required parameters: `owner` (repository owner, username or organization) and `repo` (repository name)
- Optional parameters: `token` (GitHub personal access token, optional)
- Returns information about the latest 2 releases
- `enable_pull_request_automerge` - Enable auto-merge for a specific pull request
- Required parameters:
- `owner`: Repository owner (username or organization)
- `repo`: Repository name
- `pull_number`: The pull request number
- Optional parameters:
- `merge_method`: The merge method to use (MERGE, SQUASH, or REBASE, default: MERGE)
- `token`: GitHub personal access token (optional)
- Returns success status and pull request information
- Note: This will automatically merge the PR when all required checks pass and approvals are met
## Installation
### Recommended Installation: Using npx
The simplest way to install and use is via the `npx` command in your Claude Desktop configuration file without manual local installation:
```json
{
"mcpServers": {
"github-action-trigger-mcp": {
"command": "npx",
"args": [
"-y",
"@nextdrive/github-action-trigger-mcp"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your_github_token_here"
}
}
}
}
```
Benefits of this method:
- No local package installation required
- Automatically uses the latest version
- Set up once and ready to use
- Built-in GitHub token configuration
### Local Installation
If you prefer to install manually, follow these steps:
1. Install the package:
```bash
npm install -g @nextdrive/github-action-trigger-mcp
```
2. Use in Claude Desktop configuration:
On MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"github-action-trigger-mcp": {
"command": "@nextdrive/github-action-trigger-mcp",
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your_github_token_here"
}
}
}
}
```
### GitHub Token Configuration
To access the GitHub API, especially for private repositories or workflow triggers, you need to configure a GitHub personal access token. There are several ways to do this:
#### Method 1 (Recommended): Direct Configuration in Claude Desktop
Set the token directly in the Claude Desktop configuration file via the `env` field:
```json
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your_github_token_here"
}
```
#### Method 2: Global Environment Variable
Set the `GITHUB_TOKEN` environment variable:
```bash
# On Linux/MacOS
export GITHUB_TOKEN=your_github_token
# On Windows
set GITHUB_TOKEN=your_github_token
```
#### Method 3: Local Configuration File
Edit the configuration file:
```
~/.nextdrive-github-action-trigger-mcp/config.json
```
Set your GitHub token:
```json
{
"githubToken": "your_github_token"
}
```
A template for this configuration file is automatically created the first time the server starts.
## Development
Install dependencies:
```bash
npm install
```
Build the server:
```bash
npm run build
```
For automatic rebuilding during development:
```bash
npm run watch
```
### Debugging
Use MCP Inspector for debugging:
```bash
npm run inspector
```
The Inspector will provide a URL to access the debugging tools in your browser.
## Publishing to npm
If you want to publish this package to npm, follow these steps:
1. Make sure you're logged in to npm and have permissions to publish to the `@nextdrive` organization:
```bash
npm login
```
2. Build the project:
```bash
npm run build
```
3. Publish to npm (organization-scoped packages are private by default, use `--access public` to make it public):
```bash
npm publish --access public
```
After publishing, anyone can run this tool using the `npx @nextdrive/github-action-trigger-mcp` command or use it in their Claude Desktop configuration.
## Usage Examples
### Getting a List of GitHub Actions
Use the `get_github_actions` tool to get GitHub Actions for a repository:
```json
{
"owner": "username-or-org",
"repo": "repository-name"
}
```
If a default token is configured, it will be used automatically when accessing private repositories.
Example response:
```json
[
{
"id": 12345678,
"name": "CI",
"path": ".github/workflows/ci.yml",
"state": "active",
"url": "https://github.com/owner/repo/actions/workflows/ci.yml",
"content": "name: CI\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v2\n - name: Setup Node.js\n uses: actions/setup-node@v2\n with:\n node-version: 16.x\n - name: Install dependencies\n run: npm ci\n - name: Build\n run: npm run build\n - name: Test\n run: npm test\n"
}
]
```
### Getting Detailed GitHub Action Information
Use the `get_github_action` tool to get detailed information about a specific Action:
```json
{
"owner": "actions",
"repo": "checkout",
"ref": "v4"
}
```
Example response:
```json
{
"name": "Checkout",
"description": "Check out a Git repository at a particular version",
"author": "GitHub",
"inputs": [
{
"name": "repository",
"description": "Repository name with owner. For example, actions/checkout",
"default": "",
"required": false
},
{
"name": "ref",
"description": "The branch, tag or SHA to checkout.",
"default": "",
"required": false
}
],
"runs": {
"using": "node20",
"main": "dist/index.js"
}
}
```
### Triggering a GitHub Workflow
Use the `trigger_github_action` tool to trigger a GitHub workflow:
```json
{
"owner": "username-or-org",
"repo": "repository-name",
"workflow_id": "ci.yml",
"inputs": {
"deploy_environment": "production",
"debug_enabled": "true"
}
}
```
Example response:
```json
{
"success": true,
"message": "Workflow dispatch event triggered successfully",
"run": {
"id": 12345678,
"url": "https://github.com/owner/repo/actions/runs/12345678",
"status": "queued",
"conclusion": null,
"created_at": "2025-03-19T06:45:12Z",
"triggered_by": "API"
}
}
```
Note: Triggering workflows requires:
1. The workflow must be configured to support the `workflow_dispatch` event
2. The GitHub token must have the `workflow` scope permission
3. Input parameters passed must match those defined in the workflow
### Getting Latest Releases
Use the `get_github_release` tool to get the latest 2 releases from a repository:
```json
{
"owner": "username-or-org",
"repo": "repository-name"
}
```
Example response:
```json
{
"count": 2,
"releases": [
{
"id": 12345678,
"name": "v1.0.0",
"tag_name": "v1.0.0",
"published_at": "2025-03-15T10:00:00Z",
"draft": false,
"prerelease": false,
"html_url": "https://github.com/owner/repo/releases/tag/v1.0.0",
"body": "Release notes for version 1.0.0",
"assets": [
{
"name": "app-v1.0.0.zip",
"size": 1234567,
"download_count": 42,
"browser_download_url": "https://github.com/owner/repo/releases/download/v1.0.0/app-v1.0.0.zip",
"created_at": "2025-03-15T10:05:00Z",
"updated_at": "2025-03-15T10:05:00Z"
}
],
"author": {
"login": "username",
"html_url": "https://github.com/username"
}
},
{
"id": 87654321,
"name": "v0.9.0",
"tag_name": "v0.9.0",
"published_at": "2025-03-01T10:00:00Z",
"draft": false,
"prerelease": true,
"html_url": "https://github.com/owner/repo/releases/tag/v0.9.0",
"body": "Pre-release notes for version 0.9.0",
"assets": [],
"author": {
"login": "username",
"html_url": "https://github.com/username"
}
}
]
}
```
### Enabling Auto-merge for Pull Requests
Use the `enable_pull_request_automerge` tool to enable auto-merge for a specific pull request:
```json
{
"owner": "username-or-org",
"repo": "repository-name",
"pull_number": 123,
"merge_method": "SQUASH"
}
```
Example response:
```json
{
"success": true,
"message": "Auto-merge enabled successfully",
"pullRequest": {
"id": "PR_kwDOABCD123_456",
"title": "Add new feature",
"number": 123,
"autoMergeEnabled": true,
"enabledAt": "2025-08-21T03:00:00Z",
"mergeMethod": "SQUASH"
}
}
```
Note: Enabling auto-merge requires:
1. The repository must have auto-merge enabled in settings
2. The GitHub token must have write permissions to the repository
3. The pull request must be open and not already have auto-merge enabled
4. Once enabled, the PR will automatically merge when all required status checks pass and approvals are met
```TDQS
Scored across 5 tools
Most tools have distinct purposes: enabling auto-merge, getting action details, listing available actions, fetching releases, and triggering actions. However, 'get_github_action' and 'get_github_actions' could be slightly confusing as they both retrieve action information but differ in scope (single vs. multiple). The descriptions clarify this, but the names are similar enough to cause potential misselection.
The naming follows a consistent verb_noun pattern with 'get', 'enable', and 'trigger' as verbs, all using snake_case. The only minor deviation is 'enable_pull_request_automerge' which includes a compound noun, but it still fits the overall style. This consistency makes the tools predictable and easy to understand.
With 5 tools, the count is well-scoped for a GitHub Action Trigger server, covering key operations like triggering actions, managing auto-merge, and retrieving related information. It's slightly lean but reasonable, as it focuses on core functionality without unnecessary bloat, though a few more tools might enhance coverage.
The toolset covers triggering actions and getting action/release info, but has notable gaps. For example, there's no way to disable auto-merge, manage action runs (e.g., cancel or list workflows), or handle other GitHub Actions lifecycle aspects like secrets or environments. This limits agents to basic triggering and info retrieval, with missing operations that could cause workarounds or failures.