AIO Integration Hub
STDIOModel Context Protocol server with integrations for GitLab, Jira, Confluence, YouTube and more.
Model Context Protocol server with integrations for GitLab, Jira, Confluence, YouTube and more.
A powerful Model Context Protocol (MCP) server implementation with integrations for GitLab, Jira, Confluence, YouTube, and more. This server provides AI-powered search capabilities and various utility tools for development workflows.
To install AIO-MCP Server for Claude Desktop automatically via Smithery (will guide you through interactive CLI setup):
npx -y @smithery/cli install @athapong/aio-mcp --client claude
Note: Smithery will interactively prompt you for required configuration values and handle environment setup automatically
To set the go install
command to install into the Go bin path, you need to ensure your Go environment variables are correctly configured. Here's how to do it:
First, ensure you have a properly set GOPATH
environment variable, which by default is $HOME/go
on Unix-like systems or %USERPROFILE%\go
on Windows.
The go install
command places binaries in $GOPATH/bin
by default. Make sure this directory is in your system's PATH
environment variable.
Here's how to set this up on different operating systems:
# Add these to your ~/.bashrc, ~/.zshrc, or equivalent shell config file export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
After adding these lines, reload your shell configuration:
source ~/.bashrc # or ~/.zshrc
# Set environment variables [Environment]::SetEnvironmentVariable("GOPATH", "$env:USERPROFILE\go", "User") [Environment]::SetEnvironmentVariable("PATH", "$env:PATH;$env:USERPROFILE\go\bin", "User")
setx GOPATH "%USERPROFILE%\go" setx PATH "%PATH%;%USERPROFILE%\go\bin"
After setting these variables, you can verify they're working correctly with:
go env GOPATH echo $PATH # On Unix/Linux/macOS echo %PATH% # On Windows CMD $env:PATH # On Windows PowerShell
Now when you run go install
, the binaries will be installed to your $GOPATH/bin
directory, which is in your PATH, so you can run them from anywhere.
Finally, install the server:
go install github.com/athapong/aio-mcp@latest
.env
file with your configuration: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=
{ "mcpServers": { "aio-mcp": { "command": "aio-mcp", "args": ["-env", "/path/to/.env", "-sse", "-sse-addr", ":8080", "-sse-base-path", "/mcp"], } } }
{ "mcpServers": { "aio-mcp": { "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 you want to use openrouter for AI to help with reasoning on `tool_use_plan`, default is false "DEEPSEEK_API_KEY": "", // specify the deepseek api key if you want to use deepseek for AI to help with reasoning on `tool_use_plan` "OPENROUTER_API_KEY": "", // specify the openrouter api key if you want to use openrouter for AI to help with reasoning on `tool_use_plan` "DEEPSEEK_API_BASE": "", // specify the deepseek api key if you want to use deepseek for AI to help with reasoning on `tool_use_plan` "USE_OLLAMA_DEEPSEEK": "", // "true" if you want to use deepseek with local ollama, default is false "OLLAMA_URL": "" // default with http://localhost:11434 } } } }
AIO-MCP Server supports two modes of operation:
Stdio Mode (Default): The server communicates via standard input/output, which is the default mode used by Claude Desktop and other MCP clients.
SSE (Server-Sent Events) Mode: The server runs as an HTTP server that supports Server-Sent Events for real-time communication. This is useful for web-based clients or when you need to access the MCP server over a network.
You can enable SSE mode in one of two ways:
Command-line flags:
aio-mcp -sse -sse-addr ":8080" -sse-base-path "/mcp"
Environment variables (in your .env
file):
ENABLE_SSE=true
SSE_ADDR=:8080
SSE_BASE_PATH=/mcp
When SSE mode is enabled, the server will start an HTTP server that listens on the specified address. The server provides two endpoints:
{SSE_BASE_PATH}/sse
(default: /mcp/sse
){SSE_BASE_PATH}/message
(default: /mcp/message
)Clients can connect to the SSE endpoint to receive server events and send messages to the message endpoint.
There is a hidden variable ENABLE_TOOLS
in the environment variable. It is a comma separated list of tools group to enable. If not set, all tools will be enabled. Leave it empty to enable all tools.
Here is the list of tools group:
gemini
: Gemini-powered searchfetch
: Fetch toolsbrave_search
: Brave Search toolsgoogle_maps
: Google Maps toolsconfluence
: Confluence toolsyoutube
: YouTube toolsjira
: Jira toolsgitlab
: GitLab toolsscript
: Script toolsrag
: RAG toolsdeepseek
: Deepseek AI tools, including reasoning and advanced search if 'USE_OLLAMA_DEEPSEEK' is set to true, default ollama endpoint is http://localhost:11434 with model deepseek-r1:8bCreate a new event in Google Calendar
Arguments:
summary
(String) (Required): Title of the eventdescription
(String): Description of the eventstart_time
(String) (Required): Start time of the event in RFC3339 format (e.g., 2023-12-25T09:00:00Z)end_time
(String) (Required): End time of the event in RFC3339 formatattendees
(String): Comma-separated list of attendee email addressesList upcoming events in Google Calendar
Arguments:
time_min
(String): Start time for the search in RFC3339 format (default: now)time_max
(String): End time for the search in RFC3339 format (default: 1 week from now)max_results
(Number): Maximum number of events to return (default: 10)Update an existing event in Google Calendar
Arguments:
event_id
(String) (Required): ID of the event to updatesummary
(String): New title of the eventdescription
(String): New description of the eventstart_time
(String): New start time of the event in RFC3339 formatend_time
(String): New end time of the event in RFC3339 formatattendees
(String): Comma-separated list of new attendee email addressesRespond to an event invitation in Google Calendar
Arguments:
event_id
(String) (Required): ID of the event to respond toresponse
(String) (Required): Your response (accepted, declined, or tentative)Search Confluence
Arguments:
query
(String) (Required): Atlassian Confluence Query Language (CQL)Get Confluence page content
Arguments:
page_id
(String) (Required): Confluence page IDCreate a new Confluence page
Arguments:
space_key
(String) (Required): The key of the space where the page will be createdtitle
(String) (Required): Title of the pagecontent
(String) (Required): Content of the page in storage format (XHTML)parent_id
(String): ID of the parent page (optional)Update an existing Confluence page
Arguments:
page_id
(String) (Required): ID of the page to updatetitle
(String): New title of the page (optional)content
(String): New content of the page in storage format (XHTML)version_number
(String): Version number for optimistic locking (optional)Compare two versions of a Confluence page
Arguments:
page_id
(String) (Required): Confluence page IDsource_version
(String) (Required): Source version numbertarget_version
(String) (Required): Target version numberadvanced reasoning engine using Deepseek's AI capabilities for multi-step problem solving, critical analysis, and strategic decision support
Arguments:
question
(String) (Required): The structured query or problem statement requiring deep analysis and reasoningcontext
(String) (Required): Defines the operational context and purpose of the query within the MCP ecosystemknowledge
(String): Provides relevant chat history, knowledge base entries, and structured data context for MCP-aware reasoningFetches content from a given HTTP/HTTPS URL. This tool allows you to retrieve text content from web pages, APIs, or any accessible HTTP endpoints. Returns the raw content as text.
Arguments:
url
(String) (Required): The complete HTTP/HTTPS URL to fetch content from (e.g., https://example.com)List all available Google Chat spaces/rooms
Send a message to a Google Chat space or direct message
Arguments:
space_name
(String) (Required): Name of the space to send the message tomessage
(String) (Required): Text message to sendsearch the web by using Google AI Search. Best tool to update realtime information
Arguments:
question
(String) (Required): The question to ask. Should be a questioncontext
(String) (Required): Context/purpose of the question, helps Gemini to understand the question betterList GitLab projects
Arguments:
group_id
(String) (Required): gitlab group IDsearch
(String): Multiple terms can be provided, separated by an escaped space, either + or %20, and will be ANDed together. Example: one+two will match substrings one and two (in any order).Get GitLab project details
Arguments:
project_path
(String) (Required): Project/repo pathList merge requests
Arguments:
project_path
(String) (Required): Project/repo pathstate
(String) (Default: all): MR state (opened/closed/merged)Get merge request details
Arguments:
project_path
(String) (Required): Project/repo pathmr_iid
(String) (Required): Merge request IIDCreate a note on a merge request
Arguments:
project_path
(String) (Required): Project/repo pathmr_iid
(String) (Required): Merge request IIDcomment
(String) (Required): Comment textGet file content from a GitLab repository
Arguments:
project_path
(String) (Required): Project/repo pathfile_path
(String) (Required): Path to the file in the repositoryref
(String) (Required): Branch name, tag, or commit SHAList pipelines for a GitLab project
Arguments:
project_path
(String) (Required): Project/repo pathstatus
(String) (Default: all): Pipeline status (running/pending/success/failed/canceled/skipped/all)List commits in a GitLab project within a date range
Arguments:
project_path
(String) (Required): Project/repo pathsince
(String) (Required): Start date (YYYY-MM-DD)until
(String): End date (YYYY-MM-DD). If not provided, defaults to current dateref
(String) (Required): Branch name, tag, or commit SHAGet details of a commit
Arguments:
project_path
(String) (Required): Project/repo pathcommit_sha
(String) (Required): Commit SHAList GitLab user events within a date range
Arguments:
username
(String) (Required): GitLab usernamesince
(String) (Required): Start date (YYYY-MM-DD)until
(String): End date (YYYY-MM-DD). If not provided, defaults to current dateList all users in a GitLab group
Arguments:
group_id
(String) (Required): GitLab group IDCreate a new merge request
Arguments:
project_path
(String) (Required): Project/repo pathsource_branch
(String) (Required): Source branch nametarget_branch
(String) (Required): Target branch nametitle
(String) (Required): Merge request titledescription
(String): Merge request descriptionClone or update a GitLab repository locally
Arguments:
project_path
(String) (Required): Project/repo pathref
(String): Branch name or tag (optional, defaults to project's default branch)Search emails in Gmail using Gmail's search syntax
Arguments:
query
(String) (Required): Gmail search query. Follow Gmail's search syntaxMove specific emails to spam folder in Gmail by message IDs
Arguments:
message_ids
(String) (Required): Comma-separated list of message IDs to move to spamCreate a Gmail filter with specified criteria and actions
Arguments:
from
(String): Filter emails from this senderto
(String): Filter emails to this recipientsubject
(String): Filter emails with this subjectquery
(String): Additional search query criteriaadd_label
(Boolean): Add label to matching messageslabel_name
(String): Name of the label to add (required if add_label is true)mark_important
(Boolean): Mark matching messages as importantmark_read
(Boolean): Mark matching messages as readarchive
(Boolean): Archive matching messagesList all Gmail filters in the account
List all Gmail labels in the account
Delete a Gmail filter by its ID
Arguments:
filter_id
(String) (Required): The ID of the filter to deleteDelete a Gmail label by its ID
Arguments:
label_id
(String) (Required): The ID of the label to deleteRetrieve detailed information about a specific Jira issue including its status, assignee, description, subtasks, and available transitions
Arguments:
issue_key
(String) (Required): The unique identifier of the Jira issue (e.g., KP-2, PROJ-123)Search for Jira issues using JQL (Jira Query Language). Returns key details like summary, status, assignee, and priority for matching issues
Arguments:
jql
(String) (Required): JQL query string (e.g., 'project = KP AND status = "In Progress"')List all active and future sprints for a specific Jira board, including sprint IDs, names, states, and dates
Arguments:
board_id
(String) (Required): Numeric ID of the Jira board (can be found in board URL)Create a new Jira issue with specified details. Returns the created issue's key, ID, and URL
Arguments:
project_key
(String) (Required): Project identifier where the issue will be created (e.g., KP, PROJ)summary
(String) (Required): Brief title or headline of the issuedescription
(String) (Required): Detailed explanation of the issueissue_type
(String) (Required): Type of issue to create (common types: Bug, Task, Story, Epic)Modify an existing Jira issue's details. Supports partial updates - only specified fields will be changed
Arguments:
issue_key
(String) (Required): The unique identifier of the issue to update (e.g., KP-2)summary
(String): New title for the issue (optional)description
(String): New description for the issue (optional)Retrieve all available issue status IDs and their names for a specific Jira project
Arguments:
project_key
(String) (Required): Project identifier (e.g., KP, PROJ)Transition an issue through its workflow using a valid transition ID. Get available transitions from jira_get_issue
Arguments:
issue_key
(String) (Required): The issue to transition (e.g., KP-123)transition_id
(String) (Required): Transition ID from available transitions listcomment
(String): Optional comment to add with transitionIndex a content into memory, can be inserted or updated
Arguments:
collection
(String) (Required): Memory collection namefilePath
(String) (Required): content file pathpayload
(String) (Required): Plain text payloadmodel
(String): Embedding model to use (default: text-embedding-3-large)Index a local file into memory
Arguments:
collection
(String) (Required): Memory collection namefilePath
(String) (Required): Path to the local file to be indexedCreate a new vector collection in memory
Arguments:
collection
(String) (Required): Memory collection namemodel
(String): Embedding model to use (default: text-embedding-3-large)Delete a vector collection in memory
Arguments:
collection
(String) (Required): Memory collection nameList all vector collections in memory
Search for memory in a collection based on a query
Arguments:
collection
(String) (Required): Memory collection namequery
(String) (Required): search query, should be a keywordmodel
(String): Embedding model to use (default: text-embedding-3-large)Delete a vector index by filePath
Arguments:
collection
(String) (Required): Memory collection namefilePath
(String) (Required): Path to the local file to be deletedSafely execute command line scripts on the user's system with security restrictions. Features sandboxed execution, timeout protection, and output capture. Supports cross-platform scripting with automatic environment detection.
Arguments:
content
(String) (Required):interpreter
(String) (Default: /bin/sh): Path to interpreter binary (e.g. /bin/sh, /bin/bash, /usr/bin/python, cmd.exe). Validated against allowed list for securityworking_dir
(String): Execution directory path (default: user home). Validated to prevent unauthorized access to system locationsSearch the web using Brave Search API
Arguments:
query
(String) (Required): Query to search for (max 400 chars, 50 words)count
(Number) (Default: 5): Number of results (1-20, default 5)country
(String) (Default: ALL): Country code`A detailed tool for dynamic and reflective problem-solving through thoughts. This tool helps analyze problems through a flexible thinking process that can adapt and evolve. Each thought can build on, question, or revise previous insights as understanding deepens.
When to use this tool:
Key features:
Parameters explained:
You should:
Arguments:
thought
(String) (Required): Your current thinking stepnextThoughtNeeded
(Boolean) (Required): Whether another thought step is neededthoughtNumber
(Number) (Required): Current thought numbertotalThoughts
(Number) (Required): Estimated total thoughts neededisRevision
(Boolean): Whether this revises previous thinkingrevisesThought
(Number): Which thought is being reconsideredbranchFromThought
(Number): Branching point thought numberbranchId
(String): Branch identifierneedsMoreThoughts
(Boolean): If more thoughts are neededresult
(String): Final result or conclusion from this thoughtsummary
(String): Brief summary of the thought's key pointsRetrieve the thought history for the current thinking process
Arguments:
branchId
(String): Optional branch ID to get history forManage MCP tools - enable or disable tools
Arguments:
action
(String) (Required): Action to perform: list, enable, disabletool_name
(String): Tool name to enable/disableCreate a plan using available tools to solve the request
Arguments:
request
(String) (Required): Request to plan forcontext
(String) (Required): Context related to the requestGet YouTube video transcript
Arguments:
video_id
(String) (Required): YouTube video IDUpdate a video's title and description on YouTube
Arguments:
video_id
(String) (Required): ID of the video to updatetitle
(String) (Required): New title of the videodescription
(String) (Required): New description of the videokeywords
(String) (Required): Comma-separated list of keywords for the videocategory
(String) (Required): Category ID for the video. See https://developers.google.com/youtube/v3/docs/videoCategories/list for more information.Get details (title, description, ...) for a specific video
Arguments:
video_id
(String) (Required): ID of the videoList YouTube videos managed by the user
Arguments:
channel_id
(String) (Required): ID of the channel to list videos formax_results
(Number) (Required): Maximum number of videos to return