Skip to main content
Glama
tutorials_oauth-delegation-github.md.Nq4glqCe.js8.65 kB
import{_ as i,c as a,o as t,a6 as n}from"./chunks/framework.CHl2ywxc.js";const E=JSON.parse('{"title":"Tutorial: OAuth Delegation (GitHub)","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/oauth-delegation-github.md","filePath":"tutorials/oauth-delegation-github.md","lastUpdated":1755281500000}'),e={name:"tutorials/oauth-delegation-github.md"};function l(h,s,p,k,o,r){return t(),a("div",null,s[0]||(s[0]=[n(`<h1 id="tutorial-oauth-delegation-github" tabindex="-1">Tutorial: OAuth Delegation (GitHub) <a class="header-anchor" href="#tutorial-oauth-delegation-github" aria-label="Permalink to &quot;Tutorial: OAuth Delegation (GitHub)&quot;">​</a></h1><p>Goal: Use delegated OAuth for a backend requiring GitHub OAuth.</p><h2 id="_1-create-a-github-oauth-app" tabindex="-1">1) Create a GitHub OAuth App <a class="header-anchor" href="#_1-create-a-github-oauth-app" aria-label="Permalink to &quot;1) Create a GitHub OAuth App&quot;">​</a></h2><ul><li>Homepage URL: <code>http://localhost:3000</code></li><li>Authorization callback URL: <code>http://localhost:3000/oauth/callback</code></li></ul><p>Record <code>Client ID</code> and <code>Client Secret</code>.</p><h2 id="_2-configuration" tabindex="-1">2) Configuration <a class="header-anchor" href="#_2-configuration" aria-label="Permalink to &quot;2) Configuration&quot;">​</a></h2><p><code>examples/oauth-node/config.yaml</code> (provided):</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">hosting</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> platform</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">node</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> port</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">3000</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">master_oauth</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> authorization_endpoint</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">https://example.com/oauth/authorize</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> token_endpoint</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">https://example.com/oauth/token</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> client_id</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">master-mcp</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> redirect_uri</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">http://localhost:3000/oauth/callback</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> scopes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">openid</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">servers</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">id</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">github-tools</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">local</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> auth_strategy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">delegate_oauth</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> auth_config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> provider</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">github</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> authorization_endpoint</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">https://github.com/login/oauth/authorize</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> token_endpoint</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">https://github.com/login/oauth/access_token</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> client_id</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\${GITHUB_CLIENT_ID}</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> client_secret</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">env:GITHUB_CLIENT_SECRET</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> scopes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">repo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">read:user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> port</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">4100</span></span></code></pre></div><p>Set environment variable:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>export GITHUB_CLIENT_SECRET=... # from GitHub app</span></span></code></pre></div><p>Run with:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>MASTER_CONFIG_PATH=examples/oauth-node/config.yaml npm run dev</span></span></code></pre></div><h2 id="_3-start-the-flow" tabindex="-1">3) Start the Flow <a class="header-anchor" href="#_3-start-the-flow" aria-label="Permalink to &quot;3) Start the Flow&quot;">​</a></h2><p>Navigate to:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>http://localhost:3000/oauth/authorize?server_id=github-tools</span></span></code></pre></div><p>Complete the GitHub consent, then you should see a success page. Calls to tools under <code>github-tools.*</code> will now include the delegated token.</p>`,16)]))}const c=i(e,[["render",l]]);export{E as __pageData,c as default};

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jakedismo/master-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server