[{"data":1,"prerenderedAt":899},["ShallowReactive",2],{"post-librechat-github-remote-mcp":3,"toc-/blog/librechat-github-remote-mcp":459,"about":799,"read-more-/blog/librechat-github-remote-mcp":877},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"cover":11,"coverAlt":12,"lang":13,"tags":14,"body":17,"_type":453,"_id":454,"_source":455,"_file":456,"_stem":457,"_extension":458},"/blog/librechat-github-remote-mcp","blog",false,"","How to use GitHub MCP remote server with LibreChat","Learn how to configure GitHub's remote MCP server in LibreChat by disabling OAuth and using a Personal Access Token (PAT).","2026-06-09","/images/articles/covers/librechat.jpg","LibreChat logo","en",[15,16],"applied ai","engineering",{"type":18,"children":19,"toc":449},"root",[20,28,45,74,102,115,127,293,306,311,414,434,443],{"type":21,"tag":22,"props":23,"children":25},"element","h1",{"id":24},"how-to-use-github-mcp-remote-server-with-librechat",[26],{"type":27,"value":8},"text",{"type":21,"tag":29,"props":30,"children":31},"p",{},[32,34,43],{"type":27,"value":33},"This guide shows how to use the official ",{"type":21,"tag":35,"props":36,"children":40},"a",{"href":37,"rel":38},"https://github.com/github/github-mcp-server",[39],"nofollow",[41],{"type":27,"value":42},"GitHub MCP server",{"type":27,"value":44}," in LibreChat.",{"type":21,"tag":29,"props":46,"children":47},{},[48,50,57,59,65,67,72],{"type":27,"value":49},"While ",{"type":21,"tag":35,"props":51,"children":54},{"href":52,"rel":53},"https://www.librechat.ai/docs/features/mcp#basic-configuration",[39],[55],{"type":27,"value":56},"MCP configuration",{"type":27,"value":58}," in LibreChat is straightforward, LibreChat auto-detects ",{"type":21,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":27,"value":64},"OAuth",{"type":27,"value":66}," on that URL and tries ",{"type":21,"tag":60,"props":68,"children":69},{},[70],{"type":27,"value":71},"dynamic client registration",{"type":27,"value":73},", which GitHub MCP does not support.",{"type":21,"tag":29,"props":75,"children":76},{},[77,79,84,86,91,93,100],{"type":27,"value":78},"The solution is to ",{"type":21,"tag":60,"props":80,"children":81},{},[82],{"type":27,"value":83},"disable OAuth",{"type":27,"value":85},", and authenticate with a ",{"type":21,"tag":60,"props":87,"children":88},{},[89],{"type":27,"value":90},"GitHub PAT",{"type":27,"value":92}," via ",{"type":21,"tag":94,"props":95,"children":97},"code",{"className":96},[],[98],{"type":27,"value":99},"Authorization",{"type":27,"value":101}," header.",{"type":21,"tag":103,"props":104,"children":106},"h2",{"id":105},"librechatyaml-config",[107,113],{"type":21,"tag":94,"props":108,"children":110},{"className":109},[],[111],{"type":27,"value":112},"librechat.yaml",{"type":27,"value":114}," config",{"type":21,"tag":29,"props":116,"children":117},{},[118,120,125],{"type":27,"value":119},"Create a GitHub Personal Access Token (PAT) with the required scopes and edit your ",{"type":21,"tag":94,"props":121,"children":123},{"className":122},[],[124],{"type":27,"value":112},{"type":27,"value":126}," file to configure the MCP server.",{"type":21,"tag":128,"props":129,"children":133},"pre",{"className":130,"code":131,"language":132,"meta":7,"style":7},"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://api.githubcopilot.com/mcp/\n    # IMPORTANT: skip OAuth entirely\n    requiresOAuth: false\n    headers:\n      # PAT from env\n      Authorization: \"Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}\"\n","yaml",[134],{"type":21,"tag":94,"props":135,"children":136},{"__ignoreMap":7},[137,155,168,178,198,207,225,234,253,266,275],{"type":21,"tag":138,"props":139,"children":142},"span",{"class":140,"line":141},"line",1,[143,149],{"type":21,"tag":138,"props":144,"children":146},{"style":145},"--shiki-default:#22863A;--shiki-dark:#85E89D",[147],{"type":27,"value":148},"mcpServers",{"type":21,"tag":138,"props":150,"children":152},{"style":151},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[153],{"type":27,"value":154},":\n",{"type":21,"tag":138,"props":156,"children":158},{"class":140,"line":157},2,[159,164],{"type":21,"tag":138,"props":160,"children":161},{"style":145},[162],{"type":27,"value":163},"  github",{"type":21,"tag":138,"props":165,"children":166},{"style":151},[167],{"type":27,"value":154},{"type":21,"tag":138,"props":169,"children":171},{"class":140,"line":170},3,[172],{"type":21,"tag":138,"props":173,"children":175},{"style":174},"--shiki-default:#6A737D;--shiki-dark:#6A737D",[176],{"type":27,"value":177},"    # HTTP transport for remote MCP\n",{"type":21,"tag":138,"props":179,"children":181},{"class":140,"line":180},4,[182,187,192],{"type":21,"tag":138,"props":183,"children":184},{"style":145},[185],{"type":27,"value":186},"    type",{"type":21,"tag":138,"props":188,"children":189},{"style":151},[190],{"type":27,"value":191},": ",{"type":21,"tag":138,"props":193,"children":195},{"style":194},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[196],{"type":27,"value":197},"streamable-http\n",{"type":21,"tag":138,"props":199,"children":201},{"class":140,"line":200},5,[202],{"type":21,"tag":138,"props":203,"children":204},{"style":174},[205],{"type":27,"value":206},"    # GitHub MCP endpoint\n",{"type":21,"tag":138,"props":208,"children":210},{"class":140,"line":209},6,[211,216,220],{"type":21,"tag":138,"props":212,"children":213},{"style":145},[214],{"type":27,"value":215},"    url",{"type":21,"tag":138,"props":217,"children":218},{"style":151},[219],{"type":27,"value":191},{"type":21,"tag":138,"props":221,"children":222},{"style":194},[223],{"type":27,"value":224},"https://api.githubcopilot.com/mcp/\n",{"type":21,"tag":138,"props":226,"children":228},{"class":140,"line":227},7,[229],{"type":21,"tag":138,"props":230,"children":231},{"style":174},[232],{"type":27,"value":233},"    # IMPORTANT: skip OAuth entirely\n",{"type":21,"tag":138,"props":235,"children":237},{"class":140,"line":236},8,[238,243,247],{"type":21,"tag":138,"props":239,"children":240},{"style":145},[241],{"type":27,"value":242},"    requiresOAuth",{"type":21,"tag":138,"props":244,"children":245},{"style":151},[246],{"type":27,"value":191},{"type":21,"tag":138,"props":248,"children":250},{"style":249},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[251],{"type":27,"value":252},"false\n",{"type":21,"tag":138,"props":254,"children":256},{"class":140,"line":255},9,[257,262],{"type":21,"tag":138,"props":258,"children":259},{"style":145},[260],{"type":27,"value":261},"    headers",{"type":21,"tag":138,"props":263,"children":264},{"style":151},[265],{"type":27,"value":154},{"type":21,"tag":138,"props":267,"children":269},{"class":140,"line":268},10,[270],{"type":21,"tag":138,"props":271,"children":272},{"style":174},[273],{"type":27,"value":274},"      # PAT from env\n",{"type":21,"tag":138,"props":276,"children":278},{"class":140,"line":277},11,[279,284,288],{"type":21,"tag":138,"props":280,"children":281},{"style":145},[282],{"type":27,"value":283},"      Authorization",{"type":21,"tag":138,"props":285,"children":286},{"style":151},[287],{"type":27,"value":191},{"type":21,"tag":138,"props":289,"children":290},{"style":194},[291],{"type":27,"value":292},"\"Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}\"\n",{"type":21,"tag":29,"props":294,"children":295},{},[296,298,304],{"type":27,"value":297},"Make sure the ",{"type":21,"tag":94,"props":299,"children":301},{"className":300},[],[302],{"type":27,"value":303},"GITHUB_PERSONAL_ACCESS_TOKEN",{"type":27,"value":305}," environment variable is accessible in your environment. You can still use per-user PAT if that fits your runtime requirements better.",{"type":21,"tag":29,"props":307,"children":308},{},[309],{"type":27,"value":310},"In that case, include",{"type":21,"tag":128,"props":312,"children":314},{"className":130,"code":313,"language":132,"meta":7,"style":7},"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",[315],{"type":21,"tag":94,"props":316,"children":317},{"__ignoreMap":7},[318,329,340,348,356,368,380,397],{"type":21,"tag":138,"props":319,"children":320},{"class":140,"line":141},[321,325],{"type":21,"tag":138,"props":322,"children":323},{"style":145},[324],{"type":27,"value":148},{"type":21,"tag":138,"props":326,"children":327},{"style":151},[328],{"type":27,"value":154},{"type":21,"tag":138,"props":330,"children":331},{"class":140,"line":157},[332,336],{"type":21,"tag":138,"props":333,"children":334},{"style":145},[335],{"type":27,"value":163},{"type":21,"tag":138,"props":337,"children":338},{"style":151},[339],{"type":27,"value":154},{"type":21,"tag":138,"props":341,"children":342},{"class":140,"line":170},[343],{"type":21,"tag":138,"props":344,"children":345},{"style":174},[346],{"type":27,"value":347},"    # Include the same config as above\n",{"type":21,"tag":138,"props":349,"children":350},{"class":140,"line":180},[351],{"type":21,"tag":138,"props":352,"children":353},{"style":174},[354],{"type":27,"value":355},"    # This will prompt the user for the PAT when they select the MCP server\n",{"type":21,"tag":138,"props":357,"children":358},{"class":140,"line":200},[359,364],{"type":21,"tag":138,"props":360,"children":361},{"style":145},[362],{"type":27,"value":363},"    customUserVars",{"type":21,"tag":138,"props":365,"children":366},{"style":151},[367],{"type":27,"value":154},{"type":21,"tag":138,"props":369,"children":370},{"class":140,"line":209},[371,376],{"type":21,"tag":138,"props":372,"children":373},{"style":145},[374],{"type":27,"value":375},"      GITHUB_PERSONAL_ACCESS_TOKEN",{"type":21,"tag":138,"props":377,"children":378},{"style":151},[379],{"type":27,"value":154},{"type":21,"tag":138,"props":381,"children":382},{"class":140,"line":227},[383,388,392],{"type":21,"tag":138,"props":384,"children":385},{"style":145},[386],{"type":27,"value":387},"        title",{"type":21,"tag":138,"props":389,"children":390},{"style":151},[391],{"type":27,"value":191},{"type":21,"tag":138,"props":393,"children":394},{"style":194},[395],{"type":27,"value":396},"\"GitHub PAT\"\n",{"type":21,"tag":138,"props":398,"children":399},{"class":140,"line":236},[400,405,409],{"type":21,"tag":138,"props":401,"children":402},{"style":145},[403],{"type":27,"value":404},"        description",{"type":21,"tag":138,"props":406,"children":407},{"style":151},[408],{"type":27,"value":191},{"type":21,"tag":138,"props":410,"children":411},{"style":194},[412],{"type":27,"value":413},"\"GitHub Personal Access Token for the GitHub MCP server\"\n",{"type":21,"tag":29,"props":415,"children":416},{},[417,419,425,427,432],{"type":27,"value":418},"Restart LibreChat so it picks up the env var and new MCP server configuration. In the UI, select the ",{"type":21,"tag":94,"props":420,"children":422},{"className":421},[],[423],{"type":27,"value":424},"github",{"type":27,"value":426}," MCP server; it should now connect ",{"type":21,"tag":60,"props":428,"children":429},{},[430],{"type":27,"value":431},"without",{"type":27,"value":433}," any OAuth popup.",{"type":21,"tag":435,"props":436,"children":437},"blockquote",{},[438],{"type":21,"tag":29,"props":439,"children":440},{},[441],{"type":27,"value":442},"This guide was partly generated with the help of an LLM.",{"type":21,"tag":444,"props":445,"children":446},"style",{},[447],{"type":27,"value":448},"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":7,"searchDepth":200,"depth":200,"links":450},[451],{"id":105,"depth":157,"text":452},"librechat.yaml config","markdown","content:blog:librechat-github-remote-mcp.md","content","blog/librechat-github-remote-mcp.md","blog/librechat-github-remote-mcp","md",{"body":460},{"type":18,"children":461,"toc":796},[462,466,476,496,516,525,535,662,672,676,770,785,792],{"type":21,"tag":22,"props":463,"children":464},{"id":24},[465],{"type":27,"value":8},{"type":21,"tag":29,"props":467,"children":468},{},[469,470,475],{"type":27,"value":33},{"type":21,"tag":35,"props":471,"children":473},{"href":37,"rel":472},[39],[474],{"type":27,"value":42},{"type":27,"value":44},{"type":21,"tag":29,"props":477,"children":478},{},[479,480,485,486,490,491,495],{"type":27,"value":49},{"type":21,"tag":35,"props":481,"children":483},{"href":52,"rel":482},[39],[484],{"type":27,"value":56},{"type":27,"value":58},{"type":21,"tag":60,"props":487,"children":488},{},[489],{"type":27,"value":64},{"type":27,"value":66},{"type":21,"tag":60,"props":492,"children":493},{},[494],{"type":27,"value":71},{"type":27,"value":73},{"type":21,"tag":29,"props":497,"children":498},{},[499,500,504,505,509,510,515],{"type":27,"value":78},{"type":21,"tag":60,"props":501,"children":502},{},[503],{"type":27,"value":83},{"type":27,"value":85},{"type":21,"tag":60,"props":506,"children":507},{},[508],{"type":27,"value":90},{"type":27,"value":92},{"type":21,"tag":94,"props":511,"children":513},{"className":512},[],[514],{"type":27,"value":99},{"type":27,"value":101},{"type":21,"tag":103,"props":517,"children":518},{"id":105},[519,524],{"type":21,"tag":94,"props":520,"children":522},{"className":521},[],[523],{"type":27,"value":112},{"type":27,"value":114},{"type":21,"tag":29,"props":526,"children":527},{},[528,529,534],{"type":27,"value":119},{"type":21,"tag":94,"props":530,"children":532},{"className":531},[],[533],{"type":27,"value":112},{"type":27,"value":126},{"type":21,"tag":128,"props":536,"children":537},{"className":130,"code":131,"language":132,"meta":7,"style":7},[538],{"type":21,"tag":94,"props":539,"children":540},{"__ignoreMap":7},[541,552,563,570,585,592,607,614,629,640,647],{"type":21,"tag":138,"props":542,"children":543},{"class":140,"line":141},[544,548],{"type":21,"tag":138,"props":545,"children":546},{"style":145},[547],{"type":27,"value":148},{"type":21,"tag":138,"props":549,"children":550},{"style":151},[551],{"type":27,"value":154},{"type":21,"tag":138,"props":553,"children":554},{"class":140,"line":157},[555,559],{"type":21,"tag":138,"props":556,"children":557},{"style":145},[558],{"type":27,"value":163},{"type":21,"tag":138,"props":560,"children":561},{"style":151},[562],{"type":27,"value":154},{"type":21,"tag":138,"props":564,"children":565},{"class":140,"line":170},[566],{"type":21,"tag":138,"props":567,"children":568},{"style":174},[569],{"type":27,"value":177},{"type":21,"tag":138,"props":571,"children":572},{"class":140,"line":180},[573,577,581],{"type":21,"tag":138,"props":574,"children":575},{"style":145},[576],{"type":27,"value":186},{"type":21,"tag":138,"props":578,"children":579},{"style":151},[580],{"type":27,"value":191},{"type":21,"tag":138,"props":582,"children":583},{"style":194},[584],{"type":27,"value":197},{"type":21,"tag":138,"props":586,"children":587},{"class":140,"line":200},[588],{"type":21,"tag":138,"props":589,"children":590},{"style":174},[591],{"type":27,"value":206},{"type":21,"tag":138,"props":593,"children":594},{"class":140,"line":209},[595,599,603],{"type":21,"tag":138,"props":596,"children":597},{"style":145},[598],{"type":27,"value":215},{"type":21,"tag":138,"props":600,"children":601},{"style":151},[602],{"type":27,"value":191},{"type":21,"tag":138,"props":604,"children":605},{"style":194},[606],{"type":27,"value":224},{"type":21,"tag":138,"props":608,"children":609},{"class":140,"line":227},[610],{"type":21,"tag":138,"props":611,"children":612},{"style":174},[613],{"type":27,"value":233},{"type":21,"tag":138,"props":615,"children":616},{"class":140,"line":236},[617,621,625],{"type":21,"tag":138,"props":618,"children":619},{"style":145},[620],{"type":27,"value":242},{"type":21,"tag":138,"props":622,"children":623},{"style":151},[624],{"type":27,"value":191},{"type":21,"tag":138,"props":626,"children":627},{"style":249},[628],{"type":27,"value":252},{"type":21,"tag":138,"props":630,"children":631},{"class":140,"line":255},[632,636],{"type":21,"tag":138,"props":633,"children":634},{"style":145},[635],{"type":27,"value":261},{"type":21,"tag":138,"props":637,"children":638},{"style":151},[639],{"type":27,"value":154},{"type":21,"tag":138,"props":641,"children":642},{"class":140,"line":268},[643],{"type":21,"tag":138,"props":644,"children":645},{"style":174},[646],{"type":27,"value":274},{"type":21,"tag":138,"props":648,"children":649},{"class":140,"line":277},[650,654,658],{"type":21,"tag":138,"props":651,"children":652},{"style":145},[653],{"type":27,"value":283},{"type":21,"tag":138,"props":655,"children":656},{"style":151},[657],{"type":27,"value":191},{"type":21,"tag":138,"props":659,"children":660},{"style":194},[661],{"type":27,"value":292},{"type":21,"tag":29,"props":663,"children":664},{},[665,666,671],{"type":27,"value":297},{"type":21,"tag":94,"props":667,"children":669},{"className":668},[],[670],{"type":27,"value":303},{"type":27,"value":305},{"type":21,"tag":29,"props":673,"children":674},{},[675],{"type":27,"value":310},{"type":21,"tag":128,"props":677,"children":678},{"className":130,"code":313,"language":132,"meta":7,"style":7},[679],{"type":21,"tag":94,"props":680,"children":681},{"__ignoreMap":7},[682,693,704,711,718,729,740,755],{"type":21,"tag":138,"props":683,"children":684},{"class":140,"line":141},[685,689],{"type":21,"tag":138,"props":686,"children":687},{"style":145},[688],{"type":27,"value":148},{"type":21,"tag":138,"props":690,"children":691},{"style":151},[692],{"type":27,"value":154},{"type":21,"tag":138,"props":694,"children":695},{"class":140,"line":157},[696,700],{"type":21,"tag":138,"props":697,"children":698},{"style":145},[699],{"type":27,"value":163},{"type":21,"tag":138,"props":701,"children":702},{"style":151},[703],{"type":27,"value":154},{"type":21,"tag":138,"props":705,"children":706},{"class":140,"line":170},[707],{"type":21,"tag":138,"props":708,"children":709},{"style":174},[710],{"type":27,"value":347},{"type":21,"tag":138,"props":712,"children":713},{"class":140,"line":180},[714],{"type":21,"tag":138,"props":715,"children":716},{"style":174},[717],{"type":27,"value":355},{"type":21,"tag":138,"props":719,"children":720},{"class":140,"line":200},[721,725],{"type":21,"tag":138,"props":722,"children":723},{"style":145},[724],{"type":27,"value":363},{"type":21,"tag":138,"props":726,"children":727},{"style":151},[728],{"type":27,"value":154},{"type":21,"tag":138,"props":730,"children":731},{"class":140,"line":209},[732,736],{"type":21,"tag":138,"props":733,"children":734},{"style":145},[735],{"type":27,"value":375},{"type":21,"tag":138,"props":737,"children":738},{"style":151},[739],{"type":27,"value":154},{"type":21,"tag":138,"props":741,"children":742},{"class":140,"line":227},[743,747,751],{"type":21,"tag":138,"props":744,"children":745},{"style":145},[746],{"type":27,"value":387},{"type":21,"tag":138,"props":748,"children":749},{"style":151},[750],{"type":27,"value":191},{"type":21,"tag":138,"props":752,"children":753},{"style":194},[754],{"type":27,"value":396},{"type":21,"tag":138,"props":756,"children":757},{"class":140,"line":236},[758,762,766],{"type":21,"tag":138,"props":759,"children":760},{"style":145},[761],{"type":27,"value":404},{"type":21,"tag":138,"props":763,"children":764},{"style":151},[765],{"type":27,"value":191},{"type":21,"tag":138,"props":767,"children":768},{"style":194},[769],{"type":27,"value":413},{"type":21,"tag":29,"props":771,"children":772},{},[773,774,779,780,784],{"type":27,"value":418},{"type":21,"tag":94,"props":775,"children":777},{"className":776},[],[778],{"type":27,"value":424},{"type":27,"value":426},{"type":21,"tag":60,"props":781,"children":782},{},[783],{"type":27,"value":431},{"type":27,"value":433},{"type":21,"tag":435,"props":786,"children":787},{},[788],{"type":21,"tag":29,"props":789,"children":790},{},[791],{"type":27,"value":442},{"type":21,"tag":444,"props":793,"children":794},{},[795],{"type":27,"value":448},{"title":7,"searchDepth":200,"depth":200,"links":797},[798],{"id":105,"depth":157,"text":452},{"_path":800,"_dir":7,"_draft":6,"_partial":6,"_locale":7,"title":801,"description":802,"actions":803,"excerpt":808,"body":822,"_type":453,"_id":874,"_source":455,"_file":875,"_stem":876,"_extension":458},"/about","About","Laurent Cazanove is a freelance software engineer specializing in developer experience.",[804],{"text":805,"href":806,"icon":807},"Contact","/contact","CONTACT",{"type":18,"children":809},[810],{"type":21,"tag":29,"props":811,"children":812},{},[813,815,820],{"type":27,"value":814},"Laurent Cazanove is a ",{"type":21,"tag":60,"props":816,"children":817},{},[818],{"type":27,"value":819},"freelance software engineer",{"type":27,"value":821}," specializing in developer experience.",{"type":18,"children":823,"toc":872},[824,833,859],{"type":21,"tag":29,"props":825,"children":826},{},[827,828,832],{"type":27,"value":814},{"type":21,"tag":60,"props":829,"children":830},{},[831],{"type":27,"value":819},{"type":27,"value":821},{"type":21,"tag":29,"props":834,"children":835},{},[836,838,843,845,850,852,857],{"type":27,"value":837},"He helps dev tools build great onboarding experiences through his ",{"type":21,"tag":60,"props":839,"children":840},{},[841],{"type":27,"value":842},"technical writing",{"type":27,"value":844},", ",{"type":21,"tag":60,"props":846,"children":847},{},[848],{"type":27,"value":849},"UX writing",{"type":27,"value":851},", and ",{"type":21,"tag":60,"props":853,"children":854},{},[855],{"type":27,"value":856},"full-stack development",{"type":27,"value":858}," skills.",{"type":21,"tag":29,"props":860,"children":861},{},[862,864,870],{"type":27,"value":863},"Learn more about ",{"type":21,"tag":35,"props":865,"children":867},{"href":866},"/developer-experience",[868],{"type":27,"value":869},"developer experience consulting",{"type":27,"value":871},".",{"title":7,"searchDepth":200,"depth":200,"links":873},[],"content:about.md","about.md","about",[878,885,892],{"_path":879,"title":880,"description":881,"date":882,"cover":883,"coverAlt":884},"/blog/state-of-vue-vite-2026-amsterdam-recap","State of Vue & Vite 2026: Amsterdam recap","A recap of all Vue.js and Vite ecosystem announcements from Vue.js Amsterdam 2026 conference.","2026-03-13","/images/articles/covers/state-of-vue-2022-amsterdam-recap.jpg","Evan You at the Vue Amsterdam 2022 conference",{"_path":886,"title":887,"description":888,"date":889,"cover":890,"coverAlt":891},"/blog/meilisearch-php-v2","Meilisearch PHP v2","Meilisearch PHP v2 improves developer experience thanks to PHP 8.1 features and enhanced type safety.","2026-02-20","/images/articles/covers/meilisearch-php.png","Meilisearch PHP",{"_path":893,"title":894,"description":895,"date":896,"cover":897,"coverAlt":898},"/blog/baml-nitro-vercel-deployment","Deploy BAML with a Nuxt 4 (Nitro) server BAML on Vercel Functions","Learn how to configure Nuxt 4 (Nitro) server to deploy @boundaryml/baml on Vercel Functions.","2025-12-28","/images/articles/covers/baml.jpg","BAML logo",1780998471121]