space-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPACE_TOKEN | No | JetBrains Space personal token. Alternatively, use 'space auth login' to store in keyring or credentials file. |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_merge_requestA | Get details of a specific merge request. Args: project: Project key (e.g., "ij" for IntelliJ) repository: Repository name (e.g., "ultimate") review_id: Review/MR identifier (numeric ID or full review ID) Returns: YAML with MR title, state, author, branches, and reviewers. |
| get_merge_request_timelineA | Get the full timeline of a merge request: comments, dry runs, commits, reviews. Returns a chronological markdown timeline with day sections, threaded replies (Patronus dry run results, safe merge status), and code review discussions. Args: project: Project key (e.g., "ij") repository: Repository name (e.g., "ultimate") review_id: Review/MR identifier Returns: Markdown timeline grouped by day, with threaded replies indented. |
| get_merge_requestsA | List merge requests for a repository. Args: project: Project key (e.g., "ij") repository: Repository name (e.g., "ultimate") branch: Optional source branch name to filter by state: Optional state filter: "Opened", "Closed", "Merged", "RequiresAuthorAttention", or "NeedsReview" limit: Maximum number of results (default 1; set to 0 for unlimited) author: Optional author username to filter by (case-insensitive; an unknown username yields a clear "no such user" error) Returns: YAML list of merge requests. |
| put_merge_requestA | Create a new merge request. Args: project: Project key (e.g., "ij") repository: Repository name (e.g., "ultimate") source_branch: Branch with changes (e.g., "azhukova/fix-auth") target_branch: Branch to merge into (e.g., "master") title: MR title description: Optional MR description Returns: YAML with created MR number, title, and branches. |
| patch_merge_requestA | Edit an existing merge request's title and/or description. Omit a field to leave it unchanged; pass "" for Args: title: New title, or omit to leave unchanged. description: New description ("" clears it), or omit to leave unchanged. Returns: YAML with the updated merge request. |
| post_close_merge_requestA | Close a merge request. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") or internal ID Returns: Confirmation message. |
| post_reopen_merge_requestA | Reopen a closed merge request. The source branch must still exist. If it was deleted on close, re-push it before reopening. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") or internal ID Returns: Confirmation message. |
| post_merge_request_commentA | Post a general comment on a merge request. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") or internal ID text: Comment text (Markdown supported) Returns: Confirmation message. |
| post_code_discussionA | Create an inline code discussion on a specific file and line of a merge request. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") or internal ID repository: Repository name (e.g., "ultimate") revision: Git commit SHA the comment is anchored to filename: File path (e.g., "src/main.py") line: Line number (new side of the diff) text: Comment text (Markdown supported) Returns: Confirmation with file and line reference. |
| post_reply_to_code_discussionA | Reply to an existing code discussion on a merge request. The discussion_channel_id can be found in the timeline output of a merge request. Args: project: Project key (for context only) review_id: MR number (for context only) discussion_channel_id: Channel ID of the code discussion to reply to text: Reply text (Markdown supported) Returns: Confirmation message. |
| post_delete_merge_requestB | Delete a merge request. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") or internal ID Returns: Confirmation message. |
| get_patronus_runsA | Find Patronus runs (dry runs / safe merges) for a merge request. Use this to discover CI dry runs and safe merge attempts for a merge request. Each run has an ID that can be passed to get_patronus_run. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") Returns: YAML list of runs with IDs for follow-up queries. |
| get_patronus_runA | Get details of a specific Patronus run including TeamCity build checks and problems. Use the run ID from get_patronus_runs or from a Patronus URL (e.g., https://patronus.labs.jb.gg/robot/). The returned TeamCity build IDs can be inspected further using the teamcity CLI: teamcity run view Args: run_id: Patronus run UUID Returns: YAML with run overview, TeamCity checks, and problems. |
| put_patronus_dry_runA | Start a Patronus dry run for a merge request. Runs all configured quality checks (TeamCity builds) without merging. Use get_patronus_run to track progress. Args: project: Project key (e.g., "ij") review_id: MR number (e.g., "194108") Returns: Markdown with run ID, Patronus URL, and status. On failure, returns actionable guidance on what to do next. |
| post_cancel_patronus_runA | Cancel a running Patronus run (dry run or safe merge). Args: run_id: Patronus run UUID Returns: Confirmation message. |
| get_attachmentA | Download a file attachment from a Space MR discussion. Use the attachment ID from get_merge_request_timeline output (shown as [id: ...] next to each attachment). For text files, returns the file content directly. For binary files, returns the download URL. Args: attachment_id: Attachment UUID Returns: File content (text) or download URL (binary). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 16 tools
Each tool targets a distinct resource and action: read/list/create/edit/close/reopen/delete MRs, timeline, comments vs inline discussions, and Patronus run queries/actions. Singular/plural and general/inline comment distinctions are clear.
All tools follow a consistent verb_noun pattern using HTTP verbs (get, put, patch, post) with clear resource nouns. Even action-oriented names like post_close_merge_request and post_reply_to_code_discussion maintain a predictable structure.
At 16 tools, the set is slightly above the typical well-scoped range (3-15) but is justified by covering both merge request lifecycle and Patronus dry run/safe merge operations. Each tool has a clear purpose, so the count feels appropriate for the domain.
The tool surface covers full MR lifecycle (create, read, list, edit, close, reopen, delete), commenting (general and inline), replies, attachments, and Patronus run inspection/start/cancel. A minor gap is the lack of a tool to initiate a 'safe merge', though this might be intentionally excluded.