[{"data":1,"prerenderedAt":555},["ShallowReactive",2],{"post-\u002Fblog\u002Flibrechat-github-remote-mcp":3,"toc-\u002Fblog\u002Flibrechat-github-remote-mcp":296,"read-more-\u002Fblog\u002Flibrechat-github-remote-mcp":474,"about":501},{"id":4,"title":5,"ad":6,"body":7,"components":6,"cover":280,"coverAlt":281,"date":282,"description":283,"extension":284,"lang":285,"meta":286,"navigation":287,"path":288,"seo":289,"showKitForm":290,"stem":291,"tags":292,"updatedAt":6,"__hash__":295},"blog\u002Fblog\u002Flibrechat-github-remote-mcp.md","How to use GitHub MCP remote server with LibreChat",null,{"type":8,"value":9,"toc":276},"minimark",[10,14,26,44,60,68,74,184,191,194,255,266,272],[11,12,5],"h1",{"id":13},"how-to-use-github-mcp-remote-server-with-librechat",[15,16,17,18,25],"p",{},"This guide shows how to use the official ",[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgithub-mcp-server",[23],"nofollow","GitHub MCP server"," in LibreChat.",[15,27,28,29,34,35,39,40,43],{},"While ",[19,30,33],{"href":31,"rel":32},"https:\u002F\u002Fwww.librechat.ai\u002Fdocs\u002Ffeatures\u002Fmcp#basic-configuration",[23],"MCP configuration"," in LibreChat is straightforward, LibreChat auto-detects ",[36,37,38],"strong",{},"OAuth"," on that URL and tries ",[36,41,42],{},"dynamic client registration",", which GitHub MCP does not support.",[15,45,46,47,50,51,54,55,59],{},"The solution is to ",[36,48,49],{},"disable OAuth",", and authenticate with a ",[36,52,53],{},"GitHub PAT"," via ",[56,57,58],"code",{},"Authorization"," header.",[61,62,64,67],"h2",{"id":63},"librechatyaml-config",[56,65,66],{},"librechat.yaml"," config",[15,69,70,71,73],{},"Create a GitHub Personal Access Token (PAT) with the required scopes and edit your ",[56,72,66],{}," file to configure the MCP server.",[75,76,81],"pre",{"className":77,"code":78,"language":79,"meta":80,"style":80},"language-yaml shiki shiki-themes github-light github-dark","mcpServers:\n  github:\n    # HTTP transport for remote MCP\n    type: streamable-http\n    # GitHub MCP endpoint\n    url: https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F\n    # IMPORTANT: skip OAuth entirely\n    requiresOAuth: false\n    headers:\n      # PAT from env\n      Authorization: \"Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}\"\n","yaml","",[56,82,83,96,104,111,124,130,141,147,159,167,173],{"__ignoreMap":80},[84,85,88,92],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"s9eBZ","mcpServers",[84,93,95],{"class":94},"sVt8B",":\n",[84,97,99,102],{"class":86,"line":98},2,[84,100,101],{"class":90},"  github",[84,103,95],{"class":94},[84,105,107],{"class":86,"line":106},3,[84,108,110],{"class":109},"sJ8bj","    # HTTP transport for remote MCP\n",[84,112,114,117,120],{"class":86,"line":113},4,[84,115,116],{"class":90},"    type",[84,118,119],{"class":94},": ",[84,121,123],{"class":122},"sZZnC","streamable-http\n",[84,125,127],{"class":86,"line":126},5,[84,128,129],{"class":109},"    # GitHub MCP endpoint\n",[84,131,133,136,138],{"class":86,"line":132},6,[84,134,135],{"class":90},"    url",[84,137,119],{"class":94},[84,139,140],{"class":122},"https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F\n",[84,142,144],{"class":86,"line":143},7,[84,145,146],{"class":109},"    # IMPORTANT: skip OAuth entirely\n",[84,148,150,153,155],{"class":86,"line":149},8,[84,151,152],{"class":90},"    requiresOAuth",[84,154,119],{"class":94},[84,156,158],{"class":157},"sj4cs","false\n",[84,160,162,165],{"class":86,"line":161},9,[84,163,164],{"class":90},"    headers",[84,166,95],{"class":94},[84,168,170],{"class":86,"line":169},10,[84,171,172],{"class":109},"      # PAT from env\n",[84,174,176,179,181],{"class":86,"line":175},11,[84,177,178],{"class":90},"      Authorization",[84,180,119],{"class":94},[84,182,183],{"class":122},"\"Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}\"\n",[15,185,186,187,190],{},"Make sure the ",[56,188,189],{},"GITHUB_PERSONAL_ACCESS_TOKEN"," environment variable is accessible in your environment. You can still use per-user PAT if that fits your runtime requirements better.",[15,192,193],{},"In that case, include",[75,195,197],{"className":77,"code":196,"language":79,"meta":80,"style":80},"mcpServers:\n  github:\n    # Include the same config as above\n    # This will prompt the user for the PAT when they select the MCP server\n    customUserVars:\n      GITHUB_PERSONAL_ACCESS_TOKEN:\n        title: \"GitHub PAT\"\n        description: \"GitHub Personal Access Token for the GitHub MCP server\"\n",[56,198,199,205,211,216,221,228,235,245],{"__ignoreMap":80},[84,200,201,203],{"class":86,"line":87},[84,202,91],{"class":90},[84,204,95],{"class":94},[84,206,207,209],{"class":86,"line":98},[84,208,101],{"class":90},[84,210,95],{"class":94},[84,212,213],{"class":86,"line":106},[84,214,215],{"class":109},"    # Include the same config as above\n",[84,217,218],{"class":86,"line":113},[84,219,220],{"class":109},"    # This will prompt the user for the PAT when they select the MCP server\n",[84,222,223,226],{"class":86,"line":126},[84,224,225],{"class":90},"    customUserVars",[84,227,95],{"class":94},[84,229,230,233],{"class":86,"line":132},[84,231,232],{"class":90},"      GITHUB_PERSONAL_ACCESS_TOKEN",[84,234,95],{"class":94},[84,236,237,240,242],{"class":86,"line":143},[84,238,239],{"class":90},"        title",[84,241,119],{"class":94},[84,243,244],{"class":122},"\"GitHub PAT\"\n",[84,246,247,250,252],{"class":86,"line":149},[84,248,249],{"class":90},"        description",[84,251,119],{"class":94},[84,253,254],{"class":122},"\"GitHub Personal Access Token for the GitHub MCP server\"\n",[15,256,257,258,261,262,265],{},"Restart LibreChat so it picks up the env var and new MCP server configuration. In the UI, select the ",[56,259,260],{},"github"," MCP server; it should now connect ",[36,263,264],{},"without"," any OAuth popup.",[267,268,269],"blockquote",{},[15,270,271],{},"This guide was partly generated with the help of an LLM.",[273,274,275],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":80,"searchDepth":126,"depth":126,"links":277},[278],{"id":63,"depth":98,"text":279},"librechat.yaml config","\u002Fimages\u002Farticles\u002Fcovers\u002Flibrechat.jpg","LibreChat logo","2026-06-09","Learn how to configure GitHub's remote MCP server in LibreChat by disabling OAuth and using a Personal Access Token (PAT).","md","en",{},true,"\u002Fblog\u002Flibrechat-github-remote-mcp",{"title":5,"description":283},false,"blog\u002Flibrechat-github-remote-mcp",[293,294],"applied ai","engineering","PmNorUL_ZiTG8m7Ptx128kwh9uIbizMGmtj9z_sLZLk",{"body":297},{"type":8,"value":298,"toc":471},[299,301,306,315,323,327,331,401,405,407,459,465,469],[11,300,5],{"id":13},[15,302,17,303,25],{},[19,304,24],{"href":21,"rel":305},[23],[15,307,28,308,34,311,39,313,43],{},[19,309,33],{"href":31,"rel":310},[23],[36,312,38],{},[36,314,42],{},[15,316,46,317,50,319,54,321,59],{},[36,318,49],{},[36,320,53],{},[56,322,58],{},[61,324,325,67],{"id":63},[56,326,66],{},[15,328,70,329,73],{},[56,330,66],{},[75,332,333],{"className":77,"code":78,"language":79,"meta":80,"style":80},[56,334,335,341,347,351,359,363,371,375,383,389,393],{"__ignoreMap":80},[84,336,337,339],{"class":86,"line":87},[84,338,91],{"class":90},[84,340,95],{"class":94},[84,342,343,345],{"class":86,"line":98},[84,344,101],{"class":90},[84,346,95],{"class":94},[84,348,349],{"class":86,"line":106},[84,350,110],{"class":109},[84,352,353,355,357],{"class":86,"line":113},[84,354,116],{"class":90},[84,356,119],{"class":94},[84,358,123],{"class":122},[84,360,361],{"class":86,"line":126},[84,362,129],{"class":109},[84,364,365,367,369],{"class":86,"line":132},[84,366,135],{"class":90},[84,368,119],{"class":94},[84,370,140],{"class":122},[84,372,373],{"class":86,"line":143},[84,374,146],{"class":109},[84,376,377,379,381],{"class":86,"line":149},[84,378,152],{"class":90},[84,380,119],{"class":94},[84,382,158],{"class":157},[84,384,385,387],{"class":86,"line":161},[84,386,164],{"class":90},[84,388,95],{"class":94},[84,390,391],{"class":86,"line":169},[84,392,172],{"class":109},[84,394,395,397,399],{"class":86,"line":175},[84,396,178],{"class":90},[84,398,119],{"class":94},[84,400,183],{"class":122},[15,402,186,403,190],{},[56,404,189],{},[15,406,193],{},[75,408,409],{"className":77,"code":196,"language":79,"meta":80,"style":80},[56,410,411,417,423,427,431,437,443,451],{"__ignoreMap":80},[84,412,413,415],{"class":86,"line":87},[84,414,91],{"class":90},[84,416,95],{"class":94},[84,418,419,421],{"class":86,"line":98},[84,420,101],{"class":90},[84,422,95],{"class":94},[84,424,425],{"class":86,"line":106},[84,426,215],{"class":109},[84,428,429],{"class":86,"line":113},[84,430,220],{"class":109},[84,432,433,435],{"class":86,"line":126},[84,434,225],{"class":90},[84,436,95],{"class":94},[84,438,439,441],{"class":86,"line":132},[84,440,232],{"class":90},[84,442,95],{"class":94},[84,444,445,447,449],{"class":86,"line":143},[84,446,239],{"class":90},[84,448,119],{"class":94},[84,450,244],{"class":122},[84,452,453,455,457],{"class":86,"line":149},[84,454,249],{"class":90},[84,456,119],{"class":94},[84,458,254],{"class":122},[15,460,257,461,261,463,265],{},[56,462,260],{},[36,464,264],{},[267,466,467],{},[15,468,271],{},[273,470,275],{},{"title":80,"searchDepth":126,"depth":126,"links":472},[473],{"id":63,"depth":98,"text":279},[475,484,493],{"title":476,"description":477,"cover":478,"coverAlt":479,"path":480,"date":481,"tags":482},"State of Vue & Vite 2026: Amsterdam recap","A recap of all Vue.js and Vite ecosystem announcements from Vue.js Amsterdam 2026 conference.","\u002Fimages\u002Farticles\u002Fcovers\u002Fstate-of-vue-2022-amsterdam-recap.jpg","Evan You at the Vue Amsterdam 2022 conference","\u002Fblog\u002Fstate-of-vue-vite-2026-amsterdam-recap","2026-03-13",[294,483],"vue",{"title":485,"description":486,"cover":487,"coverAlt":488,"path":489,"date":490,"tags":491},"Meilisearch PHP v2","Meilisearch PHP v2 improves developer experience thanks to PHP 8.1 features and enhanced type safety.","\u002Fimages\u002Farticles\u002Fcovers\u002Fmeilisearch-php.png","Meilisearch PHP","\u002Fblog\u002Fmeilisearch-php-v2","2026-02-20",[294,492],"search",{"title":494,"description":495,"cover":496,"coverAlt":497,"path":498,"date":499,"tags":500},"Deploy BAML with a Nuxt 4 (Nitro) server BAML on Vercel Functions","Learn how to configure Nuxt 4 (Nitro) server to deploy @boundaryml\u002Fbaml on Vercel Functions.","\u002Fimages\u002Farticles\u002Fcovers\u002Fbaml.jpg","BAML logo","\u002Fblog\u002Fbaml-nitro-vercel-deployment","2025-12-28",[293,294],{"id":502,"title":503,"body":504,"description":538,"extension":284,"meta":539,"navigation":287,"path":551,"seo":552,"stem":553,"__hash__":554},"about\u002Fabout.md","About",{"type":8,"value":505,"toc":536},[506,513,528],[15,507,508,509,512],{},"Laurent Cazanove is a ",[36,510,511],{},"freelance software engineer"," specializing in developer experience.",[15,514,515,516,519,520,523,524,527],{},"He helps dev tools build great onboarding experiences through his ",[36,517,518],{},"technical writing",", ",[36,521,522],{},"UX writing",", and ",[36,525,526],{},"full-stack development"," skills.",[15,529,530,531,535],{},"Learn more about ",[19,532,534],{"href":533},"\u002Fdeveloper-experience","developer experience consulting",".",{"title":80,"searchDepth":126,"depth":126,"links":537},[],"Laurent Cazanove is a freelance software engineer specializing in developer experience.",{"actions":540,"excerpt":545},[541],{"text":542,"href":543,"icon":544},"Contact","\u002Fcontact","CONTACT",{"type":8,"value":546},[547],[15,548,508,549,512],{},[36,550,511],{},"\u002Fabout",{"description":538},"about","m4zdWMa1HmeJeBp7kZHKCnGue7TDn4-jnKdVkgz_anI",1782541438788]