[{"data":1,"prerenderedAt":2088},["ShallowReactive",2],{"/blog/duo-agent-platform-with-mcp":3,"navigation-en-us":1308,"banner-en-us":1733,"footer-en-us":1743,"blog-post-authors-en-us-Itzik Gan Baruch":1988,"blog-related-posts-en-us-duo-agent-platform-with-mcp":2003,"blog-promotions-en-us":2026,"next-steps-en-us":2078},{"id":4,"title":5,"authors":6,"body":8,"category":1286,"date":1287,"description":1288,"extension":1289,"externalUrl":1290,"faq":1290,"featured":1291,"heroImage":1292,"meta":1293,"navigation":1294,"path":1295,"seo":1296,"slug":1298,"stem":1299,"tags":1300,"template":1305,"updatedDate":1306,"__hash__":1307},"blogPosts/en-us/blog/duo-agent-platform-with-mcp.md","Model Context Protocol integration",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":1266},"minimark",[11,24,30,64,79,91,96,99,102,106,109,123,126,130,133,137,146,169,173,185,195,199,214,266,275,507,519,523,543,744,758,761,780,787,791,794,799,805,810,816,820,823,861,869,873,881,890,895,900,933,941,1002,1009,1091,1095,1098,1106,1110,1113,1119,1123,1126,1153,1162,1166,1169,1183,1190,1198,1201,1205,1213,1217,1242,1245,1253,1262],[12,13,14],"p",{},[15,16,17,18,23],"em",{},"Welcome to Part 7 of our eight-part guide, ",[19,20,22],"a",{"href":21},"/blog/gitlab-duo-agent-platform-complete-getting-started-guide/","Getting started with GitLab Duo Agent Platform",", where you'll master building and deploying AI agents and workflows within your development lifecycle. Follow tutorials that take you from your first interaction to production-ready automation workflows with full customization.",[12,25,26],{},[27,28,29],"strong",{},"In this article:",[31,32,33,40,46,52,58],"ul",{},[34,35,36],"li",{},[19,37,39],{"href":38},"#what-is-mcp","What is Model Context Protocol (MCP)",[34,41,42],{},[19,43,45],{"href":44},"#setting-up-gitlab-mcp-client","GitLab as MCP client (connect to external services)",[34,47,48],{},[19,49,51],{"href":50},"#gitlab-mcp-server-capabilities","GitLab as MCP server (external AI tools access GitLab)",[34,53,54],{},[19,55,57],{"href":56},"#how-to-configure-mcp-server-in-your-ai-tool","Setup and configuration",[34,59,60],{},[19,61,63],{"href":62},"#using-the-mcp-server","Real-world examples",[12,65,66,67,72,73,78],{},"AI can accelerate development by generating code, debugging, and automating routine tasks. But on its own, it's limited to trained data or public sources, while developers often need access to internal systems like project trackers, dashboards, databases, design files in Figma, or documents in Google Drive.\nNow integrated into ",[19,68,71],{"href":69,"rel":70},"https://about.gitlab.com/gitlab-duo-agent-platform/",[],"GitLab Duo Agent Platform",", the Model Context Protocol (",[19,74,77],{"href":75,"rel":76},"https://about.gitlab.com/topics/ai/model-context-protocol/",[],"MCP",") gives AI secure access to internal services so developers can get comprehensive assistance directly within their workflows.",[80,81,82],"blockquote",{},[12,83,84,85,90],{},"🎯 Try ",[19,86,88],{"href":69,"rel":87},[],[27,89,71],{}," today!",[92,93,95],"h2",{"id":94},"what-is-mcp","What is MCP?",[12,97,98],{},"MCP, first introduced by Anthropic in 2024, is an open standard that connects AI with data and tools. It works as a secure two-way channel: MCP clients (AI applications, autonomous agents, or development tools) request data or actions, and MCP servers provide trusted, authorized responses from their connected data sources.",[12,100,101],{},"MCP servers act as secure bridges to various systems: They can connect to databases, APIs, file systems, cloud services, or any external service to retrieve and provide data. This enables AI tools and agents to go beyond their initial training data by allowing them to access real-time information and execute actions, such as rescheduling meetings or checking calendar availability, while maintaining strict security, privacy, and audit controls.",[92,103,105],{"id":104},"developer-focused-mcp-examples","Developer-focused MCP examples",[12,107,108],{},"Developers unlock powerful capabilities when connecting MCP to their development tools and workflows. Here are practical examples of what AI can do with MCP servers in a development context:",[31,110,111,114,117,120],{},[34,112,113],{},"Review open issues and create merge requests",[34,115,116],{},"Retrieve deployment logs and error traces",[34,118,119],{},"Check team communication in Slack about technical decisions",[34,121,122],{},"Reschedule meetings or checking calendar availability for team coordination.",[12,124,125],{},"These developer-focused capabilities enable AI to provide meaningful assistance directly within developers' workflows, without requiring context-switching between tools.",[92,127,129],{"id":128},"why-use-mcp","Why use MCP?",[12,131,132],{},"You may ask: Why use MCP if AI can already call system APIs directly? The challenge is that each API has its own authentication, data formats, and behaviors, which would require AI to use custom connectors for every system and continuously maintain them as APIs evolve, making direct integrations complex and error-prone. MCP addresses this by providing a standardized, secure interface that handles authentication, permissions, and data translation. This enables AI tools to connect reliably to any system, while simplifying integration and ensuring consistent, safe behavior.",[92,134,136],{"id":135},"gitlabs-mcp-support","GitLab's MCP support",[12,138,139,140,145],{},"GitLab extends ",[19,141,144],{"href":142,"rel":143},"https://about.gitlab.com/blog/gitlab-duo-chat-gets-agentic-ai-makeover/",[],"Duo Agentic Chat"," with MCP support, shattering the barriers that previously isolated AI from the tools developers use every day. This empowers developers to access their entire toolkit directly from their favorite IDE, in natural language, enabling GitLab Duo Agent Platform to deliver comprehensive assistance without breaking developer flow or forcing disruptive context switches.\nGitLab provides comprehensive MCP support through two complementary workflows:",[31,147,148,159],{},[34,149,150,158],{},[27,151,152,157],{},[19,153,156],{"href":154,"rel":155},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_clients/",[],"MCP client workflow",":"," Duo Agent Platform serves as an MCP client, allowing features to access various external tools and services.",[34,160,161,168],{},[27,162,163,157],{},[19,164,167],{"href":165,"rel":166},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/",[],"MCP server workflow"," GitLab also provides MCP server capabilities, enabling AI tools and applications like Claude Desktop, Cursor, and other MCP-compatible tools to connect securely to your GitLab instance.",[92,170,172],{"id":171},"interactive-walkthrough-demo-of-the-mcp-client-workflow","Interactive walkthrough demo of the MCP client workflow",[12,174,175,178,179,184],{},[27,176,177],{},"Picture this common Monday morning scenario:"," Your company's checkout service is throwing timeout errors. Customers can't complete purchases, and you need to investigate fast. Normally, you'd open Jira to review the incident ticket, scroll through Slack for updates, and check Grafana dashboards for error spikes. With GitLab's MCP support, you can do all of this in natural language directly from the chat in your IDE. MCP correlates data across all your systems, giving you the full picture instantly, without leaving your development workflow.\nTo experience this capability firsthand, we've created an ",[19,180,183],{"href":181,"rel":182},"https://gitlab.navattic.com/mcp",[],"interactive walkthrough"," illustrating the payment service scenario above. Click the image below to start the demo.",[12,186,187],{},[19,188,190],{"href":181,"rel":189},[],[191,192],"img",{"alt":193,"src":194},"MCP walkthrough","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758206468/osf0wkwe1l45oc6zjdhr.png",[92,196,198],{"id":197},"setting-up-gitlab-mcp-client","Setting up GitLab MCP client",[12,200,201,202,207,208,213],{},"Before you can start querying data through ",[19,203,206],{"href":204,"rel":205},"https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/",[],"GitLab Duo Agentic Chat"," or the ",[19,209,212],{"href":210,"rel":211},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/software_development/",[],"software development flow",", you need to configure MCP in your development environment. The steps include:",[31,215,216,230,236],{},[34,217,218,221,222,225,226,229],{},[27,219,220],{},"Turn on Feature preview"," — In your Group settings, navigate to ",[27,223,224],{},"GitLab Duo"," in the left sidebar, then check the box for \"Turn on experiment and beta GitLab Duo features\" under the ",[27,227,228],{},"Feature preview"," section.",[34,231,232,235],{},[27,233,234],{},"Turn on MCP for your group"," — Enable MCP support in your GitLab group settings to allow Duo features to connect to external systems.",[34,237,238,241,242,246,247],{},[27,239,240],{},"Set up MCP servers"," — Define the MCP servers in JSON format in the ",[243,244,245],"code",{},"mcp.json"," file. Create the file in this location:",[31,248,249,258],{},[34,250,251,254,255],{},[27,252,253],{},"Windows:"," ",[243,256,257],{},"C:\\Users\\\u003Cusername>\\AppData\\Roaming\\GitLab\\duo\\mcp.json",[34,259,260,254,263],{},[27,261,262],{},"All other operating systems:",[243,264,265],{},"~/.gitlab/duo/mcp.json",[12,267,268,269,274],{},"For workspace-specific configurations, see ",[19,270,273],{"href":271,"rel":272},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_clients/#create-workspace-configuration",[],"workspace configuration setup",".",[276,277,282],"pre",{"className":278,"code":279,"language":280,"meta":281,"style":281},"language-json shiki shiki-themes github-light","{\n  \"mcpServers\": {\n    \"server-name\": {\n      \"type\": \"stdio\",\n      \"command\": \"path/to/server\",\n      \"args\": [\"--arg1\", \"value1\"],\n      \"env\": {\n        \"ENV_VAR\": \"value\"\n      },\n      \"approvedTools\": true\n    },\n    \"http-server\": {\n      \"type\": \"http\",\n      \"url\": \"http://localhost:3000/mcp\",\n      \"approvedTools\": [\"read_file\", \"search\"]\n    },\n    \"sse-server\": {\n      \"type\": \"sse\",\n      \"url\": \"http://localhost:3000/mcp/sse\"\n    }\n  }\n}\n","json","",[243,283,284,293,303,311,327,340,361,369,380,386,397,403,411,423,436,454,459,467,479,489,495,501],{"__ignoreMap":281},[285,286,289],"span",{"class":287,"line":288},"line",1,[285,290,292],{"class":291},"sgsFI","{\n",[285,294,296,300],{"class":287,"line":295},2,[285,297,299],{"class":298},"sYu0t","  \"mcpServers\"",[285,301,302],{"class":291},": {\n",[285,304,306,309],{"class":287,"line":305},3,[285,307,308],{"class":298},"    \"server-name\"",[285,310,302],{"class":291},[285,312,314,317,320,324],{"class":287,"line":313},4,[285,315,316],{"class":298},"      \"type\"",[285,318,319],{"class":291},": ",[285,321,323],{"class":322},"sYBdl","\"stdio\"",[285,325,326],{"class":291},",\n",[285,328,330,333,335,338],{"class":287,"line":329},5,[285,331,332],{"class":298},"      \"command\"",[285,334,319],{"class":291},[285,336,337],{"class":322},"\"path/to/server\"",[285,339,326],{"class":291},[285,341,343,346,349,352,355,358],{"class":287,"line":342},6,[285,344,345],{"class":298},"      \"args\"",[285,347,348],{"class":291},": [",[285,350,351],{"class":322},"\"--arg1\"",[285,353,354],{"class":291},", ",[285,356,357],{"class":322},"\"value1\"",[285,359,360],{"class":291},"],\n",[285,362,364,367],{"class":287,"line":363},7,[285,365,366],{"class":298},"      \"env\"",[285,368,302],{"class":291},[285,370,372,375,377],{"class":287,"line":371},8,[285,373,374],{"class":298},"        \"ENV_VAR\"",[285,376,319],{"class":291},[285,378,379],{"class":322},"\"value\"\n",[285,381,383],{"class":287,"line":382},9,[285,384,385],{"class":291},"      },\n",[285,387,389,392,394],{"class":287,"line":388},10,[285,390,391],{"class":298},"      \"approvedTools\"",[285,393,319],{"class":291},[285,395,396],{"class":298},"true\n",[285,398,400],{"class":287,"line":399},11,[285,401,402],{"class":291},"    },\n",[285,404,406,409],{"class":287,"line":405},12,[285,407,408],{"class":298},"    \"http-server\"",[285,410,302],{"class":291},[285,412,414,416,418,421],{"class":287,"line":413},13,[285,415,316],{"class":298},[285,417,319],{"class":291},[285,419,420],{"class":322},"\"http\"",[285,422,326],{"class":291},[285,424,426,429,431,434],{"class":287,"line":425},14,[285,427,428],{"class":298},"      \"url\"",[285,430,319],{"class":291},[285,432,433],{"class":322},"\"http://localhost:3000/mcp\"",[285,435,326],{"class":291},[285,437,439,441,443,446,448,451],{"class":287,"line":438},15,[285,440,391],{"class":298},[285,442,348],{"class":291},[285,444,445],{"class":322},"\"read_file\"",[285,447,354],{"class":291},[285,449,450],{"class":322},"\"search\"",[285,452,453],{"class":291},"]\n",[285,455,457],{"class":287,"line":456},16,[285,458,402],{"class":291},[285,460,462,465],{"class":287,"line":461},17,[285,463,464],{"class":298},"    \"sse-server\"",[285,466,302],{"class":291},[285,468,470,472,474,477],{"class":287,"line":469},18,[285,471,316],{"class":298},[285,473,319],{"class":291},[285,475,476],{"class":322},"\"sse\"",[285,478,326],{"class":291},[285,480,482,484,486],{"class":287,"line":481},19,[285,483,428],{"class":298},[285,485,319],{"class":291},[285,487,488],{"class":322},"\"http://localhost:3000/mcp/sse\"\n",[285,490,492],{"class":287,"line":491},20,[285,493,494],{"class":291},"    }\n",[285,496,498],{"class":287,"line":497},21,[285,499,500],{"class":291},"  }\n",[285,502,504],{"class":287,"line":503},22,[285,505,506],{"class":291},"}\n",[31,508,509],{},[34,510,511,514,515,274],{},[27,512,513],{},"Install and configure your IDE"," — Ensure VSCodium or Visual Studio Code is installed along with the GitLab Workflow extension (Version 6.28.2 or later for basic MCP support, 6.35.6 or later for full support).\nFor full step-by-step instructions, configuration examples, and troubleshooting tips, see the ",[19,516,518],{"href":154,"rel":517},[],"GitLab MCP clients documentation",[92,520,522],{"id":521},"example-project","Example project",[12,524,525,526,531,532,535,536,538,539,542],{},"To complement the walkthrough, we are sharing the ",[19,527,530],{"href":528,"rel":529},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/mcp/gitlab-duo-mcp-demo.git",[],"project"," that served as its ",[27,533,534],{},"foundation",". This project allows you to reproduce the same flow in your own environment and explore GitLab's MCP capabilities hands-on.\nIt demonstrates MCP functionality in a simulated enterprise setup, using mock data from Jira, Slack, and Grafana to model an incident response scenario. The included ",[243,537,245],{}," configuration shows how to connect to a local MCP server (",[243,540,541],{},"enterprise-data-v2",") or optionally extend the setup with AWS services for cloud integration.",[276,544,546],{"className":278,"code":545,"language":280,"meta":281,"style":281},"{\n  \"mcpServers\": {\n    \"enterprise-data-v2\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"src/server.js\"],\n      \"cwd\": \"/path/to/your/project\"\n    },\n    \"aws-knowledge\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"https://knowledge-mcp.global.api.aws\"]\n    },\n    \"aws-console\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"@imazhar101/mcp-aws-server\"],\n      \"env\": {\n        \"AWS_REGION\": \"YOUR_REGION\",\n        \"AWS_PROFILE\": \"default\"\n      }\n    }\n  }\n}\n",[243,547,548,552,558,565,575,586,597,607,611,618,628,639,655,659,666,676,686,697,703,715,725,730,734,739],{"__ignoreMap":281},[285,549,550],{"class":287,"line":288},[285,551,292],{"class":291},[285,553,554,556],{"class":287,"line":295},[285,555,299],{"class":298},[285,557,302],{"class":291},[285,559,560,563],{"class":287,"line":305},[285,561,562],{"class":298},"    \"enterprise-data-v2\"",[285,564,302],{"class":291},[285,566,567,569,571,573],{"class":287,"line":313},[285,568,316],{"class":298},[285,570,319],{"class":291},[285,572,323],{"class":322},[285,574,326],{"class":291},[285,576,577,579,581,584],{"class":287,"line":329},[285,578,332],{"class":298},[285,580,319],{"class":291},[285,582,583],{"class":322},"\"node\"",[285,585,326],{"class":291},[285,587,588,590,592,595],{"class":287,"line":342},[285,589,345],{"class":298},[285,591,348],{"class":291},[285,593,594],{"class":322},"\"src/server.js\"",[285,596,360],{"class":291},[285,598,599,602,604],{"class":287,"line":363},[285,600,601],{"class":298},"      \"cwd\"",[285,603,319],{"class":291},[285,605,606],{"class":322},"\"/path/to/your/project\"\n",[285,608,609],{"class":287,"line":371},[285,610,402],{"class":291},[285,612,613,616],{"class":287,"line":382},[285,614,615],{"class":298},"    \"aws-knowledge\"",[285,617,302],{"class":291},[285,619,620,622,624,626],{"class":287,"line":388},[285,621,316],{"class":298},[285,623,319],{"class":291},[285,625,323],{"class":322},[285,627,326],{"class":291},[285,629,630,632,634,637],{"class":287,"line":399},[285,631,332],{"class":298},[285,633,319],{"class":291},[285,635,636],{"class":322},"\"npx\"",[285,638,326],{"class":291},[285,640,641,643,645,648,650,653],{"class":287,"line":405},[285,642,345],{"class":298},[285,644,348],{"class":291},[285,646,647],{"class":322},"\"mcp-remote\"",[285,649,354],{"class":291},[285,651,652],{"class":322},"\"https://knowledge-mcp.global.api.aws\"",[285,654,453],{"class":291},[285,656,657],{"class":287,"line":413},[285,658,402],{"class":291},[285,660,661,664],{"class":287,"line":425},[285,662,663],{"class":298},"    \"aws-console\"",[285,665,302],{"class":291},[285,667,668,670,672,674],{"class":287,"line":438},[285,669,316],{"class":298},[285,671,319],{"class":291},[285,673,323],{"class":322},[285,675,326],{"class":291},[285,677,678,680,682,684],{"class":287,"line":456},[285,679,332],{"class":298},[285,681,319],{"class":291},[285,683,636],{"class":322},[285,685,326],{"class":291},[285,687,688,690,692,695],{"class":287,"line":461},[285,689,345],{"class":298},[285,691,348],{"class":291},[285,693,694],{"class":322},"\"@imazhar101/mcp-aws-server\"",[285,696,360],{"class":291},[285,698,699,701],{"class":287,"line":469},[285,700,366],{"class":298},[285,702,302],{"class":291},[285,704,705,708,710,713],{"class":287,"line":481},[285,706,707],{"class":298},"        \"AWS_REGION\"",[285,709,319],{"class":291},[285,711,712],{"class":322},"\"YOUR_REGION\"",[285,714,326],{"class":291},[285,716,717,720,722],{"class":287,"line":491},[285,718,719],{"class":298},"        \"AWS_PROFILE\"",[285,721,319],{"class":291},[285,723,724],{"class":322},"\"default\"\n",[285,726,727],{"class":287,"line":497},[285,728,729],{"class":291},"      }\n",[285,731,732],{"class":287,"line":503},[285,733,494],{"class":291},[285,735,737],{"class":287,"line":736},23,[285,738,500],{"class":291},[285,740,742],{"class":287,"line":741},24,[285,743,506],{"class":291},[12,745,746,749,750,753,754,757],{},[27,747,748],{},"Security note:"," The ",[243,751,752],{},"aws-console"," uses a community-developed MCP server package (",[243,755,756],{},"@imazhar101/mcp-aws-server",") for AWS integration that has not been independently verified. This is intended for demonstration and learning purposes only. For production use, evaluate packages thoroughly or use official alternatives.",[12,759,760],{},"Additionally, configure AWS credentials using AWS CLI profiles or IAM roles rather than hardcoding them in the configuration file. The AWS SDK will automatically discover credentials from your environment, which is the recommended approach for enterprise governance and security compliance.",[12,762,763,764,768,769,772,773,776,777,779],{},"To get started, ",[19,765,767],{"href":528,"rel":766},[],"clone the project",", install dependencies with ",[243,770,771],{},"npm install",", then start the local MCP server with ",[243,774,775],{},"npm start",". Create an ",[243,778,265],{}," file with the configuration above, update the file path to match your local setup, and restart VS Code to load the MCP configuration. Optionally, add your AWS credentials to experience live cloud integration.",[12,781,782,783,274],{},"Clone the project here: ",[19,784,786],{"href":528,"rel":785},[],"GitLab Duo MCP Demo",[92,788,790],{"id":789},"example-prompts-to-try-with-the-demo-project","Example prompts to try with the demo project",[12,792,793],{},"Once you've configured the example project, you can start exploring your data and tools directly from GitLab Duo Agentic Chat in your IDE. Here are some prompts you can try:",[31,795,796],{},[34,797,798],{},"\"What tools can you access through MCP?\"",[12,800,801],{},[191,802],{"alt":803,"src":804},"What tools can you access through MCP?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203432/xmahjenvoa82ov3kttqx.png",[31,806,807],{},[34,808,809],{},"\"Show me recent Slack discussions about the database issues.\"",[12,811,812],{},[191,813],{"alt":814,"src":815},"Slack discussion about tools to access through MCP","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203432/wdwp5xzq6umeanb1xwbq.png",[92,817,819],{"id":818},"gitlab-mcp-server-capabilities","GitLab MCP server capabilities",[12,821,822],{},"So far, we've looked at how GitLab Duo Agent Platform acts as an MCP client, connecting to external MCP servers. Now, let's explore the GitLab MCP server capabilities.\nThe GitLab MCP server lets AI tools like Cursor or Claude Desktop connect securely to your GitLab instance and work with your development data through natural language. Authentication is handled through OAuth 2.0 Dynamic Client Registration, so AI tools can register automatically and access your GitLab data with proper authorization.\nCurrently, MCP server supports these tools:",[31,824,825,831,837,843,849,855],{},[34,826,827,830],{},[27,828,829],{},"Issues"," — get details or create new issues",[34,832,833,836],{},[27,834,835],{},"Merge requests"," — create, view details, commits, diffs, and pipelines",[34,838,839,842],{},[27,840,841],{},"Pipelines"," — list, create, update, retry, cancel, and delete pipelines and jobs",[34,844,845,848],{},[27,846,847],{},"Work item notes"," — create and retrieve comments on issues and merge requests",[34,850,851,854],{},[27,852,853],{},"Search"," — search across your GitLab instance, search labels, and run semantic code search",[34,856,857,860],{},[27,858,859],{},"Server info"," — check the MCP server version",[12,862,863,864,274],{},"For the complete list of available tools and capabilities, see the ",[19,865,868],{"href":866,"rel":867},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#available-tools-and-capabilities",[],"MCP server docs",[92,870,872],{"id":871},"interactive-walkthrough-gitlab-mcp-server-in-action","Interactive walkthrough: GitLab MCP server in action",[12,874,875,876,880],{},"Experience the GitLab MCP server firsthand with our ",[19,877,183],{"href":878,"rel":879},"https://gitlab.navattic.com/gitlab-mcp-server",[],".\nIt guides you through setting up Cursor with MCP server and using Cursor Chat to securely connect to your GitLab instance. You'll see how to perform actions like viewing issues, creating a new issue, and checking merge requests, all directly through natural language, without leaving your development environment.",[12,882,883],{},[19,884,886],{"href":878,"rel":885},[],[191,887],{"alt":888,"src":889},"MCP server walkthrough","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203431/y2zdd71miiw0pkwd0a5a.png",[891,892,894],"h3",{"id":893},"how-to-configure-mcp-server-in-your-ai-tool","How to configure MCP server in your AI tool",[12,896,897],{},[27,898,899],{},"Prerequisites:",[31,901,902,912,922],{},[34,903,904,905,907,908,911],{},"Enable ",[27,906,224],{}," and ",[27,909,910],{},"beta and experimental features"," in your GitLab instance (self-managed, Dedicated) or top-level group on GitLab.com",[34,913,914,915,907,918,921],{},"Ensure ",[27,916,917],{},"Node.js",[27,919,920],{},"npm"," are installed (required for Claude Desktop only)",[34,923,924,925,928,929,932],{},"Verify that ",[243,926,927],{},"npx"," is globally accessible by running ",[243,930,931],{},"npx --version"," in your terminal (required for Claude Desktop only)",[934,935,936],"ol",{},[34,937,938],{},[27,939,940],{},"Configure Cursor (HTTP transport)",[31,942,943],{},[34,944,945,946,948,949],{},"Add the MCP server entry to your Cursor ",[243,947,245],{}," configuration file:\n",[276,950,952],{"className":278,"code":951,"language":280,"meta":281,"style":281},"{\n  \"mcpServers\": {\n    \"GitLab\": {\n      \"type\": \"http\",\n      \"url\": \"https://\u003Cyour-gitlab-instance>/api/v4/mcp\"\n    }\n  }\n}\n",[243,953,954,958,964,971,981,990,994,998],{"__ignoreMap":281},[285,955,956],{"class":287,"line":288},[285,957,292],{"class":291},[285,959,960,962],{"class":287,"line":295},[285,961,299],{"class":298},[285,963,302],{"class":291},[285,965,966,969],{"class":287,"line":305},[285,967,968],{"class":298},"    \"GitLab\"",[285,970,302],{"class":291},[285,972,973,975,977,979],{"class":287,"line":313},[285,974,316],{"class":298},[285,976,319],{"class":291},[285,978,420],{"class":322},[285,980,326],{"class":291},[285,982,983,985,987],{"class":287,"line":329},[285,984,428],{"class":298},[285,986,319],{"class":291},[285,988,989],{"class":322},"\"https://\u003Cyour-gitlab-instance>/api/v4/mcp\"\n",[285,991,992],{"class":287,"line":342},[285,993,494],{"class":291},[285,995,996],{"class":287,"line":363},[285,997,500],{"class":291},[285,999,1000],{"class":287,"line":371},[285,1001,506],{"class":291},[934,1003,1004],{"start":295},[34,1005,1006],{},[27,1007,1008],{},"Configure Claude Desktop (stdio with mcp-remote)",[31,1010,1011],{},[34,1012,1013,1014,948,1017],{},"Add the MCP server entry to your ",[243,1015,1016],{},"claude_desktop_config.json",[276,1018,1020],{"className":278,"code":1019,"language":280,"meta":281,"style":281},"{\n  \"mcpServers\": {\n    \"GitLab\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote\",\n        \"https://\u003Cyour-gitlab-instance>/api/v4/mcp\"\n      ]\n    }\n  }\n}\n",[243,1021,1022,1026,1032,1038,1048,1055,1062,1069,1074,1079,1083,1087],{"__ignoreMap":281},[285,1023,1024],{"class":287,"line":288},[285,1025,292],{"class":291},[285,1027,1028,1030],{"class":287,"line":295},[285,1029,299],{"class":298},[285,1031,302],{"class":291},[285,1033,1034,1036],{"class":287,"line":305},[285,1035,968],{"class":298},[285,1037,302],{"class":291},[285,1039,1040,1042,1044,1046],{"class":287,"line":313},[285,1041,332],{"class":298},[285,1043,319],{"class":291},[285,1045,636],{"class":322},[285,1047,326],{"class":291},[285,1049,1050,1052],{"class":287,"line":329},[285,1051,345],{"class":298},[285,1053,1054],{"class":291},": [\n",[285,1056,1057,1060],{"class":287,"line":342},[285,1058,1059],{"class":322},"        \"-y\"",[285,1061,326],{"class":291},[285,1063,1064,1067],{"class":287,"line":363},[285,1065,1066],{"class":322},"        \"mcp-remote\"",[285,1068,326],{"class":291},[285,1070,1071],{"class":287,"line":371},[285,1072,1073],{"class":322},"        \"https://\u003Cyour-gitlab-instance>/api/v4/mcp\"\n",[285,1075,1076],{"class":287,"line":382},[285,1077,1078],{"class":291},"      ]\n",[285,1080,1081],{"class":287,"line":388},[285,1082,494],{"class":291},[285,1084,1085],{"class":287,"line":399},[285,1086,500],{"class":291},[285,1088,1089],{"class":287,"line":405},[285,1090,506],{"class":291},[891,1092,1094],{"id":1093},"register-and-authenticate","Register and authenticate",[12,1096,1097],{},"On first connection, the AI tool will:",[31,1099,1100,1103],{},[34,1101,1102],{},"Automatically register as an OAuth application",[34,1104,1105],{},"Request authorization for the mcp scope",[891,1107,1109],{"id":1108},"authorize-in-browser","Authorize in browser",[12,1111,1112],{},"When connecting, the MCP client will automatically open your default browser to complete the OAuth flow. Review and approve the request in GitLab to grant access and receive an access token for secure API access.",[12,1114,1115],{},[191,1116],{"alt":1117,"src":1118},"Access request","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203431/szkjoqkdxstdbdh4eirv.png",[891,1120,1122],{"id":1121},"using-the-mcp-server","Using the MCP server",[12,1124,1125],{},"Once your AI tool is connected to the MCP server, you can securely fetch and act on GitLab data (issues, merge requests, and pipelines) directly from your development environment using natural language. For example:",[31,1127,1128,1133,1138,1143,1148],{},[34,1129,1130],{},[243,1131,1132],{},"Get details for issue 42 in project 123",[34,1134,1135],{},[243,1136,1137],{},"Create a new issue titled \"Fix login bug\" with description about password special characters",[34,1139,1140],{},[243,1141,1142],{},"Show me all commits in merge request 15 from the gitlab-org/gitlab project",[34,1144,1145],{},[243,1146,1147],{},"What files were changed in merge request 25?",[34,1149,1150],{},[243,1151,1152],{},"Show me all jobs in pipeline 12345",[80,1154,1155],{},[12,1156,1157,1158,274],{},"This feature is currently in Beta. Refer to the MCP server documentation for the latest status and guidance before using it in production.\nFor full step-by-step instructions, configuration examples, and troubleshooting tips, see the ",[19,1159,1161],{"href":165,"rel":1160},[],"GitLab MCP server documentation",[92,1163,1165],{"id":1164},"summary","Summary",[12,1167,1168],{},"GitLab Duo Agent Platform supports MCP, enabling AI-powered development workflows with external tool integration. With MCP support, GitLab acts as both a client and a server:",[31,1170,1171,1177],{},[34,1172,1173,1176],{},[27,1174,1175],{},"MCP client:"," GitLab Duo Agent Platform can securely access data and services from external systems, bringing rich context directly into the IDE.",[34,1178,1179,1182],{},[27,1180,1181],{},"MCP server:"," External AI tools like Cursor or Claude Desktop can connect to your GitLab instance, access project data, and perform actions, all while maintaining strict security and privacy.",[12,1184,1185,1186,274],{},"MCP also plays a role in custom agents and external agents. Custom agents can connect to external MCP servers to access specialized tools and data sources. External agents like Claude Code can use MCP to interact with GitLab and other systems as part of their workflows. For more on this, see ",[19,1187,1189],{"href":1188},"/blog/understanding-agents-foundational-custom-external/","Part 3: Understanding agents",[80,1191,1192],{},[12,1193,1194,1197],{},[27,1195,1196],{},"Note:"," MCP settings are currently configured under the GitLab Duo settings. These settings are being decoupled from Duo into a standalone configuration area in a future release, which may require updates to how you configure MCP in your projects.",[12,1199,1200],{},"This bidirectional support reduces context switching, accelerates developer workflows, and ensures AI can provide meaningful assistance across your entire toolkit.",[92,1202,1204],{"id":1203},"whats-next","What's next?",[12,1206,1207,1208,1212],{},"You now understand how to use agents, create flows, discover solutions in the AI Catalog, manage workflows through the AI menu, and extend capabilities with MCP. The final step is customizing GitLab Duo to match your team's specific needs. Learn this in ",[19,1209,1211],{"href":1210},"/blog/customizing-gitlab-duo-chat-rules-prompts-workflows/","Part 8",", including how to create custom chat rules, craft effective system prompts, configure agent tools, set up MCP integrations, and tailor flows for your team's unique workflow.",[92,1214,1216],{"id":1215},"resources","Resources",[31,1218,1219,1225,1231,1237],{},[34,1220,1221],{},[19,1222,1224],{"href":154,"rel":1223},[],"MCP clients documentation",[34,1226,1227],{},[19,1228,1230],{"href":165,"rel":1229},[],"MCP server documentation",[34,1232,1233],{},[19,1234,1236],{"href":75,"rel":1235},[],"What is Model Context Protocol?",[34,1238,1239],{},[19,1240,71],{"href":69,"rel":1241},[],[1243,1244],"hr",{},[12,1246,1247,254,1250],{},[27,1248,1249],{},"Next:",[19,1251,1252],{"href":1210},"Part 8: Customizing GitLab Duo: Chat rules, prompts, and workflows",[12,1254,1255,254,1258],{},[27,1256,1257],{},"Previous:",[19,1259,1261],{"href":1260},"/blog/monitor-manage-automate-ai-workflows/","Part 6: Monitor, manage, and automate AI workflows",[1263,1264,1265],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":281,"searchDepth":295,"depth":295,"links":1267},[1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1283,1284,1285],{"id":94,"depth":295,"text":95},{"id":104,"depth":295,"text":105},{"id":128,"depth":295,"text":129},{"id":135,"depth":295,"text":136},{"id":171,"depth":295,"text":172},{"id":197,"depth":295,"text":198},{"id":521,"depth":295,"text":522},{"id":789,"depth":295,"text":790},{"id":818,"depth":295,"text":819},{"id":871,"depth":295,"text":872,"children":1278},[1279,1280,1281,1282],{"id":893,"depth":305,"text":894},{"id":1093,"depth":305,"text":1094},{"id":1108,"depth":305,"text":1109},{"id":1121,"depth":305,"text":1122},{"id":1164,"depth":295,"text":1165},{"id":1203,"depth":295,"text":1204},{"id":1215,"depth":295,"text":1216},"ai","2025-09-26","Extend GitLab Duo with external Services using MCP. Connect to Jira, Slack, AWS, and more as an MCP client, or enable external AI tools to access your GitLab data as an MCP server.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png",{},true,"/en-us/blog/duo-agent-platform-with-mcp",{"noIndex":1291,"title":5,"description":1297,"ogImage":1292},"Extend GitLab Duo with external Services using MCP.","duo-agent-platform-with-mcp","en-us/blog/duo-agent-platform-with-mcp",[1301,1302,1303,1304],"AI","product","features","tutorial","BlogPost","2026-05-27","QAE1hRZ-nnhzev6LeYs2XlbGdihD8mJXtbCU1I-yqMc",{"logo":1309,"freeTrial":1314,"sales":1319,"login":1324,"items":1329,"search":1653,"minimal":1684,"duo":1703,"switchNav":1712,"pricingDeployment":1723},{"config":1310},{"href":1311,"dataGaName":1312,"dataGaLocation":1313},"/","gitlab logo","header",{"text":1315,"config":1316},"Get free trial",{"href":1317,"dataGaName":1318,"dataGaLocation":1313},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":1320,"config":1321},"Request a demo",{"href":1322,"dataGaName":1323,"dataGaLocation":1313},"/sales/?contact-topic=request-demo","sales",{"text":1325,"config":1326},"Sign in",{"href":1327,"dataGaName":1328,"dataGaLocation":1313},"https://gitlab.com/users/sign_in/","sign in",[1330,1358,1458,1463,1575,1631],{"text":1331,"config":1332,"menu":1334},"Platform",{"dataNavLevelOne":1333},"platform",{"type":1335,"columns":1336},"cards",[1337,1343,1350],{"title":1331,"description":1338,"link":1339},"The intelligent orchestration platform for DevSecOps",{"text":1340,"config":1341},"Explore our Platform",{"href":1342,"dataGaName":1333,"dataGaLocation":1313},"/platform/",{"title":71,"description":1344,"link":1345},"Agentic AI for the entire software lifecycle",{"text":1346,"config":1347},"Meet GitLab Duo",{"href":1348,"dataGaName":1349,"dataGaLocation":1313},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1351,"description":1352,"link":1353},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":1354,"config":1355},"Learn more",{"href":1356,"dataGaName":1357,"dataGaLocation":1313},"/why-gitlab/","why gitlab",{"text":1359,"left":1294,"config":1360,"menu":1362},"Product",{"dataNavLevelOne":1361},"solutions",{"type":1363,"link":1364,"columns":1368,"feature":1437},"lists",{"text":1365,"config":1366},"View all Solutions",{"href":1367,"dataGaName":1361,"dataGaLocation":1313},"/solutions/",[1369,1393,1416],{"title":1370,"description":1371,"link":1372,"items":1377},"Automation","CI/CD and automation to accelerate deployment",{"config":1373},{"icon":1374,"href":1375,"dataGaName":1376,"dataGaLocation":1313},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[1378,1382,1385,1389],{"text":1379,"config":1380},"CI/CD",{"href":1381,"dataGaLocation":1313,"dataGaName":1379},"/solutions/continuous-integration/",{"text":71,"config":1383},{"href":1348,"dataGaLocation":1313,"dataGaName":1384},"gitlab duo agent platform - product menu",{"text":1386,"config":1387},"Source Code Management",{"href":1388,"dataGaLocation":1313,"dataGaName":1386},"/solutions/source-code-management/",{"text":1390,"config":1391},"Automated Software Delivery",{"href":1375,"dataGaLocation":1313,"dataGaName":1392},"Automated software delivery",{"title":1394,"description":1395,"link":1396,"items":1401},"Security","Deliver code faster without compromising security",{"config":1397},{"href":1398,"dataGaName":1399,"dataGaLocation":1313,"icon":1400},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1402,1406,1411],{"text":1403,"config":1404},"Application Security Testing",{"href":1398,"dataGaName":1405,"dataGaLocation":1313},"Application security testing",{"text":1407,"config":1408},"Software Supply Chain Security",{"href":1409,"dataGaLocation":1313,"dataGaName":1410},"/solutions/supply-chain/","Software supply chain security",{"text":1412,"config":1413},"Software Compliance",{"href":1414,"dataGaName":1415,"dataGaLocation":1313},"/solutions/software-compliance/","software compliance",{"title":1417,"link":1418,"items":1423},"Measurement",{"config":1419},{"icon":1420,"href":1421,"dataGaName":1422,"dataGaLocation":1313},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[1424,1428,1432],{"text":1425,"config":1426},"Visibility & Measurement",{"href":1421,"dataGaLocation":1313,"dataGaName":1427},"Visibility and Measurement",{"text":1429,"config":1430},"Value Stream Management",{"href":1431,"dataGaLocation":1313,"dataGaName":1429},"/solutions/value-stream-management/",{"text":1433,"config":1434},"Analytics & Insights",{"href":1435,"dataGaLocation":1313,"dataGaName":1436},"/solutions/analytics-and-insights/","Analytics and insights",{"title":1438,"type":1363,"items":1439},"GitLab for",[1440,1446,1452],{"text":1441,"config":1442},"Enterprise",{"icon":1443,"href":1444,"dataGaLocation":1313,"dataGaName":1445},"Building","/enterprise/","enterprise",{"text":1447,"config":1448},"Small Business",{"icon":1449,"href":1450,"dataGaLocation":1313,"dataGaName":1451},"Work","/small-business/","small business",{"text":1453,"config":1454},"Public Sector",{"icon":1455,"href":1456,"dataGaLocation":1313,"dataGaName":1457},"Organization","/solutions/public-sector/","public sector",{"text":1459,"config":1460},"Pricing",{"href":1461,"dataGaName":1462,"dataGaLocation":1313,"dataNavLevelOne":1462},"/pricing/","pricing",{"text":1216,"config":1464,"menu":1465},{"dataNavLevelOne":1215},{"type":1363,"link":1466,"columns":1470,"feature":1564},{"text":1467,"config":1468},"View all resources",{"href":1469,"dataGaName":1215,"dataGaLocation":1313},"/resources/",[1471,1504,1531],{"title":1472,"items":1473},"Getting started",[1474,1479,1484,1489,1494,1499],{"text":1475,"config":1476},"Install",{"href":1477,"dataGaName":1478,"dataGaLocation":1313},"/install/","install",{"text":1480,"config":1481},"Quick start guides",{"href":1482,"dataGaName":1483,"dataGaLocation":1313},"/get-started/","quick setup checklists",{"text":1485,"config":1486},"Learn",{"href":1487,"dataGaLocation":1313,"dataGaName":1488},"https://university.gitlab.com/","learn",{"text":1490,"config":1491},"Product documentation",{"href":1492,"dataGaName":1493,"dataGaLocation":1313},"https://docs.gitlab.com/","product documentation",{"text":1495,"config":1496},"Best practice videos",{"href":1497,"dataGaName":1498,"dataGaLocation":1313},"/getting-started-videos/","best practice videos",{"text":1500,"config":1501},"Integrations",{"href":1502,"dataGaName":1503,"dataGaLocation":1313},"/integrations/","integrations",{"title":1505,"items":1506},"Discover",[1507,1512,1517,1522,1526],{"text":1508,"config":1509},"Customer success stories",{"href":1510,"dataGaName":1511,"dataGaLocation":1313},"/customers/","customer success stories",{"text":1513,"config":1514},"Blog",{"href":1515,"dataGaName":1516,"dataGaLocation":1313},"/blog/","blog",{"text":1518,"config":1519},"Demo Hub",{"href":1520,"dataGaName":1521,"dataGaLocation":1313},"/demo-hub/","demo hub",{"text":1523,"config":1524},"The Source",{"href":1525,"dataGaName":1516,"dataGaLocation":1313},"/the-source/",{"text":1527,"config":1528},"Remote",{"href":1529,"dataGaName":1530,"dataGaLocation":1313},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1532,"items":1533},"Connect",[1534,1539,1544,1549,1554,1559],{"text":1535,"config":1536},"GitLab Services",{"href":1537,"dataGaName":1538,"dataGaLocation":1313},"/services/","services",{"text":1540,"config":1541},"Contribute",{"href":1542,"dataGaName":1543,"dataGaLocation":1313},"https://contributors.gitlab.com","contribute",{"text":1545,"config":1546},"Community",{"href":1547,"dataGaName":1548,"dataGaLocation":1313},"/community/","community",{"text":1550,"config":1551},"Forum",{"href":1552,"dataGaName":1553,"dataGaLocation":1313},"https://forum.gitlab.com/","forum",{"text":1555,"config":1556},"Events",{"href":1557,"dataGaName":1558,"dataGaLocation":1313},"/events/","events",{"text":1560,"config":1561},"Partners",{"href":1562,"dataGaName":1563,"dataGaLocation":1313},"/partners/","partners",{"config":1565,"title":1568,"text":1569,"link":1570},{"background":1566,"textColor":1567},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":1571,"config":1572},"Read the latest",{"href":1573,"dataGaName":1574,"dataGaLocation":1313},"/whats-new/","whats new",{"text":1576,"config":1577,"menu":1579},"Company",{"dataNavLevelOne":1578},"company",{"type":1363,"columns":1580},[1581],{"items":1582},[1583,1588,1594,1596,1601,1606,1611,1616,1621,1626],{"text":1584,"config":1585},"About",{"href":1586,"dataGaName":1587,"dataGaLocation":1313},"/company/","about",{"text":1589,"config":1590,"footerGa":1593},"Jobs",{"href":1591,"dataGaName":1592,"dataGaLocation":1313},"/jobs/","jobs",{"dataGaName":1592},{"text":1555,"config":1595},{"href":1557,"dataGaName":1558,"dataGaLocation":1313},{"text":1597,"config":1598},"Leadership",{"href":1599,"dataGaName":1600,"dataGaLocation":1313},"/company/team/e-group/","leadership",{"text":1602,"config":1603},"Handbook",{"href":1604,"dataGaName":1605,"dataGaLocation":1313},"https://handbook.gitlab.com/","handbook",{"text":1607,"config":1608},"Investor relations",{"href":1609,"dataGaName":1610,"dataGaLocation":1313},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1612,"config":1613},"Trust Center",{"href":1614,"dataGaName":1615,"dataGaLocation":1313},"/security/","trust center",{"text":1617,"config":1618},"AI Transparency Center",{"href":1619,"dataGaName":1620,"dataGaLocation":1313},"/ai-transparency-center/","ai transparency center",{"text":1622,"config":1623},"Newsletter",{"href":1624,"dataGaName":1625,"dataGaLocation":1313},"/company/contact/#contact-forms","newsletter",{"text":1627,"config":1628},"Press",{"href":1629,"dataGaName":1630,"dataGaLocation":1313},"/press/","press",{"text":1632,"config":1633,"menu":1634},"Contact us",{"dataNavLevelOne":1578},{"type":1363,"columns":1635},[1636],{"items":1637},[1638,1643,1648],{"text":1639,"config":1640},"Talk to sales",{"href":1641,"dataGaName":1642,"dataGaLocation":1313},"/sales/","talk to sales",{"text":1644,"config":1645},"Support portal",{"href":1646,"dataGaName":1647,"dataGaLocation":1313},"https://support.gitlab.com/hc/en-us","support portal",{"text":1649,"config":1650},"Customer portal",{"href":1651,"dataGaName":1652,"dataGaLocation":1313},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1654,"login":1655,"suggestions":1662},"Close",{"text":1656,"link":1657},"To search repositories and projects, login to",{"text":1658,"config":1659},"gitlab.com",{"href":1327,"dataGaName":1660,"dataGaLocation":1661},"search login","search",{"text":1663,"default":1664},"Suggestions",[1665,1667,1671,1673,1677,1681],{"text":71,"config":1666},{"href":1348,"dataGaName":71,"dataGaLocation":1661},{"text":1668,"config":1669},"Code Suggestions (AI)",{"href":1670,"dataGaName":1668,"dataGaLocation":1661},"/solutions/code-suggestions/",{"text":1379,"config":1672},{"href":1381,"dataGaName":1379,"dataGaLocation":1661},{"text":1674,"config":1675},"GitLab on AWS",{"href":1676,"dataGaName":1674,"dataGaLocation":1661},"/partners/technology-partners/aws/",{"text":1678,"config":1679},"GitLab on Google Cloud",{"href":1680,"dataGaName":1678,"dataGaLocation":1661},"/partners/technology-partners/google-cloud-platform/",{"text":1682,"config":1683},"Why GitLab?",{"href":1356,"dataGaName":1682,"dataGaLocation":1661},{"freeTrial":1685,"mobileIcon":1690,"desktopIcon":1695,"secondaryButton":1698},{"text":1686,"config":1687},"Start free trial",{"href":1688,"dataGaName":1318,"dataGaLocation":1689},"https://gitlab.com/-/trials/new/","nav",{"altText":1691,"config":1692},"Gitlab Icon",{"src":1693,"dataGaName":1694,"dataGaLocation":1689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1691,"config":1696},{"src":1697,"dataGaName":1694,"dataGaLocation":1689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1699,"config":1700},"Get Started",{"href":1701,"dataGaName":1702,"dataGaLocation":1689},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1704,"mobileIcon":1708,"desktopIcon":1710},{"text":1705,"config":1706},"Learn more about GitLab Duo",{"href":1348,"dataGaName":1707,"dataGaLocation":1689},"gitlab duo",{"altText":1691,"config":1709},{"src":1693,"dataGaName":1694,"dataGaLocation":1689},{"altText":1691,"config":1711},{"src":1697,"dataGaName":1694,"dataGaLocation":1689},{"button":1713,"mobileIcon":1718,"desktopIcon":1720},{"text":1714,"config":1715},"/switch",{"href":1716,"dataGaName":1717,"dataGaLocation":1689},"#contact","switch",{"altText":1691,"config":1719},{"src":1693,"dataGaName":1694,"dataGaLocation":1689},{"altText":1691,"config":1721},{"src":1722,"dataGaName":1694,"dataGaLocation":1689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1724,"mobileIcon":1729,"desktopIcon":1731},{"text":1725,"config":1726},"Back to pricing",{"href":1461,"dataGaName":1727,"dataGaLocation":1689,"icon":1728},"back to pricing","GoBack",{"altText":1691,"config":1730},{"src":1693,"dataGaName":1694,"dataGaLocation":1689},{"altText":1691,"config":1732},{"src":1697,"dataGaName":1694,"dataGaLocation":1689},{"title":1734,"titleMobile":1735,"button":1736,"config":1741},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":1354,"config":1737},{"href":1738,"dataGaName":1739,"dataGaLocation":1740},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1742,"disabled":1291},"release",{"data":1744},{"text":1745,"source":1746,"edit":1752,"contribute":1757,"config":1762,"items":1767,"minimal":1977},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1747,"config":1748},"View page source",{"href":1749,"dataGaName":1750,"dataGaLocation":1751},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1753,"config":1754},"Edit this page",{"href":1755,"dataGaName":1756,"dataGaLocation":1751},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1758,"config":1759},"Please contribute",{"href":1760,"dataGaName":1761,"dataGaLocation":1751},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1763,"facebook":1764,"youtube":1765,"linkedin":1766},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1768,1815,1869,1913,1945],{"title":1459,"links":1769,"subMenu":1784},[1770,1774,1779],{"text":1771,"config":1772},"View plans",{"href":1461,"dataGaName":1773,"dataGaLocation":1751},"view plans",{"text":1775,"config":1776},"Why Premium?",{"href":1777,"dataGaName":1778,"dataGaLocation":1751},"/pricing/premium/","why premium",{"text":1780,"config":1781},"Why Ultimate?",{"href":1782,"dataGaName":1783,"dataGaLocation":1751},"/pricing/ultimate/","why ultimate",[1785],{"title":1786,"links":1787},"Contact Us",[1788,1791,1793,1795,1800,1805,1810],{"text":1789,"config":1790},"Contact sales",{"href":1641,"dataGaName":1323,"dataGaLocation":1751},{"text":1644,"config":1792},{"href":1646,"dataGaName":1647,"dataGaLocation":1751},{"text":1649,"config":1794},{"href":1651,"dataGaName":1652,"dataGaLocation":1751},{"text":1796,"config":1797},"Status",{"href":1798,"dataGaName":1799,"dataGaLocation":1751},"https://status.gitlab.com/","status",{"text":1801,"config":1802},"Terms of use",{"href":1803,"dataGaName":1804,"dataGaLocation":1751},"/terms/","terms of use",{"text":1806,"config":1807},"Privacy statement",{"href":1808,"dataGaName":1809,"dataGaLocation":1751},"/privacy/","privacy statement",{"text":1811,"config":1812},"Cookie preferences",{"dataGaName":1813,"dataGaLocation":1751,"id":1814,"isOneTrustButton":1294},"cookie preferences","ot-sdk-btn",{"title":1359,"links":1816,"subMenu":1825},[1817,1821],{"text":1818,"config":1819},"DevSecOps platform",{"href":1342,"dataGaName":1820,"dataGaLocation":1751},"devsecops platform",{"text":1822,"config":1823},"AI-Assisted Development",{"href":1348,"dataGaName":1824,"dataGaLocation":1751},"ai-assisted development",[1826],{"title":1827,"links":1828},"Topics",[1829,1834,1839,1844,1849,1854,1859,1864],{"text":1830,"config":1831},"CICD",{"href":1832,"dataGaName":1833,"dataGaLocation":1751},"/topics/ci-cd/","cicd",{"text":1835,"config":1836},"GitOps",{"href":1837,"dataGaName":1838,"dataGaLocation":1751},"/topics/gitops/","gitops",{"text":1840,"config":1841},"DevOps",{"href":1842,"dataGaName":1843,"dataGaLocation":1751},"/topics/devops/","devops",{"text":1845,"config":1846},"Version Control",{"href":1847,"dataGaName":1848,"dataGaLocation":1751},"/topics/version-control/","version control",{"text":1850,"config":1851},"DevSecOps",{"href":1852,"dataGaName":1853,"dataGaLocation":1751},"/topics/devsecops/","devsecops",{"text":1855,"config":1856},"Cloud Native",{"href":1857,"dataGaName":1858,"dataGaLocation":1751},"/topics/cloud-native/","cloud native",{"text":1860,"config":1861},"AI for Coding",{"href":1862,"dataGaName":1863,"dataGaLocation":1751},"/topics/devops/ai-for-coding/","ai for coding",{"text":1865,"config":1866},"Agentic AI",{"href":1867,"dataGaName":1868,"dataGaLocation":1751},"/topics/agentic-ai/","agentic ai",{"title":1870,"links":1871},"Solutions",[1872,1874,1876,1881,1885,1888,1892,1895,1897,1900,1903,1908],{"text":1403,"config":1873},{"href":1398,"dataGaName":1403,"dataGaLocation":1751},{"text":1392,"config":1875},{"href":1375,"dataGaName":1376,"dataGaLocation":1751},{"text":1877,"config":1878},"Agile development",{"href":1879,"dataGaName":1880,"dataGaLocation":1751},"/solutions/agile-delivery/","agile delivery",{"text":1882,"config":1883},"SCM",{"href":1388,"dataGaName":1884,"dataGaLocation":1751},"source code management",{"text":1830,"config":1886},{"href":1381,"dataGaName":1887,"dataGaLocation":1751},"continuous integration & delivery",{"text":1889,"config":1890},"Value stream management",{"href":1431,"dataGaName":1891,"dataGaLocation":1751},"value stream management",{"text":1835,"config":1893},{"href":1894,"dataGaName":1838,"dataGaLocation":1751},"/solutions/gitops/",{"text":1441,"config":1896},{"href":1444,"dataGaName":1445,"dataGaLocation":1751},{"text":1898,"config":1899},"Small business",{"href":1450,"dataGaName":1451,"dataGaLocation":1751},{"text":1901,"config":1902},"Public sector",{"href":1456,"dataGaName":1457,"dataGaLocation":1751},{"text":1904,"config":1905},"Education",{"href":1906,"dataGaName":1907,"dataGaLocation":1751},"/solutions/education/","education",{"text":1909,"config":1910},"Financial services",{"href":1911,"dataGaName":1912,"dataGaLocation":1751},"/solutions/finance/","financial services",{"title":1216,"links":1914},[1915,1917,1919,1921,1924,1926,1929,1931,1933,1935,1937,1939,1941,1943],{"text":1475,"config":1916},{"href":1477,"dataGaName":1478,"dataGaLocation":1751},{"text":1480,"config":1918},{"href":1482,"dataGaName":1483,"dataGaLocation":1751},{"text":1485,"config":1920},{"href":1487,"dataGaName":1488,"dataGaLocation":1751},{"text":1490,"config":1922},{"href":1492,"dataGaName":1923,"dataGaLocation":1751},"docs",{"text":1513,"config":1925},{"href":1515,"dataGaName":1516,"dataGaLocation":1751},{"text":1927,"config":1928},"What's new",{"href":1573,"dataGaName":1574,"dataGaLocation":1751},{"text":1508,"config":1930},{"href":1510,"dataGaName":1511,"dataGaLocation":1751},{"text":1527,"config":1932},{"href":1529,"dataGaName":1530,"dataGaLocation":1751},{"text":1535,"config":1934},{"href":1537,"dataGaName":1538,"dataGaLocation":1751},{"text":1540,"config":1936},{"href":1542,"dataGaName":1543,"dataGaLocation":1751},{"text":1545,"config":1938},{"href":1547,"dataGaName":1548,"dataGaLocation":1751},{"text":1550,"config":1940},{"href":1552,"dataGaName":1553,"dataGaLocation":1751},{"text":1555,"config":1942},{"href":1557,"dataGaName":1558,"dataGaLocation":1751},{"text":1560,"config":1944},{"href":1562,"dataGaName":1563,"dataGaLocation":1751},{"title":1576,"links":1946},[1947,1949,1951,1953,1955,1957,1961,1966,1968,1970,1972],{"text":1584,"config":1948},{"href":1586,"dataGaName":1578,"dataGaLocation":1751},{"text":1589,"config":1950},{"href":1591,"dataGaName":1592,"dataGaLocation":1751},{"text":1597,"config":1952},{"href":1599,"dataGaName":1600,"dataGaLocation":1751},{"text":1602,"config":1954},{"href":1604,"dataGaName":1605,"dataGaLocation":1751},{"text":1607,"config":1956},{"href":1609,"dataGaName":1610,"dataGaLocation":1751},{"text":1958,"config":1959},"Sustainability",{"href":1960,"dataGaName":1958,"dataGaLocation":1751},"/sustainability/",{"text":1962,"config":1963},"Diversity, inclusion and belonging (DIB)",{"href":1964,"dataGaName":1965,"dataGaLocation":1751},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1612,"config":1967},{"href":1614,"dataGaName":1615,"dataGaLocation":1751},{"text":1622,"config":1969},{"href":1624,"dataGaName":1625,"dataGaLocation":1751},{"text":1627,"config":1971},{"href":1629,"dataGaName":1630,"dataGaLocation":1751},{"text":1973,"config":1974},"Modern Slavery Transparency Statement",{"href":1975,"dataGaName":1976,"dataGaLocation":1751},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1978},[1979,1982,1985],{"text":1980,"config":1981},"Terms",{"href":1803,"dataGaName":1804,"dataGaLocation":1751},{"text":1983,"config":1984},"Cookies",{"dataGaName":1813,"dataGaLocation":1751,"id":1814,"isOneTrustButton":1294},{"text":1986,"config":1987},"Privacy",{"href":1808,"dataGaName":1809,"dataGaLocation":1751},[1989],{"id":1990,"title":7,"body":1290,"config":1991,"content":1993,"description":1290,"extension":1997,"meta":1998,"navigation":1294,"path":1999,"seo":2000,"stem":2001,"__hash__":2002},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":1992},"BlogAuthor",{"name":7,"config":1994},{"headshot":1995,"ctfId":1996},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658921/Blog/Author%20Headshots/iganbaruch-headshot.jpg","iganbaruch","yml",{},"/en-us/blog/authors/itzik-gan-baruch",{},"en-us/blog/authors/itzik-gan-baruch","bz9VMiTQ1ixvnoxUFk0jiUcnLG3oQsymgXNCqyRqfsk",[2004,2010,2018],{"title":2005,"description":2006,"heroImage":1292,"category":1286,"date":2007,"authors":2008,"slug":2009,"externalUrl":1290},"How I built a demo generator with GitLab Duo Agent Platform","Demos haven't always looked like this. Looking back over my career, here's how they have evolved. Follow the tutorial to build your own demo and agent.","2026-08-13",[7],"agentic-click-through-demo",{"title":2011,"description":2012,"heroImage":2013,"category":1286,"date":2014,"authors":2015,"slug":2017,"externalUrl":1290},"How to govern agentic AI, MCPs, and AI code assistants","AI agents can write, push, and deploy without human review at each step. Learn a practical framework for controlling access, permissions, and audit trails.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785337625/ifzlc2hyzaxhzmjgyymh.png","2026-07-31",[2016],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":2019,"description":2020,"heroImage":2021,"category":1286,"date":2022,"authors":2023,"slug":2025,"externalUrl":1290},"Claude Opus 5 on GitLab: Reasoning built for the hard tasks","Anthropic’s Claude Opus 5 is now available on GitLab Duo Agent Platform, delivering deeper reasoning without sacrificing speed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-07-27",[2024],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":2027},[2028,2041,2052,2064],{"id":2029,"categories":2030,"header":2031,"text":2032,"button":2033,"image":2038},"ai-modernization",[1286],"Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":2034,"config":2035},"Get your AI maturity score",{"href":2036,"dataGaName":2037,"dataGaLocation":1516},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":2039},{"src":2040},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2042,"categories":2043,"header":2044,"text":2032,"button":2045,"image":2049},"devops-modernization",[1302,1853],"Are you just managing tools or shipping innovation?",{"text":2046,"config":2047},"Get your DevOps maturity score",{"href":2048,"dataGaName":2037,"dataGaLocation":1516},"/assessments/devops-modernization-assessment/",{"config":2050},{"src":2051},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2053,"categories":2054,"header":2056,"text":2032,"button":2057,"image":2061},"security-modernization",[2055],"security","Are you trading speed for security?",{"text":2058,"config":2059},"Get your security maturity score",{"href":2060,"dataGaName":2037,"dataGaLocation":1516},"/assessments/security-modernization-assessment/",{"config":2062},{"src":2063},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2065,"paths":2066,"header":2069,"text":2070,"button":2071,"image":2076},"github-azure-migration",[2067,2068],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":2072,"config":2073},"See how GitLab compares to GitHub",{"href":2074,"dataGaName":2075,"dataGaLocation":1516},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2077},{"src":2051},{"header":2079,"blurb":2080,"button":2081,"secondaryButton":2086},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":2082,"config":2083},"Get your free trial",{"href":2084,"dataGaName":1318,"dataGaLocation":2085},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1789,"config":2087},{"href":1641,"dataGaName":1323,"dataGaLocation":2085},1786803758977]