Skip to main content
Glama
cindyylim

MCP PR Workflow Server

by cindyylim

MCP PR Workflow Server

This MCP server provides tools and resources to streamline GitHub PR workflows, monitor CI/CD, and notify teams via Slack.

Features

  • PR Analysis: Automatically analyze file changes and suggest templates.

  • CI Monitoring: Summarize GitHub Actions runs and update PR status.

  • Slack Notifications: Send deployment status and custom alerts.

  • Follow-up Tasks: Create GitHub issues directly from the PR context.

Related MCP server: Agentic MCP Server

Setup

  1. Install dependencies:

    npm install
  2. Configure environment variables: Create a .env file based on .env.example:

    GITHUB_TOKEN=your_github_token
    SLACK_BOT_TOKEN=xoxb-your-token
    SLACK_CHANNEL_ID=C12345678
    ALLOWED_REPOS=your-org/your-repo,another-org/another-repo
  3. Build the project:

    npm run build
  4. Run tests:

    npm test
  5. Run the server:

    npm start

Usage in Claude Desktop

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "pr-workflow": {
      "command": "node",
      "args": ["/path/to/mcp-pr-workflow-server/dist/index.js"],
      "env": {
        "GITHUB_TOKEN": "your_github_token",
        "SLACK_BOT_TOKEN": "xoxb-your-token",
        "SLACK_CHANNEL_ID": "C12345678",
        "ALLOWED_REPOS": "your-org/your-repo"
      }
    }
  }
}

Tools

  • analyze_file_changes: Analyze PR diffs.

  • suggest_template: Suggest PR templates.

  • analyze_ci_results: Formats CI status.

  • update_pr_status: Adds comments to PRs.

  • send_slack_notification: Generic Slack alerts.

  • notify_deployment_status: Success/failure alerts.

  • create_follow_up_issue: Create GitHub issues.

Unknown tool names and validation failures are returned as MCP tool errors (isError: true) rather than crashing the server.

Resources

  • team://config/guidelines: PR guidelines.

  • team://config/escalation: CI failure policy.

Security

  • Repository allowlist: GitHub tools only operate on repositories listed in ALLOWED_REPOS.

  • Slack channel allowlist: Slack tools only post to SLACK_CHANNEL_ID. A channel_id argument is rejected unless it matches that value.

  • Input validation: Owner, repo, PR numbers, titles, and message lengths are validated before use.

  • Prompt injection protection: User-supplied PR comments, issue text, Slack messages, and prompt arguments are scanned for instruction-override patterns.

  • Secret redaction: Tokens, keys, and other sensitive patterns are redacted from outbound PR comments, Slack messages, and tool responses.

  • No credential exposure: Environment variables and channel IDs are never returned through tools or resources.

Available Tools

7 tools
analyze_ci_resultsB

Analyzes GitHub Actions workflow runs for a PR and provides a formatted summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
ownerYes
pull_numberYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It states that the tool analyzes workflow runs, which suggests a read-only operation, but it does not disclose specifics such as what data is accessed, how the summary is generated, potential side effects, authentication requirements, or failure behaviors. There is limited insight beyond the basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence communicates the core purpose and output, with no wasted words. However, it may be too sparse, lacking details that would be useful, but for what it is, it is efficiently written.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and only a terse description, the tool is underdocumented. The description gives only a high-level view and omits details about the summary structure, edge cases, required permissions, or how the results are obtained, leaving significant gaps for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no per-parameter descriptions (0% coverage), so the description must compensate. The description mentions 'PR' and 'GitHub Actions', which implicitly clarifies that pull_number refers to the pull request and owner/repo identify the repository, but it doesn't explicitly describe the parameters or their expected formats. The parameter names are fairly self-evident in this GitHub context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's function: analyzing GitHub Actions workflow runs for a pull request and generating a formatted summary. This distinguishes it from sibling tools like analyze_file_changes or update_pr_status, which focus on different resources or actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when a formatted summary of CI results for a PR is needed, but it provides no explicit guidance on when to use this tool over alternatives, nor does it mention any exclusions or prerequisites. This is minimal inferred usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_file_changesA

Analyzes file changes in a GitHub PR to determine the type of changes made.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesThe name of the repository.
ownerYesThe owner of the repository.
pull_numberYesThe number of the pull request.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool analyzes file changes but does not reveal whether it performs a read-only GitHub API call, any side effects, limitations, or what the output contains. This is a significant gap for a tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, focused sentence with no filler. It is front-loaded with the action and presents the purpose efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema or annotations, so the description must explain what the tool returns or any relevant behavior. It fails to clarify the output format (e.g., a list of change types, a summary, a classification) or any edge cases like large PRs or rate limits. The description is minimal for a tool that likely produces a meaningful analysis.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (owner, repo, pull_number) already described in the schema. The description adds no supplementary parameter semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Analyzes') and identifies the resource ('file changes in a GitHub PR') and the outcome ('determine the type of changes made'). It clearly distinguishes from sibling tools like analyze_ci_results, which focuses on CI results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool—when analyzing file changes in a GitHub PR. However, it does not mention when not to use it or suggest alternatives, so it lacks explicit exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_follow_up_issueA

Creates a follow-up GitHub issue for tasks identified during the PR process.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
ownerYes
titleYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It states the action ('Creates') but does not mention authentication requirements, idempotency, or what happens upon issue creation. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and resource, with no redundant information. It earns a top score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers the core purpose but omits usage context, prerequisites, and side effects. It provides slightly more context than a bare mutation statement by mentioning the PR process, but still lacks completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%; the description does not explain any parameter. While parameter names like owner, repo, title, and body are self-evident, the description adds no additional meaning about formatting, constraints, or optionality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Creates') and resource ('follow-up GitHub issue'), and specifies the context ('tasks identified during the PR process'), clearly distinguishing it from sibling tools which focus on analysis and notifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates the tool is for creating follow-up issues during PR review, which separates it from sibling tools like analyze_file_changes or send_slack_notification. However, it lacks explicit guidance on when not to use it or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notify_deployment_statusB

