A collection of MCP servers for Confluence, GitHub, GitLab, and Google Cloud Logging integrations
This MCP server factory exposes 30 tools across Confluence, GitHub, GitLab, and GCP Cloud Logging. While tool definitions are visible in source code with schemas and descriptions present, the quality is inconsistent. Most tool descriptions are 30-100 characters (below the 194-char production baseline), many parameters lack granular descriptions, and several tools have concerning design issues: (1) duplicate/conflicting tool names across modules (e.g., 'create_branch' defined twice for GitHub and GitLab in the same file), (2) optional parameters that should be mutually exclusive are not clearly documented, (3) error handling in source code is minimal and non-actionable for LLMs, (4) output schemas are not explicitly documented, responses are inferred from API calls, (5) several parameters expose implementation details (e.g., 'request' parameter in GitHub tools suggests FastAPI req object leakage). The server uses stateless HTTP (good), but lacks modern MCP features like tool annotations, structured error reporting, and per-request logging control. Average per-tool score reflects these gaps.
Add a comment to a Confluence page (storage HTML).
Add one or more labels to a page. Labels will be added with 'global' prefix.
Create a new Confluence page in the given space. Optionally set a parent page (to create a child page).
Delete a Confluence page. status usually 'current' (default). For trash/restore behavior refer to Confluence docs.
Get comments for a page. Returns storage HTML for each comment.
Get labels on a page.
Duplicate tool names across modules: 'create_branch', 'create_or_update_file', 'get_contents', and 'push_multiple_files' are defined for both GitHub and GitLab but registered with identical names. MCP clients cannot distinguish between them; the second registration silently overwrites the first. This violates the single-responsibility and composition patterns.
Parameter 'request' (FastAPI Request object) exposed in GitHub tools (create_branch, create_or_update_file, create_pull_request, merge_pull_request, update_pr_branch). This is an implementation detail that leaks the transport layer into the tool contract. LLMs cannot meaningfully provide a Request object; this violates secret-injection and tool-gateway patterns. Must be removed or handled server-side.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 13 | - | v1 |
Get a page by ID, or by title + space_key. If expand_body is True, returns storage HTML content.
Get child pages of a page. Optionally expand storage body.
Search Confluence. Use either 'query' (simple) or 'cql' (advanced). If expand_body, includes storage content where applicable.
Update an existing page's title and/or storage body. Automatically increments version.
Create a new branch in a GitHub repository.
Create a new branch in a GitLab project.
Create a new merge request on GitLab.
Create or update a file in a GitLab repository.
Create or update a file in a GitHub repository.
Create a new pull request on GitHub.
Get file contents from a GitLab repository.
Get file contents from a GitHub repository.
Retrieve a specific log entry by its Insert ID.
Lists the names of logs available in the project (e.g., 'syslog', 'cloudaudit').
Lists available Monitored Resource types (e.g., 'gce_instance', 'k8s_container').
Merge a merge request on GitLab.
Merge a pull request on GitHub.
Push multiple files to a GitHub repository in a single commit.
Push multiple files to a GitLab repository in a single commit.
Natural language GitHub query → structured API call. Example: "open pull requests", "issues with bug label"
Search and filter logs from Google Cloud Platform.
Update a merge request branch with the latest changes from the target branch (rebase).
Update a pull request branch with the latest changes from the base branch.
Summarize last week's GitHub activity.
Mutually exclusive parameters not documented. Many tools accept optional alternative parameters (e.g., confluence_get_page accepts 'page_id' OR ('title' AND 'space_key')) but do not explicitly state this in parameter descriptions. LLMs will pass both or neither, causing confusing errors.
Output schemas not documented. Tool descriptions and source code do not define what fields are returned. LLMs must guess the structure of responses, risking incorrect field access and chaining failures. For example, confluence_create_page returns {message, id, title, link}, but this is inferred from code, not documented in the tool definition.
Minimal error handling with no LLM-actionable guidance. cf_request() in Confluence tools catches errors and re-raises with raw API details (HTTP status + JSON body). No guidance on retry, user action, or alternatives. Example: confluence_get_page returns {'message': 'No page found', 'results': []} for missing pages, but does not suggest 'Try search() to find the page by partial name.'
Descriptions below production baseline (194 chars). Most tool descriptions are 30 - 100 characters, providing minimal context for LLM selection. Example: 'confluence_add_label': 'Add one or more labels to a page. Labels will be added with 'global' prefix.' (97 chars) lacks guidance on when to use vs confluence_add_comment or why labels are useful.
Parameters with generic names and minimal descriptions. 'status' parameter in confluence_delete_page has description 'The status parameter for deletion', does not explain valid values, what 'current' means, or when trash/restore apply. Also refers to external docs without self-contained guidance.
Natural language tools (query_github, weekly_digest) lack clear boundaries. 'query_github' accepts a freeform 'query' string like 'open pull requests'. No examples, no constraints, no explanation of supported query types. LLMs will hallucinate query syntax and face silent failures.
No destructive-operation safeguards. confluence_delete_page, merge_pull_request, and merge_merge_request perform irreversible actions but have no dry-run, confirmation, or undo mechanism. Agents can silently delete pages or merge untested code.
Inconsistent parameter types for IDs across modules. GitHub tools use 'pr_number' (integer) while GitLab uses 'mr_iid' (integer). Confluence uses 'page_id' (string). No unified naming or type convention, agents must learn module-specific ID naming.