logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

unified-workflow-orchestrator

A comprehensive Model Context Protocol (MCP) engine facilitating integrated AI-driven search and operational utilities across critical developer platforms, including GitLab, Jira, Confluence, YouTube content repositories, and Google Maps data access. It manages interactions across these diverse services utilizing configured API credentials and authorization tokens.

Author

unified-workflow-orchestrator logo

athapong

No License

Quick Info

GitHub GitHub Stars 29
NPM Weekly Downloads 0
Tools 1
Last Updated 2026-02-19

Tags

gitlabtoolsaiobusiness toolstools athapongaio mcp

Unified Workflow Orchestrator (UWO) Server

A robust implementation of the Model Context Protocol (MCP) server, featuring deep integration points for GitLab, Jira, Confluence, YouTube knowledge bases, and geospatial services. This centralized server empowers AI-augmented search capabilities and provides essential utility functions designed to streamline and enhance contemporary software development lifecycles.

System Requirements

  • Go compiler version 1.23.2 or newer is mandatory.
  • Valid authentication credentials (API keys, access tokens) for all intended external services.

Deployment Procedures

Installation via Smithery Automated Setup

For seamless, automated deployment targeting Claude Desktop environments using the Smithery framework (which orchestrates interactive CLI configuration):

bash npx -y @smithery/cli install @athapong/aio-mcp --client claude

Note: Smithery will guide you through interactive prompts to gather necessary configuration parameters and autonomously manage environment initialization.

Installation via Go Toolchain

To ensure the go install command places executables within your standard Go binary path, verify your environment variables are correctly established. The procedure is as follows:

  1. Confirm your GOPATH variable points to your Go workspace (typically $HOME/go on Unix-like systems or %USERPROFILE%\go on Windows).

  2. Ensure the resulting $GOPATH/bin directory is explicitly included in your system's PATH variable.

Configuration examples for various operating systems:

Linux/macOS Shell Initialization:

bash

Append these directives to ~/.bashrc, ~/.zshrc, or your chosen shell profile

export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin

Apply changes by sourcing the configuration file: bash source ~/.bashrc # or ~/.zshrc

Windows (PowerShell):

powershell

Set User-level environment variables

Windows (Command Prompt):

cmd setx GOPATH "%USERPROFILE%\go" setx PATH "%PATH%;%USERPROFILE%\go\bin"

After variable definition, confirm successful configuration: bash go env GOPATH echo $PATH # Unix/Linux/macOS echo %PATH% # Windows CMD $env:PATH # Windows PowerShell

Once the path is configured, install the UWO server binary: bash go install github.com/athapong/aio-mcp@latest

  1. Credential Management: A dedicated configuration file, typically named .env, must be populated with service credentials: env ENABLE_TOOLS= QDRANT_HOST= ATLASSIAN_HOST= ATLASSIAN_EMAIL= GITLAB_HOST= GITLAB_TOKEN= BRAVE_API_KEY= ATLASSIAN_TOKEN= GOOGLE_AI_API_KEY= PROXY_URL= OPENAI_API_KEY= OPENAI_EMBEDDING_MODEL= DEEPSEEK_API_KEY= QDRANT_PORT= GOOGLE_TOKEN_FILE= GOOGLE_CREDENTIALS_FILE= QDRANT_API_KEY= USE_OLLAMA_DEEPSEEK= ENABLE_SSE= SSE_ADDR= SSE_BASE_PATH=

  2. Client Configuration (e.g., Claude Desktop):

Configure your MCP client's settings file (e.g., claude_desktop_config.json) to define the server startup parameters:

{claude_desktop_config.json} { "mcpServers": { "unified-workflow-orchestrator": { "command": "aio-mcp", "args": ["-env", "/path/to/.env", "-sse", "-sse-addr", ":8080", "-sse-base-path", "/mcp"],

}

} }

Alternatively, environment values can be directly injected into the client configuration JSON structure:

