@cnbcool/mcp-server
Version:
CNB MCP Server. A comprehensive MCP server that provides seamless integration to the CNB's API(https://cnb.cool), offering a wide range of tools for repository management, pipelines operations and collaboration features
104 lines (103 loc) • 4.21 kB
JavaScript
import { z } from 'zod';
import { getRepository, listGroupRepositories, listRepositories } from '../api/repository.js';
export default function registerRepoTools(server) {
server.tool('list-repositories', '获取当前用户拥有指定权限及其以上权限的仓库', {
page: z.number().default(1).describe('第几页,从1开始'),
page_size: z.number().default(20).describe('每页多少条数据'),
search: z.string().optional().describe('仓库关键字'),
filter_type: z.enum(['private', 'public', 'encrypted']).optional().describe('仓库类型'),
role: z.enum(['Reporter', 'Developer', 'Master', 'Owner']).optional().describe('最小仓库权限'),
order_by: z.enum(['created_at', 'last_updated_at', 'stars']).optional().describe('排序类型'),
desc: z.boolean().optional().describe('排序顺序')
}, async ({ page, page_size, search, filter_type, role, order_by, desc }) => {
try {
const repos = await listRepositories({ page, page_size, search, filter_type, role, order_by, desc });
return {
content: [
{
type: 'text',
text: JSON.stringify(repos, null, 2)
}
]
};
}
catch (error) {
return {
content: [
{
type: 'text',
text: `Error listing repositories: ${error instanceof Error ? error.message : String(error)}`
}
],
isError: true
};
}
});
server.tool('list-group-repositories', '获取分组里当前用户有权限的仓库', {
group: z.string().describe('组织名称'),
page: z.number().default(1).describe('第几页,从1开始'),
page_size: z.number().default(20).describe('每页多少条数据'),
search: z.string().optional().describe('仓库关键字'),
filter_type: z.enum(['private', 'public', 'encrypted']).optional().describe('仓库类型'),
descendant: z.enum(['all', 'sub', 'grand']).optional().describe('查全部、直接属于当前组织的仓库、子组织的仓库'),
order_by: z.enum(['created_at', 'last_updated_at', 'stars', 'slug_path']).optional().describe('排序类型'),
desc: z.boolean().optional().describe('排序顺序')
}, async ({ group, page, page_size, search, filter_type, descendant, order_by, desc }) => {
try {
const repos = await listGroupRepositories(group, {
page,
page_size,
search,
filter_type,
descendant,
order_by,
desc
});
return {
content: [
{
type: 'text',
text: JSON.stringify(repos, null, 2)
}
]
};
}
catch (error) {
return {
content: [
{
type: 'text',
text: `Error listing repositories: ${error instanceof Error ? error.message : String(error)}`
}
],
isError: true
};
}
});
server.tool('get-repository', '获取指定仓库信息', {
repoId: z.string().describe('仓库 ID')
}, async ({ repoId }) => {
try {
const repo = await getRepository(repoId);
return {
content: [
{
type: 'text',
text: JSON.stringify(repo, null, 2)
}
]
};
}
catch (error) {
return {
content: [
{
type: 'text',
text: `Error getting repository: ${error instanceof Error ? error.message : String(error)}`
}
],
isError: true
};
}
});
}