Sends a formatted deployment status message (success/failure) to Slack.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
detailsNo
projectYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the core action but lacks side-effect context such as formatting behavior, required Slack integration, or failure modes. The brief description does not add behavioral transparency beyond the literal action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the verb, no redundant information. Ideal length for a simple tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, but with no annotations and no parameter descriptions, the overall context is thin. The description covers the primary purpose but fails to clarify parameter usage or how this relates to sibling tools, leaving moderate gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only hints that status accepts success/failure (redundant with the enum). It does not explain the semantics of 'project' or 'details', leaving parameters underdocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool sends a formatted deployment status message to Slack, specifying the action (send), resource (deployment status), and recipient (Slack). This distinguishes it from the generic sibling send_slack_notification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like send_slack_notification. The description implies use for deployment status updates but does not state exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_slack_notificationC

Sends a generic notification message to a Slack channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe message to send.
channel_idNoThe Slack channel ID.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears the full burden of behavioral disclosure. It only says 'Sends a generic notification message,' which restates the core function without explaining behavior like what happens if channel_id is omitted, whether a default channel is used, error handling, rate limits, or message formatting. This leaves significant gaps for a tool that sends external messages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no fluff or redundant information. It is appropriately sized for the tool's simplicity, though it could have packed in more useful details without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and only two parameters, the description is too sparse to be fully useful. It fails to explain the channel resolution behavior, whether the message is formatted, potential failures, or the relationship with the notify_deployment_status sibling. This leaves key context missing for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with clear descriptions (message and channel_id). The tool description adds no additional meaning or context about the parameters, so the baseline score of 3 applies given the 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Sends') and resource ('Slack channel'), and the word 'generic' differentiates it from more specific sibling tools like notify_deployment_status. However, it does not explicitly name any sibling, so it doesn't fully distinguish them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus the more specific notify_deployment_status. The word 'generic' implies use for non-specific notifications, but this is not stated clearly, and there are no exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_templateA

Suggests an optimal PR template based on the analysis of file changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysisYesThe analysis string from analyze_file_changes.
project_contextNoOptional project context/guidelines.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It indicates the operation is non-mutating by using 'suggests', but it does not explain any dependencies, required authorizations, or what happens with the suggestion (e.g., if it is saved or only returned). The brief phrasing leaves significant gaps for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and directly states the core purpose. Every word contributes value, and there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool, the description is adequate but not complete. It does not explain what the suggested template looks like or how it is returned, and since there is no output schema, the description should have filled this gap. It also lacks explicit prerequisites beyond the implied analysis input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema parameter description coverage is 100%, with 'analysis' described as 'The analysis string from analyze_file_changes' and 'project_context' as 'Optional project context/guidelines'. The description adds no additional parameter meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'suggests' with the resource 'PR template' and specifies the basis as 'analysis of file changes', which distinguishes it from siblings like analyze_file_changes and update_pr_status. It is specific, actionable, and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used after analyze_file_changes by referencing 'analysis of file changes', but it does not explicitly state when to use it or provide alternatives/exclusions. There is no guidance on when not to use this tool or what other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pr_statusC

Updates a pull request with CI results or other process updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
ownerYes
messageYes
pull_numberYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must carry the full burden. It says 'updates' but does not disclose whether this posts a comment, sets a status check, overwrites existing data, or requires specific permissions. This lack of detail is significant for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence, front-loading the core action and resource. It wastes no words, though the brevity sacrifices important details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 required parameters, no annotations, and no output schema, the description is too sparse to fully inform an agent. It does not clarify the mechanism of 'updating' (comment, status, etc.) or the impact on existing data, leaving critical context missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It vaguely references 'CI results' which likely maps to 'message', but it does not explain owner, repo, pull_number, or message. The parameter names are self-explanatory, but the description adds little semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a pull request with CI results or process updates, giving a specific verb and resource. It distinguishes from siblings like analyze_ci_results (which analyzes) and send_slack_notification (which notifies), though it doesn't explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like analyze_ci_results or notify_deployment_status. The description implies usage through 'CI results or other process updates' but does not state when to prefer this over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv1.0.0
    • First observedanalyze_ci_results
    • First observedanalyze_file_changes
    • First observedcreate_follow_up_issue
    • First observednotify_deployment_status
    • First observedsend_slack_notification
    • First observedsuggest_template
    • First observedupdate_pr_status

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have clearly distinct purposes: analyzing file changes, analyzing CI, updating PR status, and creating issues are distinct. However, send_slack_notification and notify_deployment_status both send Slack messages, which could cause confusion for an agent despite the latter being more specific.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., analyze_file_changes, suggest_template, create_follow_up_issue). There are no mixed conventions or vague verbs, making the pattern predictable.

Tool Count5/5

Seven tools is within the ideal 3-15 range and each tool serves a distinct step in the PR workflow. The count feels well-scoped without being excessive or too thin.

Completeness4/5

The tool set covers the main PR workflow: analyzing changes, suggesting templates, analyzing CI, updating status, sending notifications, and creating follow-ups. Minor gaps exist, such as no direct way to fetch PR details or comment on a PR, but the core lifecycle is reasonably covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/cindyylim/MCP-PR-Workflow-Server'

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