{ "mcpServers": { "unified-workflow-orchestrator": { "command": "aio-mcp", "env": { "ENABLE_TOOLS": "", "OPENAI_BASE_URL": "", "GOOGLE_AI_API_KEY": "", "GITLAB_TOKEN": "", "GITLAB_HOST": "", "QDRANT_HOST": "", "QDRANT_API_KEY": "",

    "PROXY_URL": "",
    "OPENAI_API_KEY": "",
    "GOOGLE_TOKEN_FILE": "",
    "GOOGLE_CREDENTIALS_FILE": "",

    "ATLASSIAN_TOKEN": "",
    "BRAVE_API_KEY": "",
    "QDRANT_PORT": "",
    "ATLASSIAN_HOST": "",
    "ATLASSIAN_EMAIL": "",

    "USE_OPENROUTER": "", // "true" if OpenRouter should handle reasoning (tool_use_plan), default false
    "DEEPSEEK_API_KEY": "", // Deepseek API key for reasoning support
    "OPENROUTER_API_KEY": "", // OpenRouter API key for reasoning support
    "DEEPSEEK_API_BASE": "", // Deepseek API base URL override
    "USE_OLLAMA_DEEPSEEK": "", // "true" to utilize local Deepseek via Ollama, default false
    "OLLAMA_URL": "" // Ollama endpoint, defaults to http://localhost:11434
  }
}

} }

Operational Modes

UWO Server supports two primary communication protocols:

  1. Standard I/O (Default): Communication occurs through standard input and output streams, the default mechanism utilized by clients like Claude Desktop.

  2. Server-Sent Events (SSE) Mode: The server operates as an HTTP listener broadcasting events in real-time. This is ideal for network-accessible clients or web interfaces.

Activating SSE Communication

SSE mode can be initialized via:

  1. Command Line Switches: bash aio-mcp -sse -sse-addr ":8080" -sse-base-path "/mcp"

  2. Environment Variables (within your .env file):

ENABLE_SSE=true SSE_ADDR=:8080 SSE_BASE_PATH=/mcp

When configured for SSE, the server exposes the following HTTP endpoints: - Event Stream: {SSE_BASE_PATH}/sse (Default: /mcp/sse) - Message Ingress: {SSE_BASE_PATH}/message (Default: /mcp/message)

Tool Activation Control

The environment variable ENABLE_TOOLS governs which tool groups are accessible. This variable accepts a comma-separated list of group identifiers. If left unset or empty, the entire toolset is enabled by default.

