{"openapi":"3.1.0","info":{"title":"GitLab (BYOK) API","version":"0.1.0","description":"GitLab (BYOK) lets an AI assistant read your own GitLab data through the GitLab API with a key you supply (personal access token). Read-only: 11 tools (get_current_user, list_projects, get_project, list_project_issues, list_my_issues, list_project_merge_requests, list_my_merge_requests, list_project_pipelines, get_pipeline, list_pipeline_jobs, list_project_commits). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-gitlab.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-gitlab/docs"},"termsOfService":"https://connectorbay.com/byok-gitlab/terms"},"servers":[{"url":"https://byok-gitlab.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-gitlab/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/get_current_user":{"post":{"operationId":"get_current_user","summary":"Show the GitLab.com account the token belongs to: username, name, state, organization, job title and profile link. Use f","description":"Show the GitLab.com account the token belongs to: username, name, state, organization, job title and profile link. Use for \"Which GitLab account is my token connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_userArguments","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_projects":{"post":{"operationId":"list_projects","summary":"List GitLab projects visible to the token, with visibility, stars, forks, open issue counts and last activity. Up to 100","description":"List GitLab projects visible to the token, with visibility, stars, forks, open issue counts and last activity. Up to 100 per page. Use for \"What are my most recently active GitLab projects\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"membership":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to list only projects you are a member of.","title":"Membership"},"owned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to list only projects you own.","title":"Owned"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text matched (case-insensitive substring) against project path, name and description.","title":"Search"},"visibility":{"anyOf":[{"enum":["public","internal","private"],"type":"string"},{"type":"null"}],"default":null,"description":"Limit to public, internal or private projects.","title":"Visibility"},"order_by":{"anyOf":[{"enum":["id","name","path","created_at","updated_at","star_count","last_activity_at"],"type":"string"},{"type":"null"}],"default":"last_activity_at","description":"Sort field.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","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"}},"title":"list_projectsArguments","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_project":{"post":{"operationId":"get_project","summary":"Get one GitLab project by ID or full path: description, visibility, default branch, stars, forks, open issues and last a","description":"Get one GitLab project by ID or full path: description, visibility, default branch, stars, forks, open issues and last activity. Use for \"How many open issues does 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"}},"required":["project"],"title":"get_projectArguments","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_project_issues":{"post":{"operationId":"list_project_issues","summary":"List the issues of one project filtered by state, labels, author or search text, with labels and dates. Up to 100 per pa","description":"List the issues of one project filtered by state, labels, author or search text, with labels and dates. Up to 100 per page. Use for \"What open bug issues does 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"},"state":{"anyOf":[{"enum":["opened","closed","all"],"type":"string"},{"type":"null"}],"default":"opened","description":"Issue state.","title":"State"},"labels":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated label names that issues must have, for example 'bug,regression'.","title":"Labels"},"author_username":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only issues created by this username.","title":"Author Username"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text matched against issue title and description.","title":"Search"},"order_by":{"anyOf":[{"enum":["created_at","updated_at","priority","due_date","popularity"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort field.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","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_project_issuesArguments","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_my_issues":{"post":{"operationId":"list_my_issues","summary":"List issues across all projects that you created or that are assigned to you, filtered by state. Use for \"What GitLab is","description":"List issues across all projects that you created or that are assigned to you, filtered by state. Use for \"What GitLab issues are assigned to me\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scope":{"anyOf":[{"enum":["created_by_me","assigned_to_me","all"],"type":"string"},{"type":"null"}],"default":"assigned_to_me","description":"Whose issues: created_by_me, assigned_to_me or all issues visible to you.","title":"Scope"},"state":{"anyOf":[{"enum":["opened","closed","all"],"type":"string"},{"type":"null"}],"default":"opened","description":"Issue state.","title":"State"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text matched against issue title and description.","title":"Search"},"order_by":{"anyOf":[{"enum":["created_at","updated_at","priority","due_date","popularity"],"type":"string"},{"type":"null"}],"default":"updated_at","description":"Sort field.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","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"}},"title":"list_my_issuesArguments","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_project_merge_requests":{"post":{"operationId":"list_project_merge_requests","summary":"List the merge requests of one project by state, author or target branch, with branches, draft flag and merge status. Us","description":"List the merge requests of one project by state, author or target branch, with branches, draft flag and merge status. Use for \"Which merge requests are open on 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"},"state":{"anyOf":[{"enum":["opened","closed","locked","merged","all"],"type":"string"},{"type":"null"}],"default":"opened","description":"Merge request state.","title":"State"},"author_username":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only merge requests created by this username.","title":"Author Username"},"target_branch":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only merge requests targeting this branch.","title":"Target Branch"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text matched against title and description.","title":"Search"},"order_by":{"anyOf":[{"enum":["created_at","updated_at","merged_at","title"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort field.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","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_project_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_my_merge_requests":{"post":{"operationId":"list_my_merge_requests","summary":"List merge requests across all projects that you created, are assigned to, or are asked to review. Use for \"Which merge ","description":"List merge requests across all projects that you created, are assigned to, or are asked to review. Use for \"Which merge requests are waiting for my review on GitLab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scope":{"anyOf":[{"enum":["created_by_me","assigned_to_me","reviews_for_me","all"],"type":"string"},{"type":"null"}],"default":"reviews_for_me","description":"Whose merge requests: created_by_me, assigned_to_me, reviews_for_me or all visible to you.","title":"Scope"},"state":{"anyOf":[{"enum":["opened","closed","locked","merged","all"],"type":"string"},{"type":"null"}],"default":"opened","description":"Merge request state.","title":"State"},"order_by":{"anyOf":[{"enum":["created_at","updated_at","merged_at","title"],"type":"string"},{"type":"null"}],"default":"updated_at","description":"Sort field.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","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"}},"title":"list_my_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_project_pipelines":{"post":{"operationId":"list_project_pipelines","summary":"List a project's CI/CD pipelines, newest first, filtered by status, branch or tag, with source and timestamps. Use for \"","description":"List a project's CI/CD pipelines, newest first, filtered by status, branch or tag, with source and timestamps. Use for \"Did the latest GitLab pipelines on gitlab-org/gitlab pass\".","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"},"status":{"anyOf":[{"enum":["created","waiting_for_resource","preparing","waiting_for_callback","pending","running","success","failed","canceling","canceled","skipped","manual","scheduled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only pipelines with this status.","title":"Status"},"ref":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only pipelines for this branch or tag name.","title":"Ref"},"sha":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only pipelines for this commit SHA.","title":"Sha"},"order_by":{"anyOf":[{"enum":["id","status","ref","updated_at","user_id"],"type":"string"},{"type":"null"}],"default":"id","description":"Sort field.","title":"Order By"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction.","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_project_pipelinesArguments","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_pipeline":{"post":{"operationId":"get_pipeline","summary":"Get one pipeline with status, ref, commit, start and finish times, duration, coverage and who triggered it. Use for \"How","description":"Get one pipeline with status, ref, commit, start and finish times, duration, coverage and who triggered it. Use for \"How long did pipeline 47 take on 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"},"pipeline_id":{"description":"Numeric pipeline ID, as returned by list_project_pipelines.","title":"Pipeline Id","type":"integer"}},"required":["project","pipeline_id"],"title":"get_pipelineArguments","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_pipeline_jobs":{"post":{"operationId":"list_pipeline_jobs","summary":"List the jobs of one pipeline with stage, status, failure reason, runtime and web link, newest first. Use for \"Which job","description":"List the jobs of one pipeline with stage, status, failure reason, runtime and web link, newest first. Use for \"Which jobs failed in pipeline 47 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"},"pipeline_id":{"description":"Numeric pipeline ID, as returned by list_project_pipelines.","title":"Pipeline Id","type":"integer"},"scope":{"anyOf":[{"enum":["created","waiting_for_resource","preparing","waiting_for_callback","pending","running","success","failed","canceling","canceled","skipped","manual","scheduled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs with this status.","title":"Scope"},"include_retried":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include retried jobs as well.","title":"Include Retried"},"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","pipeline_id"],"title":"list_pipeline_jobsArguments","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_project_commits":{"post":{"operationId":"list_project_commits","summary":"List recent commits of a project branch with title, author, dates and web link, optionally filtered by file path or date","description":"List recent commits of a project branch with title, author, dates and web link, optionally filtered by file path or date. Use for \"What were the latest commits on 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_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Branch, tag or revision range; default is the project's default branch.","title":"Ref Name"},"since":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits on or after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Since"},"until":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits on or before this ISO 8601 time.","title":"Until"},"path":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits touching this file path.","title":"Path"},"author":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits by this author name.","title":"Author"},"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_project_commitsArguments","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}}}}