Skip to main content
Glama
nextDriveIoE

GitHub Action Trigger MCP Server

by nextDriveIoE

get_github_actions

Retrieve available GitHub Actions workflows from a repository to understand automation options and trigger points.

Instructions

Get available GitHub Actions for a repository

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ownerYesOwner of the repository (username or organization)
repoYesName of the repository
tokenNoGitHub personal access token (optional)

Implementation Reference

  • The core handler function that fetches GitHub Actions workflows from the specified repository using the GitHub API, including workflow details and file contents.
    async function getGitHubActions(owner: string, repo: string, token?: string) {
      // Use provided token or fall back to config token
      const authToken = token || config.githubToken;
      try {
        const headers: Record<string, string> = {
          'Accept': 'application/vnd.github+json',
          'X-GitHub-Api-Version': '2022-11-28'
        };
    
        if (authToken) {
          headers['Authorization'] = `Bearer ${authToken}`;
        }
    
        // Fetch workflows from the GitHub API
        const workflowsResponse = await axios.get(
          `https://api.github.com/repos/${owner}/${repo}/actions/workflows`,
          { headers }
        );
    
        // Extract workflow information
        const workflows = workflowsResponse.data.workflows.map((workflow: any) => ({
          id: workflow.id,
          name: workflow.name,
          path: workflow.path,
          state: workflow.state,
          url: workflow.html_url
        }));
    
        // For each workflow, get the associated jobs
        const workflowDetails = await Promise.all(
          workflows.map(async (workflow: any) => {
            try {
              // Get the raw workflow file content
              const contentResponse = await axios.get(
                `https://api.github.com/repos/${owner}/${repo}/contents/${workflow.path}`,
                { headers }
              );
    
              const content = Buffer.from(contentResponse.data.content, 'base64').toString('utf-8');
    
              return {
                ...workflow,
                content
              };
            } catch (error) {
              // If we can't get the content, just return the workflow without it
              return workflow;
            }
          })
        );
    
        return workflowDetails;
      } catch (error) {
        if (axios.isAxiosError(error)) {
          throw new Error(`GitHub API error: ${error.response?.status} ${error.response?.statusText} - ${error.response?.data?.message || error.message}`);
        }
        throw error;
      }
    }
  • The input schema definition for the get_github_actions tool, including parameters owner, repo, and optional token.
    {
      name: "get_github_actions",
      description: "Get available GitHub Actions for a repository",
      inputSchema: {
        type: "object",
        properties: {
          owner: {
            type: "string",
            description: "Owner of the repository (username or organization)"
          },
          repo: {
            type: "string",
            description: "Name of the repository"
          },
          token: {
            type: "string",
            description: "GitHub personal access token (optional)"
          }
        },
        required: ["owner", "repo"]
      }
    },
  • src/index.ts:728-752 (registration)
    The registration and dispatch logic in the CallToolRequestSchema handler that processes calls to get_github_actions and invokes the core handler function.
    case "get_github_actions": {
    const owner = String(request.params.arguments?.owner);
    const repo = String(request.params.arguments?.repo);
    const token = request.params.arguments?.token ? String(request.params.arguments?.token) : undefined;
    
    if (!owner || !repo) {
    throw new Error("Owner and repo are required");
    }
    
    try {
    const actions = await getGitHubActions(owner, repo, token);
    
    return {
    content: [{
    type: "text",
    text: JSON.stringify(actions, null, 2)
    }]
    };
    } catch (error) {
    if (error instanceof Error) {
    throw new Error(`Failed to get GitHub Actions: ${error.message}`);
    }
    throw error;
    }
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nextDriveIoE/github-action-trigger-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server