{"openapi":"3.1.0","info":{"title":"GitLab Repository (BYOK) API","version":"0.1.0","description":"GitLab Repository (BYOK) lets an AI assistant read your own GitLab Repository data through the GitLab Repository API with a key you supply (personal access token (read_api or read_repository scope)). Read-only: 10 tools (list_branches, get_branch, list_tags, list_repository_tree, get_commit, list_commit_refs, list_commit_statuses, list_commit_merge_requests, list_contributors, compare_refs). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-gitlab-repository.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-gitlab-repository/docs"},"termsOfService":"https://connectorbay.com/byok-gitlab-repository/terms"},"servers":[{"url":"https://byok-gitlab-repository.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-gitlab-repository/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_branches":{"post":{"operationId":"list_branches","summary":"List a project's branches alphabetically with default, protected and merged flags and the head commit title and date. Up","description":"List a project's branches alphabetically with default, protected and merged flags and the head commit title and date. Up to 100 per page. Use for \"Which branches does gitlab-org/gitlab have that start with 'fix'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only branches whose name contains this text; ^term anchors at the start and term$ at the end.","title":"Search"},"sort":{"anyOf":[{"enum":["name_asc","updated_asc","updated_desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: name_asc (default), updated_asc or updated_desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project"],"title":"list_branchesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_branch":{"post":{"operationId":"get_branch","summary":"Get one branch: head commit, protected and merged flags, whether it is the default branch. Use for \"Is the 'main' branch","description":"Get one branch: head commit, protected and merged flags, whether it is the default branch. Use for \"Is the 'main' branch of gitlab-org/gitlab protected\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"branch":{"description":"Branch name, for example 'main'.","maxLength":200,"title":"Branch","type":"string"}},"required":["project","branch"],"title":"get_branchArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List a project's tags, newest first by default, with message, target commit and any linked release. Use for \"What are th","description":"List a project's tags, newest first by default, with message, target commit and any linked release. Use for \"What are the latest tags of gitlab-org/gitlab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"order_by":{"anyOf":[{"enum":["name","updated","version"],"type":"string"},{"type":"null"}],"default":"updated","description":"Order by name, updated (default) or version.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction: desc (default) or asc.","title":"Sort"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only tags whose name contains this text.","title":"Search"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project"],"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_repository_tree":{"post":{"operationId":"list_repository_tree","summary":"List the files and folders at a path of a project's repository for a branch, tag or commit, optionally recursively. Use ","description":"List the files and folders at a path of a project's repository for a branch, tag or commit, optionally recursively. Use for \"What files are in the doc folder of gitlab-org/gitlab on main\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"path":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Folder path inside the repository; omit for the root, for example 'doc/api'.","title":"Path"},"ref":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Branch, tag or commit SHA to list; the default branch when omitted.","title":"Ref"},"recursive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include all nested files and folders.","title":"Recursive"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project"],"title":"list_repository_treeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_commit":{"post":{"operationId":"get_commit","summary":"Get one commit by SHA, branch or tag name: title, author, dates, line statistics and the last pipeline run on it. Use fo","description":"Get one commit by SHA, branch or tag name: title, author, dates, line statistics and the last pipeline run on it. Use for \"How many lines did commit 61049424 of gitlab-org/gitlab change\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"sha":{"description":"Commit SHA, or a branch or tag name.","maxLength":200,"title":"Sha","type":"string"},"stats":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True (default) to include line counts.","title":"Stats"}},"required":["project","sha"],"title":"get_commitArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_commit_refs":{"post":{"operationId":"list_commit_refs","summary":"List the branches and tags that contain a commit. Use for \"Which branches and tags contain commit 61049424 in gitlab-org","description":"List the branches and tags that contain a commit. Use for \"Which branches and tags contain commit 61049424 in gitlab-org/gitlab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"sha":{"description":"Commit SHA, or a branch or tag name.","maxLength":200,"title":"Sha","type":"string"},"type":{"anyOf":[{"enum":["branch","tag","all"],"type":"string"},{"type":"null"}],"default":"all","description":"Which refs: branch, tag or all (default).","title":"Type"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project","sha"],"title":"list_commit_refsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_commit_statuses":{"post":{"operationId":"list_commit_statuses","summary":"List the CI statuses posted for a commit (latest per job by default) with name, state, stage, pipeline and timing. Use f","description":"List the CI statuses posted for a commit (latest per job by default) with name, state, stage, pipeline and timing. Use for \"What CI statuses does commit 61049424 of gitlab-org/gitlab have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"sha":{"description":"Commit SHA, or a branch or tag name.","maxLength":200,"title":"Sha","type":"string"},"ref":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Branch or tag name; the default branch when omitted.","title":"Ref"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only statuses of the job with this name.","title":"Name"},"all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include all statuses instead of the latest per job.","title":"All"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project","sha"],"title":"list_commit_statusesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_commit_merge_requests":{"post":{"operationId":"list_commit_merge_requests","summary":"List the merge requests that contain a commit, with state, branches and merge time. Use for \"Which merge request brought","description":"List the merge requests that contain a commit, with state, branches and merge time. Use for \"Which merge request brought commit 61049424 into gitlab-org/gitlab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"sha":{"description":"Commit SHA, or a branch or tag name.","maxLength":200,"title":"Sha","type":"string"},"state":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only merge requests in this state: opened, closed, locked or merged.","title":"State"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project","sha"],"title":"list_commit_merge_requestsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_contributors":{"post":{"operationId":"list_contributors","summary":"List the contributors of a project's repository by commit count with additions and deletions; email addresses are left o","description":"List the contributors of a project's repository by commit count with additions and deletions; email addresses are left out. Use for \"Who are the top committers of gitlab-org/gitlab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"ref":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Branch or tag to count on; the default branch when omitted.","title":"Ref"},"order_by":{"anyOf":[{"enum":["commits","name","email"],"type":"string"},{"type":"null"}],"default":"commits","description":"Order by commits (default), name or email.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"Sort direction: asc (default) or desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project"],"title":"list_contributorsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/compare_refs":{"post":{"operationId":"compare_refs","summary":"Compare two branches, tags or commits and list the commits between them (the diff text is left out). Use for \"What commi","description":"Compare two branches, tags or commits and list the commits between them (the diff text is left out). Use for \"What commits are on main but not on v1.0.0 in gitlab-org/gitlab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Numeric project ID, or the full path with namespace such as 'gitlab-org/gitlab' (slashes are encoded for you).","maxLength":200,"title":"Project","type":"string"},"from_ref":{"description":"Commit SHA, branch or tag to start from (the base).","maxLength":200,"title":"From Ref","type":"string"},"to":{"description":"Commit SHA, branch or tag to compare up to.","maxLength":200,"title":"To","type":"string"},"straight":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to compare the two directly (from..to) instead of from the merge base.","title":"Straight"}},"required":["project","from_ref","to"],"title":"compare_refsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}