Skip to main content
Glama
saidsef

GitHub PR Issue Analyser

by saidsef

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GITHUB_TOKENYesGitHub Personal Access Token with 'repo' scope

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tasks
{
  "list": {},
  "cancel": {},
  "requests": {
    "tools": {
      "call": {}
    },
    "prompts": {
      "get": {}
    },
    "resources": {
      "read": {}
    }
  }
}
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
add_inline_pr_commentA

Adds an inline review comment to a specific line in a file within a PR.

add_pr_commentsC

Adds a comment to a specific pull request.

add_to_projectA

Puts an issue or pull request on a project board. One already there comes back with the item it already has, so a retry does not make a second card.

create_issueC

Creates a new issue.

create_milestoneB

Opens a milestone. Titles are unique per repository, so reusing one fails.

create_prC

Creates a new pull request.

create_releaseC

Creates a new release. A tag that already carries one is updated instead of rejected, so a retry after a half-finished release recovers. See #347.

create_tagA

Creates a new tag. With a message it is an annotated tag, which stores the message; without one it is a lightweight ref.

delete_releaseA

Deletes a release. The tag it was published from survives unless delete_tag asks for it, since the commit history usually should not move.

delete_tagA

Deletes a tag. A tag a release points at is refused unless force is set, because removing it leaves the release without the code it names.

get_issueA

Fetches a single issue by number, with its body, labels, assignees and milestone. Reads straight from the issue rather than the search index, so it sees a write immediately. See #358.

get_latest_shaB

Fetches the SHA of the latest commit.

get_pr_contentC

Fetches the content/details of a specific pull request.

get_pr_diffB

Fetches the diff/patch of a specific pull request, capped at max_bytes. bytes_total is the whole patch either way, so a truncated reply says what was left behind. See #314.

get_pr_linked_issuesA

Return the issues that will be auto-closed when a pull request is merged.

get_pr_status_checksA

Return the CI check runs and commit status for a pull request's HEAD commit.

Pages through up to MAX_STATUS_CHECKS_SUITE_PAGES of check suites (50 per page). For any suite whose first 100 runs are not the full set, drains up to MAX_STATUS_CHECKS_RUN_PAGES_PER_SUITE additional pages via the supplemental query. If either cap is hit before the connection is exhausted, the result is flagged truncated=True and overall is downgraded from 'passing' to 'unknown' so the caller does not act on a partial view.

get_project_fieldsA

Lists a project's fields and the options each single-select one accepts, which is what set_project_field expects to be named.

get_releaseB

Fetches one release, by tag or the latest published one.

get_repo_stars_sinceA

Return the repos owned by username that received the most new stars since a given date. since accepts YYYY-MM-DD or ISO 8601; defaults to 30 days ago. Answers prompts like 'which repos gained the most stars in the last 30 days'. One REST call is made per repo checked — set max_repos conservatively. truncated is True when the account has more public repos than the listing could read, so the answer may miss some.

get_user_activitiesA

Get user activities with optional filtering by org, repo, and date range using GraphQL API. since/until accept YYYY-MM-DD or full ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). Note: repo_stars returns current cumulative star counts, not stars gained within the requested period — GitHub does not expose per-period star deltas.

list_milestonesB

Lists a repository's milestones with the count of issues in each.

list_open_issues_prsC

Lists open pull requests or issues.

list_pr_commentsB

Lists the comments on a pull request. Inline comments carry the file and line they sit on, so a second review can tell what it already said.

list_project_itemsA

Lists what is on a project board with each card's field values, so a backlog can be read by Status rather than one issue at a time.

list_releasesB

Lists a repository's releases, newest first.

list_repo_labelsB

Lists the labels defined in a repository.

list_reposA

Lists repositories for a user, an organisation, or the caller. The owner's account type picks the endpoint, since /orgs 404s on a person and /users hides an organisation's private repositories. See #354.

list_tagsA

Lists a repository's tags and the commit each points at.

merge_prC

Merges a specific pull request.

remove_from_projectA

Takes an issue or pull request off a project board. The issue itself is untouched and stays open, but the field values its card held go with it.

reply_to_review_commentA

Replies on an existing review thread rather than starting a new one.

search_issues_prsA

Searches issues and pull requests by text and qualifiers. Unlike list_open_issues_prs the query is the caller's, so closed and merged items are reachable and any qualifier GitHub search accepts works.

search_userB

Search for a GitHub user by username using GraphQL API.

set_issue_milestoneA

Files an issue under a milestone, or takes it off one. Setting is its own tool because update_issue drops every argument left as null, which is what clearing a milestone has to send.

set_pr_draftA

Moves a pull request between draft and ready for review. REST accepts draft only when the pull request is created, so this goes through GraphQL.

set_project_fieldA

Sets a single-select field on an issue's card, naming the field and the option rather than their node ids. An issue not yet on the board is added first, since a field value has nowhere to live otherwise.

update_assigneesB

Updates the assignees for a specific issue or pull request.

update_issueA

Updates an existing issue. Only the fields supplied are sent, the rest keep their current values.

update_milestoneA

Changes a milestone in place. Only the fields supplied are sent, so closing one leaves its title and due date alone.

update_prA

Updates an existing pull request. Only the fields supplied are sent, the rest keep their current values, so a title can change without restating the body.

update_pr_branchC

Updates the pull request branch with the latest upstream changes.

update_pr_commentA

Rewrites a comment already posted. Conversation and review comments have separate id spaces, so the kind has to match where the id came from.

update_pr_descriptionA

Updates the title and description of a specific pull request.

update_releaseA

