list_pipelinesLABSCO SUMMARY
Approvals and retries are the part worth having in chat.
Listing pipelines is convenient; approving a manual gate or retrying the stage that just failed is what saves an actual context switch during a deploy. The credential story is the good news here — profiles, SSO and instance roles all work, so nothing needs a permanent access key sitting in a dotfile.
What it is
An MCP server for AWS CodePipeline, written for Windsurf's Cascade assistant but usable from any MCP client. It covers the operational half of a pipeline: what state it is in, what ran, what failed, and the actions you would otherwise take in the console.
What you get
list_pipelineswith no parameters,get_pipeline_statefor one pipeline,get_pipeline_detailsfor its full definitionlist_pipeline_executions,get_pipeline_execution_logsfor one execution,trigger_pipelineto start a run,stop_pipeline_executionwith an optional reasonapprove_action— approve or reject a manual approval gate, taking the stage, action, token, a boolean and optional commentsretry_stage— re-run a failed stage of a specific executionget_pipeline_metrics— CloudWatch performance metrics over aperiod,startTimeandendTimetag_pipeline_resourcefor key-value tags, andcreate_pipeline_webhookwith a target action, authentication type such asGITHUB_HMAC, and JSON-path filters so a push to one branch triggers the pipeline
Requirements
An AWS principal with CodePipeline permissions, plus CloudWatch read access if you want metrics. You do not need long-lived keys in a file: set AWS_PROFILE to a named profile from ~/.aws/credentials, or use an SSO profile after aws sso login, or run on EC2, ECS, Lambda or EKS with an attached role and set only AWS_REGION. Static AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY work too. Node.js v14 or later; clone the repository, npm install, npm run build, then point the client at dist/index.js. Verify the profile first with aws sts get-caller-identity — an expired SSO session is the usual cause of a server that starts but cannot see anything. Package mcp-codepipeline-server at 1.0.0, ISC.
Setup effort
Build from source — git clone https://github.com/cuongdev/mcp-codepipeline-server.git
USE CASES
Unblocking a deploy waiting on approval
Approve the manual action with a comment, or reject it, without opening the console.
Recovering from a flaky stage
Read the execution logs, then retry just the stage that failed rather than the whole pipeline.
Answering how long deploys have been taking
Pull CloudWatch metrics over a window and compare against last month.
Wiring a repository push to a pipeline
Create the webhook with the authentication type and a filter that matches only the branch you care about.
Stopping a run that should not have started
Stop the execution with a reason recorded, then look at what triggered it.
12 tools
Listed in project docs. Your client may show a different list.
get_pipeline_statelist_pipeline_executionstrigger_pipelinestop_pipeline_executionget_pipeline_detailsget_pipeline_execution_logsget_pipeline_metricsapprove_actionretry_stagetag_pipeline_resourcecreate_pipeline_webhookBEFORE YOU INSTALL
What to know first
Tools you get
12 tools named in the project's documentation.
Requires
- Node.js v14 or later
- AWS credentials with permissions for CodePipeline (and CloudWatch read for metrics): an AWS_PROFILE (named or SSO profile), static AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, or an attached IAM role
- AWS_REGION set to the region your pipelines are in
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/cuongdev/mcp-codepipeline-server.git
cd mcp-codepipeline-server
npm install
npm run buildMCP Clients
Windsurf
{
"mcpServers": {
"codepipeline": {
"command": "node",
"args": [
"<YOUR_PATH_TO_MCP_CODEPIPELINE_SERVER>/dist/index.js"
],
"env": {
"AWS_REGION": "us-east-1",
"AWS_PROFILE": "<YOUR_AWS_PROFILE>"
}
}
}
}<YOUR_PATH_TO_MCP_CODEPIPELINE_SERVER> is the full path of your clone (npm run build creates dist/index.js there). us-east-1 is a sample; yours is the region your pipelines are in.