Skip to main content
Glama
topics.ts2.97 kB
import type { GiteaClient } from '../gitea-client.js'; import type { ContextManager } from '../context-manager.js'; import { createLogger } from '../logger.js'; const logger = createLogger('tools:topics'); export interface TopicsToolsContext { client: GiteaClient; contextManager: ContextManager; } // Common parameters export interface TopicsParams { owner?: string; repo?: string; token?: string; } // List repository topics export async function listTopics( ctx: TopicsToolsContext, params: TopicsParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo }, 'Listing repository topics'); const response = await ctx.client.request({ method: 'GET', path: `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/topics`, token: params.token, }); return response.data; } // Replace all repository topics export interface ReplaceTopicsParams extends TopicsParams { topics: string[]; } export async function replaceTopics( ctx: TopicsToolsContext, params: ReplaceTopicsParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, topics: params.topics }, 'Replacing repository topics'); const response = await ctx.client.request({ method: 'PUT', path: `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/topics`, body: { topics: params.topics }, token: params.token, }); return response.data; } // Add a topic to repository export interface AddTopicParams extends TopicsParams { topic: string; } export async function addTopic( ctx: TopicsToolsContext, params: AddTopicParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, topic: params.topic }, 'Adding topic to repository'); const response = await ctx.client.request({ method: 'PUT', path: `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/topics/${encodeURIComponent(params.topic)}`, token: params.token, }); return response.data; } // Delete a topic from repository export interface DeleteTopicParams extends TopicsParams { topic: string; } export async function deleteTopic( ctx: TopicsToolsContext, params: DeleteTopicParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); logger.info({ owner, repo, topic: params.topic }, 'Deleting topic from repository'); const response = await ctx.client.request({ method: 'DELETE', path: `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/topics/${encodeURIComponent(params.topic)}`, 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