Skip to main content
Glama
collaborator.ts3.92 kB
import type { GiteaClient } from '../gitea-client.js'; import type { ContextManager } from '../context-manager.js'; import { createLogger } from '../logger.js'; const logger = createLogger('tools:collaborator'); export interface CollaboratorToolsContext { client: GiteaClient; contextManager: ContextManager; } // Common parameters export interface CollaboratorParams { owner?: string; repo?: string; token?: string; } // List collaborators export interface ListCollaboratorsParams extends CollaboratorParams { page?: number; limit?: number; } export async function listCollaborators( ctx: CollaboratorToolsContext, params: ListCollaboratorsParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo }, 'Listing collaborators'); const queryParams: Record<string, string> = {}; if (params.page !== undefined) queryParams.page = String(params.page); if (params.limit !== undefined) queryParams.limit = String(params.limit); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/collaborators`, query: queryParams, token: params.token, }); return response.data; } // Check if user is collaborator export interface CheckCollaboratorParams extends CollaboratorParams { collaborator: string; } export async function checkCollaborator( ctx: CollaboratorToolsContext, params: CheckCollaboratorParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, collaborator: params.collaborator }, 'Checking collaborator'); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/collaborators/${params.collaborator}`, token: params.token, }); return response.data; } // Add or update collaborator export interface AddCollaboratorParams extends CollaboratorParams { collaborator: string; permission?: 'read' | 'write' | 'admin'; } export async function addCollaborator( ctx: CollaboratorToolsContext, params: AddCollaboratorParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, collaborator: params.collaborator }, 'Adding collaborator'); const body: any = {}; if (params.permission) body.permission = params.permission; const response = await ctx.client.request({ method: 'PUT', path: `/repos/${owner}/${repo}/collaborators/${params.collaborator}`, body, token: params.token, }); return response.data; } // Delete collaborator export async function deleteCollaborator( ctx: CollaboratorToolsContext, params: CheckCollaboratorParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, collaborator: params.collaborator }, 'Deleting collaborator'); const response = await ctx.client.request({ method: 'DELETE', path: `/repos/${owner}/${repo}/collaborators/${params.collaborator}`, token: params.token, }); return response.data; } // Get collaborator permission export async function getCollaboratorPermission( ctx: CollaboratorToolsContext, params: CheckCollaboratorParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, collaborator: params.collaborator }, 'Getting collaborator permission'); const response = await ctx.client.request({ method: 'GET', path: `/repos/${owner}/${repo}/collaborators/${params.collaborator}/permission`, token: params.token, }); return response.data; }

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/SupenBysz/gitea-mcp-tool'

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