Available Tool Groupings:

  • gemini: Access to Gemini-powered informational retrieval.
  • fetch: Generic HTTP content retrieval mechanisms.
  • brave_search: Integration with Brave Search services.
  • google_maps: Geospatial data querying capabilities.
  • confluence: Tools for interacting with Atlassian Confluence documentation.
  • youtube: Utilities for managing and querying YouTube data.
  • jira: Functions for interacting with Jira issue tracking.
  • gitlab: Operations relating to GitLab repositories and DevOps artifacts.
  • script: Secure execution environment for local shell scripts.
  • rag: Retrieval-Augmented Generation (RAG) memory management functions.
  • deepseek: Advanced reasoning via Deepseek AI, contingent on USE_OLLAMA_DEEPSEEK setting (default Ollama endpoint: http://localhost:11434 using deepseek-r1:8b).

Available Toolset Reference

calendar_create_event

Registers a new appointment in Google Calendar.

Arguments:

  • summary (String) (Required): Event designation.
  • description (String): Detailed notes for the event.
  • start_time (String) (Required): RFC3339 timestamp for the start (e.g., 2023-12-25T09:00:00Z).
  • end_time (String) (Required): RFC3339 timestamp for the conclusion.
  • attendees (String): Emails of participants, semicolon-separated.

calendar_list_events

Retrieves a schedule of forthcoming events from Google Calendar.

Arguments:

  • time_min (String): Search initiation point in RFC3339 format (defaults to current moment).
  • time_max (String): Search termination point in RFC3339 format (defaults to one week forward).
  • max_results (Number): Cap on the number of entries returned (default: 10).

calendar_update_event

Modifies parameters of an existing Google Calendar entry.

Arguments:

  • event_id (String) (Required): Unique identifier of the target event.
  • summary (String): New title.
  • description (String): Revised narrative.
  • start_time (String): New beginning RFC3339 time.
  • end_time (String): New ending RFC3339 time.
  • attendees (String): Revised list of participant emails.

calendar_respond_to_event

Submits a response (Accept/Decline/Tentative) to a calendar invitation.

Arguments:

  • event_id (String) (Required): Identifier of the invitation.
  • response (String) (Required): Status of response (accepted, declined, or tentative).

confluence_search

Executes a query against Confluence content using CQL.

Arguments:

  • query (String) (Required): Query structured according to Atlassian Confluence Query Language (CQL).

confluence_get_page

Fetches the content source of a specified Confluence page.

Arguments:

  • page_id (String) (Required): Identifier for the Confluence page.

confluence_create_page

Generates a novel document within a specified Confluence space.

Arguments:

  • space_key (String) (Required): Identifier for the target space.
  • title (String) (Required): Title for the new page.
  • content (String) (Required): Page body rendered in storage format (XHTML).
  • parent_id (String): Identifier of the parent page (optional).

confluence_update_page

Revises content or metadata for an existing Confluence document.

Arguments:

  • page_id (String) (Required): Identifier for the document being modified.
  • title (String): Revised title (optional).
  • content (String): Updated content in storage format (XHTML).
  • version_number (String): Required version marker for optimistic locking.

confluence_compare_versions

Generates a diff between two recorded states of a Confluence page.

Arguments:

  • page_id (String) (Required): Confluence page identifier.
  • source_version (String) (Required): The baseline version number for comparison.
  • target_version (String) (Required): The version number to compare against.

deepseek_reasoning

Leverages Deepseek AI models for complex, multi-layered analytical processing, strategic planning, and critical decision support.

Arguments:

  • question (String) (Required): The primary analytical problem statement requiring deep examination.
  • context (String) (Required): Defines the operational scope and purpose within the MCP framework.
  • knowledge (String): Supplementary data, including conversational history, indexed knowledge artifacts, and structured inputs pertinent to the reasoning task.

get_web_content

Retrieves raw textual data from any accessible Uniform Resource Locator (URL) via HTTP or HTTPS protocols.

Arguments:

  • url (String) (Required): The absolute network address to retrieve data from (e.g., https://example.com).

gchat_list_spaces

Enumerates all collaborative spaces or rooms accessible within Google Chat.

gchat_send_message

Dispatches a textual message to a designated Google Chat space or individual user.

Arguments:

  • space_name (String) (Required): The identifier/name of the target room/contact.
  • message (String) (Required): The body of text to transmit.

ai_web_search

Performs real-time information retrieval utilizing the Google AI Search mechanism.

Arguments:

  • question (String) (Required): The explicit informational query to resolve.
  • context (String) (Required): Contextual framing to refine the Gemini model's interpretation of the query.

gitlab_list_projects

Returns a catalog of GitLab repositories associated with a specified group.

Arguments:

  • group_id (String) (Required): The numerical identifier for the GitLab group.
  • search (String): Optional string to filter results; terms separated by + or %20 are combined with an implicit AND logic.

gitlab_get_project

Retrieves comprehensive metadata for a specified GitLab repository.

Arguments:

  • project_path (String) (Required): The full path/namespace of the repository.

gitlab_list_mrs

Obtains a list of Merge Requests (MRs) within a project.

Arguments:

  • project_path (String) (Required): The project's full path.
  • state (String) (Default: all): Filter by MR status (opened, closed, merged).

gitlab_get_mr_details

Fetches granular information pertaining to a specific Merge Request.

Arguments:

  • project_path (String) (Required): The project's full path.
  • mr_iid (String) (Required): The internal ID number of the Merge Request.

gitlab_create_MR_note

Adds a textual annotation or comment to an existing GitLab Merge Request.

Arguments:

  • project_path (String) (Required): The project's full path.
  • mr_iid (String) (Required): The internal ID of the MR.
  • comment (String) (Required): The content of the annotation.

gitlab_get_file_content

Extracts the source code or text content of a file from a specific branch/commit in a GitLab repository.

Arguments:

  • project_path (String) (Required): The project's repository path.
  • file_path (String) (Required): Relative path to the target file within the repository structure.
  • ref (String) (Required): The specific branch, tag, or commit SHA reference point.

gitlab_list_pipelines

Retrieves the execution history of CI/CD pipelines for a project.

Arguments:

  • project_path (String) (Required): The project's repository path.
  • status (String) (Default: all): Filter by pipeline execution result (running, failed, success, etc.).

gitlab_list_commits

Lists commits in a repository based on temporal boundaries.

Arguments:

  • project_path (String) (Required): The project's repository path.
  • since (String) (Required): Date boundary start (YYYY-MM-DD format).
  • until (String): Date boundary end (YYYY-MM-DD format; defaults to today if omitted).
  • ref (String) (Required): The branch, tag, or SHA defining the commit lineage.

gitlab_get_commit_details

Retrieves detailed metadata for a specific commit hash.

Arguments:

  • project_path (String) (Required): The project's repository path.
  • commit_sha (String) (Required): The full SHA hash of the commit.

gitlab_list_user_events

Queries GitLab for a user's activity log within a specified timeframe.

Arguments:

  • username (String) (Required): The target GitLab user identifier.
  • since (String) (Required): Start date for activity logging (YYYY-MM-DD).
  • until (String): End date for activity logging (YYYY-MM-DD; defaults to today if omitted).

gitlab_list_group_users

Returns a roster of all members belonging to a GitLab group.

Arguments:

  • group_id (String) (Required): The numerical identifier of the GitLab group.

gitlab_create_mr

Initiates the creation process for a new Merge Request.

Arguments:

  • project_path (String) (Required): The target repository's full path.
  • source_branch (String) (Required): The branch containing new work.
  • target_branch (String) (Required): The branch intended to absorb the changes.
  • title (String) (Required): The descriptive title for the MR.
  • description (String): Detailed explanation for the merge request.

gitlab_clone_repo

Executes a local clone or updates an existing local copy of a GitLab repository.

Arguments:

  • project_path (String) (Required): The path to the repository.
  • ref (String): Specific branch or tag to checkout (defaults to the repository's primary branch).

gmail_search

Queries the user's Gmail inbox using standard Gmail search operators.

Arguments:

  • query (String) (Required): The search predicate conforming to Gmail syntax.

gmail_move_to_spam

Archives specified emails by flagging them as spam within Gmail.

Arguments:

  • message_ids (String) (Required): A comma-separated collection of unique message identifiers.

gmail_create_filter

Establishes a new automated filtering rule within Gmail based on specified criteria and actions.

Arguments:

  • from (String): Sender address criterion.
  • to (String): Recipient address criterion.
  • subject (String): Subject line criterion.
  • query (String): Additional custom search terms.
  • add_label (Boolean): Flag to apply a label to matching mail.
  • label_name (String): Name of the label to apply (required if add_label is true).
  • mark_important (Boolean): Flag to mark matches as important.
  • mark_read (Boolean): Flag to mark matches as read upon arrival.
  • archive (Boolean): Flag to bypass the inbox for matches.

gmail_list_filters

Retrieves a manifest of all currently active email filters for the account.

gmail_list_labels

Retrieves a list of all defined labels within the Gmail account.

gmail_delete_filter

Permanently removes a specific email filter from the account based on its ID.

Arguments:

  • filter_id (String) (Required): The unique system identifier of the filter targeted for removal.

gmail_delete_label

Deletes a designated label from the Gmail account structure.

Arguments:

  • label_id (String) (Required): The unique system identifier of the label targeted for removal.

jira_get_issue

Fetches comprehensive attributes for a singular Jira ticket, including status, assignment, description, and workflow transition options.

Arguments:

  • issue_key (String) (Required): The canonical key of the issue (e.g., KP-2, PROJ-123).

jira_search_issue

Executes a search against Jira tickets using JQL (Jira Query Language) and returns summary data for matches.

Arguments:

  • jql (String) (Required): The JQL expression (e.g., 'project = KP AND status = "In Progress"').

jira_list_sprints

Obtains details for all active and planned sprints associated with a specified Jira board.

Arguments:

  • board_id (String) (Required): The numerical identifier of the Jira board.

jira_create_issue

Registers a new issue entity within a Jira project.

Arguments:

  • project_key (String) (Required): The project identifier (e.g., KP, PROJ).
  • summary (String) (Required): Concise title of the problem/task.
  • description (String) (Required): Comprehensive detail narrative.
  • issue_type (String) (Required): Classification of the ticket (e.g., Bug, Task, Story).

jira_update_issue

Applies granular modifications to an existing Jira ticket's fields. Only fields explicitly provided will be altered.

Arguments:

  • issue_key (String) (Required): The unique identifier of the ticket to modify (e.g., KP-2).
  • summary (String): New summary text.
  • description (String): New description text.

jira_list_statuses

Retrieves the exhaustive list of valid status identifiers and their corresponding names for a given Jira project.

Arguments:

  • project_key (String) (Required): The project identifier.

jira_transition_issue

Advances an issue to the next allowable state in its defined workflow, contingent upon a valid transition ID.

Arguments:

  • issue_key (String) (Required): The ticket identifier (e.g., KP-123).
  • transition_id (String) (Required): The ID corresponding to the desired workflow step.
  • comment (String): Optional note appended to the transition action.

RAG_memory_index_content

Integrates raw text content into the specified vector memory collection, supporting insertion or modification.

Arguments:

  • collection (String) (Required): Name of the vector store collection.
  • filePath (String) (Required): Source file path associated with the content.
  • payload (String) (Required): The raw textual data to embed.
  • model (String): Embedding model selection (default: text-embedding-3-large).

RAG_memory_index_file

Embeds the data from a local file system entry into a designated vector memory collection.

Arguments:

  • collection (String) (Required): Name of the vector store collection.
  • filePath (String) (Required): Absolute path to the file on disk.

RAG_memory_create_collection

Initializes a new, empty vector index collection for RAG purposes.

Arguments:

  • collection (String) (Required): Name for the new collection.
  • model (String): Embedding model to utilize (default: text-embedding-3-large).

RAG_memory_delete_collection

Decommissions and removes an entire vector collection from persistent memory storage.

Arguments:

  • collection (String) (Required): Name of the collection to erase.

RAG_memory_list_collections

Displays a directory of all currently maintained vector collections.

RAG_memory_search

Performs a semantic search against a specified vector collection using a keyword-based query.

Arguments:

  • collection (String) (Required): Name of the collection to query.
  • query (String) (Required): The lexical input used for vector similarity search.
  • model (String): Embedding model used for search comparison (default: text-embedding-3-large).

RAG_memory_delete_index_by_filepath

Removes all vector entries associated with a specific file path from a collection.

Arguments:

  • collection (String) (Required): Name of the vector store collection.
  • filePath (String) (Required): The path identifying the source material to purge.

execute_comand_line_script

Executes arbitrary shell commands in a controlled, sandboxed environment. Features built-in safety mechanisms including time limits and output capturing. Supports cross-platform execution through interpreter selection.

Arguments:

  • content (String) (Required): The script body or command string to execute.
  • interpreter (String) (Default: /bin/sh): The binary path invoking the execution environment (e.g., /bin/bash, /usr/bin/python, cmd.exe). Subject to an allow-list validation.
  • working_dir (String): Directory context for execution (defaults to user home). Path is validated to restrict scope.

web_search

Queries the public internet using the Brave Search API for current information.

Arguments:

  • query (String) (Required): The subject of the search (limit: 400 characters, 50 words).
  • count (Number) (Default: 5): Desired quantity of search results (range 1-20).
  • country (String) (Default: ALL): ISO country code filter for localization.

sequentialthinking

`A sophisticated apparatus for iterative, reflective problem resolution via structured thought decomposition. This mechanism enables dynamic analysis where insights can be refined, challenged, or expanded upon as comprehension deepens.

When to invoke this utility: - Deconstructing intricate challenges into discrete operational stages. - Designing systems that necessitate iterative refinement or course correction. - Situations demanding deep analysis where initial scope is ambiguous. - Problems requiring a multi-stage, dependent solution pathway. - Tasks demanding context persistence across multiple sequential steps. - Filtering out extraneous or non-pertinent data during analysis.

Core Capabilities: - The allocated total_thoughts estimate is fluid and adjustable mid-process. - Previous conceptualizations are open to direct revision or critical questioning. - Additional thoughts can be appended indefinitely, even post-initial conclusion. - Uncertainty can be explicitly stated while exploring alternate branches. - Thinking need not follow a strict linear progression; branching is supported. - Generates an initial working hypothesis. - Validates the hypothesis against the accumulated Chain of Thought (CoT). - Iterates until logical confidence in the solution is achieved. - Outputs a definitive final conclusion.

You are instructed to: 1. Establish an initial estimate for total_thoughts, remaining agile to update it. 2. Actively review and revise prior analytical steps as needed. 3. Introduce further steps if the resolution remains incomplete or suboptimal. 4. Document any inherent uncertainty in the reasoning chain. 5. Explicitly tag steps that constitute revision or initiate a conceptual branch. 6. Disregard data lacking relevance to the current analytical step. 7. Formulate a solution hypothesis at an appropriate juncture. 8. Verify the hypothesis against the preceding thought sequence. 9. Repeat the loop until the solution is deemed satisfactory. 10. Provide a singular, highly accurate final output. 11. Set next_thought_needed to false ONLY when the final, confirmed answer has been articulated.`

Arguments:

  • thought (String) (Required): The current step of analytical processing.
  • nextThoughtNeeded (Boolean) (Required): Indicator if further sequential steps are required.
  • thoughtNumber (Number) (Required): The sequential index of this thought step.
  • totalThoughts (Number) (Required): The current estimate of total steps required.
  • isRevision (Boolean): Flag indicating modification of prior thought(s).
  • revisesThought (Number): Index of the thought being superseded/amended.
  • branchFromThought (Number): Index marking the origin of a parallel path.
  • branchId (String): Identifier for the current parallel sequence.
  • needsMoreThoughts (Boolean): Flag for internal realization that process must continue.
  • result (String): The conclusive finding or solution derived from this step.
  • summary (String): A concise encapsulation of the thought's main contribution.

sequentialthinking_history

Recovers the recorded sequence of analytical steps executed within the current reflective process.

Arguments:

  • branchId (String): Optional parameter to retrieve history specific to an alternate execution branch.

tool_manager

Provides administrative control over the activation status of available MCP tools.

Arguments:

  • action (String) (Required): Operation type: list all, enable, or disable.
  • tool_name (String): The specific tool identifier subject to the enable/disable action.

tool_use_plan

Generates a structured execution strategy utilizing the system's toolset to address a specific user objective.

Arguments:

  • request (String) (Required): The user's high-level directive.
  • context (String) (Required): Environmental or preceding informational context relevant to planning.

youtube_transcript

Acquires the synchronized textual transcription from a specified YouTube video resource.

Arguments:

  • video_id (String) (Required): The unique identifier of the YouTube asset.

youtube_update_video

Modifies metadata (title, description, tags) for a user-managed YouTube video.

Arguments:

  • video_id (String) (Required): Identifier of the video asset.
  • title (String) (Required): New title string.
  • description (String) (Required): New description text.
  • keywords (String) (Required): Comma-delimited list of descriptive tags.
  • category (String) (Required): Numerical category ID for the video (refer to Google documentation for ID mapping).

youtube_get_video_details

Retrieves comprehensive descriptive information for a specific video.

Arguments:

  • video_id (String) (Required): Identifier of the YouTube video.

youtube_list_videos

Generates a manifest of videos uploaded under a specified user channel.

Arguments:

  • channel_id (String) (Required): Identifier for the YouTube channel.
  • max_results (Number) (Required): Limit on the quantity of video records to return.

Operational Context

Business administration tools encompass all necessary mechanisms—applications, controls, analytical routines, and established procedures—that organizations employ to navigate evolving market conditions, maintain competitive footing, and enhance overall corporate efficacy. These components are cross-functional, supporting domains such as strategic planning, workflow management, record-keeping, personnel administration, and decision governance.

Modern management toolsets have undergone profound transformations driven by rapid technological progression. This proliferation creates complexity in selecting optimal solutions for specific organizational needs, frequently driven by pressures to reduce overhead while maximizing revenue, deeply understanding consumer requirements, and precisely delivering products as specified.

In this dynamic environment, executive leadership must prioritize a strategic alignment of business tools with organizational objectives, rather than merely adopting the newest available technology. Superficial adoption without necessary customization often results in system instability. Selection criteria must be rigorous, followed by dedicated adaptation to the enterprise's unique operational context.

See Also

`