Changes a published release in place. Only the fields supplied are sent, so correcting a title does not wipe the notes. make_latest is settable on create_release alone, to keep this signature inside the parameter budget.

update_reviewsC

Submits a review for a specific pull request.

chooseA

Present the user with a set of options to choose from.

Call this tool when you need the user to make a decision between discrete alternatives. Use it proactively — don't ask the user to type their choice in chat when you can present clean, clickable options instead.

The user will see a card with one button per option. When they click one, their choice appears as a message in the conversation (as if the user typed it), like:

"Which deployment strategy?" — I selected: Blue-green

IMPORTANT: After calling this tool, you MUST stop and wait for the user's response. Do not continue or take any other actions until you see the "I selected:" message.

github_pr_issue_analyser_uiA

Execute Prefab Python code in a sandbox and render the result.

The code runs in a Pyodide WASM sandbox with full Python support. Import everything you use. Use the components tool to look up available components and their import paths.

Always use PrefabApp as the outermost context manager — this enables streaming so the UI renders progressively as code is written:

from prefab_ui.components import Column, Heading, Text, Row, Badge
from prefab_ui.app import PrefabApp

with PrefabApp() as app:
    with Column(gap=4):
        Heading("Dashboard")
        with Row(gap=2):
            Text("Revenue: $1.2M")
            Badge("On Track", variant="success")

For interactive UIs, pass initial state as a dict and use .rx on stateful components for reactive bindings:

from prefab_ui.components import Column, Slider, Text
from prefab_ui.app import PrefabApp

with PrefabApp(state={"threshold": 50}) as app:
    with Column(gap=4):
        slider = Slider(value=50, min=0, max=100, name="threshold")
        Text(f"Threshold: {slider.rx}%")

slider.rx produces {{ threshold }}, a template expression that resolves against client-side state. Use Rx("key") directly, or apply pipe filters: Rx("balance").currency() produces {{ balance | currency }}.

Available pipes: upper, lower, currency, length, json, round(n), default(val), truncate(n).

Charts live in prefab_ui.components.charts:

from prefab_ui.components.charts import BarChart, ChartSeries

BarChart(
    data=[{"month": "Jan", "rev": 100}, {"month": "Feb", "rev": 200}],
    series=[ChartSeries(data_key="rev", label="Revenue")],
    x_axis="month",
)

Values passed via data are available as global variables in the code. Python features like loops, f-strings, and comprehensions all work.

Layout patterns:

  • Card sub-components (CardHeader, CardContent, CardFooter) have built-in padding. Don't add extra padding to them. For a simple card without sub-components, use Card(css_class="p-6").

  • Use Grid(columns=N, gap=4) for equal-width cards or panels. Grid handles sizing automatically — no flex classes needed. For unequal widths, pass a list: Grid(columns=[2, 1], gap=4) gives a 2:1 ratio.

  • Row is for inline elements (badges, icons + text, buttons). Prefer Grid when children should have equal or proportional widths. Row does not wrap by default.

  • Column and Row accept gap (Tailwind scale: 1-12), align (cross-axis), and justify (main-axis) as native props — prefer these over raw css_class for spacing.

  • Use css_class="overflow-hidden" on containers if chart or content edges should clip to the container boundary.

Args: code: Python code that builds a Prefab component tree. data: Values injected as variables in the sandbox namespace. sandbox: A Sandbox instance. If not provided, a new one is created on each call.

search_prefab_componentsA

Search the Prefab component library.

Use this tool to look up exact argument names, accepted values, and usage examples before writing component code. The skill covers patterns and layout; this tool has the API details.

The query matches component names and descriptions. Space-separated terms match independently, so "Card Badge Metric" returns all three.

When a query matches a small number of components, full details (docstrings, args, examples) are shown automatically. For broad searches, a compact listing is returned instead. Use detail to override this behavior.

Args: query: Filter by component name or description. Space-separated terms are OR-matched. detail: Show full docstrings and args. Defaults to automatic (detailed for ≤5 matches, compact otherwise). limit: Max components to return in detail mode (default 8). No limit in compact mode.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
Prefab Generative Renderer
project-boards/SKILL.mdPut issues and pull requests on a GitHub project board, set their fields, read what is on a board, and take items off it
project-boards/_manifestFile listing for project-boards
user-activity/SKILL.mdFind a user's or organisation's repositories, and look up a profile, contribution history, and which repos gained stars recently
user-activity/_manifestFile listing for user-activity
pr-analysis/SKILL.mdAnalyse a GitHub pull request by fetching its metadata, diff, linked issues and CI status
pr-analysis/_manifestFile listing for pr-analysis
issue-management/SKILL.mdCreate, update, list and search GitHub issues and PRs, list a repository's labels, run milestones, and check for duplicates
issue-management/_manifestFile listing for issue-management
interactive-ui/SKILL.mdAsk the user to pick an option, or render GitHub data as an interactive UI panel
interactive-ui/_manifestFile listing for interactive-ui
pr-management/SKILL.mdManage the lifecycle of a GitHub PR - create, update the description, assign, refresh the branch and merge
pr-management/_manifestFile listing for pr-management
pr-review/SKILL.mdReview a GitHub pull request by posting inline code comments and submitting a review decision
pr-review/_manifestFile listing for pr-review
error-handling/SKILL.mdRead the error codes these tools raise and decide whether to retry, fix the call, or stop
error-handling/_manifestFile listing for error-handling
release-management/SKILL.mdTag a commit, publish a GitHub release, and read, correct or withdraw the tags and releases already there
release-management/_manifestFile listing for release-management
Prefab Renderer (choose)

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/saidsef/mcp-github-pr-issue-analyser'

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