[{"data":1,"prerenderedAt":585},["ShallowReactive",2],{"navigation_docs":3,"-docs-key-features-credentials":158,"-docs-key-features-credentials-surround":580},[4,15,74,98,113],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":14},"Zeeq Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"children":19,"page":6},"Key Features","\u002Fdocs\u002Fkey-features","docs\u002F3.key-features",[20,25,30,35,40,45,50,55,59,64,69],{"title":21,"path":22,"stem":23,"icon":24},"Membership Invitations","\u002Fdocs\u002Fkey-features\u002Fmembership-invitations","docs\u002F3.key-features\u002F1.membership-invitations","i-hugeicons-cube",{"title":26,"path":27,"stem":28,"icon":29},"Command Palette","\u002Fdocs\u002Fkey-features\u002Fcommand-palette","docs\u002F3.key-features\u002F10.command-palette","i-hugeicons-search-01",{"title":31,"path":32,"stem":33,"icon":34},"Library Import and Export","\u002Fdocs\u002Fkey-features\u002Flibrary-import-export","docs\u002F3.key-features\u002F11.library-import-export","i-lucide-package-open",{"title":36,"path":37,"stem":38,"icon":39},"LLM Settings Configuration","\u002Fdocs\u002Fkey-features\u002Fllm-settings-configuration","docs\u002F3.key-features\u002F2.llm-settings-configuration","i-hugeicons-ai-magic",{"title":41,"path":42,"stem":43,"icon":44},"Agent Code Review Findings","\u002Fdocs\u002Fkey-features\u002Fagent-code-review-findings","docs\u002F3.key-features\u002F3.agent-code-review-findings","i-lucide-list-checks",{"title":46,"path":47,"stem":48,"icon":49},"Credentials & API Tokens","\u002Fdocs\u002Fkey-features\u002Fcredentials","docs\u002F3.key-features\u002F4.credentials","i-hugeicons-key-01",{"title":51,"path":52,"stem":53,"icon":54},"Manual Document Libraries","\u002Fdocs\u002Fkey-features\u002Fmanual-document-libraries","docs\u002F3.key-features\u002F5.manual-document-libraries","i-lucide-library-big",{"title":56,"path":57,"stem":58,"icon":29},"Snippet Search","\u002Fdocs\u002Fkey-features\u002Fsnippet-search","docs\u002F3.key-features\u002F6.snippet-search",{"title":60,"path":61,"stem":62,"icon":63},"Shared Prompt Fragment","\u002Fdocs\u002Fkey-features\u002Fshared-prompt-fragment","docs\u002F3.key-features\u002F7.shared-prompt-fragment","i-lucide-notebook-pen",{"title":65,"path":66,"stem":67,"icon":68},"Code Review Sources & Telemetry","\u002Fdocs\u002Fkey-features\u002Fcode-review-sources","docs\u002F3.key-features\u002F8.code-review-sources","i-hugeicons-book-01",{"title":70,"path":71,"stem":72,"icon":73},"Excluding Documents from Code Reviews","\u002Fdocs\u002Fkey-features\u002Fcode-review-document-exclusion","docs\u002F3.key-features\u002F9.code-review-document-exclusion","i-lucide-eye-off",{"title":75,"path":76,"stem":77,"children":78,"page":6},"Runtime Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F5.configuration",[79,84,89,93],{"title":80,"path":81,"stem":82,"icon":83},"Google Cloud Configuration","\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime","docs\u002F5.configuration\u002F1.gcp-runtime","i-hugeicons-google",{"title":85,"path":86,"stem":87,"icon":88},"GitHub Configuration","\u002Fdocs\u002Fconfiguration\u002Fgithub-configuration","docs\u002F5.configuration\u002F2.github-configuration","i-hugeicons-github",{"title":90,"path":91,"stem":92},"Local OpenIddict Certificates","\u002Fdocs\u002Fconfiguration\u002Flocal-openiddict-certificates","docs\u002F5.configuration\u002F3.local-openiddict-certificates",{"title":94,"path":95,"stem":96,"icon":97},"System Admin Access","\u002Fdocs\u002Fconfiguration\u002Fsystem-admin-access","docs\u002F5.configuration\u002F4.system-admin-access","i-hugeicons-shield-01",{"title":99,"path":100,"stem":101,"children":102,"page":6},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F6.metrics",[103,108],{"title":104,"path":105,"stem":106,"icon":107},"Metrics Dashboard","\u002Fdocs\u002Fmetrics\u002Fmetrics-dashboard","docs\u002F6.metrics\u002F1.metrics-dashboard","i-hugeicons-analytics-01",{"title":109,"path":110,"stem":111,"icon":112},"Metrics Pipeline","\u002Fdocs\u002Fmetrics\u002Fmetrics-pipeline","docs\u002F6.metrics\u002F2.metrics-pipeline","i-hugeicons-database-02",{"title":114,"path":115,"stem":116,"children":117,"page":6},"Design and Architecture","\u002Fdocs\u002Farchitecture","docs\u002F9.architecture",[118,123,128,133,137,141,145,150,154],{"title":119,"path":120,"stem":121,"icon":122},"Caching","\u002Fdocs\u002Farchitecture\u002Fcaching","docs\u002F9.architecture\u002F1.caching","i-lucide-database",{"title":124,"path":125,"stem":126,"icon":127},"Messaging and Queueing","\u002Fdocs\u002Farchitecture\u002Fmessaging-and-queueing","docs\u002F9.architecture\u002F2.messaging-and-queueing","i-lucide-message-square",{"title":129,"path":130,"stem":131,"icon":132},"GitHub Comment Rendering","\u002Fdocs\u002Farchitecture\u002Fgithub-comment-rendering","docs\u002F9.architecture\u002F3.github-comment-rendering","i-lucide-github",{"title":134,"path":135,"stem":136},"GitHub Integration","\u002Fdocs\u002Farchitecture\u002Fgithub-integration","docs\u002F9.architecture\u002F4.github-integration",{"title":138,"path":139,"stem":140},"LLM Settings and Secret Storage","\u002Fdocs\u002Farchitecture\u002Fllm-settings-and-secret-storage","docs\u002F9.architecture\u002F5.llm-settings-and-secret-storage",{"title":142,"path":143,"stem":144},"Organization Activation and Routes","\u002Fdocs\u002Farchitecture\u002Forganization-activation-and-routes","docs\u002F9.architecture\u002F6.organization-activation-and-routes",{"title":146,"path":147,"stem":148,"icon":149},"MCP Uploaded-Diff Code Reviews","\u002Fdocs\u002Farchitecture\u002Fmcp-uploaded-diff-code-reviews","docs\u002F9.architecture\u002F7.mcp-uploaded-diff-code-reviews","i-lucide-file-search",{"title":151,"path":152,"stem":153},"Repository Content Ingest","\u002Fdocs\u002Farchitecture\u002Frepository-content-ingest","docs\u002F9.architecture\u002F8.repository-content-ingest",{"title":155,"path":156,"stem":157},"Telemetry Ingest","\u002Fdocs\u002Farchitecture\u002Ftelemetry-ingest","docs\u002F9.architecture\u002F9.telemetry-ingest",{"id":159,"title":46,"body":160,"description":573,"extension":574,"links":575,"meta":576,"navigation":577,"path":47,"seo":578,"stem":48,"__hash__":579},"docs\u002Fdocs\u002F3.key-features\u002F4.credentials.md",{"type":161,"value":162,"toc":560},"minimark",[163,176,181,197,229,234,264,271,275,278,427,431,434,440,444,447,475,479,502,506,509,534,538,545,549,556],[164,165,166,167,171,172,175],"p",{},"Zeeq issues two kinds of user-owned credentials under ",[168,169,170],"strong",{},"Settings > Credentials",". Both are scoped to your currently active organization, so switch organizations first if you need credentials for a different org. Secrets are shown ",[168,173,174],{},"only once"," at creation and cannot be recovered later.",[177,178,180],"h2",{"id":179},"client-credentials","Client Credentials",[164,182,183,184,188,189,192,193,196],{},"Client credentials are confidential OAuth clients for machine-to-machine access. They authenticate to the OpenIddict token endpoint with a ",[185,186,187],"code",{},"client_id"," and ",[185,190,191],{},"client_secret"," and receive a short-lived access token scoped to the ",[185,194,195],{},"mcp:tools"," resource.",[198,199,200,210,216,223],"ul",{},[201,202,203,206,207],"li",{},[168,204,205],{},"Grant type:"," ",[185,208,209],{},"client_credentials",[201,211,212,215],{},[168,213,214],{},"Token lifetime:"," ~15 minutes (no refresh token; re-authenticate at the token endpoint)",[201,217,218,206,221],{},[168,219,220],{},"Scope:",[185,222,195],{},[201,224,225,228],{},[168,226,227],{},"Audience:"," the Zeeq MCP resource indicator",[230,231,233],"h3",{"id":232},"create-a-client-credential","Create a client credential",[235,236,237,247,254],"ol",{},[201,238,239,240,242,243,246],{},"Go to ",[168,241,170],{}," and choose ",[168,244,245],{},"New credential",".",[201,248,249,250,253],{},"Enter a name (for example, ",[185,251,252],{},"CI build bot",").",[201,255,256,257,188,260,263],{},"Copy the ",[168,258,259],{},"Client ID",[168,261,262],{},"Client secret"," immediately. The secret is displayed only this once.",[164,265,266,267,270],{},"The creation response also includes a sample ",[185,268,269],{},"curl"," request you can use to test the token endpoint.",[230,272,274],{"id":273},"use-the-credential","Use the credential",[164,276,277],{},"Exchange the client credentials for an access token at the token endpoint, then send the token as a bearer token to the MCP endpoint:",[279,280,285],"pre",{"className":281,"code":282,"language":283,"meta":284,"style":284},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST \"$TOKEN_URL\" \\\n  -d \"grant_type=client_credentials\" \\\n  -d \"client_id=$CLIENT_ID\" \\\n  -d \"client_secret=$CLIENT_SECRET\" \\\n  -d \"scope=mcp:tools\" \\\n  -d \"resource=$RESOURCE\"\n\ncurl -H \"Authorization: Bearer $ACCESS_TOKEN\" \"$MCP_URL\"\n","bash","",[185,286,287,316,331,348,365,379,395,402],{"__ignoreMap":284},[288,289,292,295,299,302,306,310,313],"span",{"class":290,"line":291},"line",1,[288,293,269],{"class":294},"sBMFI",[288,296,298],{"class":297},"sfazB"," -X",[288,300,301],{"class":297}," POST",[288,303,305],{"class":304},"sMK4o"," \"",[288,307,309],{"class":308},"sTEyZ","$TOKEN_URL",[288,311,312],{"class":304},"\"",[288,314,315],{"class":308}," \\\n",[288,317,319,322,324,327,329],{"class":290,"line":318},2,[288,320,321],{"class":297},"  -d",[288,323,305],{"class":304},[288,325,326],{"class":297},"grant_type=client_credentials",[288,328,312],{"class":304},[288,330,315],{"class":308},[288,332,334,336,338,341,344,346],{"class":290,"line":333},3,[288,335,321],{"class":297},[288,337,305],{"class":304},[288,339,340],{"class":297},"client_id=",[288,342,343],{"class":308},"$CLIENT_ID",[288,345,312],{"class":304},[288,347,315],{"class":308},[288,349,351,353,355,358,361,363],{"class":290,"line":350},4,[288,352,321],{"class":297},[288,354,305],{"class":304},[288,356,357],{"class":297},"client_secret=",[288,359,360],{"class":308},"$CLIENT_SECRET",[288,362,312],{"class":304},[288,364,315],{"class":308},[288,366,368,370,372,375,377],{"class":290,"line":367},5,[288,369,321],{"class":297},[288,371,305],{"class":304},[288,373,374],{"class":297},"scope=mcp:tools",[288,376,312],{"class":304},[288,378,315],{"class":308},[288,380,382,384,386,389,392],{"class":290,"line":381},6,[288,383,321],{"class":297},[288,385,305],{"class":304},[288,387,388],{"class":297},"resource=",[288,390,391],{"class":308},"$RESOURCE",[288,393,394],{"class":304},"\"\n",[288,396,398],{"class":290,"line":397},7,[288,399,401],{"emptyLinePlaceholder":400},true,"\n",[288,403,405,407,410,412,415,418,420,422,425],{"class":290,"line":404},8,[288,406,269],{"class":294},[288,408,409],{"class":297}," -H",[288,411,305],{"class":304},[288,413,414],{"class":297},"Authorization: Bearer ",[288,416,417],{"class":308},"$ACCESS_TOKEN",[288,419,312],{"class":304},[288,421,305],{"class":304},[288,423,424],{"class":308},"$MCP_URL",[288,426,394],{"class":304},[230,428,430],{"id":429},"revoke","Revoke",[164,432,433],{},"Revoke a credential from the table. Existing tokens issued to that client stop authenticating immediately, and the credential can no longer be used.",[435,436,437],"blockquote",{},[164,438,439],{},"Client credentials do not carry a user role. If a client-credential-protected route ever requires role-based authorization, that is handled separately on the backend.",[177,441,443],{"id":442},"api-tokens","API Tokens",[164,445,446],{},"API tokens are long-lived bearer tokens for scripting and CLI access. Unlike client credentials, they represent a specific user and are issued via a custom OpenIddict grant, so the user's org role is resolved live on each request.",[198,448,449,457,463,469],{},[201,450,451,206,453,456],{},[168,452,205],{},[185,454,455],{},"urn:auth:grant-type:user_token"," (custom; handled internally by Zeeq)",[201,458,459,462],{},[168,460,461],{},"Default lifetime:"," 90 days (configurable per token up to 365 days)",[201,464,465,206,467],{},[168,466,220],{},[185,468,195],{},[201,470,471,474],{},[168,472,473],{},"No refresh:"," the token is a direct bearer token; re-create it when it expires",[230,476,478],{"id":477},"create-an-api-token","Create an API token",[235,480,481,488,493,496],{},[201,482,239,483,242,485,246],{},[168,484,170],{},[168,486,487],{},"New token",[201,489,249,490,253],{},[185,491,492],{},"Local CLI",[201,494,495],{},"Optionally set an expiration in days (1–365). Defaults to 90 days.",[201,497,256,498,501],{},[168,499,500],{},"access token"," immediately. The value is displayed only this once.",[230,503,505],{"id":504},"use-the-token","Use the token",[164,507,508],{},"Send the token as a bearer token:",[279,510,512],{"className":281,"code":511,"language":283,"meta":284,"style":284},"curl -H \"Authorization: Bearer $ACCESS_TOKEN\" \"$MCP_URL\"\n",[185,513,514],{"__ignoreMap":284},[288,515,516,518,520,522,524,526,528,530,532],{"class":290,"line":291},[288,517,269],{"class":294},[288,519,409],{"class":297},[288,521,305],{"class":304},[288,523,414],{"class":297},[288,525,417],{"class":308},[288,527,312],{"class":304},[288,529,305],{"class":304},[288,531,424],{"class":308},[288,533,394],{"class":304},[177,535,537],{"id":536},"organization-scoping","Organization scoping",[164,539,540,541,544],{},"Both credential types belong to your ",[168,542,543],{},"active organization",". The active org is shown in the sidebar organization menu. To create or view credentials for another organization, switch to it first — the credentials list updates to reflect the active org.",[177,546,548],{"id":547},"dcr-clients-are-different","DCR clients are different",[164,550,551,552,555],{},"Dynamic Client Registration (DCR) clients — the public\u002FPKCE clients created by MCP coding tools like Claude Code — are managed separately through the ",[185,553,554],{},"\u002Fconnect\u002Fregister"," OAuth flow, not from this screen. When a user who belongs to more than one organization completes a DCR flow, Zeeq prompts them to choose which organization the DCR client should be scoped to before issuing the token.",[557,558,559],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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":284,"searchDepth":318,"depth":318,"links":561},[562,567,571,572],{"id":179,"depth":318,"text":180,"children":563},[564,565,566],{"id":232,"depth":333,"text":233},{"id":273,"depth":333,"text":274},{"id":429,"depth":333,"text":430},{"id":442,"depth":318,"text":443,"children":568},[569,570],{"id":477,"depth":333,"text":478},{"id":504,"depth":333,"text":505},{"id":536,"depth":318,"text":537},{"id":547,"depth":318,"text":548},"Manage OAuth client credentials and long-lived API tokens for machine and scripting access to Zeeq.","md",null,{},{"icon":49},{"title":46,"description":573},"M8hPzLlTTjtE7WMkd9CiPPfVYPhfjM-VyNqAYWkFyo8",[581,583],{"title":41,"path":42,"stem":43,"description":582,"icon":44,"children":-1},"How Zeeq loads and displays detailed automated code review findings.",{"title":51,"path":52,"stem":53,"description":584,"icon":54,"children":-1},"How teams create, manage, search, and read manually maintained Markdown libraries.",1784297365799]